@amcharts/amcharts4
Version:
amCharts 4
209 lines (208 loc) • 5.8 kB
TypeScript
/**
* Plugin for automatically grouping small chart slices into single group.
*/
/**
* ============================================================================
* IMPORTS
* ============================================================================
* @hidden
*/
import { Plugin } from "../../core/utils/Plugin";
import { PercentSeries } from "../../charts/series/PercentSeries";
import { FunnelSlice, IFunnelSliceProperties } from "../../charts/elements/FunnelSlice";
import { IDisposer } from "../../core/utils/Disposer";
import { List } from "../../core/utils/List";
import { Slice } from "../../core/elements/Slice";
import { Sprite } from "../../core/Sprite";
import { Optional } from "../../core/utils/Type";
import { ZoomOutButton } from "../../core/elements/ZoomOutButton";
import { Component } from "../../core/Component";
/**
* ============================================================================
* MAIN CLASS
* ============================================================================
* @hidden
*/
/**
* A plugin which automatically groups [[PercenSeries]] slices that are smaller
* than certain percent into one "Other" slice.
*
* By pushing an instance of [[SliceGrouper]] into `plugin` list of
* any [[PercentSeries]], it automatically applies the functionality.
*
* Example:
*
* ```TypeScript
* let series = chart.series.push(new am4charts.PieSeries());
* series.dataFields.valueY = "value";
* series.dataFields.dateX = "date";
*
* let grouper = series.plugins.push(new am4plugins_sliceGrouper.SliceGrouper());
* ```
* ```JavaScript
* var series = chart.series.push(new am4charts.PieSeries());
* series.dataFields.valueY = "value";
* series.dataFields.dateX = "date";
*
* var grouper = series.plugins.push(new am4plugins_sliceGrouper.SliceGrouper());
* ```
* ```JSON
* {
* // ...
* "series": [{
* // ...
* }, {
* "type": "PieSeries",
* "dataFields": {
* "valueY": "value",
* "dateX": "date"
* },
* "plugins": [{
* "type": "SliceGrouper"
* }]
* }]
* }
* ```
*
* @since 4.3.11
*/
export declare class SliceGrouper extends Plugin {
/**
* A series object that will need its slices grouped.
*/
target: Optional<PercentSeries>;
/**
* A reference to "Other" slice.
*/
groupSlice: Sprite;
/**
* A list of small slices that do not satisfy `threshold`.
*/
smallSlices: List<Sprite | Slice | FunnelSlice>;
/**
* A list of big slices that do not satisfy `threshold`.
*/
bigSlices: List<Sprite | Slice | FunnelSlice>;
/**
* A name to use for the "Other" slice.
*
* @default "Other"
*/
groupName: string;
/**
* Custom properties to apply to the "Other" slice.
*
* @since 4.5.3
* @type {IFunnelSliceProperties}
*/
groupProperties: IFunnelSliceProperties;
/**
* If set to `true` the legend will be synced to show currently visible
* slices only.
*
* @defaylt false
*/
syncLegend: boolean;
/**
* Threshold percent.
*/
protected _threshold: number;
/**
* Maximum number of slices.
*/
protected _limit: Optional<number>;
/**
* Zoom out button. Shown when "Other" slice is broken down to zoom back
* out to "Other".
*/
protected _zoomOutButton: ZoomOutButton;
/**
* Disposer for click events.
*/
protected _clickDisposers: Array<IDisposer>;
/**
* What happens when "Other" slice is cicked.
*/
protected _clickBehavior: "none" | "break" | "zoom";
protected _ignoreDataUpdate: boolean;
/**
* Is group slice currently closed or expanded?
*/
protected _closed: boolean;
protected _dataProvider: Component;
/**
* Constructor
*/
constructor();
init(): void;
/**
* Decorates series with required events and adapters used to hijack its
* data.
*/
private processSeries;
/**
* Initializes group slice.
*/
private initSlices;
/**
* Toggles group on.
*/
private toggleGroupOn;
/**
* Toggles group off.
*/
private toggleGroupOff;
/**
* Percent threshold which slices to group. If a slice is less than
* `threshold` percent, it will be moved into "Other" group.
*
* @default 5
* @param value Threshold
*/
/**
* @return Threshold
*/
threshold: number;
/**
* Maximum number of ungrouped slices to show. Any slice beyond `limit` will
* go into the "Other" group.
*
* NOTE: if `limit` is set, `threshold` setting will be ignored.
*
* @default undefined
* @since 4.9.14
* @param value Limit
*/
/**
* @return Limit
*/
limit: number;
/**
* An instance of [[ZoomOutButton]] that is shown when "Other" slice is
* broken down, to get back to grouped state.
*
* @param value Button
*/
/**
* @return Button
*/
zoomOutButton: ZoomOutButton;
/**
* What happens when "Other" slice is clicked/tapped:
*
* * "none": nothing (default)
* * "break": the slice is broken down into actual slices it consists of
* * "zoom": actual small slices are shown and the rest of the slices are hidden
*
* @param value Click behavior
*/
/**
* @returns Click behavior
*/
clickBehavior: "none" | "break" | "zoom";
/**
* Disposes the element
*/
dispose(): void;
private disposeClickEvents;
}