@milaboratories/graph-maker 1.1.223 → 1.1.225

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/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { CategoricalPalette, ContinuousPalette, Palette } from './components/AesSettings/types';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type { AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DefaultPalettes,\n DendroNodeInfo,\n FilterLabelsInfoBySourceMap,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport type { LoadedDefaultOptionsMap } from './utils';\nimport { createUpdatedWithNewDefaultsOptionsState, isOptionsStateNeedsToBeUpdated, loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\nimport { DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE } from './constantsAesthetic';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n // previously used default options\n usedDefaultOptions: initialData.usedDefaultOptions ? copyJSON(initialData.usedDefaultOptions ?? {}) as LoadedDefaultOptionsMap<ChartType> : null,\n\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: initialData.currentTab === undefined ? 'dataMapping' : initialData.currentTab,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n defaults: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: Ref<DemoDataStore | null>;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n defaultPalette: DefaultPalettes;\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: Ref<DemoDataStore | null>,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: Palette | { categorical?: Palette; continuous?: Palette },\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n defaults: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette: {\n categorical: typeof defaultPalette === 'object' && defaultPalette.categorical\n ? defaultPalette.categorical as CategoricalPalette\n : typeof defaultPalette === 'string' ? defaultPalette as CategoricalPalette : DEFAULT_CATEGORICAL_PALETTE,\n continuous: typeof defaultPalette === 'object' && defaultPalette.continuous\n ? defaultPalette.continuous as ContinuousPalette\n : typeof defaultPalette === 'string' ? defaultPalette as ContinuousPalette : DEFAULT_CONTINUOUS_PALETTE,\n },\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n metaColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: GraphMakerProps['defaultPalette'],\n) {\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<FilterLabelsInfoBySourceMap>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n dataStoreRef,\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n\n const defaultOptionsCounter = ref(0);\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || !ds) {\n return;\n }\n defaultOptionsCounter.value++;\n const counter = defaultOptionsCounter.value;\n store.value.loading.defaults = true;\n if (reactiveState.usedDefaultOptions === null) {\n store.value.loading.initialInputGuide = false;\n }\n const loadedDefaultOptions = await loadDefaultSources(ds, defaultOptions);\n if (defaultOptionsCounter.value !== counter) {\n return;\n }\n const { usedDefaultOptions, optionsState } = reactiveState;\n const needsToBeUpdated = isOptionsStateNeedsToBeUpdated(optionsState, usedDefaultOptions, loadedDefaultOptions);\n if (!needsToBeUpdated) {\n return;\n }\n store.value.loading.initialCharts = true; // we want to show loader when default are really changed and new chart data is requested\n reactiveState.optionsState.components = createUpdatedWithNewDefaultsOptionsState(optionsState, usedDefaultOptions, loadedDefaultOptions);\n reactiveState.usedDefaultOptions = loadedDefaultOptions;\n store.value.loading.defaults = false;\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n if (defaultOptionsRef.value === null || dataStoreRef.value === null) { // they are not ready, waiting for them\n return;\n }\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? Object.values(await loadDefaultSources(ds, fixedOptions, false)).flatMap((item) => item.map((s) => s.selectedSource)) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate, metaColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) {\n store.value.loading.initialInputGuide = false;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n store.value.loading.chartData = true;\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(reactiveState.optionsState.components, ig, controller, ds)\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = await addFixedOptionsToState(optionsState, dataStore, fixed) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","defaultPalette","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","metaColumnPredicate","controller","ref","store","watch","defaultOptionsCounter","ds","defaultOptions","counter","loadedDefaultOptions","loadDefaultSources","usedDefaultOptions","isOptionsStateNeedsToBeUpdated","createUpdatedWithNewDefaultsOptionsState","inputGuideCounter","fixedOptions","ignoredIds","item","s","nextInputGuide","toRaw","chartDataCounter","ig","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { CategoricalPalette, ContinuousPalette, Palette } from './components/AesSettings/types';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type { AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DefaultPalettes,\n DendroNodeInfo,\n FilterLabelsInfoBySourceMap,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport type { LoadedDefaultOptionsMap } from './utils';\nimport { createUpdatedWithNewDefaultsOptionsState, isOptionsStateNeedsToBeUpdated, loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\nimport { DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE } from './constantsAesthetic';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n // previously used default options\n usedDefaultOptions: initialData.usedDefaultOptions ? copyJSON(initialData.usedDefaultOptions ?? {}) as LoadedDefaultOptionsMap<ChartType> : null,\n\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: initialData.currentTab === undefined ? 'dataMapping' : initialData.currentTab,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n defaults: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: Ref<DemoDataStore | null>;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n defaultPalette: DefaultPalettes;\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: Ref<DemoDataStore | null>,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: Palette | { categorical?: Palette; continuous?: Palette },\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n defaults: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette: {\n categorical: typeof defaultPalette === 'object' && defaultPalette.categorical\n ? defaultPalette.categorical as CategoricalPalette\n : typeof defaultPalette === 'string' ? defaultPalette as CategoricalPalette : DEFAULT_CATEGORICAL_PALETTE,\n continuous: typeof defaultPalette === 'object' && defaultPalette.continuous\n ? defaultPalette.continuous as ContinuousPalette\n : typeof defaultPalette === 'string' ? defaultPalette as ContinuousPalette : DEFAULT_CONTINUOUS_PALETTE,\n },\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n metaColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: GraphMakerProps['defaultPalette'],\n) {\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<FilterLabelsInfoBySourceMap>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n dataStoreRef,\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n\n const defaultOptionsCounter = ref(0);\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || defaultOptions?.length === 0 || !ds) {\n return;\n }\n defaultOptionsCounter.value++;\n const counter = defaultOptionsCounter.value;\n store.value.loading.defaults = true;\n if (reactiveState.usedDefaultOptions === null) {\n store.value.loading.initialInputGuide = true;\n }\n const loadedDefaultOptions = await loadDefaultSources(ds, defaultOptions, reactiveState.usedDefaultOptions);\n if (defaultOptionsCounter.value !== counter) {\n return;\n }\n const { usedDefaultOptions, optionsState } = reactiveState;\n const needsToBeUpdated = isOptionsStateNeedsToBeUpdated(optionsState, usedDefaultOptions, loadedDefaultOptions);\n if (!needsToBeUpdated) {\n store.value.loading.defaults = false;\n return;\n }\n store.value.loading.initialCharts = true; // we want to show loader when default are really changed and new chart data is requested\n reactiveState.optionsState.components = createUpdatedWithNewDefaultsOptionsState(optionsState, usedDefaultOptions, loadedDefaultOptions);\n reactiveState.usedDefaultOptions = loadedDefaultOptions;\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n if (defaultOptionsRef.value === null || dataStoreRef.value === null) { // they are not ready, waiting for them\n return;\n }\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? Object.values(await loadDefaultSources(ds, fixedOptions, null, false)).flatMap((item) => item.map((s) => s.selectedSource)) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate, metaColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.defaults = false;\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) {\n store.value.loading.initialInputGuide = false;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n store.value.loading.chartData = true;\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(reactiveState.optionsState.components, ig, controller, ds)\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = (await addFixedOptionsToState(optionsState, dataStore, fixed)) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","defaultPalette","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","metaColumnPredicate","controller","ref","store","watch","defaultOptionsCounter","ds","defaultOptions","counter","loadedDefaultOptions","loadDefaultSources","usedDefaultOptions","isOptionsStateNeedsToBeUpdated","createUpdatedWithNewDefaultsOptionsState","inputGuideCounter","fixedOptions","ignoredIds","item","s","nextInputGuide","toRaw","chartDataCounter","ig","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { copyJSON as a } from "./copyJSON.js";
2
- import { loadDefaultSources as i } from "./loadDefaultSources.js";
3
- async function l(o, r, t) {
2
+ import { loadDefaultSources as l } from "./loadDefaultSources.js";
3
+ async function u(o, r, t) {
4
4
  if (!t || t.length === 0)
5
5
  return o;
6
- const s = await i(r, t, !1), e = a(o);
6
+ const s = await l(r, t, null, !1), e = a(o);
7
7
  for (const [n, c] of Object.entries(s))
8
8
  o.components[n] && e.components[n].selectorStates.push(...c);
9
9
  return e;
10
10
  }
11
11
  export {
12
- l as addFixedOptionsToState
12
+ u as addFixedOptionsToState
13
13
  };
14
14
  //# sourceMappingURL=addFixedOptionsToState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import type { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport type { DemoDataStore, InputState, SelectorStateFilter } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\n// hidden options that are always in the state but not visible to the user\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions'],\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, false);\n const res: InputState = copyJSON(state);\n for (const [inputName, selectorStates] of Object.entries(loadedFixedOptions)) {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push(...selectorStates as SelectorStateFilter[]);\n }\n }\n return res;\n}\n"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectorStates"],"mappings":";;AAMA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,EAAK,GAC5EG,IAAkBC,EAASN,CAAK;AACtC,aAAW,CAACO,GAAWC,CAAc,KAAK,OAAO,QAAQL,CAAkB;AACzE,IAAIH,EAAM,WAAWO,CAAS,KAC5BF,EAAI,WAAWE,CAAS,EAAE,eAAe,KAAK,GAAGC,CAAuC;AAG5F,SAAOH;AACT;"}
1
+ {"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import type { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport type { DemoDataStore, InputState, SelectorStateFilter } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\n// hidden options that are always in the state but not visible to the user\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions'],\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, null, false);\n const res: InputState = copyJSON(state);\n for (const [inputName, selectorStates] of Object.entries(loadedFixedOptions)) {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push(...selectorStates as SelectorStateFilter[]);\n }\n }\n return res;\n}\n"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectorStates"],"mappings":";;AAMA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,MAAM,EAAK,GAClFG,IAAkBC,EAASN,CAAK;AACtC,aAAW,CAACO,GAAWC,CAAc,KAAK,OAAO,QAAQL,CAAkB;AACzE,IAAIH,EAAM,WAAWO,CAAS,KAC5BF,EAAI,WAAWE,CAAS,EAAE,eAAe,KAAK,GAAGC,CAAuC;AAG5F,SAAOH;AACT;"}
@@ -1,7 +1,7 @@
1
1
  import { ChartType, DemoDataStore, InputNamesByChartType, InputState, SelectorStateFilter, SelectorStateSimple } from '@milaboratories/pf-plots';
2
2
  import { PredefinedGraphOption } from '../types';
3
3
  export type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;
4
- export declare function loadDefaultSources(dataStore: DemoDataStore, defaultOptions: PredefinedGraphOption<ChartType>[], considerAxisDomains?: boolean): Promise<LoadedDefaultOptionsMap<ChartType>>;
4
+ export declare function loadDefaultSources(dataStore: DemoDataStore, defaultOptions: PredefinedGraphOption<ChartType>[], usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, considerAxisDomains?: boolean): Promise<LoadedDefaultOptionsMap<ChartType>>;
5
5
  export declare function isOptionsStateNeedsToBeUpdated(state: InputState, usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, newDefaultOptions: LoadedDefaultOptionsMap<ChartType>): boolean;
6
6
  export declare function createUpdatedWithNewDefaultsOptionsState(state: InputState, usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, newDefaultOptions: LoadedDefaultOptionsMap<ChartType>): InputState['components'];
7
7
  //# sourceMappingURL=loadDefaultSources.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadDefaultSources.d.ts","sourceRoot":"","sources":["../../src/utils/loadDefaultSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAetD,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAiC3I,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EAClD,mBAAmB,UAAO,GACzB,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAqG7C;AAKD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,OAAO,CAsBT;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,UAAU,CAAC,YAAY,CAAC,CAY1B"}
1
+ {"version":3,"file":"loadDefaultSources.d.ts","sourceRoot":"","sources":["../../src/utils/loadDefaultSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAetD,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAiG3I,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EAClD,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,mBAAmB,UAAO,GACzB,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAqG7C;AA4BD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,OAAO,CAsBT;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,UAAU,CAAC,YAAY,CAAC,CAY1B"}
@@ -1,102 +1,145 @@
1
- import { AxisId as V } from "@milaboratories/pf-plots";
2
- import { readAnnotation as q, Annotation as R } from "@platforma-sdk/model";
3
- import { toRaw as x } from "vue";
4
- import { copyJSON as T } from "./copyJSON.js";
5
- import { isJsonEqual as k } from "@milaboratories/helpers";
6
- function I(t, n) {
1
+ import { AxisId as w } from "@milaboratories/pf-plots";
2
+ import { readAnnotation as b, Annotation as B } from "@platforma-sdk/model";
3
+ import { toRaw as A } from "vue";
4
+ import { copyJSON as I } from "./copyJSON.js";
5
+ import { isJsonEqual as P } from "@milaboratories/helpers";
6
+ function k(t, n) {
7
7
  if (typeof t > "u")
8
8
  return !0;
9
- const s = Object.keys(t);
10
- return typeof n > "u" ? s.length === 0 : s.every((o) => n[o]);
9
+ const r = Object.keys(t);
10
+ return typeof n > "u" ? r.length === 0 : r.every((i) => n[i]);
11
11
  }
12
- function A(t, n, s, o) {
13
- return n && q(n, R.IsSubset) ? "subset" : o !== void 0 ? "range" : s !== void 0 || t === "Int" || t === "String" ? "equals" : "range";
12
+ function U(t, n, r, i) {
13
+ return n && b(n, B.IsSubset) ? "subset" : i !== void 0 ? "range" : r !== void 0 || t === "Int" || t === "String" ? "equals" : "range";
14
14
  }
15
- async function j(t, n, s = !0) {
16
- const o = [], S = n.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), c = n.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), f = [];
17
- for (const { inputName: e, filterType: r, selectedSource: p, selectedFilterValues: l, selectedFilterRange: y } of S) {
18
- const { name: a, valueType: F, annotations: C, domain: g } = p, i = await t.pFrameProvider.findColumnBy(a, F, x(C), x(g)), h = e === "filters" || e === "tabBy" || e === "highlight";
19
- if (i) {
20
- const d = await t.pFrameProvider.getColumnSpecById(i);
21
- if (!h)
22
- o.push({ inputName: e, selectedSource: i.toCanonicalString() });
15
+ async function N(t, n, r, i) {
16
+ var o;
17
+ const l = (o = r == null ? void 0 : r[n]) == null ? void 0 : o.find((s) => s.selectedSource === i.toCanonicalString());
18
+ if (l && h(l) && l.type === "equals") {
19
+ const s = l.selectedFilterValues ?? [], a = await Promise.all(s.map(async (u) => (await t.pFrameProvider.getColumnUniqueValues(i, 1, [{
20
+ type: "bySingleColumnV2",
21
+ column: {
22
+ type: "column",
23
+ id: i.name
24
+ },
25
+ predicate: {
26
+ operator: "StringIContains",
27
+ substring: u
28
+ }
29
+ }])).values[0] === u));
30
+ if (s.length > 0 && a.every((u) => u))
31
+ return s;
32
+ }
33
+ return [(await t.pFrameProvider.getColumnUniqueValues(i, 1)).values[0]];
34
+ }
35
+ async function T(t, n, r, i, l) {
36
+ var s;
37
+ const o = (s = r == null ? void 0 : r[n]) == null ? void 0 : s.find((a) => a.selectedSource === i.toCanonicalString());
38
+ if (o && h(o) && o.type === "equals") {
39
+ const a = o.selectedFilterValues ?? [], u = await Promise.all(a.map(async (e) => (await t.pFrameProvider.getAxisUniqueValues(i, [l], 1, [{
40
+ type: "bySingleColumnV2",
41
+ column: {
42
+ type: "axis",
43
+ id: i.toPFrameId()
44
+ },
45
+ predicate: {
46
+ operator: "StringIContains",
47
+ substring: e
48
+ }
49
+ }])).values[0] === e));
50
+ if (a.length > 0 && u.every((e) => e))
51
+ return a;
52
+ }
53
+ return [(await t.pFrameProvider.getAxisUniqueValues(i, [l], 1)).values[0]];
54
+ }
55
+ async function H(t, n, r, i = !0) {
56
+ const l = [], o = n.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), s = n.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), a = [];
57
+ for (const { inputName: e, filterType: d, selectedSource: S, selectedFilterValues: f, selectedFilterRange: g } of o) {
58
+ const { name: p, valueType: V, annotations: v, domain: C } = S, c = await t.pFrameProvider.findColumnBy(p, V, A(v), A(C)), q = e === "filters" || e === "tabBy" || e === "highlight";
59
+ if (c) {
60
+ const y = await t.pFrameProvider.getColumnSpecById(c);
61
+ if (!q)
62
+ l.push({ inputName: e, selectedSource: c.toCanonicalString() });
23
63
  else {
24
- const u = r ?? A(F, d, l, y), b = u === "equals" && typeof l > "u" ? [(await t.pFrameProvider.getColumnUniqueValues(i, 1)).values[0]] : l, m = { min: void 0, max: void 0, ...y };
25
- o.push({
64
+ const m = d ?? U(V, y, f, g), R = m === "equals" && typeof f > "u" ? await N(t, e, r, c) : f, F = { min: void 0, max: void 0, ...g };
65
+ l.push({
26
66
  inputName: e,
27
- filterType: u,
28
- selectedSource: i.toCanonicalString(),
29
- selectedFilterValues: b,
30
- selectedFilterRange: m
67
+ filterType: m,
68
+ selectedSource: c.toCanonicalString(),
69
+ selectedFilterValues: R,
70
+ selectedFilterRange: F
31
71
  });
32
72
  }
33
- f.push(...(d == null ? void 0 : d.axesSpec.map((u) => ({ spec: u, parentColumn: i }))) ?? []);
73
+ a.push(...(y == null ? void 0 : y.axesSpec.map((m) => ({ spec: m, parentColumn: c }))) ?? []);
34
74
  } else
35
- console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: p })}`);
75
+ console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: S })}`);
36
76
  }
37
- for (const { inputName: e, selectedSource: r, filterType: p, selectedFilterValues: l, selectedFilterRange: y } of c) {
38
- const a = V.fromAxisSpec(r), F = a.toCanonicalString(), C = e === "filters" || e === "tabBy" || e === "highlight", g = C ? p ?? A(a.type, { annotations: r == null ? void 0 : r.annotations }) : void 0, i = f.find((u) => V.fromAxisSpec(u.spec).toCanonicalString() === F), h = C && g === "equals" && typeof l > "u" && (i != null && i.parentColumn) ? [(await t.pFrameProvider.getAxisUniqueValues(a, [i == null ? void 0 : i.parentColumn], 1)).values[0]] : l, d = { min: void 0, max: void 0, ...y };
39
- if (s || o.push({
77
+ for (const { inputName: e, selectedSource: d, filterType: S, selectedFilterValues: f, selectedFilterRange: g } of s) {
78
+ const p = w.fromAxisSpec(d), V = p.toCanonicalString(), v = e === "filters" || e === "tabBy" || e === "highlight", C = v ? S ?? U(p.type, { annotations: d == null ? void 0 : d.annotations }) : void 0, c = a.find((m) => w.fromAxisSpec(m.spec).toCanonicalString() === V), q = v && C === "equals" && typeof f > "u" && (c != null && c.parentColumn) ? await T(t, e, r, p, c == null ? void 0 : c.parentColumn) : f, y = { min: void 0, max: void 0, ...g };
79
+ if (i || l.push({
40
80
  inputName: e,
41
- filterType: g,
42
- selectedSource: F,
43
- selectedFilterValues: h,
44
- selectedFilterRange: d
45
- }), i)
46
- o.push({
81
+ filterType: C,
82
+ selectedSource: V,
83
+ selectedFilterValues: q,
84
+ selectedFilterRange: y
85
+ }), c)
86
+ l.push({
47
87
  inputName: e,
48
- filterType: g,
49
- selectedSource: F,
50
- selectedFilterValues: h,
51
- selectedFilterRange: d
88
+ filterType: C,
89
+ selectedSource: V,
90
+ selectedFilterValues: q,
91
+ selectedFilterRange: y
52
92
  });
53
93
  else {
54
- const { spec: u, parentColumn: b } = f.find((m) => a.name === m.spec.name && a.type === m.spec.type && I(a.domain, m.spec.domain)) ?? {};
55
- if (u) {
56
- const m = (e === "filters" || e === "tabBy") && typeof l > "u" ? [(await t.pFrameProvider.getAxisUniqueValues(V.fromAxisSpec(u), [b], 1)).values[0]] : l;
57
- o.push({
94
+ const { spec: m, parentColumn: R } = a.find((F) => p.name === F.spec.name && p.type === F.spec.type && k(p.domain, F.spec.domain)) ?? {};
95
+ if (m) {
96
+ const F = (e === "filters" || e === "tabBy") && typeof f > "u" ? await T(t, e, r, w.fromAxisSpec(m), R) : f;
97
+ l.push({
58
98
  inputName: e,
59
- filterType: g,
60
- selectedSource: V.fromAxisSpec(u).toCanonicalString(),
61
- selectedFilterValues: m,
62
- selectedFilterRange: d
99
+ filterType: C,
100
+ selectedSource: w.fromAxisSpec(m).toCanonicalString(),
101
+ selectedFilterValues: F,
102
+ selectedFilterRange: y
63
103
  });
64
104
  }
65
105
  }
66
106
  }
67
- return o.reduce((e, { inputName: r, selectedSource: p, filterType: l, selectedFilterValues: y, selectedFilterRange: a }) => (e[r] || (e[r] = []), l ? e[r].push({
68
- selectedSource: p,
69
- type: l,
70
- selectedFilterValues: y,
71
- selectedFilterRange: a
72
- }) : e[r].push({ selectedSource: p }), e), {});
107
+ return l.reduce((e, { inputName: d, selectedSource: S, filterType: f, selectedFilterValues: g, selectedFilterRange: p }) => (e[d] || (e[d] = []), f ? e[d].push({
108
+ selectedSource: S,
109
+ type: f,
110
+ selectedFilterValues: g,
111
+ selectedFilterRange: p
112
+ }) : e[d].push({ selectedSource: S }), e), {});
73
113
  }
74
- function w(t, n) {
75
- return k(t, n);
114
+ function h(t) {
115
+ return typeof t == "object" && t !== null && "type" in t;
76
116
  }
77
- function J(t, n, s) {
117
+ function x(t, n) {
118
+ return h(t) && h(n) ? t.type !== n.type || t.type === "equals" && n.type === "equals" && !P(t.selectedFilterValues, n.selectedFilterValues) || t.selectedFilterRange !== void 0 && n.selectedFilterRange !== void 0 && (t.selectedFilterRange.min !== n.selectedFilterRange.min || t.selectedFilterRange.max !== n.selectedFilterRange.max) ? !1 : t.selectedSource === n.selectedSource : P(t, n);
119
+ }
120
+ function K(t, n, r) {
78
121
  if (!n)
79
- return Object.keys(s).length > 0;
80
- for (const [o, S] of Object.entries(s)) {
81
- const c = n[o], f = S, v = t.components[o];
82
- for (const e of f)
83
- v.selectorStates.some((r) => w(r, e)) || c != null && c.some((r) => w(r, e));
84
- return !0;
122
+ return Object.keys(r).length > 0;
123
+ for (const [i, l] of Object.entries(r)) {
124
+ const o = n[i], s = l, a = t.components[i].selectorStates;
125
+ for (const u of s)
126
+ if (!a.some((e) => x(e, u)) && !(o != null && o.some((e) => x(e, u))))
127
+ return !0;
85
128
  }
86
129
  return !1;
87
130
  }
88
- function G(t, n, s) {
89
- var S;
90
- const o = T(t.components);
91
- for (const [c, f] of Object.entries(s))
92
- (S = n == null ? void 0 : n[c]) != null && S.every(
93
- (v) => f.some((e) => w(v, e))
94
- ) || (o[c].selectorStates = f);
95
- return o;
131
+ function L(t, n, r) {
132
+ var l;
133
+ const i = I(t.components);
134
+ for (const [o, s] of Object.entries(r))
135
+ (l = n == null ? void 0 : n[o]) != null && l.every(
136
+ (a) => s.some((u) => x(a, u))
137
+ ) || (i[o].selectorStates = s);
138
+ return i;
96
139
  }
97
140
  export {
98
- G as createUpdatedWithNewDefaultsOptionsState,
99
- J as isOptionsStateNeedsToBeUpdated,
100
- j as loadDefaultSources
141
+ L as createUpdatedWithNewDefaultsOptionsState,
142
+ K as isOptionsStateNeedsToBeUpdated,
143
+ H as loadDefaultSources
101
144
  };
102
145
  //# sourceMappingURL=loadDefaultSources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadDefaultSources.js","sources":["../../src/utils/loadDefaultSources.ts"],"sourcesContent":["import type {\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n SelectorStateSimple,\n} from '@milaboratories/pf-plots';\nimport { AxisId } from '@milaboratories/pf-plots';\nimport type { PredefinedGraphOption } from '../types';\nimport type { AxisSpec, PColumnSpec, ValueType } from '@platforma-sdk/model';\nimport { Annotation, readAnnotation } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { copyJSON } from './copyJSON';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\ntype LoadedDefaultOptions<T extends ChartType> = {\n inputName: InputNamesByChartType[T];\n selectedSource: string;\n filterType?: SelectorStateFilter['type'];\n selectedFilterRange?: SelectorStateFilter['selectedFilterRange'];\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'];\n};\n\nexport type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;\n\nfunction domainIsCompatible(domain?: Record<string, string>, otherDomain?: Record<string, string>): boolean {\n if (typeof domain === 'undefined') {\n return true;\n }\n const keys = Object.keys(domain);\n if (typeof otherDomain === 'undefined') {\n return keys.length === 0;\n }\n return keys.every((key) => otherDomain[key]);\n}\n\nfunction getDefaultFilterType(\n valueType: ValueType,\n spec: PColumnSpec | null,\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>,\n): SelectorStateFilter['type'] {\n if (spec && readAnnotation(spec, Annotation.IsSubset)) {\n return 'subset';\n }\n if (selectedFilterRange !== undefined) {\n return 'range';\n }\n if (selectedFilterValues !== undefined) {\n return 'equals';\n }\n if (valueType === 'Int' || valueType === 'String') {\n return 'equals';\n }\n return 'range';\n}\nexport async function loadDefaultSources(\n dataStore: DemoDataStore,\n defaultOptions: PredefinedGraphOption<ChartType>[],\n considerAxisDomains = true,\n): Promise<LoadedDefaultOptionsMap<ChartType>> {\n const result: LoadedDefaultOptions<ChartType>[] = [];\n const defaultColumnStates = defaultOptions.filter(({ selectedSource }) => 'kind' in selectedSource && selectedSource.kind === 'PColumn');\n const defaultAxisStates = defaultOptions.filter(({ selectedSource }) => !('kind' in selectedSource && selectedSource.kind === 'PColumn'));\n\n const allowedAxisSpecs = [] as { spec: AxisSpec; parentColumn: ColumnId }[]; // if default options contain axes - they should be in other default columns\n\n for (const { inputName, filterType, selectedSource, selectedFilterValues, selectedFilterRange } of defaultColumnStates) {\n const { name, valueType, annotations, domain } = selectedSource as PColumnSpec;\n const columnId = await dataStore.pFrameProvider.findColumnBy(name, valueType, toRaw(annotations), toRaw(domain));\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n if (columnId) {\n const spec = await dataStore.pFrameProvider.getColumnSpecById(columnId);\n if (!isFilter) {\n result.push({ inputName, selectedSource: columnId.toCanonicalString() });\n } else {\n const defaultFilterType = filterType ?? getDefaultFilterType(valueType, spec, selectedFilterValues, selectedFilterRange);\n const defaultSelectedFilterValue = defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined'\n ? [(await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1)).values[0]]\n : selectedFilterValues;\n const defaultFilterRange = { min: undefined, max: undefined, ...selectedFilterRange };\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: columnId.toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n\n allowedAxisSpecs.push(...spec?.axesSpec.map((spec) => ({ spec, parentColumn: columnId })) ?? []);\n } else {\n console.warn(`Not found column for default option: ${JSON.stringify({ inputName, selectedSource })}`);\n }\n }\n for (const { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange } of defaultAxisStates) {\n const axisId = AxisId.fromAxisSpec(selectedSource as AxisSpec);\n const axisSourceStr = axisId.toCanonicalString();\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n const defaultFilterType = isFilter ? filterType ?? getDefaultFilterType(axisId.type, { annotations: selectedSource?.annotations } as PColumnSpec) : undefined;\n\n const columnWithExistingAxis = allowedAxisSpecs.find((el) => AxisId.fromAxisSpec(el.spec).toCanonicalString() === axisSourceStr);\n const defaultSelectedFilterValues = isFilter && defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined' && columnWithExistingAxis?.parentColumn\n ? [(await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [columnWithExistingAxis?.parentColumn], 1)).values[0]]\n : selectedFilterValues;\n const defaultFilterRange = { min: undefined, max: undefined, ...selectedFilterRange };\n\n if (!considerAxisDomains) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n if (columnWithExistingAxis) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n } else {\n const { spec: allowedCompatibleAxisSpec, parentColumn } = allowedAxisSpecs.find((el) => {\n return axisId.name === el.spec.name && axisId.type === el.spec.type && domainIsCompatible(axisId.domain, el.spec.domain);\n }) ?? {};\n if (allowedCompatibleAxisSpec) {\n const defaultSelectedFilterValue = (inputName === 'filters' || inputName === 'tabBy') && typeof selectedFilterValues === 'undefined'\n ? [(await dataStore.pFrameProvider.getAxisUniqueValues(AxisId.fromAxisSpec(allowedCompatibleAxisSpec), [parentColumn as ColumnId], 1)).values[0]]\n : selectedFilterValues;\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: AxisId.fromAxisSpec(allowedCompatibleAxisSpec).toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n }\n }\n\n const loadedDefaultOptionsGrouped = result.reduce((acc, { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange }) => {\n if (!acc[inputName]) {\n acc[inputName] = [];\n }\n if (filterType) {\n acc[inputName].push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n } as SelectorStateFilter);\n } else {\n acc[inputName].push({ selectedSource });\n }\n return acc;\n }, {} as LoadedDefaultOptionsMap<ChartType>);\n\n return loadedDefaultOptionsGrouped;\n}\n\nfunction selectorStatesAreEqual(a: SelectorStateFilter | SelectorStateSimple, b: SelectorStateFilter | SelectorStateSimple): boolean {\n return isJsonEqual(a, b);\n}\nexport function isOptionsStateNeedsToBeUpdated(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): boolean {\n if (!usedDefaultOptions) {\n return Object.keys(newDefaultOptions).length > 0;\n }\n for (const [inputName, selectedStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n const usedDefaults = usedDefaultOptions[inputName];\n const newDefaults = selectedStates;\n const currentOptions = state.components[inputName];\n\n for (const selectorState of newDefaults) {\n // this option is already in current options (set by user or wasn't changed from previous default options)\n if (currentOptions.selectorStates.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n // this option is not changed from previous default options (but was changed by user)\n if (usedDefaults?.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n }\n return true; // we didn't find new option in previous state, so options state requires an update\n }\n return false;\n};\n\nexport function createUpdatedWithNewDefaultsOptionsState(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): InputState['components'] {\n const updatedOptionsState: InputState['components'] = copyJSON(state.components);\n for (const [inputName, selectorStates] of Object.entries(newDefaultOptions)) {\n if (usedDefaultOptions?.[inputName as keyof LoadedDefaultOptionsMap<ChartType>]?.every(\n (s) => selectorStates.some((ss) => selectorStatesAreEqual(s, ss)),\n )) {\n // nothing changed for this input, skip; even if user has changed something, we don't want to reset it\n continue;\n }\n updatedOptionsState[inputName].selectorStates = selectorStates;\n }\n return updatedOptionsState;\n}\n"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","spec","selectedFilterValues","selectedFilterRange","readAnnotation","Annotation","loadDefaultSources","dataStore","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","inputName","filterType","name","annotations","columnId","toRaw","isFilter","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","axisId","AxisId","axisSourceStr","columnWithExistingAxis","el","defaultSelectedFilterValues","allowedCompatibleAxisSpec","parentColumn","acc","selectorStatesAreEqual","a","b","isJsonEqual","isOptionsStateNeedsToBeUpdated","state","usedDefaultOptions","newDefaultOptions","selectedStates","usedDefaults","newDefaults","currentOptions","selectorState","s","createUpdatedWithNewDefaultsOptionsState","updatedOptionsState","copyJSON","selectorStates","_a","ss"],"mappings":"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"}
1
+ {"version":3,"file":"loadDefaultSources.js","sources":["../../src/utils/loadDefaultSources.ts"],"sourcesContent":["import type {\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n SelectorStateSimple,\n} from '@milaboratories/pf-plots';\nimport { AxisId } from '@milaboratories/pf-plots';\nimport type { PredefinedGraphOption } from '../types';\nimport type { AxisSpec, PColumnSpec, PObjectId, ValueType } from '@platforma-sdk/model';\nimport { Annotation, readAnnotation } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { copyJSON } from './copyJSON';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\ntype LoadedDefaultOptions<T extends ChartType> = {\n inputName: InputNamesByChartType[T];\n selectedSource: string;\n filterType?: SelectorStateFilter['type'];\n selectedFilterRange?: SelectorStateFilter['selectedFilterRange'];\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'];\n};\n\nexport type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;\n\nfunction domainIsCompatible(domain?: Record<string, string>, otherDomain?: Record<string, string>): boolean {\n if (typeof domain === 'undefined') {\n return true;\n }\n const keys = Object.keys(domain);\n if (typeof otherDomain === 'undefined') {\n return keys.length === 0;\n }\n return keys.every((key) => otherDomain[key]);\n}\n\nfunction getDefaultFilterType(\n valueType: ValueType,\n spec: PColumnSpec | null,\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>,\n): SelectorStateFilter['type'] {\n if (spec && readAnnotation(spec, Annotation.IsSubset)) {\n return 'subset';\n }\n if (selectedFilterRange !== undefined) {\n return 'range';\n }\n if (selectedFilterValues !== undefined) {\n return 'equals';\n }\n if (valueType === 'Int' || valueType === 'String') {\n return 'equals';\n }\n return 'range';\n}\n\nasync function loadInitialFilterValuesColumn(\n dataStore: DemoDataStore,\n inputName: InputNamesByChartType[ChartType],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n columnId: ColumnId,\n): Promise<string[]> {\n const sameStateInUsedOptions = usedDefaultOptions?.[inputName]?.find((s) => s.selectedSource === columnId.toCanonicalString());\n\n if (sameStateInUsedOptions && isSelectorStateFilter(sameStateInUsedOptions) && sameStateInUsedOptions.type === 'equals') {\n const previousSelectedFilterValues = sameStateInUsedOptions.selectedFilterValues ?? [];\n const canBeUsedValues = await Promise.all(previousSelectedFilterValues.map(async (v) => {\n const loadedV = await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1, [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column' as const,\n id: columnId.name as PObjectId,\n },\n predicate: {\n operator: 'StringIContains',\n substring: v,\n },\n }]);\n return loadedV.values[0] === v;\n }));\n if (previousSelectedFilterValues.length > 0 && canBeUsedValues.every((v) => v)) {\n return previousSelectedFilterValues;\n }\n }\n return [(await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1)).values[0]];\n}\n\nasync function loadInitialFilterValuesAxis(\n dataStore: DemoDataStore,\n inputName: InputNamesByChartType[ChartType],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n axisId: AxisId,\n parentColumn: ColumnId,\n): Promise<string[]> {\n const sameStateInUsedOptions = usedDefaultOptions?.[inputName]?.find((s) => s.selectedSource === axisId.toCanonicalString());\n\n if (sameStateInUsedOptions && isSelectorStateFilter(sameStateInUsedOptions) && sameStateInUsedOptions.type === 'equals') {\n const previousSelectedFilterValues = sameStateInUsedOptions.selectedFilterValues ?? [];\n const canBeUsedValues = await Promise.all(previousSelectedFilterValues.map(async (v) => {\n const loadedV = await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [parentColumn], 1, [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis' as const,\n id: axisId.toPFrameId(),\n },\n predicate: {\n operator: 'StringIContains',\n substring: v,\n },\n }]);\n return loadedV.values[0] === v;\n }));\n if (previousSelectedFilterValues.length > 0 && canBeUsedValues.every((v) => v)) {\n return previousSelectedFilterValues;\n }\n }\n return [(await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [parentColumn as ColumnId], 1)).values[0]];\n}\n\nexport async function loadDefaultSources(\n dataStore: DemoDataStore,\n defaultOptions: PredefinedGraphOption<ChartType>[],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n considerAxisDomains = true,\n): Promise<LoadedDefaultOptionsMap<ChartType>> {\n const result: LoadedDefaultOptions<ChartType>[] = [];\n const defaultColumnStates = defaultOptions.filter(({ selectedSource }) => 'kind' in selectedSource && selectedSource.kind === 'PColumn');\n const defaultAxisStates = defaultOptions.filter(({ selectedSource }) => !('kind' in selectedSource && selectedSource.kind === 'PColumn'));\n\n const allowedAxisSpecs = [] as { spec: AxisSpec; parentColumn: ColumnId }[]; // if default options contain axes - they should be in other default columns\n\n for (const { inputName, filterType, selectedSource, selectedFilterValues, selectedFilterRange } of defaultColumnStates) {\n const { name, valueType, annotations, domain } = selectedSource as PColumnSpec;\n const columnId = await dataStore.pFrameProvider.findColumnBy(name, valueType, toRaw(annotations), toRaw(domain));\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n if (columnId) {\n const spec = await dataStore.pFrameProvider.getColumnSpecById(columnId);\n if (!isFilter) {\n result.push({ inputName, selectedSource: columnId.toCanonicalString() });\n } else {\n const defaultFilterType = filterType ?? getDefaultFilterType(valueType, spec, selectedFilterValues, selectedFilterRange);\n const defaultSelectedFilterValue = defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined'\n ? (await loadInitialFilterValuesColumn(dataStore, inputName, usedDefaultOptions, columnId))\n : selectedFilterValues;\n const defaultFilterRange = { min: undefined, max: undefined, ...selectedFilterRange };\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: columnId.toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n\n allowedAxisSpecs.push(...spec?.axesSpec.map((spec) => ({ spec, parentColumn: columnId })) ?? []);\n } else {\n console.warn(`Not found column for default option: ${JSON.stringify({ inputName, selectedSource })}`);\n }\n }\n for (const { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange } of defaultAxisStates) {\n const axisId = AxisId.fromAxisSpec(selectedSource as AxisSpec);\n const axisSourceStr = axisId.toCanonicalString();\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n const defaultFilterType = isFilter ? filterType ?? getDefaultFilterType(axisId.type, { annotations: selectedSource?.annotations } as PColumnSpec) : undefined;\n\n const columnWithExistingAxis = allowedAxisSpecs.find((el) => AxisId.fromAxisSpec(el.spec).toCanonicalString() === axisSourceStr);\n const defaultSelectedFilterValues = isFilter && defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined' && columnWithExistingAxis?.parentColumn\n ? (await loadInitialFilterValuesAxis(dataStore, inputName, usedDefaultOptions, axisId, columnWithExistingAxis?.parentColumn as ColumnId))\n : selectedFilterValues;\n const defaultFilterRange = { min: undefined, max: undefined, ...selectedFilterRange };\n\n if (!considerAxisDomains) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n if (columnWithExistingAxis) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n } else {\n const { spec: allowedCompatibleAxisSpec, parentColumn } = allowedAxisSpecs.find((el) => {\n return axisId.name === el.spec.name && axisId.type === el.spec.type && domainIsCompatible(axisId.domain, el.spec.domain);\n }) ?? {};\n if (allowedCompatibleAxisSpec) {\n const defaultSelectedFilterValues = (inputName === 'filters' || inputName === 'tabBy') && typeof selectedFilterValues === 'undefined'\n ? (await loadInitialFilterValuesAxis(dataStore, inputName, usedDefaultOptions, AxisId.fromAxisSpec(allowedCompatibleAxisSpec), parentColumn as ColumnId))\n : selectedFilterValues;\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: AxisId.fromAxisSpec(allowedCompatibleAxisSpec).toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n }\n }\n\n const loadedDefaultOptionsGrouped = result.reduce((acc, { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange }) => {\n if (!acc[inputName]) {\n acc[inputName] = [];\n }\n if (filterType) {\n acc[inputName].push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n });\n } else {\n acc[inputName].push({ selectedSource });\n }\n return acc;\n }, {} as LoadedDefaultOptionsMap<ChartType>);\n\n return loadedDefaultOptionsGrouped;\n}\n\nfunction isSelectorStateFilter(a: SelectorStateFilter | SelectorStateSimple): a is SelectorStateFilter {\n return typeof a === 'object' && a !== null && 'type' in a;\n}\nfunction selectorStatesAreEqual(\n a: (SelectorStateFilter | SelectorStateSimple),\n b: (SelectorStateFilter | SelectorStateSimple),\n): boolean {\n if (isSelectorStateFilter(a) && isSelectorStateFilter(b)) {\n if (a.type !== b.type) {\n return false;\n }\n if (a.type === 'equals' && b.type === 'equals') {\n const equals = isJsonEqual(a.selectedFilterValues, b.selectedFilterValues);\n if (!equals) {\n return false;\n }\n }\n if (a.selectedFilterRange !== undefined && b.selectedFilterRange !== undefined\n && (a.selectedFilterRange.min !== b.selectedFilterRange.min || a.selectedFilterRange.max !== b.selectedFilterRange.max)\n ) {\n return false;\n }\n return a.selectedSource === b.selectedSource;\n }\n return isJsonEqual(a, b);\n}\nexport function isOptionsStateNeedsToBeUpdated(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): boolean {\n if (!usedDefaultOptions) {\n return Object.keys(newDefaultOptions).length > 0;\n }\n for (const [inputName, selectedStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n const usedDefaults = usedDefaultOptions[inputName];\n const newDefaults = selectedStates;\n const currentOptions = state.components[inputName].selectorStates;\n\n for (const selectorState of newDefaults) {\n // this option is already in current options (set by user or wasn't changed from previous default options)\n if (currentOptions.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n // this option is not changed from previous default options (but was changed by user)\n if (usedDefaults?.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n return true;\n }\n }\n return false;\n};\n\nexport function createUpdatedWithNewDefaultsOptionsState(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): InputState['components'] {\n const updatedOptionsState: InputState['components'] = copyJSON(state.components);\n for (const [inputName, selectorStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n if (usedDefaultOptions?.[inputName as keyof LoadedDefaultOptionsMap<ChartType>]?.every(\n (s) => selectorStates.some((ss) => selectorStatesAreEqual(s, ss)),\n )) {\n // nothing changed for this input, skip; even if user has changed something, we don't want to reset it\n continue;\n }\n updatedOptionsState[inputName].selectorStates = selectorStates;\n }\n return updatedOptionsState;\n}\n"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","spec","selectedFilterValues","selectedFilterRange","readAnnotation","Annotation","loadInitialFilterValuesColumn","dataStore","inputName","usedDefaultOptions","columnId","sameStateInUsedOptions","_a","isSelectorStateFilter","previousSelectedFilterValues","canBeUsedValues","v","loadInitialFilterValuesAxis","axisId","parentColumn","s","loadDefaultSources","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","filterType","name","annotations","toRaw","isFilter","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","AxisId","axisSourceStr","columnWithExistingAxis","el","defaultSelectedFilterValues","allowedCompatibleAxisSpec","acc","a","selectorStatesAreEqual","b","isJsonEqual","isOptionsStateNeedsToBeUpdated","state","newDefaultOptions","selectedStates","usedDefaults","newDefaults","currentOptions","selectorState","createUpdatedWithNewDefaultsOptionsState","updatedOptionsState","copyJSON","selectorStates","ss"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/graph-maker",
3
- "version": "1.1.223",
3
+ "version": "1.1.225",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,8 +36,8 @@
36
36
  "d3-hierarchy": "^3.1.2",
37
37
  "d3-scale": "^4.0.2",
38
38
  "vue": "^3.5.24",
39
- "@milaboratories/miplots4": "1.0.172",
40
- "@milaboratories/pf-plots": "1.1.62"
39
+ "@milaboratories/miplots4": "1.0.173",
40
+ "@milaboratories/pf-plots": "1.1.63"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@milaboratories/build-configs": "^1.0.5",
@@ -53,7 +53,7 @@
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@platforma-sdk/model": "^1.53.0",
56
- "@platforma-sdk/ui-vue": "^1.53.0"
56
+ "@platforma-sdk/ui-vue": "^1.55.1"
57
57
  },
58
58
  "scripts": {
59
59
  "dev": "vite",