@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.
- package/README.md +226 -0
- package/css/index.css +5 -0
- package/dist/nextcloud-vue.cjs.js +79416 -7715
- package/dist/nextcloud-vue.cjs.js.map +1 -1
- package/dist/nextcloud-vue.css +3583 -504
- package/dist/nextcloud-vue.esm.js +79343 -7692
- package/dist/nextcloud-vue.esm.js.map +1 -1
- package/l10n/en.json +164 -0
- package/l10n/nl.json +164 -0
- package/package.json +104 -63
- package/src/components/CnActionsBar/CnActionsBar.vue +254 -0
- package/src/components/CnActionsBar/index.js +1 -0
- package/src/components/CnAdvancedFormDialog/CnAdvancedFormDialog.vue +570 -0
- package/src/components/CnAdvancedFormDialog/CnDataTab.vue +217 -0
- package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +121 -0
- package/src/components/CnAdvancedFormDialog/CnPropertiesTab.vue +422 -0
- package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +247 -0
- package/src/components/CnAdvancedFormDialog/index.js +1 -0
- package/src/components/CnCard/CnCard.vue +415 -0
- package/src/components/CnCard/index.js +1 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +156 -152
- package/src/components/CnCardGrid/index.js +1 -1
- package/src/components/CnCellRenderer/CnCellRenderer.vue +132 -132
- package/src/components/CnCellRenderer/index.js +1 -1
- package/src/components/CnChartWidget/CnChartWidget.vue +346 -0
- package/src/components/CnChartWidget/index.js +1 -0
- package/src/components/CnConfigurationCard/CnConfigurationCard.vue +77 -77
- package/src/components/CnConfigurationCard/index.js +1 -1
- package/src/components/CnContextMenu/CnContextMenu.vue +142 -0
- package/src/components/CnContextMenu/index.js +1 -0
- package/src/components/CnCopyDialog/CnCopyDialog.vue +266 -0
- package/src/components/CnCopyDialog/index.js +1 -0
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +229 -0
- package/src/components/CnDashboardGrid/index.js +1 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +397 -0
- package/src/components/CnDashboardPage/index.js +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +362 -354
- package/src/components/CnDataTable/index.js +1 -1
- package/src/components/CnDeleteDialog/CnDeleteDialog.vue +177 -0
- package/src/components/CnDeleteDialog/index.js +1 -0
- package/src/components/CnDetailCard/CnDetailCard.vue +225 -0
- package/src/components/CnDetailCard/index.js +1 -0
- package/src/components/CnDetailGrid/CnDetailGrid.vue +256 -0
- package/src/components/CnDetailGrid/index.js +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +432 -0
- package/src/components/CnDetailPage/index.js +1 -0
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +234 -223
- package/src/components/CnFacetSidebar/index.js +1 -1
- package/src/components/CnFilterBar/CnFilterBar.vue +153 -152
- package/src/components/CnFilterBar/index.js +1 -1
- package/src/components/CnFormDialog/CnFormDialog.vue +1047 -0
- package/src/components/CnFormDialog/index.js +1 -0
- package/src/components/CnIcon/CnIcon.vue +89 -0
- package/src/components/CnIcon/index.js +1 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +980 -682
- package/src/components/CnIndexPage/index.js +1 -1
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +536 -0
- package/src/components/CnIndexSidebar/index.js +1 -0
- package/src/components/CnInfoWidget/CnInfoWidget.vue +219 -0
- package/src/components/CnInfoWidget/index.js +1 -0
- package/src/components/CnItemCard/CnItemCard.vue +134 -0
- package/src/components/CnItemCard/index.js +1 -0
- package/src/components/CnJsonViewer/CnJsonViewer.vue +312 -0
- package/src/components/CnJsonViewer/index.js +1 -0
- package/src/components/CnKpiGrid/CnKpiGrid.vue +93 -89
- package/src/components/CnKpiGrid/index.js +1 -1
- package/src/components/CnMassActionBar/CnMassActionBar.vue +161 -160
- package/src/components/CnMassActionBar/index.js +1 -1
- package/src/components/CnMassCopyDialog/CnMassCopyDialog.vue +327 -320
- package/src/components/CnMassCopyDialog/index.js +1 -1
- package/src/components/CnMassDeleteDialog/CnMassDeleteDialog.vue +245 -238
- package/src/components/CnMassDeleteDialog/index.js +1 -1
- package/src/components/CnMassExportDialog/CnMassExportDialog.vue +191 -190
- package/src/components/CnMassExportDialog/index.js +1 -1
- package/src/components/CnMassImportDialog/CnMassImportDialog.vue +494 -491
- package/src/components/CnMassImportDialog/index.js +1 -1
- package/src/components/CnNoteCard/CnNoteCard.vue +149 -0
- package/src/components/CnNoteCard/index.js +1 -0
- package/src/components/CnNotesCard/CnNotesCard.vue +416 -0
- package/src/components/CnNotesCard/index.js +1 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +294 -292
- package/src/components/CnObjectCard/index.js +1 -1
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +854 -0
- package/src/components/CnObjectDataWidget/index.js +1 -0
- package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +289 -0
- package/src/components/CnObjectMetadataWidget/index.js +1 -0
- package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +369 -0
- package/src/components/CnObjectSidebar/CnFilesTab.vue +287 -0
- package/src/components/CnObjectSidebar/CnNotesTab.vue +250 -0
- package/src/components/CnObjectSidebar/CnObjectSidebar.vue +255 -0
- package/src/components/CnObjectSidebar/CnTagsTab.vue +259 -0
- package/src/components/CnObjectSidebar/CnTasksTab.vue +483 -0
- package/src/components/CnObjectSidebar/index.js +6 -0
- package/src/components/CnPageHeader/CnPageHeader.vue +61 -0
- package/src/components/CnPageHeader/index.js +1 -0
- package/src/components/CnPagination/CnPagination.vue +253 -252
- package/src/components/CnPagination/index.js +1 -1
- package/src/components/CnProgressBar/CnProgressBar.vue +262 -0
- package/src/components/CnProgressBar/index.js +1 -0
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +793 -0
- package/src/components/CnRegisterMapping/index.js +1 -0
- package/src/components/CnRowActions/CnRowActions.vue +95 -73
- package/src/components/CnRowActions/index.js +1 -1
- package/src/components/CnSchemaFormDialog/CnSchemaConfigurationTab.vue +226 -0
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +788 -0
- package/src/components/CnSchemaFormDialog/CnSchemaPropertiesTab.vue +305 -0
- package/src/components/CnSchemaFormDialog/CnSchemaPropertyActions.vue +1398 -0
- package/src/components/CnSchemaFormDialog/CnSchemaSecurityTab.vue +236 -0
- package/src/components/CnSchemaFormDialog/index.js +1 -0
- package/src/components/CnSettingsCard/CnSettingsCard.vue +92 -92
- package/src/components/CnSettingsCard/index.js +1 -1
- package/src/components/CnSettingsSection/CnSettingsSection.vue +267 -266
- package/src/components/CnSettingsSection/index.js +1 -1
- package/src/components/CnStatsBlock/CnStatsBlock.vue +437 -366
- package/src/components/CnStatsBlock/index.js +1 -1
- package/src/components/CnStatsPanel/CnStatsPanel.vue +321 -0
- package/src/components/CnStatsPanel/index.js +1 -0
- package/src/components/CnStatusBadge/CnStatusBadge.vue +90 -77
- package/src/components/CnStatusBadge/index.js +1 -1
- package/src/components/CnTabbedFormDialog/CnTabbedFormDialog.vue +545 -0
- package/src/components/CnTabbedFormDialog/index.js +1 -0
- package/src/components/CnTableWidget/CnTableWidget.vue +333 -0
- package/src/components/CnTableWidget/index.js +1 -0
- package/src/components/CnTasksCard/CnTasksCard.vue +374 -0
- package/src/components/CnTasksCard/index.js +1 -0
- package/src/components/CnTileWidget/CnTileWidget.vue +159 -0
- package/src/components/CnTileWidget/index.js +1 -0
- package/src/components/CnTimelineStages/CnTimelineStages.vue +294 -0
- package/src/components/CnTimelineStages/index.js +1 -0
- package/src/components/CnUserActionMenu/CnUserActionMenu.vue +436 -0
- package/src/components/CnUserActionMenu/index.js +1 -0
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +313 -312
- package/src/components/CnVersionInfoCard/index.js +1 -1
- package/src/components/CnWidgetRenderer/CnWidgetRenderer.vue +180 -0
- package/src/components/CnWidgetRenderer/index.js +1 -0
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +248 -0
- package/src/components/CnWidgetWrapper/index.js +1 -0
- package/src/components/index.js +57 -25
- package/src/composables/index.js +5 -3
- package/src/composables/useContextMenu.js +126 -0
- package/src/composables/useDashboardView.js +286 -0
- package/src/composables/useDetailView.js +290 -132
- package/src/composables/useListView.js +364 -153
- package/src/composables/useSubResource.js +142 -142
- package/src/constants/metadata.js +30 -0
- package/src/css/CnSchemaFormDialog.css +546 -0
- package/src/css/__sample_nextcloud_tokens.css +110 -0
- package/src/css/actions-bar.css +54 -0
- package/src/css/badge.css +83 -51
- package/src/css/card.css +129 -128
- package/src/css/context-menu.css +20 -0
- package/src/css/dashboard.css +70 -0
- package/src/css/detail-page.css +235 -0
- package/src/css/detail.css +68 -68
- package/src/css/index-page.css +44 -0
- package/src/css/index-sidebar.css +193 -0
- package/src/css/index.css +17 -8
- package/src/css/layout.css +90 -90
- package/src/css/page-header.css +35 -0
- package/src/css/pagination.css +72 -72
- package/src/css/table.css +142 -143
- package/src/css/timeline-stages.css +220 -0
- package/src/css/utilities.css +46 -46
- package/src/index.js +95 -50
- package/src/l10n/index.js +12 -0
- package/src/mixins/gridLayout.js +118 -0
- package/src/store/createCrudStore.d.ts +350 -0
- package/src/store/createCrudStore.js +413 -0
- package/src/store/createSubResourcePlugin.js +125 -135
- package/src/store/index.js +4 -3
- package/src/store/pluginMerge.js +55 -0
- package/src/store/plugins/auditTrails.js +357 -17
- package/src/store/plugins/files.js +250 -186
- package/src/store/plugins/index.js +8 -4
- package/src/store/plugins/lifecycle.js +180 -180
- package/src/store/plugins/logs.d.ts +22 -0
- package/src/store/plugins/logs.js +172 -0
- package/src/store/plugins/registerMapping.js +195 -0
- package/src/store/plugins/relations.js +68 -68
- package/src/store/plugins/search.js +385 -0
- package/src/store/plugins/selection.js +104 -0
- package/src/store/useObjectStore.js +793 -625
- package/src/types/auditTrail.d.ts +32 -32
- package/src/types/file.d.ts +23 -23
- package/src/types/index.d.ts +67 -35
- package/src/types/notification.d.ts +36 -36
- package/src/types/object.d.ts +40 -40
- package/src/types/organisation.d.ts +41 -41
- package/src/types/register.d.ts +25 -25
- package/src/types/schema.d.ts +39 -39
- package/src/types/shared.d.ts +79 -79
- package/src/types/source.d.ts +14 -14
- package/src/types/task.d.ts +31 -31
- package/src/utils/errors.js +96 -96
- package/src/utils/getTheme.js +9 -0
- package/src/utils/headers.js +80 -44
- package/src/utils/id.js +13 -0
- package/src/utils/index.js +4 -3
- package/src/utils/schema.js +423 -287
- package/src/utils/widgetVisibility.js +162 -0
- package/src/components/CnDetailViewLayout/CnDetailViewLayout.vue +0 -88
- package/src/components/CnDetailViewLayout/index.js +0 -1
- package/src/components/CnEmptyState/CnEmptyState.vue +0 -78
- package/src/components/CnEmptyState/index.js +0 -1
- package/src/components/CnListViewLayout/CnListViewLayout.vue +0 -80
- package/src/components/CnListViewLayout/index.js +0 -1
- package/src/components/CnViewModeToggle/CnViewModeToggle.vue +0 -77
- package/src/components/CnViewModeToggle/index.js +0 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { buildHeaders, prefixUrl } from '../../utils/headers.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Register mapping plugin for the object store.
|
|
5
|
+
*
|
|
6
|
+
* Adds state and actions for fetching OpenRegister registers and their
|
|
7
|
+
* schemas, used by CnRegisterMapping to populate dropdowns.
|
|
8
|
+
*
|
|
9
|
+
* State: registers, registerSchemas, registersLoading, registersError
|
|
10
|
+
* Actions: fetchRegisters, fetchSchemasForRegister, clearRegisterMapping
|
|
11
|
+
* Getters: getRegisters, registerOptions, schemaOptions, isRegistersLoading, getRegistersError
|
|
12
|
+
*
|
|
13
|
+
* @return {Function} Plugin factory
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const useStore = createObjectStore('object', {
|
|
17
|
+
* plugins: [registerMappingPlugin()],
|
|
18
|
+
* })
|
|
19
|
+
* const store = useStore()
|
|
20
|
+
* await store.fetchRegisters()
|
|
21
|
+
* const options = store.registerOptions // [{ label, value }]
|
|
22
|
+
* const schemas = store.schemaOptions('5') // [{ label, value }]
|
|
23
|
+
*/
|
|
24
|
+
export function registerMappingPlugin() {
|
|
25
|
+
return {
|
|
26
|
+
name: 'RegisterMapping',
|
|
27
|
+
|
|
28
|
+
state: () => ({
|
|
29
|
+
/** @type {Array} All available registers from OpenRegister */
|
|
30
|
+
registers: [],
|
|
31
|
+
/** @type {{[key: string]: Array}} Schemas keyed by register ID */
|
|
32
|
+
registerSchemas: {},
|
|
33
|
+
/** @type {boolean} Whether registers are being fetched */
|
|
34
|
+
registersLoading: false,
|
|
35
|
+
/** @type {string|null} Error message from last fetch */
|
|
36
|
+
registersError: null,
|
|
37
|
+
}),
|
|
38
|
+
|
|
39
|
+
getters: {
|
|
40
|
+
/**
|
|
41
|
+
* @param {object} state - Pinia state
|
|
42
|
+
* @return {Array} Raw register list
|
|
43
|
+
*/
|
|
44
|
+
getRegisters: (state) => state.registers,
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {object} state - Pinia state
|
|
48
|
+
* @return {boolean} Whether registers are loading
|
|
49
|
+
*/
|
|
50
|
+
isRegistersLoading: (state) => state.registersLoading,
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @param {object} state - Pinia state
|
|
54
|
+
* @return {string|null} Last error
|
|
55
|
+
*/
|
|
56
|
+
getRegistersError: (state) => state.registersError,
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Registers as NcSelect-compatible options.
|
|
60
|
+
*
|
|
61
|
+
* @param {object} state - Pinia state
|
|
62
|
+
* @return {Array<{label: string, value: string}>}
|
|
63
|
+
*/
|
|
64
|
+
registerOptions: (state) => state.registers.map((r) => ({
|
|
65
|
+
label: r.title || r.slug || `Register ${r.id}`,
|
|
66
|
+
value: String(r.id),
|
|
67
|
+
})),
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
actions: {
|
|
71
|
+
/**
|
|
72
|
+
* Get schemas for a register as NcSelect options.
|
|
73
|
+
*
|
|
74
|
+
* @param {string|number} registerId Register ID
|
|
75
|
+
* @return {Array<{label: string, value: string}>}
|
|
76
|
+
*/
|
|
77
|
+
schemaOptions(registerId) {
|
|
78
|
+
const id = String(registerId)
|
|
79
|
+
return (this.registerSchemas[id] || []).map((s) => ({
|
|
80
|
+
label: s.title || s.slug || `Schema ${s.id}`,
|
|
81
|
+
value: String(s.id),
|
|
82
|
+
}))
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Fetch all registers from OpenRegister with expanded schemas.
|
|
87
|
+
*
|
|
88
|
+
* @param {boolean} [withSchemas] Include schemas in response
|
|
89
|
+
* @return {Promise<Array>} Fetched registers
|
|
90
|
+
*/
|
|
91
|
+
async fetchRegisters(withSchemas = true) {
|
|
92
|
+
this.registersLoading = true
|
|
93
|
+
this.registersError = null
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
let url = prefixUrl('/apps/openregister/api/registers')
|
|
97
|
+
if (withSchemas) {
|
|
98
|
+
url += '?_extend[]=schemas'
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const response = await fetch(url, {
|
|
102
|
+
method: 'GET',
|
|
103
|
+
headers: buildHeaders(),
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
this.registersError = `Failed to fetch registers: ${response.statusText}`
|
|
108
|
+
return []
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const data = await response.json()
|
|
112
|
+
const results = data.results || data
|
|
113
|
+
this.registers = Array.isArray(results) ? results : []
|
|
114
|
+
|
|
115
|
+
// Cache expanded schemas by register ID
|
|
116
|
+
if (withSchemas) {
|
|
117
|
+
for (const reg of this.registers) {
|
|
118
|
+
if (Array.isArray(reg.schemas) && reg.schemas.length > 0) {
|
|
119
|
+
this.registerSchemas = {
|
|
120
|
+
...this.registerSchemas,
|
|
121
|
+
[String(reg.id)]: reg.schemas.filter(
|
|
122
|
+
(s) => s && typeof s === 'object' && s.id,
|
|
123
|
+
),
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return this.registers
|
|
130
|
+
} catch (error) {
|
|
131
|
+
this.registersError = error.message || 'Network error fetching registers'
|
|
132
|
+
return []
|
|
133
|
+
} finally {
|
|
134
|
+
this.registersLoading = false
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Fetch schemas for a specific register.
|
|
140
|
+
* Returns cached data if already fetched via expanded registers.
|
|
141
|
+
*
|
|
142
|
+
* @param {string|number} registerId Register ID
|
|
143
|
+
* @return {Promise<Array>} Schemas for the register
|
|
144
|
+
*/
|
|
145
|
+
async fetchSchemasForRegister(registerId) {
|
|
146
|
+
const id = String(registerId)
|
|
147
|
+
|
|
148
|
+
// Return cached if available and non-empty
|
|
149
|
+
if (this.registerSchemas[id]?.length > 0) {
|
|
150
|
+
return this.registerSchemas[id]
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Check registers array for expanded schemas
|
|
154
|
+
const register = this.registers.find((r) => String(r.id) === id)
|
|
155
|
+
if (register?.schemas?.length > 0) {
|
|
156
|
+
const schemas = register.schemas.filter(
|
|
157
|
+
(s) => s && typeof s === 'object' && s.id,
|
|
158
|
+
)
|
|
159
|
+
if (schemas.length > 0) {
|
|
160
|
+
this.registerSchemas = { ...this.registerSchemas, [id]: schemas }
|
|
161
|
+
return schemas
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Fetch from API as fallback
|
|
166
|
+
try {
|
|
167
|
+
const response = await fetch(
|
|
168
|
+
prefixUrl(`/apps/openregister/api/registers/${id}?_extend[]=schemas`),
|
|
169
|
+
{ method: 'GET', headers: buildHeaders() },
|
|
170
|
+
)
|
|
171
|
+
if (!response.ok) return []
|
|
172
|
+
|
|
173
|
+
const data = await response.json()
|
|
174
|
+
const schemas = (data.schemas || []).filter(
|
|
175
|
+
(s) => s && typeof s === 'object' && s.id,
|
|
176
|
+
)
|
|
177
|
+
this.registerSchemas = { ...this.registerSchemas, [id]: schemas }
|
|
178
|
+
return schemas
|
|
179
|
+
} catch {
|
|
180
|
+
return []
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Clear all register mapping state.
|
|
186
|
+
*/
|
|
187
|
+
clearRegisterMapping() {
|
|
188
|
+
this.registers = []
|
|
189
|
+
this.registerSchemas = {}
|
|
190
|
+
this.registersLoading = false
|
|
191
|
+
this.registersError = null
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import { createSubResourcePlugin } from '../createSubResourcePlugin.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Relations plugin for the object store.
|
|
5
|
-
*
|
|
6
|
-
* Adds three sub-resources for object relations:
|
|
7
|
-
* - contracts: contractual relations between objects
|
|
8
|
-
* - uses: outgoing references (this object uses other objects)
|
|
9
|
-
* - used: incoming references (other objects use this object)
|
|
10
|
-
*
|
|
11
|
-
* Each sub-resource gets its own state, loading, error, fetch, and clear.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
const contractsBase = createSubResourcePlugin('contracts', 'contracts')
|
|
15
|
-
const usesBase = createSubResourcePlugin('uses', 'uses')
|
|
16
|
-
const usedBase = createSubResourcePlugin('used', 'used')
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Combined relations plugin that registers contracts, uses, and used sub-resources.
|
|
20
|
-
*
|
|
21
|
-
* @param {object} [options
|
|
22
|
-
* @return {Function} Plugin factory
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* const useStore = createObjectStore('object', {
|
|
26
|
-
* plugins: [relationsPlugin()],
|
|
27
|
-
* })
|
|
28
|
-
* const store = useStore()
|
|
29
|
-
* await store.fetchContracts('case', caseId)
|
|
30
|
-
* await store.fetchUses('case', caseId)
|
|
31
|
-
* await store.fetchUsed('case', caseId)
|
|
32
|
-
*/
|
|
33
|
-
export function relationsPlugin(options = {}) {
|
|
34
|
-
const contracts = contractsBase(options)
|
|
35
|
-
const uses = usesBase(options)
|
|
36
|
-
const used = usedBase(options)
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
name: 'Relations',
|
|
40
|
-
|
|
41
|
-
state: () => ({
|
|
42
|
-
...contracts.state(),
|
|
43
|
-
...uses.state(),
|
|
44
|
-
...used.state(),
|
|
45
|
-
}),
|
|
46
|
-
|
|
47
|
-
getters: {
|
|
48
|
-
...contracts.getters,
|
|
49
|
-
...uses.getters,
|
|
50
|
-
...used.getters,
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
actions: {
|
|
54
|
-
...contracts.actions,
|
|
55
|
-
...uses.actions,
|
|
56
|
-
...used.actions,
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Clear all relation sub-resources.
|
|
60
|
-
*/
|
|
61
|
-
clearRelations() {
|
|
62
|
-
this.clearContracts()
|
|
63
|
-
this.clearUses()
|
|
64
|
-
this.clearUsed()
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
}
|
|
68
|
-
}
|
|
1
|
+
import { createSubResourcePlugin } from '../createSubResourcePlugin.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Relations plugin for the object store.
|
|
5
|
+
*
|
|
6
|
+
* Adds three sub-resources for object relations:
|
|
7
|
+
* - contracts: contractual relations between objects
|
|
8
|
+
* - uses: outgoing references (this object uses other objects)
|
|
9
|
+
* - used: incoming references (other objects use this object)
|
|
10
|
+
*
|
|
11
|
+
* Each sub-resource gets its own state, loading, error, fetch, and clear.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const contractsBase = createSubResourcePlugin('contracts', 'contracts')
|
|
15
|
+
const usesBase = createSubResourcePlugin('uses', 'uses')
|
|
16
|
+
const usedBase = createSubResourcePlugin('used', 'used')
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Combined relations plugin that registers contracts, uses, and used sub-resources.
|
|
20
|
+
*
|
|
21
|
+
* @param {object} [options] Plugin options
|
|
22
|
+
* @return {Function} Plugin factory
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* const useStore = createObjectStore('object', {
|
|
26
|
+
* plugins: [relationsPlugin()],
|
|
27
|
+
* })
|
|
28
|
+
* const store = useStore()
|
|
29
|
+
* await store.fetchContracts('case', caseId)
|
|
30
|
+
* await store.fetchUses('case', caseId)
|
|
31
|
+
* await store.fetchUsed('case', caseId)
|
|
32
|
+
*/
|
|
33
|
+
export function relationsPlugin(options = {}) {
|
|
34
|
+
const contracts = contractsBase(options)
|
|
35
|
+
const uses = usesBase(options)
|
|
36
|
+
const used = usedBase(options)
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
name: 'Relations',
|
|
40
|
+
|
|
41
|
+
state: () => ({
|
|
42
|
+
...contracts.state(),
|
|
43
|
+
...uses.state(),
|
|
44
|
+
...used.state(),
|
|
45
|
+
}),
|
|
46
|
+
|
|
47
|
+
getters: {
|
|
48
|
+
...contracts.getters,
|
|
49
|
+
...uses.getters,
|
|
50
|
+
...used.getters,
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
actions: {
|
|
54
|
+
...contracts.actions,
|
|
55
|
+
...uses.actions,
|
|
56
|
+
...used.actions,
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Clear all relation sub-resources.
|
|
60
|
+
*/
|
|
61
|
+
clearRelations() {
|
|
62
|
+
this.clearContracts()
|
|
63
|
+
this.clearUses()
|
|
64
|
+
this.clearUsed()
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
}
|
|
68
|
+
}
|