@conduction/nextcloud-vue 0.1.0-beta.2 → 0.1.0-beta.4
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 -226
- package/css/index.css +5 -0
- package/dist/nextcloud-vue.cjs.js +60455 -8755
- package/dist/nextcloud-vue.cjs.js.map +1 -1
- package/dist/nextcloud-vue.css +2062 -528
- package/dist/nextcloud-vue.esm.js +60411 -8731
- package/dist/nextcloud-vue.esm.js.map +1 -1
- package/package.json +75 -61
- package/src/components/CnActionsBar/CnActionsBar.vue +235 -225
- package/src/components/CnActionsBar/index.js +1 -1
- package/src/components/CnAdvancedFormDialog/CnAdvancedFormDialog.vue +579 -0
- package/src/components/CnAdvancedFormDialog/CnDataTab.vue +217 -0
- package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +121 -0
- package/src/components/CnAdvancedFormDialog/CnPropertiesTab.vue +418 -0
- package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +247 -0
- package/src/components/CnAdvancedFormDialog/index.js +1 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +152 -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 +320 -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/CnDashboardGrid/CnDashboardGrid.vue +225 -0
- package/src/components/CnDashboardGrid/index.js +1 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +390 -0
- package/src/components/CnDashboardPage/index.js +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +349 -349
- package/src/components/CnDataTable/index.js +1 -1
- package/src/components/CnDetailCard/CnDetailCard.vue +214 -0
- package/src/components/CnDetailCard/index.js +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +281 -0
- package/src/components/CnDetailPage/index.js +1 -0
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +231 -223
- package/src/components/CnFacetSidebar/index.js +1 -1
- package/src/components/CnFilterBar/CnFilterBar.vue +152 -152
- package/src/components/CnFilterBar/index.js +1 -1
- package/src/components/CnIcon/CnIcon.vue +89 -89
- package/src/components/CnIcon/index.js +1 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +874 -816
- package/src/components/CnIndexPage/index.js +1 -1
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +503 -484
- package/src/components/CnIndexSidebar/index.js +1 -1
- package/src/components/CnItemCard/CnItemCard.vue +132 -0
- package/src/components/CnItemCard/index.js +1 -0
- package/src/components/CnKpiGrid/CnKpiGrid.vue +89 -89
- package/src/components/CnKpiGrid/index.js +1 -1
- package/src/components/CnMassActionBar/CnMassActionBar.vue +160 -160
- package/src/components/CnMassActionBar/index.js +1 -1
- package/src/components/CnMassCopyDialog/CnMassCopyDialog.vue +320 -320
- package/src/components/CnMassCopyDialog/index.js +1 -1
- package/src/components/CnMassDeleteDialog/CnMassDeleteDialog.vue +238 -238
- package/src/components/CnMassDeleteDialog/index.js +1 -1
- package/src/components/CnMassExportDialog/CnMassExportDialog.vue +190 -190
- package/src/components/CnMassExportDialog/index.js +1 -1
- package/src/components/CnMassImportDialog/CnMassImportDialog.vue +491 -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 +413 -0
- package/src/components/CnNotesCard/index.js +1 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +292 -292
- package/src/components/CnObjectCard/index.js +1 -1
- package/src/components/CnObjectSidebar/CnObjectSidebar.vue +876 -0
- package/src/components/CnObjectSidebar/index.js +1 -0
- package/src/components/CnPageHeader/CnPageHeader.vue +57 -57
- package/src/components/CnPageHeader/index.js +1 -1
- package/src/components/CnPagination/CnPagination.vue +252 -252
- package/src/components/CnPagination/index.js +1 -1
- package/src/components/CnRowActions/CnRowActions.vue +73 -73
- package/src/components/CnRowActions/index.js +1 -1
- package/src/components/CnSchemaFormDialog/CnSchemaConfigurationTab.vue +226 -0
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +787 -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 +266 -266
- package/src/components/CnSettingsSection/index.js +1 -1
- package/src/components/CnStatsBlock/CnStatsBlock.vue +420 -366
- package/src/components/CnStatsBlock/index.js +1 -1
- package/src/components/CnStatusBadge/CnStatusBadge.vue +77 -77
- package/src/components/CnStatusBadge/index.js +1 -1
- package/src/components/CnTabbedFormDialog/CnTabbedFormDialog.vue +540 -0
- package/src/components/CnTabbedFormDialog/index.js +1 -0
- package/src/components/CnTasksCard/CnTasksCard.vue +373 -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 +292 -0
- package/src/components/CnTimelineStages/index.js +1 -0
- package/src/components/CnUserActionMenu/CnUserActionMenu.vue +435 -0
- package/src/components/CnUserActionMenu/index.js +1 -0
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +312 -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 +211 -0
- package/src/components/CnWidgetWrapper/index.js +1 -0
- package/src/components/index.js +43 -29
- package/src/composables/index.js +4 -3
- package/src/composables/useDashboardView.js +240 -0
- package/src/composables/useDetailView.js +289 -132
- package/src/composables/useListView.js +363 -153
- package/src/composables/useSubResource.js +142 -142
- package/src/constants/metadata.js +30 -30
- package/src/css/CnSchemaFormDialog.css +546 -0
- package/src/css/__sample_nextcloud_tokens.css +110 -0
- package/src/css/actions-bar.css +48 -48
- package/src/css/badge.css +51 -51
- package/src/css/card.css +128 -128
- package/src/css/dashboard.css +70 -0
- package/src/css/detail-page.css +168 -0
- package/src/css/detail.css +68 -68
- package/src/css/index-page.css +44 -32
- package/src/css/index-sidebar.css +193 -187
- package/src/css/index.css +16 -12
- package/src/css/layout.css +90 -90
- package/src/css/page-header.css +33 -33
- package/src/css/pagination.css +72 -72
- package/src/css/table.css +142 -142
- package/src/css/timeline-stages.css +218 -0
- package/src/css/utilities.css +46 -46
- package/src/index.js +72 -53
- package/src/store/createSubResourcePlugin.js +135 -135
- package/src/store/index.js +3 -3
- package/src/store/plugins/auditTrails.js +17 -17
- package/src/store/plugins/files.js +250 -186
- package/src/store/plugins/index.js +7 -5
- package/src/store/plugins/lifecycle.js +180 -180
- package/src/store/plugins/relations.js +68 -68
- package/src/store/plugins/search.js +372 -0
- package/src/store/plugins/selection.js +104 -0
- package/src/store/useObjectStore.js +829 -686
- package/src/types/auditTrail.d.ts +32 -32
- package/src/types/file.d.ts +23 -23
- package/src/types/index.d.ts +35 -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/headers.js +68 -50
- package/src/utils/id.js +13 -0
- package/src/utils/index.js +3 -3
- package/src/utils/schema.js +422 -419
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
import { buildHeaders } from '../../utils/headers.js'
|
|
2
|
-
import { parseResponseError, networkError } from '../../utils/errors.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Lifecycle plugin for the object store.
|
|
6
|
-
*
|
|
7
|
-
* Adds object lifecycle actions: lock, unlock, publish, depublish, revert, merge.
|
|
8
|
-
* These operate on the object itself (not sub-resources) but share the same
|
|
9
|
-
* URL pattern: POST /{register}/{schema}/{objectId}/{action}
|
|
10
|
-
*
|
|
11
|
-
* State: lifecycleLoading, lifecycleError
|
|
12
|
-
* Actions: lockObject, unlockObject, publishObject, depublishObject, revertObject, mergeObjects
|
|
13
|
-
*
|
|
14
|
-
* @return {Function} Plugin factory
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* const useStore = createObjectStore('object', {
|
|
18
|
-
* plugins: [lifecyclePlugin()],
|
|
19
|
-
* })
|
|
20
|
-
* const store = useStore()
|
|
21
|
-
* await store.lockObject('case', caseId, { process: 'review', duration: 3600 })
|
|
22
|
-
* await store.publishObject('case', caseId, { date: '2025-01-01' })
|
|
23
|
-
*/
|
|
24
|
-
export function lifecyclePlugin() {
|
|
25
|
-
return {
|
|
26
|
-
name: 'Lifecycle',
|
|
27
|
-
|
|
28
|
-
state: () => ({
|
|
29
|
-
lifecycleLoading: false,
|
|
30
|
-
lifecycleError: null,
|
|
31
|
-
}),
|
|
32
|
-
|
|
33
|
-
getters: {
|
|
34
|
-
isLifecycleLoading: (state) => state.lifecycleLoading,
|
|
35
|
-
getLifecycleError: (state) => state.lifecycleError,
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
actions: {
|
|
39
|
-
/**
|
|
40
|
-
* Perform a lifecycle action on an object.
|
|
41
|
-
*
|
|
42
|
-
* @param {string} type The registered object type slug
|
|
43
|
-
* @param {string} objectId The object ID
|
|
44
|
-
* @param {string} action The lifecycle action endpoint (e.g. 'lock', 'publish')
|
|
45
|
-
* @param {object} [body=null] Optional request body
|
|
46
|
-
* @return {Promise<object|null>} Response data or null on error
|
|
47
|
-
*/
|
|
48
|
-
async _lifecycleAction(type, objectId, action, body = null) {
|
|
49
|
-
this.lifecycleLoading = true
|
|
50
|
-
this.lifecycleError = null
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
const url = this._buildUrl(type, objectId) + '/' + action
|
|
54
|
-
const options = {
|
|
55
|
-
method: 'POST',
|
|
56
|
-
headers: buildHeaders(),
|
|
57
|
-
}
|
|
58
|
-
if (body) {
|
|
59
|
-
options.body = JSON.stringify(body)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const response = await fetch(url, options)
|
|
63
|
-
|
|
64
|
-
if (!response.ok) {
|
|
65
|
-
this.lifecycleError = await parseResponseError(response, action)
|
|
66
|
-
console.error(`Error performing ${action} on ${type}/${objectId}:`, this.lifecycleError)
|
|
67
|
-
return null
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const data = await response.json()
|
|
71
|
-
|
|
72
|
-
if (this.objects[type] && data.id) {
|
|
73
|
-
this.objects[type][data.id] = data
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return data
|
|
77
|
-
} catch (error) {
|
|
78
|
-
this.lifecycleError = error.name === 'TypeError'
|
|
79
|
-
? networkError(error)
|
|
80
|
-
: { status: null, message: error.message, details: null, isValidation: false, fields: null, toString() { return this.message } }
|
|
81
|
-
console.error(`Error performing ${action} on ${type}/${objectId}:`, error)
|
|
82
|
-
return null
|
|
83
|
-
} finally {
|
|
84
|
-
this.lifecycleLoading = false
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Lock an object to prevent concurrent edits.
|
|
90
|
-
*
|
|
91
|
-
* @param {string} type The registered object type slug
|
|
92
|
-
* @param {string} objectId The object ID
|
|
93
|
-
* @param {object} options Lock options
|
|
94
|
-
* @param {string} [options.process] Lock reason/process name
|
|
95
|
-
* @param {number} [options.duration] Lock duration in seconds
|
|
96
|
-
* @return {Promise<object|null>} Updated object or null on error
|
|
97
|
-
*/
|
|
98
|
-
async lockObject(type, objectId, options = {}) {
|
|
99
|
-
return this._lifecycleAction(type, objectId, 'lock', options)
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Unlock an object.
|
|
104
|
-
*
|
|
105
|
-
* @param {string} type The registered object type slug
|
|
106
|
-
* @param {string} objectId The object ID
|
|
107
|
-
* @return {Promise<object|null>} Updated object or null on error
|
|
108
|
-
*/
|
|
109
|
-
async unlockObject(type, objectId) {
|
|
110
|
-
return this._lifecycleAction(type, objectId, 'unlock')
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Publish an object (make it publicly accessible).
|
|
115
|
-
*
|
|
116
|
-
* @param {string} type The registered object type slug
|
|
117
|
-
* @param {string} objectId The object ID
|
|
118
|
-
* @param {object} [options={}] Publish options
|
|
119
|
-
* @param {string} [options.date] Publish date (ISO 8601)
|
|
120
|
-
* @return {Promise<object|null>} Updated object or null on error
|
|
121
|
-
*/
|
|
122
|
-
async publishObject(type, objectId, options = {}) {
|
|
123
|
-
return this._lifecycleAction(type, objectId, 'publish', options)
|
|
124
|
-
},
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Depublish an object (revoke public access).
|
|
128
|
-
*
|
|
129
|
-
* @param {string} type The registered object type slug
|
|
130
|
-
* @param {string} objectId The object ID
|
|
131
|
-
* @param {object} [options={}] Depublish options
|
|
132
|
-
* @param {string} [options.date] Depublish date (ISO 8601)
|
|
133
|
-
* @return {Promise<object|null>} Updated object or null on error
|
|
134
|
-
*/
|
|
135
|
-
async depublishObject(type, objectId, options = {}) {
|
|
136
|
-
return this._lifecycleAction(type, objectId, 'depublish', options)
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Revert an object to a previous version.
|
|
141
|
-
*
|
|
142
|
-
* @param {string} type The registered object type slug
|
|
143
|
-
* @param {string} objectId The object ID
|
|
144
|
-
* @param {object} options Revert options
|
|
145
|
-
* @param {string} [options.datetime] Target datetime
|
|
146
|
-
* @param {string} [options.auditTrailId] Audit trail entry ID to revert to
|
|
147
|
-
* @param {number} [options.version] Target version number
|
|
148
|
-
* @param {boolean} [options.overwriteVersion] Overwrite current version
|
|
149
|
-
* @return {Promise<object|null>} Updated object or null on error
|
|
150
|
-
*/
|
|
151
|
-
async revertObject(type, objectId, options = {}) {
|
|
152
|
-
return this._lifecycleAction(type, objectId, 'revert', options)
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Merge two objects together.
|
|
157
|
-
*
|
|
158
|
-
* @param {string} type The registered object type slug
|
|
159
|
-
* @param {string} sourceId The source object ID (will be merged into target)
|
|
160
|
-
* @param {object} options Merge options
|
|
161
|
-
* @param {string} options.target Target object ID
|
|
162
|
-
* @param {string} [options.fileAction] How to handle files ('move'|'copy'|'skip')
|
|
163
|
-
* @param {string} [options.relationAction] How to handle relations
|
|
164
|
-
* @param {string} [options.referenceAction] How to handle references
|
|
165
|
-
* @return {Promise<object|null>} Merge result or null on error
|
|
166
|
-
*/
|
|
167
|
-
async mergeObjects(type, sourceId, options = {}) {
|
|
168
|
-
return this._lifecycleAction(type, sourceId, 'merge', options)
|
|
169
|
-
},
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Clear lifecycle state.
|
|
173
|
-
*/
|
|
174
|
-
clearLifecycle() {
|
|
175
|
-
this.lifecycleLoading = false
|
|
176
|
-
this.lifecycleError = null
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
}
|
|
180
|
-
}
|
|
1
|
+
import { buildHeaders } from '../../utils/headers.js'
|
|
2
|
+
import { parseResponseError, networkError } from '../../utils/errors.js'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Lifecycle plugin for the object store.
|
|
6
|
+
*
|
|
7
|
+
* Adds object lifecycle actions: lock, unlock, publish, depublish, revert, merge.
|
|
8
|
+
* These operate on the object itself (not sub-resources) but share the same
|
|
9
|
+
* URL pattern: POST /{register}/{schema}/{objectId}/{action}
|
|
10
|
+
*
|
|
11
|
+
* State: lifecycleLoading, lifecycleError
|
|
12
|
+
* Actions: lockObject, unlockObject, publishObject, depublishObject, revertObject, mergeObjects
|
|
13
|
+
*
|
|
14
|
+
* @return {Function} Plugin factory
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const useStore = createObjectStore('object', {
|
|
18
|
+
* plugins: [lifecyclePlugin()],
|
|
19
|
+
* })
|
|
20
|
+
* const store = useStore()
|
|
21
|
+
* await store.lockObject('case', caseId, { process: 'review', duration: 3600 })
|
|
22
|
+
* await store.publishObject('case', caseId, { date: '2025-01-01' })
|
|
23
|
+
*/
|
|
24
|
+
export function lifecyclePlugin() {
|
|
25
|
+
return {
|
|
26
|
+
name: 'Lifecycle',
|
|
27
|
+
|
|
28
|
+
state: () => ({
|
|
29
|
+
lifecycleLoading: false,
|
|
30
|
+
lifecycleError: null,
|
|
31
|
+
}),
|
|
32
|
+
|
|
33
|
+
getters: {
|
|
34
|
+
isLifecycleLoading: (state) => state.lifecycleLoading,
|
|
35
|
+
getLifecycleError: (state) => state.lifecycleError,
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
actions: {
|
|
39
|
+
/**
|
|
40
|
+
* Perform a lifecycle action on an object.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} type The registered object type slug
|
|
43
|
+
* @param {string} objectId The object ID
|
|
44
|
+
* @param {string} action The lifecycle action endpoint (e.g. 'lock', 'publish')
|
|
45
|
+
* @param {object} [body=null] Optional request body
|
|
46
|
+
* @return {Promise<object|null>} Response data or null on error
|
|
47
|
+
*/
|
|
48
|
+
async _lifecycleAction(type, objectId, action, body = null) {
|
|
49
|
+
this.lifecycleLoading = true
|
|
50
|
+
this.lifecycleError = null
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
const url = this._buildUrl(type, objectId) + '/' + action
|
|
54
|
+
const options = {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: buildHeaders(),
|
|
57
|
+
}
|
|
58
|
+
if (body) {
|
|
59
|
+
options.body = JSON.stringify(body)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const response = await fetch(url, options)
|
|
63
|
+
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
this.lifecycleError = await parseResponseError(response, action)
|
|
66
|
+
console.error(`Error performing ${action} on ${type}/${objectId}:`, this.lifecycleError)
|
|
67
|
+
return null
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const data = await response.json()
|
|
71
|
+
|
|
72
|
+
if (this.objects[type] && data.id) {
|
|
73
|
+
this.objects[type][data.id] = data
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return data
|
|
77
|
+
} catch (error) {
|
|
78
|
+
this.lifecycleError = error.name === 'TypeError'
|
|
79
|
+
? networkError(error)
|
|
80
|
+
: { status: null, message: error.message, details: null, isValidation: false, fields: null, toString() { return this.message } }
|
|
81
|
+
console.error(`Error performing ${action} on ${type}/${objectId}:`, error)
|
|
82
|
+
return null
|
|
83
|
+
} finally {
|
|
84
|
+
this.lifecycleLoading = false
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Lock an object to prevent concurrent edits.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} type The registered object type slug
|
|
92
|
+
* @param {string} objectId The object ID
|
|
93
|
+
* @param {object} options Lock options
|
|
94
|
+
* @param {string} [options.process] Lock reason/process name
|
|
95
|
+
* @param {number} [options.duration] Lock duration in seconds
|
|
96
|
+
* @return {Promise<object|null>} Updated object or null on error
|
|
97
|
+
*/
|
|
98
|
+
async lockObject(type, objectId, options = {}) {
|
|
99
|
+
return this._lifecycleAction(type, objectId, 'lock', options)
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Unlock an object.
|
|
104
|
+
*
|
|
105
|
+
* @param {string} type The registered object type slug
|
|
106
|
+
* @param {string} objectId The object ID
|
|
107
|
+
* @return {Promise<object|null>} Updated object or null on error
|
|
108
|
+
*/
|
|
109
|
+
async unlockObject(type, objectId) {
|
|
110
|
+
return this._lifecycleAction(type, objectId, 'unlock')
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Publish an object (make it publicly accessible).
|
|
115
|
+
*
|
|
116
|
+
* @param {string} type The registered object type slug
|
|
117
|
+
* @param {string} objectId The object ID
|
|
118
|
+
* @param {object} [options={}] Publish options
|
|
119
|
+
* @param {string} [options.date] Publish date (ISO 8601)
|
|
120
|
+
* @return {Promise<object|null>} Updated object or null on error
|
|
121
|
+
*/
|
|
122
|
+
async publishObject(type, objectId, options = {}) {
|
|
123
|
+
return this._lifecycleAction(type, objectId, 'publish', options)
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Depublish an object (revoke public access).
|
|
128
|
+
*
|
|
129
|
+
* @param {string} type The registered object type slug
|
|
130
|
+
* @param {string} objectId The object ID
|
|
131
|
+
* @param {object} [options={}] Depublish options
|
|
132
|
+
* @param {string} [options.date] Depublish date (ISO 8601)
|
|
133
|
+
* @return {Promise<object|null>} Updated object or null on error
|
|
134
|
+
*/
|
|
135
|
+
async depublishObject(type, objectId, options = {}) {
|
|
136
|
+
return this._lifecycleAction(type, objectId, 'depublish', options)
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Revert an object to a previous version.
|
|
141
|
+
*
|
|
142
|
+
* @param {string} type The registered object type slug
|
|
143
|
+
* @param {string} objectId The object ID
|
|
144
|
+
* @param {object} options Revert options
|
|
145
|
+
* @param {string} [options.datetime] Target datetime
|
|
146
|
+
* @param {string} [options.auditTrailId] Audit trail entry ID to revert to
|
|
147
|
+
* @param {number} [options.version] Target version number
|
|
148
|
+
* @param {boolean} [options.overwriteVersion] Overwrite current version
|
|
149
|
+
* @return {Promise<object|null>} Updated object or null on error
|
|
150
|
+
*/
|
|
151
|
+
async revertObject(type, objectId, options = {}) {
|
|
152
|
+
return this._lifecycleAction(type, objectId, 'revert', options)
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Merge two objects together.
|
|
157
|
+
*
|
|
158
|
+
* @param {string} type The registered object type slug
|
|
159
|
+
* @param {string} sourceId The source object ID (will be merged into target)
|
|
160
|
+
* @param {object} options Merge options
|
|
161
|
+
* @param {string} options.target Target object ID
|
|
162
|
+
* @param {string} [options.fileAction] How to handle files ('move'|'copy'|'skip')
|
|
163
|
+
* @param {string} [options.relationAction] How to handle relations
|
|
164
|
+
* @param {string} [options.referenceAction] How to handle references
|
|
165
|
+
* @return {Promise<object|null>} Merge result or null on error
|
|
166
|
+
*/
|
|
167
|
+
async mergeObjects(type, sourceId, options = {}) {
|
|
168
|
+
return this._lifecycleAction(type, sourceId, 'merge', options)
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Clear lifecycle state.
|
|
173
|
+
*/
|
|
174
|
+
clearLifecycle() {
|
|
175
|
+
this.lifecycleLoading = false
|
|
176
|
+
this.lifecycleError = null
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -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={}] 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
|
-
}
|
|
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
|
+
}
|