@visactor/vchart 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.js +227 -182
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart-transformer.js +11 -3
- package/cjs/chart/base/base-chart-transformer.js.map +1 -1
- package/cjs/component/geo/geo-coordinate.js +1 -1
- package/cjs/component/geo/geo-coordinate.js.map +1 -1
- package/cjs/component/interface/type.d.ts +0 -8
- package/cjs/component/interface/type.js +3 -11
- package/cjs/component/interface/type.js.map +1 -1
- package/cjs/component/label/label.js +1 -1
- package/cjs/component/label/label.js.map +1 -1
- package/cjs/component/legend/discrete/legend.js.map +1 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/event/event-dispatcher.js +2 -1
- package/cjs/event/index.js +1 -2
- package/cjs/interaction/trigger.js +3 -2
- package/cjs/interaction/trigger.js.map +1 -1
- package/cjs/model/base-model.d.ts +1 -0
- package/cjs/model/base-model.js +5 -1
- package/cjs/model/base-model.js.map +1 -1
- package/cjs/model/interface.d.ts +2 -0
- package/cjs/model/interface.js.map +1 -1
- package/cjs/plugin/chart/media-query/interface/spec.d.ts +4 -4
- package/cjs/plugin/chart/media-query/interface/spec.js.map +1 -1
- package/cjs/plugin/chart/media-query/media-query.d.ts +4 -4
- package/cjs/plugin/chart/media-query/media-query.js +15 -14
- package/cjs/plugin/chart/media-query/media-query.js.map +1 -1
- package/cjs/plugin/chart/media-query/util/filter.d.ts +2 -1
- package/cjs/plugin/chart/media-query/util/filter.js +21 -27
- package/cjs/plugin/chart/media-query/util/filter.js.map +1 -1
- package/cjs/util/spec/clone-deep.d.ts +1 -1
- package/cjs/util/spec/clone-deep.js +2 -2
- package/cjs/util/spec/clone-deep.js.map +1 -1
- package/esm/chart/base/base-chart-transformer.js +11 -3
- package/esm/chart/base/base-chart-transformer.js.map +1 -1
- package/esm/component/geo/geo-coordinate.js +1 -1
- package/esm/component/geo/geo-coordinate.js.map +1 -1
- package/esm/component/interface/type.d.ts +0 -8
- package/esm/component/interface/type.js +0 -13
- package/esm/component/interface/type.js.map +1 -1
- package/esm/component/label/label.js +1 -1
- package/esm/component/label/label.js.map +1 -1
- package/esm/component/legend/discrete/legend.js.map +1 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/event/event-dispatcher.js +2 -1
- package/esm/event/index.js +1 -2
- package/esm/interaction/trigger.js +3 -2
- package/esm/interaction/trigger.js.map +1 -1
- package/esm/model/base-model.d.ts +1 -0
- package/esm/model/base-model.js +5 -1
- package/esm/model/base-model.js.map +1 -1
- package/esm/model/interface.d.ts +2 -0
- package/esm/model/interface.js.map +1 -1
- package/esm/plugin/chart/media-query/interface/spec.d.ts +4 -4
- package/esm/plugin/chart/media-query/interface/spec.js.map +1 -1
- package/esm/plugin/chart/media-query/media-query.d.ts +4 -4
- package/esm/plugin/chart/media-query/media-query.js +15 -14
- package/esm/plugin/chart/media-query/media-query.js.map +1 -1
- package/esm/plugin/chart/media-query/util/filter.d.ts +2 -1
- package/esm/plugin/chart/media-query/util/filter.js +20 -27
- package/esm/plugin/chart/media-query/util/filter.js.map +1 -1
- package/esm/util/spec/clone-deep.d.ts +1 -1
- package/esm/util/spec/clone-deep.js +2 -2
- package/esm/util/spec/clone-deep.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interaction/trigger.ts"],"names":[],"mappings":"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","file":"trigger.js","sourcesContent":["import { Event } from '../event/event';\nimport { getDefaultInteractionConfigByMode } from './config';\nimport { isBoolean, isObject, array } from '@visactor/vutils';\nimport { mergeSpec } from '../util/spec/merge-spec';\n\nimport type { IMark } from '../mark/interface';\nimport type { BaseEventParams, EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption, ITriggerSpec } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../constant';\n\nexport class Trigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _spec: ITriggerSpec;\n protected _option: ITriggerOption;\n\n protected _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n protected _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n protected _fields: string[] | null = null;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n\n constructor(spec: ITriggerSpec, option: ITriggerOption) {\n this._spec = spec;\n this._option = option;\n this.event = new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n this._fields = [...fields];\n }\n\n registerMark(mark: IMark): void {\n this._marks.addMark(mark);\n if (this._hover.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_HOVER, mark);\n }\n if (this._select.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_SELECTED, mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n this._marks.clear();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n const { enable: hoverEnable, trigger: hoverTrigger, triggerOff: hoverTriggerOff } = this._hover;\n const { enable: selectEnable, trigger: selectTrigger, triggerOff: selectTriggerOff } = this._select;\n if (hoverEnable) {\n // 进行 hover 交互相关的事件绑定\n array(hoverTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.chart }, this.onHover as EventCallback<EventParams>);\n });\n if (hoverTriggerOff && hoverTriggerOff !== 'none') {\n array(hoverTriggerOff).forEach(trigger => {\n event.on(\n trigger,\n { level: Event_Bubble_Level.vchart, source: Event_Source_Type.chart },\n this.onUnHover as EventCallback<EventParams>\n );\n });\n }\n }\n\n if (selectEnable) {\n // 进行 select 交互相关的事件绑定\n array(selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onSelect as EventCallback<EventParams>);\n });\n if (selectTriggerOff && selectTriggerOff !== 'none') {\n array(selectTriggerOff).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onUnSelect as EventCallback<EventParams>);\n });\n }\n // default triggerOff: active without mark , unselected\n if (!selectTriggerOff) {\n array(selectTriggerOff ?? selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.vchart }, this.onUnSelect as EventCallback<EventParams>);\n });\n }\n }\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n const defaultConfig = getDefaultInteractionConfigByMode(mode);\n this._hover = { ...defaultConfig?.hover };\n this._select = { ...defaultConfig?.select };\n\n const hoverSpec = this._spec.hover;\n if (isBoolean(hoverSpec)) {\n this._hover.enable = hoverSpec;\n } else if (isObject(hoverSpec)) {\n this._hover.enable = true;\n this._hover = mergeSpec(this._hover, hoverSpec);\n }\n\n const selectSpec = this._spec.select;\n if (isBoolean(selectSpec)) {\n this._select.enable = selectSpec;\n } else if (isObject(selectSpec)) {\n this._select.enable = true;\n this._select = mergeSpec(this._select, selectSpec);\n }\n }\n\n private onHover = (params: BaseEventParams) => {\n if (this.filterEventMark(params)) {\n this.hoverItem(params);\n } else {\n this.unhoverItem();\n }\n };\n\n private onUnHover = (params: BaseEventParams) => {\n if (this.filterEventMark(params) || this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)) {\n return;\n }\n if (this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0]) {\n this.unhoverItem();\n }\n };\n\n private onSelect = (params: BaseEventParams) => {\n this.handleSingleEventSelect(params);\n };\n\n private onUnSelect = (params: BaseEventParams) => {\n if (!this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.clearSelectedItems();\n }\n };\n\n // hover\n protected hoverItem(params: BaseEventParams): void {\n const { datum } = params;\n const lastEl = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0];\n if (params.item === lastEl) {\n return;\n }\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_HOVER, params.item);\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_HOVER);\n this.event.emit('hovered', {\n model: this._option.model,\n value: [datum]\n });\n }\n\n protected unhoverItem(): void {\n const lastHoveredDatums = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_HOVER);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_HOVER, true);\n\n this.event.emit('unhovered', {\n model: this._option.model,\n value: lastHoveredDatums\n });\n }\n\n protected handleSingleEventHover(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n this.hoverItem(params);\n } else if (\n this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0] &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)\n ) {\n this.unhoverItem();\n }\n }\n\n // select\n protected selectItems(datums: any[]): void {\n this.event.emit('selected', {\n model: this._option.model,\n value: datums\n });\n }\n\n protected clearSelectedItems() {\n const lastSelectedItem = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_SELECTED, true);\n\n this.event.emit('unselected', {\n model: this._option.model,\n value: lastSelectedItem\n });\n }\n\n protected unselectItems(params: BaseEventParams): void {\n this.interaction.removeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n this.event.emit('unselected', {\n model: this._option.model,\n value: params.item\n });\n }\n\n protected handleSingleEventSelect(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n if (params.item.getStates().includes(STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.unselectItems(params);\n } else {\n switch (this._select.mode) {\n case 'multiple':\n this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n break;\n case 'single':\n default:\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n }\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_SELECTED);\n const items = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.selectItems(items);\n }\n } else if (\n // 不做已选内容的判断,因为选中的元素可能由用户 API 控制\n // this._selectedItems.length > 0 &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)\n ) {\n this.clearSelectedItems();\n }\n }\n\n // util\n protected filterEventMark(params: BaseEventParams): boolean {\n return !!(params.mark && this._marks.includes(params.mark));\n }\n\n protected isDatumEqual(datumA: any, datumB: any): boolean {\n const fields = this._fields ? this._fields : Object.keys(datumA);\n return fields.every(f => datumA[f] === datumB[f]);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interaction/trigger.ts"],"names":[],"mappings":"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","file":"trigger.js","sourcesContent":["import { Event } from '../event/event';\nimport { getDefaultInteractionConfigByMode } from './config';\nimport { isBoolean, isObject, array } from '@visactor/vutils';\nimport { mergeSpec } from '../util/spec/merge-spec';\n\nimport type { IMark } from '../mark/interface';\nimport type { BaseEventParams, EventCallback, EventParams, IEvent } from '../event/interface';\nimport type { IHoverSpec, IInteraction, ISelectSpec, ITrigger, ITriggerOption, ITriggerSpec } from './interface';\nimport type { RenderMode } from '../typings/spec';\nimport { MarkSet } from '../mark/mark-set';\nimport { STATE_VALUE_ENUM } from '../compile/mark/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../constant';\n\nexport class Trigger implements ITrigger {\n // 事件\n readonly event: IEvent;\n\n protected readonly interaction: IInteraction;\n\n protected _spec: ITriggerSpec;\n protected _option: ITriggerOption;\n\n protected _hover: IHoverSpec;\n get hover() {\n return this._hover;\n }\n protected _select: ISelectSpec;\n get select() {\n return this._select;\n }\n\n protected _fields: string[] | null = null;\n protected _marks: MarkSet = new MarkSet();\n protected _markReverse: MarkSet = new MarkSet();\n\n constructor(spec: ITriggerSpec, option: ITriggerOption) {\n this._spec = spec;\n this._option = option;\n this.event = new Event(option.eventDispatcher, option.mode);\n this.interaction = option.interaction;\n this.initConfig(option.mode);\n }\n\n setStateKeys(fields: string[]): void {\n this._fields = [...fields];\n }\n\n registerMark(mark: IMark): void {\n this._marks.addMark(mark);\n if (this._hover.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_HOVER, mark);\n }\n if (this._select.enable) {\n this.interaction.registerMark(STATE_VALUE_ENUM.STATE_SELECTED, mark);\n }\n }\n\n init(): void {\n this.initEvent();\n }\n\n release(): void {\n this.releaseEvent();\n this._marks.clear();\n }\n\n // event\n protected initEvent() {\n const event = this.event;\n const { enable: hoverEnable, trigger: hoverTrigger, triggerOff: hoverTriggerOff } = this._hover;\n const { enable: selectEnable, trigger: selectTrigger, triggerOff: selectTriggerOff } = this._select;\n if (hoverEnable) {\n // 进行 hover 交互相关的事件绑定\n array(hoverTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.chart }, this.onHover as EventCallback<EventParams>);\n });\n if (hoverTriggerOff && hoverTriggerOff !== 'none') {\n array(hoverTriggerOff).forEach(trigger => {\n event.on(\n trigger,\n { level: Event_Bubble_Level.vchart, source: Event_Source_Type.chart },\n this.onUnHover as EventCallback<EventParams>\n );\n });\n }\n }\n\n if (selectEnable) {\n // 进行 select 交互相关的事件绑定\n array(selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onSelect as EventCallback<EventParams>);\n });\n if (selectTriggerOff && selectTriggerOff !== 'none') {\n array(selectTriggerOff).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.mark }, this.onUnSelect as EventCallback<EventParams>);\n });\n }\n // default triggerOff: active without mark , unselected\n if (!selectTriggerOff) {\n array(selectTriggerOff ?? selectTrigger).forEach(trigger => {\n event.on(trigger, { level: Event_Bubble_Level.vchart }, this.onUnSelect as EventCallback<EventParams>);\n });\n }\n }\n }\n\n protected releaseEvent(): void {\n this.event.release();\n }\n\n private initConfig(mode: RenderMode): void {\n const defaultConfig = getDefaultInteractionConfigByMode(mode);\n this._hover = { ...defaultConfig?.hover };\n this._select = { ...defaultConfig?.select };\n\n const hoverSpec = this._spec.hover;\n if (isBoolean(hoverSpec)) {\n this._hover.enable = hoverSpec;\n } else if (isObject(hoverSpec)) {\n this._hover.enable = true;\n this._hover = mergeSpec(this._hover, hoverSpec);\n }\n\n const selectSpec = this._spec.select;\n if (isBoolean(selectSpec)) {\n this._select.enable = selectSpec;\n } else if (isObject(selectSpec)) {\n this._select.enable = true;\n this._select = mergeSpec(this._select, selectSpec);\n }\n }\n\n private onHover = (params: BaseEventParams) => {\n if (this.filterEventMark(params)) {\n this.hoverItem(params);\n } else {\n this.unhoverItem();\n }\n };\n\n private onUnHover = (params: BaseEventParams) => {\n if (this.filterEventMark(params) || this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)) {\n return;\n }\n if (this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0]) {\n this.unhoverItem();\n }\n };\n\n private onSelect = (params: BaseEventParams) => {\n this.handleSingleEventSelect(params);\n };\n\n private onUnSelect = (params: BaseEventParams) => {\n if (!this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.clearSelectedItems();\n }\n };\n\n // hover\n protected hoverItem(params: BaseEventParams): void {\n const { datum } = params;\n const lastEl = this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0];\n if (params.item === lastEl) {\n return;\n }\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_HOVER, params.item);\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_HOVER);\n this.event.emit('hovered', {\n model: this._option.model,\n value: [datum]\n });\n }\n\n protected unhoverItem(): void {\n const lastHoveredDatums = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_HOVER);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_HOVER, true);\n\n this.event.emit('unhovered', {\n model: this._option.model,\n value: lastHoveredDatums\n });\n }\n\n protected handleSingleEventHover(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n this.hoverItem(params);\n } else if (\n this.interaction.getEventElement(STATE_VALUE_ENUM.STATE_HOVER)[0] &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_HOVER)\n ) {\n this.unhoverItem();\n }\n }\n\n // select\n protected selectItems(datums: any[]): void {\n this.event.emit('selected', {\n model: this._option.model,\n value: datums\n });\n }\n\n protected clearSelectedItems() {\n const lastSelectedItem = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.interaction.clearEventElement(STATE_VALUE_ENUM.STATE_SELECTED, true);\n\n this.event.emit('unselected', {\n model: this._option.model,\n value: lastSelectedItem\n });\n }\n\n protected unselectItems(params: BaseEventParams): void {\n const { triggerOff } = this._select;\n if (triggerOff !== 'none') {\n this.interaction.removeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n this.event.emit('unselected', {\n model: this._option.model,\n value: params.item\n });\n }\n }\n\n protected handleSingleEventSelect(params: BaseEventParams): void {\n if (this.filterEventMark(params)) {\n if (params.item.getStates().includes(STATE_VALUE_ENUM.STATE_SELECTED)) {\n this.unselectItems(params);\n } else {\n switch (this._select.mode) {\n case 'multiple':\n this.interaction.addEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n break;\n case 'single':\n default:\n this.interaction.exchangeEventElement(STATE_VALUE_ENUM.STATE_SELECTED, params.item);\n }\n this.interaction.reverseEventElement(STATE_VALUE_ENUM.STATE_SELECTED);\n const items = this.interaction.getEventElementData(STATE_VALUE_ENUM.STATE_SELECTED);\n this.selectItems(items);\n }\n } else if (\n // 不做已选内容的判断,因为选中的元素可能由用户 API 控制\n // this._selectedItems.length > 0 &&\n !this.interaction.filterEventMark(params, STATE_VALUE_ENUM.STATE_SELECTED)\n ) {\n this.clearSelectedItems();\n }\n }\n\n // util\n protected filterEventMark(params: BaseEventParams): boolean {\n return !!(params.mark && this._marks.includes(params.mark));\n }\n\n protected isDatumEqual(datumA: any, datumB: any): boolean {\n const fields = this._fields ? this._fields : Object.keys(datumA);\n return fields.every(f => datumA[f] === datumB[f]);\n }\n}\n"]}
|
|
@@ -14,6 +14,7 @@ export declare abstract class BaseModel<T extends IModelSpec> extends Compilable
|
|
|
14
14
|
protected _spec: T;
|
|
15
15
|
getSpec(): T;
|
|
16
16
|
getSpecPath(): (string | number)[];
|
|
17
|
+
getSpecInfoPath(): (string | number)[];
|
|
17
18
|
readonly type: string;
|
|
18
19
|
readonly modelType: string;
|
|
19
20
|
readonly id: number;
|
package/cjs/model/base-model.js
CHANGED
|
@@ -13,6 +13,10 @@ class BaseModel extends compilable_base_1.CompilableBase {
|
|
|
13
13
|
getSpecPath() {
|
|
14
14
|
return this._option.specPath;
|
|
15
15
|
}
|
|
16
|
+
getSpecInfoPath() {
|
|
17
|
+
var _a;
|
|
18
|
+
return null !== (_a = this._option.specInfoPath) && void 0 !== _a ? _a : this._option.specPath;
|
|
19
|
+
}
|
|
16
20
|
getData() {
|
|
17
21
|
return this._data;
|
|
18
22
|
}
|
|
@@ -155,7 +159,7 @@ class BaseModel extends compilable_base_1.CompilableBase {
|
|
|
155
159
|
getSpecInfo() {
|
|
156
160
|
var _a, _b, _c;
|
|
157
161
|
const specInfo = null !== (_c = null === (_b = (_a = this._option).getSpecInfo) || void 0 === _b ? void 0 : _b.call(_a)) && void 0 !== _c ? _c : {};
|
|
158
|
-
return (0, vutils_extension_1.getProperty)(specInfo, this.
|
|
162
|
+
return (0, vutils_extension_1.getProperty)(specInfo, this.getSpecInfoPath());
|
|
159
163
|
}
|
|
160
164
|
}
|
|
161
165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model/base-model.ts"],"names":[],"mappings":"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","file":"base-model.js","sourcesContent":["import { createID } from '../util/id';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n IModelMarkInfo,\n IModelSpecInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type {\n Datum,\n StateValueType,\n ConvertToMarkStyleSpec,\n ICommonSpec,\n StringOrNumber,\n IRect,\n ILayoutRect\n} from '../typings';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport { MarkSet } from '../mark/mark-set';\nimport type { ILayoutItem } from '../layout/interface';\nimport { CompilableBase } from '../compile/compilable-base';\nimport { PREFIX } from '../constant/base';\nimport { BaseModelSpecTransformer } from './base-model-transformer';\nimport { getProperty } from '@visactor/vutils-extension';\n\nexport abstract class BaseModel<T extends IModelSpec> extends CompilableBase implements IModel {\n readonly transformerConstructor = BaseModelSpecTransformer;\n\n protected _spec: T;\n getSpec(): T {\n return this._spec || ({} as T);\n }\n\n /** 获取当前 model 对应在图表 spec 上的路径 */\n getSpecPath() {\n return this._option.specPath;\n }\n\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n // 布局\n protected _layout?: ILayoutItem = null;\n get layout() {\n return this._layout;\n }\n\n protected _specIndex: number = 0;\n getSpecIndex() {\n return this._specIndex;\n }\n\n readonly specKey: string = '';\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n getMarkInfoList(): IModelMarkInfo[] {\n return this.getMarks().map(mark => ({\n type: mark.type as MarkTypeEnum,\n name: mark.name\n }));\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n protected get _theme() {\n return this.getSpecInfo()?.theme;\n }\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this.userId = spec.id;\n this._spec = spec;\n this._specIndex = option.specIndex ?? 0;\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this.setAttrFromSpec();\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n getVisible() {\n return (this._spec as unknown as any)?.visible !== false;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n // do nothing\n this._layout?.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n this._layout?.onLayoutEnd(ctx);\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n beforeRelease() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this._data?.release();\n this._data = this._specIndex = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: T) {\n const result = this._compareSpec(spec, this._spec);\n this._spec = spec;\n if (!result.reMake) {\n this.reInit();\n }\n return result;\n }\n\n protected _compareSpec(spec: T, prevSpec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(spec?: T) {\n if (spec) {\n this._spec = spec;\n }\n this.setAttrFromSpec();\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n this._layout?.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle<T extends ICommonSpec = ICommonSpec>(\n style: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>\n ): Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle<T extends ICommonSpec>(\n mark: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n protected _createMark<T extends IMark>(markInfo: IModelMarkInfo, option: Partial<IMarkOption> = {}): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n m?.created();\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n\n getSpecInfo() {\n const specInfo = this._option.getSpecInfo?.() ?? {};\n return getProperty<IModelSpecInfo>(specInfo, this.getSpecPath());\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/model/base-model.ts"],"names":[],"mappings":"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","file":"base-model.js","sourcesContent":["import { createID } from '../util/id';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n IModelMarkInfo,\n IModelSpecInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type {\n Datum,\n StateValueType,\n ConvertToMarkStyleSpec,\n ICommonSpec,\n StringOrNumber,\n IRect,\n ILayoutRect\n} from '../typings';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport type { IGroupMark } from '@visactor/vgrammar-core';\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport { MarkSet } from '../mark/mark-set';\nimport type { ILayoutItem } from '../layout/interface';\nimport { CompilableBase } from '../compile/compilable-base';\nimport { PREFIX } from '../constant/base';\nimport { BaseModelSpecTransformer } from './base-model-transformer';\nimport { getProperty } from '@visactor/vutils-extension';\n\nexport abstract class BaseModel<T extends IModelSpec> extends CompilableBase implements IModel {\n readonly transformerConstructor = BaseModelSpecTransformer;\n\n protected _spec: T;\n getSpec(): T {\n return this._spec || ({} as T);\n }\n\n /** 获取当前 model 对应在图表 spec 上的路径 */\n getSpecPath() {\n return this._option.specPath;\n }\n\n /** 获取当前 model 对应在图表 specInfo 上的路径 */\n getSpecInfoPath() {\n return this._option.specInfoPath ?? this._option.specPath;\n }\n\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n // 布局\n protected _layout?: ILayoutItem = null;\n get layout() {\n return this._layout;\n }\n\n protected _specIndex: number = 0;\n getSpecIndex() {\n return this._specIndex;\n }\n\n readonly specKey: string = '';\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n getMarkInfoList(): IModelMarkInfo[] {\n return this.getMarks().map(mark => ({\n type: mark.type as MarkTypeEnum,\n name: mark.name\n }));\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n protected get _theme() {\n return this.getSpecInfo()?.theme;\n }\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this.userId = spec.id;\n this._spec = spec;\n this._specIndex = option.specIndex ?? 0;\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this.setAttrFromSpec();\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n getVisible() {\n return (this._spec as unknown as any)?.visible !== false;\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n // do nothing\n this._layout?.onLayoutStart(layoutRect, viewRect, ctx);\n }\n onLayoutEnd(ctx: any): void {\n this._layout?.onLayoutEnd(ctx);\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n beforeRelease() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this._data?.release();\n this._data = this._specIndex = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: T) {\n const result = this._compareSpec(spec, this._spec);\n this._spec = spec;\n if (!result.reMake) {\n this.reInit();\n }\n return result;\n }\n\n protected _compareSpec(spec: T, prevSpec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(spec?: T) {\n if (spec) {\n this._spec = spec;\n }\n this.setAttrFromSpec();\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n this._layout?.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle<T extends ICommonSpec = ICommonSpec>(\n style: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>\n ): Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle<T extends ICommonSpec>(\n mark: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n protected _createMark<T extends IMark>(markInfo: IModelMarkInfo, option: Partial<IMarkOption> = {}): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n m?.created();\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n\n getSpecInfo() {\n const specInfo = this._option.getSpecInfo?.() ?? {};\n return getProperty<IModelSpecInfo>(specInfo, this.getSpecInfoPath());\n }\n}\n"]}
|
package/cjs/model/interface.d.ts
CHANGED
|
@@ -103,6 +103,7 @@ export interface IModelOption extends ICompilableInitOption {
|
|
|
103
103
|
specIndex?: number;
|
|
104
104
|
specKey?: string;
|
|
105
105
|
specPath?: Array<string | number>;
|
|
106
|
+
specInfoPath?: Array<string | number>;
|
|
106
107
|
getTheme?: () => ITheme;
|
|
107
108
|
getSpecInfo?: () => IChartSpecInfo;
|
|
108
109
|
getChartLayoutRect: () => IRect;
|
|
@@ -117,6 +118,7 @@ export interface IModelSpecInfo<T extends Record<string, unknown> = any> {
|
|
|
117
118
|
type: string | ComponentTypeEnum | SeriesTypeEnum;
|
|
118
119
|
spec: T;
|
|
119
120
|
specPath?: Array<string | number>;
|
|
121
|
+
specInfoPath?: Array<string | number>;
|
|
120
122
|
specIndex?: number;
|
|
121
123
|
theme?: any;
|
|
122
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { VChart } from '../vchart-all';\nimport type { IData } from '@visactor/vgrammar-core';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IGroupMarkSpec, ConvertToMarkStyleSpec, ICommonSpec } from '../typings/visual';\nimport type { IRect } from '../typings/space';\nimport type { IPoint, CoordinateType } from '../typings/coordinate';\nimport type { ITheme } from '../theme';\nimport type { StateValueType } from '../typings/spec';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { ICompilableData } from '../compile/data';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart, IChartSpecInfo } from '../chart/interface';\nimport type { IThemeColorScheme } from '../theme/color-scheme/interface';\nimport type { ILayoutItem, ILayoutItemSpec } from '../layout/interface';\nimport type { ILayoutPoint, ILayoutRect } from '../typings/layout';\nimport type { ComponentTypeEnum } from '../component/interface';\nimport type { SeriesMarkNameEnum, SeriesTypeEnum } from '../series';\nimport type { TransformedLabelSpec } from '../component/label';\n\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n}\n\nexport interface IModelProduct {\n srData: IData;\n}\n\nexport interface IModel extends ICompilable {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n coordinate?: CoordinateType;\n\n // 布局\n layout?: ILayoutItem;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n getMarkInfoList: () => IModelMarkInfo[];\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n /** updateSpec 或者切换主题后,根据新 spec 执行的初始化过程 */\n reInit: (spec?: any) => void;\n beforeRelease: () => void;\n\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onRender: (ctx: IModelRenderOption) => void;\n onDataUpdate: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n getSpecPath: () => Array<string | number>;\n\n //布局周期\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect, ctx: IModelLayoutOption) => void;\n onLayoutEnd: (ctx: IModelLayoutOption) => void;\n\n getColorScheme: () => IThemeColorScheme | undefined;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any, key?: string) => void;\n\n getSpecInfo: () => IModelSpecInfo;\n}\n\nexport interface ILayoutModel extends IModel {\n // 布局相关\n getLayoutStartPoint: () => IPoint;\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n getLayoutRect: () => ILayoutRect;\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n\n getLastComputeOutBounds: () => IBoundsLike;\n\n getBoundsInRect: (rect: ILayoutRect, fullRect: ILayoutRect) => IBoundsLike;\n\n //布局周期\n afterSetLayoutStartPoint: (pos: ILayoutPoint) => void;\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n type: string;\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: VChart;\n specIndex?: number;\n specKey?: string;\n specPath?: Array<string | number>;\n\n getTheme?: () => ITheme;\n getSpecInfo?: () => IChartSpecInfo;\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n\n globalScale: IGlobalScale;\n animation: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n}\n\nexport interface IModelSpecInfo<T extends Record<string, unknown> = any> {\n /** model 具体类型 */\n type: string | ComponentTypeEnum | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** 该 spec 在图表 spec 上的路径 */\n specPath?: Array<string | number>;\n /** 该 spec 在父级的索引 */\n specIndex?: number;\n /** model 当前主题 */\n theme?: any;\n}\n\nexport interface IModelConstructor {\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n}\n\nexport type ILayoutModelState = {\n layoutUpdateRank: number;\n [key: string]: unknown;\n};\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n\nexport interface IBaseModelSpecTransformerOption {\n type: string;\n getTheme: () => ITheme;\n}\n\nexport interface IBaseModelSpecTransformerResult<T, K> {\n spec: T;\n theme: K;\n markLabelSpec?: Partial<Record<SeriesMarkNameEnum, TransformedLabelSpec[]>>;\n}\n\nexport interface IBaseModelSpecTransformer {\n getTheme: (spec: any, chartSpec: any) => any;\n transformSpec: (\n spec: any,\n chartSpec: any,\n chartSpecInfo?: IChartSpecInfo\n ) => IBaseModelSpecTransformerResult<any, any>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { VChart } from '../vchart-all';\nimport type { IData } from '@visactor/vgrammar-core';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IGroupMarkSpec, ConvertToMarkStyleSpec, ICommonSpec } from '../typings/visual';\nimport type { IRect } from '../typings/space';\nimport type { IPoint, CoordinateType } from '../typings/coordinate';\nimport type { ITheme } from '../theme';\nimport type { StateValueType } from '../typings/spec';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { ICompilableData } from '../compile/data';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart, IChartSpecInfo } from '../chart/interface';\nimport type { IThemeColorScheme } from '../theme/color-scheme/interface';\nimport type { ILayoutItem, ILayoutItemSpec } from '../layout/interface';\nimport type { ILayoutPoint, ILayoutRect } from '../typings/layout';\nimport type { ComponentTypeEnum } from '../component/interface';\nimport type { SeriesMarkNameEnum, SeriesTypeEnum } from '../series';\nimport type { TransformedLabelSpec } from '../component/label';\n\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n}\n\nexport interface IModelProduct {\n srData: IData;\n}\n\nexport interface IModel extends ICompilable {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n coordinate?: CoordinateType;\n\n // 布局\n layout?: ILayoutItem;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n getMarkInfoList: () => IModelMarkInfo[];\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n /** updateSpec 或者切换主题后,根据新 spec 执行的初始化过程 */\n reInit: (spec?: any) => void;\n beforeRelease: () => void;\n\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onRender: (ctx: IModelRenderOption) => void;\n onDataUpdate: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n getSpecPath: () => Array<string | number>;\n\n //布局周期\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect, ctx: IModelLayoutOption) => void;\n onLayoutEnd: (ctx: IModelLayoutOption) => void;\n\n getColorScheme: () => IThemeColorScheme | undefined;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any, key?: string) => void;\n\n getSpecInfo: () => IModelSpecInfo;\n}\n\nexport interface ILayoutModel extends IModel {\n // 布局相关\n getLayoutStartPoint: () => IPoint;\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n getLayoutRect: () => ILayoutRect;\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n\n getLastComputeOutBounds: () => IBoundsLike;\n\n getBoundsInRect: (rect: ILayoutRect, fullRect: ILayoutRect) => IBoundsLike;\n\n //布局周期\n afterSetLayoutStartPoint: (pos: ILayoutPoint) => void;\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n type: string;\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: VChart;\n specIndex?: number;\n specKey?: string;\n specPath?: Array<string | number>;\n specInfoPath?: Array<string | number>;\n\n getTheme?: () => ITheme;\n getSpecInfo?: () => IChartSpecInfo;\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n\n globalScale: IGlobalScale;\n animation: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n}\n\nexport interface IModelSpecInfo<T extends Record<string, unknown> = any> {\n /** model 具体类型 */\n type: string | ComponentTypeEnum | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** 该 spec 在图表 spec 上的路径 */\n specPath?: Array<string | number>;\n /** 该 spec 在图表 spec info 上的路径 */\n specInfoPath?: Array<string | number>;\n /** 该 spec 在父级的索引 */\n specIndex?: number;\n /** model 当前主题 */\n theme?: any;\n}\n\nexport interface IModelConstructor {\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n}\n\nexport type ILayoutModelState = {\n layoutUpdateRank: number;\n [key: string]: unknown;\n};\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n\nexport interface IBaseModelSpecTransformerOption {\n type: string;\n getTheme: () => ITheme;\n}\n\nexport interface IBaseModelSpecTransformerResult<T, K> {\n spec: T;\n theme: K;\n markLabelSpec?: Partial<Record<SeriesMarkNameEnum, TransformedLabelSpec[]>>;\n}\n\nexport interface IBaseModelSpecTransformer {\n getTheme: (spec: any, chartSpec: any) => any;\n transformSpec: (\n spec: any,\n chartSpec: any,\n chartSpecInfo?: IChartSpecInfo\n ) => IBaseModelSpecTransformerResult<any, any>;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ComponentTypeEnum
|
|
2
|
-
import type { IVChart } from '../../../../core';
|
|
1
|
+
import type { ComponentTypeEnum } from '../../../../component/interface';
|
|
2
|
+
import type { IChartSpec, IVChart } from '../../../../core';
|
|
3
3
|
import type { IModelSpecInfo } from '../../../../model/interface';
|
|
4
4
|
import type { SeriesTypeEnum } from '../../../../series';
|
|
5
5
|
import type { IMediaInfo } from './common';
|
|
@@ -18,8 +18,8 @@ export interface IMediaQueryCondition {
|
|
|
18
18
|
export interface IMediaQueryAction<T extends Record<string, unknown> = any> {
|
|
19
19
|
spec: Partial<T> | ((filteredModelInfo: IModelSpecInfo<T>[], action: IMediaQueryAction<T>, query: IMediaQueryCondition) => Partial<T>);
|
|
20
20
|
filterType?: MediaQueryActionFilterType;
|
|
21
|
-
filter?: MediaQueryActionFilter<T
|
|
21
|
+
filter?: MediaQueryActionFilter<T> | Array<MediaQueryActionFilter<T>>;
|
|
22
22
|
forceAppend?: boolean;
|
|
23
23
|
}
|
|
24
|
-
export type MediaQueryActionFilterType = 'region' | 'series' | 'chart' | `${SeriesTypeEnum}` | `${ComponentTypeEnum}` |
|
|
24
|
+
export type MediaQueryActionFilterType = 'region' | 'series' | 'chart' | `${SeriesTypeEnum}` | `${ComponentTypeEnum}` | keyof IChartSpec;
|
|
25
25
|
export type MediaQueryActionFilter<T extends Record<string, unknown> = any> = Partial<T> | ((modelInfo: IModelSpecInfo<T>, action: IMediaQueryAction<T>, query: IMediaQueryCondition) => boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/chart/media-query/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { ComponentTypeEnum
|
|
1
|
+
{"version":3,"sources":["../src/plugin/chart/media-query/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { ComponentTypeEnum } from '../../../../component/interface';\nimport type { IChartSpec, IVChart } from '../../../../core';\nimport type { IModelSpecInfo } from '../../../../model/interface';\nimport type { SeriesTypeEnum } from '../../../../series';\nimport type { IMediaInfo } from './common';\n\n/**\n * 媒体查询配置(包含多项查询)\n * @since 1.8.0\n */\nexport type IMediaQuerySpec = IMediaQueryItem[];\n\n/** 媒体查询配置(表示一项查询)*/\nexport interface IMediaQueryItem {\n /** 媒体查询条件 */\n query: IMediaQueryCondition;\n /** 命中媒体查询条件之后的动作 */\n action: IMediaQueryAction | IMediaQueryAction[];\n}\n\n/** 媒体查询条件,多个属性之间为“且”关系 */\nexport interface IMediaQueryCondition {\n /** 最小图表宽度 */\n minWidth?: number;\n /** 最大图表宽度 */\n maxWidth?: number;\n /** 最小图表高度 */\n minHeight?: number;\n /** 最大图表高度 */\n maxHeight?: number;\n /** 当图表宽度或高度发生变化时触发的回调,由回调指定是否命中查询条件 */\n onResize?: (info: IMediaInfo, vchart: IVChart) => boolean;\n}\n\n/** 命中媒体查询条件之后的动作 */\nexport interface IMediaQueryAction<T extends Record<string, unknown> = any> {\n /**\n * 需要应用的新 spec\n * - 如果元素过滤器匹配到了某些图表元素,新 spec 将依次合并到这些元素\n * - 如果元素过滤器没有匹配到任何图表元素,新 spec 可能会作为新的图表元素添加到图表(forceAppend 为 true 的情况)。\n *\n * 有两种配置类型:\n * - 直接指定新 spec\n * - 使用回调的方式返回新 spec\n */\n spec:\n | Partial<T>\n | ((\n /** filter 匹配到的图表元素信息 */\n filteredModelInfo: IModelSpecInfo<T>[],\n /** 当前 action 对象 */\n action: IMediaQueryAction<T>,\n /** 当前媒体查询条件 */\n query: IMediaQueryCondition\n ) => Partial<T>);\n /**\n * 元素过滤器类型\n * (规定 filter 需要过滤的元素类型,以及新 spec 对应的元素类型)\n * @default 'chart'\n */\n filterType?: MediaQueryActionFilterType;\n /**\n * 元素过滤器\n * (如果不配置,则匹配 filterType 对应的所有元素)\n *\n * 有两种配置类型:\n * - 配置为元素 spec 的一部分,在过滤图表元素时基于此 spec 进行模糊匹配\n * - 配置为函数回调,依次决定当前 filterType 类型下的每个元素实例是否被匹配\n */\n filter?: MediaQueryActionFilter<T> | Array<MediaQueryActionFilter<T>>;\n /**\n * 元素过滤器匹配不到图表元素时,是否将新 spec 作为新的图表元素添加到图表\n * (filterType 为 'chart' 时该配置失效)\n * @default false\n */\n forceAppend?: boolean;\n}\n\n/**\n * 元素过滤器类型\n */\nexport type MediaQueryActionFilterType =\n | 'region'\n | 'series'\n | 'chart'\n | `${SeriesTypeEnum}` // 具体 series 类型,如 'bar'、'line'\n | `${ComponentTypeEnum}` // 具体 component 类型,如 'cartesianAxis-band'\n | keyof IChartSpec; // 组件 spec key,可视为简化版 component 类型,如 'axes'、'legends'、'crosshair'\n\n/**\n * 元素过滤器\n *\n * 有两种配置类型:\n * - 配置为元素 spec 的一部分,在过滤图表元素时基于此 spec 进行模糊匹配\n * - 配置为函数回调,依次决定当前 filterType 类型下的每个元素实例是否被匹配\n */\nexport type MediaQueryActionFilter<T extends Record<string, unknown> = any> =\n | Partial<T>\n | ((\n /** 当前图表元素信息 */\n modelInfo: IModelSpecInfo<T>,\n /** 当前 action 对象 */\n action: IMediaQueryAction<T>,\n /** 当前媒体查询条件 */\n query: IMediaQueryCondition\n ) => boolean);\n"]}
|
|
@@ -18,11 +18,11 @@ export declare class MediaQuery extends BasePlugin implements IChartPlugin {
|
|
|
18
18
|
onBeforeResize(service: IChartPluginService, width: number, height: number): void;
|
|
19
19
|
onAfterChartSpecTransform(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource): void;
|
|
20
20
|
onBeforeInitChart(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource): void;
|
|
21
|
-
|
|
21
|
+
protected _changeSize(width: number, height: number, compile?: boolean, render?: boolean): boolean;
|
|
22
22
|
protected _applyQueries(compile?: boolean, render?: boolean): boolean;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
protected _check(item: IMediaQueryItem): IMediaQueryCheckResult;
|
|
24
|
+
protected _apply(item: IMediaQueryItem, chartSpec: any): IMediaQueryActionResult;
|
|
25
|
+
protected _reInit(compile?: boolean, render?: boolean): void;
|
|
26
26
|
dispose(): void;
|
|
27
27
|
}
|
|
28
28
|
export declare const registerMediaQuery: () => void;
|
|
@@ -24,12 +24,13 @@ class MediaQuery extends base_plugin_1.BasePlugin {
|
|
|
24
24
|
}, this._spec = chartSpec[MediaQuery.specKey], this._initialized = !0;
|
|
25
25
|
}
|
|
26
26
|
onBeforeResize(service, width, height) {
|
|
27
|
-
this.
|
|
27
|
+
this._initialized && this._changeSize(width, height, !0, !1);
|
|
28
28
|
}
|
|
29
29
|
onAfterChartSpecTransform(service, chartSpec, actionSource) {
|
|
30
|
-
"setCurrentTheme" === actionSource && this.
|
|
30
|
+
this._initialized && "setCurrentTheme" === actionSource && this._reInit(!1, !1);
|
|
31
31
|
}
|
|
32
32
|
onBeforeInitChart(service, chartSpec, actionSource) {
|
|
33
|
+
if (!this._initialized) return;
|
|
33
34
|
let resetMediaQuery, checkMediaQuery;
|
|
34
35
|
switch (actionSource) {
|
|
35
36
|
case "render":
|
|
@@ -48,41 +49,41 @@ class MediaQuery extends base_plugin_1.BasePlugin {
|
|
|
48
49
|
if (resetMediaQuery && this.dispose(), this._initialized || this.onInit(service, chartSpec),
|
|
49
50
|
resetMediaQuery || checkMediaQuery) {
|
|
50
51
|
const {width: width, height: height} = this._option.globalInstance.getCurrentSize();
|
|
51
|
-
this.
|
|
52
|
+
this._changeSize(width, height, !1, !1);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
+
_changeSize(width, height, compile, render) {
|
|
55
56
|
return (this._currentMediaInfo.width !== width || this._currentMediaInfo.height !== height) && (this._currentMediaInfo.width = width,
|
|
56
57
|
this._currentMediaInfo.height = height, this._applyQueries(compile, render));
|
|
57
58
|
}
|
|
58
59
|
_applyQueries(compile, render) {
|
|
59
60
|
const changeToActive = [], changeToInactive = [];
|
|
60
61
|
if (this._spec.forEach((item => {
|
|
61
|
-
const {hasChanged: hasChanged, isActive: isActive} = this.
|
|
62
|
+
const {hasChanged: hasChanged, isActive: isActive} = this._check(item);
|
|
62
63
|
hasChanged && (isActive ? changeToActive.push(item) : changeToInactive.push(item));
|
|
63
64
|
})), !changeToActive.length && !changeToInactive.length) return !1;
|
|
64
65
|
let chartSpec;
|
|
65
|
-
this._baseChartSpec || (this._baseChartSpec = (0, util_2.cloneDeepSpec)(this._option.globalInstance.getSpec()));
|
|
66
|
+
this._baseChartSpec || (this._baseChartSpec = (0, util_2.cloneDeepSpec)(this._option.globalInstance.getSpec(), [ "data", MediaQuery.specKey ]));
|
|
66
67
|
let hasChanged = !1;
|
|
67
|
-
return changeToInactive.length > 0 ? (chartSpec = (0, util_2.cloneDeepSpec)(this._baseChartSpec),
|
|
68
|
+
return changeToInactive.length > 0 ? (chartSpec = (0, util_2.cloneDeepSpec)(this._baseChartSpec, [ "data", MediaQuery.specKey ]),
|
|
68
69
|
Array.from(this.currentActiveItems).forEach((item => {
|
|
69
70
|
if (changeToInactive.includes(item)) return void this.currentActiveItems.delete(item);
|
|
70
|
-
const result = this.
|
|
71
|
+
const result = this._apply(item, chartSpec);
|
|
71
72
|
chartSpec = result.chartSpec;
|
|
72
73
|
})), hasChanged = !0) : chartSpec = this._option.globalInstance.getSpec(), changeToActive.forEach((item => {
|
|
73
74
|
this.currentActiveItems.add(item);
|
|
74
|
-
const result = this.
|
|
75
|
+
const result = this._apply(item, chartSpec);
|
|
75
76
|
chartSpec = result.chartSpec, hasChanged || (hasChanged = result.hasChanged);
|
|
76
77
|
})), hasChanged && this._option.updateSpec(chartSpec, compile, render), !0;
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
+
_check(item) {
|
|
79
80
|
const {globalInstance: globalInstance} = this._option, isActive = (0, util_1.checkMediaQuery)(item.query, this._currentMediaInfo, globalInstance);
|
|
80
81
|
return {
|
|
81
82
|
isActive: isActive,
|
|
82
83
|
hasChanged: isActive !== this.currentActiveItems.has(item)
|
|
83
84
|
};
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
+
_apply(item, chartSpec) {
|
|
86
87
|
const {globalInstance: globalInstance} = this._option, {query: query, action: action} = item;
|
|
87
88
|
let hasChanged = !1;
|
|
88
89
|
return (0, util_2.array)(action).forEach((actionItem => {
|
|
@@ -93,12 +94,12 @@ class MediaQuery extends base_plugin_1.BasePlugin {
|
|
|
93
94
|
hasChanged: hasChanged
|
|
94
95
|
};
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
+
_reInit(compile, render) {
|
|
97
98
|
let chartSpec = this._option.globalInstance.getSpec();
|
|
98
|
-
this._baseChartSpec = (0, util_2.cloneDeepSpec)(chartSpec);
|
|
99
|
+
this._baseChartSpec = (0, util_2.cloneDeepSpec)(chartSpec, [ "data", MediaQuery.specKey ]);
|
|
99
100
|
let hasChanged = !1;
|
|
100
101
|
this.currentActiveItems.forEach((item => {
|
|
101
|
-
const result = this.
|
|
102
|
+
const result = this._apply(item, chartSpec);
|
|
102
103
|
chartSpec = result.chartSpec, hasChanged || (hasChanged = result.hasChanged);
|
|
103
104
|
})), hasChanged && this._option.updateSpec(chartSpec, compile, render);
|
|
104
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/chart/media-query/media-query.ts"],"names":[],"mappings":"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","file":"media-query.js","sourcesContent":["import type {\n IMediaInfo,\n IMediaQueryCheckResult,\n IMediaQuerySpec,\n IMediaQueryOption,\n IMediaQueryItem,\n IMediaQueryActionResult\n} from './interface';\nimport { checkMediaQuery } from './util';\nimport { executeMediaQueryAction } from './util/action';\nimport type { IChartPlugin, IChartPluginService } from '../interface';\nimport { array, cloneDeepSpec } from '../../../util';\nimport type { VChartRenderActionSource } from '../../../core/interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport { registerChartPlugin } from '../register';\n\nexport class MediaQuery extends BasePlugin implements IChartPlugin {\n static readonly pluginType: 'chart' = 'chart';\n static readonly specKey = 'media';\n static readonly type: string = 'MediaQueryPlugin';\n readonly type: string = 'MediaQueryPlugin';\n\n protected _spec: IMediaQuerySpec;\n protected _option: IMediaQueryOption;\n\n /** 不带任何媒体查询的图表 spec */\n protected _baseChartSpec: any;\n\n /** 当前媒体信息 */\n protected _currentMediaInfo: Partial<IMediaInfo> = {};\n\n /** 当前正在生效的媒体查询 */\n readonly currentActiveItems = new Set<IMediaQueryItem>();\n\n /** 媒体查询是否已经初始化 */\n protected _initialized: boolean = false;\n\n constructor() {\n super(MediaQuery.type);\n }\n\n onInit(service: IChartPluginService, chartSpec: any) {\n if (!chartSpec?.[MediaQuery.specKey]) {\n return;\n }\n const { globalInstance } = service;\n this._option = {\n globalInstance: service.globalInstance,\n updateSpec: (spec: any, compile?: boolean, render?: boolean) => {\n if (render) {\n globalInstance.updateSpecSync(spec);\n } else if (compile) {\n globalInstance.updateSpecAndRecompile(spec, false, {\n transformSpec: true\n });\n } else {\n globalInstance.setRuntimeSpec(spec);\n }\n }\n };\n this._spec = chartSpec[MediaQuery.specKey];\n this._initialized = true;\n }\n\n onBeforeResize(service: IChartPluginService, width: number, height: number) {\n this.changeSize(width, height, true, false);\n }\n\n onAfterChartSpecTransform(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource) {\n if (actionSource === 'setCurrentTheme') {\n // 重新执行已生效的所有媒体查询\n this.reInit(false, false);\n }\n }\n\n onBeforeInitChart(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource) {\n let resetMediaQuery: boolean;\n let checkMediaQuery: boolean;\n\n switch (actionSource) {\n case 'render':\n case 'updateModelSpec':\n resetMediaQuery = false;\n checkMediaQuery = true;\n break;\n case 'updateSpec':\n case 'setCurrentTheme':\n resetMediaQuery = true;\n checkMediaQuery = false;\n break;\n case 'updateSpecAndRecompile':\n resetMediaQuery = false;\n checkMediaQuery = false;\n break;\n }\n\n if (resetMediaQuery) {\n this.dispose();\n }\n if (!this._initialized) {\n // 初始化媒体查询\n this.onInit(service, chartSpec);\n }\n if (resetMediaQuery || checkMediaQuery) {\n // 触发媒体查询\n const { width, height } = this._option.globalInstance.getCurrentSize();\n this.changeSize(width, height, false, false);\n }\n }\n\n /** 更新图表宽高信息,执行所有相关媒体查询,返回是否命中某个查询 */\n changeSize(width: number, height: number, compile?: boolean, render?: boolean): boolean {\n if (this._currentMediaInfo.width === width && this._currentMediaInfo.height === height) {\n return false;\n }\n this._currentMediaInfo.width = width;\n this._currentMediaInfo.height = height;\n // 由于目前媒体查询只和图表宽高有关,这里执行所有媒体查询\n return this._applyQueries(compile, render);\n }\n\n /** 执行所有媒体查询,返回是否命中某个查询 */\n protected _applyQueries(compile?: boolean, render?: boolean): boolean {\n // 检查所有查询的查询条件\n const changeToActive: IMediaQueryItem[] = []; // 将会生效的查询\n const changeToInactive: IMediaQueryItem[] = []; // 将会失效的查询\n this._spec.forEach(item => {\n const { hasChanged, isActive } = this.check(item);\n if (hasChanged) {\n if (isActive) {\n changeToActive.push(item);\n } else {\n changeToInactive.push(item);\n }\n }\n });\n\n if (!changeToActive.length && !changeToInactive.length) {\n return false;\n }\n if (!this._baseChartSpec) {\n this._baseChartSpec = cloneDeepSpec(this._option.globalInstance.getSpec());\n }\n let chartSpec: any;\n let hasChanged = false;\n\n // 处理将会失效的查询:重新执行一遍当前生效的查询\n if (changeToInactive.length > 0) {\n chartSpec = cloneDeepSpec(this._baseChartSpec);\n Array.from(this.currentActiveItems).forEach(item => {\n if (changeToInactive.includes(item)) {\n this.currentActiveItems.delete(item);\n return;\n }\n const result = this.apply(item, chartSpec);\n chartSpec = result.chartSpec;\n });\n hasChanged = true;\n } else {\n chartSpec = this._option.globalInstance.getSpec();\n }\n\n // 处理将会生效的查询\n changeToActive.forEach(item => {\n this.currentActiveItems.add(item);\n const result = this.apply(item, chartSpec);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n\n if (hasChanged) {\n this._option.updateSpec(chartSpec, compile, render);\n }\n return true;\n }\n\n /** 检查媒体查询的条件是否满足 */\n check(item: IMediaQueryItem): IMediaQueryCheckResult {\n const { globalInstance } = this._option;\n const isActive = checkMediaQuery(item.query, this._currentMediaInfo as IMediaInfo, globalInstance);\n return {\n isActive,\n hasChanged: isActive !== this.currentActiveItems.has(item)\n };\n }\n\n /** 执行一条媒体查询 */\n apply(item: IMediaQueryItem, chartSpec: any): IMediaQueryActionResult {\n const { globalInstance } = this._option;\n const { query, action } = item;\n let hasChanged = false;\n // 执行\n array(action).forEach(actionItem => {\n const result = executeMediaQueryAction(actionItem, query, chartSpec, globalInstance);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n return { chartSpec, hasChanged };\n }\n\n /** 重新初始化,并重新执行一遍当前生效的媒体查询 */\n reInit(compile?: boolean, render?: boolean) {\n let chartSpec = this._option.globalInstance.getSpec();\n this._baseChartSpec = cloneDeepSpec(chartSpec);\n\n let hasChanged = false;\n this.currentActiveItems.forEach(item => {\n const result = this.apply(item, chartSpec);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n\n if (hasChanged) {\n this._option.updateSpec(chartSpec, compile, render);\n }\n }\n\n dispose() {\n this._initialized = false;\n this._spec = [];\n this._option = undefined;\n this._currentMediaInfo = {};\n this.currentActiveItems.clear();\n }\n}\n\nexport const registerMediaQuery = () => {\n registerChartPlugin(MediaQuery);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin/chart/media-query/media-query.ts"],"names":[],"mappings":"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","file":"media-query.js","sourcesContent":["import type {\n IMediaInfo,\n IMediaQueryCheckResult,\n IMediaQuerySpec,\n IMediaQueryOption,\n IMediaQueryItem,\n IMediaQueryActionResult\n} from './interface';\nimport { checkMediaQuery } from './util';\nimport { executeMediaQueryAction } from './util/action';\nimport type { IChartPlugin, IChartPluginService } from '../interface';\nimport { array, cloneDeepSpec } from '../../../util';\nimport type { VChartRenderActionSource } from '../../../core/interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport { registerChartPlugin } from '../register';\n\nexport class MediaQuery extends BasePlugin implements IChartPlugin {\n static readonly pluginType: 'chart' = 'chart';\n static readonly specKey = 'media';\n static readonly type: string = 'MediaQueryPlugin';\n readonly type: string = 'MediaQueryPlugin';\n\n protected _spec: IMediaQuerySpec;\n protected _option: IMediaQueryOption;\n\n /** 不带任何媒体查询的图表 spec */\n protected _baseChartSpec: any;\n\n /** 当前媒体信息 */\n protected _currentMediaInfo: Partial<IMediaInfo> = {};\n\n /** 当前正在生效的媒体查询 */\n readonly currentActiveItems = new Set<IMediaQueryItem>();\n\n /** 媒体查询是否已经初始化 */\n protected _initialized: boolean = false;\n\n constructor() {\n super(MediaQuery.type);\n }\n\n onInit(service: IChartPluginService, chartSpec: any) {\n if (!chartSpec?.[MediaQuery.specKey]) {\n return;\n }\n\n const { globalInstance } = service;\n this._option = {\n globalInstance: service.globalInstance,\n updateSpec: (spec: any, compile?: boolean, render?: boolean) => {\n if (render) {\n globalInstance.updateSpecSync(spec);\n } else if (compile) {\n globalInstance.updateSpecAndRecompile(spec, false, {\n transformSpec: true\n });\n } else {\n globalInstance.setRuntimeSpec(spec);\n }\n }\n };\n this._spec = chartSpec[MediaQuery.specKey];\n this._initialized = true;\n }\n\n onBeforeResize(service: IChartPluginService, width: number, height: number) {\n if (!this._initialized) {\n return;\n }\n\n this._changeSize(width, height, true, false);\n }\n\n onAfterChartSpecTransform(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource) {\n if (!this._initialized) {\n return;\n }\n\n if (actionSource === 'setCurrentTheme') {\n // 重新执行已生效的所有媒体查询\n this._reInit(false, false);\n }\n }\n\n onBeforeInitChart(service: IChartPluginService, chartSpec: any, actionSource: VChartRenderActionSource) {\n if (!this._initialized) {\n return;\n }\n\n let resetMediaQuery: boolean;\n let checkMediaQuery: boolean;\n\n switch (actionSource) {\n case 'render':\n case 'updateModelSpec':\n resetMediaQuery = false;\n checkMediaQuery = true;\n break;\n case 'updateSpec':\n case 'setCurrentTheme':\n resetMediaQuery = true;\n checkMediaQuery = false;\n break;\n case 'updateSpecAndRecompile':\n resetMediaQuery = false;\n checkMediaQuery = false;\n break;\n }\n\n if (resetMediaQuery) {\n this.dispose();\n }\n if (!this._initialized) {\n // 初始化媒体查询\n this.onInit(service, chartSpec);\n }\n if (resetMediaQuery || checkMediaQuery) {\n // 触发媒体查询\n const { width, height } = this._option.globalInstance.getCurrentSize();\n this._changeSize(width, height, false, false);\n }\n }\n\n /** 更新图表宽高信息,执行所有相关媒体查询,返回是否命中某个查询 */\n protected _changeSize(width: number, height: number, compile?: boolean, render?: boolean): boolean {\n if (this._currentMediaInfo.width === width && this._currentMediaInfo.height === height) {\n return false;\n }\n this._currentMediaInfo.width = width;\n this._currentMediaInfo.height = height;\n // 由于目前媒体查询只和图表宽高有关,这里执行所有媒体查询\n return this._applyQueries(compile, render);\n }\n\n /** 执行所有媒体查询,返回是否命中某个查询 */\n protected _applyQueries(compile?: boolean, render?: boolean): boolean {\n // 检查所有查询的查询条件\n const changeToActive: IMediaQueryItem[] = []; // 将会生效的查询\n const changeToInactive: IMediaQueryItem[] = []; // 将会失效的查询\n this._spec.forEach(item => {\n const { hasChanged, isActive } = this._check(item);\n if (hasChanged) {\n if (isActive) {\n changeToActive.push(item);\n } else {\n changeToInactive.push(item);\n }\n }\n });\n\n if (!changeToActive.length && !changeToInactive.length) {\n return false;\n }\n if (!this._baseChartSpec) {\n this._baseChartSpec = cloneDeepSpec(this._option.globalInstance.getSpec(), ['data', MediaQuery.specKey]);\n }\n let chartSpec: any;\n let hasChanged = false;\n\n // 处理将会失效的查询:重新执行一遍当前生效的查询\n if (changeToInactive.length > 0) {\n chartSpec = cloneDeepSpec(this._baseChartSpec, ['data', MediaQuery.specKey]);\n Array.from(this.currentActiveItems).forEach(item => {\n if (changeToInactive.includes(item)) {\n this.currentActiveItems.delete(item);\n return;\n }\n const result = this._apply(item, chartSpec);\n chartSpec = result.chartSpec;\n });\n hasChanged = true;\n } else {\n chartSpec = this._option.globalInstance.getSpec();\n }\n\n // 处理将会生效的查询\n changeToActive.forEach(item => {\n this.currentActiveItems.add(item);\n const result = this._apply(item, chartSpec);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n\n if (hasChanged) {\n this._option.updateSpec(chartSpec, compile, render);\n }\n return true;\n }\n\n /** 检查媒体查询的条件是否满足 */\n protected _check(item: IMediaQueryItem): IMediaQueryCheckResult {\n const { globalInstance } = this._option;\n const isActive = checkMediaQuery(item.query, this._currentMediaInfo as IMediaInfo, globalInstance);\n return {\n isActive,\n hasChanged: isActive !== this.currentActiveItems.has(item)\n };\n }\n\n /** 执行一条媒体查询 */\n protected _apply(item: IMediaQueryItem, chartSpec: any): IMediaQueryActionResult {\n const { globalInstance } = this._option;\n const { query, action } = item;\n let hasChanged = false;\n // 执行\n array(action).forEach(actionItem => {\n const result = executeMediaQueryAction(actionItem, query, chartSpec, globalInstance);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n return { chartSpec, hasChanged };\n }\n\n /** 重新初始化,并重新执行一遍当前生效的媒体查询 */\n protected _reInit(compile?: boolean, render?: boolean) {\n let chartSpec = this._option.globalInstance.getSpec();\n this._baseChartSpec = cloneDeepSpec(chartSpec, ['data', MediaQuery.specKey]);\n\n let hasChanged = false;\n this.currentActiveItems.forEach(item => {\n const result = this._apply(item, chartSpec);\n chartSpec = result.chartSpec;\n hasChanged ||= result.hasChanged;\n });\n\n if (hasChanged) {\n this._option.updateSpec(chartSpec, compile, render);\n }\n }\n\n dispose() {\n this._initialized = false;\n this._spec = [];\n this._option = undefined;\n this._currentMediaInfo = {};\n this.currentActiveItems.clear();\n }\n}\n\nexport const registerMediaQuery = () => {\n registerChartPlugin(MediaQuery);\n};\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IVChart } from '../../../../core';
|
|
2
2
|
import type { IMediaQueryAction, IMediaQueryActionFilterResult, IMediaQueryCondition, MediaQueryActionFilter, MediaQueryActionFilterType } from '../interface';
|
|
3
|
-
|
|
3
|
+
import type { MaybeArray } from '../../../../typings';
|
|
4
|
+
export declare const executeMediaQueryActionFilter: <T extends Record<string, unknown>>(filterType: MediaQueryActionFilterType, filter: MaybeArray<MediaQueryActionFilter<T>>, action: IMediaQueryAction<T>, query: IMediaQueryCondition, chartSpec: any, globalInstance: IVChart) => IMediaQueryActionFilterResult;
|
|
4
5
|
export declare const executeMediaQueryActionFilterType: <T extends Record<string, unknown>>(filterType: MediaQueryActionFilterType, chartSpec: any, globalInstance: IVChart) => IMediaQueryActionFilterResult<T>;
|
|
@@ -7,8 +7,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
const vutils_1 = require("@visactor/vutils"), core_1 = require("../../../../core"), interface_1 = require("../../../../series/interface"), interface_2 = require("../../../../component/interface"), vutils_extension_1 = require("@visactor/vutils-extension"), executeMediaQueryActionFilter = (filterType = "chart", filter, action, query, chartSpec, globalInstance) => {
|
|
8
8
|
const result = (0, exports.executeMediaQueryActionFilterType)(filterType, chartSpec, globalInstance);
|
|
9
9
|
return Object.assign(Object.assign({}, result), {
|
|
10
|
-
modelInfo: result.modelInfo.filter((info => !!(0, vutils_1.isNil)(filter) || (
|
|
11
|
-
vutils_1.
|
|
10
|
+
modelInfo: result.modelInfo.filter((info => !!(0, vutils_1.isNil)(filter) || (0,
|
|
11
|
+
vutils_1.array)(filter).some((f => (0, vutils_1.isFunction)(f) ? f(info, action, query) : (0,
|
|
12
|
+
vutils_extension_1.includeSpec)(info.spec, f)))))
|
|
12
13
|
});
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -46,36 +47,29 @@ const executeMediaQueryActionFilterType = (filterType = "chart", chartSpec, glob
|
|
|
46
47
|
specIndex: i,
|
|
47
48
|
type: filterType
|
|
48
49
|
});
|
|
49
|
-
})); else if (Object.values(interface_2.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
componentTypes = interface_2.axisComponentTypes, result.specKey = "axes";
|
|
54
|
-
break;
|
|
55
|
-
|
|
56
|
-
case interface_2.SimplifiedComponentTypeEnum.legend:
|
|
57
|
-
componentTypes = interface_2.legendComponentTypes, result.specKey = "legends";
|
|
58
|
-
break;
|
|
59
|
-
|
|
60
|
-
case interface_2.SimplifiedComponentTypeEnum.crosshair:
|
|
61
|
-
componentTypes = interface_2.crosshairComponentTypes, result.specKey = "crosshair";
|
|
62
|
-
}
|
|
63
|
-
const {specKey: specKey} = result, infoList = (0, vutils_1.array)(null !== (_d = chartSpecInfo[specKey]) && void 0 !== _d ? _d : []);
|
|
64
|
-
(0, vutils_1.array)(null !== (_e = chartSpec[specKey]) && void 0 !== _e ? _e : []).forEach(((componentSpec, i) => {
|
|
65
|
-
const specInfo = infoList[i];
|
|
66
|
-
(null == componentTypes ? void 0 : componentTypes.includes(specInfo.type)) && result.modelInfo.push(Object.assign(Object.assign({}, specInfo), {
|
|
67
|
-
spec: componentSpec
|
|
68
|
-
}));
|
|
69
|
-
}));
|
|
70
|
-
} else if (Object.values(interface_2.ComponentTypeEnum).includes(filterType)) {
|
|
71
|
-
result.modelType = "component", result.type = filterType, result.specKey = null === (_f = core_1.Factory.getComponentInKey(filterType)) || void 0 === _f ? void 0 : _f.specKey;
|
|
72
|
-
const {specKey: specKey} = result, infoList = (0, vutils_1.array)(null !== (_g = chartSpecInfo[specKey]) && void 0 !== _g ? _g : []);
|
|
73
|
-
null === (_j = (0, vutils_1.array)(null !== (_h = chartSpec[specKey]) && void 0 !== _h ? _h : [])) || void 0 === _j || _j.forEach(((componentSpec, i) => {
|
|
50
|
+
})); else if (Object.values(interface_2.ComponentTypeEnum).includes(filterType)) {
|
|
51
|
+
result.modelType = "component", result.type = filterType, result.specKey = null === (_d = core_1.Factory.getComponentInKey(filterType)) || void 0 === _d ? void 0 : _d.specKey;
|
|
52
|
+
const {specKey: specKey} = result, infoList = (0, vutils_1.array)(null !== (_e = chartSpecInfo[specKey]) && void 0 !== _e ? _e : []);
|
|
53
|
+
null === (_g = (0, vutils_1.array)(null !== (_f = chartSpec[specKey]) && void 0 !== _f ? _f : [])) || void 0 === _g || _g.forEach(((componentSpec, i) => {
|
|
74
54
|
const specInfo = infoList[i];
|
|
75
55
|
specInfo.type === filterType && result.modelInfo.push(Object.assign(Object.assign({}, specInfo), {
|
|
76
56
|
spec: componentSpec
|
|
77
57
|
}));
|
|
78
58
|
}));
|
|
59
|
+
} else {
|
|
60
|
+
const componentTypes = core_1.Factory.getComponents().filter((({cmp: cmp}) => cmp.specKey === filterType)).map((({cmp: cmp}) => cmp.type));
|
|
61
|
+
if (componentTypes.length > 0) {
|
|
62
|
+
result.modelType = "component";
|
|
63
|
+
const specKey = filterType;
|
|
64
|
+
result.specKey = specKey;
|
|
65
|
+
const infoList = (0, vutils_1.array)(null !== (_h = chartSpecInfo[specKey]) && void 0 !== _h ? _h : []);
|
|
66
|
+
(0, vutils_1.array)(null !== (_j = chartSpec[specKey]) && void 0 !== _j ? _j : []).forEach(((componentSpec, i) => {
|
|
67
|
+
const specInfo = infoList[i];
|
|
68
|
+
componentTypes.includes(specInfo.type) && result.modelInfo.push(Object.assign(Object.assign({}, specInfo), {
|
|
69
|
+
spec: componentSpec
|
|
70
|
+
}));
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
79
73
|
}
|
|
80
74
|
return result;
|
|
81
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/chart/media-query/util/filter.ts"],"names":[],"mappings":";;;AAAA,6CAA4D;AAG5D,2CAA2C;AAQ3C,4DAA8D;AAC9D,+
|
|
1
|
+
{"version":3,"sources":["../src/plugin/chart/media-query/util/filter.ts"],"names":[],"mappings":"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","file":"filter.js","sourcesContent":["import { array, isFunction, isNil } from '@visactor/vutils';\nimport type { IChartSpec, IVChart } from '../../../../core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Factory } from '../../../../core';\nimport type {\n IMediaQueryAction,\n IMediaQueryActionFilterResult,\n IMediaQueryCondition,\n MediaQueryActionFilter,\n MediaQueryActionFilterType\n} from '../interface';\nimport { SeriesTypeEnum } from '../../../../series/interface';\nimport { ComponentTypeEnum } from '../../../../component/interface';\nimport { includeSpec } from '@visactor/vutils-extension';\nimport type { MaybeArray } from '../../../../typings';\n\n/** 执行元素过滤器 */\nexport const executeMediaQueryActionFilter = <T extends Record<string, unknown>>(\n filterType: MediaQueryActionFilterType = 'chart',\n filter: MaybeArray<MediaQueryActionFilter<T>> | undefined,\n action: IMediaQueryAction<T>,\n query: IMediaQueryCondition,\n chartSpec: any,\n globalInstance: IVChart\n): IMediaQueryActionFilterResult => {\n const result = executeMediaQueryActionFilterType<T>(filterType, chartSpec, globalInstance);\n return {\n ...result,\n modelInfo: result.modelInfo.filter(info => {\n if (isNil(filter)) {\n return true;\n }\n return array(filter).some(f => {\n if (isFunction(f)) {\n return f(info, action, query);\n }\n // spec 模糊匹配\n return includeSpec(info.spec, f);\n });\n })\n };\n};\n\n/** 执行元素过滤器的 filterType 部分的筛选 */\nexport const executeMediaQueryActionFilterType = <T extends Record<string, unknown>>(\n filterType: MediaQueryActionFilterType = 'chart',\n chartSpec: any,\n globalInstance: IVChart\n): IMediaQueryActionFilterResult<T> => {\n const result: IMediaQueryActionFilterResult<T> = {\n modelInfo: []\n };\n const chartSpecInfo = globalInstance.getSpecInfo();\n\n if (filterType === 'chart') {\n result.isChart = true;\n result.modelInfo.push({\n spec: chartSpec,\n type: 'chart'\n });\n } else if (filterType === 'region') {\n result.modelType = 'region';\n result.specKey = 'region';\n\n chartSpec.region?.forEach((regionSpec: T, i: number) => {\n result.modelInfo.push({\n spec: regionSpec,\n specPath: ['region', i],\n specIndex: i,\n type: 'region'\n });\n });\n } else if (filterType === 'series') {\n result.modelType = 'series';\n result.specKey = 'series';\n\n chartSpec.series?.forEach((seriesSpec: T, i: number) => {\n result.modelInfo.push({\n spec: seriesSpec,\n specPath: ['series', i],\n specIndex: i,\n type: seriesSpec.type as string\n });\n });\n } else if (Object.values(SeriesTypeEnum).includes(filterType as SeriesTypeEnum)) {\n result.modelType = 'series';\n result.specKey = 'series';\n result.type = filterType as SeriesTypeEnum;\n\n chartSpec.series?.forEach((seriesSpec: T, i: number) => {\n if (seriesSpec.type === filterType) {\n result.modelInfo.push({\n spec: seriesSpec,\n specPath: ['series', i],\n specIndex: i,\n type: filterType\n });\n }\n });\n } else if (Object.values(ComponentTypeEnum).includes(filterType as ComponentTypeEnum)) {\n result.modelType = 'component';\n result.type = filterType as ComponentTypeEnum;\n result.specKey = Factory.getComponentInKey(filterType)?.specKey as keyof IChartSpec;\n\n const { specKey } = result;\n const infoList = array(chartSpecInfo[specKey] ?? []);\n array(chartSpec[specKey] ?? [])?.forEach((componentSpec, i) => {\n const specInfo = infoList[i];\n if (specInfo.type === filterType) {\n result.modelInfo.push({\n ...specInfo,\n spec: componentSpec\n });\n }\n });\n } else {\n // 根据 specKey 进行匹配\n const componentTypes = Factory.getComponents()\n .filter(({ cmp }) => cmp.specKey === filterType)\n .map(({ cmp }) => cmp.type);\n if (componentTypes.length > 0) {\n result.modelType = 'component';\n const specKey = filterType as keyof IChartSpec;\n result.specKey = specKey;\n\n const infoList = array(chartSpecInfo[specKey] ?? []);\n array(chartSpec[specKey] ?? []).forEach((componentSpec, i) => {\n const specInfo = infoList[i];\n if (componentTypes.includes(specInfo.type as ComponentTypeEnum)) {\n result.modelInfo.push({\n ...specInfo,\n spec: componentSpec\n });\n }\n });\n }\n }\n\n return result;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function cloneDeepSpec(spec: any): any;
|
|
1
|
+
export declare function cloneDeepSpec(spec: any, excludeKeys?: string[]): any;
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
|
|
7
7
|
const vutils_1 = require("@visactor/vutils"), common_1 = require("./common");
|
|
8
8
|
|
|
9
|
-
function cloneDeepSpec(spec) {
|
|
9
|
+
function cloneDeepSpec(spec, excludeKeys = [ "data" ]) {
|
|
10
10
|
const value = spec;
|
|
11
11
|
let result;
|
|
12
12
|
if (!(0, vutils_1.isValid)(value) || "object" != typeof value) return value;
|
|
@@ -18,7 +18,7 @@ function cloneDeepSpec(spec) {
|
|
|
18
18
|
let index = -1;
|
|
19
19
|
if (result) for (;++index < (props || value).length; ) {
|
|
20
20
|
const key = props ? props[index] : index, subValue = value[key];
|
|
21
|
-
result[key] = cloneDeepSpec(subValue);
|
|
21
|
+
(null == excludeKeys ? void 0 : excludeKeys.includes(key.toString())) ? result[key] = subValue : result[key] = cloneDeepSpec(subValue, excludeKeys);
|
|
22
22
|
}
|
|
23
23
|
return result;
|
|
24
24
|
}
|