{"version":3,"file":"range-state.js","sourceRoot":"","sources":["../../../../src/interaction/action/element/range-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { each } from '@antv/util';\nimport Element from '../../../geometry/element/';\nimport {\n getElements,\n getIntersectElements,\n getMaskedElements,\n getSiblingMaskElements,\n getSilbings,\n isInRecords,\n isMask,\n} from '../util';\nimport StateBase from './state-base';\n\n/**\n * @ignore\n * 区域设置状态的基础 Action\n */\nclass ElementRangeState extends StateBase {\n private startPoint = null;\n private endPoint = null;\n private isStarted: boolean = false;\n /**\n * 是否作用于当前 view 的 siblings,默认是 false 仅作用于自己\n */\n protected effectSiblings = false;\n /**\n * 是否受 element 的数据影响,还是受包围盒的影响\n */\n protected effectByRecord = false;\n // 获取当前的位置\n private getCurrentPoint() {\n const event = this.context.event;\n return {\n x: event.x,\n y: event.y,\n };\n }\n\n /**\n * 开始,记录开始选中的位置\n */\n public start() {\n this.clear(); // 开始的时候清理之前的状态\n this.startPoint = this.getCurrentPoint();\n this.isStarted = true;\n }\n\n protected getIntersectElements() {\n let elements = null;\n if (isMask(this.context)) {\n elements = getMaskedElements(this.context, 10);\n } else {\n const startPoint = this.startPoint;\n const endPoint = this.isStarted ? this.getCurrentPoint() : this.endPoint;\n // 如果没有开始,则不允许范围设置状态,保护性质\n if (!startPoint || !endPoint) {\n return;\n }\n // 计算框选区域\n const box = {\n minX: Math.min(startPoint.x, endPoint.x),\n minY: Math.min(startPoint.y, endPoint.y),\n maxX: Math.max(startPoint.x, endPoint.x),\n maxY: Math.max(startPoint.y, endPoint.y),\n };\n // this.clear(); // 不全部清理,会导致闪烁\n const view = this.context.view;\n elements = getIntersectElements(view, box);\n }\n return elements;\n }\n /**\n * 选中\n */\n public setStateEnable(enable: boolean) {\n if (this.effectSiblings && !this.effectByRecord) {\n this.setSiblingsState(enable);\n } else {\n const allElements = getElements(this.context.view);\n const elements = this.getIntersectElements();\n if (elements && elements.length) {\n if (this.effectByRecord) {\n this.setSiblingsStateByRecord(elements, enable);\n } else {\n this.setElementsState(elements, enable, allElements);\n }\n } else {\n this.clear();\n }\n }\n }\n // 根据选中的 element 的数据进行设置状态\n private setSiblingsStateByRecord(elements, enable) {\n const view = this.context.view;\n const siblings = getSilbings(view);\n const records = elements.map((el) => {\n return el.getModel().data;\n });\n const xFiled = view.getXScale().field;\n const yField = view.getYScales()[0].field;\n each(siblings, (sibling) => {\n const allElements = getElements(sibling);\n const effectElements = allElements.filter((el) => {\n const record = el.getModel().data;\n return isInRecords(records, record, xFiled, yField);\n });\n this.setElementsState(effectElements, enable, allElements);\n });\n }\n\n // 设置兄弟 view 的状态\n private setSiblingsState(enable: boolean) {\n const view = this.context.view;\n const siblings = getSilbings(view);\n if (isMask(this.context)) {\n // 受 mask 影响\n each(siblings, (sibling) => {\n const allElements = getElements(sibling);\n const effectElements = getSiblingMaskElements(this.context, sibling, 10);\n if (effectElements && effectElements.length) {\n this.setElementsState(effectElements, enable, allElements);\n } else {\n this.clearViewState(sibling);\n }\n });\n }\n }\n\n protected setElementsState(elements: Element[], enable, allElements: Element[]) {\n each(allElements, (el) => {\n if (!elements.includes(el)) {\n this.setElementState(el, false);\n } else {\n this.setElementState(el, enable);\n }\n });\n }\n\n /**\n * 结束\n */\n public end() {\n this.isStarted = false;\n this.endPoint = this.getCurrentPoint();\n }\n\n // 复写 clear\n public clear() {\n const view = this.context.view;\n // 判断是否影响 siblings\n if (this.effectSiblings) {\n const siblings = getSilbings(view);\n each(siblings, (sibling) => {\n this.clearViewState(sibling);\n });\n } else {\n this.clearViewState(view);\n }\n }\n}\n\nexport default ElementRangeState;\n"]}