Skip to main content
Module

x/billboardjs/Chart/api/show.ts

πŸ“Š Re-usable, easy interface JavaScript chart library based on D3.js
Go to Latest
File
/** * Copyright (c) 2017 ~ present NAVER Corp. * billboard.js project is licensed under the MIT license */import {callFn, endall} from "../../module/util";
/** * Show/Hide data series * @param {boolean} show Show or hide * @param {Array} targetIdsValue Target id values * @param {object} options Options * @private */function showHide(show: boolean, targetIdsValue: string[], options: any): void { const $$ = this.internal; const targetIds = $$.mapToTargetIds(targetIdsValue); const hiddenIds = $$.state.hiddenTargetIds .map(v => targetIds.indexOf(v) > -1 && v) .filter(Boolean);
$$.state.toggling = true;
$$[`${show ? "remove" : "add"}HiddenTargetIds`](targetIds);
const targets = $$.$el.svg.selectAll($$.selectorTargets(targetIds)); const opacity = show ? null : "0";
if (show && hiddenIds.length) { targets.style("display", null); callFn($$.config.data_onshown, this, hiddenIds); }
$$.$T(targets) .style("opacity", opacity, "important") .call(endall, () => { // https://github.com/naver/billboard.js/issues/1758 if (!show && hiddenIds.length === 0) { targets.style("display", "none"); callFn($$.config.data_onhidden, this, targetIds); }
targets.style("opacity", opacity); });
options.withLegend && $$[`${show ? "show" : "hide"}Legend`](targetIds);
$$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true });
$$.state.toggling = false;}
export default { /** * Show data series on chart * @function show * @instance * @memberof Chart * @param {string|Array} [targetIdsValue] The target id value. * @param {object} [options] The object can consist with following members:<br> * * | Key | Type | default | Description | * | --- | --- | --- | --- | * | withLegend | boolean | false | whether or not display legend | * * @example * // show 'data1' * chart.show("data1"); * * // show 'data1' and 'data3' * chart.show(["data1", "data3"]); */ show(targetIdsValue?: string[] | string, options = {}): void { showHide.call(this, true, targetIdsValue, options); },
/** * Hide data series from chart * @function hide * @instance * @memberof Chart * @param {string|Array} [targetIdsValue] The target id value. * @param {object} [options] The object can consist with following members:<br> * * | Key | Type | default | Description | * | --- | --- | --- | --- | * | withLegend | boolean | false | whether or not display legend | * * @example * // hide 'data1' * chart.hide("data1"); * * // hide 'data1' and 'data3' * chart.hide(["data1", "data3"]); */ hide(targetIdsValue?: string[], options = {}): void { showHide.call(this, false, targetIdsValue, options); },
/** * Toggle data series on chart. When target data is hidden, it will show. If is shown, it will hide in vice versa. * @function toggle * @instance * @memberof Chart * @param {string|Array} [targetIds] The target id value. * @param {object} [options] The object can consist with following members:<br> * * | Key | Type | default | Description | * | --- | --- | --- | --- | * | withLegend | boolean | false | whether or not display legend | * * @example * // toggle 'data1' * chart.toggle("data1"); * * // toggle 'data1' and 'data3' * chart.toggle(["data1", "data3"]); */ toggle(targetIds: string|string[], options = {}): void { const $$ = this.internal; const targets = {show: <string[]> [], hide: <string[]> []};
// sort show & hide target ids $$.mapToTargetIds(targetIds) .forEach((id: string) => targets[$$.isTargetToShow(id) ? "hide" : "show"].push(id));
// perform show & hide task separately // https://github.com/naver/billboard.js/issues/454 targets.show.length && this.show(targets.show, options); targets.hide.length && setTimeout(() => this.hide(targets.hide, options), 0); }};