@platforma-sdk/ui-vue 1.66.1 → 1.66.2
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/.turbo/turbo-build.log +16 -14
- package/.turbo/turbo-formatter$colon$check.log +2 -2
- package/.turbo/turbo-linter$colon$check.log +2 -2
- package/.turbo/turbo-types$colon$check.log +1 -1
- package/CHANGELOG.md +11 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +20 -20
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js.map +1 -1
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.d.ts.map +1 -1
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +43 -33
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
- package/dist/components/PlAgColumnHeader/types.d.ts +1 -0
- package/dist/components/PlAgColumnHeader/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +5 -5
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +10 -11
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.js +13 -13
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +8 -8
- package/dist/internal/createAppV3.d.ts.map +1 -1
- package/dist/internal/createAppV3.js +74 -83
- package/dist/internal/createAppV3.js.map +1 -1
- package/dist/internal/getServices.d.ts +5 -0
- package/dist/internal/getServices.d.ts.map +1 -0
- package/dist/internal/getServices.js +19 -0
- package/dist/internal/getServices.js.map +1 -0
- package/dist/internal/service_factories.d.ts +2 -2
- package/dist/internal/service_factories.d.ts.map +1 -1
- package/dist/internal/service_factories.js.map +1 -1
- package/dist/internal/utils.d.ts +3 -0
- package/dist/internal/utils.d.ts.map +1 -0
- package/dist/internal/utils.js +16 -0
- package/dist/internal/utils.js.map +1 -0
- package/package.json +7 -7
- package/src/components/PlAgColumnHeader/PlAgColumnHeader.vue +13 -7
- package/src/components/PlAgColumnHeader/types.ts +1 -0
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +23 -21
- package/src/internal/createAppV3.ts +10 -37
- package/src/internal/getServices.ts +36 -0
- package/src/internal/service_factories.ts +2 -2
- package/src/internal/utils.ts +25 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecAxis,\n PTableColumnSpecColumn,\n PTableHandle,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isLinkerColumn as isLinkerColumnSpec,\n isColumnHidden,\n isColumnOptional,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n Annotation,\n ValueType,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\nimport { isNil, uniq } from \"es-toolkit\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n fieldResultMapping: number[],\n axesResultIndices: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableKey = axesResultIndices.map((ri) => pTableValue(columns[ri], iRow));\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row = fields.reduce<PlAgDataTableV2Row>(\n (acc, field, iCol) => {\n acc[field.toString() as `${number}`] =\n fieldResultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[fieldResultMapping[iCol]], iRow);\n return acc;\n },\n { id, axesKey },\n );\n\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n sheets,\n fullTableHandle,\n visibleTableHandle,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n sheets: PlDataTableSheet[];\n pfDriver: PFrameDriver;\n generation: Ref<number>;\n fullTableHandle: PTableHandle;\n visibleTableHandle: PTableHandle;\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n\n // get specs of the full table\n const [tableSpecs, visibleTableSpecs] = await Promise.all([\n pfDriver.getSpec(fullTableHandle),\n pfDriver.getSpec(visibleTableHandle),\n ]);\n\n if (stateGeneration !== generation.value) throw new Error(\"table state generation changed\");\n\n // index mapping from full specs to visible subset (hidden columns → -1)\n const specsToVisibleSpecsMapping = buildSpecsToVisibleSpecsMapping(tableSpecs, visibleTableSpecs);\n\n const isPartitionedAxis = createPartitionedAxisPredicate(sheets);\n\n // label columns indexed by labeled axis (for axis→label replacement later)\n const getLabelColumnIndex = collectLabelColumnsByAxis(tableSpecs, isPartitionedAxis);\n\n // displayable column indices ordered: axes first, then columns by OrderPriority\n const fields = sortIndicesByTypeAndPriority(\n selectDisplayableIndices(tableSpecs, isPartitionedAxis),\n tableSpecs,\n );\n\n // same as fields, but each axis replaced by its label column index when available\n const indices = replaceAxesWithLabelColumns(fields, tableSpecs, getLabelColumnIndex);\n\n // default hidden columns derived from Optional annotation when no saved state\n const resolvedHiddenColIds =\n hiddenColIds ?? computeDefaultHiddenColIds(fields, indices, tableSpecs);\n\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(\n field,\n tableSpecs[field],\n tableSpecs[indices[index]],\n resolvedHiddenColIds,\n cellButtonAxisParams,\n ),\n ),\n ];\n\n // axes — taken directly from visible table (always present as part of join)\n const visibleAxes = collectVisibleAxes(visibleTableSpecs);\n\n // request indices: non-hidden display fields + visible axes for row selection keys.\n // Axes replaced by label columns request label data (display); original axis values\n // are fetched via visibleAxes (row keys).\n const { requestIndices, fieldResultMapping, axesResultIndices } = buildRequestIndices(\n indices,\n specsToVisibleSpecsMapping,\n visibleAxes.map(([i]) => i),\n );\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(visibleTableHandle);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(visibleTableHandle, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, fieldResultMapping, axesResultIndices);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec: visibleAxes.map(([, { spec }]) => spec),\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n const headerName =\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n readAnnotation(spec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`;\n\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds !== undefined && hiddenColIds.includes(colId),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n\ntype LabelColumnLookup = (axisId: AxisId) => number;\n\n/** Build index mapping from full tableSpecs to their position in visibleTableSpecs (missing → -1). */\nfunction buildSpecsToVisibleSpecsMapping(\n tableSpecs: PTableColumnSpec[],\n visibleTableSpecs: PTableColumnSpec[],\n): Map<number, number> {\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const visibleSpecsMap = new Map(\n visibleTableSpecs.entries().map(([i, spec]) => [specId(spec), i] as const),\n );\n return new Map(\n tableSpecs.entries().map(([i, spec]) => {\n const visibleSpecIdx = visibleSpecsMap.get(specId(spec));\n return [i, isNil(visibleSpecIdx) ? -1 : visibleSpecIdx];\n }),\n );\n}\n\n/** Predicate that returns true when an axis is one of the sheet partition axes. */\nfunction createPartitionedAxisPredicate(sheets: PlDataTableSheet[]): (axisId: AxisId) => boolean {\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n return (axisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n}\n\n/**\n * Collect label columns (skipping partitioned axes and duplicates) and return a\n * lookup function that resolves labeled axisId → label column index (or -1).\n */\nfunction collectLabelColumnsByAxis(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): LabelColumnLookup {\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n for (const [i, spec] of tableSpecs.entries()) {\n if (spec.type !== \"column\" || !isLabelColumnSpec(spec.spec)) continue;\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (isPartitionedAxis(labeledAxisId)) continue;\n if (labelColumns.some((info) => matchAxisId(info.axisId, labeledAxisId))) {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(labeledAxisId)}`);\n continue;\n }\n labelColumns.push({ axisId: labeledAxisId, labelColumnIdx: i });\n }\n return (axisId) =>\n labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n}\n\n/** Indices of columns to display: drop partitioned axes, label/linker columns, hidden columns. */\nfunction selectDisplayableIndices(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): number[] {\n return tableSpecs\n .entries()\n .filter(([, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n return (\n !isLabelColumnSpec(spec.spec) &&\n !isColumnHidden(spec.spec) &&\n !isLinkerColumnSpec(spec.spec)\n );\n }\n })\n .map(([i]) => i)\n .toArray();\n}\n\n/** Sort: axes first, then columns by OrderPriority annotation (higher priority = further left). */\nfunction sortIndicesByTypeAndPriority(indices: number[], tableSpecs: PTableColumnSpec[]): number[] {\n const priorityOf = (i: number): number => {\n const spec = tableSpecs[i];\n return spec.type === \"column\"\n ? (readAnnotationJson(spec.spec, Annotation.Table.OrderPriority) ?? 0)\n : 0;\n };\n return [...indices].sort((a, b) => {\n if (tableSpecs[a].type !== tableSpecs[b].type) {\n return tableSpecs[a].type === \"axis\" ? -1 : 1;\n }\n return priorityOf(b) - priorityOf(a);\n });\n}\n\n/** For each axis entry substitute the index of its matching label column when one exists. */\nfunction replaceAxesWithLabelColumns(\n fields: number[],\n tableSpecs: PTableColumnSpec[],\n getLabelColumnIndex: LabelColumnLookup,\n): number[] {\n return fields.map((i) => {\n const spec = tableSpecs[i];\n const labelIdx = spec.type === \"axis\" ? getLabelColumnIndex(spec.id) : -1;\n return labelIdx === -1 ? i : labelIdx;\n });\n}\n\n/** Default hidden col ids built from columns marked with the Optional annotation. */\nfunction computeDefaultHiddenColIds(\n fields: number[],\n indices: number[],\n tableSpecs: PTableColumnSpec[],\n): PlTableColumnIdJson[] {\n return fields.reduce<PlTableColumnIdJson[]>((acc, field, i) => {\n const spec = tableSpecs[field];\n if (spec.type !== \"column\" || !isColumnOptional(spec.spec)) return acc;\n const labeledSpec = tableSpecs[indices[i]];\n return [...acc, canonicalizeJson<PlTableColumnId>({ source: spec, labeled: labeledSpec })];\n }, []);\n}\n\n/** Extract axis indices and specs from the visible table (always present as part of join). */\nfunction collectVisibleAxes(\n visibleTableSpecs: PTableColumnSpec[],\n): [number, PTableColumnSpecAxis][] {\n return visibleTableSpecs\n .entries()\n .filter((entry): entry is [number, PTableColumnSpecAxis] => entry[1].type === \"axis\")\n .toArray();\n}\n\n/**\n * Compose request indices for the visible table:\n * non-hidden display fields first, then visible axes (deduplicated).\n * Returns fieldResultMapping (display field → position in requestIndices, -1 if not requested)\n * and axesResultIndices (visible axis → position in requestIndices).\n */\nfunction buildRequestIndices(\n indices: number[],\n specsToVisibleSpecsMapping: Map<number, number>,\n visibleAxesIndices: number[],\n): {\n requestIndices: number[];\n fieldResultMapping: number[];\n axesResultIndices: number[];\n} {\n const resolved = indices.map((displayField) => {\n const idx = specsToVisibleSpecsMapping.get(displayField);\n return idx === undefined || idx === -1 ? null : idx;\n });\n const requestedFields = resolved.filter((v): v is number => v !== null);\n\n const fieldResultMapping: number[] = [];\n let pos = 0;\n for (const v of resolved) {\n fieldResultMapping.push(v === null ? -1 : pos++);\n }\n\n const requestIndices = uniq([...requestedFields, ...visibleAxesIndices]);\n const axesResultIndices = visibleAxesIndices.map((vi) => requestIndices.indexOf(vi));\n return { requestIndices, fieldResultMapping, axesResultIndices };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecAxis,\n PTableColumnSpecColumn,\n PTableHandle,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isLinkerColumn as isLinkerColumnSpec,\n isColumnHidden,\n isColumnOptional,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n Annotation,\n ValueType,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\nimport { isNil, uniq } from \"es-toolkit\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n fieldResultMapping: number[],\n axesResultIndices: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let rowIdx = 0; rowIdx < columns[0].data.length; ++rowIdx) {\n const axesKey: PTableKey = axesResultIndices.map((ri) => pTableValue(columns[ri], rowIdx));\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row = fields.reduce<PlAgDataTableV2Row>(\n (acc, field, colIdx) => {\n acc[field.toString() as `${number}`] =\n fieldResultMapping[colIdx] === -1\n ? PTableHidden\n : pTableValue(columns[fieldResultMapping[colIdx]], rowIdx);\n return acc;\n },\n { id, axesKey },\n );\n\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n sheets,\n fullTableHandle,\n visibleTableHandle,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n sheets: PlDataTableSheet[];\n pfDriver: PFrameDriver;\n generation: Ref<number>;\n fullTableHandle: PTableHandle;\n visibleTableHandle: PTableHandle;\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n\n // get specs of the full table\n const [tableSpecs, visibleTableSpecs] = await Promise.all([\n pfDriver.getSpec(fullTableHandle),\n pfDriver.getSpec(visibleTableHandle),\n ]);\n\n if (stateGeneration !== generation.value) throw new Error(\"table state generation changed\");\n\n // index mapping from full specs to visible subset (hidden columns → -1)\n const specsToVisibleSpecsMapping = buildSpecsToVisibleSpecsMapping(tableSpecs, visibleTableSpecs);\n\n const isPartitionedAxis = createPartitionedAxisPredicate(sheets);\n\n // label columns indexed by labeled axis (for axis→label replacement later)\n const getLabelColumnIndex = collectLabelColumnsByAxis(tableSpecs, isPartitionedAxis);\n\n // displayable column indices ordered: axes first, then columns by OrderPriority\n const fields = sortIndicesByTypeAndPriority(\n selectDisplayableIndices(tableSpecs, isPartitionedAxis),\n tableSpecs,\n );\n\n // same as fields, but each axis replaced by its label column index when available\n const indices = replaceAxesWithLabelColumns(fields, tableSpecs, getLabelColumnIndex);\n\n // default hidden columns derived from Optional annotation when no saved state\n const resolvedHiddenColIds =\n hiddenColIds ?? computeDefaultHiddenColIds(fields, indices, tableSpecs);\n\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(\n field,\n tableSpecs[field],\n tableSpecs[indices[index]],\n resolvedHiddenColIds,\n cellButtonAxisParams,\n ),\n ),\n ];\n\n // axes — taken directly from visible table (always present as part of join)\n const visibleAxes = collectVisibleAxes(visibleTableSpecs);\n\n // request indices: non-hidden display fields + visible axes for row selection keys.\n // Axes replaced by label columns request label data (display); original axis values\n // are fetched via visibleAxes (row keys).\n const { requestIndices, axesResultIndices, fieldResultMapping } = buildRequestIndices(\n indices,\n visibleAxes.map(([idx]) => idx),\n specsToVisibleSpecsMapping,\n );\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(visibleTableHandle);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(visibleTableHandle, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, fieldResultMapping, axesResultIndices);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec: visibleAxes.map(([, { spec }]) => spec),\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n const headerName =\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n readAnnotation(spec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`;\n\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds !== undefined && hiddenColIds.includes(colId),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip:\n readAnnotation(spec.spec, Annotation.Description)?.trim() ??\n readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n info:\n readAnnotation(spec.spec, Annotation.Table.Info)?.trim() ??\n readAnnotation(labeledSpec.spec, Annotation.Table.Info)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n\ntype LabelColumnLookup = (axisId: AxisId) => number;\n\n/** Build index mapping from full tableSpecs to their position in visibleTableSpecs (missing → -1). */\nfunction buildSpecsToVisibleSpecsMapping(\n tableSpecs: PTableColumnSpec[],\n visibleTableSpecs: PTableColumnSpec[],\n): Map<number, number> {\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const visibleSpecsMap = new Map(\n visibleTableSpecs.entries().map(([i, spec]) => [specId(spec), i] as const),\n );\n return new Map(\n tableSpecs.entries().map(([i, spec]) => {\n const visibleSpecIdx = visibleSpecsMap.get(specId(spec));\n return [i, isNil(visibleSpecIdx) ? -1 : visibleSpecIdx];\n }),\n );\n}\n\n/** Predicate that returns true when an axis is one of the sheet partition axes. */\nfunction createPartitionedAxisPredicate(sheets: PlDataTableSheet[]): (axisId: AxisId) => boolean {\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n return (axisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n}\n\n/**\n * Collect label columns (skipping partitioned axes and duplicates) and return a\n * lookup function that resolves labeled axisId → label column index (or -1).\n */\nfunction collectLabelColumnsByAxis(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): LabelColumnLookup {\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n for (const [i, spec] of tableSpecs.entries()) {\n if (spec.type !== \"column\" || !isLabelColumnSpec(spec.spec)) continue;\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (isPartitionedAxis(labeledAxisId)) continue;\n if (labelColumns.some((info) => matchAxisId(info.axisId, labeledAxisId))) {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(labeledAxisId)}`);\n continue;\n }\n labelColumns.push({ axisId: labeledAxisId, labelColumnIdx: i });\n }\n return (axisId) =>\n labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n}\n\n/** Indices of columns to display: drop partitioned axes, label/linker columns, hidden columns. */\nfunction selectDisplayableIndices(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): number[] {\n return tableSpecs\n .entries()\n .filter(([, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n return (\n !isLabelColumnSpec(spec.spec) &&\n !isColumnHidden(spec.spec) &&\n !isLinkerColumnSpec(spec.spec)\n );\n }\n })\n .map(([i]) => i)\n .toArray();\n}\n\n/** Sort: axes first, then columns by OrderPriority annotation (higher priority = further left). */\nfunction sortIndicesByTypeAndPriority(indices: number[], tableSpecs: PTableColumnSpec[]): number[] {\n const priorityOf = (i: number): number => {\n const spec = tableSpecs[i];\n return spec.type === \"column\"\n ? (readAnnotationJson(spec.spec, Annotation.Table.OrderPriority) ?? 0)\n : 0;\n };\n return [...indices].sort((a, b) => {\n if (tableSpecs[a].type !== tableSpecs[b].type) {\n return tableSpecs[a].type === \"axis\" ? -1 : 1;\n }\n return priorityOf(b) - priorityOf(a);\n });\n}\n\n/** For each axis entry substitute the index of its matching label column when one exists. */\nfunction replaceAxesWithLabelColumns(\n fields: number[],\n tableSpecs: PTableColumnSpec[],\n getLabelColumnIndex: LabelColumnLookup,\n): number[] {\n return fields.map((i) => {\n const spec = tableSpecs[i];\n const labelIdx = spec.type === \"axis\" ? getLabelColumnIndex(spec.id) : -1;\n return labelIdx === -1 ? i : labelIdx;\n });\n}\n\n/** Default hidden col ids built from columns marked with the Optional annotation. */\nfunction computeDefaultHiddenColIds(\n fields: number[],\n indices: number[],\n tableSpecs: PTableColumnSpec[],\n): PlTableColumnIdJson[] {\n return fields.reduce<PlTableColumnIdJson[]>((acc, field, i) => {\n const spec = tableSpecs[field];\n if (spec.type !== \"column\" || !isColumnOptional(spec.spec)) return acc;\n const labeledSpec = tableSpecs[indices[i]];\n return [...acc, canonicalizeJson<PlTableColumnId>({ source: spec, labeled: labeledSpec })];\n }, []);\n}\n\n/** Extract axis indices and specs from the visible table (always present as part of join). */\nfunction collectVisibleAxes(\n visibleTableSpecs: PTableColumnSpec[],\n): [number, PTableColumnSpecAxis][] {\n return visibleTableSpecs\n .entries()\n .filter((entry): entry is [number, PTableColumnSpecAxis] => entry[1].type === \"axis\")\n .toArray();\n}\n\n/**\n * Compose request indices for the visible table:\n * non-hidden display fields first, then visible axes (deduplicated).\n * Returns fieldResultMapping (display field → position in requestIndices, -1 if not requested)\n * and axesResultIndices (visible axis → position in requestIndices).\n */\nfunction buildRequestIndices(\n indices: number[],\n visibleAxesIndices: number[],\n specsToVisibleSpecsMapping: Map<number, number>,\n): {\n requestIndices: number[];\n axesResultIndices: number[];\n fieldResultMapping: number[];\n} {\n const resolved = indices.map((displayField) => {\n const idx = specsToVisibleSpecsMapping.get(displayField);\n return isNil(idx) || idx === -1 ? null : idx;\n });\n const requestIndices = uniq([\n ...resolved.filter((v): v is number => v !== null),\n ...visibleAxesIndices,\n ]);\n const fieldResultMapping = resolved.map((v) => (v === null ? -1 : requestIndices.indexOf(v)));\n const axesResultIndices = visibleAxesIndices.map((vi) => requestIndices.indexOf(vi));\n\n return { requestIndices, axesResultIndices, fieldResultMapping };\n}\n"],"mappings":"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"}
|
|
@@ -4,13 +4,13 @@ import "../../../lib/util/helpers/dist/index.js";
|
|
|
4
4
|
import { isNumericValueType as r, isStringValueType as i } from "../../PlAdvancedFilter/utils.js";
|
|
5
5
|
import { computed as a } from "vue";
|
|
6
6
|
import { canonicalizeJson as o, createDefaultPTableParams as s, distillFilterSpec as c, getPTableColumnId as l, parseJson as u, upgradePlDataTableStateV2 as d } from "@platforma-sdk/model";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { debounce as f, isNil as p } from "es-toolkit";
|
|
8
|
+
import { computedCached as m } from "@milaboratories/uikit";
|
|
9
9
|
//#region src/components/PlAgDataTable/sources/table-state-v2.ts
|
|
10
10
|
function h(e, n, r, i) {
|
|
11
|
-
let o =
|
|
11
|
+
let o = m({
|
|
12
12
|
get: () => d(e.value),
|
|
13
|
-
set:
|
|
13
|
+
set: f((t) => e.value = t, 300)
|
|
14
14
|
}), c = a({
|
|
15
15
|
get: () => {
|
|
16
16
|
let e = D(), t = n.value.sourceId, r = "error" in n.value && n.value.error == null;
|
|
@@ -54,7 +54,7 @@ function h(e, n, r, i) {
|
|
|
54
54
|
}), h = a({
|
|
55
55
|
get: () => {
|
|
56
56
|
let e = c.value.filtersState;
|
|
57
|
-
return
|
|
57
|
+
return p(e) ? y() : _(e);
|
|
58
58
|
},
|
|
59
59
|
set: (e) => {
|
|
60
60
|
let t = c.value;
|
|
@@ -66,7 +66,7 @@ function h(e, n, r, i) {
|
|
|
66
66
|
}), v = a({
|
|
67
67
|
get: () => {
|
|
68
68
|
let e = c.value.defaultFiltersState;
|
|
69
|
-
return
|
|
69
|
+
return p(e) ? p(i.value) ? null : S(_(i.value)) : _(e);
|
|
70
70
|
},
|
|
71
71
|
set: (e) => {
|
|
72
72
|
let t = c.value;
|
|
@@ -77,7 +77,7 @@ function h(e, n, r, i) {
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
function b() {
|
|
80
|
-
v.value =
|
|
80
|
+
v.value = p(i.value) ? null : S(_(i.value));
|
|
81
81
|
}
|
|
82
82
|
return {
|
|
83
83
|
gridState: l,
|
|
@@ -98,14 +98,14 @@ function h(e, n, r, i) {
|
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
100
|
function g(e, t) {
|
|
101
|
-
let n = x(t, e.searchString), r =
|
|
101
|
+
let n = x(t, e.searchString), r = p(e.filtersState) ? null : b(e.filtersState), i = [
|
|
102
102
|
...w(e.sheetsState),
|
|
103
|
-
...
|
|
104
|
-
...
|
|
103
|
+
...p(r) ? [] : [r],
|
|
104
|
+
...p(n) ? [] : [n]
|
|
105
105
|
], a = c(i.length === 0 ? null : i.length === 1 ? i[0] : {
|
|
106
106
|
type: "and",
|
|
107
107
|
filters: i
|
|
108
|
-
}), o =
|
|
108
|
+
}), o = p(e.defaultFiltersState) ? null : b(e.defaultFiltersState), s = p(o) ? null : c(o) ?? v();
|
|
109
109
|
return {
|
|
110
110
|
sourceId: e.sourceId,
|
|
111
111
|
hiddenColIds: E(e.gridState.columnVisibility),
|
|
@@ -115,7 +115,7 @@ function g(e, t) {
|
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
function _(e) {
|
|
118
|
-
return e.type !== "and" && e.type !== "or" && e.type !== "not" ? "type" in e && !
|
|
118
|
+
return e.type !== "and" && e.type !== "or" && e.type !== "not" ? "type" in e && !p(e.type) ? {
|
|
119
119
|
id: n(),
|
|
120
120
|
type: "and",
|
|
121
121
|
isExpanded: !0,
|
|
@@ -158,7 +158,7 @@ function b(e) {
|
|
|
158
158
|
}
|
|
159
159
|
function x(e, t) {
|
|
160
160
|
let n = t?.trim();
|
|
161
|
-
if (
|
|
161
|
+
if (p(n) || n.length === 0) return null;
|
|
162
162
|
let a = [], s = Number(n), c = n.length > 0 && !isNaN(s) && isFinite(s);
|
|
163
163
|
for (let t of e) {
|
|
164
164
|
let e = o(l(t)), u = t.spec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = Omit<BaseProps, \"step\" | \"onUpdateStep\"> & {\n annotation: Annotation;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { produce } from \"immer\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation, Filter } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\nconst props = defineProps<Props>();\n\nconst selectedStepId = shallowRef<undefined | number>(undefined);\n\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(props.annotation)\n ? undefined\n : props.annotation.steps.find((step) => step.id === selectedStepId.value);\n});\n\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && props.annotation.steps.length > 0) {\n selectedStepId.value = props.annotation.steps[0].id;\n }\n});\n\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\nfunction updateSelectedStepId(id: undefined | number) {\n selectedStepId.value = id;\n}\n\nfunction updateSelectedStep(step: Filter) {\n props.onUpdateAnnotation(\n produce(props.annotation, (draft) => {\n const idx = draft.steps.findIndex((s) => s.id === step.id);\n if (idx !== -1) {\n draft.steps[idx] = step;\n }\n }),\n );\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n :annotation=\"props.annotation\"\n :selected-step-id=\"selectedStepId\"\n :on-update-annotation=\"props.onUpdateAnnotation\"\n :on-update-selected-step-id=\"updateSelectedStepId\"\n :class=\"$style.sidebarItem\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n :step=\"selectedStep\"\n :on-update-step=\"updateSelectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAoBA,IAAM,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAE1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAM,WAAU,GACxD,KAAA,IACA,EAAM,WAAW,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAEF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAM,WAAW,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAM,WAAW,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;EAI5B,SAAS,EAAqB,GAAwB;AACpD,KAAe,QAAQ;;EAGzB,SAAS,EAAmB,GAAc;AACxC,KAAM,mBACJ,EAAQ,EAAM,aAAa,MAAU;IACnC,IAAM,IAAM,EAAM,MAAM,WAAW,MAAM,EAAE,OAAO,EAAK,GAAG;AAC1D,IAAI,MAAQ,OACV,EAAM,MAAM,KAAO;KAErB,CACH;;yBAKD,EAuBiB,EAAA,EAAA,EAAA,MAAA;GAtBJ,UAAM,QAQb,CAPF,EAOE,GAAA;IANC,YAAY,EAAM;IAClB,oBAAkB,EAAA;IAClB,wBAAsB,EAAM;IAC5B,8BAA4B;IAC5B,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,gBAAe;;;;;;;GAGT,UAAM,
|
|
1
|
+
{"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = Omit<BaseProps, \"step\" | \"onUpdateStep\"> & {\n annotation: Annotation;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { produce } from \"immer\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation, Filter } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\nconst props = defineProps<Props>();\n\nconst selectedStepId = shallowRef<undefined | number>(undefined);\n\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(props.annotation)\n ? undefined\n : props.annotation.steps.find((step) => step.id === selectedStepId.value);\n});\n\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && props.annotation.steps.length > 0) {\n selectedStepId.value = props.annotation.steps[0].id;\n }\n});\n\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\nfunction updateSelectedStepId(id: undefined | number) {\n selectedStepId.value = id;\n}\n\nfunction updateSelectedStep(step: Filter) {\n props.onUpdateAnnotation(\n produce(props.annotation, (draft) => {\n const idx = draft.steps.findIndex((s) => s.id === step.id);\n if (idx !== -1) {\n draft.steps[idx] = step;\n }\n }),\n );\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n :annotation=\"props.annotation\"\n :selected-step-id=\"selectedStepId\"\n :on-update-annotation=\"props.onUpdateAnnotation\"\n :on-update-selected-step-id=\"updateSelectedStepId\"\n :class=\"$style.sidebarItem\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n :step=\"selectedStep\"\n :on-update-step=\"updateSelectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAoBA,IAAM,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAE1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAM,WAAU,GACxD,KAAA,IACA,EAAM,WAAW,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAEF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAM,WAAW,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAM,WAAW,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;EAI5B,SAAS,EAAqB,GAAwB;AACpD,KAAe,QAAQ;;EAGzB,SAAS,EAAmB,GAAc;AACxC,KAAM,mBACJ,EAAQ,EAAM,aAAa,MAAU;IACnC,IAAM,IAAM,EAAM,MAAM,WAAW,MAAM,EAAE,OAAO,EAAK,GAAG;AAC1D,IAAI,MAAQ,OACV,EAAM,MAAM,KAAO;KAErB,CACH;;yBAKD,EAuBiB,EAAA,EAAA,EAAA,MAAA;GAtBJ,UAAM,QAQb,CAPF,EAOE,GAAA;IANC,YAAY,EAAM;IAClB,oBAAkB,EAAA;IAClB,wBAAsB,EAAM;IAC5B,8BAA4B;IAC5B,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,gBAAe;;;;;;;GAGT,UAAM,QAUb,CARM,EAAA,SAAA,GAAA,EADR,EASE,GAAA;;IAPC,MAAM,EAAA;IACN,kBAAgB;IAChB,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,uBAAqB,EAAM;IAC3B,oBAAoB,EAAM;IAC1B,6BAA6B,EAAM"}
|
|
@@ -2,8 +2,8 @@ import e from "../PlAdvancedFilter/PlAdvancedFilter.js";
|
|
|
2
2
|
import "../PlAdvancedFilter/index.js";
|
|
3
3
|
import { Fragment as t, Teleport as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, normalizeClass as d, openBlock as f, ref as p, unref as m, withCtx as h, withModifiers as g } from "vue";
|
|
4
4
|
import { Annotation as _, Domain as v, canonicalizeJson as y, getPTableColumnId as b, getUniqueSourceValuesWithLabels as x, parseJson as S, readAnnotation as C, readDomain as w } from "@platforma-sdk/model";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { isFunction as T, isNil as E } from "es-toolkit";
|
|
6
|
+
import { PlBtnGhost as D, PlSlideModal as O, usePlBlockPageTitleTeleportTarget as k } from "@milaboratories/uikit";
|
|
7
7
|
//#region src/components/PlTableFilters/PlTableFiltersV2.vue?vue&type=script&setup=true&lang.ts
|
|
8
8
|
var A = { key: 1 }, j = /* @__PURE__ */ u({
|
|
9
9
|
__name: "PlTableFiltersV2",
|
|
@@ -17,12 +17,12 @@ var A = { key: 1 }, j = /* @__PURE__ */ u({
|
|
|
17
17
|
onUpdateDefaultFilters: { type: Function }
|
|
18
18
|
},
|
|
19
19
|
setup(u) {
|
|
20
|
-
let j = u, M =
|
|
20
|
+
let j = u, M = k("PlTableFiltersV2"), N = p(!1), P = r(() => j.filters.filters.length > 0), F = r(() => !E(j.defaultFilters) && j.defaultFilters.filters.length > 0), I = r(() => E(j.defaultFilters) || j.defaultFilters?.filters.length === 0 ? j.filters : {
|
|
21
21
|
...j.filters,
|
|
22
22
|
filters: [...j.defaultFilters?.filters ?? [], ...j.filters.filters]
|
|
23
23
|
}), L = (e) => {
|
|
24
24
|
let t = e;
|
|
25
|
-
if (
|
|
25
|
+
if (E(j.defaultFilters)) return j.onUpdateFilters(t);
|
|
26
26
|
let [n, ...r] = t.filters;
|
|
27
27
|
j.onUpdateFilters({
|
|
28
28
|
...t,
|
|
@@ -56,7 +56,7 @@ var A = { key: 1 }, j = /* @__PURE__ */ u({
|
|
|
56
56
|
"notEqual"
|
|
57
57
|
];
|
|
58
58
|
function B(e) {
|
|
59
|
-
if (
|
|
59
|
+
if (E(j.pframeHandle)) return console.warn("PFrame handle is not available, cannot fetch suggest options"), [];
|
|
60
60
|
let t = e.columnId, n = S(t);
|
|
61
61
|
if (n.type !== "column") throw Error("ColumnId should be of type 'column' for suggest options");
|
|
62
62
|
return x(j.pframeHandle, {
|
|
@@ -73,13 +73,13 @@ var A = { key: 1 }, j = /* @__PURE__ */ u({
|
|
|
73
73
|
return (r, u) => (f(), o(t, null, [m(M) ? (f(), i(n, {
|
|
74
74
|
key: 0,
|
|
75
75
|
to: m(M)
|
|
76
|
-
}, [l(m(
|
|
76
|
+
}, [l(m(D), {
|
|
77
77
|
icon: P.value || F.value ? "filter-on" : "filter",
|
|
78
78
|
onClick: u[0] ||= g((e) => N.value = !0, ["stop"])
|
|
79
79
|
}, {
|
|
80
80
|
default: h(() => [...u[3] ||= [c(" Filters ", -1)]]),
|
|
81
81
|
_: 1
|
|
82
|
-
}, 8, ["icon"])], 8, ["to"])) : a("", !0), l(m(
|
|
82
|
+
}, 8, ["icon"])], 8, ["to"])) : a("", !0), l(m(O), {
|
|
83
83
|
modelValue: N.value,
|
|
84
84
|
"onUpdate:modelValue": u[2] ||= (e) => N.value = e,
|
|
85
85
|
"close-on-outside-click": !1
|
|
@@ -101,7 +101,7 @@ var A = { key: 1 }, j = /* @__PURE__ */ u({
|
|
|
101
101
|
"group-title": h(({ index: e }) => [F.value && e === 0 ? (f(), o("div", {
|
|
102
102
|
key: 0,
|
|
103
103
|
class: d(r.$style.defaultGroupTitle)
|
|
104
|
-
}, [u[5] ||= c(" Default Group ", -1), m(
|
|
104
|
+
}, [u[5] ||= c(" Default Group ", -1), m(T)(j.onResetDefaultFilters) ? (f(), i(m(D), {
|
|
105
105
|
key: 0,
|
|
106
106
|
icon: "restart",
|
|
107
107
|
class: d(r.$style.restartBtn),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAppV3.d.ts","sourceRoot":"","sources":["../../src/internal/createAppV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAMnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"createAppV3.d.ts","sourceRoot":"","sources":["../../src/internal/createAppV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAMnB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,KAAK,UAAU,IAAI,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGnF,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMxE,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;AAI9D,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAWrC,eAAO,MAAM,sBAAsB,GAAI,QAAQ,YAAY,GAAG,SAAS,KAAG,YAGxE,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,IAAI,GAAG,OAAO,EACd,IAAI,GAAG,OAAO,EACd,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EACnD,IAAI,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EACxC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,UAAU,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAElE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EACvD,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EACzF,QAAQ,EAAE,WAAW;;eAsGZ,MAAM;;;;;;;;qBAvDJ,OAAO,CAAC,OAAO,CAAC;0BACX,OAAO;6BACJ,eAAe,CAAC,IAAI,CAAC;;;;;;;;yBA+IkB,IAAI;oCAEf,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAK3E;;;;;;WAMG;uBACY,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAMtD;;;;;WAKG;yBACc,IAAI;;;;EA8HxB;AAED,MAAM,MAAM,SAAS,CACnB,IAAI,GAAG,OAAO,EACd,IAAI,GAAG,OAAO,EACd,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EACnD,IAAI,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EACxC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,UAAU,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,IAChE,UAAU,CAAC,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -5,148 +5,139 @@ import "../lib/util/helpers/dist/index.js";
|
|
|
5
5
|
import { MultiError as r, ensureOutputHasStableFlag as i } from "../utils.js";
|
|
6
6
|
import { parseQuery as a } from "../urls.js";
|
|
7
7
|
import { UpdateSerializer as o } from "./UpdateSerializer.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { logDebug as s, logError as c } from "./utils.js";
|
|
9
|
+
import { getServices as l } from "./getServices.js";
|
|
10
|
+
import { computed as u, markRaw as d, reactive as f, ref as p } from "vue";
|
|
11
|
+
import { deriveDataFromStorage as m, getPluginData as h, hasAbortError as g, isPluginOutputKey as _, pluginOutputPrefix as v, unwrapResult as y } from "@platforma-sdk/model";
|
|
11
12
|
import { watchIgnorable as b } from "@vueuse/core";
|
|
12
13
|
import { applyPatch as x } from "fast-json-patch";
|
|
13
14
|
var S = (e) => ({
|
|
14
15
|
authorId: e?.authorId ?? t(),
|
|
15
16
|
localVersion: (e?.localVersion ?? 0) + 1
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} catch (e) {
|
|
20
|
-
return e instanceof Error ? e.message : String(e);
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
function w(w, T, E) {
|
|
24
|
-
let D = (e, ...t) => {
|
|
25
|
-
E.debug && console.log(`%c>>> %c${e}`, "color: orange; font-weight: bold", "color: orange", ...t.map((e) => C(e)));
|
|
26
|
-
}, O = (e, ...t) => {
|
|
27
|
-
console.error(`%c>>> %c${e}`, "color: red; font-weight: bold", "color: red", ...t.map((e) => C(e)));
|
|
28
|
-
}, k = {
|
|
17
|
+
});
|
|
18
|
+
function C(C, w, T) {
|
|
19
|
+
let E = T.debug ? s : () => {}, D = c, O = {
|
|
29
20
|
isExternalSnapshot: !1,
|
|
30
21
|
author: {
|
|
31
22
|
authorId: t(),
|
|
32
23
|
localVersion: 0
|
|
33
24
|
}
|
|
34
|
-
},
|
|
35
|
-
let t =
|
|
36
|
-
return t || (t = new o({ debounceSpan:
|
|
37
|
-
},
|
|
25
|
+
}, k = () => (O.author = S(O.author), E("nextAuthorMarker", O.author), O.author), A = p(!1), j = p(C.uTag), M = T.debounceSpan ?? 200, N = new o({ debounceSpan: M }), P = /* @__PURE__ */ new Map(), F = (e) => {
|
|
26
|
+
let t = P.get(e);
|
|
27
|
+
return t || (t = new o({ debounceSpan: M }), P.set(e, t)), t;
|
|
28
|
+
}, I = new o({ debounceSpan: M }), L = /* @__PURE__ */ new Map(), R = p(C.value), z = async (e) => w.mutateStorage({
|
|
38
29
|
operation: "update-block-data",
|
|
39
30
|
value: e
|
|
40
|
-
},
|
|
31
|
+
}, k()), B = async (e, t) => w.mutateStorage({
|
|
41
32
|
operation: "update-plugin-data",
|
|
42
33
|
pluginId: e,
|
|
43
34
|
value: t
|
|
44
|
-
},
|
|
45
|
-
let e = Object.entries(
|
|
35
|
+
}, k()), V = async (e) => w.setNavigationState(e), H = u(() => {
|
|
36
|
+
let e = Object.entries(R.value.outputs).filter(([e]) => !_(e)).map(([e, t]) => w.blockModelInfo.outputs[e]?.withStatus ? [e, i(t)] : [e, t.ok && t.value !== void 0 ? t.value : void 0]);
|
|
46
37
|
return Object.fromEntries(e);
|
|
47
|
-
}),
|
|
48
|
-
let e = Object.entries(
|
|
38
|
+
}), U = u(() => {
|
|
39
|
+
let e = Object.entries(R.value.outputs).filter(([e]) => !_(e)).map(([e, t]) => [e, t && t.ok === !1 ? new r(t.errors) : void 0]);
|
|
49
40
|
return Object.fromEntries(e);
|
|
50
|
-
}),
|
|
41
|
+
}), W = f({
|
|
51
42
|
apiVersion: 3,
|
|
52
43
|
error: "",
|
|
53
44
|
model: {
|
|
54
|
-
data: n(m(
|
|
55
|
-
outputs:
|
|
56
|
-
outputErrors:
|
|
45
|
+
data: n(m(R.value.blockStorage)),
|
|
46
|
+
outputs: H,
|
|
47
|
+
outputErrors: U
|
|
57
48
|
}
|
|
58
|
-
}), { ignoreUpdates:
|
|
49
|
+
}), { ignoreUpdates: G } = b(() => W.model, (e) => {
|
|
59
50
|
let t = n(e);
|
|
60
|
-
|
|
61
|
-
}, { deep: !0 }),
|
|
62
|
-
|
|
51
|
+
E("setDataQueue appModel.model, data", t.data), N.run(() => z(t.data).then(y));
|
|
52
|
+
}, { deep: !0 }), K = (e) => {
|
|
53
|
+
E("updateAppModel", e), W.model.data = n(e.data);
|
|
63
54
|
};
|
|
64
55
|
(async () => {
|
|
65
56
|
for (window.addEventListener("beforeunload", () => {
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
A.value = !0, w.dispose().then(y).catch((e) => {
|
|
58
|
+
D("error in dispose", e);
|
|
68
59
|
});
|
|
69
|
-
}); !
|
|
70
|
-
let e = await
|
|
71
|
-
if (
|
|
60
|
+
}); !A.value;) try {
|
|
61
|
+
let e = await w.getPatches(j.value).then(y);
|
|
62
|
+
if (E("patches.length", e.value.length), E("uTagRef.value", j.value), E("patches.uTag", e.uTag), E("patches.author", e.author), E("data.author", O.author), j.value = e.uTag, e.value.length === 0) {
|
|
72
63
|
await new Promise((e) => setTimeout(e, 150));
|
|
73
64
|
continue;
|
|
74
65
|
}
|
|
75
|
-
let t =
|
|
76
|
-
t ||
|
|
77
|
-
|
|
78
|
-
for (let [e, t] of
|
|
79
|
-
t.model.data = n(h(
|
|
66
|
+
let t = O.author?.authorId !== e.author?.authorId;
|
|
67
|
+
t || O.isExternalSnapshot ? (E("got external changes, applying them to the snapshot", e.value), G(() => {
|
|
68
|
+
R.value = x(R.value, e.value, !1, !1).newDocument, K({ data: m(R.value.blockStorage) });
|
|
69
|
+
for (let [e, t] of L) t.ignoreUpdates(() => {
|
|
70
|
+
t.model.data = n(h(R.value.blockStorage, e));
|
|
80
71
|
});
|
|
81
|
-
|
|
82
|
-
})) : (
|
|
83
|
-
|
|
72
|
+
O.isExternalSnapshot = t;
|
|
73
|
+
})) : (E("outputs changed", e.value), G(() => {
|
|
74
|
+
R.value = x(R.value, e.value).newDocument;
|
|
84
75
|
})), await new Promise((e) => setTimeout(e, 150));
|
|
85
76
|
} catch (e) {
|
|
86
|
-
g(e) ? (
|
|
77
|
+
g(e) ? (E("patches loop aborted"), A.value = !0) : (D("error in patches loop", e), await new Promise((e) => setTimeout(e, 1e3)));
|
|
87
78
|
}
|
|
88
79
|
})();
|
|
89
|
-
let
|
|
90
|
-
cloneData:
|
|
91
|
-
cloneNavigationState:
|
|
80
|
+
let q = () => n(W.model.data), J = () => n(R.value.navigationState), Y = {
|
|
81
|
+
cloneData: q,
|
|
82
|
+
cloneNavigationState: J,
|
|
92
83
|
updateData(e) {
|
|
93
|
-
let t = e(
|
|
94
|
-
return
|
|
84
|
+
let t = e(q());
|
|
85
|
+
return E("updateData", t), W.model.data = t, N.run(() => z(t).then(y));
|
|
95
86
|
},
|
|
96
87
|
navigateTo(e) {
|
|
97
|
-
let t =
|
|
98
|
-
return t.href = e,
|
|
88
|
+
let t = J();
|
|
89
|
+
return t.href = e, I.run(() => V(t).then(y));
|
|
99
90
|
},
|
|
100
91
|
async allSettled() {
|
|
101
92
|
await e(0);
|
|
102
|
-
let t = [
|
|
93
|
+
let t = [N.allSettled(), ...Array.from(P.values()).map((e) => e.allSettled())];
|
|
103
94
|
await Promise.all(t);
|
|
104
95
|
}
|
|
105
|
-
},
|
|
106
|
-
let t = v(e), a =
|
|
96
|
+
}, X = l({ platforma: w }), Z = (e) => {
|
|
97
|
+
let t = v(e), a = u(() => {
|
|
107
98
|
let e = {};
|
|
108
|
-
for (let [n, r] of Object.entries(
|
|
99
|
+
for (let [n, r] of Object.entries(R.value.outputs)) {
|
|
109
100
|
if (!n.startsWith(t)) continue;
|
|
110
101
|
let a = n.slice(t.length);
|
|
111
|
-
|
|
102
|
+
w.blockModelInfo.outputs[n]?.withStatus ? e[a] = r ? i(r) : void 0 : e[a] = r.ok && r.value !== void 0 ? r.value : void 0;
|
|
112
103
|
}
|
|
113
104
|
return e;
|
|
114
|
-
}), o =
|
|
105
|
+
}), o = u(() => {
|
|
115
106
|
let e = {};
|
|
116
|
-
for (let [n, i] of Object.entries(
|
|
107
|
+
for (let [n, i] of Object.entries(R.value.outputs)) n.startsWith(t) && (e[n.slice(t.length)] = i && i.ok === !1 ? new r(i.errors) : void 0);
|
|
117
108
|
return e;
|
|
118
|
-
}), s =
|
|
119
|
-
data: n(h(
|
|
109
|
+
}), s = f({
|
|
110
|
+
data: n(h(R.value.blockStorage, e)),
|
|
120
111
|
outputs: a,
|
|
121
112
|
outputErrors: o
|
|
122
|
-
}), { ignoreUpdates:
|
|
123
|
-
t !== void 0 && (
|
|
113
|
+
}), { ignoreUpdates: c } = b(() => s.data, (t) => {
|
|
114
|
+
t !== void 0 && (E("plugin setData", e, t), F(e).run(() => B(e, n(t)).then(y)));
|
|
124
115
|
}, { deep: !0 });
|
|
125
116
|
return {
|
|
126
117
|
model: s,
|
|
127
|
-
services:
|
|
128
|
-
ignoreUpdates:
|
|
118
|
+
services: d(X),
|
|
119
|
+
ignoreUpdates: c
|
|
129
120
|
};
|
|
130
|
-
},
|
|
131
|
-
let t =
|
|
121
|
+
}, Q = { getOrCreatePluginState(e) {
|
|
122
|
+
let t = L.get(e);
|
|
132
123
|
if (t) return t;
|
|
133
|
-
let n =
|
|
134
|
-
return
|
|
135
|
-
} },
|
|
136
|
-
closedRef:
|
|
137
|
-
snapshot:
|
|
138
|
-
plugins: Object.fromEntries(
|
|
139
|
-
services:
|
|
140
|
-
queryParams:
|
|
141
|
-
href:
|
|
142
|
-
hasErrors:
|
|
143
|
-
}, $ = Object.assign(
|
|
144
|
-
return
|
|
124
|
+
let n = Z(e);
|
|
125
|
+
return L.set(e, n), n;
|
|
126
|
+
} }, ee = {
|
|
127
|
+
closedRef: A,
|
|
128
|
+
snapshot: R,
|
|
129
|
+
plugins: Object.fromEntries(w.blockModelInfo.pluginIds.map((e) => [e, { handle: e }])),
|
|
130
|
+
services: d(X),
|
|
131
|
+
queryParams: u(() => a(R.value.navigationState.href)),
|
|
132
|
+
href: u(() => R.value.navigationState.href),
|
|
133
|
+
hasErrors: u(() => Object.values(R.value.outputs).some((e) => !e?.ok))
|
|
134
|
+
}, $ = Object.assign(f(Object.assign(W, ee)), Y);
|
|
135
|
+
return T.debug && (globalThis.__block_app__ = $), {
|
|
145
136
|
app: $,
|
|
146
|
-
pluginAccess:
|
|
137
|
+
pluginAccess: Q
|
|
147
138
|
};
|
|
148
139
|
}
|
|
149
140
|
//#endregion
|
|
150
|
-
export {
|
|
141
|
+
export { C as createAppV3 };
|
|
151
142
|
|
|
152
143
|
//# sourceMappingURL=createAppV3.js.map
|