@conduction/nextcloud-vue 0.1.0-beta.1 → 0.1.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +226 -0
  2. package/css/index.css +5 -0
  3. package/dist/nextcloud-vue.cjs.js +79416 -7715
  4. package/dist/nextcloud-vue.cjs.js.map +1 -1
  5. package/dist/nextcloud-vue.css +3583 -504
  6. package/dist/nextcloud-vue.esm.js +79343 -7692
  7. package/dist/nextcloud-vue.esm.js.map +1 -1
  8. package/l10n/en.json +164 -0
  9. package/l10n/nl.json +164 -0
  10. package/package.json +104 -63
  11. package/src/components/CnActionsBar/CnActionsBar.vue +254 -0
  12. package/src/components/CnActionsBar/index.js +1 -0
  13. package/src/components/CnAdvancedFormDialog/CnAdvancedFormDialog.vue +570 -0
  14. package/src/components/CnAdvancedFormDialog/CnDataTab.vue +217 -0
  15. package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +121 -0
  16. package/src/components/CnAdvancedFormDialog/CnPropertiesTab.vue +422 -0
  17. package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +247 -0
  18. package/src/components/CnAdvancedFormDialog/index.js +1 -0
  19. package/src/components/CnCard/CnCard.vue +415 -0
  20. package/src/components/CnCard/index.js +1 -0
  21. package/src/components/CnCardGrid/CnCardGrid.vue +156 -152
  22. package/src/components/CnCardGrid/index.js +1 -1
  23. package/src/components/CnCellRenderer/CnCellRenderer.vue +132 -132
  24. package/src/components/CnCellRenderer/index.js +1 -1
  25. package/src/components/CnChartWidget/CnChartWidget.vue +346 -0
  26. package/src/components/CnChartWidget/index.js +1 -0
  27. package/src/components/CnConfigurationCard/CnConfigurationCard.vue +77 -77
  28. package/src/components/CnConfigurationCard/index.js +1 -1
  29. package/src/components/CnContextMenu/CnContextMenu.vue +142 -0
  30. package/src/components/CnContextMenu/index.js +1 -0
  31. package/src/components/CnCopyDialog/CnCopyDialog.vue +266 -0
  32. package/src/components/CnCopyDialog/index.js +1 -0
  33. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +229 -0
  34. package/src/components/CnDashboardGrid/index.js +1 -0
  35. package/src/components/CnDashboardPage/CnDashboardPage.vue +397 -0
  36. package/src/components/CnDashboardPage/index.js +1 -0
  37. package/src/components/CnDataTable/CnDataTable.vue +362 -354
  38. package/src/components/CnDataTable/index.js +1 -1
  39. package/src/components/CnDeleteDialog/CnDeleteDialog.vue +177 -0
  40. package/src/components/CnDeleteDialog/index.js +1 -0
  41. package/src/components/CnDetailCard/CnDetailCard.vue +225 -0
  42. package/src/components/CnDetailCard/index.js +1 -0
  43. package/src/components/CnDetailGrid/CnDetailGrid.vue +256 -0
  44. package/src/components/CnDetailGrid/index.js +1 -0
  45. package/src/components/CnDetailPage/CnDetailPage.vue +432 -0
  46. package/src/components/CnDetailPage/index.js +1 -0
  47. package/src/components/CnFacetSidebar/CnFacetSidebar.vue +234 -223
  48. package/src/components/CnFacetSidebar/index.js +1 -1
  49. package/src/components/CnFilterBar/CnFilterBar.vue +153 -152
  50. package/src/components/CnFilterBar/index.js +1 -1
  51. package/src/components/CnFormDialog/CnFormDialog.vue +1047 -0
  52. package/src/components/CnFormDialog/index.js +1 -0
  53. package/src/components/CnIcon/CnIcon.vue +89 -0
  54. package/src/components/CnIcon/index.js +1 -0
  55. package/src/components/CnIndexPage/CnIndexPage.vue +980 -682
  56. package/src/components/CnIndexPage/index.js +1 -1
  57. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +536 -0
  58. package/src/components/CnIndexSidebar/index.js +1 -0
  59. package/src/components/CnInfoWidget/CnInfoWidget.vue +219 -0
  60. package/src/components/CnInfoWidget/index.js +1 -0
  61. package/src/components/CnItemCard/CnItemCard.vue +134 -0
  62. package/src/components/CnItemCard/index.js +1 -0
  63. package/src/components/CnJsonViewer/CnJsonViewer.vue +312 -0
  64. package/src/components/CnJsonViewer/index.js +1 -0
  65. package/src/components/CnKpiGrid/CnKpiGrid.vue +93 -89
  66. package/src/components/CnKpiGrid/index.js +1 -1
  67. package/src/components/CnMassActionBar/CnMassActionBar.vue +161 -160
  68. package/src/components/CnMassActionBar/index.js +1 -1
  69. package/src/components/CnMassCopyDialog/CnMassCopyDialog.vue +327 -320
  70. package/src/components/CnMassCopyDialog/index.js +1 -1
  71. package/src/components/CnMassDeleteDialog/CnMassDeleteDialog.vue +245 -238
  72. package/src/components/CnMassDeleteDialog/index.js +1 -1
  73. package/src/components/CnMassExportDialog/CnMassExportDialog.vue +191 -190
  74. package/src/components/CnMassExportDialog/index.js +1 -1
  75. package/src/components/CnMassImportDialog/CnMassImportDialog.vue +494 -491
  76. package/src/components/CnMassImportDialog/index.js +1 -1
  77. package/src/components/CnNoteCard/CnNoteCard.vue +149 -0
  78. package/src/components/CnNoteCard/index.js +1 -0
  79. package/src/components/CnNotesCard/CnNotesCard.vue +416 -0
  80. package/src/components/CnNotesCard/index.js +1 -0
  81. package/src/components/CnObjectCard/CnObjectCard.vue +294 -292
  82. package/src/components/CnObjectCard/index.js +1 -1
  83. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +854 -0
  84. package/src/components/CnObjectDataWidget/index.js +1 -0
  85. package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +289 -0
  86. package/src/components/CnObjectMetadataWidget/index.js +1 -0
  87. package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +369 -0
  88. package/src/components/CnObjectSidebar/CnFilesTab.vue +287 -0
  89. package/src/components/CnObjectSidebar/CnNotesTab.vue +250 -0
  90. package/src/components/CnObjectSidebar/CnObjectSidebar.vue +255 -0
  91. package/src/components/CnObjectSidebar/CnTagsTab.vue +259 -0
  92. package/src/components/CnObjectSidebar/CnTasksTab.vue +483 -0
  93. package/src/components/CnObjectSidebar/index.js +6 -0
  94. package/src/components/CnPageHeader/CnPageHeader.vue +61 -0
  95. package/src/components/CnPageHeader/index.js +1 -0
  96. package/src/components/CnPagination/CnPagination.vue +253 -252
  97. package/src/components/CnPagination/index.js +1 -1
  98. package/src/components/CnProgressBar/CnProgressBar.vue +262 -0
  99. package/src/components/CnProgressBar/index.js +1 -0
  100. package/src/components/CnRegisterMapping/CnRegisterMapping.vue +793 -0
  101. package/src/components/CnRegisterMapping/index.js +1 -0
  102. package/src/components/CnRowActions/CnRowActions.vue +95 -73
  103. package/src/components/CnRowActions/index.js +1 -1
  104. package/src/components/CnSchemaFormDialog/CnSchemaConfigurationTab.vue +226 -0
  105. package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +788 -0
  106. package/src/components/CnSchemaFormDialog/CnSchemaPropertiesTab.vue +305 -0
  107. package/src/components/CnSchemaFormDialog/CnSchemaPropertyActions.vue +1398 -0
  108. package/src/components/CnSchemaFormDialog/CnSchemaSecurityTab.vue +236 -0
  109. package/src/components/CnSchemaFormDialog/index.js +1 -0
  110. package/src/components/CnSettingsCard/CnSettingsCard.vue +92 -92
  111. package/src/components/CnSettingsCard/index.js +1 -1
  112. package/src/components/CnSettingsSection/CnSettingsSection.vue +267 -266
  113. package/src/components/CnSettingsSection/index.js +1 -1
  114. package/src/components/CnStatsBlock/CnStatsBlock.vue +437 -366
  115. package/src/components/CnStatsBlock/index.js +1 -1
  116. package/src/components/CnStatsPanel/CnStatsPanel.vue +321 -0
  117. package/src/components/CnStatsPanel/index.js +1 -0
  118. package/src/components/CnStatusBadge/CnStatusBadge.vue +90 -77
  119. package/src/components/CnStatusBadge/index.js +1 -1
  120. package/src/components/CnTabbedFormDialog/CnTabbedFormDialog.vue +545 -0
  121. package/src/components/CnTabbedFormDialog/index.js +1 -0
  122. package/src/components/CnTableWidget/CnTableWidget.vue +333 -0
  123. package/src/components/CnTableWidget/index.js +1 -0
  124. package/src/components/CnTasksCard/CnTasksCard.vue +374 -0
  125. package/src/components/CnTasksCard/index.js +1 -0
  126. package/src/components/CnTileWidget/CnTileWidget.vue +159 -0
  127. package/src/components/CnTileWidget/index.js +1 -0
  128. package/src/components/CnTimelineStages/CnTimelineStages.vue +294 -0
  129. package/src/components/CnTimelineStages/index.js +1 -0
  130. package/src/components/CnUserActionMenu/CnUserActionMenu.vue +436 -0
  131. package/src/components/CnUserActionMenu/index.js +1 -0
  132. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +313 -312
  133. package/src/components/CnVersionInfoCard/index.js +1 -1
  134. package/src/components/CnWidgetRenderer/CnWidgetRenderer.vue +180 -0
  135. package/src/components/CnWidgetRenderer/index.js +1 -0
  136. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +248 -0
  137. package/src/components/CnWidgetWrapper/index.js +1 -0
  138. package/src/components/index.js +57 -25
  139. package/src/composables/index.js +5 -3
  140. package/src/composables/useContextMenu.js +126 -0
  141. package/src/composables/useDashboardView.js +286 -0
  142. package/src/composables/useDetailView.js +290 -132
  143. package/src/composables/useListView.js +364 -153
  144. package/src/composables/useSubResource.js +142 -142
  145. package/src/constants/metadata.js +30 -0
  146. package/src/css/CnSchemaFormDialog.css +546 -0
  147. package/src/css/__sample_nextcloud_tokens.css +110 -0
  148. package/src/css/actions-bar.css +54 -0
  149. package/src/css/badge.css +83 -51
  150. package/src/css/card.css +129 -128
  151. package/src/css/context-menu.css +20 -0
  152. package/src/css/dashboard.css +70 -0
  153. package/src/css/detail-page.css +235 -0
  154. package/src/css/detail.css +68 -68
  155. package/src/css/index-page.css +44 -0
  156. package/src/css/index-sidebar.css +193 -0
  157. package/src/css/index.css +17 -8
  158. package/src/css/layout.css +90 -90
  159. package/src/css/page-header.css +35 -0
  160. package/src/css/pagination.css +72 -72
  161. package/src/css/table.css +142 -143
  162. package/src/css/timeline-stages.css +220 -0
  163. package/src/css/utilities.css +46 -46
  164. package/src/index.js +95 -50
  165. package/src/l10n/index.js +12 -0
  166. package/src/mixins/gridLayout.js +118 -0
  167. package/src/store/createCrudStore.d.ts +350 -0
  168. package/src/store/createCrudStore.js +413 -0
  169. package/src/store/createSubResourcePlugin.js +125 -135
  170. package/src/store/index.js +4 -3
  171. package/src/store/pluginMerge.js +55 -0
  172. package/src/store/plugins/auditTrails.js +357 -17
  173. package/src/store/plugins/files.js +250 -186
  174. package/src/store/plugins/index.js +8 -4
  175. package/src/store/plugins/lifecycle.js +180 -180
  176. package/src/store/plugins/logs.d.ts +22 -0
  177. package/src/store/plugins/logs.js +172 -0
  178. package/src/store/plugins/registerMapping.js +195 -0
  179. package/src/store/plugins/relations.js +68 -68
  180. package/src/store/plugins/search.js +385 -0
  181. package/src/store/plugins/selection.js +104 -0
  182. package/src/store/useObjectStore.js +793 -625
  183. package/src/types/auditTrail.d.ts +32 -32
  184. package/src/types/file.d.ts +23 -23
  185. package/src/types/index.d.ts +67 -35
  186. package/src/types/notification.d.ts +36 -36
  187. package/src/types/object.d.ts +40 -40
  188. package/src/types/organisation.d.ts +41 -41
  189. package/src/types/register.d.ts +25 -25
  190. package/src/types/schema.d.ts +39 -39
  191. package/src/types/shared.d.ts +79 -79
  192. package/src/types/source.d.ts +14 -14
  193. package/src/types/task.d.ts +31 -31
  194. package/src/utils/errors.js +96 -96
  195. package/src/utils/getTheme.js +9 -0
  196. package/src/utils/headers.js +80 -44
  197. package/src/utils/id.js +13 -0
  198. package/src/utils/index.js +4 -3
  199. package/src/utils/schema.js +423 -287
  200. package/src/utils/widgetVisibility.js +162 -0
  201. package/src/components/CnDetailViewLayout/CnDetailViewLayout.vue +0 -88
  202. package/src/components/CnDetailViewLayout/index.js +0 -1
  203. package/src/components/CnEmptyState/CnEmptyState.vue +0 -78
  204. package/src/components/CnEmptyState/index.js +0 -1
  205. package/src/components/CnListViewLayout/CnListViewLayout.vue +0 -80
  206. package/src/components/CnListViewLayout/index.js +0 -1
  207. package/src/components/CnViewModeToggle/CnViewModeToggle.vue +0 -77
  208. package/src/components/CnViewModeToggle/index.js +0 -1
@@ -1,190 +1,191 @@
1
- <template>
2
- <NcDialog
3
- :name="dialogTitle"
4
- size="small"
5
- :can-close="!loading"
6
- @closing="$emit('close')">
7
- <!-- Result phase -->
8
- <div v-if="result !== null" class="cn-mass-export__result">
9
- <NcNoteCard v-if="result.success" type="success">
10
- {{ successText }}
11
- </NcNoteCard>
12
- <NcNoteCard v-if="result.error" type="error">
13
- {{ result.error }}
14
- </NcNoteCard>
15
- </div>
16
-
17
- <!-- Form phase -->
18
- <div v-else class="cn-mass-export__form">
19
- <p v-if="description" class="cn-mass-export__description">
20
- {{ description }}
21
- </p>
22
-
23
- <div class="cn-mass-export__field">
24
- <label for="cn-mass-export-format">{{ formatLabel }}</label>
25
- <NcSelect
26
- input-id="cn-mass-export-format"
27
- :options="formatOptions"
28
- :value="selectedFormat"
29
- :clearable="false"
30
- @input="selectedFormat = $event" />
31
- </div>
32
- </div>
33
-
34
- <template #actions>
35
- <NcButton @click="$emit('close')">
36
- {{ result !== null ? closeLabel : cancelLabel }}
37
- </NcButton>
38
- <NcButton
39
- v-if="result === null"
40
- type="primary"
41
- :disabled="loading"
42
- @click="executeExport">
43
- <template #icon>
44
- <NcLoadingIcon v-if="loading" :size="20" />
45
- <ExportIcon v-else :size="20" />
46
- </template>
47
- {{ confirmLabel }}
48
- </NcButton>
49
- </template>
50
- </NcDialog>
51
- </template>
52
-
53
- <script>
54
- import { NcDialog, NcButton, NcNoteCard, NcLoadingIcon, NcSelect } from '@nextcloud/vue'
55
- import ExportIcon from 'vue-material-design-icons/Export.vue'
56
-
57
- /**
58
- * CnMassExportDialog — Export dialog with format selection.
59
- *
60
- * Allows users to select an export format and triggers the export.
61
- * The parent handles the actual download. Based on the OpenRegister
62
- * ExportRegister pattern.
63
- *
64
- * @example
65
- * <CnMassExportDialog
66
- * v-if="showExportDialog"
67
- * ref="exportDialog"
68
- * description="Export 42 objects from Cases"
69
- * @confirm="onExportConfirm"
70
- * @close="showExportDialog = false" />
71
- *
72
- * // In methods:
73
- * async onExportConfirm({ format }) {
74
- * try {
75
- * const response = await axios({
76
- * url: `/api/objects/export`,
77
- * method: 'GET',
78
- * params: { type: format },
79
- * responseType: 'blob',
80
- * })
81
- * // Trigger download...
82
- * this.$refs.exportDialog.setResult({ success: true })
83
- * } catch (e) {
84
- * this.$refs.exportDialog.setResult({ error: e.message })
85
- * }
86
- * }
87
- */
88
- export default {
89
- name: 'CnMassExportDialog',
90
-
91
- components: {
92
- NcDialog,
93
- NcButton,
94
- NcNoteCard,
95
- NcLoadingIcon,
96
- NcSelect,
97
- ExportIcon,
98
- },
99
-
100
- props: {
101
- /** Dialog title */
102
- dialogTitle: {
103
- type: String,
104
- default: 'Export Objects',
105
- },
106
- /** Description text shown above the format selector */
107
- description: {
108
- type: String,
109
- default: '',
110
- },
111
- /** Available export formats */
112
- formats: {
113
- type: Array,
114
- default: () => [
115
- { id: 'excel', label: 'Excel (.xlsx)' },
116
- { id: 'csv', label: 'CSV (.csv)' },
117
- ],
118
- },
119
- /** Default selected format ID */
120
- defaultFormat: {
121
- type: String,
122
- default: 'excel',
123
- },
124
- /** Success message */
125
- successText: {
126
- type: String,
127
- default: 'Export completed successfully.',
128
- },
129
- formatLabel: { type: String, default: 'Export format' },
130
- cancelLabel: { type: String, default: 'Cancel' },
131
- closeLabel: { type: String, default: 'Close' },
132
- confirmLabel: { type: String, default: 'Export' },
133
- },
134
-
135
- data() {
136
- const defaultOption = this.formats.find((f) => f.id === this.defaultFormat) || this.formats[0]
137
- return {
138
- selectedFormat: defaultOption,
139
- loading: false,
140
- result: null,
141
- closeTimeout: null,
142
- }
143
- },
144
-
145
- beforeDestroy() {
146
- if (this.closeTimeout) clearTimeout(this.closeTimeout)
147
- },
148
-
149
- methods: {
150
- executeExport() {
151
- this.loading = true
152
- this.$emit('confirm', {
153
- format: this.selectedFormat.id,
154
- })
155
- },
156
-
157
- /**
158
- * Set the result of the export operation.
159
- * @param {{ success?: boolean, error?: string }} resultData
160
- * @public
161
- */
162
- setResult(resultData) {
163
- this.loading = false
164
- this.result = resultData
165
- if (resultData.success) {
166
- this.closeTimeout = setTimeout(() => {
167
- this.$emit('close')
168
- }, 2000)
169
- }
170
- },
171
- },
172
- }
173
- </script>
174
-
175
- <style scoped>
176
- .cn-mass-export__description {
177
- margin-bottom: 16px;
178
- color: var(--color-text-maxcontrast);
179
- }
180
-
181
- .cn-mass-export__field {
182
- display: flex;
183
- flex-direction: column;
184
- gap: 4px;
185
- }
186
-
187
- .cn-mass-export__field label {
188
- font-weight: 600;
189
- }
190
- </style>
1
+ <template>
2
+ <NcDialog
3
+ :name="dialogTitle"
4
+ size="small"
5
+ :can-close="!loading"
6
+ @closing="$emit('close')">
7
+ <!-- Result phase -->
8
+ <div v-if="result !== null" class="cn-mass-export__result">
9
+ <NcNoteCard v-if="result.success" type="success">
10
+ {{ successText }}
11
+ </NcNoteCard>
12
+ <NcNoteCard v-if="result.error" type="error">
13
+ {{ result.error }}
14
+ </NcNoteCard>
15
+ </div>
16
+
17
+ <!-- Form phase -->
18
+ <div v-else class="cn-mass-export__form">
19
+ <p v-if="description" class="cn-mass-export__description">
20
+ {{ description }}
21
+ </p>
22
+
23
+ <div class="cn-mass-export__field">
24
+ <label for="cn-mass-export-format">{{ formatLabel }}</label>
25
+ <NcSelect
26
+ input-id="cn-mass-export-format"
27
+ :options="formatOptions"
28
+ :value="selectedFormat"
29
+ :clearable="false"
30
+ @input="selectedFormat = $event" />
31
+ </div>
32
+ </div>
33
+
34
+ <template #actions>
35
+ <NcButton @click="$emit('close')">
36
+ {{ result !== null ? closeLabel : cancelLabel }}
37
+ </NcButton>
38
+ <NcButton
39
+ v-if="result === null"
40
+ type="primary"
41
+ :disabled="loading"
42
+ @click="executeExport">
43
+ <template #icon>
44
+ <NcLoadingIcon v-if="loading" :size="20" />
45
+ <ExportIcon v-else :size="20" />
46
+ </template>
47
+ {{ confirmLabel }}
48
+ </NcButton>
49
+ </template>
50
+ </NcDialog>
51
+ </template>
52
+
53
+ <script>
54
+ import { translate as t } from '@nextcloud/l10n'
55
+ import { NcDialog, NcButton, NcNoteCard, NcLoadingIcon, NcSelect } from '@nextcloud/vue'
56
+ import ExportIcon from 'vue-material-design-icons/Export.vue'
57
+
58
+ /**
59
+ * CnMassExportDialog — Export dialog with format selection.
60
+ *
61
+ * Allows users to select an export format and triggers the export.
62
+ * The parent handles the actual download. Based on the OpenRegister
63
+ * ExportRegister pattern.
64
+ *
65
+ * @example
66
+ * <CnMassExportDialog
67
+ * v-if="showExportDialog"
68
+ * ref="exportDialog"
69
+ * description="Export 42 objects from Cases"
70
+ * @confirm="onExportConfirm"
71
+ * @close="showExportDialog = false" />
72
+ *
73
+ * // In methods:
74
+ * async onExportConfirm({ format }) {
75
+ * try {
76
+ * const response = await axios({
77
+ * url: `/api/objects/export`,
78
+ * method: 'GET',
79
+ * params: { type: format },
80
+ * responseType: 'blob',
81
+ * })
82
+ * // Trigger download...
83
+ * this.$refs.exportDialog.setResult({ success: true })
84
+ * } catch (e) {
85
+ * this.$refs.exportDialog.setResult({ error: e.message })
86
+ * }
87
+ * }
88
+ */
89
+ export default {
90
+ name: 'CnMassExportDialog',
91
+
92
+ components: {
93
+ NcDialog,
94
+ NcButton,
95
+ NcNoteCard,
96
+ NcLoadingIcon,
97
+ NcSelect,
98
+ ExportIcon,
99
+ },
100
+
101
+ props: {
102
+ /** Dialog title */
103
+ dialogTitle: {
104
+ type: String,
105
+ default: () => t('nextcloud-vue', 'Export objects'),
106
+ },
107
+ /** Description text shown above the format selector */
108
+ description: {
109
+ type: String,
110
+ default: '',
111
+ },
112
+ /** Available export formats */
113
+ formats: {
114
+ type: Array,
115
+ default: () => [
116
+ { id: 'excel', label: 'Excel (.xlsx)' },
117
+ { id: 'csv', label: 'CSV (.csv)' },
118
+ ],
119
+ },
120
+ /** Default selected format ID */
121
+ defaultFormat: {
122
+ type: String,
123
+ default: 'excel',
124
+ },
125
+ /** Success message */
126
+ successText: {
127
+ type: String,
128
+ default: () => t('nextcloud-vue', 'Export completed successfully.'),
129
+ },
130
+ formatLabel: { type: String, default: () => t('nextcloud-vue', 'Export format') },
131
+ cancelLabel: { type: String, default: () => t('nextcloud-vue', 'Cancel') },
132
+ closeLabel: { type: String, default: () => t('nextcloud-vue', 'Close') },
133
+ confirmLabel: { type: String, default: () => t('nextcloud-vue', 'Export') },
134
+ },
135
+
136
+ data() {
137
+ const defaultOption = this.formats.find((f) => f.id === this.defaultFormat) || this.formats[0]
138
+ return {
139
+ selectedFormat: defaultOption,
140
+ loading: false,
141
+ result: null,
142
+ closeTimeout: null,
143
+ }
144
+ },
145
+
146
+ beforeDestroy() {
147
+ if (this.closeTimeout) clearTimeout(this.closeTimeout)
148
+ },
149
+
150
+ methods: {
151
+ executeExport() {
152
+ this.loading = true
153
+ this.$emit('confirm', {
154
+ format: this.selectedFormat.id,
155
+ })
156
+ },
157
+
158
+ /**
159
+ * Set the result of the export operation.
160
+ * @param {{ success?: boolean, error?: string }} resultData - Result data to pass to the dialog
161
+ * @public
162
+ */
163
+ setResult(resultData) {
164
+ this.loading = false
165
+ this.result = resultData
166
+ if (resultData.success) {
167
+ this.closeTimeout = setTimeout(() => {
168
+ this.$emit('close')
169
+ }, 2000)
170
+ }
171
+ },
172
+ },
173
+ }
174
+ </script>
175
+
176
+ <style scoped>
177
+ .cn-mass-export__description {
178
+ margin-bottom: 16px;
179
+ color: var(--color-text-maxcontrast);
180
+ }
181
+
182
+ .cn-mass-export__field {
183
+ display: flex;
184
+ flex-direction: column;
185
+ gap: 4px;
186
+ }
187
+
188
+ .cn-mass-export__field label {
189
+ font-weight: 600;
190
+ }
191
+ </style>
@@ -1 +1 @@
1
- export { default as CnMassExportDialog } from './CnMassExportDialog.vue'
1
+ export { default as CnMassExportDialog } from './CnMassExportDialog.vue'