@conduction/nextcloud-vue 2.83.0 → 2.85.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/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +131 -3
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +54 -18
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +232 -4
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +95 -51
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnBodySections/CnBodySections.vue.js +1 -1
- package/dist/esm/components/CnBodySections/CnBodySections.vue2.js +22 -1
- package/dist/esm/components/CnBodySections/CnBodySections.vue2.js.map +1 -1
- package/dist/esm/components/CnBodySections/CnBodySections.vue3.js.map +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +47 -4
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue.js +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +239 -3
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +5 -5
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +50 -0
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -12
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue.js +1 -1
- package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js +1 -1
- package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +226 -8
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +3 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +18 -5
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +38 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +45 -5
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue.js +1 -1
- package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js +1 -1
- package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +548 -77
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +191 -82
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js +11 -2
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js +29 -6
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +126 -2
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +24 -2
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +106 -3
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js +67 -5
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +181 -124
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue.js +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js +135 -2
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js +95 -43
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +5 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue.js +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +72 -5
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js +33 -8
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +135 -11
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -2
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue.js +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +17 -2
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +39 -6
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +140 -7
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +37 -9
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +6 -5
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
- package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue.js +1 -1
- package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js +16 -0
- package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js.map +1 -1
- package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js.map +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +2 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js +53 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js +3 -2
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +135 -0
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +19 -0
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +37 -19
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
- package/dist/esm/composables/useListView.js +21 -0
- package/dist/esm/composables/useListView.js.map +1 -1
- package/dist/esm/dialogs/CnTransitionInputDialog.vue.js +1 -1
- package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js +68 -6
- package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js.map +1 -1
- package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js +133 -105
- package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +38 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +78 -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 +1030 -533
- package/dist/esm/store/useObjectStore.js +16 -2
- package/dist/esm/store/useObjectStore.js.map +1 -1
- package/dist/esm/utils/boardColumns.js +8 -1
- package/dist/esm/utils/boardColumns.js.map +1 -1
- package/dist/esm/utils/boardReferenceColumns.js +278 -0
- package/dist/esm/utils/boardReferenceColumns.js.map +1 -0
- package/dist/esm/utils/buildManifest.js +41 -4
- package/dist/esm/utils/buildManifest.js.map +1 -1
- package/dist/esm/utils/detailWidgetVisibility.js +149 -0
- package/dist/esm/utils/detailWidgetVisibility.js.map +1 -0
- package/dist/esm/utils/formatMetric.js +39 -3
- package/dist/esm/utils/formatMetric.js.map +1 -1
- package/dist/esm/utils/gridStack.js +40 -1
- package/dist/esm/utils/gridStack.js.map +1 -1
- package/dist/esm/utils/humaniseKey.js +41 -0
- package/dist/esm/utils/humaniseKey.js.map +1 -0
- package/dist/esm/utils/notificationRuleLabel.js +6 -23
- package/dist/esm/utils/notificationRuleLabel.js.map +1 -1
- package/dist/esm/utils/resolveManifestTokens.js +1 -0
- package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +9 -0
- package/dist/esm/utils/sentinelTokens.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +8 -2
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +17159 -13422
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1030 -533
- package/l10n/en.json +38 -1
- package/l10n/nl.json +78 -1
- package/package.json +1 -1
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +160 -8
- package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +1 -1
- package/src/components/CnBoardView/CnBoardView.vue +262 -6
- package/src/components/CnBodySections/CnBodySections.vue +22 -1
- package/src/components/CnCountdownWidget/CnCountdownWidget.vue +47 -4
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +244 -8
- package/src/components/CnDashboardPage/CnDashboardPage.vue +62 -2
- package/src/components/CnDeltaWidget/CnDeltaWidget.vue +1 -1
- package/src/components/CnDetailPage/CnDetailPage.md +3 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +226 -8
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +3 -1
- package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -5
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +63 -1
- package/src/components/CnGaugeWidget/CnGaugeWidget.vue +1 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +586 -25
- package/src/components/CnIndexPage/useSelfFetchList.js +10 -1
- package/src/components/CnInteractionFormWidget/CnInteractionFormWidget.vue +29 -6
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +154 -5
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +106 -3
- package/src/components/CnRegisterMapping/CnRegisterMapping.md +5 -0
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +231 -96
- package/src/components/CnReportsPage/CnReportsPage.vue +179 -1
- package/src/components/CnSettingsPage/CnSettingsPage.vue +5 -1
- package/src/components/CnStagesWidget/CnStagesWidget.vue +103 -6
- package/src/components/CnStatWidget/CnStatWidget.vue +137 -12
- package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +34 -3
- package/src/components/CnTabsWidget/CnTabsWidget.vue +39 -6
- package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +140 -7
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.md +2 -1
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +42 -13
- package/src/components/CnWalkthrough/CnWalkthrough.vue +16 -0
- package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +2 -1
- package/src/components/CnWidgetCardGrid/CnWidgetCardGrid.vue +55 -2
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +135 -0
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +10 -0
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +44 -1
- package/src/composables/useListView.js +21 -0
- package/src/css/board.css +65 -4
- package/src/css/dialog.css +4 -2
- package/src/css/form-field.css +14 -0
- package/src/css/form-widget.css +11 -0
- package/src/css/index-page.css +49 -0
- package/src/css/kpi-card.css +13 -0
- package/src/css/look-board-reports.css +58 -0
- package/src/css/look-board.css +108 -7
- package/src/dialogs/CnTransitionInputDialog.vue +87 -7
- package/src/index.js +2 -0
- package/src/schemas/app-manifest-v2.schema.json +137 -6
- package/src/store/useObjectStore.js +16 -2
- package/src/utils/boardColumns.js +8 -1
- package/src/utils/boardReferenceColumns.js +274 -0
- package/src/utils/buildManifest.js +40 -3
- package/src/utils/detailWidgetVisibility.js +145 -0
- package/src/utils/formatMetric.js +38 -2
- package/src/utils/gridStack.js +39 -0
- package/src/utils/humaniseKey.js +38 -0
- package/src/utils/notificationRuleLabel.js +5 -23
- package/src/utils/resolveManifestTokens.js +1 -0
- package/src/utils/sentinelTokens.js +9 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/widgetDispatch.js +8 -2
|
@@ -11,16 +11,21 @@ import __sfc_main$1 from '../CnCellRenderer/CnGroupNameCell.vue.js';
|
|
|
11
11
|
import __sfc_main$4 from '../CnFormDialog/CnFormDialog.vue.js';
|
|
12
12
|
import { normalizeLook } from '../../composables/useLook.js';
|
|
13
13
|
import { groupDisplayName, searchNextcloudGroups, loadGroupDisplayName } from '../../utils/groupAutocomplete.js';
|
|
14
|
+
import { humaniseKey } from '../../utils/humaniseKey.js';
|
|
14
15
|
import { PANEL_ACTION_SINK } from '../../utils/panelActions.js';
|
|
15
16
|
import { resolveFilterTokens } from '../../utils/resolveFilterTokens.js';
|
|
16
17
|
import { fieldsFromSchema, formatValue } from '../../utils/schema.js';
|
|
17
18
|
import { schemaRefSlug } from '../../utils/schemaRefSlug.js';
|
|
18
19
|
import { searchNextcloudUsers, resolveNextcloudUser } from '../../utils/userAutocomplete.js';
|
|
20
|
+
import { isLocallyDecidableVisibleWhen, evaluateVisibleWhenLocal } from '../../utils/visibleWhen.js';
|
|
19
21
|
import __sfc_main from '../CnIcon/CnIcon.vue.js';
|
|
20
22
|
import __sfc_main$3 from '../CnObjectMetadataModal/CnObjectMetadataModal.vue.js';
|
|
21
23
|
import __sfc_main$2 from '../CnWidgetWrapper/CnWidgetWrapper.vue.js';
|
|
22
24
|
import { useObjectStore } from '../../store/useObjectStore.js';
|
|
23
25
|
|
|
26
|
+
// Widgets whose value the inline text fallback would corrupt.
|
|
27
|
+
const STRUCTURED_WIDGETS = ['json', 'code', 'file', 'sub-objects', 'child-records'];
|
|
28
|
+
|
|
24
29
|
/**
|
|
25
30
|
* CnObjectDataWidget — Schema-driven editable data grid widget.
|
|
26
31
|
*
|
|
@@ -538,13 +543,18 @@ var script = {
|
|
|
538
543
|
gridRow: (this.resolvedOverrides[field.key] && this.resolvedOverrides[field.key].gridRow) || 1,
|
|
539
544
|
}));
|
|
540
545
|
|
|
546
|
+
// Per-field condition: `overrides[key].visibleWhen` shows a field only
|
|
547
|
+
// for the objects it belongs to, such as a person's preferred name on
|
|
548
|
+
// a client that can also be an organisation.
|
|
549
|
+
const shown = withSpans.filter((field) => this.isVisibleByCondition(field));
|
|
550
|
+
|
|
541
551
|
if (!this.hideEmpty) {
|
|
542
|
-
return
|
|
552
|
+
return shown
|
|
543
553
|
}
|
|
544
554
|
|
|
545
555
|
// Keep a field the user is currently editing or has pending changes for,
|
|
546
556
|
// otherwise it would vanish mid-edit the moment its value is cleared.
|
|
547
|
-
return
|
|
557
|
+
return shown.filter((field) => field.key === this.editingField
|
|
548
558
|
|| field.key in this.dirtyFields
|
|
549
559
|
|| !this.isEmptyValue((this.objectData || {})[field.key]))
|
|
550
560
|
},
|
|
@@ -956,6 +966,59 @@ var script = {
|
|
|
956
966
|
return (raw && typeof raw === 'object') ? Object.entries(raw) : []
|
|
957
967
|
},
|
|
958
968
|
|
|
969
|
+
/**
|
|
970
|
+
* Whether a value is a plain object (not an array, not null).
|
|
971
|
+
*
|
|
972
|
+
* @param {unknown} v The value.
|
|
973
|
+
* @return {boolean} True for a plain object.
|
|
974
|
+
*/
|
|
975
|
+
isPlainObject(v) {
|
|
976
|
+
return v !== null && typeof v === 'object' && !Array.isArray(v)
|
|
977
|
+
},
|
|
978
|
+
|
|
979
|
+
/**
|
|
980
|
+
* Label for a key inside an object value: the sub-schema's `title`
|
|
981
|
+
* (translated) when the schema describes it, else the key, made
|
|
982
|
+
* readable when it is identifier-shaped (`shortDescription` → "Short
|
|
983
|
+
* description"; `nl` stays `nl`).
|
|
984
|
+
*
|
|
985
|
+
* @param {object} field Resolved field definition.
|
|
986
|
+
* @param {string[]} path Keys from the field's value down to this entry.
|
|
987
|
+
* @return {string} The label.
|
|
988
|
+
* @spec openspec/changes/data-widget-nested-objects/specs/data-widget-nested-objects/spec.md#requirement-a-nested-object-reads-as-a-list-per-key
|
|
989
|
+
*/
|
|
990
|
+
nestedLabel(field, path) {
|
|
991
|
+
let prop = ((this.schema && this.schema.properties) || {})[field.key];
|
|
992
|
+
for (const key of path) {
|
|
993
|
+
if (!this.isPlainObject(prop)) {
|
|
994
|
+
prop = null;
|
|
995
|
+
break
|
|
996
|
+
}
|
|
997
|
+
prop = (prop.properties && prop.properties[key])
|
|
998
|
+
|| (this.isPlainObject(prop.additionalProperties) ? prop.additionalProperties : null);
|
|
999
|
+
}
|
|
1000
|
+
if (prop && typeof prop.title === 'string' && prop.title) {
|
|
1001
|
+
return this.cnTranslate(prop.title)
|
|
1002
|
+
}
|
|
1003
|
+
const key = String(path[path.length - 1]);
|
|
1004
|
+
return /[A-Z_-]/.test(key) ? humaniseKey(key) : key
|
|
1005
|
+
},
|
|
1006
|
+
|
|
1007
|
+
/**
|
|
1008
|
+
* Stringify a value inside a definition list: a list of scalars reads
|
|
1009
|
+
* as a comma-separated line, anything else as `stringifyCell`.
|
|
1010
|
+
*
|
|
1011
|
+
* @param {unknown} v The value.
|
|
1012
|
+
* @return {string} The display string.
|
|
1013
|
+
* @spec openspec/changes/data-widget-nested-objects/specs/data-widget-nested-objects/spec.md#requirement-a-nested-object-reads-as-a-list-per-key
|
|
1014
|
+
*/
|
|
1015
|
+
stringifyNested(v) {
|
|
1016
|
+
if (Array.isArray(v) && v.length && v.every((item) => item === null || typeof item !== 'object')) {
|
|
1017
|
+
return v.map((item) => this.stringifyCell(item)).join(', ')
|
|
1018
|
+
}
|
|
1019
|
+
return this.stringifyCell(v)
|
|
1020
|
+
},
|
|
1021
|
+
|
|
959
1022
|
/**
|
|
960
1023
|
* Stringify a scalar cell value; a nested object/array collapses to
|
|
961
1024
|
* compact JSON (never "[object Object]").
|
|
@@ -1283,15 +1346,53 @@ var script = {
|
|
|
1283
1346
|
}));
|
|
1284
1347
|
},
|
|
1285
1348
|
|
|
1349
|
+
/**
|
|
1350
|
+
* Whether a field's value cannot be edited inline: a structured widget
|
|
1351
|
+
* (json, code, file, sub-objects, child-records), or a plain-object /
|
|
1352
|
+
* list-of-objects value that is not a relation. Scalar widgets without
|
|
1353
|
+
* a dedicated editor (duration, language, …) keep the text fallback.
|
|
1354
|
+
*
|
|
1355
|
+
* @param {object} field Resolved field definition.
|
|
1356
|
+
* @return {boolean} True when only the form dialog can edit it.
|
|
1357
|
+
* @spec openspec/changes/data-widget-nested-objects/specs/data-widget-nested-objects/spec.md#requirement-a-structured-value-is-never-edited-inline
|
|
1358
|
+
*/
|
|
1359
|
+
hasNoInlineEditor(field) {
|
|
1360
|
+
if (STRUCTURED_WIDGETS.includes(field.widget)) {
|
|
1361
|
+
return true
|
|
1362
|
+
}
|
|
1363
|
+
const prop = ((this.schema && this.schema.properties) || {})[field.key];
|
|
1364
|
+
if (this.isRelationField(prop)) {
|
|
1365
|
+
return false
|
|
1366
|
+
}
|
|
1367
|
+
// A list of objects by schema, also while empty (it resolves to `tags`).
|
|
1368
|
+
if (prop && prop.type === 'array' && prop.items && prop.items.type === 'object') {
|
|
1369
|
+
return true
|
|
1370
|
+
}
|
|
1371
|
+
// Classify the raw value itself: fieldValueKind reports a formatter
|
|
1372
|
+
// field as 'scalar' whatever it holds.
|
|
1373
|
+
const raw = this.rawOf(field);
|
|
1374
|
+
if (Array.isArray(raw)) {
|
|
1375
|
+
return raw.some((v) => this.isPlainObject(v))
|
|
1376
|
+
}
|
|
1377
|
+
return this.isPlainObject(raw)
|
|
1378
|
+
},
|
|
1379
|
+
|
|
1286
1380
|
/**
|
|
1287
1381
|
* Check if a field is editable.
|
|
1288
1382
|
*
|
|
1289
1383
|
* @param {object} field - Resolved field definition from resolvedFields
|
|
1384
|
+
* @spec openspec/changes/data-widget-nested-objects/specs/data-widget-nested-objects/spec.md#requirement-a-structured-value-is-never-edited-inline
|
|
1290
1385
|
*/
|
|
1291
1386
|
isEditable(field) {
|
|
1292
1387
|
if (!this.editable) {
|
|
1293
1388
|
return false
|
|
1294
1389
|
}
|
|
1390
|
+
// No inline editor exists for structured values: the text fallback
|
|
1391
|
+
// would commit "[object Object]". Those edit through the form dialog,
|
|
1392
|
+
// unless the consumer supplies its own `field-<key>` editor slot.
|
|
1393
|
+
if (!this.$slots['field-' + field.key] && this.hasNoInlineEditor(field)) {
|
|
1394
|
+
return false
|
|
1395
|
+
}
|
|
1295
1396
|
// Per-field override takes priority
|
|
1296
1397
|
const override = this.resolvedOverrides[field.key];
|
|
1297
1398
|
if (override && typeof override.editable === 'boolean') {
|
|
@@ -1308,6 +1409,29 @@ var script = {
|
|
|
1308
1409
|
return !field.readOnly
|
|
1309
1410
|
},
|
|
1310
1411
|
|
|
1412
|
+
/**
|
|
1413
|
+
* Evaluate a field's `visibleWhen` override against the object.
|
|
1414
|
+
*
|
|
1415
|
+
* The rule is the shared visibility predicate in its LOCAL mode
|
|
1416
|
+
* (`{ field, op, value }`, `all` / `any`, `appInstalled`), evaluated by
|
|
1417
|
+
* `evaluateVisibleWhenLocal` against the object with its unsaved
|
|
1418
|
+
* changes, so a field appears or goes the moment the field it depends
|
|
1419
|
+
* on changes. A rule that needs a request (`endpoint`, `source`) cannot
|
|
1420
|
+
* be decided here and is ignored: the field shows, as it did before
|
|
1421
|
+
* the rule existed.
|
|
1422
|
+
*
|
|
1423
|
+
* @param {object} field - Resolved field definition.
|
|
1424
|
+
* @return {boolean} True when the field is shown.
|
|
1425
|
+
*/
|
|
1426
|
+
isVisibleByCondition(field) {
|
|
1427
|
+
const override = this.resolvedOverrides[field.key];
|
|
1428
|
+
const rule = override ? override.visibleWhen : undefined;
|
|
1429
|
+
if (rule === undefined || rule === null || !isLocallyDecidableVisibleWhen(rule)) {
|
|
1430
|
+
return true
|
|
1431
|
+
}
|
|
1432
|
+
return evaluateVisibleWhenLocal(rule, { ...(this.objectData || {}), ...this.dirtyFields })
|
|
1433
|
+
},
|
|
1434
|
+
|
|
1311
1435
|
/**
|
|
1312
1436
|
* Evaluate a field's conditional read-only rule against the object data.
|
|
1313
1437
|
*
|