@conduction/nextcloud-vue 2.97.0 → 2.99.0
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/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +12 -0
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +11 -2
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +17 -0
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +106 -2
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +9 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js +964 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js +282 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/index.js +28 -0
- package/dist/esm/components/CnChecklistRunWidget/index.js.map +1 -0
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +1 -0
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +26 -8
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +188 -5
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +3 -3
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +27 -0
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +16 -2
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +43 -3
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +9 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js.map +1 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +239 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +182 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js +9 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js +265 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js +191 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js +9 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js +508 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js +99 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +18 -70
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js +6 -44
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js +1 -1
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js +83 -9
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js +80 -11
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +2 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js +9 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js +472 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js +231 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/index.js +27 -0
- package/dist/esm/components/CnWorkingCalendarWidget/index.js.map +1 -0
- package/dist/esm/composables/indexSources.js +238 -2
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/composables/useFlowStore.js +2 -1
- package/dist/esm/composables/useFlowStore.js.map +1 -1
- package/dist/esm/composables/useOrganisationStore.js +115 -0
- package/dist/esm/composables/useOrganisationStore.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +109 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +138 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +1071 -274
- package/dist/esm/utils/builtInFormatters.js +34 -1
- package/dist/esm/utils/builtInFormatters.js.map +1 -1
- package/dist/esm/utils/libraryWidgetKeys.js +2 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/matrixCells.js +158 -0
- package/dist/esm/utils/matrixCells.js.map +1 -0
- package/dist/esm/utils/nextcloudDirectory.js +121 -0
- package/dist/esm/utils/nextcloudDirectory.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/workingCalendarMonth.js +85 -0
- package/dist/esm/utils/workingCalendarMonth.js.map +1 -0
- package/dist/nextcloud-vue.cjs.js +14888 -10014
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1071 -274
- package/l10n/en.json +109 -1
- package/l10n/nl.json +138 -1
- package/package.json +2 -2
- package/scripts/merge-l10n.js +196 -0
- package/src/components/CnActionsMenu/CnActionsMenu.vue +14 -1
- package/src/components/CnAppRoot/CnAppRoot.md +1 -0
- package/src/components/CnAppRoot/CnAppRoot.vue +17 -0
- package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +1 -0
- package/src/components/CnChartWidget/CnChartWidget.md +2 -1
- package/src/components/CnChartWidget/CnChartWidget.vue +106 -2
- package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +1269 -0
- package/src/components/CnChecklistRunWidget/index.js +27 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +26 -8
- package/src/components/CnDetailPage/CnDetailPage.md +48 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +189 -5
- package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +3 -3
- package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +38 -2
- package/src/components/CnIndexPage/CnIndexPage.md +28 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +43 -3
- package/src/components/CnOrderedListField/CnOrderedListField.vue +458 -0
- package/src/components/CnOrderedListField/index.js +7 -0
- package/src/components/CnSettingsField/CnSettingsField.vue +449 -0
- package/src/components/CnSettingsField/index.js +4 -0
- package/src/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue +613 -0
- package/src/components/CnSettingsFieldsSection/index.js +4 -0
- package/src/components/CnSettingsPage/CnSettingsPage.vue +6 -86
- package/src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue +139 -10
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +2 -0
- package/src/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue +725 -0
- package/src/components/CnWorkingCalendarWidget/index.js +26 -0
- package/src/components/index.js +5 -0
- package/src/composables/indexSources.js +237 -1
- package/src/composables/useFlowStore.js +2 -1
- package/src/composables/useOrganisationStore.js +111 -0
- package/src/css/badge.css +32 -16
- package/src/css/look-board-detail.css +80 -8
- package/src/css/look-board-index.css +52 -8
- package/src/css/look-board.css +219 -1
- package/src/index.js +5 -0
- package/src/schemas/app-manifest-v2.schema.json +33 -3
- package/src/utils/builtInFormatters.js +33 -0
- package/src/utils/libraryWidgetKeys.js +2 -0
- package/src/utils/matrixCells.js +154 -0
- package/src/utils/nextcloudDirectory.js +117 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/workingCalendarMonth.js +82 -0
|
@@ -138,9 +138,11 @@ import { useDataSource } from '../../composables/useDataSource.js'
|
|
|
138
138
|
import { getByPath, useEndpointSource } from '../../composables/useEndpointSource.js'
|
|
139
139
|
import { useObjectStore } from '../../store/useObjectStore.js'
|
|
140
140
|
import { resolveObjectOpType } from '../../utils/actionsDispatcher.js'
|
|
141
|
+
import { fetchReferenceObjects } from '../../utils/boardReferenceColumns.js'
|
|
141
142
|
import { resolveObjectTokenContext } from '../../utils/detailObjectContext.js'
|
|
142
143
|
import { safeCurrencyCode } from '../../utils/formatMetric.js'
|
|
143
|
-
import {
|
|
144
|
+
import { cellsFromRecord, pivotCells } from '../../utils/matrixCells.js'
|
|
145
|
+
import { hasUnresolvedTokens, resolveFilterTokens } from '../../utils/resolveFilterTokens.js'
|
|
144
146
|
import { userLocale } from '../../utils/userLocale.js'
|
|
145
147
|
|
|
146
148
|
/**
|
|
@@ -388,6 +390,26 @@ export default {
|
|
|
388
390
|
default: null,
|
|
389
391
|
},
|
|
390
392
|
|
|
393
|
+
/**
|
|
394
|
+
* `matrix`: read the cells from records that each hold one cell, in
|
|
395
|
+
* a register: `{ register, schema, filter?, rowField, columnField,
|
|
396
|
+
* valueField, rowLabelField?, columnLabelField?, rowLabels?,
|
|
397
|
+
* columnLabels?, valueLabels?, rowOrder?, columnOrder?, rowOrderField?,
|
|
398
|
+
* columnOrderField?, limit? }`. `filter` takes tokens such as
|
|
399
|
+
* `@object.matrixVersion`; the list waits while one is unresolved.
|
|
400
|
+
* With `cellsPath` the matrix sits inside ONE record instead: the
|
|
401
|
+
* first record `filter` finds (else `fallbackFilter`), its array at
|
|
402
|
+
* `cellsPath` narrowed by `cellFilter` (tokens allowed), the axis
|
|
403
|
+
* order from `rowOrderPath` / `columnOrderPath` on that record.
|
|
404
|
+
* Wins over `series` / `categories`.
|
|
405
|
+
*
|
|
406
|
+
* @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
|
|
407
|
+
*/
|
|
408
|
+
cellSource: {
|
|
409
|
+
type: Object,
|
|
410
|
+
default: null,
|
|
411
|
+
},
|
|
412
|
+
|
|
391
413
|
/**
|
|
392
414
|
* Chart data series. Format depends on chart type.
|
|
393
415
|
* For line/area/bar: [{ name: string, data: number[] }]
|
|
@@ -800,6 +822,8 @@ export default {
|
|
|
800
822
|
// `drilldown` click navigates with the filterable value, not the
|
|
801
823
|
// display label.
|
|
802
824
|
aggregateData: null,
|
|
825
|
+
// The `cellSource` matrix, laid out (`{ series, categories, columnKeys }`), or null.
|
|
826
|
+
cellData: null,
|
|
803
827
|
// Active `views[]` switcher key (null = the first view). Local
|
|
804
828
|
// UI state only — never persisted.
|
|
805
829
|
activeViewKey: null,
|
|
@@ -900,6 +924,9 @@ export default {
|
|
|
900
924
|
* and `labels`.
|
|
901
925
|
*/
|
|
902
926
|
resolvedSeries() {
|
|
927
|
+
if (this.cellData) {
|
|
928
|
+
return this.cellData.series
|
|
929
|
+
}
|
|
903
930
|
const ep = this.endpointChartData
|
|
904
931
|
if (ep) {
|
|
905
932
|
return ep.series
|
|
@@ -913,6 +940,9 @@ export default {
|
|
|
913
940
|
},
|
|
914
941
|
|
|
915
942
|
resolvedCategories() {
|
|
943
|
+
if (this.cellData) {
|
|
944
|
+
return this.cellData.categories
|
|
945
|
+
}
|
|
916
946
|
const ep = this.endpointChartData
|
|
917
947
|
if (ep) {
|
|
918
948
|
return ep.categories
|
|
@@ -926,6 +956,9 @@ export default {
|
|
|
926
956
|
},
|
|
927
957
|
|
|
928
958
|
resolvedLabels() {
|
|
959
|
+
if (this.cellData) {
|
|
960
|
+
return this.cellData.categories
|
|
961
|
+
}
|
|
929
962
|
const ep = this.endpointChartData
|
|
930
963
|
if (ep) {
|
|
931
964
|
return ep.labels
|
|
@@ -1316,6 +1349,30 @@ export default {
|
|
|
1316
1349
|
return this.emptyLabel !== '' && !this.hasChartData
|
|
1317
1350
|
},
|
|
1318
1351
|
|
|
1352
|
+
/**
|
|
1353
|
+
* The `cellSource` list as it would be asked, tokens resolved, or null
|
|
1354
|
+
* while there is none or a filter token is unresolved. Refetches when
|
|
1355
|
+
* it changes.
|
|
1356
|
+
*
|
|
1357
|
+
* @return {string|null} The key.
|
|
1358
|
+
* @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
|
|
1359
|
+
*/
|
|
1360
|
+
cellSourceKey() {
|
|
1361
|
+
const src = this.cellSource
|
|
1362
|
+
if (!src || typeof src !== 'object' || !src.register || !src.schema || !src.rowField || !src.columnField || !src.valueField) {
|
|
1363
|
+
return null
|
|
1364
|
+
}
|
|
1365
|
+
const ctx = this.chartTokenCtx()
|
|
1366
|
+
const resolve = (value) => resolveFilterTokens(value && typeof value === 'object' ? value : {}, ctx)
|
|
1367
|
+
const filter = resolve(src.filter)
|
|
1368
|
+
const cellFilter = resolve(src.cellFilter)
|
|
1369
|
+
if (hasUnresolvedTokens(filter) || hasUnresolvedTokens(cellFilter)) {
|
|
1370
|
+
return null
|
|
1371
|
+
}
|
|
1372
|
+
const fallbackFilter = src.fallbackFilter ? resolve(src.fallbackFilter) : null
|
|
1373
|
+
return JSON.stringify({ register: src.register, schema: src.schema, filter, fallbackFilter, cellFilter, limit: src.cellsPath ? 1 : (src.limit || 500) })
|
|
1374
|
+
},
|
|
1375
|
+
|
|
1319
1376
|
/**
|
|
1320
1377
|
* The rows of a `bar-list`: the categories of the first displayed
|
|
1321
1378
|
* series, each with its value's share of `barMax` (or the largest
|
|
@@ -1370,6 +1427,13 @@ export default {
|
|
|
1370
1427
|
cells: columns.map((column, index) => {
|
|
1371
1428
|
const raw = Array.isArray(entry.data) ? entry.data[index] : undefined
|
|
1372
1429
|
const isCurrent = current !== null && current.row === rowIndex && current.column === index
|
|
1430
|
+
const valueLabels = this.cellSource && typeof this.cellSource.valueLabels === 'object' ? this.cellSource.valueLabels : null
|
|
1431
|
+
if (valueLabels && raw !== null && raw !== undefined && typeof valueLabels[String(raw)] === 'string') {
|
|
1432
|
+
const label = valueLabels[String(raw)]
|
|
1433
|
+
const tone = map[String(raw)] || map[label]
|
|
1434
|
+
const level = TONE_LEVELS[tone] ?? 0
|
|
1435
|
+
return { text: this.hostTranslate(label), level: level || 'tone', color: level ? '' : (tone || ''), current: isCurrent }
|
|
1436
|
+
}
|
|
1373
1437
|
if (typeof raw === 'string') {
|
|
1374
1438
|
const tone = map[raw]
|
|
1375
1439
|
const level = TONE_LEVELS[tone] ?? 0
|
|
@@ -1409,7 +1473,8 @@ export default {
|
|
|
1409
1473
|
const series = Array.isArray(this.plottedSeries) ? this.plottedSeries : []
|
|
1410
1474
|
const rowIndex = series.findIndex((entry, i) => entry && (String(entry.key ?? '') === row || String(entry.name ?? '') === row || String(i + 1) === row))
|
|
1411
1475
|
const columns = Array.isArray(this.resolvedCategories) ? this.resolvedCategories.map((c) => String(c)) : []
|
|
1412
|
-
const
|
|
1476
|
+
const declared = Array.isArray(def.columnKeys) ? def.columnKeys : (this.cellData ? this.cellData.columnKeys : [])
|
|
1477
|
+
const keys = declared.map((k) => String(k))
|
|
1413
1478
|
let columnIndex = keys.indexOf(column)
|
|
1414
1479
|
if (columnIndex < 0) {
|
|
1415
1480
|
columnIndex = columns.findIndex((c, i) => c === column || String(i + 1) === column)
|
|
@@ -1586,6 +1651,10 @@ export default {
|
|
|
1586
1651
|
aggregateKey() {
|
|
1587
1652
|
this.fetchAggregateSource()
|
|
1588
1653
|
},
|
|
1654
|
+
|
|
1655
|
+
cellSourceKey() {
|
|
1656
|
+
this.fetchCells()
|
|
1657
|
+
},
|
|
1589
1658
|
},
|
|
1590
1659
|
|
|
1591
1660
|
created() {
|
|
@@ -1597,6 +1666,7 @@ export default {
|
|
|
1597
1666
|
this.fetchGroupBy()
|
|
1598
1667
|
this.fetchTimeBucket()
|
|
1599
1668
|
this.fetchAggregateSource()
|
|
1669
|
+
this.fetchCells()
|
|
1600
1670
|
// Subscribe to the widget Refresh bus (B3 event-bus opt-in mode)
|
|
1601
1671
|
// FIRST, before the ResizeObserver early-return — environments
|
|
1602
1672
|
// without ResizeObserver (jsdom) must still get the subscription.
|
|
@@ -1753,6 +1823,7 @@ export default {
|
|
|
1753
1823
|
this.fetchGroupBy(),
|
|
1754
1824
|
this.fetchTimeBucket(),
|
|
1755
1825
|
this.fetchAggregateSource(),
|
|
1826
|
+
this.fetchCells(),
|
|
1756
1827
|
])
|
|
1757
1828
|
},
|
|
1758
1829
|
|
|
@@ -1973,6 +2044,39 @@ export default {
|
|
|
1973
2044
|
}
|
|
1974
2045
|
},
|
|
1975
2046
|
|
|
2047
|
+
/**
|
|
2048
|
+
* Read the `cellSource` records and lay them out as the matrix: one
|
|
2049
|
+
* record per cell, or with `cellsPath` the cells inside one record. A
|
|
2050
|
+
* failed read leaves the matrix empty rather than showing stale
|
|
2051
|
+
* cells; an answer to an older request is dropped.
|
|
2052
|
+
*
|
|
2053
|
+
* @return {Promise<void>}
|
|
2054
|
+
* @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
|
|
2055
|
+
* @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-one-record
|
|
2056
|
+
*/
|
|
2057
|
+
async fetchCells() {
|
|
2058
|
+
const key = this.cellSourceKey
|
|
2059
|
+
if (key === null) {
|
|
2060
|
+
this.cellData = null
|
|
2061
|
+
return
|
|
2062
|
+
}
|
|
2063
|
+
const { register, schema, filter, fallbackFilter, cellFilter, limit } = JSON.parse(key)
|
|
2064
|
+
this._cellRequest = key
|
|
2065
|
+
let records = await fetchReferenceObjects({ register, schema, filter, limit }).catch(() => [])
|
|
2066
|
+
if (this.cellSource.cellsPath && records.length === 0 && fallbackFilter) {
|
|
2067
|
+
records = await fetchReferenceObjects({ register, schema, filter: fallbackFilter, limit }).catch(() => [])
|
|
2068
|
+
}
|
|
2069
|
+
if (this._cellRequest !== key) {
|
|
2070
|
+
return
|
|
2071
|
+
}
|
|
2072
|
+
if (this.cellSource.cellsPath) {
|
|
2073
|
+
const { cells, config } = cellsFromRecord(records[0] || null, this.cellSource, cellFilter)
|
|
2074
|
+
this.cellData = pivotCells(cells, config)
|
|
2075
|
+
return
|
|
2076
|
+
}
|
|
2077
|
+
this.cellData = pivotCells(records, this.cellSource)
|
|
2078
|
+
},
|
|
2079
|
+
|
|
1976
2080
|
/**
|
|
1977
2081
|
* Resolve the OBJECT-form `dataSource.aggregate` (Wave 3, #91) into
|
|
1978
2082
|
* chart data: a categorical group-by over the schema's objects with
|