@milaboratories/graph-maker 1.1.153 → 1.1.155
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/dist/GraphMaker/components/AesSettings/FormWrapper.vue.d.ts +2 -0
- package/dist/GraphMaker/components/AesSettings/FormWrapper.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/AesSettings/FormWrapper.vue.js +18 -16
- package/dist/GraphMaker/components/AesSettings/FormWrapper.vue.js.map +1 -1
- package/dist/GraphMaker/components/Chart.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/Chart.vue.js +177 -120
- package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +198 -192
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/store.d.ts.map +1 -1
- package/dist/GraphMaker/store.js +85 -81
- package/dist/GraphMaker/store.js.map +1 -1
- package/dist/GraphMaker/types.d.ts +1 -0
- package/dist/GraphMaker/types.d.ts.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +6 -6
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +94 -91
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +2 -2
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +50 -49
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +15 -14
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
- package/package.json +2 -2
package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentController.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ComponentController.ts"],"sourcesContent":["import { getNormalizedAxesList, isLabelColumn } from '@platforma-sdk/model';\nimport type {\n ColumnData,\n ComponentGuideSimple,\n ComponentState,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SourceOption,\n} from '../common';\nimport {\n COLUMN_LABEL_KEY,\n DISCRETE_FILTER_KEY,\n IS_LINKER_COLUMN,\n SUBSET_FILTER_KEY,\n} from '../constants';\nimport type { DataStore } from '../store';\nimport { AxesSet, ColumnId, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport { AxisSpec, LinkerMap, PColumnSpec, ValueType } from '@milaboratories/pl-model-common';\nimport { axisIsNonHomogenous, getColumnOrAxisLabel, getNotAllowedAxes, getStateCopy, MultipliesByMap } from '../utils';\n\nconst isLinkerColumn = (columnSpec: PColumnSpec) => columnSpec?.annotations?.[IS_LINKER_COLUMN] === 'true';\n\ninterface ComponentControllerSettings {\n isDataComponent: boolean; // X, Y, Data source etc.\n multipleSelectors: boolean; // more than 1 selected column in input\n required: boolean;\n homogeneous: boolean;\n axesAllowed: boolean;\n columnsAllowed: boolean;\n columnsWithExtraAxesAllowed: boolean; // can contain column with extra axes with fixed values\n dimensionConsumer: boolean; // remove extra dimension from data-mapping after selecting a heterogeneous axis\n}\n\ninterface FieldControllerOptions<State extends InputState, Field extends keyof State['components']> {\n componentName: Field;\n allowedTypes: ValueType[];\n checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean; // for more complicated logic than type is in allowed types and annotation exists\n annotations?: Record<string, string>;\n parentComponents?: (keyof State['components'])[];\n dependsOn?: (keyof State['components'])[];\n strictlyDependsOnParents?: boolean;\n ignoredOptionIds?: string[];\n settings: Partial<ComponentControllerSettings>;\n}\n\nexport class ComponentController<State extends InputState, Field extends keyof State['components']> {\n private static DefaultSettings: ComponentControllerSettings = {\n isDataComponent: false,\n multipleSelectors: false,\n required: false,\n homogeneous: false,\n axesAllowed: false,\n columnsAllowed: true,\n columnsWithExtraAxesAllowed: true,\n dimensionConsumer: false,\n };\n\n readonly componentName: Field;\n readonly allowedTypes: ValueType[];\n readonly settings: ComponentControllerSettings;\n private readonly dependsOn: (keyof State['components'])[];\n private readonly parentComponents: (keyof State['components'])[];\n private readonly strictlyDependsOnParents: boolean;\n private readonly annotations: Record<string, string>;\n private readonly checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean;\n\n constructor({\n componentName,\n allowedTypes,\n settings,\n strictlyDependsOnParents,\n dependsOn = [],\n parentComponents = [],\n annotations = {},\n checkSourceBySpec,\n }: FieldControllerOptions<State, Field>) {\n this.componentName = componentName;\n this.allowedTypes = [...allowedTypes];\n this.settings = { ...ComponentController.DefaultSettings, ...settings };\n this.dependsOn = [...dependsOn];\n this.parentComponents = [...parentComponents]; // corresponding data components for meta or X for Y in scatterplot\n this.strictlyDependsOnParents = strictlyDependsOnParents ?? true; // meta-inputs are strictly-depending on parents, X by Y (Y by X) - don't\n this.annotations = { ...annotations };\n if (checkSourceBySpec) {\n this.checkSourceBySpec = checkSourceBySpec;\n }\n }\n\n get isRequired(): boolean {\n return this.settings.required;\n }\n\n get isDimensionsConsumer(): boolean {\n return this.settings.dimensionConsumer;\n }\n\n addSelected(state: State, selectorState: SelectorStateSimple | SelectorStateFilter) {\n const nextState = getStateCopy(state);\n nextState.components[this.componentName].selectorStates.push(selectorState as SelectorStateFilter);\n\n // ***\n // here should be logic for possibly parent qualifications updating\n // ***\n\n return nextState;\n }\n\n deleteSelected(state: State, selectedSourceStr: ColumnOrAxisIdString) {\n const nextState = getStateCopy(state);\n // ***\n // here should be logic for removing unnecessary qualifications (it can appear when some sources are deleted)\n // ***\n nextState.components[this.componentName].selectorStates = (\n nextState.components[this.componentName].selectorStates as SelectorState[]\n ).filter(item => item.selectedSource !== selectedSourceStr);\n return nextState;\n }\n\n getParentSelectedSources(state: State): (ColumnId | AxisId)[] {\n const selectedSources = this.parentComponents.reduce((res: (ColumnId | AxisId)[], item) => {\n const selectedHere = state.components[item].selectorStates.map(s =>\n columnOrAxisIdFromString(s.selectedSource)\n );\n res.push(...selectedHere);\n return res;\n }, []);\n\n // ***\n // consider parent qualifications without selected here\n // ***\n return selectedSources;\n }\n\n async getParentsAxes(store: DataStore, state: State) {\n const parentSelectedSources = this.getParentSelectedSources(state);\n const parentAxes = new Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>();\n for (const source of parentSelectedSources) {\n if (isColumnId(source)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(source);\n for (const spec of columnSpec?.axesSpec ?? []) {\n const id = AxisId.fromAxisSpec(spec);\n const idStr = id.toCanonicalString();\n if (parentAxes.has(idStr)) {\n continue;\n }\n parentAxes.set(idStr, { parentSource: source.toCanonicalString(), spec });\n }\n }\n }\n\n return parentAxes;\n }\n\n async getParentAndHangingAxes(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<{\n parentsAxes: AxesSet,\n hangingAxes: AxesSet,\n }> {\n const parentsAxes = await this.getParentsAxes(store, state);\n const hangingAxes: AxesSet = new Map();\n\n if (!this.settings.isDataComponent) {\n const thisState: ComponentState = state.components[this.componentName];\n const selectedHereSources = thisState.selectorStates.map((v) => v.selectedSource);\n for (const source of selectedHereSources) {\n const id = columnOrAxisIdFromString(source);\n if (!isColumnId(id)) {\n continue;\n }\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (!columnSpec) {\n continue;\n }\n const extraAxesSpecs = getNotAllowedAxes(columnSpec, Array.from(parentsAxes.values()).map(v => v.spec), linkerMap, multipliesByMap);\n\n for (const spec of extraAxesSpecs) {\n hangingAxes.set(AxisId.fromAxisSpec(spec).toCanonicalString(), { parentSource: source, spec });\n }\n }\n }\n\n return { parentsAxes, hangingAxes };\n }\n\n /** Get axes to check available columns compatibility: all parents axes + available with these parent axes linker axes */\n getColumnSourceAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = new Map();\n const { parentsAxes } = allParentsAndHangingAxes[this.componentName];\n\n for (const v of parentsAxes) {\n result.set(...v);\n }\n\n if (this.settings.isDataComponent) {\n return result;\n }\n\n // normalized list concider axes parents (not component parents)\n const normalizedAxes = getNormalizedAxesList(Array.from(parentsAxes.values()).map((v) => v.spec));\n const axesAvailableWithLinkers = getNormalizedAxesList(linkerMap.getReachableByLinkersAxesFromAxes(normalizedAxes));\n\n for (const axisSpec of axesAvailableWithLinkers) {\n const key = LinkerMap.getLinkerKeyFromAxisSpec(axisSpec);\n const linkerRecord = linkerMap.data.get(key);\n const linked = Array.from(linkerRecord?.linkWith.keys() ?? []);\n const linkerColumn = linkerRecord?.linkWith.get(linked[0]);\n\n if (linkerColumn) {\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n const linkerColumnId = new ColumnId({ name: linkerColumn.columnId, type: linkerColumn.spec.valueType }).toCanonicalString();\n result.set(axisId, { parentSource: linkerColumnId, spec: axisSpec });\n }\n }\n\n for (const [id] of parentsAxes) {\n const multipliesByNode = multipliesByMap.get(id);\n const multipliesByKeys = Array.from(multipliesByNode?.keys() ?? []);\n if (multipliesByNode && multipliesByKeys.length) {\n for (const key of multipliesByKeys) {\n const el = multipliesByNode.get(key)!;\n const axisId = AxisId.fromAxisSpec(el.spec).toCanonicalString()\n result.set(axisId, { parentSource: el.parentSource, spec: el.spec });\n }\n }\n }\n\n return result;\n }\n\n /** Allowed: all axes from parent (data) inputs + hanging axes from another (not data) inputs + axes from linkers;\n * these are all axes that can be in a compatible columns + hanging axes.\n */\n getAllowedAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = this.getColumnSourceAxes(allParentsAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const [input, data] of Object.entries(allParentsAndHangingAxes)) {\n if (input === this.componentName) {\n continue;\n }\n for (const v of data.hangingAxes) {\n result.set(...v);\n }\n }\n return result;\n }\n\n checkStateConsistency(state: State, options: SourceOption[]) {\n const thisState: ComponentState = state.components[this.componentName];\n\n return thisState.selectorStates.reduce((res, v) => {\n res[v.selectedSource] = options.some(op => op.value === v.selectedSource);\n return res;\n }, {} as Record<string, boolean>);\n }\n\n\n async getOptions(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n allParentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>, // hanging axes from all the inputs\n dataColumnPredicate: (spec: PColumnSpec) => boolean,\n ignoredNamesSet: Set<string> = new Set(),\n fixedSelectedSet: Set<ColumnOrAxisIdString> = new Set()\n ): Promise<ComponentGuideSimple> {\n const multipleSelectors = this.settings.multipleSelectors;\n const required = this.settings.required;\n const optionsInfo = new Map();\n\n if (this.dependsOn.length && this.dependsOn.some(dep => state.components[dep].selectorStates.length === 0)) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n if (\n this.strictlyDependsOnParents &&\n !this.settings.isDataComponent &&\n this.parentComponents.some(name => state.components[name].selectorStates.length === 0)\n ) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n const options: SourceOption[] = [];\n if (this.settings.axesAllowed) {\n const allowedAxes = this.getAllowedAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n for (const [idStr, { spec, parentSource }] of allowedAxes.entries()) {\n const id = columnOrAxisIdFromString(idStr) as AxisId;\n\n const isNonHomogenous = axisIsNonHomogenous(spec);\n\n const typeOK = this.allowedTypes.includes(spec.type);\n const annotationsOK = Object.entries(this.annotations).every(\n ([k, v]) => spec.annotations?.[k] === v\n );\n const checkBySpecOK = this.checkSourceBySpec ? this.checkSourceBySpec(spec, state) : true;\n const axisNatureOK = !this.settings.homogeneous || !isNonHomogenous;\n const ignored = ignoredNamesSet.has(id.name) || fixedSelectedSet.has(idStr);\n\n optionsInfo.set(idStr, {\n kind: 'axis',\n name: spec.name,\n label: await getColumnOrAxisLabel(store, idStr, [parentSource]),\n type: spec.type,\n mustBeConsumed: false,\n dividable: false,\n spec,\n annotations: spec.annotations,\n isNonHomogenous,\n isSubsetFilter: spec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter: spec.type === 'String' || spec.annotations?.[DISCRETE_FILTER_KEY] === 'true',\n parentSources: [parentSource],\n });\n\n if (typeOK && annotationsOK && checkBySpecOK && axisNatureOK && !ignored) {\n options.push({ value: idStr });\n }\n }\n }\n\n if (this.settings.columnsAllowed) {\n const allowedColumns = await store.pFrameProvider.getColumns([], false, this.allowedTypes, undefined, this.annotations);\n const strictlyCompatible = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents;\n const columnSourceAxes = this.getColumnSourceAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const columnId of allowedColumns) {\n const columnIdString = columnId.toCanonicalString();\n\n const columnSpec = await store.pFrameProvider.getColumnSpecById(columnId);\n if (!columnSpec) {\n continue;\n }\n const parentsAxes = allParentAndHangingAxes[this.componentName].parentsAxes;\n const columnAxesIds = columnSpec.axesSpec.map((spec) => AxisId.fromAxisSpec(spec).toCanonicalString());\n if (\n // do not add to available options label columns, or columns that are not fit by custom spec condition, or columns that are not fit by condition for data inputs\n isLabelColumn(columnSpec) || isLinkerColumn(columnSpec) ||\n (this.checkSourceBySpec && !this.checkSourceBySpec(columnSpec, state)) ||\n (this.settings.isDataComponent && !dataColumnPredicate(columnSpec)) ||\n strictlyCompatible && columnSourceAxes.size && columnAxesIds.some((id) => !columnSourceAxes.has(id)) ||\n parentsAxes.size && !(columnAxesIds.some((id) => parentsAxes.has(id)) || columnAxesIds.every((id) => columnSourceAxes.has(id)))\n ) {\n continue;\n }\n\n const columnInfo: ColumnData = {\n kind: 'column',\n name: columnSpec.name,\n label: columnSpec.annotations?.[COLUMN_LABEL_KEY] ?? columnSpec.name,\n type: columnSpec.valueType,\n spec: columnSpec,\n annotations: columnSpec.annotations,\n isSubsetFilter: columnSpec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter:\n columnSpec.valueType === 'String' ||\n columnSpec.annotations?.[DISCRETE_FILTER_KEY] === 'true'\n };\n optionsInfo.set(columnIdString, columnInfo);\n\n const ignored = ignoredNamesSet.has(columnId.name) || fixedSelectedSet.has(columnIdString);\n if (!ignored) {\n options.push({ value: columnIdString });\n }\n }\n }\n return {\n multipleSelectors,\n required,\n stateConsistency: this.checkStateConsistency(state, options),\n options,\n optionsInfo\n };\n }\n}\n"],"names":["isLinkerColumn","columnSpec","_a","IS_LINKER_COLUMN","_ComponentController","componentName","allowedTypes","settings","strictlyDependsOnParents","dependsOn","parentComponents","annotations","checkSourceBySpec","__publicField","state","selectorState","nextState","getStateCopy","selectedSourceStr","item","res","selectedHere","s","columnOrAxisIdFromString","store","parentSelectedSources","parentAxes","source","isColumnId","spec","idStr","AxisId","linkerMap","multipliesByMap","parentsAxes","hangingAxes","selectedHereSources","v","id","extraAxesSpecs","getNotAllowedAxes","allParentsAndHangingAxes","result","normalizedAxes","getNormalizedAxesList","axesAvailableWithLinkers","axisSpec","key","LinkerMap","linkerRecord","linked","linkerColumn","axisId","linkerColumnId","ColumnId","multipliesByNode","multipliesByKeys","el","input","data","options","op","allParentAndHangingAxes","dataColumnPredicate","ignoredNamesSet","fixedSelectedSet","multipleSelectors","required","optionsInfo","dep","name","allowedAxes","parentSource","isNonHomogenous","axisIsNonHomogenous","typeOK","annotationsOK","k","checkBySpecOK","axisNatureOK","ignored","getColumnOrAxisLabel","SUBSET_FILTER_KEY","_b","DISCRETE_FILTER_KEY","allowedColumns","strictlyCompatible","columnSourceAxes","columnId","columnIdString","columnAxesIds","isLabelColumn","columnInfo","_c","COLUMN_LABEL_KEY","_d","_e","ComponentController"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ComponentController.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/controllers/ComponentController.ts"],"sourcesContent":["import { getNormalizedAxesList, isLabelColumn } from '@platforma-sdk/model';\nimport type {\n ColumnData,\n ComponentGuideSimple,\n ComponentState,\n InputState,\n SelectorState,\n SelectorStateFilter,\n SelectorStateSimple,\n SourceOption,\n} from '../common';\nimport {\n COLUMN_LABEL_KEY,\n DISCRETE_FILTER_KEY,\n IS_LINKER_COLUMN,\n SUBSET_FILTER_KEY,\n} from '../constants';\nimport type { DataStore } from '../store';\nimport { AxesSet, ColumnId, ColumnOrAxisIdString } from '../spec';\nimport { AxisId, columnOrAxisIdFromString, isColumnId } from '../spec';\nimport { AxisSpec, LinkerMap, PColumnSpec, ValueType } from '@milaboratories/pl-model-common';\nimport { axisIsNonHomogenous, getColumnOrAxisLabel, getNotAllowedAxes, getStateCopy, MultipliesByMap } from '../utils';\n\nconst isLinkerColumn = (columnSpec: PColumnSpec) => columnSpec?.annotations?.[IS_LINKER_COLUMN] === 'true';\n\ninterface ComponentControllerSettings {\n isDataComponent: boolean; // X, Y, Data source etc.\n multipleSelectors: boolean; // more than 1 selected column in input\n required: boolean;\n homogeneous: boolean;\n axesAllowed: boolean;\n columnsAllowed: boolean;\n columnsWithExtraAxesAllowed: boolean; // can contain column with extra axes with fixed values\n dimensionConsumer: boolean; // remove extra dimension from data-mapping after selecting a heterogeneous axis\n}\n\ninterface FieldControllerOptions<State extends InputState, Field extends keyof State['components']> {\n componentName: Field;\n allowedTypes: ValueType[];\n checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean; // for more complicated logic than type is in allowed types and annotation exists\n annotations?: Record<string, string>;\n parentComponents?: (keyof State['components'])[];\n dependsOn?: (keyof State['components'])[];\n strictlyDependsOnParents?: boolean;\n ignoredOptionIds?: string[];\n settings: Partial<ComponentControllerSettings>;\n}\n\nexport class ComponentController<State extends InputState, Field extends keyof State['components']> {\n private static DefaultSettings: ComponentControllerSettings = {\n isDataComponent: false,\n multipleSelectors: false,\n required: false,\n homogeneous: false,\n axesAllowed: false,\n columnsAllowed: true,\n columnsWithExtraAxesAllowed: true,\n dimensionConsumer: false,\n };\n\n readonly componentName: Field;\n readonly allowedTypes: ValueType[];\n readonly settings: ComponentControllerSettings;\n private readonly dependsOn: (keyof State['components'])[];\n private readonly parentComponents: (keyof State['components'])[];\n private readonly strictlyDependsOnParents: boolean;\n private readonly annotations: Record<string, string>;\n private readonly checkSourceBySpec?: (spec: AxisSpec | PColumnSpec, state: State) => boolean;\n\n constructor({\n componentName,\n allowedTypes,\n settings,\n strictlyDependsOnParents,\n dependsOn = [],\n parentComponents = [],\n annotations = {},\n checkSourceBySpec,\n }: FieldControllerOptions<State, Field>) {\n this.componentName = componentName;\n this.allowedTypes = [...allowedTypes];\n this.settings = { ...ComponentController.DefaultSettings, ...settings };\n this.dependsOn = [...dependsOn];\n this.parentComponents = [...parentComponents]; // corresponding data components for meta or X for Y in scatterplot\n this.strictlyDependsOnParents = strictlyDependsOnParents ?? true; // meta-inputs are strictly-depending on parents, X by Y (Y by X) - don't\n this.annotations = { ...annotations };\n if (checkSourceBySpec) {\n this.checkSourceBySpec = checkSourceBySpec;\n }\n }\n\n get isRequired(): boolean {\n return this.settings.required;\n }\n\n get isDimensionsConsumer(): boolean {\n return this.settings.dimensionConsumer;\n }\n\n addSelected(state: State, selectorState: SelectorStateSimple | SelectorStateFilter) {\n const nextState = getStateCopy(state);\n nextState.components[this.componentName].selectorStates.push(selectorState as SelectorStateFilter);\n\n // ***\n // here should be logic for possibly parent qualifications updating\n // ***\n\n return nextState;\n }\n\n deleteSelected(state: State, selectedSourceStr: ColumnOrAxisIdString) {\n const nextState = getStateCopy(state);\n // ***\n // here should be logic for removing unnecessary qualifications (it can appear when some sources are deleted)\n // ***\n nextState.components[this.componentName].selectorStates = (\n nextState.components[this.componentName].selectorStates as SelectorState[]\n ).filter(item => item.selectedSource !== selectedSourceStr);\n return nextState;\n }\n\n getParentSelectedSources(state: State): (ColumnId | AxisId)[] {\n const selectedSources = this.parentComponents.reduce((res: (ColumnId | AxisId)[], item) => {\n const selectedHere = state.components[item].selectorStates.map(s =>\n columnOrAxisIdFromString(s.selectedSource)\n );\n res.push(...selectedHere);\n return res;\n }, []);\n\n // ***\n // consider parent qualifications without selected here\n // ***\n return selectedSources;\n }\n\n async getParentsAxes(store: DataStore, state: State) {\n const parentSelectedSources = this.getParentSelectedSources(state);\n const parentAxes = new Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>();\n for (const source of parentSelectedSources) {\n if (isColumnId(source)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(source);\n for (const spec of columnSpec?.axesSpec ?? []) {\n const id = AxisId.fromAxisSpec(spec);\n const idStr = id.toCanonicalString();\n if (parentAxes.has(idStr)) {\n continue;\n }\n parentAxes.set(idStr, { parentSource: source.toCanonicalString(), spec });\n }\n }\n }\n\n return parentAxes;\n }\n\n async getParentAndHangingAxes(store: DataStore, state: State, linkerMap: LinkerMap, multipliesByMap: MultipliesByMap): Promise<{\n parentsAxes: AxesSet,\n hangingAxes: AxesSet,\n }> {\n const parentsAxes = await this.getParentsAxes(store, state);\n const hangingAxes: AxesSet = new Map();\n\n if (!this.settings.isDataComponent) {\n const thisState: ComponentState = state.components[this.componentName];\n const selectedHereSources = thisState.selectorStates.map((v) => v.selectedSource);\n for (const source of selectedHereSources) {\n const id = columnOrAxisIdFromString(source);\n if (!isColumnId(id)) {\n continue;\n }\n const columnSpec = await store.pFrameProvider.getColumnSpecById(id);\n if (!columnSpec) {\n continue;\n }\n const extraAxesSpecs = getNotAllowedAxes(columnSpec, Array.from(parentsAxes.values()).map(v => v.spec), linkerMap, multipliesByMap);\n\n for (const spec of extraAxesSpecs) {\n hangingAxes.set(AxisId.fromAxisSpec(spec).toCanonicalString(), { parentSource: source, spec });\n }\n }\n }\n\n return { parentsAxes, hangingAxes };\n }\n\n /** Get axes to check available columns compatibility: all parents axes + available with these parent axes linker axes */\n getColumnSourceAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = new Map();\n const { parentsAxes } = allParentsAndHangingAxes[this.componentName];\n\n for (const v of parentsAxes) {\n result.set(...v);\n }\n\n if (this.settings.isDataComponent) {\n return result;\n }\n\n // normalized list concider axes parents (not component parents)\n const normalizedAxes = getNormalizedAxesList(Array.from(parentsAxes.values()).map((v) => v.spec));\n const axesAvailableWithLinkers = getNormalizedAxesList(linkerMap.getReachableByLinkersAxesFromAxes(normalizedAxes));\n\n for (const axisSpec of axesAvailableWithLinkers) {\n const key = LinkerMap.getLinkerKeyFromAxisSpec(axisSpec);\n const linkerRecord = linkerMap.data.get(key);\n const linked = Array.from(linkerRecord?.linkWith.keys() ?? []);\n const linkerColumn = linkerRecord?.linkWith.get(linked[0]);\n\n if (linkerColumn) {\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n const linkerColumnId = new ColumnId({ name: linkerColumn.columnId, type: linkerColumn.spec.valueType }).toCanonicalString();\n result.set(axisId, { parentSource: linkerColumnId, spec: axisSpec });\n }\n }\n\n for (const [id] of parentsAxes) {\n const multipliesByNode = multipliesByMap.get(id);\n const multipliesByKeys = Array.from(multipliesByNode?.keys() ?? []);\n if (multipliesByNode && multipliesByKeys.length) {\n for (const key of multipliesByKeys) {\n const el = multipliesByNode.get(key)!;\n const axisId = AxisId.fromAxisSpec(el.spec).toCanonicalString()\n result.set(axisId, { parentSource: el.parentSource, spec: el.spec });\n }\n }\n }\n\n return result;\n }\n\n /** Allowed: all axes from parent (data) inputs + hanging axes from another (not data) inputs + axes from linkers;\n * these are all axes that can be in a compatible columns + hanging axes.\n */\n getAllowedAxes(\n allParentsAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n ): AxesSet {\n const result = this.getColumnSourceAxes(allParentsAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const [input, data] of Object.entries(allParentsAndHangingAxes)) {\n if (input === this.componentName && !this.settings.multipleSelectors) {\n continue;\n }\n for (const v of data.hangingAxes) {\n result.set(...v);\n }\n }\n return result;\n }\n\n checkStateConsistency(state: State, options: SourceOption[]) {\n const thisState: ComponentState = state.components[this.componentName];\n\n return thisState.selectorStates.reduce((res, v) => {\n res[v.selectedSource] = options.some(op => op.value === v.selectedSource);\n return res;\n }, {} as Record<string, boolean>);\n }\n\n\n async getOptions(\n store: DataStore,\n state: State,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n allParentAndHangingAxes: Record<keyof State['components'], { parentsAxes: AxesSet, hangingAxes: AxesSet }>, // hanging axes from all the inputs\n dataColumnPredicate: (spec: PColumnSpec) => boolean,\n ignoredNamesSet: Set<string> = new Set(),\n fixedSelectedSet: Set<ColumnOrAxisIdString> = new Set()\n ): Promise<ComponentGuideSimple> {\n const multipleSelectors = this.settings.multipleSelectors;\n const required = this.settings.required;\n const optionsInfo = new Map();\n\n if (this.dependsOn.length && this.dependsOn.some(dep => state.components[dep].selectorStates.length === 0)) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n if (\n this.strictlyDependsOnParents &&\n !this.settings.isDataComponent &&\n this.parentComponents.some(name => state.components[name].selectorStates.length === 0)\n ) {\n return { multipleSelectors, required, stateConsistency: this.checkStateConsistency(state, []), options: [], optionsInfo };\n }\n\n const options: SourceOption[] = [];\n if (this.settings.axesAllowed) {\n const allowedAxes = this.getAllowedAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n for (const [idStr, { spec, parentSource }] of allowedAxes.entries()) {\n const id = columnOrAxisIdFromString(idStr) as AxisId;\n\n const isNonHomogenous = axisIsNonHomogenous(spec);\n\n const typeOK = this.allowedTypes.includes(spec.type);\n const annotationsOK = Object.entries(this.annotations).every(\n ([k, v]) => spec.annotations?.[k] === v\n );\n const checkBySpecOK = this.checkSourceBySpec ? this.checkSourceBySpec(spec, state) : true;\n const axisNatureOK = !this.settings.homogeneous || !isNonHomogenous;\n const ignored = ignoredNamesSet.has(id.name) || fixedSelectedSet.has(idStr);\n\n optionsInfo.set(idStr, {\n kind: 'axis',\n name: spec.name,\n label: await getColumnOrAxisLabel(store, idStr, [parentSource]),\n type: spec.type,\n mustBeConsumed: false,\n dividable: false,\n spec,\n annotations: spec.annotations,\n isNonHomogenous,\n isSubsetFilter: spec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter: spec.type === 'String' || spec.annotations?.[DISCRETE_FILTER_KEY] === 'true',\n parentSources: [parentSource],\n });\n\n if (typeOK && annotationsOK && checkBySpecOK && axisNatureOK && !ignored) {\n options.push({ value: idStr });\n }\n }\n }\n\n if (this.settings.columnsAllowed) {\n const allowedColumns = await store.pFrameProvider.getColumns([], false, this.allowedTypes, undefined, this.annotations);\n const strictlyCompatible = !this.settings.columnsWithExtraAxesAllowed && this.strictlyDependsOnParents;\n const columnSourceAxes = this.getColumnSourceAxes(allParentAndHangingAxes, linkerMap, multipliesByMap);\n\n for (const columnId of allowedColumns) {\n const columnIdString = columnId.toCanonicalString();\n\n const columnSpec = await store.pFrameProvider.getColumnSpecById(columnId);\n if (!columnSpec) {\n continue;\n }\n const parentsAxes = allParentAndHangingAxes[this.componentName].parentsAxes;\n const columnAxesIds = columnSpec.axesSpec.map((spec) => AxisId.fromAxisSpec(spec).toCanonicalString());\n if (\n // do not add to available options label columns, or columns that are not fit by custom spec condition, or columns that are not fit by condition for data inputs\n isLabelColumn(columnSpec) || isLinkerColumn(columnSpec) ||\n (this.checkSourceBySpec && !this.checkSourceBySpec(columnSpec, state)) ||\n (this.settings.isDataComponent && !dataColumnPredicate(columnSpec)) ||\n strictlyCompatible && columnSourceAxes.size && columnAxesIds.some((id) => !columnSourceAxes.has(id)) ||\n parentsAxes.size && !(columnAxesIds.some((id) => parentsAxes.has(id)) || columnAxesIds.every((id) => columnSourceAxes.has(id)))\n ) {\n continue;\n }\n\n const columnInfo: ColumnData = {\n kind: 'column',\n name: columnSpec.name,\n label: columnSpec.annotations?.[COLUMN_LABEL_KEY] ?? columnSpec.name,\n type: columnSpec.valueType,\n spec: columnSpec,\n annotations: columnSpec.annotations,\n isSubsetFilter: columnSpec.annotations?.[SUBSET_FILTER_KEY] === 'true',\n isDiscreteFilter:\n columnSpec.valueType === 'String' ||\n columnSpec.annotations?.[DISCRETE_FILTER_KEY] === 'true'\n };\n optionsInfo.set(columnIdString, columnInfo);\n\n const ignored = ignoredNamesSet.has(columnId.name) || fixedSelectedSet.has(columnIdString);\n if (!ignored) {\n options.push({ value: columnIdString });\n }\n }\n }\n return {\n multipleSelectors,\n required,\n stateConsistency: this.checkStateConsistency(state, options),\n options,\n optionsInfo\n };\n }\n}\n"],"names":["isLinkerColumn","columnSpec","_a","IS_LINKER_COLUMN","_ComponentController","componentName","allowedTypes","settings","strictlyDependsOnParents","dependsOn","parentComponents","annotations","checkSourceBySpec","__publicField","state","selectorState","nextState","getStateCopy","selectedSourceStr","item","res","selectedHere","s","columnOrAxisIdFromString","store","parentSelectedSources","parentAxes","source","isColumnId","spec","idStr","AxisId","linkerMap","multipliesByMap","parentsAxes","hangingAxes","selectedHereSources","v","id","extraAxesSpecs","getNotAllowedAxes","allParentsAndHangingAxes","result","normalizedAxes","getNormalizedAxesList","axesAvailableWithLinkers","axisSpec","key","LinkerMap","linkerRecord","linked","linkerColumn","axisId","linkerColumnId","ColumnId","multipliesByNode","multipliesByKeys","el","input","data","options","op","allParentAndHangingAxes","dataColumnPredicate","ignoredNamesSet","fixedSelectedSet","multipleSelectors","required","optionsInfo","dep","name","allowedAxes","parentSource","isNonHomogenous","axisIsNonHomogenous","typeOK","annotationsOK","k","checkBySpecOK","axisNatureOK","ignored","getColumnOrAxisLabel","SUBSET_FILTER_KEY","_b","DISCRETE_FILTER_KEY","allowedColumns","strictlyCompatible","columnSourceAxes","columnId","columnIdString","columnAxesIds","isLabelColumn","columnInfo","_c","COLUMN_LABEL_KEY","_d","_e","ComponentController"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DISCRETE_VALUES_KEY as E, HIGH_CARDINALITY as D } from "../constants.js";
|
|
2
|
-
import { AxisId as
|
|
3
|
-
import { getStateCopy as k, getDefaultInfo as O, dataColumnPredicateDefault as B, createLinkerMap as P, createMultipliesByMap as j, getColumnOrAxisValueLabelsId as
|
|
2
|
+
import { AxisId as w, columnOrAxisIdFromString as A } from "../spec.js";
|
|
3
|
+
import { getStateCopy as k, getDefaultInfo as O, dataColumnPredicateDefault as B, createLinkerMap as P, createMultipliesByMap as j, getColumnOrAxisValueLabelsId as F } from "../utils.js";
|
|
4
4
|
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
|
|
5
5
|
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
|
|
6
6
|
import "../_virtual/canonicalize.js";
|
|
7
7
|
import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
|
|
8
8
|
import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
|
|
9
|
-
import { deriveLabels as
|
|
9
|
+
import { deriveLabels as M } from "../node_modules/@platforma-sdk/model/dist/render/util/label.js";
|
|
10
10
|
import "../node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js";
|
|
11
|
-
var
|
|
11
|
+
var V = Object.defineProperty, H = (h, e, t) => e in h ? V(h, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[e] = t, x = (h, e, t) => H(h, typeof e != "symbol" ? e + "" : e, t);
|
|
12
12
|
class W {
|
|
13
13
|
constructor(e, t) {
|
|
14
14
|
x(this, "ignoredOptionIdNames", []), x(this, "dataInputs", []), x(this, "dontAllowUnfilteredHighCardinality", !1), x(this, "allowHangingAxes", !1), this.simpleComponentControllers = e, this.filterComponentControllers = t;
|
|
@@ -28,17 +28,17 @@ class W {
|
|
|
28
28
|
throw Error(`Unknown input name: ${String(e)}`);
|
|
29
29
|
}
|
|
30
30
|
changeSelected(e, t, o, r) {
|
|
31
|
-
const n = o.components[e].selectorStates,
|
|
32
|
-
let
|
|
33
|
-
return
|
|
34
|
-
|
|
35
|
-
}),
|
|
36
|
-
|
|
31
|
+
const n = o.components[e].selectorStates, a = n.filter((s) => !r.find((l) => l.selectedSource === s.selectedSource)), d = r.filter((s) => !n.find((l) => l.selectedSource === s.selectedSource));
|
|
32
|
+
let m = k(o);
|
|
33
|
+
return a.forEach((s) => {
|
|
34
|
+
m = this.deleteSelected(e, t, m, s);
|
|
35
|
+
}), d.forEach((s) => {
|
|
36
|
+
m = this.addSelected(e, m, s);
|
|
37
37
|
}), o.components[e].selectorStates = r.map(
|
|
38
38
|
(s) => o.components[e].selectorStates.find(
|
|
39
|
-
(
|
|
39
|
+
(l) => l.selectedSource === s.selectedSource
|
|
40
40
|
)
|
|
41
|
-
).filter(Boolean),
|
|
41
|
+
).filter(Boolean), m;
|
|
42
42
|
}
|
|
43
43
|
switchDividableAxis(e, t) {
|
|
44
44
|
return k(e);
|
|
@@ -77,15 +77,15 @@ class W {
|
|
|
77
77
|
t.add(r);
|
|
78
78
|
for (const o of Object.keys(this.filterComponentControllers))
|
|
79
79
|
if (this.filterComponentControllers[o].isDimensionsConsumer)
|
|
80
|
-
for (const { selectedSource: r, type: n, selectedFilterValues:
|
|
81
|
-
n === "equals" && (
|
|
80
|
+
for (const { selectedSource: r, type: n, selectedFilterValues: a } of e.components[o].selectorStates)
|
|
81
|
+
n === "equals" && (a == null ? void 0 : a.length) === 1 && t.add(r);
|
|
82
82
|
return t;
|
|
83
83
|
}
|
|
84
84
|
async getParentAndHangingAxesByInputs(e, t, o, r) {
|
|
85
|
-
const n = { ...this.simpleComponentControllers, ...this.filterComponentControllers },
|
|
86
|
-
for (const [
|
|
87
|
-
|
|
88
|
-
return
|
|
85
|
+
const n = { ...this.simpleComponentControllers, ...this.filterComponentControllers }, a = {};
|
|
86
|
+
for (const [d, m] of Object.entries(n))
|
|
87
|
+
a[d] = await m.getParentAndHangingAxes(e, t, o, r);
|
|
88
|
+
return a;
|
|
89
89
|
}
|
|
90
90
|
/** Depends on chart type. */
|
|
91
91
|
getMustBeConsumedAxes(e, t) {
|
|
@@ -95,37 +95,40 @@ class W {
|
|
|
95
95
|
* If some of them is not moved to 'filters', 'tabBy' or 'facetBy' (dimension reducers) chart can't be rendered */
|
|
96
96
|
markMustBeConsumedAxes(e, t, o, r) {
|
|
97
97
|
var n;
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
},
|
|
102
|
-
for (const s of
|
|
103
|
-
|
|
104
|
-
this.allowHangingAxes || Object.entries(r).forEach(([s, { hangingAxes:
|
|
105
|
-
for (const i of
|
|
106
|
-
|
|
98
|
+
const a = this.getConsumedOptionsSet(e), d = (s) => {
|
|
99
|
+
const l = t.get(s);
|
|
100
|
+
l && l.kind === "axis" && (l.mustBeConsumed = !0);
|
|
101
|
+
}, m = this.getMustBeConsumedAxes(e, t);
|
|
102
|
+
for (const s of m)
|
|
103
|
+
a.has(s) || d(s);
|
|
104
|
+
this.allowHangingAxes || Object.entries(r).forEach(([s, { hangingAxes: l }]) => {
|
|
105
|
+
for (const i of l.keys())
|
|
106
|
+
a.has(i) || d(i);
|
|
107
107
|
});
|
|
108
108
|
for (const s of o) {
|
|
109
|
-
const
|
|
110
|
-
(
|
|
109
|
+
const l = t.get(s);
|
|
110
|
+
(l == null ? void 0 : l.kind) === "axis" && l.isNonHomogenous && !a.has(s) && d(s);
|
|
111
111
|
}
|
|
112
112
|
if (this.dontAllowUnfilteredHighCardinality) {
|
|
113
113
|
const s = (i) => {
|
|
114
|
-
var
|
|
115
|
-
return ((
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
|
|
114
|
+
var c;
|
|
115
|
+
return ((c = i == null ? void 0 : i.annotations) == null ? void 0 : c[D]) === "true";
|
|
116
|
+
}, l = ((n = e.components.filters) == null ? void 0 : n.selectorStates.reduce((i, c) => {
|
|
117
|
+
var p;
|
|
118
|
+
if (((p = c == null ? void 0 : c.selectedFilterValues) == null ? void 0 : p.length) !== 1 && c.type !== "subset")
|
|
119
|
+
return i;
|
|
120
|
+
const u = t.get(c.selectedSource);
|
|
121
|
+
return (u == null ? void 0 : u.kind) === "column" && u.spec.axesSpec.filter(s).forEach((f) => i.add(w.fromAxisSpec(f).toCanonicalString())), (u == null ? void 0 : u.kind) === "axis" && s(u.spec) && i.add(w.fromAxisSpec(u.spec).toCanonicalString()), i;
|
|
119
122
|
}, /* @__PURE__ */ new Set())) ?? /* @__PURE__ */ new Set();
|
|
120
123
|
this.dataInputs.forEach((i) => {
|
|
121
|
-
for (const { selectedSource:
|
|
122
|
-
const
|
|
123
|
-
if ((
|
|
124
|
-
const f =
|
|
125
|
-
|
|
126
|
-
}), (
|
|
127
|
-
const
|
|
128
|
-
|
|
124
|
+
for (const { selectedSource: c } of e.components[i].selectorStates) {
|
|
125
|
+
const p = t.get(c);
|
|
126
|
+
if ((p == null ? void 0 : p.kind) === "column" && p.spec.axesSpec.filter(s).forEach((u) => {
|
|
127
|
+
const f = w.fromAxisSpec(u).toCanonicalString();
|
|
128
|
+
l.has(f) || d(f);
|
|
129
|
+
}), (p == null ? void 0 : p.kind) === "axis" && s(p.spec)) {
|
|
130
|
+
const u = w.fromAxisSpec(p.spec).toCanonicalString();
|
|
131
|
+
l.has(u) || d(u);
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
});
|
|
@@ -133,11 +136,11 @@ class W {
|
|
|
133
136
|
}
|
|
134
137
|
setColumnLabels(e, t) {
|
|
135
138
|
const o = [...e].filter((n) => {
|
|
136
|
-
var
|
|
137
|
-
return ((
|
|
138
|
-
}), r =
|
|
139
|
-
o.forEach((n,
|
|
140
|
-
t.get(n).label = r[
|
|
139
|
+
var a;
|
|
140
|
+
return ((a = t.get(n)) == null ? void 0 : a.kind) === "column";
|
|
141
|
+
}), r = M(o, (n) => t.get(n).spec);
|
|
142
|
+
o.forEach((n, a) => {
|
|
143
|
+
t.get(n).label = r[a].label;
|
|
141
144
|
});
|
|
142
145
|
}
|
|
143
146
|
/** Calculates information for data-mapping interface:
|
|
@@ -145,62 +148,62 @@ class W {
|
|
|
145
148
|
* information for every option (label, value type, must be consumed etc),
|
|
146
149
|
* information about full data-mapping state (ready to data loading and rendering or not, contains inconsistency or not) */
|
|
147
150
|
async calculateOptions(e, t, o = [], r = B) {
|
|
148
|
-
const n = this.createEmptyComponentsGuide(t),
|
|
149
|
-
for (const [C, y] of Object.entries(
|
|
151
|
+
const n = this.createEmptyComponentsGuide(t), a = new Set(this.ignoredOptionIdNames), d = new Set(o), m = await P(e), s = await j(e), l = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), c = await this.getParentAndHangingAxesByInputs(e, t, m, s), p = { ...this.simpleComponentControllers, ...this.filterComponentControllers };
|
|
152
|
+
for (const [C, y] of Object.entries(p)) {
|
|
150
153
|
const S = await y.getOptions(
|
|
151
154
|
e,
|
|
152
155
|
t,
|
|
153
|
-
p,
|
|
154
|
-
s,
|
|
155
156
|
m,
|
|
156
|
-
|
|
157
|
+
s,
|
|
157
158
|
c,
|
|
158
|
-
|
|
159
|
+
r,
|
|
160
|
+
a,
|
|
161
|
+
d
|
|
159
162
|
);
|
|
160
163
|
for (const g of S.options)
|
|
161
164
|
i.add(g.value);
|
|
162
165
|
for (const g of S.optionsInfo)
|
|
163
|
-
|
|
166
|
+
l.set(...g);
|
|
164
167
|
n[C] = S;
|
|
165
168
|
}
|
|
166
|
-
this.markMustBeConsumedAxes(t,
|
|
167
|
-
const
|
|
169
|
+
this.markMustBeConsumedAxes(t, l, i, c), this.setColumnLabels(i, l);
|
|
170
|
+
const u = this.isConsistent(t, n), f = (C) => l.get(C) ?? O(C);
|
|
168
171
|
return {
|
|
169
172
|
components: n,
|
|
170
173
|
getSourceInfo: f,
|
|
171
174
|
fullOptionsSet: i,
|
|
172
175
|
readyData: this.readyDataInputs(t),
|
|
173
|
-
ready: this.readyForPlotBuilding(t,
|
|
174
|
-
consistent:
|
|
176
|
+
ready: this.readyForPlotBuilding(t, u, i, f),
|
|
177
|
+
consistent: u
|
|
175
178
|
};
|
|
176
179
|
}
|
|
177
|
-
async getUniqueSourceValuesWithLabels(e, t, o, r, n,
|
|
178
|
-
var
|
|
179
|
-
const
|
|
180
|
+
async getUniqueSourceValuesWithLabels(e, t, o, r, n, a) {
|
|
181
|
+
var d;
|
|
182
|
+
const m = (i) => i.sort((c, p) => c.label.localeCompare(p.label, "en", { numeric: !0 })), s = t.getSourceInfo(o), l = (d = s.annotations) == null ? void 0 : d[E];
|
|
180
183
|
try {
|
|
181
|
-
const i =
|
|
184
|
+
const i = l ? JSON.parse(l).map((c) => String(c)) : null;
|
|
182
185
|
if (i) {
|
|
183
|
-
const
|
|
184
|
-
return
|
|
186
|
+
const c = i.map((p) => ({ value: p, label: p }));
|
|
187
|
+
return m(c), { values: c, overflow: !1 };
|
|
185
188
|
}
|
|
186
189
|
} catch {
|
|
187
|
-
console.error(`Parsing error: discrete values annotation ${
|
|
190
|
+
console.error(`Parsing error: discrete values annotation ${l} in ${o}`);
|
|
188
191
|
}
|
|
189
192
|
if (s.kind === "axis") {
|
|
190
|
-
const i = A(o),
|
|
191
|
-
let
|
|
192
|
-
if (
|
|
193
|
-
n && (
|
|
193
|
+
const i = A(o), c = s.parentSources.map(A), p = await F(e, o, s.parentSources);
|
|
194
|
+
let u = [];
|
|
195
|
+
if (p) {
|
|
196
|
+
n && (u = [{
|
|
194
197
|
type: "bySingleColumnV2",
|
|
195
198
|
column: {
|
|
196
199
|
type: "column",
|
|
197
|
-
id:
|
|
200
|
+
id: p.name
|
|
198
201
|
},
|
|
199
202
|
predicate: {
|
|
200
203
|
operator: "StringIContains",
|
|
201
204
|
substring: n
|
|
202
205
|
}
|
|
203
|
-
}]),
|
|
206
|
+
}]), a && (u = [{
|
|
204
207
|
type: "bySingleColumnV2",
|
|
205
208
|
column: {
|
|
206
209
|
type: "axis",
|
|
@@ -208,16 +211,16 @@ class W {
|
|
|
208
211
|
},
|
|
209
212
|
predicate: {
|
|
210
213
|
operator: "StringIContains",
|
|
211
|
-
substring:
|
|
214
|
+
substring: a
|
|
212
215
|
}
|
|
213
216
|
}]);
|
|
214
|
-
const { data: S, axesData: g } = await e.pFrameProvider.getSingleColumnData(
|
|
215
|
-
for (let
|
|
216
|
-
I.push({ value: String(v[
|
|
217
|
-
return
|
|
217
|
+
const { data: S, axesData: g } = await e.pFrameProvider.getSingleColumnData(p, u), v = g[i.toCanonicalString()], I = [];
|
|
218
|
+
for (let b = 0; b < Math.min(v.length, r ?? v.length); b++)
|
|
219
|
+
I.push({ value: String(v[b]), label: String(S[b]) });
|
|
220
|
+
return m(I), { values: I, overflow: !(r === void 0 || v.length < r) };
|
|
218
221
|
}
|
|
219
|
-
const f = n ??
|
|
220
|
-
f && (
|
|
222
|
+
const f = n ?? a;
|
|
223
|
+
f && (u = [{
|
|
221
224
|
type: "bySingleColumnV2",
|
|
222
225
|
column: {
|
|
223
226
|
type: "axis",
|
|
@@ -228,22 +231,22 @@ class W {
|
|
|
228
231
|
substring: f
|
|
229
232
|
}
|
|
230
233
|
}]);
|
|
231
|
-
const C = await e.pFrameProvider.getAxisUniqueValues(i, [
|
|
232
|
-
return
|
|
234
|
+
const C = await e.pFrameProvider.getAxisUniqueValues(i, [c[0]], r, u), y = C.values.map((S) => ({ value: String(S), label: String(S) }));
|
|
235
|
+
return m(y), { values: y, overflow: C.overflow };
|
|
233
236
|
}
|
|
234
237
|
if (s.kind === "column") {
|
|
235
|
-
const i = n ??
|
|
238
|
+
const i = n ?? a, c = A(o), p = i ? [{
|
|
236
239
|
type: "bySingleColumnV2",
|
|
237
240
|
column: {
|
|
238
241
|
type: "column",
|
|
239
|
-
id:
|
|
242
|
+
id: c.name
|
|
240
243
|
},
|
|
241
244
|
predicate: {
|
|
242
245
|
operator: "StringIContains",
|
|
243
246
|
substring: i
|
|
244
247
|
}
|
|
245
|
-
}] : [],
|
|
246
|
-
return
|
|
248
|
+
}] : [], u = await e.pFrameProvider.getColumnUniqueValues(c, r, p), f = u.values.map((C) => ({ value: String(C), label: String(C) }));
|
|
249
|
+
return m(f), { values: f, overflow: u.overflow };
|
|
247
250
|
}
|
|
248
251
|
return { values: [], overflow: !1 };
|
|
249
252
|
}
|
|
@@ -270,17 +273,17 @@ class W {
|
|
|
270
273
|
if (!t || !this.readyDataInputs(e))
|
|
271
274
|
return !1;
|
|
272
275
|
let n = !1;
|
|
273
|
-
for (const
|
|
274
|
-
const
|
|
275
|
-
if (
|
|
276
|
+
for (const d of o) {
|
|
277
|
+
const m = r(d);
|
|
278
|
+
if (m && m.kind === "axis" && m.mustBeConsumed) {
|
|
276
279
|
n = !0;
|
|
277
280
|
break;
|
|
278
281
|
}
|
|
279
282
|
}
|
|
280
|
-
const
|
|
281
|
-
for (const
|
|
282
|
-
this.simpleComponentControllers[
|
|
283
|
-
return
|
|
283
|
+
const a = [];
|
|
284
|
+
for (const d of Object.keys(this.simpleComponentControllers))
|
|
285
|
+
this.simpleComponentControllers[d].isRequired && a.push(d);
|
|
286
|
+
return a.every((d) => e.components[d].selectorStates.length > 0) && !n;
|
|
284
287
|
}
|
|
285
288
|
async createDataForPlot(e, t) {
|
|
286
289
|
return {
|