@conduction/nextcloud-vue 2.105.0 → 2.106.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/esm/components/CnCardGrid/CnCardGrid.vue.js +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +18 -0
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +3 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue.js +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +18 -0
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +53 -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/CnDetailWidgetHeaderItems.vue.js +9 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js.map +1 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js +24 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js.map +1 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js +49 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js.map +1 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +36 -18
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +17 -38
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +53 -2
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +119 -111
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue.js +1 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js +62 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +159 -50
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +121 -98
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +24 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +20 -4
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js +22 -4
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +112 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +100 -44
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
- package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +67 -4
- package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +1 -1
- package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue.js +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +295 -12
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +267 -144
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +4 -0
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +3 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +93 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +322 -246
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue.js +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +122 -7
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js +189 -93
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTabs/CnTabs.vue.js +1 -1
- package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
- package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +42 -0
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +38 -19
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue.js +9 -0
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue.js.map +1 -0
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue2.js +258 -0
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue3.js +69 -0
- package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +12 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +21 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +21 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +803 -453
- package/dist/esm/utils/dueText.js +18 -3
- package/dist/esm/utils/dueText.js.map +1 -1
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/sortOrder.js +11 -1
- package/dist/esm/utils/sortOrder.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +8281 -6350
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +803 -453
- package/l10n/en.json +21 -1
- package/l10n/nl.json +21 -1
- package/package.json +1 -1
- package/src/components/CnCardGrid/CnCardGrid.md +2 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +20 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +19 -1
- package/src/components/CnDetailPage/CnDetailPage.md +2 -2
- package/src/components/CnDetailPage/CnDetailPage.vue +53 -4
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue +60 -0
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +36 -29
- package/src/components/CnFactsWidget/CnFactsWidget.vue +4 -0
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +70 -4
- package/src/components/CnFlowRunsWidget/CnFlowRunsWidget.vue +62 -1
- package/src/components/CnIndexPage/CnIndexPage.md +7 -5
- package/src/components/CnIndexPage/CnIndexPage.vue +187 -58
- package/src/components/CnIndexPage/CnIndexPageWidgets.vue +36 -1
- package/src/components/CnIndexPage/useSelfFetchList.js +22 -4
- package/src/components/CnIndexSidebar/CnIndexSidebar.md +2 -0
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +148 -1
- package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +68 -5
- package/src/components/CnObjectCard/CnObjectCard.md +1 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +354 -13
- package/src/components/CnObjectSidebar/CnFilesTab.vue +6 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +190 -4
- package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +209 -9
- package/src/components/CnTabs/CnTabs.vue +11 -0
- package/src/components/CnTabsWidget/CnTabsWidget.vue +91 -18
- package/src/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.md +11 -0
- package/src/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue +382 -0
- package/src/components/CnTeamWorkloadWidget/index.js +14 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +12 -0
- package/src/components/index.js +1 -0
- package/src/css/index-page.css +14 -2
- package/src/css/look-board-detail.css +48 -4
- package/src/css/look-board-index.css +64 -2
- package/src/css/look-board.css +25 -2
- package/src/index.js +1 -1
- package/src/schemas/app-manifest-v2.schema.json +75 -6
- package/src/utils/dueText.js +18 -3
- package/src/utils/libraryWidgetKeys.js +1 -0
- package/src/utils/sortOrder.js +10 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
|
@@ -30,6 +30,7 @@ import { useObjectStore } from '../../store/useObjectStore.js';
|
|
|
30
30
|
import { routeHref, followItemActionLink, resolveItemActionLink } from '../../utils/actionLink.js';
|
|
31
31
|
import { resolveRegisteredHandler, buildOnSuccessRoute } from '../../utils/actionsDispatcher.js';
|
|
32
32
|
import { columnFieldsOf, refIdOf, buildValueStages, buildReferenceStages, columnKeyOfRow, resolveDropValue, fullTargetOf, referenceTargetOf, fetchReferenceObjects } from '../../utils/boardReferenceColumns.js';
|
|
33
|
+
import { isColumnSortable } from '../../utils/columnFilters.js';
|
|
33
34
|
import { reportBindingProblems } from '../../utils/diagnostics.js';
|
|
34
35
|
import { fetchGroupedCounts } from '../../utils/fetchAggregate.js';
|
|
35
36
|
import { fetchListTotal, fetchFilterCounts } from '../../utils/fetchFilterCounts.js';
|
|
@@ -56,7 +57,7 @@ import { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js';
|
|
|
56
57
|
import { viewMatchesScope, extractViewState, buildRouteQueryFromViewState, extractViewStateFromRouteQuery, buildViewCreatePayload, savedViewScope, normalizeSharedWith } from '../../utils/savedViewHelpers.js';
|
|
57
58
|
import { fieldsFromSchema, columnsFromSchema } from '../../utils/schema.js';
|
|
58
59
|
import { resolveScopeLayout, resolveScopePresentation } from '../../utils/scopeListLayout.js';
|
|
59
|
-
import {
|
|
60
|
+
import { orderToSortKeys } from '../../utils/sortOrder.js';
|
|
60
61
|
import { dispatchObjectCreated } from '../../utils/walkthroughSignals.js';
|
|
61
62
|
import __sfc_main$7 from '../CnActionButtons/CnActionButtons.vue.js';
|
|
62
63
|
import __sfc_main$8 from '../CnActionsBar/CnActionsBar.vue.js';
|
|
@@ -98,7 +99,7 @@ import { reconcilePersonalColumns, orderColumns, personalColumnsKey } from './pe
|
|
|
98
99
|
import { createSelfModeActions, resolveRowTarget } from './selfModeActions.js';
|
|
99
100
|
import { applyRowPatches, splitLayoutFor, normalisePaneWidth, rowIdOf } from './splitView.js';
|
|
100
101
|
import { useNamedSource } from './useNamedSource.js';
|
|
101
|
-
import { useSelfFetchList, BOARD_PAGE_SIZE } from './useSelfFetchList.js';
|
|
102
|
+
import { useSelfFetchList, resolveInitialQuickFilterIndex, BOARD_PAGE_SIZE } from './useSelfFetchList.js';
|
|
102
103
|
import { useContextMenu } from '../../composables/useContextMenu.js';
|
|
103
104
|
|
|
104
105
|
/** Rows fetched for one month in calendar mode. */
|
|
@@ -683,6 +684,20 @@ var script = {
|
|
|
683
684
|
default: null,
|
|
684
685
|
},
|
|
685
686
|
|
|
687
|
+
/**
|
|
688
|
+
* Board look: the record layout of each card in the cards view
|
|
689
|
+
* (manifest key `config.cardLayout`): `{ headPill, number, title,
|
|
690
|
+
* meta, footerPill, footerDate }`, each part naming a field. See
|
|
691
|
+
* CnObjectCard `layout`.
|
|
692
|
+
*
|
|
693
|
+
* @type {object}
|
|
694
|
+
* @spec openspec/changes/board-record-card-layout/specs/board-record-card-layout/spec.md#requirement-a-board-card-can-draw-the-record-layout-from-config
|
|
695
|
+
*/
|
|
696
|
+
cardLayout: {
|
|
697
|
+
type: Object,
|
|
698
|
+
default: null,
|
|
699
|
+
},
|
|
700
|
+
|
|
686
701
|
/**
|
|
687
702
|
* Gives each card in the card view a status accent: a colored start
|
|
688
703
|
* border and icon. See CnObjectCard `accent`.
|
|
@@ -906,13 +921,15 @@ var script = {
|
|
|
906
921
|
* the Filter button and the view switch, in whatever width that row has
|
|
907
922
|
* beside a side panel (DqTeamwachtrij): the chips take the room the
|
|
908
923
|
* buttons leave, and those that do not fit move into the overflow chip.
|
|
924
|
+
* `'row'` puts them on a row of their own above the toolbar, wrapping
|
|
925
|
+
* onto more lines instead of folding into the overflow chip.
|
|
909
926
|
*
|
|
910
|
-
* @type {''|'toolbar'}
|
|
927
|
+
* @type {''|'toolbar'|'row'}
|
|
911
928
|
*/
|
|
912
929
|
quickFilterPlacement: {
|
|
913
930
|
type: String,
|
|
914
931
|
default: '',
|
|
915
|
-
validator: (v) => ['', 'toolbar'].includes(v),
|
|
932
|
+
validator: (v) => ['', 'toolbar', 'row'].includes(v),
|
|
916
933
|
},
|
|
917
934
|
|
|
918
935
|
/**
|
|
@@ -1946,9 +1963,11 @@ var script = {
|
|
|
1946
1963
|
},
|
|
1947
1964
|
|
|
1948
1965
|
/**
|
|
1949
|
-
*
|
|
1950
|
-
*
|
|
1951
|
-
*
|
|
1966
|
+
* Deprecated, without effect: the toolbar draws no sort select. The
|
|
1967
|
+
* table sorts by its column headers, the list, card and map views by
|
|
1968
|
+
* the Sort section in the index sidebar.
|
|
1969
|
+
*
|
|
1970
|
+
* @deprecated
|
|
1952
1971
|
*/
|
|
1953
1972
|
showSortSelect: {
|
|
1954
1973
|
type: Boolean,
|
|
@@ -1956,7 +1975,11 @@ var script = {
|
|
|
1956
1975
|
},
|
|
1957
1976
|
|
|
1958
1977
|
/**
|
|
1959
|
-
*
|
|
1978
|
+
* The orders the index sidebar's Sort section offers in the list, card
|
|
1979
|
+
* and map views (manifest `config.sortSelectOptions`): `{ value, label,
|
|
1980
|
+
* order? }`, the order its `order` (an `orderToSortKeys` form) or its
|
|
1981
|
+
* `value` read as one. Without them the section offers the sortable
|
|
1982
|
+
* columns.
|
|
1960
1983
|
*
|
|
1961
1984
|
* @type {Array<{ value: string, label: string }>}
|
|
1962
1985
|
*/
|
|
@@ -1966,8 +1989,10 @@ var script = {
|
|
|
1966
1989
|
},
|
|
1967
1990
|
|
|
1968
1991
|
/**
|
|
1969
|
-
*
|
|
1970
|
-
*
|
|
1992
|
+
* Deprecated, without effect: the toolbar sort select is gone; the
|
|
1993
|
+
* Sort section in the index sidebar shows the current order.
|
|
1994
|
+
*
|
|
1995
|
+
* @deprecated
|
|
1971
1996
|
*/
|
|
1972
1997
|
sortSelectValue: {
|
|
1973
1998
|
type: String,
|
|
@@ -2020,6 +2045,9 @@ var script = {
|
|
|
2020
2045
|
* defaults to `field`).
|
|
2021
2046
|
* - `folders` — explicit folder list for `source:'custom'`.
|
|
2022
2047
|
* - `allLabel` / `title` / `allowCreate` — passed to CnFolderSidebar.
|
|
2048
|
+
* - `scopeViews` — the view modes the scope's look (columns, title,
|
|
2049
|
+
* count line and the other scope keys) applies in, e.g. `["table",
|
|
2050
|
+
* "list"]`; other views keep the page's own look. Default: every view.
|
|
2023
2051
|
* - `pane` — `false` draws no pane: the scope still comes from the
|
|
2024
2052
|
* deep-link filter (`?caseType=<id>`) and still applies its look, as
|
|
2025
2053
|
* a list narrowed to one case type does without a folder column.
|
|
@@ -3751,22 +3779,45 @@ var script = {
|
|
|
3751
3779
|
},
|
|
3752
3780
|
|
|
3753
3781
|
/**
|
|
3754
|
-
* The
|
|
3755
|
-
*
|
|
3756
|
-
* list's current order (a header click that matches one shows it).
|
|
3782
|
+
* The list's current order, `[{ key, order }]`: the self-fetched list's,
|
|
3783
|
+
* else the `sortKeys` / `sortKey` props.
|
|
3757
3784
|
*
|
|
3758
|
-
* @return {string
|
|
3785
|
+
* @return {Array<{key: string, order: string}>} The order.
|
|
3759
3786
|
*/
|
|
3760
|
-
|
|
3761
|
-
if (this.
|
|
3762
|
-
return this.
|
|
3787
|
+
currentSortKeys() {
|
|
3788
|
+
if (this.isSelfFetchMode && this.list && this.list.sortKeys) {
|
|
3789
|
+
return this.list.sortKeys.value || []
|
|
3763
3790
|
}
|
|
3764
|
-
if (
|
|
3765
|
-
return
|
|
3791
|
+
if (Array.isArray(this.sortKeys) && this.sortKeys.length > 0) {
|
|
3792
|
+
return this.sortKeys
|
|
3766
3793
|
}
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3794
|
+
return this.sortKey ? [{ key: this.sortKey, order: this.sortOrder || 'asc' }] : []
|
|
3795
|
+
},
|
|
3796
|
+
|
|
3797
|
+
/**
|
|
3798
|
+
* The orders the index sidebar's Sort section offers: none in the table
|
|
3799
|
+
* view, which sorts by its column headers; else `sortSelectOptions`,
|
|
3800
|
+
* or else the sortable columns, ascending.
|
|
3801
|
+
*
|
|
3802
|
+
* @return {Array<{value: string, label: string, keys: Array<{key: string, order: string}>}>} The options.
|
|
3803
|
+
*/
|
|
3804
|
+
sidebarSortOptions() {
|
|
3805
|
+
if (this.currentViewMode === 'table') {
|
|
3806
|
+
return []
|
|
3807
|
+
}
|
|
3808
|
+
if (Array.isArray(this.sortSelectOptions) && this.sortSelectOptions.length > 0) {
|
|
3809
|
+
return this.sortSelectOptions
|
|
3810
|
+
.filter((o) => o && o.value !== undefined && o.value !== null)
|
|
3811
|
+
.map((o) => ({
|
|
3812
|
+
value: String(o.value),
|
|
3813
|
+
label: this.cnTranslate(o.label || String(o.value)),
|
|
3814
|
+
keys: orderToSortKeys(o.order !== undefined ? o.order : o.value),
|
|
3815
|
+
}))
|
|
3816
|
+
.filter((o) => o.keys.length > 0)
|
|
3817
|
+
}
|
|
3818
|
+
return (this.tableColumns || [])
|
|
3819
|
+
.filter((c) => c && typeof c === 'object' && c.key && isColumnSortable(c, this.effectiveSchema))
|
|
3820
|
+
.map((c) => ({ value: c.key, label: this.cnTranslate(c.label || c.key), keys: [{ key: c.key, order: 'asc' }] }))
|
|
3770
3821
|
},
|
|
3771
3822
|
|
|
3772
3823
|
/**
|
|
@@ -3798,7 +3849,7 @@ var script = {
|
|
|
3798
3849
|
* @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md
|
|
3799
3850
|
*/
|
|
3800
3851
|
activeScopeLayout() {
|
|
3801
|
-
if (!this.folderSidebar) {
|
|
3852
|
+
if (!this.folderSidebar || !this.scopeShapesView) {
|
|
3802
3853
|
return { columns: null, sortKeys: [], searchFields: [] }
|
|
3803
3854
|
}
|
|
3804
3855
|
return resolveScopeLayout({
|
|
@@ -3808,6 +3859,23 @@ var script = {
|
|
|
3808
3859
|
})
|
|
3809
3860
|
},
|
|
3810
3861
|
|
|
3862
|
+
/**
|
|
3863
|
+
* Whether the active scope's look applies in the current view mode:
|
|
3864
|
+
* always, unless `folderSidebar.scopeViews` names the view modes it is
|
|
3865
|
+
* for (`["table", "list"]`), so the board keeps the page's generic
|
|
3866
|
+
* look (DqWerkbord). The scope's filter applies in every view.
|
|
3867
|
+
*
|
|
3868
|
+
* @spec openspec/changes/index-scope-views/specs/index-page/spec.md#requirement-a-scope-look-can-be-limited-to-view-modes
|
|
3869
|
+
* @return {boolean}
|
|
3870
|
+
*/
|
|
3871
|
+
scopeShapesView() {
|
|
3872
|
+
const views = this.folderSidebar && this.folderSidebar.scopeViews;
|
|
3873
|
+
if (!Array.isArray(views) || views.length === 0) {
|
|
3874
|
+
return true
|
|
3875
|
+
}
|
|
3876
|
+
return views.includes(this.currentViewMode)
|
|
3877
|
+
},
|
|
3878
|
+
|
|
3811
3879
|
/**
|
|
3812
3880
|
* This page's own value of each presentation key, which a query preset
|
|
3813
3881
|
* may have set: what `presented()` falls back to without a scope.
|
|
@@ -3842,7 +3910,7 @@ var script = {
|
|
|
3842
3910
|
* @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation
|
|
3843
3911
|
*/
|
|
3844
3912
|
activeScopePresentation() {
|
|
3845
|
-
if (!this.folderSidebar) {
|
|
3913
|
+
if (!this.folderSidebar || !this.scopeShapesView) {
|
|
3846
3914
|
return {}
|
|
3847
3915
|
}
|
|
3848
3916
|
return resolveScopePresentation({ scope: this.activeScope, row: this.activeScopeRow })
|
|
@@ -4084,6 +4152,20 @@ var script = {
|
|
|
4084
4152
|
* @return {(Array<object>|null)} The tabs.
|
|
4085
4153
|
* @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md
|
|
4086
4154
|
*/
|
|
4155
|
+
/**
|
|
4156
|
+
* The chip the strip lights: the active tab, else the default tab of
|
|
4157
|
+
* tabs that arrived after setup (`quickFiltersFrom`), which is the
|
|
4158
|
+
* one the fetch applies.
|
|
4159
|
+
*
|
|
4160
|
+
* @return {number|null} The tab index, or null without tabs.
|
|
4161
|
+
*/
|
|
4162
|
+
shownQuickFilterIndex() {
|
|
4163
|
+
if (this.activeQuickFilterIndex !== null && this.activeQuickFilterIndex !== undefined) {
|
|
4164
|
+
return this.activeQuickFilterIndex
|
|
4165
|
+
}
|
|
4166
|
+
return this.quickFilterMultiple ? null : resolveInitialQuickFilterIndex(this.tabStripEntries)
|
|
4167
|
+
},
|
|
4168
|
+
|
|
4087
4169
|
tabStripEntries() {
|
|
4088
4170
|
if (this.lensTabs.length > 0) {
|
|
4089
4171
|
return this.lensTabs
|
|
@@ -4310,6 +4392,22 @@ var script = {
|
|
|
4310
4392
|
return specs
|
|
4311
4393
|
},
|
|
4312
4394
|
|
|
4395
|
+
/**
|
|
4396
|
+
* The rendered columns by key, so a card fact shows what its table
|
|
4397
|
+
* cell shows (label, formatter, widget).
|
|
4398
|
+
*
|
|
4399
|
+
* @return {object} Column definitions keyed by property.
|
|
4400
|
+
*/
|
|
4401
|
+
cardFieldColumns() {
|
|
4402
|
+
const byKey = {};
|
|
4403
|
+
for (const col of this.renderedColumns || []) {
|
|
4404
|
+
if (col && typeof col === 'object' && typeof col.key === 'string') {
|
|
4405
|
+
byKey[col.key] = col;
|
|
4406
|
+
}
|
|
4407
|
+
}
|
|
4408
|
+
return byKey
|
|
4409
|
+
},
|
|
4410
|
+
|
|
4313
4411
|
/**
|
|
4314
4412
|
* The property keys the board look's card facts show: the page's
|
|
4315
4413
|
* `cardFields`, else the first four list columns. Null without the
|
|
@@ -5159,8 +5257,11 @@ var script = {
|
|
|
5159
5257
|
|
|
5160
5258
|
const present = new Set(cols.map((c) => (typeof c === 'string' ? c : c.key)));
|
|
5161
5259
|
const byKey = new Map(this.governedColumns.map((c) => [c.key, c]));
|
|
5260
|
+
// A scope that sets its own columns does not get its folder field back:
|
|
5261
|
+
// every row of the scope holds the same value there.
|
|
5262
|
+
const scopeField = this.activeScopeLayout.columns ? this.folderFilterKey : '';
|
|
5162
5263
|
visible.forEach((key) => {
|
|
5163
|
-
if (present.has(key)) {
|
|
5264
|
+
if (present.has(key) || key === scopeField) {
|
|
5164
5265
|
return
|
|
5165
5266
|
}
|
|
5166
5267
|
const def = byKey.get(key);
|
|
@@ -5635,6 +5736,28 @@ var script = {
|
|
|
5635
5736
|
return count > 0 ? `${name}, ${translate('nextcloud-vue', '{count} active', { count })}` : name
|
|
5636
5737
|
},
|
|
5637
5738
|
|
|
5739
|
+
/** @return {string} The field the folder sidebar filters by, or ''. */
|
|
5740
|
+
folderFilterKey() {
|
|
5741
|
+
return (this.folderSidebar && (this.folderSidebar.filterField || this.folderSidebar.field)) || ''
|
|
5742
|
+
},
|
|
5743
|
+
|
|
5744
|
+
/**
|
|
5745
|
+
* The filters the table's header filters show: every active filter but
|
|
5746
|
+
* the selected folder's own, which the Active chip already names, so
|
|
5747
|
+
* the table draws no summary chip for it.
|
|
5748
|
+
*
|
|
5749
|
+
* @return {object} The filters.
|
|
5750
|
+
*/
|
|
5751
|
+
tableActiveFilters() {
|
|
5752
|
+
const filters = this.effectiveActiveFilters || {};
|
|
5753
|
+
const key = this.folderFilterKey;
|
|
5754
|
+
if (!key || this.selectedFolderId === null || this.selectedFolderId === undefined || !Object.hasOwn(filters, key)) {
|
|
5755
|
+
return filters
|
|
5756
|
+
}
|
|
5757
|
+
const { [key]: _folder, ...rest } = filters;
|
|
5758
|
+
return rest
|
|
5759
|
+
},
|
|
5760
|
+
|
|
5638
5761
|
/**
|
|
5639
5762
|
* The active filters as chips for the board toolbar's second row, one
|
|
5640
5763
|
* per filter: "Team: Woo". A filter with no value is not active.
|
|
@@ -6038,6 +6161,8 @@ var script = {
|
|
|
6038
6161
|
showMetadata: this.resolvedSidebar.showMetadata !== false,
|
|
6039
6162
|
personalColumns: this.personalColumns,
|
|
6040
6163
|
pinnedCount: this.pinnedColumnCount,
|
|
6164
|
+
sortOptions: this.sidebarSortOptions,
|
|
6165
|
+
currentSort: this.currentSortKeys,
|
|
6041
6166
|
...this.sidebarSearchProps,
|
|
6042
6167
|
}
|
|
6043
6168
|
},
|
|
@@ -7510,35 +7635,18 @@ var script = {
|
|
|
7510
7635
|
},
|
|
7511
7636
|
|
|
7512
7637
|
/**
|
|
7513
|
-
*
|
|
7514
|
-
*
|
|
7638
|
+
* An order chosen in the index sidebar's Sort section. It goes the way
|
|
7639
|
+
* a header click goes: the self-fetched list sorts (`_order`, kept in
|
|
7640
|
+
* the address), and `sort` is emitted for a host that sorts itself.
|
|
7515
7641
|
*
|
|
7516
|
-
* @param {
|
|
7517
|
-
* @return {Array<{key: string, order: string}>} The sort keys.
|
|
7518
|
-
*/
|
|
7519
|
-
sortSelectKeys(option) {
|
|
7520
|
-
if (!option) {
|
|
7521
|
-
return []
|
|
7522
|
-
}
|
|
7523
|
-
return orderToSortKeys(option.order !== undefined ? option.order : option.value)
|
|
7524
|
-
},
|
|
7525
|
-
|
|
7526
|
-
/**
|
|
7527
|
-
* A choice in the sort select. On a self-fetch page it orders the list
|
|
7528
|
-
* as a header click does (`_order`, kept in the address); every page
|
|
7529
|
-
* also emits `sort-change` with the value.
|
|
7530
|
-
*
|
|
7531
|
-
* @param {string} value The chosen option's value.
|
|
7642
|
+
* @param {Array<{key: string, order: string}>} keys The chosen order.
|
|
7532
7643
|
* @return {void}
|
|
7533
7644
|
*/
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
|
|
7537
|
-
if (option && keys.length > 0 && this.isSelfFetchMode && typeof this.list.onSort === 'function') {
|
|
7538
|
-
this.list.onSort({ key: keys[0].key, order: keys[0].order, keys });
|
|
7539
|
-
this.persistViewStateToRoute(this.currentViewState());
|
|
7645
|
+
onSidebarSortChange(keys) {
|
|
7646
|
+
if (!Array.isArray(keys) || keys.length === 0) {
|
|
7647
|
+
return
|
|
7540
7648
|
}
|
|
7541
|
-
this
|
|
7649
|
+
this.onSortEvent({ key: keys[0].key, order: keys[0].order, keys });
|
|
7542
7650
|
},
|
|
7543
7651
|
|
|
7544
7652
|
/**
|
|
@@ -8726,6 +8834,7 @@ var script = {
|
|
|
8726
8834
|
'columns-reset': () => this.onColumnsReset(),
|
|
8727
8835
|
'filter-change': (event) => this.onFilterEvent(event),
|
|
8728
8836
|
'clear-filters': () => this.onClearFilters(),
|
|
8837
|
+
'sort-change': (keys) => this.onSidebarSortChange(keys),
|
|
8729
8838
|
},
|
|
8730
8839
|
};
|
|
8731
8840
|
},
|