@antelopejs/dms 0.7.15 → 0.7.16
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/CHANGELOG.md +18 -0
- package/dist/test/unit/interfaces/dms/page-layout-query.test.js +16 -0
- package/dist/test/unit/interfaces/dms/page-layout-query.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms-base/layout-header-actions.test.js +66 -0
- package/dist/test/unit/interfaces/dms-base/layout-header-actions.test.js.map +1 -1
- package/frontend-vue/layers/dms-core/app/composables/period/presetResolvers.ts +19 -1
- package/frontend-vue/layers/dms-core/app/composables/period/usePeriod.ts +52 -28
- package/frontend-vue/layers/dms-core/i18n/locales/core-en-GB.json +1 -0
- package/frontend-vue/layers/dms-core/i18n/locales/core-fr-FR.json +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/PageHeaderActionBar.vue +48 -4
- package/frontend-vue/layers/dms-layout/app/build/components/layout/PageHeaderActionsOutlet.vue +6 -2
- package/frontend-vue/layers/dms-layout/app/composables/layout/usePageHeaderActions.ts +32 -1
- package/frontend-vue/layers/dms-ui/app/build/components/period/PeriodRangeCalendar.vue +17 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodDisplay.ts +49 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/period/usePeriodLocation.ts +34 -11
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableUrlTab.ts +47 -0
- package/frontend-vue/layers/dms-ui/app/components/period/PeriodSelector.vue +32 -6
- package/frontend-vue/layers/dms-ui/app/components/table-view/TableView.vue +14 -4
- package/frontend-vue/tests/header-action-page-query.test.ts +96 -1
- package/frontend-vue/tests/period-day-rollover.test.ts +80 -0
- package/frontend-vue/tests/period-max-days.test.ts +128 -0
- package/frontend-vue/tests/period-selector-url.test.ts +44 -8
- package/frontend-vue/tests/table-view-url-tab.test.ts +115 -0
- package/package.json +2 -2
- package/skills/dms-pages/REFERENCE.md +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.7.16
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.7.15...v0.7.16)
|
|
6
|
+
|
|
7
|
+
### 🚀 Enhancements
|
|
8
|
+
|
|
9
|
+
- **layout:** Hide header buttons by availability and order them with page actions ([#237](https://github.com/AntelopeJS/dms/pull/237))
|
|
10
|
+
- **period:** Roll calendar presets over at midnight, sync the route query and cap custom ranges ([#227](https://github.com/AntelopeJS/dms/pull/227))
|
|
11
|
+
- **table-view:** Follow the URL tab after mount ([#229](https://github.com/AntelopeJS/dms/pull/229))
|
|
12
|
+
|
|
13
|
+
### 🏡 Chore
|
|
14
|
+
|
|
15
|
+
- **release:** @antelopejs/interface-dms v0.5.11 ([8cb631b4](https://github.com/AntelopeJS/dms/commit/8cb631b4))
|
|
16
|
+
|
|
17
|
+
### ❤️ Contributors
|
|
18
|
+
|
|
19
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
20
|
+
|
|
3
21
|
## v0.7.15
|
|
4
22
|
|
|
5
23
|
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.7.14...v0.7.15)
|
|
@@ -67,6 +67,12 @@ describe("[unit] interfaces/dms/page — header availability reads the page quer
|
|
|
67
67
|
? undefined
|
|
68
68
|
: { reason: "$lang.unknown_workspace" },
|
|
69
69
|
},
|
|
70
|
+
{
|
|
71
|
+
id: "add-language",
|
|
72
|
+
label: "Add language",
|
|
73
|
+
target: { type: "page", url: "/languages/new" },
|
|
74
|
+
availability: ({ query }) => query?.workspace === "locked" ? { hidden: true } : undefined,
|
|
75
|
+
},
|
|
70
76
|
],
|
|
71
77
|
}));
|
|
72
78
|
cleanups.push(await (0, page_access_1.registerTestPage)(controller));
|
|
@@ -97,6 +103,16 @@ describe("[unit] interfaces/dms/page — header availability reads the page quer
|
|
|
97
103
|
(0, chai_1.expect)(bare.headerActions[0]).to.deep.include({ disabled: true });
|
|
98
104
|
(0, chai_1.expect)(bare.headerActionsQuery).to.deep.equal({});
|
|
99
105
|
});
|
|
106
|
+
it("leaves out the button its availability hides for the query", async () => {
|
|
107
|
+
const ids = (options) => options.headerActions.map((action) => action.id);
|
|
108
|
+
const locked = await serve({ workspace: "locked" });
|
|
109
|
+
(0, chai_1.expect)(ids(locked)).to.deep.equal(["download"]);
|
|
110
|
+
(0, chai_1.expect)(locked.headerActionsQuery).to.deep.equal({ workspace: "locked" });
|
|
111
|
+
(0, chai_1.expect)(ids(await serve({ workspace: "web" }))).to.deep.equal([
|
|
112
|
+
"download",
|
|
113
|
+
"add-language",
|
|
114
|
+
]);
|
|
115
|
+
});
|
|
100
116
|
it("reads one value per name from the layout request", () => {
|
|
101
117
|
(0, chai_1.expect)((0, metadata_helpers_1.readRequestQuery)({
|
|
102
118
|
url: new URL("http://dms.test/p/pagelayout?workspace=web&tag=a&tag=b"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-layout-query.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms/page-layout-query.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"page-layout-query.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms/page-layout-query.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ const chai_1 = require("chai");
|
|
|
4
4
|
const layouts_1 = require("@antelopejs/interface-dms/base/layouts");
|
|
5
5
|
const layout_filter_1 = require("@antelopejs/interface-dms/page/internal/layout-filter");
|
|
6
6
|
const permission_ids_1 = require("@antelopejs/interface-dms/internal/permission-ids");
|
|
7
|
+
const request_filter_1 = require("@antelopejs/interface-dms/base/table-view/internal/request-filter");
|
|
7
8
|
const CONTEXT = { tenantId: "tenant", user: undefined };
|
|
8
9
|
function actionsOf(options) {
|
|
9
10
|
return options
|
|
@@ -62,6 +63,19 @@ describe("[unit] interfaces/dms-base/layouts — header buttons", () => {
|
|
|
62
63
|
},
|
|
63
64
|
]);
|
|
64
65
|
});
|
|
66
|
+
it("serves the order a button declares", () => {
|
|
67
|
+
const layout = (0, layouts_1.DefaultLayout)({
|
|
68
|
+
headerActions: [
|
|
69
|
+
{
|
|
70
|
+
id: "add",
|
|
71
|
+
label: "Add",
|
|
72
|
+
target: { type: "page", url: "/a" },
|
|
73
|
+
order: 1,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
(0, chai_1.expect)(actionsOf(layout.options)[0]).to.deep.include({ order: 1 });
|
|
78
|
+
});
|
|
65
79
|
it("keeps the full-width default next to the buttons", () => {
|
|
66
80
|
const layout = (0, layouts_1.DefaultLayout)({ headerActions: [] });
|
|
67
81
|
(0, chai_1.expect)(layout.options).to.deep.equal({
|
|
@@ -114,6 +128,29 @@ describe("[unit] interfaces/dms/page — header buttons served per caller", () =
|
|
|
114
128
|
});
|
|
115
129
|
(0, chai_1.expect)(invite).to.not.have.property("availability");
|
|
116
130
|
});
|
|
131
|
+
it("leaves out a button its availability hides, for that query only", async () => {
|
|
132
|
+
const scoped = (0, layouts_1.DefaultLayout)({
|
|
133
|
+
headerActions: [
|
|
134
|
+
link("open"),
|
|
135
|
+
{
|
|
136
|
+
...link("add-key"),
|
|
137
|
+
availability: ({ query }) => query?.workspace === "modules" ? { hidden: true } : undefined,
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
});
|
|
141
|
+
const serve = async (query) => (await (0, layout_filter_1.filterLayoutHeaderActions)(scoped, async () => new Set(), { ...CONTEXT, query }, "pages.lang")).options;
|
|
142
|
+
const readOnly = await serve({ workspace: "modules" });
|
|
143
|
+
(0, chai_1.expect)(readOnly.headerActions.map((action) => action.id)).to.deep.equal([
|
|
144
|
+
"open",
|
|
145
|
+
]);
|
|
146
|
+
(0, chai_1.expect)(readOnly.headerActionsQuery).to.deep.equal({ workspace: "modules" });
|
|
147
|
+
const own = await serve({ workspace: "own" });
|
|
148
|
+
(0, chai_1.expect)(own.headerActions.map((action) => action.id)).to.deep.equal([
|
|
149
|
+
"open",
|
|
150
|
+
"add-key",
|
|
151
|
+
]);
|
|
152
|
+
(0, chai_1.expect)(own.headerActions[1]).to.not.have.property("disabled");
|
|
153
|
+
});
|
|
117
154
|
it("hands availability the page query, and says which query it served", async () => {
|
|
118
155
|
const queue = (0, layouts_1.DefaultLayout)({
|
|
119
156
|
headerActions: [
|
|
@@ -246,4 +283,33 @@ describe("[unit] interfaces/dms/page — a table's buttons placed in the header"
|
|
|
246
283
|
]);
|
|
247
284
|
});
|
|
248
285
|
});
|
|
286
|
+
describe("[unit] interfaces/dms-base/table-view — a toolbar button its availability hides", () => {
|
|
287
|
+
it("is left out of the buttons served, the others kept", async () => {
|
|
288
|
+
const declared = [
|
|
289
|
+
{ id: "export", label: "Export", target: { type: "page", url: "/x" } },
|
|
290
|
+
{
|
|
291
|
+
id: "add",
|
|
292
|
+
label: "Add",
|
|
293
|
+
target: { type: "page", url: "/new" },
|
|
294
|
+
availability: () => ({ hidden: true }),
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
id: "purge",
|
|
298
|
+
label: "Purge",
|
|
299
|
+
target: { type: "page", url: "/purge" },
|
|
300
|
+
availability: () => ({ reason: "$locked" }),
|
|
301
|
+
},
|
|
302
|
+
];
|
|
303
|
+
const serialized = declared.map(({ availability: _availability, ...button }) => button);
|
|
304
|
+
const served = await (0, request_filter_1.resolveCustomButtons)(new Set(), declared, serialized, "pages.lang.table", CONTEXT);
|
|
305
|
+
(0, chai_1.expect)(served?.map((button) => button.id)).to.deep.equal([
|
|
306
|
+
"export",
|
|
307
|
+
"purge",
|
|
308
|
+
]);
|
|
309
|
+
(0, chai_1.expect)(served?.[1]).to.deep.include({
|
|
310
|
+
disabled: true,
|
|
311
|
+
disabledReason: "$locked",
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
});
|
|
249
315
|
//# sourceMappingURL=layout-header-actions.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-header-actions.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/layout-header-actions.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout-header-actions.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/layout-header-actions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,17 +115,35 @@ const PRESET_RANGE_RESOLVERS: Record<
|
|
|
115
115
|
all: () => null,
|
|
116
116
|
};
|
|
117
117
|
|
|
118
|
+
const HOURS_PER_DAY = 24;
|
|
118
119
|
const RELATIVE_PRESETS = new Set<PeriodPreset>(["last-hour", "last-24h"]);
|
|
120
|
+
const UNBOUNDED_PRESETS = new Set<PeriodPreset>(["all", "custom"]);
|
|
119
121
|
|
|
120
122
|
/**
|
|
121
123
|
* Relative presets resolve against the instant they are read: a live
|
|
122
124
|
* dashboard must re-resolve them as time passes, where calendar presets
|
|
123
|
-
* stay valid until the
|
|
125
|
+
* stay valid until the next local midnight.
|
|
124
126
|
*/
|
|
125
127
|
export function isRelativePreset(preset: PeriodPreset): boolean {
|
|
126
128
|
return RELATIVE_PRESETS.has(preset);
|
|
127
129
|
}
|
|
128
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Calendar presets (`today`, `last-7-days`, `this-month`...) snap to day
|
|
133
|
+
* boundaries: they hold for the rest of the day, then move at the next local
|
|
134
|
+
* midnight. `custom` and `all` never move on their own.
|
|
135
|
+
*/
|
|
136
|
+
export function isCalendarPreset(preset: PeriodPreset): boolean {
|
|
137
|
+
return !RELATIVE_PRESETS.has(preset) && !UNBOUNDED_PRESETS.has(preset);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** The time left until the next local midnight, from `now`. */
|
|
141
|
+
export function msUntilNextMidnight(now: Date): number {
|
|
142
|
+
const midnight = new Date(now);
|
|
143
|
+
midnight.setHours(HOURS_PER_DAY, 0, 0, 0);
|
|
144
|
+
return midnight.getTime() - now.getTime();
|
|
145
|
+
}
|
|
146
|
+
|
|
129
147
|
/**
|
|
130
148
|
* Resolves a preset into a concrete range.
|
|
131
149
|
*
|
|
@@ -16,7 +16,12 @@ import {
|
|
|
16
16
|
type PeriodRange,
|
|
17
17
|
type PeriodState,
|
|
18
18
|
} from "./types";
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
isCalendarPreset,
|
|
21
|
+
isRelativePreset,
|
|
22
|
+
msUntilNextMidnight,
|
|
23
|
+
resolvePresetRange,
|
|
24
|
+
} from "./presetResolvers";
|
|
20
25
|
import { resolveComparisonRange } from "./compareResolvers";
|
|
21
26
|
|
|
22
27
|
export interface UsePeriodOptions {
|
|
@@ -25,11 +30,11 @@ export interface UsePeriodOptions {
|
|
|
25
30
|
presets?: PeriodPreset[];
|
|
26
31
|
comparisons?: PeriodComparison[];
|
|
27
32
|
/**
|
|
28
|
-
* While it answers true,
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* while its live page is paused.
|
|
33
|
+
* While it answers true, the period stops following the clock: a relative
|
|
34
|
+
* preset stops sliding and a calendar preset does not move at midnight, so
|
|
35
|
+
* nothing reading it refetches on the clock. What it skipped is caught up
|
|
36
|
+
* once, when it answers false again. A period the user changes still
|
|
37
|
+
* applies at once. The selector holds it while its live page is paused.
|
|
33
38
|
*/
|
|
34
39
|
holdClock?: () => boolean;
|
|
35
40
|
}
|
|
@@ -56,30 +61,46 @@ const RELATIVE_REFRESH_INTERVAL_MS = 60000;
|
|
|
56
61
|
|
|
57
62
|
const NEVER_HELD = () => false;
|
|
58
63
|
|
|
59
|
-
|
|
64
|
+
type ClockKind = "relative" | "calendar" | "still";
|
|
65
|
+
|
|
66
|
+
function clockKind(preset: PeriodPreset): ClockKind {
|
|
67
|
+
if (isRelativePreset(preset)) return "relative";
|
|
68
|
+
return isCalendarPreset(preset) ? "calendar" : "still";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const CLOCK_DELAYS: Record<Exclude<ClockKind, "still">, () => number> = {
|
|
72
|
+
relative: () => RELATIVE_REFRESH_INTERVAL_MS,
|
|
73
|
+
calendar: () => msUntilNextMidnight(new Date()),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Ticks whenever the active preset's range moves on its own: every minute
|
|
78
|
+
* for a relative preset, at each local midnight for a calendar one. Each
|
|
79
|
+
* timeout is armed from the time it is set, so a machine waking from sleep
|
|
80
|
+
* resolves once, then lines up on the next boundary again.
|
|
81
|
+
*/
|
|
82
|
+
function usePresetClock(
|
|
60
83
|
preset: Ref<PeriodPreset>,
|
|
61
84
|
isHeld: () => boolean = NEVER_HELD,
|
|
62
85
|
): Ref<number> {
|
|
63
86
|
const tick = ref(0);
|
|
64
87
|
if (typeof window === "undefined") return tick;
|
|
65
|
-
let timer: ReturnType<typeof
|
|
88
|
+
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
66
89
|
let hasSkippedTick = false;
|
|
67
90
|
const stop = () => {
|
|
68
|
-
if (timer !== null)
|
|
91
|
+
if (timer !== null) clearTimeout(timer);
|
|
69
92
|
timer = null;
|
|
70
93
|
};
|
|
71
|
-
|
|
72
|
-
()
|
|
73
|
-
(
|
|
74
|
-
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{ immediate: true },
|
|
82
|
-
);
|
|
94
|
+
const arm = (kind: ClockKind) => {
|
|
95
|
+
stop();
|
|
96
|
+
if (kind === "still") return;
|
|
97
|
+
timer = setTimeout(() => {
|
|
98
|
+
if (isHeld()) hasSkippedTick = true;
|
|
99
|
+
else tick.value += 1;
|
|
100
|
+
arm(kind);
|
|
101
|
+
}, CLOCK_DELAYS[kind]());
|
|
102
|
+
};
|
|
103
|
+
watch(() => clockKind(preset.value), arm, { immediate: true });
|
|
83
104
|
watch(isHeld, (held) => {
|
|
84
105
|
if (held || !hasSkippedTick) return;
|
|
85
106
|
hasSkippedTick = false;
|
|
@@ -155,11 +176,14 @@ function makeSetters(refs: PeriodRefs) {
|
|
|
155
176
|
* Reactive period state machine behind `PeriodSelector` — presets,
|
|
156
177
|
* comparisons and custom ranges resolved into a publishable `state`.
|
|
157
178
|
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
179
|
+
* Relative presets (`last-hour`, `last-24h`) re-resolve every minute, and
|
|
180
|
+
* calendar presets (`today`, `last-7-days`, `this-month`...) at each local
|
|
181
|
+
* midnight, so a page left open overnight moves on to the new day.
|
|
182
|
+
*
|
|
183
|
+
* Call it inside a component `setup` or an `effectScope`: the timer that
|
|
184
|
+
* keeps the presets following the clock is disposed with that scope, and
|
|
185
|
+
* leaks if none exists. Under `KeepAlive`, a deactivated component keeps its
|
|
186
|
+
* scope, so the period keeps re-resolving until unmount.
|
|
163
187
|
*/
|
|
164
188
|
export function usePeriod(options: UsePeriodOptions = {}): UsePeriodReturn {
|
|
165
189
|
const refs: PeriodRefs = {
|
|
@@ -176,9 +200,9 @@ export function usePeriod(options: UsePeriodOptions = {}): UsePeriodReturn {
|
|
|
176
200
|
const comparisons = computed<PeriodComparison[]>(
|
|
177
201
|
() => options.comparisons ?? DEFAULT_COMPARISONS,
|
|
178
202
|
);
|
|
179
|
-
const
|
|
203
|
+
const presetClock = usePresetClock(refs.preset, options.holdClock);
|
|
180
204
|
const state = computed<PeriodState>(() => {
|
|
181
|
-
void
|
|
205
|
+
void presetClock.value;
|
|
182
206
|
return buildState(refs);
|
|
183
207
|
});
|
|
184
208
|
const setters = makeSetters(refs);
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
dispatchQuickActionTarget,
|
|
24
24
|
findServedQuickAction,
|
|
25
25
|
} from "#dms-ui/app/build/utils/dispatchQuickActionTarget";
|
|
26
|
+
import { DEFAULT_PAGE_HEADER_ACTIONS_ORDER } from "../../../composables/layout/usePageHeaderActions";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* A button of the page header as the server serves it (`DefaultLayout({
|
|
@@ -40,14 +41,22 @@ export interface LayoutHeaderAction
|
|
|
40
41
|
componentId?: string;
|
|
41
42
|
/** Id of that component's button; absent for its built-in add. */
|
|
42
43
|
buttonId?: string;
|
|
44
|
+
/** Place among the header's buttons, smallest first; `0` by default. */
|
|
45
|
+
order?: number;
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
interface PageHeaderActionBarProps {
|
|
46
49
|
actions: LayoutHeaderAction[];
|
|
50
|
+
/**
|
|
51
|
+
* Where the default slot (the actions of `usePageHeaderActions`) goes
|
|
52
|
+
* among the buttons: after every button of an order up to this one.
|
|
53
|
+
*/
|
|
54
|
+
slotOrder?: number;
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
interface ResolvedHeaderAction {
|
|
50
58
|
id: string;
|
|
59
|
+
order: number;
|
|
51
60
|
button: ButtonProps;
|
|
52
61
|
/** Why the button is disabled, shown in a tooltip. */
|
|
53
62
|
disabledReason?: string;
|
|
@@ -55,7 +64,9 @@ interface ResolvedHeaderAction {
|
|
|
55
64
|
previewLocked?: string;
|
|
56
65
|
}
|
|
57
66
|
|
|
58
|
-
const props = defineProps<PageHeaderActionBarProps>()
|
|
67
|
+
const props = withDefaults(defineProps<PageHeaderActionBarProps>(), {
|
|
68
|
+
slotOrder: DEFAULT_PAGE_HEADER_ACTIONS_ORDER,
|
|
69
|
+
});
|
|
59
70
|
|
|
60
71
|
const { processI18n } = useTranslation();
|
|
61
72
|
const siteLayout = useSiteLayout();
|
|
@@ -103,6 +114,9 @@ const defaultVariant = (
|
|
|
103
114
|
): ButtonProps["variant"] =>
|
|
104
115
|
!color || color === "neutral" ? "outline" : "solid";
|
|
105
116
|
|
|
117
|
+
const orderOf = (action: LayoutHeaderAction): number =>
|
|
118
|
+
action.order ?? DEFAULT_PAGE_HEADER_ACTIONS_ORDER;
|
|
119
|
+
|
|
106
120
|
function baseButton(action: LayoutHeaderAction): ButtonProps {
|
|
107
121
|
const color = action.color ?? "neutral";
|
|
108
122
|
return {
|
|
@@ -174,6 +188,7 @@ function resolveQuickActionButton(
|
|
|
174
188
|
if (!quickAction) return null;
|
|
175
189
|
return {
|
|
176
190
|
id: action.id,
|
|
191
|
+
order: orderOf(action),
|
|
177
192
|
button: {
|
|
178
193
|
...base,
|
|
179
194
|
icon: action.icon ?? quickAction.icon,
|
|
@@ -199,6 +214,7 @@ function resolveAction(
|
|
|
199
214
|
const { componentId, buttonId } = action;
|
|
200
215
|
return {
|
|
201
216
|
id: action.id,
|
|
217
|
+
order: orderOf(action),
|
|
202
218
|
button: {
|
|
203
219
|
...base,
|
|
204
220
|
onClick: () => pressComponentButton(componentId, buttonId),
|
|
@@ -212,6 +228,7 @@ function resolveAction(
|
|
|
212
228
|
}
|
|
213
229
|
return {
|
|
214
230
|
id: action.id,
|
|
231
|
+
order: orderOf(action),
|
|
215
232
|
button: {
|
|
216
233
|
...base,
|
|
217
234
|
...(linkProps(action) ?? {
|
|
@@ -251,15 +268,42 @@ const resolved = computed(() =>
|
|
|
251
268
|
props.actions
|
|
252
269
|
.map(resolveAction)
|
|
253
270
|
.filter((action): action is ResolvedHeaderAction => action !== null)
|
|
254
|
-
.map(lockForPreview)
|
|
271
|
+
.map(lockForPreview)
|
|
272
|
+
.sort((first, second) => first.order - second.order),
|
|
255
273
|
);
|
|
274
|
+
|
|
275
|
+
// The slot (the page's own actions) goes after every served button of an
|
|
276
|
+
// order up to its own: at an equal order the served ones lead, as they did
|
|
277
|
+
// before `order` existed.
|
|
278
|
+
const SLOT_KEY = "dms-page-header-slot";
|
|
279
|
+
|
|
280
|
+
interface HeaderBarEntry {
|
|
281
|
+
key: string;
|
|
282
|
+
/** Absent for the slot's place. */
|
|
283
|
+
action?: ResolvedHeaderAction;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const entries = computed<HeaderBarEntry[]>(() => {
|
|
287
|
+
const toEntry = (action: ResolvedHeaderAction) => ({
|
|
288
|
+
key: action.id,
|
|
289
|
+
action,
|
|
290
|
+
});
|
|
291
|
+
const leading = resolved.value.filter(
|
|
292
|
+
(action) => action.order <= props.slotOrder,
|
|
293
|
+
);
|
|
294
|
+
const trailing = resolved.value.filter(
|
|
295
|
+
(action) => action.order > props.slotOrder,
|
|
296
|
+
);
|
|
297
|
+
return [...leading.map(toEntry), { key: SLOT_KEY }, ...trailing.map(toEntry)];
|
|
298
|
+
});
|
|
256
299
|
</script>
|
|
257
300
|
|
|
258
301
|
<template>
|
|
259
|
-
<template v-for="action in
|
|
302
|
+
<template v-for="{ key, action } in entries" :key="key">
|
|
303
|
+
<slot v-if="!action" />
|
|
260
304
|
<!-- A disabled button fires no pointer event: the tooltip hangs on a
|
|
261
305
|
focusable wrapper, so the reason also reaches keyboard users. -->
|
|
262
|
-
<UTooltip v-if="action.previewLocked" :text="action.previewLocked">
|
|
306
|
+
<UTooltip v-else-if="action.previewLocked" :text="action.previewLocked">
|
|
263
307
|
<UButton v-bind="action.button" />
|
|
264
308
|
</UTooltip>
|
|
265
309
|
<UTooltip v-else-if="action.disabledReason" :text="action.disabledReason">
|
package/frontend-vue/layers/dms-layout/app/build/components/layout/PageHeaderActionsOutlet.vue
CHANGED
|
@@ -66,7 +66,11 @@ const showsServerMarkup = computed(
|
|
|
66
66
|
data-dms-page-header-actions
|
|
67
67
|
:class="ROOT_CLASS"
|
|
68
68
|
>
|
|
69
|
-
<PageHeaderActionBar
|
|
70
|
-
|
|
69
|
+
<PageHeaderActionBar
|
|
70
|
+
:actions="actions"
|
|
71
|
+
:slot-order="host?.actionsOrder.value"
|
|
72
|
+
>
|
|
73
|
+
<component :is="pageActions" v-if="pageActions" />
|
|
74
|
+
</PageHeaderActionBar>
|
|
71
75
|
</div>
|
|
72
76
|
</template>
|
|
@@ -19,6 +19,20 @@ import {
|
|
|
19
19
|
/** Renders the actions shown on the right of the page header. */
|
|
20
20
|
export type PageHeaderActionsRender = () => VNodeChild;
|
|
21
21
|
|
|
22
|
+
/** Where the actions of `usePageHeaderActions` go in the page header. */
|
|
23
|
+
export interface PageHeaderActionsOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Place among the buttons the page layout serves (`headerActions`, each
|
|
26
|
+
* with its own `order`), smallest first; defaults to `0`. At an equal
|
|
27
|
+
* order the served buttons come first, so `-1` puts these actions before
|
|
28
|
+
* every served button left at the default.
|
|
29
|
+
*/
|
|
30
|
+
order?: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** The order of actions that do not name one, and of served buttons. */
|
|
34
|
+
export const DEFAULT_PAGE_HEADER_ACTIONS_ORDER = 0;
|
|
35
|
+
|
|
22
36
|
/**
|
|
23
37
|
* What a layout rendering a page header shares with the page in its slot.
|
|
24
38
|
*
|
|
@@ -32,6 +46,10 @@ export type PageHeaderActionsRender = () => VNodeChild;
|
|
|
32
46
|
export interface PageHeaderActionsHost {
|
|
33
47
|
/** The render function the page asked for, if any. */
|
|
34
48
|
actions: ShallowRef<PageHeaderActionsRender | null>;
|
|
49
|
+
/** The `order` the page gave its actions. */
|
|
50
|
+
actionsOrder: Readonly<Ref<number>>;
|
|
51
|
+
/** Places the page's actions among the served buttons. */
|
|
52
|
+
setActionsOrder: (order: number) => void;
|
|
35
53
|
/** Once the page in the slot has set up and set its actions. */
|
|
36
54
|
isReady: Readonly<Ref<boolean>>;
|
|
37
55
|
/** Called right after the page in the slot rendered (its sync setup ran). */
|
|
@@ -57,6 +75,7 @@ const SERVER_READY_TIMEOUT_MS = 5000;
|
|
|
57
75
|
*/
|
|
58
76
|
export const providePageHeaderActions = (): PageHeaderActionsHost => {
|
|
59
77
|
const actions = shallowRef<PageHeaderActionsRender | null>(null);
|
|
78
|
+
const actionsOrder = ref(DEFAULT_PAGE_HEADER_ACTIONS_ORDER);
|
|
60
79
|
const isReady = ref(false);
|
|
61
80
|
let slotRendered = false;
|
|
62
81
|
let pending = 0;
|
|
@@ -79,6 +98,10 @@ export const providePageHeaderActions = (): PageHeaderActionsHost => {
|
|
|
79
98
|
});
|
|
80
99
|
const host: PageHeaderActionsHost = {
|
|
81
100
|
actions,
|
|
101
|
+
actionsOrder: readonly(actionsOrder),
|
|
102
|
+
setActionsOrder: (order) => {
|
|
103
|
+
actionsOrder.value = order;
|
|
104
|
+
},
|
|
82
105
|
isReady: readonly(isReady),
|
|
83
106
|
markSlotRendered: () => {
|
|
84
107
|
slotRendered = true;
|
|
@@ -135,13 +158,21 @@ export const holdPageHeaderActions = (): Component => {
|
|
|
135
158
|
* Call it before the first `await` of the setup: the header then renders
|
|
136
159
|
* the actions in the server pass, with the page.
|
|
137
160
|
*
|
|
161
|
+
* They come after the buttons the page layout serves (`headerActions`)
|
|
162
|
+
* unless `options.order` places them among those.
|
|
163
|
+
*
|
|
138
164
|
* @param render Render function of the actions, e.g. `() => h(UButton, …)`
|
|
165
|
+
* @param options Where the actions go among the served buttons
|
|
139
166
|
*/
|
|
140
|
-
export const usePageHeaderActions = (
|
|
167
|
+
export const usePageHeaderActions = (
|
|
168
|
+
render: PageHeaderActionsRender,
|
|
169
|
+
options: PageHeaderActionsOptions = {},
|
|
170
|
+
): void => {
|
|
141
171
|
const host = inject(PAGE_HEADER_ACTIONS_KEY, null);
|
|
142
172
|
if (!host) return;
|
|
143
173
|
const release = host.expect();
|
|
144
174
|
const show = () => {
|
|
175
|
+
host.setActionsOrder(options.order ?? DEFAULT_PAGE_HEADER_ACTIONS_ORDER);
|
|
145
176
|
host.actions.value = render;
|
|
146
177
|
release();
|
|
147
178
|
};
|
|
@@ -20,7 +20,10 @@ import {
|
|
|
20
20
|
RangeCalendarRoot,
|
|
21
21
|
type DateRange,
|
|
22
22
|
} from "reka-ui";
|
|
23
|
-
import
|
|
23
|
+
import {
|
|
24
|
+
type CalendarRange,
|
|
25
|
+
isBeyondMaxDays,
|
|
26
|
+
} from "../../composables/period/periodDisplay";
|
|
24
27
|
|
|
25
28
|
// Two-month range calendar of the period selector (design .cal): a
|
|
26
29
|
// continuous accent strip for the selected range with filled endpoints, and
|
|
@@ -32,6 +35,11 @@ interface Props {
|
|
|
32
35
|
weekStartsOn?: number;
|
|
33
36
|
numberOfMonths?: number;
|
|
34
37
|
readonly?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The longest range, in days, that can be picked: once a start day is
|
|
40
|
+
* picked, the days that would exceed it are disabled.
|
|
41
|
+
*/
|
|
42
|
+
maxDays?: number;
|
|
35
43
|
}
|
|
36
44
|
|
|
37
45
|
type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
@@ -107,6 +115,13 @@ function onUpdate(value: DateRange | null) {
|
|
|
107
115
|
emit("pending", pendingStart.value);
|
|
108
116
|
}
|
|
109
117
|
|
|
118
|
+
function isDateDisabled(date: DateValue): boolean {
|
|
119
|
+
const picked = pendingStart.value;
|
|
120
|
+
return (
|
|
121
|
+
!!picked && isBeyondMaxDays(date as CalendarDate, picked, props.maxDays)
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
110
125
|
function onPlaceholder(value: DateValue) {
|
|
111
126
|
// Picking a start day re-anchors reka's view on it; with two months on
|
|
112
127
|
// screen that would shift the grid under the pointer.
|
|
@@ -210,6 +225,7 @@ const weekStart = computed(() => props.weekStartsOn as WeekStart);
|
|
|
210
225
|
:number-of-months="numberOfMonths"
|
|
211
226
|
:max-value="todayDate"
|
|
212
227
|
:readonly="readonly"
|
|
228
|
+
:is-date-disabled="isDateDisabled"
|
|
213
229
|
weekday-format="short"
|
|
214
230
|
prevent-deselect
|
|
215
231
|
class="flex gap-6"
|