import {Dispatcher} from "../mmviz-dispatch/index"; let dispatcher: Dispatcher = Dispatcher.getInstance(); export function addLegendItemToggleBehavior(parentSelector, selector){ const selectorAll = parentSelector + " " + selector + " .legend-item", legendItems = document.querySelectorAll(selectorAll) ; Array.prototype.forEach.call(legendItems, (item) => { item.addEventListener("click", function(e) { let payload : any = { parentSelector: parentSelector, selector: selector, data: { key: this.dataset.key, variable: this.dataset.variable, value: this.dataset.value, valueattr: this.dataset.valueattr } }; dispatcher.notify("click", payload); }); }); } export function addLegendItemToggleResponderBehavior(chart, legendSelector, dataPipeline, dataModelMaker){ const chartLegendSelector = "toggle_" + chart.selector + legendSelector, legendToggleResponder = (payload) => { if ( payload.parentSelector === chart.selector && payload.selector === legendSelector ) { const key = payload.data.key, variable = payload.data.variable, value = payload.data.value, valueAttr = payload.data.valueattr, transformKey = "legend-toggle-" + variable + "-" + value, hasTransform = dataPipeline.hasTransformation(transformKey) ; let state = "on"; if (!hasTransform){ dataPipeline.addFilterTransform((d) => d[variable] !== value, transformKey); state = "off"; chart.doMapColorScale = false; } else { dataPipeline.removeTransformByKey(transformKey); chart.doMapColorScale = true; } chart.dataModel = dataModelMaker(); chart.updateView(); chart.chartView.setLegendItemState(key, valueAttr, state); } }; dispatcher.subscribe("click", chartLegendSelector, legendToggleResponder); }