@conduction/nextcloud-vue 2.97.0 → 2.98.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.
Files changed (107) hide show
  1. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +17 -0
  2. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  4. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  5. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +106 -2
  6. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  7. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  8. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +9 -0
  9. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js.map +1 -0
  10. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js +964 -0
  11. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -0
  12. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js +282 -0
  13. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -0
  14. package/dist/esm/components/CnChecklistRunWidget/index.js +28 -0
  15. package/dist/esm/components/CnChecklistRunWidget/index.js.map +1 -0
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  17. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +1 -0
  18. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  20. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +26 -8
  21. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  22. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  23. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +188 -5
  24. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  25. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  26. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
  27. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +3 -3
  28. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  29. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  30. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +1 -1
  31. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +27 -0
  32. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -1
  33. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +16 -2
  34. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -1
  35. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +43 -3
  36. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  37. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  38. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +9 -0
  39. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js.map +1 -0
  40. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +220 -0
  41. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -0
  42. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +121 -0
  43. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -0
  44. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js +1 -1
  45. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js +83 -9
  46. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js.map +1 -1
  47. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js +80 -11
  48. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js.map +1 -1
  49. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  50. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  51. package/dist/esm/composables/indexSources.js +238 -2
  52. package/dist/esm/composables/indexSources.js.map +1 -1
  53. package/dist/esm/composables/useOrganisationStore.js +115 -0
  54. package/dist/esm/composables/useOrganisationStore.js.map +1 -0
  55. package/dist/esm/index.js +2 -0
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/l10n/en.json.js +15 -1
  58. package/dist/esm/l10n/en.json.js.map +1 -1
  59. package/dist/esm/l10n/nl.json.js +30 -1
  60. package/dist/esm/l10n/nl.json.js.map +1 -1
  61. package/dist/esm/library-style.js +1 -1
  62. package/dist/esm/nextcloud-vue.css +424 -206
  63. package/dist/esm/utils/builtInFormatters.js +34 -1
  64. package/dist/esm/utils/builtInFormatters.js.map +1 -1
  65. package/dist/esm/utils/libraryWidgetKeys.js +1 -0
  66. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  67. package/dist/esm/utils/matrixCells.js +158 -0
  68. package/dist/esm/utils/matrixCells.js.map +1 -0
  69. package/dist/esm/utils/nextcloudDirectory.js +121 -0
  70. package/dist/esm/utils/nextcloudDirectory.js.map +1 -0
  71. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  72. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  73. package/dist/nextcloud-vue.cjs.js +12538 -9716
  74. package/dist/nextcloud-vue.cjs.js.map +2 -2
  75. package/dist/nextcloud-vue.css +424 -206
  76. package/l10n/en.json +15 -1
  77. package/l10n/nl.json +30 -1
  78. package/package.json +2 -2
  79. package/scripts/merge-l10n.js +196 -0
  80. package/src/components/CnAppRoot/CnAppRoot.md +1 -0
  81. package/src/components/CnAppRoot/CnAppRoot.vue +17 -0
  82. package/src/components/CnChartWidget/CnChartWidget.md +2 -1
  83. package/src/components/CnChartWidget/CnChartWidget.vue +106 -2
  84. package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +1269 -0
  85. package/src/components/CnChecklistRunWidget/index.js +27 -0
  86. package/src/components/CnDashboardPage/CnDashboardPage.vue +1 -0
  87. package/src/components/CnDataTable/CnDataTable.vue +26 -8
  88. package/src/components/CnDetailPage/CnDetailPage.md +48 -0
  89. package/src/components/CnDetailPage/CnDetailPage.vue +188 -5
  90. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +3 -3
  91. package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +38 -2
  92. package/src/components/CnIndexPage/CnIndexPage.md +28 -0
  93. package/src/components/CnIndexPage/CnIndexPage.vue +43 -3
  94. package/src/components/CnOrderedListField/CnOrderedListField.vue +386 -0
  95. package/src/components/CnOrderedListField/index.js +7 -0
  96. package/src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue +139 -10
  97. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  98. package/src/components/index.js +2 -0
  99. package/src/composables/indexSources.js +237 -1
  100. package/src/composables/useOrganisationStore.js +111 -0
  101. package/src/index.js +2 -0
  102. package/src/schemas/app-manifest-v2.schema.json +33 -3
  103. package/src/utils/builtInFormatters.js +33 -0
  104. package/src/utils/libraryWidgetKeys.js +1 -0
  105. package/src/utils/matrixCells.js +154 -0
  106. package/src/utils/nextcloudDirectory.js +117 -0
  107. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -13,6 +13,7 @@ import { joinTemplateParts, fillTemplate } from '../../utils/fillTemplate.js';
13
13
  import { lensUnavailableText, readLensReports } from '../../utils/lensAvailability.js';
14
14
  import { resolveHref, openRowTarget, followLinkClick } from '../../utils/linkNavigation.js';
15
15
  import { nextSortState } from '../../utils/multiColumnSort.js';
16
+ import { readPath } from '../../utils/readPath.js';
16
17
  import { preventMiddleClickAutoscroll, isRowMiddleClick, isNewTabHandled, markNewTabHandled, isNewTabClick } from '../../utils/rowAuxClick.js';
17
18
  import { DEFAULT_ROW_INDICATOR_CAP, resolveRowIndicators } from '../../utils/rowIndicators.js';
18
19
  import { columnsFromSchema } from '../../utils/schema.js';
@@ -1441,8 +1442,11 @@ var script = {
1441
1442
  if (v === undefined) {
1442
1443
  return this.aggregateLoading ? '…' : '—'
1443
1444
  }
1445
+ if (v === null && !(typeof col.aggregate.zeroLabel === 'string' && col.aggregate.zeroLabel !== '')) {
1446
+ return '—'
1447
+ }
1444
1448
  const zeroLabel = col.aggregate.zeroLabel;
1445
- if ((v === 0 || v === '0') && typeof zeroLabel === 'string' && zeroLabel !== '') {
1449
+ if ((v === 0 || v === '0' || v === null) && typeof zeroLabel === 'string' && zeroLabel !== '') {
1446
1450
  return typeof this.cnTranslate === 'function' ? this.cnTranslate(zeroLabel) : zeroLabel
1447
1451
  }
1448
1452
  return v
@@ -1472,17 +1476,21 @@ var script = {
1472
1476
  },
1473
1477
 
1474
1478
  /**
1475
- * For every column that declares `aggregate` (currently `op: "count"`),
1476
- * issue one `_limit=0` count request per visible row against the related
1477
- * OpenRegister collection and cache the totals in `aggregateValues`.
1479
+ * For every column that declares `aggregate`, issue one request per
1480
+ * visible row against the related OpenRegister collection and cache the
1481
+ * answer in `aggregateValues`: `op: "count"` asks `_limit=0` for the
1482
+ * total, `op: "max"` asks for the one object with the highest `field`
1483
+ * (`_limit=1`, sorted descending) and keeps that value, null when there
1484
+ * is none (shown as `zeroLabel`, else a dash).
1478
1485
  * Batched with `Promise.all`; a per-request failure degrades that one
1479
1486
  * cell to `'—'` (logged), never the page. A monotonic request id
1480
1487
  * discards a stale batch when `rows` / columns change mid-flight.
1481
1488
  *
1482
1489
  * @return {Promise<void>}
1490
+ * @spec openspec/changes/masked-formatter-max-aggregate/specs/index-page/spec.md#requirement-a-column-aggregate-can-take-the-highest-value
1483
1491
  */
1484
1492
  async loadAggregates() {
1485
- const aggCols = this.effectiveColumns.filter((c) => c && c.aggregate && c.aggregate.op === 'count');
1493
+ const aggCols = this.effectiveColumns.filter((c) => c && c.aggregate && (c.aggregate.op === 'count' || (c.aggregate.op === 'max' && c.aggregate.field)));
1486
1494
  if (aggCols.length === 0) {
1487
1495
  if (Object.keys(this.aggregateValues).length > 0) {
1488
1496
  this.aggregateValues = {};
@@ -1503,11 +1511,21 @@ var script = {
1503
1511
  continue
1504
1512
  }
1505
1513
  const where = this.resolveAggregateWhere(agg.where, row);
1506
- jobs.push(axios__default.get(generateUrl(`/apps/openregister/api/objects/${agg.register}/${agg.schema}`), {
1507
- params: { ...where, _limit: 0 },
1508
- })
1514
+ // `max`: the highest `field` among the related objects, as the
1515
+ // first of them sorted on it descending ("Laatste contact").
1516
+ const isMax = agg.op === 'max';
1517
+ const params = isMax
1518
+ ? { ...where, _limit: 1, [`_order[${agg.field}]`]: 'desc' }
1519
+ : { ...where, _limit: 0 };
1520
+ jobs.push(axios__default.get(generateUrl(`/apps/openregister/api/objects/${agg.register}/${agg.schema}`), { params })
1509
1521
  .then((res) => {
1510
1522
  const d = res && res.data;
1523
+ if (isMax) {
1524
+ const first = d && Array.isArray(d.results) ? d.results[0] : undefined;
1525
+ const top = first === undefined ? undefined : readPath(first, agg.field);
1526
+ next[rowKey][col.key] = top === undefined || top === '' ? null : top;
1527
+ return
1528
+ }
1511
1529
  next[rowKey][col.key] = (d && (d.total ?? (Array.isArray(d.results) ? d.results.length : undefined))) ?? 0;
1512
1530
  })
1513
1531
  .catch((e) => {