@conduction/nextcloud-vue 2.78.0 → 2.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundled-packages.json +0 -2
- package/dist/esm/bundled-packages.json +0 -2
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +3 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +32 -3
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +115 -104
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +12 -2
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +39 -3
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +158 -0
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +157 -96
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +139 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +140 -92
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +77 -0
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +5 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +62 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +85 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +43 -4
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +11 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +736 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +238 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/index.js +30 -0
- package/dist/esm/components/CnFactsWidget/index.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +10 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +551 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +183 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/index.js +29 -0
- package/dist/esm/components/CnFieldListWidget/index.js.map +1 -0
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +173 -5
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +181 -99
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js +29 -11
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js +252 -0
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js.map +1 -0
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +66 -18
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +4 -4
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +18 -3
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +330 -74
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +34 -15
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +10 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +99 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +48 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -0
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +100 -3
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -2
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js +29 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +3 -2
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +10 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +387 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +169 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/index.js +31 -0
- package/dist/esm/components/CnRecordListWidget/index.js.map +1 -0
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +10 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +351 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +71 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/index.js +35 -0
- package/dist/esm/components/CnSectionsWidget/index.js.map +1 -0
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +81 -2
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +1 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +152 -8
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +84 -23
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +106 -2
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +105 -53
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
- package/dist/esm/composables/useAppManifest.js +8 -3
- package/dist/esm/composables/useAppManifest.js.map +1 -1
- package/dist/esm/composables/useFormDraft.js +140 -9
- package/dist/esm/composables/useFormDraft.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +28 -20
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js +9 -0
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection.js +21 -0
- package/dist/esm/integrations/builtin/field-inspection.js.map +1 -1
- package/dist/esm/integrations/offline/checklistSubmission.js +141 -0
- package/dist/esm/integrations/offline/checklistSubmission.js.map +1 -0
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js +70 -5
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js.map +1 -1
- package/dist/esm/integrations/offline/index.js +2 -1
- package/dist/esm/integrations/offline/index.js.map +1 -1
- package/dist/esm/integrations/offline/offlineDb.js +6 -1
- package/dist/esm/integrations/offline/offlineDb.js.map +1 -1
- package/dist/esm/integrations/offline/syncReplayService.js +8 -2
- package/dist/esm/integrations/offline/syncReplayService.js.map +1 -1
- package/dist/esm/l10n/en.json.js +72 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +120 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +1314 -74
- package/dist/esm/utils/boardDate.js +193 -0
- package/dist/esm/utils/boardDate.js.map +1 -0
- package/dist/esm/utils/detailActionModel.js +60 -3
- package/dist/esm/utils/detailActionModel.js.map +1 -1
- package/dist/esm/utils/dynamicProperties.js +5 -1
- package/dist/esm/utils/dynamicProperties.js.map +1 -1
- package/dist/esm/utils/fillTemplate.js +114 -0
- package/dist/esm/utils/fillTemplate.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +4 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/queryPresets.js +96 -0
- package/dist/esm/utils/queryPresets.js.map +1 -0
- package/dist/esm/utils/resolveFilterTokens.js +11 -0
- package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
- package/dist/esm/utils/schema.js +21 -0
- package/dist/esm/utils/schema.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +3 -3
- package/dist/esm/utils/sentinelTokens.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +57 -6
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +7 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +14278 -8169
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1314 -74
- package/l10n/en.json +72 -1
- package/l10n/nl.json +120 -2
- package/package.json +1 -1
- package/scripts/build-validators.js +26 -0
- package/src/components/CnActionButtons/CnActionButtons.vue +2 -0
- package/src/components/CnActionsBar/CnActionsBar.md +4 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +83 -42
- package/src/components/CnAppRoot/CnAppRoot.vue +12 -2
- package/src/components/CnBannerWidget/CnBannerWidget.vue +39 -3
- package/src/components/CnCellRenderer/CnCellRenderer.vue +306 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +219 -4
- package/src/components/CnDataTable/CnDataTable.md +2 -0
- package/src/components/CnDataTable/CnDataTable.vue +82 -2
- package/src/components/CnDetailPage/CnDetailPage.md +1 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +63 -3
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +127 -1
- package/src/components/CnFactsWidget/CnFactsWidget.vue +1050 -0
- package/src/components/CnFactsWidget/index.js +29 -0
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +746 -0
- package/src/components/CnFieldListWidget/index.js +28 -0
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +232 -11
- package/src/components/CnFilesBrowser/filesBrowser.js +43 -2
- package/src/components/CnFilesBrowser/index.js +1 -0
- package/src/components/CnFilesBrowser/openRegisterSource.js +248 -0
- package/src/components/CnFormDialog/CnFormDialog.md +9 -3
- package/src/components/CnFormDialog/CnFormDialog.vue +70 -22
- package/src/components/CnFormPage/CnFormPage.vue +18 -3
- package/src/components/CnIndexPage/CnIndexPage.vue +281 -9
- package/src/components/CnIndexPage/CnIndexPageWidgets.vue +169 -0
- package/src/components/CnObjectSidebar/CnFilesTab.vue +103 -4
- package/src/components/CnPageRenderer/CnPageRenderer.vue +29 -1
- package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +3 -2
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +603 -0
- package/src/components/CnRecordListWidget/index.js +30 -0
- package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +1 -1
- package/src/components/CnSectionsWidget/CnSectionsWidget.vue +489 -0
- package/src/components/CnSectionsWidget/index.js +34 -0
- package/src/components/CnStagesWidget/CnStagesWidget.vue +81 -2
- package/src/components/CnStatWidget/CnStatWidget.vue +1 -1
- package/src/components/CnTabsWidget/CnTabsWidget.vue +214 -9
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
- package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +188 -4
- package/src/components/index.js +5 -1
- package/src/composables/__tests__/useFormDraft.spec.js +69 -0
- package/src/composables/useAppManifest.js +8 -3
- package/src/composables/useFormDraft.js +139 -8
- package/src/css/form-field.css +14 -0
- package/src/css/index-page.css +71 -0
- package/src/css/kpi-card.css +32 -0
- package/src/css/look-board-detail.css +87 -0
- package/src/css/look-board-index.css +143 -14
- package/src/css/look-board.css +114 -2
- package/src/css/table.css +56 -0
- package/src/index.js +8 -0
- package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +35 -20
- package/src/integrations/builtin/field-inspection.js +21 -0
- package/src/integrations/offline/checklistSubmission.js +137 -0
- package/src/integrations/offline/fieldCollectionHelpers.js +69 -4
- package/src/integrations/offline/index.js +3 -0
- package/src/integrations/offline/offlineDb.js +6 -1
- package/src/integrations/offline/syncReplayService.js +8 -2
- package/src/schemas/app-manifest-v2.schema.json +149 -5
- package/src/utils/boardDate.js +189 -0
- package/src/utils/detailActionModel.js +59 -2
- package/src/utils/dynamicProperties.js +5 -1
- package/src/utils/fillTemplate.js +110 -0
- package/src/utils/libraryWidgetKeys.js +4 -0
- package/src/utils/queryPresets.js +93 -0
- package/src/utils/resolveFilterTokens.js +11 -0
- package/src/utils/schema.js +21 -0
- package/src/utils/sentinelTokens.js +3 -3
- package/src/utils/validateManifestV2.compiled.js +57 -2
- package/src/utils/widgetDispatch.js +7 -1
- package/dist/esm/_virtual/equal.js +0 -4
- package/dist/esm/_virtual/equal.js.map +0 -1
- package/dist/esm/_virtual/ucs2length.js +0 -4
- package/dist/esm/_virtual/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js +0 -9
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/fast-deep-equal/index.js +0 -47
- package/dist/esm/node_modules/fast-deep-equal/index.js.map +0 -1
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
<CnFilesBrowser
|
|
8
8
|
v-if="browserRoot !== null"
|
|
9
9
|
:rootPath="browserRoot"
|
|
10
|
-
:rootLabel="
|
|
10
|
+
:rootLabel="effectiveBrowserRootLabel"
|
|
11
|
+
:source="browserSource"
|
|
12
|
+
:deleteLabel="deleteLabel"
|
|
11
13
|
:uploadButton="uploadButton"
|
|
12
14
|
:dropOverlay="dropOverlay"
|
|
13
15
|
:dropHint="dropHint"
|
|
@@ -238,7 +240,8 @@ import CnFilePreview from '../CnFilePreview/CnFilePreview.vue'
|
|
|
238
240
|
import CnFilesBrowser from '../CnFilesBrowser/CnFilesBrowser.vue'
|
|
239
241
|
import { useFileOpener } from '../../composables/useFileOpener.js'
|
|
240
242
|
import { buildHeaders, prefixUrl } from '../../utils/index.js'
|
|
241
|
-
import {
|
|
243
|
+
import { objectDisplayName, resolveObjectFolderInfo } from '../CnFilesBrowser/filesBrowser.js'
|
|
244
|
+
import { createOpenRegisterSource } from '../CnFilesBrowser/openRegisterSource.js'
|
|
242
245
|
|
|
243
246
|
/**
|
|
244
247
|
* The mime types Nextcloud Office opens by default for the current person.
|
|
@@ -308,8 +311,22 @@ export default {
|
|
|
308
311
|
openInOfficeLabel: { type: String, default: () => t('nextcloud-vue', 'Open in Office') },
|
|
309
312
|
/** Label for the delete action */
|
|
310
313
|
deleteLabel: { type: String, default: () => t('nextcloud-vue', 'Delete') },
|
|
311
|
-
/** What the files browser's root crumb reads; null shows the
|
|
314
|
+
/** What the files browser's root crumb reads; null shows the object's name, else the folder's own name. */
|
|
312
315
|
browserRootLabel: { type: String, default: null },
|
|
316
|
+
/**
|
|
317
|
+
* Where the files browser reads the object's folder from.
|
|
318
|
+
* `openregister` (the default) goes through OpenRegister's files API under
|
|
319
|
+
* the object's access rule, so anyone who may read the object sees its
|
|
320
|
+
* files, without a share. `webdav` is the earlier behaviour: the folder is
|
|
321
|
+
* looked up in the person's own Files over WebDAV and the browser shows
|
|
322
|
+
* only when it is shared with them.
|
|
323
|
+
*/
|
|
324
|
+
source: {
|
|
325
|
+
type: String,
|
|
326
|
+
default: 'openregister',
|
|
327
|
+
validator: (value) => ['openregister', 'webdav'].includes(value),
|
|
328
|
+
},
|
|
329
|
+
|
|
313
330
|
/** Forwarded to CnFilesBrowser: a primary "Add files" button beside the New menu. */
|
|
314
331
|
uploadButton: { type: Boolean, default: false },
|
|
315
332
|
/** Forwarded to CnFilesBrowser: the drop state drawn over the list ("Drop to add") and announced. */
|
|
@@ -385,6 +402,9 @@ export default {
|
|
|
385
402
|
share: false,
|
|
386
403
|
/** The object's folder as a user-relative path, or null while unresolved or absent. */
|
|
387
404
|
browserRoot: null,
|
|
405
|
+
/** The browser's data source for `source: 'openregister'`, or null for WebDAV. */
|
|
406
|
+
browserSource: null,
|
|
407
|
+
browserObjectName: null,
|
|
388
408
|
linkedItems: [],
|
|
389
409
|
/** File ids whose preview request failed, so the row falls back to the mime icon. */
|
|
390
410
|
previewFailed: {},
|
|
@@ -403,6 +423,19 @@ export default {
|
|
|
403
423
|
}
|
|
404
424
|
},
|
|
405
425
|
|
|
426
|
+
computed: {
|
|
427
|
+
/**
|
|
428
|
+
* The root crumb: the host's label, else the object's name (its folder
|
|
429
|
+
* on disk is called after its uuid), else the folder's own name.
|
|
430
|
+
*
|
|
431
|
+
* @return {string|null}
|
|
432
|
+
* @spec openspec/changes/dutch-library-strings-and-files-crumb/specs/dutch-library-strings-and-files-crumb/spec.md#requirement-the-files-browser-names-the-object-in-its-root-crumb
|
|
433
|
+
*/
|
|
434
|
+
effectiveBrowserRootLabel() {
|
|
435
|
+
return this.browserRootLabel || this.browserObjectName || null
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
|
|
406
439
|
watch: {
|
|
407
440
|
// Match every other CnObjectSidebar tab — a single immediate
|
|
408
441
|
// `objectId` watcher drives all initial loads. Folding the
|
|
@@ -423,6 +456,10 @@ export default {
|
|
|
423
456
|
linkedItemsUrl() {
|
|
424
457
|
this.fetchLinkedItems()
|
|
425
458
|
},
|
|
459
|
+
|
|
460
|
+
source() {
|
|
461
|
+
this.resolveBrowserRoot()
|
|
462
|
+
},
|
|
426
463
|
},
|
|
427
464
|
|
|
428
465
|
methods: {
|
|
@@ -483,16 +520,22 @@ export default {
|
|
|
483
520
|
|
|
484
521
|
async resolveBrowserRoot() {
|
|
485
522
|
this.browserRoot = null
|
|
523
|
+
this.browserSource = null
|
|
524
|
+
this.browserObjectName = null
|
|
486
525
|
if (!this.objectId || !this.register || !this.schema) {
|
|
487
526
|
return
|
|
488
527
|
}
|
|
528
|
+
if (this.source === 'openregister') {
|
|
529
|
+
await this.resolveOpenRegisterSource()
|
|
530
|
+
return
|
|
531
|
+
}
|
|
489
532
|
let remoteUrl
|
|
490
533
|
try {
|
|
491
534
|
remoteUrl = generateRemoteUrl('dav')
|
|
492
535
|
} catch {
|
|
493
536
|
return
|
|
494
537
|
}
|
|
495
|
-
|
|
538
|
+
const info = await resolveObjectFolderInfo({
|
|
496
539
|
apiBase: this.apiBase,
|
|
497
540
|
register: this.register,
|
|
498
541
|
schema: this.schema,
|
|
@@ -500,6 +543,62 @@ export default {
|
|
|
500
543
|
uid: getCurrentUser()?.uid || '',
|
|
501
544
|
remoteUrl,
|
|
502
545
|
})
|
|
546
|
+
this.browserRoot = info === null ? null : info.path
|
|
547
|
+
this.browserObjectName = info === null ? null : info.name
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Use OpenRegister's files API for the browser, when this person may read
|
|
552
|
+
* the object's folder through it. A listing that fails (no read on the
|
|
553
|
+
* object, or an OpenRegister without the folder endpoints) leaves the
|
|
554
|
+
* legacy list, as an unresolved WebDAV folder did.
|
|
555
|
+
*
|
|
556
|
+
* @return {Promise<void>}
|
|
557
|
+
* @spec openspec/changes/files-browser-openregister-source/specs/files-browser/spec.md
|
|
558
|
+
*/
|
|
559
|
+
async resolveOpenRegisterSource() {
|
|
560
|
+
const objectId = this.objectId
|
|
561
|
+
const source = createOpenRegisterSource({
|
|
562
|
+
apiBase: this.apiBase,
|
|
563
|
+
register: this.register,
|
|
564
|
+
schema: this.schema,
|
|
565
|
+
objectId,
|
|
566
|
+
})
|
|
567
|
+
try {
|
|
568
|
+
await source.list('/')
|
|
569
|
+
} catch {
|
|
570
|
+
return
|
|
571
|
+
}
|
|
572
|
+
if (objectId !== this.objectId) {
|
|
573
|
+
return
|
|
574
|
+
}
|
|
575
|
+
this.browserSource = source
|
|
576
|
+
this.browserRoot = '/'
|
|
577
|
+
this.fetchObjectName()
|
|
578
|
+
},
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Read the object's name for the root crumb, by the same rule the WebDAV
|
|
582
|
+
* path uses (`objectDisplayName`: never the uuid). The OpenRegister path
|
|
583
|
+
* has no folder lookup to piggyback on, so this is its one object read.
|
|
584
|
+
* A failure keeps the crumb on its default.
|
|
585
|
+
*
|
|
586
|
+
* @return {Promise<void>}
|
|
587
|
+
*/
|
|
588
|
+
async fetchObjectName() {
|
|
589
|
+
const objectId = this.objectId
|
|
590
|
+
try {
|
|
591
|
+
const { data } = await axios.get(generateUrl(`${this.apiBase}/objects/{register}/{schema}/{objectId}`, {
|
|
592
|
+
register: this.register,
|
|
593
|
+
schema: this.schema,
|
|
594
|
+
objectId,
|
|
595
|
+
}))
|
|
596
|
+
if (objectId === this.objectId) {
|
|
597
|
+
this.browserObjectName = objectDisplayName(data, objectId)
|
|
598
|
+
}
|
|
599
|
+
} catch {
|
|
600
|
+
// The crumb keeps its default.
|
|
601
|
+
}
|
|
503
602
|
},
|
|
504
603
|
|
|
505
604
|
async fetchFiles(append = false) {
|
|
@@ -305,6 +305,7 @@ import { pageHasSplitView, pageIdForRoute, splitIdForRoute, splitRouteName } fro
|
|
|
305
305
|
import { reportDiagnostic, reportDiagnosticOnce } from '../../utils/diagnostics.js'
|
|
306
306
|
import { openRowTarget } from '../../utils/linkNavigation.js'
|
|
307
307
|
import { listContextFromRoute, listContextToQuery } from '../../utils/listNavigation.js'
|
|
308
|
+
import { applyQueryPreset, matchQueryPreset } from '../../utils/queryPresets.js'
|
|
308
309
|
import { resolveRouteSentinels } from '../../utils/resolveRouteSentinels.js'
|
|
309
310
|
import { parseSortKeys } from '../../utils/routeFilters.js'
|
|
310
311
|
import { buildRouteParams, routePathFor } from '../../utils/routeParams.js'
|
|
@@ -1050,7 +1051,25 @@ export default {
|
|
|
1050
1051
|
return 'none'
|
|
1051
1052
|
}
|
|
1052
1053
|
const cfg = (page.config && typeof page.config === 'object' && !Array.isArray(page.config)) ? page.config : {}
|
|
1053
|
-
|
|
1054
|
+
// A query preset swaps the lenses and columns, so it remounts the
|
|
1055
|
+
// page: the active lens index belongs to the lenses it indexes.
|
|
1056
|
+
const preset = this.activeQueryPresetIndex >= 0 ? `:preset-${this.activeQueryPresetIndex}` : ''
|
|
1057
|
+
return [page.id, cfg.register || '', cfg.schema || ''].join(':') + preset
|
|
1058
|
+
},
|
|
1059
|
+
|
|
1060
|
+
/**
|
|
1061
|
+
* The index of the current index page's query preset that the route
|
|
1062
|
+
* query matches, or -1.
|
|
1063
|
+
*
|
|
1064
|
+
* @return {number}
|
|
1065
|
+
* @spec openspec/changes/screens-index-query-presets/specs/index-query-presets/spec.md#requirement-a-query-preset-overlays-lenses-columns-and-copy
|
|
1066
|
+
*/
|
|
1067
|
+
activeQueryPresetIndex() {
|
|
1068
|
+
const page = this.currentPage
|
|
1069
|
+
if (!page || page.type !== 'index' || !page.config || !Array.isArray(page.config.queryPresets)) {
|
|
1070
|
+
return -1
|
|
1071
|
+
}
|
|
1072
|
+
return matchQueryPreset(page.config.queryPresets, this.$route?.query || {})
|
|
1054
1073
|
},
|
|
1055
1074
|
|
|
1056
1075
|
/**
|
|
@@ -1297,6 +1316,15 @@ export default {
|
|
|
1297
1316
|
// container before forwarding — CnIndexPage has no
|
|
1298
1317
|
// `actionToggles` prop.
|
|
1299
1318
|
const isIndex = page?.type === 'index'
|
|
1319
|
+
// A query preset (`config.queryPresets`): the menu entry's query
|
|
1320
|
+
// brings its own lenses, columns and copy to the same page.
|
|
1321
|
+
if (isIndex && Array.isArray(config.queryPresets)) {
|
|
1322
|
+
const preset = config.queryPresets[this.activeQueryPresetIndex] || null
|
|
1323
|
+
config = applyQueryPreset(config, preset)
|
|
1324
|
+
if (preset && typeof preset.title === 'string' && preset.title !== '') {
|
|
1325
|
+
topLevel.title = preset.title
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1300
1328
|
// When an index page has somewhere to open a row, make a row click
|
|
1301
1329
|
// go there: set `rowClickToView` so the row body emits `row-click`
|
|
1302
1330
|
// (→ onRowOpen navigates) even though the page is selectable.
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
</template>
|
|
116
116
|
|
|
117
117
|
<script>
|
|
118
|
-
import { translate as t } from '@nextcloud/l10n'
|
|
118
|
+
import { translatePlural as n, translate as t } from '@nextcloud/l10n'
|
|
119
119
|
import { NcPopover, NcSelect } from '@nextcloud/vue'
|
|
120
120
|
import DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'
|
|
121
121
|
import CnIcon from '../CnIcon/CnIcon.vue'
|
|
@@ -354,7 +354,8 @@ export default {
|
|
|
354
354
|
if (this.overflowLabel) {
|
|
355
355
|
return t('nextcloud-vue', '{label} — show the other filters', { label: this.overflowLabel })
|
|
356
356
|
}
|
|
357
|
-
|
|
357
|
+
const count = this.overflowEntries.length
|
|
358
|
+
return n('nextcloud-vue', '{count} more filter', '{count} more filters', count, { count })
|
|
358
359
|
},
|
|
359
360
|
|
|
360
361
|
/** @return {string} Heading above the hidden chips in the panel. */
|