@conduction/nextcloud-vue 2.68.0 → 2.70.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/CnActionsBar/CnActionsBar.vue2.js +25 -0
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +155 -152
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +77 -0
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +8 -8
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js +1 -0
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js +28 -0
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +4 -2
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js +25 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js +32 -17
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue2.js +14 -1
- package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue2.js.map +1 -1
- package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +43 -2
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +3 -3
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +45 -35
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +19 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +35 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +94 -6
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +64 -19
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +28 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +3 -2
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js +12 -0
- package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +9 -0
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +54 -7
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +26 -8
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +143 -0
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +68 -25
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js.map +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +4 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js +17 -3
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js +25 -24
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js.map +1 -1
- 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 +29 -2
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +7 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +24 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +81 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +25 -3
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +15 -2
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js +31 -32
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -1
- package/dist/esm/l10n/en.json.js +3 -0
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +3 -0
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/mixins/pageViews.js +278 -11
- package/dist/esm/mixins/pageViews.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +145 -0
- package/dist/esm/store/plugins/dashboardLayouts.js +35 -1
- package/dist/esm/store/plugins/dashboardLayouts.js.map +1 -1
- package/dist/esm/utils/capabilityComparison.js +29 -1
- package/dist/esm/utils/capabilityComparison.js.map +1 -1
- package/dist/esm/utils/formatMetric.js +137 -16
- package/dist/esm/utils/formatMetric.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +2840 -1477
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +145 -0
- package/l10n/en.json +3 -0
- package/l10n/nl.json +3 -0
- package/package.json +1 -1
- package/src/components/CnActionsBar/CnActionsBar.md +2 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +28 -2
- package/src/components/CnAppNav/CnAppNav.vue +85 -8
- package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +45 -0
- package/src/components/CnCalendarWidget/CnCalendarWidget.vue +32 -4
- package/src/components/CnCapabilityTable/CnCapabilityTable.vue +14 -0
- package/src/components/CnDashboardGrid/CnDashboardGrid.md +2 -0
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +54 -2
- package/src/components/CnDashboardPage/CnDashboardPage.md +2 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +59 -35
- package/src/components/CnDataTable/CnDataTable.vue +35 -1
- package/src/components/CnDetailPage/CnDetailPage.md +8 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +124 -8
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +30 -1
- package/src/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue +12 -0
- package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +9 -0
- package/src/components/CnHeaderWidget/CnHeaderWidget.vue +95 -8
- package/src/components/CnIndexPage/CnIndexPage.vue +171 -6
- package/src/components/CnNextStepCard/CnNextStepCard.vue +11 -0
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +4 -1
- package/src/components/CnStackedBarWidget/CnStackedBarWidget.vue +34 -7
- package/src/components/CnStagesWidget/CnStagesWidget.vue +19 -0
- package/src/components/CnStatWidget/CnStatWidget.vue +38 -2
- package/src/components/CnStatsBlock/CnStatsBlock.md +2 -0
- package/src/components/CnStatsBlock/CnStatsBlock.vue +25 -2
- package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +95 -3
- package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +24 -3
- package/src/css/detail-page.css +10 -0
- package/src/css/index-page.css +12 -0
- package/src/css/kpi-card.css +15 -0
- package/src/mixins/pageViews.js +277 -10
- package/src/schemas/app-manifest-v2.schema.json +73 -6
- package/src/store/plugins/dashboardLayouts.js +34 -0
- package/src/utils/capabilityComparison.js +28 -0
- package/src/utils/formatMetric.js +143 -15
- package/src/utils/validateManifestV2.compiled.js +2 -2
|
@@ -5,6 +5,7 @@ import { NcActionButton, NcActionCaption, NcActionLink, NcActionSeparator, NcBut
|
|
|
5
5
|
import { ref, provide, watch } from 'vue';
|
|
6
6
|
import AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue';
|
|
7
7
|
import ArrowLeft from 'vue-material-design-icons/ArrowLeft.vue';
|
|
8
|
+
import Check from 'vue-material-design-icons/Check.vue';
|
|
8
9
|
import ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue';
|
|
9
10
|
import ChevronRight from 'vue-material-design-icons/ChevronRight.vue';
|
|
10
11
|
import Cog from 'vue-material-design-icons/Cog.vue';
|
|
@@ -13,6 +14,7 @@ import InformationOutline from 'vue-material-design-icons/InformationOutline.vue
|
|
|
13
14
|
import Pencil from 'vue-material-design-icons/Pencil.vue';
|
|
14
15
|
import Plus from 'vue-material-design-icons/Plus.vue';
|
|
15
16
|
import Refresh from 'vue-material-design-icons/Refresh.vue';
|
|
17
|
+
import Restore from 'vue-material-design-icons/Restore.vue';
|
|
16
18
|
import ViewDashboardOutline from 'vue-material-design-icons/ViewDashboardOutline.vue';
|
|
17
19
|
import __sfc_main$i from '../../dialogs/CnRelationLinkModal.vue.js';
|
|
18
20
|
import __sfc_main$h from '../../dialogs/CnWidgetStyleEditorModal.vue.js';
|
|
@@ -201,9 +203,11 @@ var script = {
|
|
|
201
203
|
CnTranslatedBadge: __sfc_main$g,
|
|
202
204
|
CnWidgetStyleEditorModal: __sfc_main$h,
|
|
203
205
|
CnRelationLinkModal: __sfc_main$i,
|
|
206
|
+
Check,
|
|
204
207
|
Cog,
|
|
205
208
|
Plus,
|
|
206
209
|
Pencil,
|
|
210
|
+
Restore,
|
|
207
211
|
},
|
|
208
212
|
|
|
209
213
|
mixins: [gridLayout, pageViews],
|
|
@@ -696,6 +700,20 @@ var script = {
|
|
|
696
700
|
default: '',
|
|
697
701
|
},
|
|
698
702
|
|
|
703
|
+
/**
|
|
704
|
+
* Whether the user arranges each view (`views`) for themselves. On,
|
|
705
|
+
* the header offers Arrange view next to the view switch; the
|
|
706
|
+
* arrangement is stored per view and per user (the server, mirrored
|
|
707
|
+
* in the browser) and a reset returns the view to its manifest
|
|
708
|
+
* layout. Off (the default), a view renders as the manifest says.
|
|
709
|
+
*
|
|
710
|
+
* @type {boolean}
|
|
711
|
+
*/
|
|
712
|
+
userLayout: {
|
|
713
|
+
type: Boolean,
|
|
714
|
+
default: false,
|
|
715
|
+
},
|
|
716
|
+
|
|
699
717
|
/**
|
|
700
718
|
* Whether the Refresh entry renders in the page-header menu.
|
|
701
719
|
* Tri-state:
|
|
@@ -1119,18 +1137,38 @@ var script = {
|
|
|
1119
1137
|
* belongs to; the record's display name follows as the current
|
|
1120
1138
|
* crumb. `label` goes through the host translate function and shows
|
|
1121
1139
|
* as text; `icon` (an MDI name, e.g. `Home`) draws that icon instead,
|
|
1122
|
-
* with the label as its accessible name.
|
|
1140
|
+
* with the label as its accessible name. `currentField` names a field
|
|
1141
|
+
* of the record (a dotted path, e.g. `identifier`) whose value is the
|
|
1142
|
+
* current crumb instead of the display name; an empty value falls back
|
|
1143
|
+
* to the display name. `separator` draws that text (e.g. `/`) between
|
|
1144
|
+
* the crumbs instead of the chevron. Null (the default) draws no
|
|
1123
1145
|
* trail.
|
|
1124
1146
|
*
|
|
1125
1147
|
* @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-a-detail-page-drops-its-eyebrow-and-shows-a-breadcrumb
|
|
1126
1148
|
* @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-declared-breadcrumb-label-shows-as-text
|
|
1127
|
-
* @
|
|
1149
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
|
|
1150
|
+
* @type {{label: string, route?: string, params?: object, href?: string, icon?: string, currentField?: string, separator?: string}|null}
|
|
1128
1151
|
*/
|
|
1129
1152
|
breadcrumb: {
|
|
1130
1153
|
type: Object,
|
|
1131
1154
|
default: null,
|
|
1132
1155
|
},
|
|
1133
1156
|
|
|
1157
|
+
/**
|
|
1158
|
+
* Whether the record's widget cards (the body grid and the side
|
|
1159
|
+
* column) keep their overflow Actions menu when their definition does
|
|
1160
|
+
* not say (`showActions`). `false` (manifest
|
|
1161
|
+
* `config.showWidgetActions: false`) drops it, as on a dashboard; a
|
|
1162
|
+
* widget with `showActions: true` keeps its menu. A card that offers
|
|
1163
|
+
* an Add action keeps the menu that holds it. True by default.
|
|
1164
|
+
*
|
|
1165
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-detail-page-can-drop-the-widget-actions-menu
|
|
1166
|
+
*/
|
|
1167
|
+
showWidgetActions: {
|
|
1168
|
+
type: Boolean,
|
|
1169
|
+
default: true,
|
|
1170
|
+
},
|
|
1171
|
+
|
|
1134
1172
|
/**
|
|
1135
1173
|
* A column of cards beside the body (manifest `config.sideColumn`),
|
|
1136
1174
|
* for the record's facts: deadline, requester, handler, links. Each
|
|
@@ -1346,6 +1384,8 @@ var script = {
|
|
|
1346
1384
|
|
|
1347
1385
|
data() {
|
|
1348
1386
|
return {
|
|
1387
|
+
/** Whether the user is arranging the chosen view (`userLayout`). */
|
|
1388
|
+
arrangingView: false,
|
|
1349
1389
|
/** Whether the record edit form is open. */
|
|
1350
1390
|
editFormOpen: false,
|
|
1351
1391
|
/**
|
|
@@ -2320,7 +2360,38 @@ var script = {
|
|
|
2320
2360
|
} else if (crumb.href) {
|
|
2321
2361
|
first.href = crumb.href;
|
|
2322
2362
|
}
|
|
2323
|
-
return [first, { label: this.
|
|
2363
|
+
return [first, { label: this.breadcrumbCurrentLabel }]
|
|
2364
|
+
},
|
|
2365
|
+
|
|
2366
|
+
/**
|
|
2367
|
+
* The current crumb: the record's `breadcrumb.currentField` value
|
|
2368
|
+
* (the case number on a case page) when declared and filled, else the
|
|
2369
|
+
* display name.
|
|
2370
|
+
*
|
|
2371
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
|
|
2372
|
+
* @return {string}
|
|
2373
|
+
*/
|
|
2374
|
+
breadcrumbCurrentLabel() {
|
|
2375
|
+
const field = this.breadcrumb && this.breadcrumb.currentField;
|
|
2376
|
+
if (typeof field === 'string' && field !== '') {
|
|
2377
|
+
const value = stageOf(this.resolvedObject, field);
|
|
2378
|
+
if (value !== '') {
|
|
2379
|
+
return value
|
|
2380
|
+
}
|
|
2381
|
+
}
|
|
2382
|
+
return this.displayTitle
|
|
2383
|
+
},
|
|
2384
|
+
|
|
2385
|
+
/**
|
|
2386
|
+
* The text drawn between the crumbs (`breadcrumb.separator`), or ''
|
|
2387
|
+
* for the chevron.
|
|
2388
|
+
*
|
|
2389
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
|
|
2390
|
+
* @return {string}
|
|
2391
|
+
*/
|
|
2392
|
+
breadcrumbSeparator() {
|
|
2393
|
+
const separator = this.breadcrumb && this.breadcrumb.separator;
|
|
2394
|
+
return typeof separator === 'string' ? separator : ''
|
|
2324
2395
|
},
|
|
2325
2396
|
|
|
2326
2397
|
/**
|
|
@@ -2516,7 +2587,7 @@ var script = {
|
|
|
2516
2587
|
viewDisplayLayout() {
|
|
2517
2588
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions -- reading the flag IS the effect, as in bodyGridLayout
|
|
2518
2589
|
this.editingBody;
|
|
2519
|
-
return this.activeView ? this.closeDroppedRows(this.
|
|
2590
|
+
return this.activeView ? this.closeDroppedRows(this.activeViewLayout) : []
|
|
2520
2591
|
},
|
|
2521
2592
|
|
|
2522
2593
|
/**
|
|
@@ -2534,16 +2605,18 @@ var script = {
|
|
|
2534
2605
|
* chosen view's grid in the region the view switch controls (left out
|
|
2535
2606
|
* when the view is empty; the empty state takes the region then).
|
|
2536
2607
|
*
|
|
2537
|
-
* @return {Array<{key: string, view: boolean, layout: Array<object>, attrs: object}>}
|
|
2608
|
+
* @return {Array<{key: string, view: boolean, layout: Array<object>, editable: boolean, attrs: object}>}
|
|
2538
2609
|
* @spec openspec/changes/view-switch-containers/specs/view-switch-containers/spec.md#requirement-a-page-declares-views-that-each-hold-a-widget-grid
|
|
2539
2610
|
*/
|
|
2540
2611
|
bodyGridSections() {
|
|
2541
|
-
const sections = this.hasBodyGrid ? [{ key: 'body', view: false, layout: this.bodyGridLayout, attrs: {} }] : [];
|
|
2612
|
+
const sections = this.hasBodyGrid ? [{ key: 'body', view: false, layout: this.bodyGridLayout, editable: this.editingBody, attrs: {} }] : [];
|
|
2542
2613
|
if (this.hasViews && !this.viewIsEmpty) {
|
|
2543
2614
|
sections.push({
|
|
2544
2615
|
key: `view-${this.activeViewId}`,
|
|
2545
2616
|
view: true,
|
|
2546
2617
|
layout: this.viewDisplayLayout,
|
|
2618
|
+
// The user arranges the view while Arrange view is on.
|
|
2619
|
+
editable: this.editingBody || this.arrangingView,
|
|
2547
2620
|
attrs: {
|
|
2548
2621
|
id: this.viewRegionId,
|
|
2549
2622
|
role: 'region',
|
|
@@ -2868,6 +2941,21 @@ var script = {
|
|
|
2868
2941
|
},
|
|
2869
2942
|
|
|
2870
2943
|
methods: {
|
|
2944
|
+
/**
|
|
2945
|
+
* Start or finish arranging the chosen view. Finishing stores the
|
|
2946
|
+
* arrangement of every view the user moved, once.
|
|
2947
|
+
*
|
|
2948
|
+
* @return {void}
|
|
2949
|
+
* @spec openspec/changes/page-view-user-layouts/specs/view-switch-containers/spec.md#requirement-a-user-arranges-each-view-for-themselves
|
|
2950
|
+
*/
|
|
2951
|
+
toggleArrangeView() {
|
|
2952
|
+
const leaving = this.arrangingView;
|
|
2953
|
+
this.arrangingView = !this.arrangingView;
|
|
2954
|
+
if (leaving) {
|
|
2955
|
+
this.saveViewUserLayouts();
|
|
2956
|
+
}
|
|
2957
|
+
},
|
|
2958
|
+
|
|
2871
2959
|
// Expose the shared grid helpers to the template (grid mode + auto-body).
|
|
2872
2960
|
cnGridCellStyle,
|
|
2873
2961
|
hasGridRow,
|