@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
|
@@ -1,32 +1,48 @@
|
|
|
1
|
-
import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createTextVNode, toDisplayString, createCommentVNode, renderSlot, createElementBlock, Fragment, renderList, createElementVNode,
|
|
1
|
+
import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createTextVNode, toDisplayString, createCommentVNode, renderSlot, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, withDirectives, createVNode, Transition, vShow } from 'vue';
|
|
2
2
|
|
|
3
3
|
const _hoisted_1 = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "cn-register-mapping"
|
|
6
6
|
};
|
|
7
|
-
const _hoisted_2 = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const _hoisted_2 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "cn-register-mapping__group-heading"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_3 = ["aria-expanded", "aria-controls", "onClick"];
|
|
12
|
+
const _hoisted_4 = {
|
|
13
|
+
class: "cn-register-mapping__group-chevron",
|
|
14
|
+
"aria-hidden": "true"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_5 = { class: "cn-register-mapping__group-header" };
|
|
17
|
+
const _hoisted_6 = { class: "cn-register-mapping__group-title" };
|
|
18
|
+
const _hoisted_7 = {
|
|
19
|
+
class: "cn-register-mapping__group-status",
|
|
20
|
+
"data-testid": "cn-register-mapping-group-count"
|
|
21
|
+
};
|
|
22
|
+
const _hoisted_8 = { class: "cn-register-mapping__group-header" };
|
|
23
|
+
const _hoisted_9 = { class: "cn-register-mapping__group-title" };
|
|
24
|
+
const _hoisted_10 = { class: "cn-register-mapping__group-status" };
|
|
25
|
+
const _hoisted_11 = ["id"];
|
|
26
|
+
const _hoisted_12 = {
|
|
11
27
|
key: 0,
|
|
12
28
|
class: "cn-register-mapping__group-description"
|
|
13
29
|
};
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const _hoisted_8 = {
|
|
30
|
+
const _hoisted_13 = { class: "cn-register-mapping__register-select" };
|
|
31
|
+
const _hoisted_14 = {
|
|
17
32
|
key: 1,
|
|
18
33
|
class: "cn-register-mapping__type-list"
|
|
19
34
|
};
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
35
|
+
const _hoisted_15 = { class: "cn-register-mapping__type-list-header" };
|
|
36
|
+
const _hoisted_16 = ["onClick"];
|
|
37
|
+
const _hoisted_17 = { class: "cn-register-mapping__type-name" };
|
|
38
|
+
const _hoisted_18 = { class: "cn-register-mapping__type-schema" };
|
|
39
|
+
const _hoisted_19 = { class: "cn-register-mapping__type-status" };
|
|
40
|
+
const _hoisted_20 = { class: "cn-register-mapping__type-chevron" };
|
|
41
|
+
const _hoisted_21 = {
|
|
26
42
|
key: 0,
|
|
27
43
|
class: "cn-register-mapping__type-detail"
|
|
28
44
|
};
|
|
29
|
-
const
|
|
45
|
+
const _hoisted_22 = {
|
|
30
46
|
key: 0,
|
|
31
47
|
class: "cn-register-mapping__type-description"
|
|
32
48
|
};
|
|
@@ -36,9 +52,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
36
52
|
const _component_ContentSave = resolveComponent("ContentSave");
|
|
37
53
|
const _component_NcButton = resolveComponent("NcButton");
|
|
38
54
|
const _component_Refresh = resolveComponent("Refresh");
|
|
39
|
-
const _component_NcSelect = resolveComponent("NcSelect");
|
|
40
55
|
const _component_ChevronUp = resolveComponent("ChevronUp");
|
|
41
56
|
const _component_ChevronDown = resolveComponent("ChevronDown");
|
|
57
|
+
const _component_NcSelect = resolveComponent("NcSelect");
|
|
42
58
|
const _component_NcNoteCard = resolveComponent("NcNoteCard");
|
|
43
59
|
const _component_CnSettingsSection = resolveComponent("CnSettingsSection");
|
|
44
60
|
|
|
@@ -47,7 +63,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
47
63
|
description: $props.description,
|
|
48
64
|
docUrl: $props.docUrl,
|
|
49
65
|
loading: $data.registersLoading,
|
|
50
|
-
loadingMessage:
|
|
66
|
+
loadingMessage: $options.t('nextcloud-vue', 'Loading registers…'),
|
|
51
67
|
error: !!$data.registersError,
|
|
52
68
|
errorMessage: $data.registersError || '',
|
|
53
69
|
onRetry: $options.loadRegisters
|
|
@@ -72,7 +88,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
72
88
|
}))
|
|
73
89
|
]),
|
|
74
90
|
default: withCtx(() => [
|
|
75
|
-
createTextVNode(" " + toDisplayString($props.saving ? 'Saving
|
|
91
|
+
createTextVNode(" " + toDisplayString($props.saving ? $options.t('nextcloud-vue', 'Saving…') : $props.saveButtonText), 1 /* TEXT */)
|
|
76
92
|
]),
|
|
77
93
|
_: 1 /* STABLE */
|
|
78
94
|
}, 8 /* PROPS */, ["disabled", "onClick"]))
|
|
@@ -96,7 +112,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
96
112
|
}))
|
|
97
113
|
]),
|
|
98
114
|
default: withCtx(() => [
|
|
99
|
-
createTextVNode(" " + toDisplayString($props.reimporting ? 'Importing
|
|
115
|
+
createTextVNode(" " + toDisplayString($props.reimporting ? $options.t('nextcloud-vue', 'Importing…') : $props.reimportButtonText), 1 /* TEXT */)
|
|
100
116
|
]),
|
|
101
117
|
_: 1 /* STABLE */
|
|
102
118
|
}, 8 /* PROPS */, ["disabled"]))
|
|
@@ -109,118 +125,159 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
109
125
|
(openBlock(true), createElementBlock(Fragment, null, renderList($props.groups, (group, groupIdx) => {
|
|
110
126
|
return (openBlock(), createElementBlock("div", {
|
|
111
127
|
key: groupIdx,
|
|
112
|
-
class: "cn-register-mapping__group"
|
|
128
|
+
class: normalizeClass(["cn-register-mapping__group", { 'cn-register-mapping__group--collapsed': !$options.isGroupOpen(groupIdx) }]),
|
|
129
|
+
"data-testid": "cn-register-mapping-group"
|
|
113
130
|
}, [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
createElementVNode("span")
|
|
147
|
-
], -1 /* CACHED */)),
|
|
148
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(group.types, (type) => {
|
|
149
|
-
return (openBlock(), createElementBlock(Fragment, {
|
|
150
|
-
key: type.slug + '-row'
|
|
151
|
-
}, [
|
|
152
|
-
createElementVNode("div", {
|
|
153
|
-
class: normalizeClass(["cn-register-mapping__type-row", { 'cn-register-mapping__type-row--expanded': $options.isExpanded(groupIdx, type.slug) }]),
|
|
154
|
-
onClick: $event => ($options.toggleExpand(groupIdx, type.slug))
|
|
155
|
-
}, [
|
|
156
|
-
createElementVNode("span", _hoisted_10, toDisplayString(type.label), 1 /* TEXT */),
|
|
157
|
-
createElementVNode("span", _hoisted_11, toDisplayString($options.schemaLabel(groupIdx, type) || $props.labels.notConfigured), 1 /* TEXT */),
|
|
158
|
-
createElementVNode("span", _hoisted_12, [
|
|
159
|
-
createElementVNode("span", {
|
|
160
|
-
class: normalizeClass(["cn-register-mapping__status-dot", $options.schemaValue(groupIdx, type)
|
|
161
|
-
? 'cn-register-mapping__status-dot--configured'
|
|
162
|
-
: 'cn-register-mapping__status-dot--unconfigured'])
|
|
163
|
-
}, null, 2 /* CLASS */)
|
|
164
|
-
]),
|
|
165
|
-
createElementVNode("span", _hoisted_13, [
|
|
166
|
-
($options.isExpanded(groupIdx, type.slug))
|
|
167
|
-
? (openBlock(), createBlock(_component_ChevronUp, {
|
|
168
|
-
key: 0,
|
|
169
|
-
size: 20
|
|
170
|
-
}))
|
|
171
|
-
: (openBlock(), createBlock(_component_ChevronDown, {
|
|
172
|
-
key: 1,
|
|
173
|
-
size: 20
|
|
174
|
-
}))
|
|
175
|
-
])
|
|
176
|
-
], 10 /* CLASS, PROPS */, _hoisted_9),
|
|
177
|
-
createVNode(Transition, { name: "slide" }, {
|
|
178
|
-
default: withCtx(() => [
|
|
179
|
-
($options.isExpanded(groupIdx, type.slug))
|
|
180
|
-
? (openBlock(), createElementBlock("div", _hoisted_14, [
|
|
181
|
-
(type.description)
|
|
182
|
-
? (openBlock(), createElementBlock("p", _hoisted_15, toDisplayString(type.description), 1 /* TEXT */))
|
|
183
|
-
: createCommentVNode("v-if", true),
|
|
184
|
-
createVNode(_component_NcSelect, {
|
|
185
|
-
modelValue: $options.selectedSchema(groupIdx, type),
|
|
186
|
-
options: $options.schemaSelectOptions(groupIdx),
|
|
187
|
-
placeholder: $props.labels.selectSchema,
|
|
188
|
-
inputLabel: $props.labels.schema,
|
|
189
|
-
label: "label",
|
|
190
|
-
trackBy: "value",
|
|
191
|
-
"onUpdate:modelValue": $event => ($options.handleSchemaChange(groupIdx, type, $event))
|
|
192
|
-
}, null, 8 /* PROPS */, ["modelValue", "options", "placeholder", "inputLabel", "onUpdate:modelValue"])
|
|
193
|
-
]))
|
|
194
|
-
: createCommentVNode("v-if", true)
|
|
195
|
-
]),
|
|
196
|
-
_: 2 /* DYNAMIC */
|
|
197
|
-
}, 1024 /* DYNAMIC_SLOTS */)
|
|
198
|
-
], 64 /* STABLE_FRAGMENT */))
|
|
199
|
-
}), 128 /* KEYED_FRAGMENT */))
|
|
131
|
+
($options.groupsCollapsible)
|
|
132
|
+
? (openBlock(), createElementBlock("h4", _hoisted_2, [
|
|
133
|
+
createElementVNode("button", {
|
|
134
|
+
type: "button",
|
|
135
|
+
class: "cn-register-mapping__group-toggle",
|
|
136
|
+
"aria-expanded": String($options.isGroupOpen(groupIdx)),
|
|
137
|
+
"aria-controls": $options.groupBodyId(groupIdx),
|
|
138
|
+
"data-testid": "cn-register-mapping-group-toggle",
|
|
139
|
+
onClick: $event => ($options.toggleGroup(groupIdx))
|
|
140
|
+
}, [
|
|
141
|
+
createElementVNode("span", _hoisted_4, [
|
|
142
|
+
($options.isGroupOpen(groupIdx))
|
|
143
|
+
? (openBlock(), createBlock(_component_ChevronUp, {
|
|
144
|
+
key: 0,
|
|
145
|
+
size: 20
|
|
146
|
+
}))
|
|
147
|
+
: (openBlock(), createBlock(_component_ChevronDown, {
|
|
148
|
+
key: 1,
|
|
149
|
+
size: 20
|
|
150
|
+
}))
|
|
151
|
+
]),
|
|
152
|
+
renderSlot(_ctx.$slots, "group-header", {
|
|
153
|
+
group: group,
|
|
154
|
+
configuredCount: $options.configuredCount(groupIdx),
|
|
155
|
+
totalCount: group.types.length
|
|
156
|
+
}, () => [
|
|
157
|
+
createElementVNode("span", _hoisted_5, [
|
|
158
|
+
createElementVNode("span", _hoisted_6, toDisplayString(group.name), 1 /* TEXT */),
|
|
159
|
+
createElementVNode("span", _hoisted_7, toDisplayString($options.configuredCount(groupIdx)) + "/" + toDisplayString(group.types.length) + " " + toDisplayString($props.labels.partiallyConfigured), 1 /* TEXT */)
|
|
160
|
+
])
|
|
161
|
+
])
|
|
162
|
+
], 8 /* PROPS */, _hoisted_3)
|
|
200
163
|
]))
|
|
201
|
-
: (
|
|
164
|
+
: renderSlot(_ctx.$slots, "group-header", {
|
|
165
|
+
group: group,
|
|
166
|
+
configuredCount: $options.configuredCount(groupIdx),
|
|
167
|
+
totalCount: group.types.length
|
|
168
|
+
}, () => [
|
|
169
|
+
createElementVNode("div", _hoisted_8, [
|
|
170
|
+
createElementVNode("h4", _hoisted_9, toDisplayString(group.name), 1 /* TEXT */),
|
|
171
|
+
createElementVNode("span", _hoisted_10, toDisplayString($options.configuredCount(groupIdx)) + "/" + toDisplayString(group.types.length) + " " + toDisplayString($props.labels.partiallyConfigured), 1 /* TEXT */)
|
|
172
|
+
])
|
|
173
|
+
], undefined, 1),
|
|
174
|
+
withDirectives(createElementVNode("div", {
|
|
175
|
+
id: $options.groupBodyId(groupIdx),
|
|
176
|
+
class: "cn-register-mapping__group-body",
|
|
177
|
+
"data-testid": "cn-register-mapping-group-body"
|
|
178
|
+
}, [
|
|
179
|
+
(group.description)
|
|
180
|
+
? (openBlock(), createElementBlock("p", _hoisted_12, toDisplayString(group.description), 1 /* TEXT */))
|
|
181
|
+
: createCommentVNode("v-if", true),
|
|
182
|
+
createElementVNode("div", _hoisted_13, [
|
|
183
|
+
createVNode(_component_NcSelect, {
|
|
184
|
+
modelValue: $options.selectedRegister(groupIdx),
|
|
185
|
+
options: $options.registerSelectOptions,
|
|
186
|
+
placeholder: $props.labels.selectRegister,
|
|
187
|
+
inputLabel: $props.labels.register,
|
|
188
|
+
loading: $data.registersLoading,
|
|
189
|
+
label: "label",
|
|
190
|
+
trackBy: "value",
|
|
191
|
+
"onUpdate:modelValue": $event => ($options.handleRegisterChange(groupIdx, $event))
|
|
192
|
+
}, null, 8 /* PROPS */, ["modelValue", "options", "placeholder", "inputLabel", "loading", "onUpdate:modelValue"])
|
|
193
|
+
]),
|
|
194
|
+
($options.selectedRegister(groupIdx))
|
|
195
|
+
? (openBlock(), createElementBlock("div", _hoisted_14, [
|
|
196
|
+
createElementVNode("div", _hoisted_15, [
|
|
197
|
+
createElementVNode("span", null, toDisplayString($options.t('nextcloud-vue', 'Object type')), 1 /* TEXT */),
|
|
198
|
+
createElementVNode("span", null, toDisplayString($props.labels.schema), 1 /* TEXT */),
|
|
199
|
+
_cache[1] || (_cache[1] = createElementVNode("span", null, null, -1 /* CACHED */)),
|
|
200
|
+
_cache[2] || (_cache[2] = createElementVNode("span", null, null, -1 /* CACHED */))
|
|
201
|
+
]),
|
|
202
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(group.types, (type) => {
|
|
203
|
+
return (openBlock(), createElementBlock(Fragment, {
|
|
204
|
+
key: type.slug + '-row'
|
|
205
|
+
}, [
|
|
206
|
+
createElementVNode("div", {
|
|
207
|
+
class: normalizeClass(["cn-register-mapping__type-row", { 'cn-register-mapping__type-row--expanded': $options.isExpanded(groupIdx, type.slug) }]),
|
|
208
|
+
onClick: $event => ($options.toggleExpand(groupIdx, type.slug))
|
|
209
|
+
}, [
|
|
210
|
+
createElementVNode("span", _hoisted_17, toDisplayString(type.label), 1 /* TEXT */),
|
|
211
|
+
createElementVNode("span", _hoisted_18, toDisplayString($options.schemaLabel(groupIdx, type) || $props.labels.notConfigured), 1 /* TEXT */),
|
|
212
|
+
createElementVNode("span", _hoisted_19, [
|
|
213
|
+
createElementVNode("span", {
|
|
214
|
+
class: normalizeClass(["cn-register-mapping__status-dot", $options.schemaValue(groupIdx, type)
|
|
215
|
+
? 'cn-register-mapping__status-dot--configured'
|
|
216
|
+
: 'cn-register-mapping__status-dot--unconfigured'])
|
|
217
|
+
}, null, 2 /* CLASS */)
|
|
218
|
+
]),
|
|
219
|
+
createElementVNode("span", _hoisted_20, [
|
|
220
|
+
($options.isExpanded(groupIdx, type.slug))
|
|
221
|
+
? (openBlock(), createBlock(_component_ChevronUp, {
|
|
222
|
+
key: 0,
|
|
223
|
+
size: 20
|
|
224
|
+
}))
|
|
225
|
+
: (openBlock(), createBlock(_component_ChevronDown, {
|
|
226
|
+
key: 1,
|
|
227
|
+
size: 20
|
|
228
|
+
}))
|
|
229
|
+
])
|
|
230
|
+
], 10 /* CLASS, PROPS */, _hoisted_16),
|
|
231
|
+
createVNode(Transition, { name: "slide" }, {
|
|
232
|
+
default: withCtx(() => [
|
|
233
|
+
($options.isExpanded(groupIdx, type.slug))
|
|
234
|
+
? (openBlock(), createElementBlock("div", _hoisted_21, [
|
|
235
|
+
(type.description)
|
|
236
|
+
? (openBlock(), createElementBlock("p", _hoisted_22, toDisplayString(type.description), 1 /* TEXT */))
|
|
237
|
+
: createCommentVNode("v-if", true),
|
|
238
|
+
createVNode(_component_NcSelect, {
|
|
239
|
+
modelValue: $options.selectedSchema(groupIdx, type),
|
|
240
|
+
options: $options.schemaSelectOptions(groupIdx),
|
|
241
|
+
placeholder: $props.labels.selectSchema,
|
|
242
|
+
inputLabel: $props.labels.schema,
|
|
243
|
+
label: "label",
|
|
244
|
+
trackBy: "value",
|
|
245
|
+
"onUpdate:modelValue": $event => ($options.handleSchemaChange(groupIdx, type, $event))
|
|
246
|
+
}, null, 8 /* PROPS */, ["modelValue", "options", "placeholder", "inputLabel", "onUpdate:modelValue"])
|
|
247
|
+
]))
|
|
248
|
+
: createCommentVNode("v-if", true)
|
|
249
|
+
]),
|
|
250
|
+
_: 2 /* DYNAMIC */
|
|
251
|
+
}, 1024 /* DYNAMIC_SLOTS */)
|
|
252
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
253
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
254
|
+
]))
|
|
255
|
+
: (!$data.registersLoading)
|
|
256
|
+
? (openBlock(), createBlock(_component_NcNoteCard, {
|
|
257
|
+
key: 2,
|
|
258
|
+
type: "info"
|
|
259
|
+
}, {
|
|
260
|
+
default: withCtx(() => [
|
|
261
|
+
createTextVNode(toDisplayString($props.labels.selectRegister), 1 /* TEXT */)
|
|
262
|
+
]),
|
|
263
|
+
_: 1 /* STABLE */
|
|
264
|
+
}))
|
|
265
|
+
: createCommentVNode("v-if", true),
|
|
266
|
+
($options.selectedRegister(groupIdx) && $options.schemaSelectOptions(groupIdx).length === 0 && !$data.registersLoading)
|
|
202
267
|
? (openBlock(), createBlock(_component_NcNoteCard, {
|
|
203
|
-
key:
|
|
204
|
-
|
|
268
|
+
key: 3,
|
|
269
|
+
variant: "warning"
|
|
205
270
|
}, {
|
|
206
271
|
default: withCtx(() => [
|
|
207
|
-
createTextVNode(toDisplayString($props.labels.
|
|
272
|
+
createTextVNode(toDisplayString($props.labels.noSchemas), 1 /* TEXT */)
|
|
208
273
|
]),
|
|
209
274
|
_: 1 /* STABLE */
|
|
210
275
|
}))
|
|
211
|
-
: createCommentVNode("v-if", true)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}, {
|
|
217
|
-
default: withCtx(() => [
|
|
218
|
-
createTextVNode(toDisplayString($props.labels.noSchemas), 1 /* TEXT */)
|
|
219
|
-
]),
|
|
220
|
-
_: 1 /* STABLE */
|
|
221
|
-
}))
|
|
222
|
-
: createCommentVNode("v-if", true)
|
|
223
|
-
]))
|
|
276
|
+
: createCommentVNode("v-if", true)
|
|
277
|
+
], 8 /* PROPS */, _hoisted_11), [
|
|
278
|
+
[vShow, $options.isGroupOpen(groupIdx)]
|
|
279
|
+
])
|
|
280
|
+
], 2 /* CLASS */))
|
|
224
281
|
}), 128 /* KEYED_FRAGMENT */))
|
|
225
282
|
]))
|
|
226
283
|
: createCommentVNode("v-if", true)
|
|
@@ -236,7 +293,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
236
293
|
key: "0"
|
|
237
294
|
}
|
|
238
295
|
: undefined
|
|
239
|
-
]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["name", "description", "docUrl", "loading", "error", "errorMessage", "onRetry"]))
|
|
296
|
+
]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["name", "description", "docUrl", "loading", "loadingMessage", "error", "errorMessage", "onRetry"]))
|
|
240
297
|
}
|
|
241
298
|
|
|
242
299
|
export { render };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CnRegisterMapping.vue3.js","sources":["../../../../src/components/CnRegisterMapping/CnRegisterMapping.vue?vue&type=template&id=0abd37fe&lang.js"],"sourcesContent":["<template>\n\t<CnSettingsSection\n\t\t:name=\"name\"\n\t\t:description=\"description\"\n\t\t:docUrl=\"docUrl\"\n\t\t:loading=\"registersLoading\"\n\t\tloadingMessage=\"Loading registers...\"\n\t\t:error=\"!!registersError\"\n\t\t:errorMessage=\"registersError || ''\"\n\t\t:onRetry=\"loadRegisters\">\n\t\t<!-- Action buttons -->\n\t\t<template #actions>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"showSaveButton\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"saving || !hasChanges\"\n\t\t\t\t@click=\"handleSave\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"saving\" :size=\"20\" />\n\t\t\t\t\t<ContentSave v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ saving ? 'Saving...' : saveButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"showReimportButton\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"reimporting\"\n\t\t\t\t@click=\"$emit('reimport')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"reimporting\" :size=\"20\" />\n\t\t\t\t\t<Refresh v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ reimporting ? 'Importing...' : reimportButtonText }}\n\t\t\t</NcButton>\n\t\t\t<slot name=\"actions\" />\n\t\t</template>\n\n\t\t<!-- Group sections -->\n\t\t<div v-if=\"!registersLoading && !registersError\" class=\"cn-register-mapping\">\n\t\t\t<div\n\t\t\t\tv-for=\"(group, groupIdx) in groups\"\n\t\t\t\t:key=\"groupIdx\"\n\t\t\t\tclass=\"cn-register-mapping__group\">\n\t\t\t\t<!-- Group header -->\n\t\t\t\t<slot name=\"group-header\"\n\t\t\t\t\t:group=\"group\"\n\t\t\t\t\t:configuredCount=\"configuredCount(groupIdx)\"\n\t\t\t\t\t:totalCount=\"group.types.length\">\n\t\t\t\t\t<div class=\"cn-register-mapping__group-header\">\n\t\t\t\t\t\t<h4 class=\"cn-register-mapping__group-title\">\n\t\t\t\t\t\t\t{{ group.name }}\n\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t<span class=\"cn-register-mapping__group-status\">\n\t\t\t\t\t\t\t{{ configuredCount(groupIdx) }}/{{ group.types.length }} {{ labels.partiallyConfigured }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- Group description -->\n\t\t\t\t<p v-if=\"group.description\" class=\"cn-register-mapping__group-description\">\n\t\t\t\t\t{{ group.description }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- Register selector -->\n\t\t\t\t<div class=\"cn-register-mapping__register-select\">\n\t\t\t\t\t<label class=\"cn-register-mapping__label\">{{ labels.register }}</label>\n\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t:modelValue=\"selectedRegister(groupIdx)\"\n\t\t\t\t\t\t:options=\"registerSelectOptions\"\n\t\t\t\t\t\t:placeholder=\"labels.selectRegister\"\n\t\t\t\t\t\t:inputLabel=\"labels.register\"\n\t\t\t\t\t\t:loading=\"registersLoading\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrackBy=\"value\"\n\t\t\t\t\t\t@update:modelValue=\"handleRegisterChange(groupIdx, $event)\" />\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Type list -->\n\t\t\t\t<div v-if=\"selectedRegister(groupIdx)\" class=\"cn-register-mapping__type-list\">\n\t\t\t\t\t<!-- Header row -->\n\t\t\t\t\t<div class=\"cn-register-mapping__type-list-header\">\n\t\t\t\t\t\t<span>Name</span>\n\t\t\t\t\t\t<span>Schema</span>\n\t\t\t\t\t\t<span />\n\t\t\t\t\t\t<span />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Type rows -->\n\t\t\t\t\t<template v-for=\"type in group.types\" :key=\"type.slug + '-row'\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"cn-register-mapping__type-row\"\n\t\t\t\t\t\t\t:class=\"{ 'cn-register-mapping__type-row--expanded': isExpanded(groupIdx, type.slug) }\"\n\t\t\t\t\t\t\t@click=\"toggleExpand(groupIdx, type.slug)\">\n\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-name\">{{ type.label }}</span>\n\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-schema\">\n\t\t\t\t\t\t\t\t{{ schemaLabel(groupIdx, type) || labels.notConfigured }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-status\">\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"cn-register-mapping__status-dot\"\n\t\t\t\t\t\t\t\t\t:class=\"schemaValue(groupIdx, type)\n\t\t\t\t\t\t\t\t\t\t? 'cn-register-mapping__status-dot--configured'\n\t\t\t\t\t\t\t\t\t\t: 'cn-register-mapping__status-dot--unconfigured'\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-chevron\">\n\t\t\t\t\t\t\t\t<ChevronUp v-if=\"isExpanded(groupIdx, type.slug)\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<ChevronDown v-else :size=\"20\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Expanded detail -->\n\t\t\t\t\t\t<transition name=\"slide\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-if=\"isExpanded(groupIdx, type.slug)\"\n\t\t\t\t\t\t\t\tclass=\"cn-register-mapping__type-detail\">\n\t\t\t\t\t\t\t\t<p v-if=\"type.description\" class=\"cn-register-mapping__type-description\">\n\t\t\t\t\t\t\t\t\t{{ type.description }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t\t\t\t:modelValue=\"selectedSchema(groupIdx, type)\"\n\t\t\t\t\t\t\t\t\t:options=\"schemaSelectOptions(groupIdx)\"\n\t\t\t\t\t\t\t\t\t:placeholder=\"labels.selectSchema\"\n\t\t\t\t\t\t\t\t\t:inputLabel=\"labels.schema\"\n\t\t\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\t\t\ttrackBy=\"value\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"handleSchemaChange(groupIdx, type, $event)\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</transition>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- No register selected -->\n\t\t\t\t<NcNoteCard v-else-if=\"!registersLoading\" type=\"info\">\n\t\t\t\t\t{{ labels.selectRegister }}\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- No schemas available -->\n\t\t\t\t<NcNoteCard\n\t\t\t\t\tv-if=\"selectedRegister(groupIdx) && schemaSelectOptions(groupIdx).length === 0 && !registersLoading\"\n\t\t\t\t\tvariant=\"warning\">\n\t\t\t\t\t{{ labels.noSchemas }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Footer -->\n\t\t<template v-if=\"$slots.footer\" #footer>\n\t\t\t<slot name=\"footer\" />\n\t\t</template>\n\t</CnSettingsSection>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcLoadingIcon, NcNoteCard, NcSelect } from '@nextcloud/vue'\nimport ChevronDown from 'vue-material-design-icons/ChevronDown.vue'\nimport ChevronUp from 'vue-material-design-icons/ChevronUp.vue'\nimport ContentSave from 'vue-material-design-icons/ContentSave.vue'\nimport Refresh from 'vue-material-design-icons/Refresh.vue'\nimport { buildHeaders, prefixUrl } from '../../utils/headers.js'\nimport { CnSettingsSection } from '../CnSettingsSection/index.js'\n\n/**\n * CnRegisterMapping - OpenRegister register/schema configuration component.\n *\n * Displays and manages register-to-schema mappings for app object types.\n * Self-fetches available registers and schemas from the OpenRegister API.\n * Supports multiple register groups (stacked sections) with expandable\n * type rows for manual schema override.\n *\n * Single register (Pipelinq)\n * ```vue\n * <CnRegisterMapping\n * name=\"Register Configuration\"\n * :groups=\"[{\n * name: 'Core Objects',\n * types: [\n * { slug: 'client', label: 'Client' },\n * { slug: 'contact', label: 'Contact' },\n * ],\n * }]\"\n * :configuration=\"config\"\n * :show-reimport-button=\"true\"\n * @save=\"saveConfig\"\n * @reimport=\"reimport\" />\n * ```\n *\n * Multi-register (Stackiq)\n * ```vue\n * <CnRegisterMapping\n * :groups=\"[\n * { name: 'Voorzieningen', registerConfigKey: 'voorzieningen_register', types: [...] },\n * { name: 'AMEF', registerConfigKey: 'amef_register', types: [...] },\n * ]\"\n * :configuration=\"config\"\n * @save=\"saveConfig\" />\n * ```\n */\nexport default {\n\tname: 'CnRegisterMapping',\n\n\tcomponents: {\n\t\tCnSettingsSection,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tNcSelect,\n\t\tContentSave,\n\t\tRefresh,\n\t\tChevronDown,\n\t\tChevronUp,\n\t},\n\n\tprops: {\n\t\t/** Section title */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Register configuration'),\n\t\t},\n\n\t\t/** Section description */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Configure OpenRegister schema mappings for your object types'),\n\t\t},\n\n\t\t/** Documentation URL */\n\t\tdocUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Groups of object types that share a register.\n\t\t *\n\t\t * @type {Array<{ name: string, description: string, registerConfigKey: string, types: Array<{ slug: string, label: string, description: string, configKey: string }> }>}\n\t\t */\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator: (groups) => groups.length > 0\n\t\t\t\t&& groups.every((g) => g.name && Array.isArray(g.types) && g.types.length > 0),\n\t\t},\n\n\t\t/** Current configuration values: { register: '5', client_schema: '28', ... } */\n\t\tconfiguration: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Show save button */\n\t\tshowSaveButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether save is in progress */\n\t\tsaving: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Show reimport button */\n\t\tshowReimportButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether reimport is in progress */\n\t\treimporting: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Save button text */\n\t\tsaveButtonText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Save configuration'),\n\t\t},\n\n\t\t/** Reimport button text */\n\t\treimportButtonText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Re-import configuration'),\n\t\t},\n\n\t\t/** Auto-match schema titles to type slugs on register change */\n\t\tautoMatch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** UI labels (i18n) */\n\t\tlabels: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({\n\t\t\t\tregister: t('nextcloud-vue', 'Register'),\n\t\t\t\tschema: t('nextcloud-vue', 'Schema'),\n\t\t\t\tconfigured: t('nextcloud-vue', 'Configured'),\n\t\t\t\tnotConfigured: t('nextcloud-vue', 'Not configured'),\n\t\t\t\tnoSchemas: t('nextcloud-vue', 'No schemas available in this register'),\n\t\t\t\tselectRegister: t('nextcloud-vue', 'Select a register'),\n\t\t\t\tselectSchema: t('nextcloud-vue', 'Select a schema'),\n\t\t\t\tallConfigured: t('nextcloud-vue', 'All types configured'),\n\t\t\t\tpartiallyConfigured: t('nextcloud-vue', 'configured'),\n\t\t\t}),\n\t\t},\n\t},\n\n\temits: ['update:configuration', 'save', 'reimport'],\n\n\tdata() {\n\t\treturn {\n\t\t\t// Fetched data\n\t\t\tregisters: [],\n\t\t\tschemasByRegister: {},\n\t\t\tregistersLoading: false,\n\t\t\tregistersError: null,\n\t\t\t// Local state\n\t\t\tlocalConfig: {},\n\t\t\texpandedRows: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** Register options for NcSelect */\n\t\tregisterSelectOptions() {\n\t\t\treturn this.registers.map((r) => ({\n\t\t\t\tlabel: r.title || r.slug || `Register ${r.id}`,\n\t\t\t\tvalue: String(r.id),\n\t\t\t}))\n\t\t},\n\n\t\t/** Whether local config differs from prop */\n\t\thasChanges() {\n\t\t\treturn JSON.stringify(this.localConfig) !== JSON.stringify(this.configuration)\n\t\t},\n\t},\n\n\twatch: {\n\t\tconfiguration: {\n\t\t\thandler(newVal) {\n\t\t\t\tthis.localConfig = { ...newVal }\n\t\t\t},\n\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tawait this.loadRegisters()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Get the config key for a group's register.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {string} Config key\n\t\t */\n\t\tregisterConfigKey(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tif (group.registerConfigKey) {\n\t\t\t\treturn group.registerConfigKey\n\t\t\t}\n\t\t\tif (this.groups.length === 1) {\n\t\t\t\treturn 'register'\n\t\t\t}\n\t\t\treturn group.name.toLowerCase().replace(/[^a-z0-9]+/g, '_') + '_register'\n\t\t},\n\n\t\t/**\n\t\t * Get the config key for a type's schema.\n\t\t *\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Config key\n\t\t */\n\t\tschemaConfigKey(type) {\n\t\t\treturn type.configKey || type.slug + '_schema'\n\t\t},\n\n\t\t/**\n\t\t * Get the selected register option for a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {object|null} NcSelect option\n\t\t */\n\t\tselectedRegister(groupIdx) {\n\t\t\tconst key = this.registerConfigKey(groupIdx)\n\t\t\tconst value = String(this.localConfig[key] || '')\n\t\t\tif (!value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.registerSelectOptions.find((o) => o.value === value) || null\n\t\t},\n\n\t\t/**\n\t\t * Get the selected schema option for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {object|null} NcSelect option\n\t\t */\n\t\tselectedSchema(groupIdx, type) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\tconst value = String(this.localConfig[key] || '')\n\t\t\tif (!value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst options = this.schemaSelectOptions(groupIdx)\n\t\t\treturn options.find((o) => o.value === value) || null\n\t\t},\n\n\t\t/**\n\t\t * Get the schema value (ID) for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Schema ID or empty string\n\t\t */\n\t\tschemaValue(groupIdx, type) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\treturn this.localConfig[key] || ''\n\t\t},\n\n\t\t/**\n\t\t * Get the display label for a type's current schema.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Schema label or empty string\n\t\t */\n\t\tschemaLabel(groupIdx, type) {\n\t\t\tconst selected = this.selectedSchema(groupIdx, type)\n\t\t\tif (selected) {\n\t\t\t\treturn selected.label\n\t\t\t}\n\t\t\tconst value = this.schemaValue(groupIdx, type)\n\t\t\treturn value ? `Schema ${value}` : ''\n\t\t},\n\n\t\t/**\n\t\t * Get schema options for a group's selected register.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {Array<{label: string, value: string}>} NcSelect options\n\t\t */\n\t\tschemaSelectOptions(groupIdx) {\n\t\t\tconst reg = this.selectedRegister(groupIdx)\n\t\t\tif (!reg) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst schemas = this.schemasByRegister[reg.value] || []\n\t\t\treturn schemas.map((s) => ({\n\t\t\t\tlabel: s.title || s.slug || `Schema ${s.id}`,\n\t\t\t\tvalue: String(s.id),\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Count configured types in a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {number} Count\n\t\t */\n\t\tconfiguredCount(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\treturn group.types.filter((type) => !!this.schemaValue(groupIdx, type)).length\n\t\t},\n\n\t\t/**\n\t\t * Check if a type row is expanded.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {string} slug Type slug\n\t\t * @return {boolean}\n\t\t */\n\t\tisExpanded(groupIdx, slug) {\n\t\t\treturn !!this.expandedRows[groupIdx + '-' + slug]\n\t\t},\n\n\t\t/**\n\t\t * Toggle a type row expansion.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {string} slug Type slug\n\t\t */\n\t\ttoggleExpand(groupIdx, slug) {\n\t\t\tconst key = groupIdx + '-' + slug\n\t\t\tthis.expandedRows = {\n\t\t\t\t...this.expandedRows,\n\t\t\t\t[key]: !this.expandedRows[key],\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle register selection change for a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object|null} option NcSelect option\n\t\t */\n\t\tasync handleRegisterChange(groupIdx, option) {\n\t\t\tconst key = this.registerConfigKey(groupIdx)\n\t\t\tconst value = option?.value || ''\n\n\t\t\tthis.localConfig = { ...this.localConfig, [key]: value }\n\n\t\t\t// Clear schema selections for this group\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tfor (const type of group.types) {\n\t\t\t\tconst schemaKey = this.schemaConfigKey(type)\n\t\t\t\tthis.localConfig = { ...this.localConfig, [schemaKey]: '' }\n\t\t\t}\n\n\t\t\t// Fetch schemas for the new register\n\t\t\tif (value) {\n\t\t\t\tawait this.loadSchemasForRegister(value)\n\n\t\t\t\t// Auto-match schemas\n\t\t\t\tif (this.autoMatch) {\n\t\t\t\t\tthis.autoMatchSchemas(groupIdx)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$emit('update:configuration', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Handle schema selection change for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @param {object|null} option NcSelect option\n\t\t */\n\t\thandleSchemaChange(groupIdx, type, option) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\tconst value = option?.value || ''\n\n\t\t\tthis.localConfig = { ...this.localConfig, [key]: value }\n\t\t\tthis.$emit('update:configuration', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Auto-match schema titles to type slugs/labels (case-insensitive).\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t */\n\t\tautoMatchSchemas(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tconst options = this.schemaSelectOptions(groupIdx)\n\n\t\t\tfor (const type of group.types) {\n\t\t\t\tconst schemaKey = this.schemaConfigKey(type)\n\t\t\t\t// Skip if already has a value\n\t\t\t\tif (this.localConfig[schemaKey]) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst slug = type.slug.toLowerCase()\n\t\t\t\tconst label = type.label.toLowerCase()\n\n\t\t\t\tconst match = options.find((o) => {\n\t\t\t\t\tconst optLabel = o.label.toLowerCase()\n\t\t\t\t\treturn optLabel === slug || optLabel === label\n\t\t\t\t\t\t|| optLabel.includes(slug) || slug.includes(optLabel)\n\t\t\t\t})\n\n\t\t\t\tif (match) {\n\t\t\t\t\tthis.localConfig = { ...this.localConfig, [schemaKey]: match.value }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** Emit save event with current config */\n\t\thandleSave() {\n\t\t\tthis.$emit('save', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Fetch all registers from OpenRegister API.\n\t\t */\n\t\tasync loadRegisters() {\n\t\t\tthis.registersLoading = true\n\t\t\tthis.registersError = null\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(prefixUrl('/apps/openregister/api/registers?_extend[]=schemas'), {\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: buildHeaders(),\n\t\t\t\t})\n\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthis.registersError = `Failed to fetch registers: ${response.statusText}`\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst data = await response.json()\n\t\t\t\tconst results = data.results || data\n\t\t\t\tthis.registers = Array.isArray(results) ? results : []\n\n\t\t\t\t// Cache expanded schemas\n\t\t\t\tfor (const reg of this.registers) {\n\t\t\t\t\tif (Array.isArray(reg.schemas) && reg.schemas.length > 0) {\n\t\t\t\t\t\tconst schemas = reg.schemas.filter((s) => s && typeof s === 'object' && s.id)\n\t\t\t\t\t\tif (schemas.length > 0) {\n\t\t\t\t\t\t\tthis.schemasByRegister = {\n\t\t\t\t\t\t\t\t...this.schemasByRegister,\n\t\t\t\t\t\t\t\t[String(reg.id)]: schemas,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.registersError = error.message || 'Network error fetching registers'\n\t\t\t} finally {\n\t\t\t\tthis.registersLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch schemas for a specific register.\n\t\t *\n\t\t * @param {string} registerId Register ID\n\t\t */\n\t\tasync loadSchemasForRegister(registerId) {\n\t\t\tconst id = String(registerId)\n\n\t\t\t// Return cached\n\t\t\tif (this.schemasByRegister[id]?.length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\tprefixUrl(`/apps/openregister/api/registers/${encodeURIComponent(id)}?_extend[]=schemas`),\n\t\t\t\t\t{ method: 'GET', headers: buildHeaders() },\n\t\t\t\t)\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst data = await response.json()\n\t\t\t\tconst schemas = (data.schemas || []).filter((s) => s && typeof s === 'object' && s.id)\n\t\t\t\tthis.schemasByRegister = { ...this.schemasByRegister, [id]: schemas }\n\t\t\t} catch {\n\t\t\t\t// Silently fail — register already selected, schemas just won't populate\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-register-mapping__group {\n\tmargin-bottom: 24px;\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius-large);\n\tpadding: 20px;\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__group:last-child {\n\tmargin-bottom: 0;\n}\n\n.cn-register-mapping__group-header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmargin-bottom: 12px;\n}\n\n.cn-register-mapping__group-title {\n\tfont-size: 16px;\n\tfont-weight: 600;\n\tmargin: 0;\n\tcolor: var(--color-main-text);\n}\n\n.cn-register-mapping__group-status {\n\tfont-size: 13px;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-register-mapping__group-description {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n\tmargin: 0 0 12px 0;\n}\n\n.cn-register-mapping__label {\n\tdisplay: block;\n\tfont-weight: 500;\n\tfont-size: 13px;\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-bottom: 4px;\n}\n\n.cn-register-mapping__register-select {\n\tmargin-bottom: 16px;\n\tmax-width: 400px;\n}\n\n.cn-register-mapping__type-list {\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbackground: var(--color-main-background);\n}\n\n.cn-register-mapping__type-list-header {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 40px 32px;\n\talign-items: center;\n\tpadding: 8px 16px;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: var(--color-text-maxcontrast);\n\ttext-transform: uppercase;\n\tletter-spacing: 0.5px;\n\tborder-bottom: 1px solid var(--color-border);\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-row {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 40px 32px;\n\talign-items: center;\n\tpadding: 10px 16px;\n\tborder-bottom: 1px solid var(--color-border);\n\tcursor: pointer;\n\ttransition: background-color 0.15s ease;\n}\n\n.cn-register-mapping__type-row:hover {\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-row--expanded {\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-name {\n\tfont-weight: 500;\n\tcolor: var(--color-main-text);\n}\n\n.cn-register-mapping__type-schema {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-register-mapping__type-status {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.cn-register-mapping__type-chevron {\n\tdisplay: flex;\n\tjustify-content: center;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-register-mapping__status-dot {\n\tdisplay: inline-block;\n\twidth: 10px;\n\theight: 10px;\n\tborder-radius: 50%;\n}\n\n.cn-register-mapping__status-dot--configured {\n\tbackground-color: var(--color-success);\n}\n\n.cn-register-mapping__status-dot--unconfigured {\n\tbackground-color: var(--color-warning);\n}\n\n.cn-register-mapping__type-detail {\n\tpadding: 12px 16px 16px;\n\tborder-bottom: 1px solid var(--color-border);\n\tbackground: var(--color-main-background);\n}\n\n.cn-register-mapping__type-description {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n\tmargin: 0 0 8px 0;\n}\n\n/* Slide transition */\n.slide-enter-active,\n.slide-leave-active {\n\ttransition: all 0.2s ease;\n\tmax-height: 200px;\n\toverflow: hidden;\n}\n\n.slide-enter,\n.slide-leave-to {\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\topacity: 0;\n}\n\n/* Last row in list should not have bottom border */\n.cn-register-mapping__type-list > :last-child {\n\tborder-bottom: none;\n}\n\n@media (max-width: 768px) {\n\t.cn-register-mapping__type-list-header {\n\t\tdisplay: none;\n\t}\n\n\t.cn-register-mapping__type-row {\n\t\tgrid-template-columns: 1fr auto 32px;\n\t}\n\n\t.cn-register-mapping__type-schema {\n\t\tdisplay: none;\n\t}\n\n\t.cn-register-mapping__register-select {\n\t\tmax-width: none;\n\t}\n}\n</style>\n"],"names":["_createBlock","_toDisplayString","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_createVNode","_normalizeClass","_Transition","_createTextVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CnRegisterMapping.vue3.js","sources":["../../../../src/components/CnRegisterMapping/CnRegisterMapping.vue?vue&type=template&id=8d3cad98&lang.js"],"sourcesContent":["<template>\n\t<CnSettingsSection\n\t\t:name=\"name\"\n\t\t:description=\"description\"\n\t\t:docUrl=\"docUrl\"\n\t\t:loading=\"registersLoading\"\n\t\t:loadingMessage=\"t('nextcloud-vue', 'Loading registers…')\"\n\t\t:error=\"!!registersError\"\n\t\t:errorMessage=\"registersError || ''\"\n\t\t:onRetry=\"loadRegisters\">\n\t\t<!-- Action buttons -->\n\t\t<template #actions>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"showSaveButton\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"saving || !hasChanges\"\n\t\t\t\t@click=\"handleSave\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"saving\" :size=\"20\" />\n\t\t\t\t\t<ContentSave v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ saving ? t('nextcloud-vue', 'Saving…') : saveButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"showReimportButton\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"reimporting\"\n\t\t\t\t@click=\"$emit('reimport')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"reimporting\" :size=\"20\" />\n\t\t\t\t\t<Refresh v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ reimporting ? t('nextcloud-vue', 'Importing…') : reimportButtonText }}\n\t\t\t</NcButton>\n\t\t\t<slot name=\"actions\" />\n\t\t</template>\n\n\t\t<!-- Group sections -->\n\t\t<div v-if=\"!registersLoading && !registersError\" class=\"cn-register-mapping\">\n\t\t\t<div\n\t\t\t\tv-for=\"(group, groupIdx) in groups\"\n\t\t\t\t:key=\"groupIdx\"\n\t\t\t\tclass=\"cn-register-mapping__group\"\n\t\t\t\t:class=\"{ 'cn-register-mapping__group--collapsed': !isGroupOpen(groupIdx) }\"\n\t\t\t\tdata-testid=\"cn-register-mapping-group\">\n\t\t\t\t<!-- Group header. With collapsible groups a heading holds the button\n\t\t\t\t that opens and closes the group (the WAI-ARIA accordion); the\n\t\t\t\t count stays visible while it is closed. -->\n\t\t\t\t<h4 v-if=\"groupsCollapsible\" class=\"cn-register-mapping__group-heading\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"cn-register-mapping__group-toggle\"\n\t\t\t\t\t\t:aria-expanded=\"String(isGroupOpen(groupIdx))\"\n\t\t\t\t\t\t:aria-controls=\"groupBodyId(groupIdx)\"\n\t\t\t\t\t\tdata-testid=\"cn-register-mapping-group-toggle\"\n\t\t\t\t\t\t@click=\"toggleGroup(groupIdx)\">\n\t\t\t\t\t\t<span class=\"cn-register-mapping__group-chevron\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<ChevronUp v-if=\"isGroupOpen(groupIdx)\" :size=\"20\" />\n\t\t\t\t\t\t\t<ChevronDown v-else :size=\"20\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<slot name=\"group-header\"\n\t\t\t\t\t\t\t:group=\"group\"\n\t\t\t\t\t\t\t:configuredCount=\"configuredCount(groupIdx)\"\n\t\t\t\t\t\t\t:totalCount=\"group.types.length\">\n\t\t\t\t\t\t\t<span class=\"cn-register-mapping__group-header\">\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__group-title\">{{ group.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__group-status\" data-testid=\"cn-register-mapping-group-count\">\n\t\t\t\t\t\t\t\t\t{{ configuredCount(groupIdx) }}/{{ group.types.length }} {{ labels.partiallyConfigured }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</button>\n\t\t\t\t</h4>\n\t\t\t\t<slot v-else\n\t\t\t\t\tname=\"group-header\"\n\t\t\t\t\t:group=\"group\"\n\t\t\t\t\t:configuredCount=\"configuredCount(groupIdx)\"\n\t\t\t\t\t:totalCount=\"group.types.length\">\n\t\t\t\t\t<div class=\"cn-register-mapping__group-header\">\n\t\t\t\t\t\t<h4 class=\"cn-register-mapping__group-title\">\n\t\t\t\t\t\t\t{{ group.name }}\n\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t<span class=\"cn-register-mapping__group-status\">\n\t\t\t\t\t\t\t{{ configuredCount(groupIdx) }}/{{ group.types.length }} {{ labels.partiallyConfigured }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\n\t\t\t\t<div\n\t\t\t\t\tv-show=\"isGroupOpen(groupIdx)\"\n\t\t\t\t\t:id=\"groupBodyId(groupIdx)\"\n\t\t\t\t\tclass=\"cn-register-mapping__group-body\"\n\t\t\t\t\tdata-testid=\"cn-register-mapping-group-body\">\n\t\t\t\t\t<!-- Group description -->\n\t\t\t\t\t<p v-if=\"group.description\" class=\"cn-register-mapping__group-description\">\n\t\t\t\t\t\t{{ group.description }}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t<!-- Register selector -->\n\t\t\t\t\t<div class=\"cn-register-mapping__register-select\">\n\t\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t\t:modelValue=\"selectedRegister(groupIdx)\"\n\t\t\t\t\t\t\t:options=\"registerSelectOptions\"\n\t\t\t\t\t\t\t:placeholder=\"labels.selectRegister\"\n\t\t\t\t\t\t\t:inputLabel=\"labels.register\"\n\t\t\t\t\t\t\t:loading=\"registersLoading\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrackBy=\"value\"\n\t\t\t\t\t\t\t@update:modelValue=\"handleRegisterChange(groupIdx, $event)\" />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Type list -->\n\t\t\t\t\t<div v-if=\"selectedRegister(groupIdx)\" class=\"cn-register-mapping__type-list\">\n\t\t\t\t\t\t<!-- Header row -->\n\t\t\t\t\t\t<div class=\"cn-register-mapping__type-list-header\">\n\t\t\t\t\t\t\t<span>{{ t('nextcloud-vue', 'Object type') }}</span>\n\t\t\t\t\t\t\t<span>{{ labels.schema }}</span>\n\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Type rows -->\n\t\t\t\t\t\t<template v-for=\"type in group.types\" :key=\"type.slug + '-row'\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"cn-register-mapping__type-row\"\n\t\t\t\t\t\t\t\t:class=\"{ 'cn-register-mapping__type-row--expanded': isExpanded(groupIdx, type.slug) }\"\n\t\t\t\t\t\t\t\t@click=\"toggleExpand(groupIdx, type.slug)\">\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-name\">{{ type.label }}</span>\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-schema\">\n\t\t\t\t\t\t\t\t\t{{ schemaLabel(groupIdx, type) || labels.notConfigured }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-status\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"cn-register-mapping__status-dot\"\n\t\t\t\t\t\t\t\t\t\t:class=\"schemaValue(groupIdx, type)\n\t\t\t\t\t\t\t\t\t\t\t? 'cn-register-mapping__status-dot--configured'\n\t\t\t\t\t\t\t\t\t\t\t: 'cn-register-mapping__status-dot--unconfigured'\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"cn-register-mapping__type-chevron\">\n\t\t\t\t\t\t\t\t\t<ChevronUp v-if=\"isExpanded(groupIdx, type.slug)\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t<ChevronDown v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Expanded detail -->\n\t\t\t\t\t\t\t<transition name=\"slide\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tv-if=\"isExpanded(groupIdx, type.slug)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-register-mapping__type-detail\">\n\t\t\t\t\t\t\t\t\t<p v-if=\"type.description\" class=\"cn-register-mapping__type-description\">\n\t\t\t\t\t\t\t\t\t\t{{ type.description }}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t\t\t\t\t:modelValue=\"selectedSchema(groupIdx, type)\"\n\t\t\t\t\t\t\t\t\t\t:options=\"schemaSelectOptions(groupIdx)\"\n\t\t\t\t\t\t\t\t\t\t:placeholder=\"labels.selectSchema\"\n\t\t\t\t\t\t\t\t\t\t:inputLabel=\"labels.schema\"\n\t\t\t\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\t\t\t\ttrackBy=\"value\"\n\t\t\t\t\t\t\t\t\t\t@update:modelValue=\"handleSchemaChange(groupIdx, type, $event)\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</transition>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- No register selected -->\n\t\t\t\t\t<NcNoteCard v-else-if=\"!registersLoading\" type=\"info\">\n\t\t\t\t\t\t{{ labels.selectRegister }}\n\t\t\t\t\t</NcNoteCard>\n\n\t\t\t\t\t<!-- No schemas available -->\n\t\t\t\t\t<NcNoteCard\n\t\t\t\t\t\tv-if=\"selectedRegister(groupIdx) && schemaSelectOptions(groupIdx).length === 0 && !registersLoading\"\n\t\t\t\t\t\tvariant=\"warning\">\n\t\t\t\t\t\t{{ labels.noSchemas }}\n\t\t\t\t\t</NcNoteCard>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Footer -->\n\t\t<template v-if=\"$slots.footer\" #footer>\n\t\t\t<slot name=\"footer\" />\n\t\t</template>\n\t</CnSettingsSection>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcLoadingIcon, NcNoteCard, NcSelect } from '@nextcloud/vue'\nimport ChevronDown from 'vue-material-design-icons/ChevronDown.vue'\nimport ChevronUp from 'vue-material-design-icons/ChevronUp.vue'\nimport ContentSave from 'vue-material-design-icons/ContentSave.vue'\nimport Refresh from 'vue-material-design-icons/Refresh.vue'\nimport { buildHeaders, prefixUrl } from '../../utils/headers.js'\nimport { CnSettingsSection } from '../CnSettingsSection/index.js'\n\nlet mappingCount = 0\n\n/**\n * CnRegisterMapping - OpenRegister register/schema configuration component.\n *\n * Displays and manages register-to-schema mappings for app object types.\n * Self-fetches available registers and schemas from the OpenRegister API.\n * Supports multiple register groups (stacked sections) with expandable\n * type rows for manual schema override.\n *\n * Single register (Pipelinq)\n * ```vue\n * <CnRegisterMapping\n * name=\"Register Configuration\"\n * :groups=\"[{\n * name: 'Core Objects',\n * types: [\n * { slug: 'client', label: 'Client' },\n * { slug: 'contact', label: 'Contact' },\n * ],\n * }]\"\n * :configuration=\"config\"\n * :show-reimport-button=\"true\"\n * @save=\"saveConfig\"\n * @reimport=\"reimport\" />\n * ```\n *\n * Multi-register (Stackiq)\n * ```vue\n * <CnRegisterMapping\n * :groups=\"[\n * { name: 'Voorzieningen', registerConfigKey: 'voorzieningen_register', types: [...] },\n * { name: 'AMEF', registerConfigKey: 'amef_register', types: [...] },\n * ]\"\n * :configuration=\"config\"\n * @save=\"saveConfig\" />\n * ```\n */\nexport default {\n\tname: 'CnRegisterMapping',\n\n\tcomponents: {\n\t\tCnSettingsSection,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tNcSelect,\n\t\tContentSave,\n\t\tRefresh,\n\t\tChevronDown,\n\t\tChevronUp,\n\t},\n\n\tprops: {\n\t\t/** Section title */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Register configuration'),\n\t\t},\n\n\t\t/** Section description */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Configure OpenRegister schema mappings for your object types'),\n\t\t},\n\n\t\t/** Documentation URL */\n\t\tdocUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Groups of object types that share a register.\n\t\t *\n\t\t * @type {Array<{ name: string, description: string, registerConfigKey: string, types: Array<{ slug: string, label: string, description: string, configKey: string }> }>}\n\t\t */\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator: (groups) => groups.length > 0\n\t\t\t\t&& groups.every((g) => g.name && Array.isArray(g.types) && g.types.length > 0),\n\t\t},\n\n\t\t/** Current configuration values: { register: '5', client_schema: '28', ... } */\n\t\tconfiguration: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Show save button */\n\t\tshowSaveButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether save is in progress */\n\t\tsaving: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Show reimport button */\n\t\tshowReimportButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether reimport is in progress */\n\t\treimporting: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Save button text */\n\t\tsaveButtonText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Save configuration'),\n\t\t},\n\n\t\t/** Reimport button text */\n\t\treimportButtonText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Re-import configuration'),\n\t\t},\n\n\t\t/**\n\t\t * Draw each group as a header that opens and closes it, showing its\n\t\t * configured count while closed. The groups start closed. `null` (the\n\t\t * default) collapses them when there is more than one group, so a page\n\t\t * with several registers is not one long card.\n\t\t *\n\t\t * @type {boolean|null}\n\t\t * @spec openspec/changes/register-mapping-collapsed-groups/specs/register-mapping/spec.md#requirement-register-groups-start-closed-with-their-count\n\t\t */\n\t\tcollapseGroups: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Auto-match schema titles to type slugs on register change */\n\t\tautoMatch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** UI labels (i18n) */\n\t\tlabels: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({\n\t\t\t\tregister: t('nextcloud-vue', 'Register'),\n\t\t\t\tschema: t('nextcloud-vue', 'Schema'),\n\t\t\t\tconfigured: t('nextcloud-vue', 'Configured'),\n\t\t\t\tnotConfigured: t('nextcloud-vue', 'Not configured'),\n\t\t\t\tnoSchemas: t('nextcloud-vue', 'No schemas available in this register'),\n\t\t\t\tselectRegister: t('nextcloud-vue', 'Select a register'),\n\t\t\t\tselectSchema: t('nextcloud-vue', 'Select a schema'),\n\t\t\t\tallConfigured: t('nextcloud-vue', 'All types configured'),\n\t\t\t\tpartiallyConfigured: t('nextcloud-vue', 'configured'),\n\t\t\t}),\n\t\t},\n\t},\n\n\temits: ['update:configuration', 'save', 'reimport'],\n\n\tdata() {\n\t\treturn {\n\t\t\t// Fetched data\n\t\t\tregisters: [],\n\t\t\tschemasByRegister: {},\n\t\t\tregistersLoading: false,\n\t\t\tregistersError: null,\n\t\t\t// Local state\n\t\t\tlocalConfig: {},\n\t\t\texpandedRows: {},\n\t\t\t// The groups opened by the reader, by index.\n\t\t\topenGroups: {},\n\t\t\tuid: ++mappingCount,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** Register options for NcSelect */\n\t\tregisterSelectOptions() {\n\t\t\treturn this.registers.map((r) => ({\n\t\t\t\tlabel: r.title || r.slug || t('nextcloud-vue', 'Register {id}', { id: r.id }),\n\t\t\t\tvalue: String(r.id),\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Whether the groups open and close.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/register-mapping-collapsed-groups/specs/register-mapping/spec.md#requirement-register-groups-start-closed-with-their-count\n\t\t */\n\t\tgroupsCollapsible() {\n\t\t\treturn this.collapseGroups === null ? this.groups.length > 1 : this.collapseGroups\n\t\t},\n\n\t\t/** Whether local config differs from prop */\n\t\thasChanges() {\n\t\t\treturn JSON.stringify(this.localConfig) !== JSON.stringify(this.configuration)\n\t\t},\n\t},\n\n\twatch: {\n\t\tconfiguration: {\n\t\t\thandler(newVal) {\n\t\t\t\tthis.localConfig = { ...newVal }\n\t\t\t},\n\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tawait this.loadRegisters()\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Whether a group's body shows.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {boolean}\n\t\t */\n\t\tisGroupOpen(groupIdx) {\n\t\t\treturn !this.groupsCollapsible || this.openGroups[groupIdx] === true\n\t\t},\n\n\t\t/**\n\t\t * Open a closed group, or close an open one.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {void}\n\t\t * @spec openspec/changes/register-mapping-collapsed-groups/specs/register-mapping/spec.md#requirement-register-groups-start-closed-with-their-count\n\t\t */\n\t\ttoggleGroup(groupIdx) {\n\t\t\tthis.openGroups = { ...this.openGroups, [groupIdx]: !this.isGroupOpen(groupIdx) }\n\t\t},\n\n\t\t/**\n\t\t * The id of a group's body, for the header's `aria-controls`.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {string}\n\t\t */\n\t\tgroupBodyId(groupIdx) {\n\t\t\treturn `cn-register-mapping-${this.uid}-group-${groupIdx}`\n\t\t},\n\n\t\t/**\n\t\t * Get the config key for a group's register.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {string} Config key\n\t\t */\n\t\tregisterConfigKey(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tif (group.registerConfigKey) {\n\t\t\t\treturn group.registerConfigKey\n\t\t\t}\n\t\t\tif (this.groups.length === 1) {\n\t\t\t\treturn 'register'\n\t\t\t}\n\t\t\treturn group.name.toLowerCase().replace(/[^a-z0-9]+/g, '_') + '_register'\n\t\t},\n\n\t\t/**\n\t\t * Get the config key for a type's schema.\n\t\t *\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Config key\n\t\t */\n\t\tschemaConfigKey(type) {\n\t\t\treturn type.configKey || type.slug + '_schema'\n\t\t},\n\n\t\t/**\n\t\t * Get the selected register option for a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {object|null} NcSelect option\n\t\t */\n\t\tselectedRegister(groupIdx) {\n\t\t\tconst key = this.registerConfigKey(groupIdx)\n\t\t\tconst value = String(this.localConfig[key] || '')\n\t\t\tif (!value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.registerSelectOptions.find((o) => o.value === value) || null\n\t\t},\n\n\t\t/**\n\t\t * Get the selected schema option for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {object|null} NcSelect option\n\t\t */\n\t\tselectedSchema(groupIdx, type) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\tconst value = String(this.localConfig[key] || '')\n\t\t\tif (!value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst options = this.schemaSelectOptions(groupIdx)\n\t\t\treturn options.find((o) => o.value === value) || null\n\t\t},\n\n\t\t/**\n\t\t * Get the schema value (ID) for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Schema ID or empty string\n\t\t */\n\t\tschemaValue(groupIdx, type) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\treturn this.localConfig[key] || ''\n\t\t},\n\n\t\t/**\n\t\t * Get the display label for a type's current schema.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @return {string} Schema label or empty string\n\t\t */\n\t\tschemaLabel(groupIdx, type) {\n\t\t\tconst selected = this.selectedSchema(groupIdx, type)\n\t\t\tif (selected) {\n\t\t\t\treturn selected.label\n\t\t\t}\n\t\t\tconst value = this.schemaValue(groupIdx, type)\n\t\t\treturn value ? t('nextcloud-vue', 'Schema {id}', { id: value }) : ''\n\t\t},\n\n\t\t/**\n\t\t * Get schema options for a group's selected register.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {Array<{label: string, value: string}>} NcSelect options\n\t\t */\n\t\tschemaSelectOptions(groupIdx) {\n\t\t\tconst reg = this.selectedRegister(groupIdx)\n\t\t\tif (!reg) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst schemas = this.schemasByRegister[reg.value] || []\n\t\t\treturn schemas.map((s) => ({\n\t\t\t\tlabel: s.title || s.slug || t('nextcloud-vue', 'Schema {id}', { id: s.id }),\n\t\t\t\tvalue: String(s.id),\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Count configured types in a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @return {number} Count\n\t\t */\n\t\tconfiguredCount(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\treturn group.types.filter((type) => !!this.schemaValue(groupIdx, type)).length\n\t\t},\n\n\t\t/**\n\t\t * Check if a type row is expanded.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {string} slug Type slug\n\t\t * @return {boolean}\n\t\t */\n\t\tisExpanded(groupIdx, slug) {\n\t\t\treturn !!this.expandedRows[groupIdx + '-' + slug]\n\t\t},\n\n\t\t/**\n\t\t * Toggle a type row expansion.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {string} slug Type slug\n\t\t */\n\t\ttoggleExpand(groupIdx, slug) {\n\t\t\tconst key = groupIdx + '-' + slug\n\t\t\tthis.expandedRows = {\n\t\t\t\t...this.expandedRows,\n\t\t\t\t[key]: !this.expandedRows[key],\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle register selection change for a group.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object|null} option NcSelect option\n\t\t */\n\t\tasync handleRegisterChange(groupIdx, option) {\n\t\t\tconst key = this.registerConfigKey(groupIdx)\n\t\t\tconst value = option?.value || ''\n\n\t\t\tthis.localConfig = { ...this.localConfig, [key]: value }\n\n\t\t\t// Clear schema selections for this group\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tfor (const type of group.types) {\n\t\t\t\tconst schemaKey = this.schemaConfigKey(type)\n\t\t\t\tthis.localConfig = { ...this.localConfig, [schemaKey]: '' }\n\t\t\t}\n\n\t\t\t// Fetch schemas for the new register\n\t\t\tif (value) {\n\t\t\t\tawait this.loadSchemasForRegister(value)\n\n\t\t\t\t// Auto-match schemas\n\t\t\t\tif (this.autoMatch) {\n\t\t\t\t\tthis.autoMatchSchemas(groupIdx)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$emit('update:configuration', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Handle schema selection change for a type.\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t * @param {object} type Type definition\n\t\t * @param {object|null} option NcSelect option\n\t\t */\n\t\thandleSchemaChange(groupIdx, type, option) {\n\t\t\tconst key = this.schemaConfigKey(type)\n\t\t\tconst value = option?.value || ''\n\n\t\t\tthis.localConfig = { ...this.localConfig, [key]: value }\n\t\t\tthis.$emit('update:configuration', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Auto-match schema titles to type slugs/labels (case-insensitive).\n\t\t *\n\t\t * @param {number} groupIdx Group index\n\t\t */\n\t\tautoMatchSchemas(groupIdx) {\n\t\t\tconst group = this.groups[groupIdx]\n\t\t\tconst options = this.schemaSelectOptions(groupIdx)\n\n\t\t\tfor (const type of group.types) {\n\t\t\t\tconst schemaKey = this.schemaConfigKey(type)\n\t\t\t\t// Skip if already has a value\n\t\t\t\tif (this.localConfig[schemaKey]) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst slug = type.slug.toLowerCase()\n\t\t\t\tconst label = type.label.toLowerCase()\n\n\t\t\t\tconst match = options.find((o) => {\n\t\t\t\t\tconst optLabel = o.label.toLowerCase()\n\t\t\t\t\treturn optLabel === slug || optLabel === label\n\t\t\t\t\t\t|| optLabel.includes(slug) || slug.includes(optLabel)\n\t\t\t\t})\n\n\t\t\t\tif (match) {\n\t\t\t\t\tthis.localConfig = { ...this.localConfig, [schemaKey]: match.value }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** Emit save event with current config */\n\t\thandleSave() {\n\t\t\tthis.$emit('save', { ...this.localConfig })\n\t\t},\n\n\t\t/**\n\t\t * Fetch all registers from OpenRegister API.\n\t\t */\n\t\tasync loadRegisters() {\n\t\t\tthis.registersLoading = true\n\t\t\tthis.registersError = null\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(prefixUrl('/apps/openregister/api/registers?_extend[]=schemas'), {\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: buildHeaders(),\n\t\t\t\t})\n\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthis.registersError = t('nextcloud-vue', 'The registers could not be loaded: {reason}', { reason: response.statusText || response.status })\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst data = await response.json()\n\t\t\t\tconst results = data.results || data\n\t\t\t\tthis.registers = Array.isArray(results) ? results : []\n\n\t\t\t\t// Cache expanded schemas\n\t\t\t\tfor (const reg of this.registers) {\n\t\t\t\t\tif (Array.isArray(reg.schemas) && reg.schemas.length > 0) {\n\t\t\t\t\t\tconst schemas = reg.schemas.filter((s) => s && typeof s === 'object' && s.id)\n\t\t\t\t\t\tif (schemas.length > 0) {\n\t\t\t\t\t\t\tthis.schemasByRegister = {\n\t\t\t\t\t\t\t\t...this.schemasByRegister,\n\t\t\t\t\t\t\t\t[String(reg.id)]: schemas,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.registersError = error.message || t('nextcloud-vue', 'The registers could not be loaded: {reason}', { reason: t('nextcloud-vue', 'no connection') })\n\t\t\t} finally {\n\t\t\t\tthis.registersLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch schemas for a specific register.\n\t\t *\n\t\t * @param {string} registerId Register ID\n\t\t */\n\t\tasync loadSchemasForRegister(registerId) {\n\t\t\tconst id = String(registerId)\n\n\t\t\t// Return cached\n\t\t\tif (this.schemasByRegister[id]?.length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\tprefixUrl(`/apps/openregister/api/registers/${encodeURIComponent(id)}?_extend[]=schemas`),\n\t\t\t\t\t{ method: 'GET', headers: buildHeaders() },\n\t\t\t\t)\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst data = await response.json()\n\t\t\t\tconst schemas = (data.schemas || []).filter((s) => s && typeof s === 'object' && s.id)\n\t\t\t\tthis.schemasByRegister = { ...this.schemasByRegister, [id]: schemas }\n\t\t\t} catch {\n\t\t\t\t// Silently fail — register already selected, schemas just won't populate\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-register-mapping__group {\n\tmargin-bottom: 24px;\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius-large);\n\tpadding: 20px;\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__group:last-child {\n\tmargin-bottom: 0;\n}\n\n.cn-register-mapping__group-header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmargin-bottom: 12px;\n}\n\n.cn-register-mapping__group-heading {\n\tmargin: 0 0 12px;\n\tfont: inherit;\n}\n\n.cn-register-mapping__group--collapsed .cn-register-mapping__group-heading {\n\tmargin-bottom: 0;\n}\n\n.cn-register-mapping__group-toggle {\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\twidth: 100%;\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n\ttext-align: start;\n\tcursor: pointer;\n}\n\n.cn-register-mapping__group-toggle:focus-visible {\n\toutline: 2px solid var(--color-primary-element);\n\toutline-offset: 2px;\n\tborder-radius: var(--border-radius);\n}\n\n.cn-register-mapping__group-chevron {\n\tdisplay: inline-flex;\n\tflex: none;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-register-mapping__group-toggle .cn-register-mapping__group-header {\n\tflex: 1 1 auto;\n\tflex-wrap: wrap;\n\tgap: 4px 12px;\n\tmin-width: 0;\n\tmargin-bottom: 0;\n}\n\n.cn-register-mapping__group-title {\n\tfont-size: 16px;\n\tfont-weight: 600;\n\tmargin: 0;\n\tcolor: var(--color-main-text);\n}\n\n.cn-register-mapping__group-status {\n\tfont-size: 13px;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-register-mapping__group-description {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n\tmargin: 0 0 12px 0;\n}\n\n.cn-register-mapping__register-select {\n\tmargin-bottom: 16px;\n\tmax-width: 400px;\n}\n\n.cn-register-mapping__type-list {\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbackground: var(--color-main-background);\n}\n\n.cn-register-mapping__type-list-header {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 40px 32px;\n\talign-items: center;\n\tpadding: 8px 16px;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: var(--color-text-maxcontrast);\n\ttext-transform: uppercase;\n\tletter-spacing: 0.5px;\n\tborder-bottom: 1px solid var(--color-border);\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-row {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 40px 32px;\n\talign-items: center;\n\tpadding: 10px 16px;\n\tborder-bottom: 1px solid var(--color-border);\n\tcursor: pointer;\n\ttransition: background-color 0.15s ease;\n}\n\n.cn-register-mapping__type-row:hover {\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-row--expanded {\n\tbackground: var(--color-background-hover);\n}\n\n.cn-register-mapping__type-name {\n\tfont-weight: 500;\n\tcolor: var(--color-main-text);\n}\n\n.cn-register-mapping__type-schema {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-register-mapping__type-status {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.cn-register-mapping__type-chevron {\n\tdisplay: flex;\n\tjustify-content: center;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-register-mapping__status-dot {\n\tdisplay: inline-block;\n\twidth: 10px;\n\theight: 10px;\n\tborder-radius: 50%;\n}\n\n.cn-register-mapping__status-dot--configured {\n\tbackground-color: var(--color-success);\n}\n\n.cn-register-mapping__status-dot--unconfigured {\n\tbackground-color: var(--color-warning);\n}\n\n.cn-register-mapping__type-detail {\n\tpadding: 12px 16px 16px;\n\tborder-bottom: 1px solid var(--color-border);\n\tbackground: var(--color-main-background);\n}\n\n.cn-register-mapping__type-description {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n\tmargin: 0 0 8px 0;\n}\n\n/* Slide transition */\n.slide-enter-active,\n.slide-leave-active {\n\ttransition: all 0.2s ease;\n\tmax-height: 200px;\n\toverflow: hidden;\n}\n\n.slide-enter,\n.slide-leave-to {\n\tmax-height: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\topacity: 0;\n}\n\n/* Last row in list should not have bottom border */\n.cn-register-mapping__type-list > :last-child {\n\tborder-bottom: none;\n}\n\n@media (max-width: 768px) {\n\t.cn-register-mapping__type-list-header {\n\t\tdisplay: none;\n\t}\n\n\t.cn-register-mapping__type-row {\n\t\tgrid-template-columns: 1fr auto 32px;\n\t}\n\n\t.cn-register-mapping__type-schema {\n\t\tdisplay: none;\n\t}\n\n\t.cn-register-mapping__register-select {\n\t\tmax-width: none;\n\t}\n}\n</style>\n"],"names":["_createBlock","_createTextVNode","_toDisplayString","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_normalizeClass","_createElementVNode","_createVNode","_Transition","_vShow"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import script from './CnReportsPage.vue2.js';
|
|
|
2
2
|
import { render } from './CnReportsPage.vue3.js';
|
|
3
3
|
|
|
4
4
|
script.render = render;
|
|
5
|
-
script.__scopeId = "data-v-
|
|
5
|
+
script.__scopeId = "data-v-327b60f8";
|
|
6
6
|
const __sfc_main = script;
|
|
7
7
|
|
|
8
8
|
export { __sfc_main as default };
|