@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,186 +1,250 @@
|
|
|
1
|
-
import { createSubResourcePlugin } from '../createSubResourcePlugin.js'
|
|
2
|
-
import { buildHeaders } from '../../utils/headers.js'
|
|
3
|
-
import { parseResponseError, networkError } from '../../utils/errors.js'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Files plugin for the object store.
|
|
7
|
-
*
|
|
8
|
-
* Extends the generic sub-resource with file-specific actions:
|
|
9
|
-
* upload (multipart), publish, unpublish, and delete.
|
|
10
|
-
*
|
|
11
|
-
* State: files, filesLoading, filesError
|
|
12
|
-
* Actions: fetchFiles, uploadFiles, publishFile, unpublishFile, deleteFile, clearFiles
|
|
13
|
-
* Getters: getFiles, isFilesLoading, getFilesError
|
|
14
|
-
*
|
|
15
|
-
* @param {object} [options={}] Plugin options
|
|
16
|
-
* @param {number} [options.limit=20] Default page size
|
|
17
|
-
* @return {Function} Plugin factory
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* const useStore = createObjectStore('object', {
|
|
21
|
-
* plugins: [filesPlugin()],
|
|
22
|
-
* })
|
|
23
|
-
* const store = useStore()
|
|
24
|
-
* await store.fetchFiles('case', caseId)
|
|
25
|
-
* await store.uploadFiles('case', caseId, formData)
|
|
26
|
-
* await store.publishFile('case', caseId, fileId)
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
1
|
+
import { createSubResourcePlugin } from '../createSubResourcePlugin.js'
|
|
2
|
+
import { buildHeaders } from '../../utils/headers.js'
|
|
3
|
+
import { parseResponseError, networkError } from '../../utils/errors.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Files plugin for the object store.
|
|
7
|
+
*
|
|
8
|
+
* Extends the generic sub-resource with file-specific actions:
|
|
9
|
+
* upload (multipart), publish, unpublish, and delete.
|
|
10
|
+
*
|
|
11
|
+
* State: files, filesLoading, filesError, tags, tagsLoading, tagsError
|
|
12
|
+
* Actions: fetchFiles, uploadFiles, publishFile, unpublishFile, deleteFile, clearFiles, fetchTags
|
|
13
|
+
* Getters: getFiles, isFilesLoading, getFilesError, getTags, isTagsLoading, getTagsError
|
|
14
|
+
*
|
|
15
|
+
* @param {object} [options={}] Plugin options
|
|
16
|
+
* @param {number} [options.limit=20] Default page size
|
|
17
|
+
* @return {Function} Plugin factory
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const useStore = createObjectStore('object', {
|
|
21
|
+
* plugins: [filesPlugin()],
|
|
22
|
+
* })
|
|
23
|
+
* const store = useStore()
|
|
24
|
+
* await store.fetchFiles('case', caseId)
|
|
25
|
+
* await store.uploadFiles('case', caseId, formData)
|
|
26
|
+
* await store.publishFile('case', caseId, fileId)
|
|
27
|
+
*/
|
|
28
|
+
const TAGS_PATH = '/tags'
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Build the tags API URL from the store base URL (e.g. /apps/openregister/api/objects -> /apps/openregister/api/tags).
|
|
32
|
+
*
|
|
33
|
+
* @param {string} baseUrl Store base URL
|
|
34
|
+
* @return {string} Tags endpoint URL
|
|
35
|
+
*/
|
|
36
|
+
function buildTagsUrl(baseUrl) {
|
|
37
|
+
return baseUrl.replace(/\/objects\/?$/, '') + TAGS_PATH
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function filesPlugin(options = {}) {
|
|
41
|
+
const base = createSubResourcePlugin('files', 'files', options)()
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
...base,
|
|
45
|
+
|
|
46
|
+
state: () => ({
|
|
47
|
+
...base.state(),
|
|
48
|
+
tags: [],
|
|
49
|
+
tagsLoading: false,
|
|
50
|
+
tagsError: null,
|
|
51
|
+
}),
|
|
52
|
+
|
|
53
|
+
getters: {
|
|
54
|
+
...base.getters,
|
|
55
|
+
getTags: (state) => state.tags || [],
|
|
56
|
+
isTagsLoading: (state) => state.tagsLoading || false,
|
|
57
|
+
getTagsError: (state) => state.tagsError || null,
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
actions: {
|
|
61
|
+
...base.actions,
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Fetch the list of tags (e.g. for file labels). API returns a plain array of strings.
|
|
65
|
+
* Result is stored in state.tags; use getTags getter to read.
|
|
66
|
+
*
|
|
67
|
+
* @return {Promise<string[]>} Array of tag strings, or [] on error
|
|
68
|
+
*/
|
|
69
|
+
async fetchTags() {
|
|
70
|
+
this.tagsLoading = true
|
|
71
|
+
this.tagsError = null
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
const url = buildTagsUrl(this._options.baseUrl)
|
|
75
|
+
const response = await fetch(url, {
|
|
76
|
+
method: 'GET',
|
|
77
|
+
headers: buildHeaders(),
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
this.tagsError = await parseResponseError(response, 'tags')
|
|
82
|
+
console.error('Error fetching tags:', this.tagsError)
|
|
83
|
+
return []
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const data = await response.json()
|
|
87
|
+
const tags = Array.isArray(data) ? data : []
|
|
88
|
+
this.tags = tags
|
|
89
|
+
return tags
|
|
90
|
+
} catch (error) {
|
|
91
|
+
this.tagsError = error.name === 'TypeError'
|
|
92
|
+
? networkError(error)
|
|
93
|
+
: { status: null, message: error.message, details: null, isValidation: false, fields: null, toString() { return this.message } }
|
|
94
|
+
console.error('Error fetching tags:', error)
|
|
95
|
+
return []
|
|
96
|
+
} finally {
|
|
97
|
+
this.tagsLoading = false
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Upload files to an object via multipart form data.
|
|
103
|
+
*
|
|
104
|
+
* @param {string} type The registered object type slug
|
|
105
|
+
* @param {string} objectId The parent object ID
|
|
106
|
+
* @param {FormData} formData FormData with files[] and optional tags/share fields
|
|
107
|
+
* @return {Promise<object|null>} Upload response or null on error
|
|
108
|
+
*/
|
|
109
|
+
async uploadFiles(type, objectId, formData) {
|
|
110
|
+
this.filesLoading = true
|
|
111
|
+
this.filesError = null
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
const url = this._buildUrl(type, objectId) + '/filesMultipart'
|
|
115
|
+
|
|
116
|
+
const response = await fetch(url, {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
headers: buildHeaders(null),
|
|
119
|
+
body: formData,
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
this.filesError = await parseResponseError(response, 'files')
|
|
124
|
+
console.error(`Error uploading files for ${type}/${objectId}:`, this.filesError)
|
|
125
|
+
return null
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const data = await response.json()
|
|
129
|
+
|
|
130
|
+
await this.fetchFiles(type, objectId)
|
|
131
|
+
|
|
132
|
+
return data
|
|
133
|
+
} catch (error) {
|
|
134
|
+
this.filesError = error.name === 'TypeError'
|
|
135
|
+
? networkError(error)
|
|
136
|
+
: { status: null, message: error.message, details: null, isValidation: false, fields: null, toString() { return this.message } }
|
|
137
|
+
console.error(`Error uploading files for ${type}/${objectId}:`, error)
|
|
138
|
+
return null
|
|
139
|
+
} finally {
|
|
140
|
+
this.filesLoading = false
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Publish a file (make it publicly accessible).
|
|
146
|
+
*
|
|
147
|
+
* @param {string} type The registered object type slug
|
|
148
|
+
* @param {string} objectId The parent object ID
|
|
149
|
+
* @param {string} fileId The file ID to publish
|
|
150
|
+
* @return {Promise<boolean>} True if published successfully
|
|
151
|
+
*/
|
|
152
|
+
async publishFile(type, objectId, fileId) {
|
|
153
|
+
this.filesLoading = true
|
|
154
|
+
this.filesError = null
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const url = this._buildUrl(type, objectId) + `/files/${fileId}/publish`
|
|
158
|
+
|
|
159
|
+
const response = await fetch(url, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: buildHeaders(),
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
if (!response.ok) {
|
|
165
|
+
this.filesError = await parseResponseError(response, 'files')
|
|
166
|
+
return false
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
await this.fetchFiles(type, objectId)
|
|
170
|
+
return true
|
|
171
|
+
} catch (error) {
|
|
172
|
+
this.filesError = networkError(error)
|
|
173
|
+
return false
|
|
174
|
+
} finally {
|
|
175
|
+
this.filesLoading = false
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Unpublish a file (revoke public access).
|
|
181
|
+
*
|
|
182
|
+
* @param {string} type The registered object type slug
|
|
183
|
+
* @param {string} objectId The parent object ID
|
|
184
|
+
* @param {string} fileId The file ID to unpublish
|
|
185
|
+
* @return {Promise<boolean>} True if unpublished successfully
|
|
186
|
+
*/
|
|
187
|
+
async unpublishFile(type, objectId, fileId) {
|
|
188
|
+
this.filesLoading = true
|
|
189
|
+
this.filesError = null
|
|
190
|
+
|
|
191
|
+
try {
|
|
192
|
+
const url = this._buildUrl(type, objectId) + `/files/${fileId}/depublish`
|
|
193
|
+
|
|
194
|
+
const response = await fetch(url, {
|
|
195
|
+
method: 'POST',
|
|
196
|
+
headers: buildHeaders(),
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
if (!response.ok) {
|
|
200
|
+
this.filesError = await parseResponseError(response, 'files')
|
|
201
|
+
return false
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
await this.fetchFiles(type, objectId)
|
|
205
|
+
return true
|
|
206
|
+
} catch (error) {
|
|
207
|
+
this.filesError = networkError(error)
|
|
208
|
+
return false
|
|
209
|
+
} finally {
|
|
210
|
+
this.filesLoading = false
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Delete a file from an object.
|
|
216
|
+
*
|
|
217
|
+
* @param {string} type The registered object type slug
|
|
218
|
+
* @param {string} objectId The parent object ID
|
|
219
|
+
* @param {string} fileId The file ID to delete
|
|
220
|
+
* @return {Promise<boolean>} True if deleted successfully
|
|
221
|
+
*/
|
|
222
|
+
async deleteFile(type, objectId, fileId) {
|
|
223
|
+
this.filesLoading = true
|
|
224
|
+
this.filesError = null
|
|
225
|
+
|
|
226
|
+
try {
|
|
227
|
+
const url = this._buildUrl(type, objectId) + `/files/${fileId}`
|
|
228
|
+
|
|
229
|
+
const response = await fetch(url, {
|
|
230
|
+
method: 'DELETE',
|
|
231
|
+
headers: buildHeaders(),
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
if (!response.ok) {
|
|
235
|
+
this.filesError = await parseResponseError(response, 'files')
|
|
236
|
+
return false
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
await this.fetchFiles(type, objectId)
|
|
240
|
+
return true
|
|
241
|
+
} catch (error) {
|
|
242
|
+
this.filesError = networkError(error)
|
|
243
|
+
return false
|
|
244
|
+
} finally {
|
|
245
|
+
this.filesLoading = false
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
}
|
|
250
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { auditTrailsPlugin } from './auditTrails.js'
|
|
2
|
-
export { relationsPlugin } from './relations.js'
|
|
3
|
-
export { filesPlugin } from './files.js'
|
|
4
|
-
export { lifecyclePlugin } from './lifecycle.js'
|
|
5
|
-
export { registerMappingPlugin } from './registerMapping.js'
|
|
1
|
+
export { auditTrailsPlugin } from './auditTrails.js'
|
|
2
|
+
export { relationsPlugin } from './relations.js'
|
|
3
|
+
export { filesPlugin } from './files.js'
|
|
4
|
+
export { lifecyclePlugin } from './lifecycle.js'
|
|
5
|
+
export { registerMappingPlugin } from './registerMapping.js'
|
|
6
|
+
export { selectionPlugin } from './selection.js'
|
|
7
|
+
export { searchPlugin, SEARCH_TYPE, getRegisterApiUrl, getSchemaApiUrl } from './search.js'
|