@fieldia/viewer 0.19.1 → 0.20.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/README.md +18 -0
- package/bundle/fieldia.ar.js +2 -2
- package/bundle/fieldia.ar.js.map +2 -2
- package/bundle/fieldia.choice.js +5 -0
- package/bundle/fieldia.choice.js.map +7 -0
- package/bundle/fieldia.de.js +2 -2
- package/bundle/fieldia.de.js.map +2 -2
- package/bundle/fieldia.filters.js +5 -0
- package/bundle/fieldia.filters.js.map +7 -0
- package/bundle/fieldia.fr.js +2 -2
- package/bundle/fieldia.fr.js.map +2 -2
- package/bundle/fieldia.head.js +5 -0
- package/bundle/fieldia.head.js.map +7 -0
- package/bundle/fieldia.js +44 -44
- package/bundle/fieldia.js.map +4 -4
- package/bundle/fieldia.path.js +5 -0
- package/bundle/fieldia.path.js.map +7 -0
- package/bundle/fieldia.text.js +24 -0
- package/bundle/fieldia.text.js.map +7 -0
- package/package.json +7 -3
- package/src/index.d.mts +2 -1
- package/src/index.d.ts +2 -1
- package/src/index.js +6 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +1 -0
- package/src/index.mjs.map +1 -1
- package/src/lib/button-parts.d.mts +30 -0
- package/src/lib/button-parts.d.ts +30 -0
- package/src/lib/button-parts.js +24 -0
- package/src/lib/button-parts.js.map +1 -0
- package/src/lib/button-parts.mjs +18 -0
- package/src/lib/button-parts.mjs.map +1 -0
- package/src/lib/dialog-window.d.mts +11 -0
- package/src/lib/dialog-window.d.ts +11 -0
- package/src/lib/dialog-window.js +86 -0
- package/src/lib/dialog-window.js.map +1 -0
- package/src/lib/dialog-window.mjs +82 -0
- package/src/lib/dialog-window.mjs.map +1 -0
- package/src/lib/dialog.d.mts +14 -3
- package/src/lib/dialog.d.ts +14 -3
- package/src/lib/dialog.js +84 -14
- package/src/lib/dialog.js.map +1 -1
- package/src/lib/dialog.mjs +85 -15
- package/src/lib/dialog.mjs.map +1 -1
- package/src/lib/filter-bar.d.mts +39 -0
- package/src/lib/filter-bar.d.ts +39 -0
- package/src/lib/filter-bar.js +290 -0
- package/src/lib/filter-bar.js.map +1 -0
- package/src/lib/filter-bar.mjs +287 -0
- package/src/lib/filter-bar.mjs.map +1 -0
- package/src/lib/filter-styles.d.mts +4 -0
- package/src/lib/filter-styles.d.ts +4 -0
- package/src/lib/filter-styles.js +63 -0
- package/src/lib/filter-styles.js.map +1 -0
- package/src/lib/filter-styles.mjs +59 -0
- package/src/lib/filter-styles.mjs.map +1 -0
- package/src/lib/filters-part.d.mts +8 -0
- package/src/lib/filters-part.d.ts +8 -0
- package/src/lib/filters-part.js +14 -0
- package/src/lib/filters-part.js.map +1 -0
- package/src/lib/filters-part.mjs +9 -0
- package/src/lib/filters-part.mjs.map +1 -0
- package/src/lib/group-styles.d.mts +9 -0
- package/src/lib/group-styles.d.ts +9 -0
- package/src/lib/group-styles.js +64 -0
- package/src/lib/group-styles.js.map +1 -0
- package/src/lib/group-styles.mjs +60 -0
- package/src/lib/group-styles.mjs.map +1 -0
- package/src/lib/head-part.d.mts +15 -0
- package/src/lib/head-part.d.ts +15 -0
- package/src/lib/head-part.js +26 -0
- package/src/lib/head-part.js.map +1 -0
- package/src/lib/head-part.mjs +16 -0
- package/src/lib/head-part.mjs.map +1 -0
- package/src/lib/head-styles.d.mts +28 -0
- package/src/lib/head-styles.d.ts +28 -0
- package/src/lib/head-styles.js +320 -0
- package/src/lib/head-styles.js.map +1 -0
- package/src/lib/head-styles.mjs +316 -0
- package/src/lib/head-styles.mjs.map +1 -0
- package/src/lib/labels.d.mts +29 -0
- package/src/lib/labels.d.ts +29 -0
- package/src/lib/labels.js +16 -0
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +16 -0
- package/src/lib/labels.mjs.map +1 -1
- package/src/lib/list-styles.d.mts +1 -1
- package/src/lib/list-styles.d.ts +1 -1
- package/src/lib/list-styles.js +88 -1
- package/src/lib/list-styles.js.map +1 -1
- package/src/lib/list-styles.mjs +88 -1
- package/src/lib/list-styles.mjs.map +1 -1
- package/src/lib/list.d.mts +16 -1
- package/src/lib/list.d.ts +16 -1
- package/src/lib/list.js +281 -51
- package/src/lib/list.js.map +1 -1
- package/src/lib/list.mjs +282 -52
- package/src/lib/list.mjs.map +1 -1
- package/src/lib/locales/ar.js +16 -0
- package/src/lib/locales/ar.js.map +1 -1
- package/src/lib/locales/ar.mjs +16 -0
- package/src/lib/locales/ar.mjs.map +1 -1
- package/src/lib/locales/de.js +16 -0
- package/src/lib/locales/de.js.map +1 -1
- package/src/lib/locales/de.mjs +16 -0
- package/src/lib/locales/de.mjs.map +1 -1
- package/src/lib/locales/fr.js +16 -0
- package/src/lib/locales/fr.js.map +1 -1
- package/src/lib/locales/fr.mjs +16 -0
- package/src/lib/locales/fr.mjs.map +1 -1
- package/src/lib/look.d.mts +1 -1
- package/src/lib/look.d.ts +1 -1
- package/src/lib/look.js +3 -0
- package/src/lib/look.js.map +1 -1
- package/src/lib/look.mjs +3 -0
- package/src/lib/look.mjs.map +1 -1
- package/src/lib/record-bar.d.mts +10 -1
- package/src/lib/record-bar.d.ts +10 -1
- package/src/lib/record-bar.js +15 -7
- package/src/lib/record-bar.js.map +1 -1
- package/src/lib/record-bar.mjs +14 -7
- package/src/lib/record-bar.mjs.map +1 -1
- package/src/lib/record-head.d.mts +58 -0
- package/src/lib/record-head.d.ts +58 -0
- package/src/lib/record-head.js +245 -0
- package/src/lib/record-head.js.map +1 -0
- package/src/lib/record-head.mjs +240 -0
- package/src/lib/record-head.mjs.map +1 -0
- package/src/lib/rich-button.d.mts +12 -0
- package/src/lib/rich-button.d.ts +12 -0
- package/src/lib/rich-button.js +186 -0
- package/src/lib/rich-button.js.map +1 -0
- package/src/lib/rich-button.mjs +183 -0
- package/src/lib/rich-button.mjs.map +1 -0
- package/src/lib/section-head.d.mts +26 -0
- package/src/lib/section-head.d.ts +26 -0
- package/src/lib/section-head.js +65 -0
- package/src/lib/section-head.js.map +1 -0
- package/src/lib/section-head.mjs +56 -0
- package/src/lib/section-head.mjs.map +1 -0
- package/src/lib/section-tools.d.mts +12 -0
- package/src/lib/section-tools.d.ts +12 -0
- package/src/lib/section-tools.js +124 -0
- package/src/lib/section-tools.js.map +1 -0
- package/src/lib/section-tools.mjs +121 -0
- package/src/lib/section-tools.mjs.map +1 -0
- package/src/lib/viewer-parts.d.mts +33 -0
- package/src/lib/viewer-parts.d.ts +33 -0
- package/src/lib/viewer-parts.js +75 -0
- package/src/lib/viewer-parts.js.map +1 -0
- package/src/lib/viewer-parts.mjs +70 -0
- package/src/lib/viewer-parts.mjs.map +1 -0
- package/src/lib/viewer.d.mts +30 -7
- package/src/lib/viewer.d.ts +30 -7
- package/src/lib/viewer.js +317 -97
- package/src/lib/viewer.js.map +1 -1
- package/src/lib/viewer.mjs +319 -99
- package/src/lib/viewer.mjs.map +1 -1
package/src/lib/dialog.mjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { WIDGET_LABELS } from '@fieldia/widgets';
|
|
1
|
+
import { drawIcon, settleParts, WIDGET_LABELS } from '@fieldia/widgets';
|
|
2
2
|
import { ownLocale } from './labels.mjs';
|
|
3
3
|
import { keepTabIn } from './focus-trap.mjs';
|
|
4
4
|
import { applyLook, skinFor, wearTokens } from './look.mjs';
|
|
5
5
|
import { hotkeyOf, hotkeyOn } from './hotkeys.mjs';
|
|
6
6
|
import { mountViewer, VIEWER_LABELS } from './viewer.mjs';
|
|
7
|
+
import { headPart, partsFor } from './viewer-parts.mjs';
|
|
7
8
|
let dialogs = 0;
|
|
8
|
-
/** The first box to type or choose in, where a page opened takes the focus. */
|
|
9
|
-
export const FIRST_FIELD = 'input:not([type="hidden"]), select, textarea, [contenteditable="true"]';
|
|
9
|
+
/** The first box to type or choose in, where a page opened takes the focus: never one hidden, as a read-only value shown as words hides its box. */
|
|
10
|
+
export const FIRST_FIELD = 'input:not([type="hidden"]):not([hidden]), select:not([hidden]), textarea:not([hidden]), [contenteditable="true"]';
|
|
10
11
|
/** The box of the first field shown that takes the focus as the record opens (a node's `focus`), if there is one. */
|
|
11
12
|
export function focusField(scope) {
|
|
12
13
|
const wrapper = [...scope.querySelectorAll('.fd-field[data-focus]')].find((one) => !one.closest('[hidden]'));
|
|
@@ -38,17 +39,49 @@ export function openFormPanel(options) {
|
|
|
38
39
|
const side = options.side ?? 'end';
|
|
39
40
|
return openForm(options, `fd-form-panel ${side === 'top' || side === 'bottom' ? `fd-height-${options.height ?? 'medium'}` : `fd-width-${options.width ?? 'medium'}`}`, side);
|
|
40
41
|
}
|
|
41
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* A dialog or a panel (from its side): a page in a box with a head, a body that
|
|
44
|
+
* scrolls and a foot; `shape` is the box's own classes. A page whose sheet has
|
|
45
|
+
* a head of its own (`SheetHead`) is its own head and foot: the dialog draws
|
|
46
|
+
* neither, its ⤢ and × at the end of the head's badge row, named by the badge
|
|
47
|
+
* and the title, and asks before Escape or × drop changes, as a panel does.
|
|
48
|
+
*/
|
|
42
49
|
function openForm(options, shape, side) {
|
|
50
|
+
const doc = options.container?.ownerDocument ?? document;
|
|
51
|
+
// What has the focus as it is asked for gets it back as it closes, though the box waits for its parts.
|
|
52
|
+
const opener = doc.activeElement instanceof doc.defaultView.HTMLElement ? doc.activeElement : null;
|
|
53
|
+
// The parts its page draws from, and the head part for a work item's window (inset, clear, ⤢, a grip): the box opens
|
|
54
|
+
// once they are in, drawn whole — at once when they are already.
|
|
55
|
+
const windowed = !side && (options.size === 'inset' || options.backdrop === 'clear' || !!options.maximise || !!options.resizable);
|
|
56
|
+
const parts = [...partsFor(options.page, options.widgets, options.slots), ...(windowed ? [headPart] : [])].filter((part) => !part.loaded);
|
|
57
|
+
if (!parts.length)
|
|
58
|
+
return openNow(options, shape, side, opener);
|
|
59
|
+
return settleParts(parts).then(() => openNow(options, shape, side, opener));
|
|
60
|
+
}
|
|
61
|
+
function openNow(options, shape, side, opener) {
|
|
43
62
|
const panel = !!side;
|
|
63
|
+
const layout = options.page.layout;
|
|
64
|
+
/** The head part's window tools and look; drawn plainly where it could not come. */
|
|
65
|
+
const kit = headPart.loaded;
|
|
66
|
+
const headed = !panel && layout.type === 'sheet' && !!layout.head && !!kit;
|
|
44
67
|
const doc = options.container?.ownerDocument ?? document;
|
|
45
68
|
const container = options.container ?? doc.body;
|
|
46
|
-
|
|
69
|
+
// The window's look (inset, clear, ⤢, its grip, a head as its own head) in the page before the box is.
|
|
70
|
+
if (kit && !panel && (headed || options.size === 'inset' || options.backdrop === 'clear' || options.maximise || options.resizable))
|
|
71
|
+
kit.installHeadStyles(doc);
|
|
47
72
|
const labels = { ...VIEWER_LABELS[ownLocale(options.locale)], ...options.labels };
|
|
48
73
|
const id = `fd-dialog-${++dialogs}`;
|
|
49
74
|
const make = maker(doc);
|
|
50
75
|
const title = make('h2', { id: `${id}-title`, class: 'fd-form-dialog-title' }, options.title);
|
|
51
|
-
const closeButton = make('button', { type: 'button', class: 'fd-dialog-close', 'aria-label': labels.close }
|
|
76
|
+
const closeButton = make('button', { type: 'button', class: 'fd-dialog-close', 'aria-label': labels.close, title: labels.close });
|
|
77
|
+
const closeIcon = headed ? drawIcon(doc, 'close') : null;
|
|
78
|
+
if (closeIcon)
|
|
79
|
+
closeButton.append(closeIcon);
|
|
80
|
+
else
|
|
81
|
+
closeButton.textContent = '×';
|
|
82
|
+
// ⤢ fills the window with it, and Restore puts it back.
|
|
83
|
+
const maximise = options.maximise && !panel && kit ? make('button', { type: 'button', class: 'fd-dialog-max', 'aria-label': labels.maximise, title: labels.maximise }) : null;
|
|
84
|
+
const grip = options.resizable && !panel && kit ? make('button', { type: 'button', class: 'fd-dialog-grip', 'aria-label': labels.resize, title: labels.resize, 'aria-keyshortcuts': 'ArrowLeft ArrowRight ArrowUp ArrowDown' }) : null;
|
|
52
85
|
const body = make('div', { class: 'fd-form-dialog-body' });
|
|
53
86
|
const discard = make('button', { type: 'button', class: 'fd-button' }, labels.discard);
|
|
54
87
|
const saveClose = make('button', { type: 'button', class: 'fd-button fd-button-primary' }, panel && options.mode === 'values' ? labels.done : labels.saveClose);
|
|
@@ -68,18 +101,28 @@ function openForm(options, shape, side) {
|
|
|
68
101
|
box.setAttribute('data-side', side);
|
|
69
102
|
if (options.dir)
|
|
70
103
|
box.setAttribute('dir', options.dir);
|
|
104
|
+
if (headed)
|
|
105
|
+
box.setAttribute('data-headed', '');
|
|
71
106
|
applyLook(box, theme ? { ...look, theme } : look);
|
|
72
107
|
wearTokens(box, options.tokens);
|
|
73
|
-
|
|
74
|
-
|
|
108
|
+
// A page with a head of its own is the dialog's head and foot: the dialog draws neither.
|
|
109
|
+
if (headed)
|
|
110
|
+
box.append(body);
|
|
111
|
+
else {
|
|
112
|
+
box.append(make('div', { class: 'fd-form-dialog-head' }), body, make('div', { class: 'fd-actions fd-actions-end fd-form-dialog-foot' }));
|
|
113
|
+
box.firstElementChild?.append(title, ...(maximise ? [maximise] : []), closeButton);
|
|
114
|
+
}
|
|
115
|
+
if (grip)
|
|
116
|
+
box.append(grip);
|
|
75
117
|
// A page's own buttons at its foot, as a wizard's, stand in place of Discard and Save & Close.
|
|
76
118
|
const footer = options.page.layout.type === 'sections' || options.page.layout.type === 'sheet' ? (options.page.layout.footer ?? []) : [];
|
|
77
119
|
const own = footer.map((node) => ({ node, button: make('button', { type: 'button', class: `fd-button fd-button-${node.style ?? 'secondary'}`, 'data-node': node.id }, node.label) }));
|
|
78
120
|
for (const { node, button } of own)
|
|
79
121
|
if (node.hotkey)
|
|
80
122
|
hotkeyOn(button, node.hotkey, node.label);
|
|
81
|
-
|
|
82
|
-
|
|
123
|
+
if (!headed)
|
|
124
|
+
box.querySelector('.fd-form-dialog-foot')?.append(...(own.length ? own.map((b) => b.button) : [discard, saveClose]));
|
|
125
|
+
const backdrop = make('div', { class: `fd-dialog-backdrop fd-form-dialog-backdrop${panel ? ' fd-form-panel-backdrop' : ''}${options.backdrop === 'clear' ? ' fd-backdrop-clear' : ''}` });
|
|
83
126
|
backdrop.append(box);
|
|
84
127
|
// The panel this one opens over steps back while it is open.
|
|
85
128
|
const under = panel ? [...doc.querySelectorAll('.fd-form-panel')].pop() : undefined;
|
|
@@ -93,23 +136,50 @@ function openForm(options, shape, side) {
|
|
|
93
136
|
// A dialog has no pager or breadcrumbs: they belong to the record under it.
|
|
94
137
|
records: undefined,
|
|
95
138
|
breadcrumbs: undefined,
|
|
96
|
-
|
|
139
|
+
// A `close` step after the same run saved closes it saved: Save and Close.
|
|
140
|
+
host: { ...options.host, close: () => close(saves > savesBefore) },
|
|
97
141
|
});
|
|
98
142
|
// A panel runs the way its page does, its language's way unless told: the inline end it sits at is the left, right to left.
|
|
99
143
|
if (panel && handle.element.dir)
|
|
100
144
|
backdrop.dir = handle.element.dir;
|
|
145
|
+
// A dialog round a page with a head: its ⤢ and × at the end of the head's badge row, and named by the badge and the title.
|
|
146
|
+
if (headed) {
|
|
147
|
+
if (handle.element.dir && !options.dir)
|
|
148
|
+
box.dir = handle.element.dir;
|
|
149
|
+
const slot = body.querySelector('.fd-head-window');
|
|
150
|
+
slot?.append(...(maximise ? [maximise] : []), closeButton);
|
|
151
|
+
const names = [...body.querySelectorAll('[data-head-name]')].map((part) => part.id).filter(Boolean);
|
|
152
|
+
if (names.length)
|
|
153
|
+
box.setAttribute('aria-labelledby', names.join(' '));
|
|
154
|
+
else
|
|
155
|
+
box.setAttribute('aria-label', options.title);
|
|
156
|
+
}
|
|
157
|
+
if (maximise)
|
|
158
|
+
kit?.wireMaximise(box, maximise, labels, doc);
|
|
159
|
+
if (grip)
|
|
160
|
+
kit?.wireGrip(box, grip, doc);
|
|
101
161
|
let done = false;
|
|
162
|
+
/** The saves made in it, and how many there were as the last run of steps ended: a run that saved, then closed, closes it saved. */
|
|
163
|
+
let saves = 0;
|
|
164
|
+
let savesBefore = 0;
|
|
165
|
+
handle.on('save', () => saves++);
|
|
166
|
+
handle.on('run', ({ id: run }) => {
|
|
167
|
+
if (!run.startsWith('on.'))
|
|
168
|
+
savesBefore = saves;
|
|
169
|
+
});
|
|
170
|
+
let close = (saved) => void saved;
|
|
102
171
|
if (options.recompute)
|
|
103
172
|
recalculate(handle.form, options.page.fields, options.recompute, () => done);
|
|
104
173
|
// Into the dialog: its field that takes the focus (focus) or its first, once the record is in, or the dialog itself meanwhile.
|
|
105
|
-
|
|
174
|
+
// A page with a head of its own opens at rest, as a work item does: the dialog holds the focus until the page names a field for it.
|
|
175
|
+
const firstField = () => focusField(body) ?? (headed ? null : body.querySelector(FIRST_FIELD));
|
|
106
176
|
(firstField() ?? box).focus();
|
|
107
177
|
void handle.form.settled().then(() => {
|
|
108
178
|
if (doc.activeElement === box || !box.contains(doc.activeElement))
|
|
109
179
|
firstField()?.focus();
|
|
110
180
|
});
|
|
111
181
|
return new Promise((resolve) => {
|
|
112
|
-
|
|
182
|
+
close = (saved) => {
|
|
113
183
|
if (done)
|
|
114
184
|
return;
|
|
115
185
|
done = true;
|
|
@@ -151,9 +221,9 @@ function openForm(options, shape, side) {
|
|
|
151
221
|
box.append(shade);
|
|
152
222
|
no.focus();
|
|
153
223
|
});
|
|
154
|
-
/** Escape and ×: a panel with changes in it
|
|
224
|
+
/** Escape and ×: a panel, or a dialog round a page with a head, asks first when there are changes in it; any other dialog closes at once, as it always has. */
|
|
155
225
|
const leave = async () => {
|
|
156
|
-
if (!panel || !handle.form.getState().dirty.length || (await ask()))
|
|
226
|
+
if (!(panel || headed) || !handle.form.getState().dirty.length || (await ask()))
|
|
157
227
|
close(false);
|
|
158
228
|
};
|
|
159
229
|
saveClose.addEventListener('click', async () => {
|
package/src/lib/dialog.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/dialog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dialog.mjs","sourceRoot":"","sources":["../../../../../libs/viewer/src/lib/dialog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type DataSource, type Facet, type ListNode, type Page, type ResolvedFilter } from '@fieldia/core';
|
|
2
|
+
import { type IconSet, type PreferenceStore } from '@fieldia/widgets';
|
|
3
|
+
import type { El } from './dom.mjs';
|
|
4
|
+
import type { ViewerLabels } from './labels.mjs';
|
|
5
|
+
export interface FilterBarContext {
|
|
6
|
+
page: Page;
|
|
7
|
+
node: ListNode;
|
|
8
|
+
doc: Document;
|
|
9
|
+
el: El;
|
|
10
|
+
labels: ViewerLabels;
|
|
11
|
+
fill: (template: string, values: Record<string, string | number>) => string;
|
|
12
|
+
uid: (id: string) => string;
|
|
13
|
+
icons?: IconSet;
|
|
14
|
+
/** Where the fields the bar offers are kept, as the person chose them with its gear. */
|
|
15
|
+
preferences: PreferenceStore;
|
|
16
|
+
dataSource: DataSource | undefined;
|
|
17
|
+
model: string;
|
|
18
|
+
/** Conditions every search keeps: a field's values are listed from the records they let through. */
|
|
19
|
+
fixedFilter: () => ResolvedFilter[];
|
|
20
|
+
/** What the list starts with: a field's values of `filterFields` show picked in its list; the rest apply as they are. */
|
|
21
|
+
facets: Facet[];
|
|
22
|
+
onChange: (facets: Facet[]) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A list's filter bar (`search: "fields"`), as a work tracker's backlog has
|
|
26
|
+
* it: "Filter by keyword" looks in the list's search fields; each field of
|
|
27
|
+
* `filterFields` has a list of its values to tick, its button in muted words
|
|
28
|
+
* until some are ticked, then the words ticked; × clears every filter; the
|
|
29
|
+
* gear chooses which fields the bar offers, each by its own name where the
|
|
30
|
+
* page gives one (`filterLabels`). A field's values are its
|
|
31
|
+
* choices, yes and no, or those its records hold (a link's, through the data
|
|
32
|
+
* source). Keys: ↓ opens a list, the arrows move, Space ticks, Escape closes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function filterBar(context: FilterBarContext): {
|
|
35
|
+
element: HTMLDivElement;
|
|
36
|
+
/** A search put in from outside (a map's "In this area"): it applies with the rest, one with the same words in its place. */
|
|
37
|
+
add(facet: Facet): void;
|
|
38
|
+
destroy(): void;
|
|
39
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type DataSource, type Facet, type ListNode, type Page, type ResolvedFilter } from '@fieldia/core';
|
|
2
|
+
import { type IconSet, type PreferenceStore } from '@fieldia/widgets';
|
|
3
|
+
import type { El } from './dom';
|
|
4
|
+
import type { ViewerLabels } from './labels';
|
|
5
|
+
export interface FilterBarContext {
|
|
6
|
+
page: Page;
|
|
7
|
+
node: ListNode;
|
|
8
|
+
doc: Document;
|
|
9
|
+
el: El;
|
|
10
|
+
labels: ViewerLabels;
|
|
11
|
+
fill: (template: string, values: Record<string, string | number>) => string;
|
|
12
|
+
uid: (id: string) => string;
|
|
13
|
+
icons?: IconSet;
|
|
14
|
+
/** Where the fields the bar offers are kept, as the person chose them with its gear. */
|
|
15
|
+
preferences: PreferenceStore;
|
|
16
|
+
dataSource: DataSource | undefined;
|
|
17
|
+
model: string;
|
|
18
|
+
/** Conditions every search keeps: a field's values are listed from the records they let through. */
|
|
19
|
+
fixedFilter: () => ResolvedFilter[];
|
|
20
|
+
/** What the list starts with: a field's values of `filterFields` show picked in its list; the rest apply as they are. */
|
|
21
|
+
facets: Facet[];
|
|
22
|
+
onChange: (facets: Facet[]) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A list's filter bar (`search: "fields"`), as a work tracker's backlog has
|
|
26
|
+
* it: "Filter by keyword" looks in the list's search fields; each field of
|
|
27
|
+
* `filterFields` has a list of its values to tick, its button in muted words
|
|
28
|
+
* until some are ticked, then the words ticked; × clears every filter; the
|
|
29
|
+
* gear chooses which fields the bar offers, each by its own name where the
|
|
30
|
+
* page gives one (`filterLabels`). A field's values are its
|
|
31
|
+
* choices, yes and no, or those its records hold (a link's, through the data
|
|
32
|
+
* source). Keys: ↓ opens a list, the arrows move, Space ticks, Escape closes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function filterBar(context: FilterBarContext): {
|
|
35
|
+
element: HTMLDivElement;
|
|
36
|
+
/** A search put in from outside (a map's "In this area"): it applies with the rest, one with the same words in its place. */
|
|
37
|
+
add(facet: Facet): void;
|
|
38
|
+
destroy(): void;
|
|
39
|
+
};
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterBar = filterBar;
|
|
4
|
+
const core_1 = require("@fieldia/core");
|
|
5
|
+
const widgets_1 = require("@fieldia/widgets");
|
|
6
|
+
const filter_styles_1 = require("./filter-styles");
|
|
7
|
+
/** How long typing rests before the keyword is looked for. */
|
|
8
|
+
const KEYWORD_PAUSE = 250;
|
|
9
|
+
/**
|
|
10
|
+
* A list's filter bar (`search: "fields"`), as a work tracker's backlog has
|
|
11
|
+
* it: "Filter by keyword" looks in the list's search fields; each field of
|
|
12
|
+
* `filterFields` has a list of its values to tick, its button in muted words
|
|
13
|
+
* until some are ticked, then the words ticked; × clears every filter; the
|
|
14
|
+
* gear chooses which fields the bar offers, each by its own name where the
|
|
15
|
+
* page gives one (`filterLabels`). A field's values are its
|
|
16
|
+
* choices, yes and no, or those its records hold (a link's, through the data
|
|
17
|
+
* source). Keys: ↓ opens a list, the arrows move, Space ticks, Escape closes.
|
|
18
|
+
*/
|
|
19
|
+
function filterBar(context) {
|
|
20
|
+
const { page, node, doc, el, labels, fill, uid } = context;
|
|
21
|
+
(0, filter_styles_1.installFilterStyles)(doc);
|
|
22
|
+
const fields = (node.filterFields ?? []).filter((name) => page.fields[name]);
|
|
23
|
+
const icon = (name, className) => {
|
|
24
|
+
const drawn = (0, widgets_1.drawIcon)(doc, name, context.icons);
|
|
25
|
+
drawn?.setAttribute('aria-hidden', 'true');
|
|
26
|
+
if (className)
|
|
27
|
+
drawn?.classList.add(className);
|
|
28
|
+
return drawn ? [drawn] : [];
|
|
29
|
+
};
|
|
30
|
+
// ---- what is asked for: a keyword, each field's values ticked, and anything else the list started with ----
|
|
31
|
+
let keyword = '';
|
|
32
|
+
const picks = new Map();
|
|
33
|
+
/** Searches this bar does not draw (the list's default filters, a map's area): they apply until cleared. */
|
|
34
|
+
let others = [];
|
|
35
|
+
for (const facet of context.facets) {
|
|
36
|
+
const own = facet.kind === 'field' && fields.includes(facet.field) && facet.values.every((v) => v.op === '=' || v.op === 'contains');
|
|
37
|
+
if (own)
|
|
38
|
+
picks.set(facet.field, facet.values.map((v) => ({ value: v.value, label: v.label })));
|
|
39
|
+
else
|
|
40
|
+
others.push(facet);
|
|
41
|
+
}
|
|
42
|
+
const opFor = (field) => (page.fields[field]?.type === 'many2many' ? 'contains' : '=');
|
|
43
|
+
/** The keyword in any of the search fields: their words, a choice by its label, a number as it is. */
|
|
44
|
+
const keywordFilter = (text) => {
|
|
45
|
+
const found = (0, core_1.suggestions)(text, page, node).map((s) => ({ field: s.field, op: s.op, value: s.value }));
|
|
46
|
+
return [{ any: found }];
|
|
47
|
+
};
|
|
48
|
+
const facets = () => [
|
|
49
|
+
...others,
|
|
50
|
+
...fields.flatMap((field) => {
|
|
51
|
+
const ticked = picks.get(field) ?? [];
|
|
52
|
+
return ticked.length ? [{ kind: 'field', field, label: page.fields[field].label, values: ticked.map((p) => ({ op: opFor(field), value: p.value, label: p.label })) }] : [];
|
|
53
|
+
}),
|
|
54
|
+
...(keyword ? [{ kind: 'custom', label: keyword, filter: keywordFilter(keyword) }] : []),
|
|
55
|
+
];
|
|
56
|
+
const changed = () => {
|
|
57
|
+
drawButtons();
|
|
58
|
+
context.onChange(facets());
|
|
59
|
+
};
|
|
60
|
+
// ---- the keyword ----------------------------------------------------------------------------------
|
|
61
|
+
const input = el('input', { type: 'search', class: 'fd-filter-keyword', placeholder: labels.filterByKeyword, 'aria-label': labels.filterByKeyword, autocomplete: 'off', enterkeyhint: 'search' });
|
|
62
|
+
let pause = null;
|
|
63
|
+
const takeKeyword = () => {
|
|
64
|
+
if (pause)
|
|
65
|
+
clearTimeout(pause);
|
|
66
|
+
pause = null;
|
|
67
|
+
const next = input.value.trim();
|
|
68
|
+
if (next === keyword)
|
|
69
|
+
return;
|
|
70
|
+
keyword = next;
|
|
71
|
+
changed();
|
|
72
|
+
};
|
|
73
|
+
input.addEventListener('input', () => {
|
|
74
|
+
if (pause)
|
|
75
|
+
clearTimeout(pause);
|
|
76
|
+
pause = setTimeout(takeKeyword, KEYWORD_PAUSE);
|
|
77
|
+
});
|
|
78
|
+
input.addEventListener('keydown', (event) => {
|
|
79
|
+
if (event.isComposing)
|
|
80
|
+
return;
|
|
81
|
+
if (event.key === 'Enter') {
|
|
82
|
+
// Never the form's Enter: a list has nothing to send.
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
takeKeyword();
|
|
85
|
+
}
|
|
86
|
+
else if (event.key === 'Escape' && input.value) {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
event.stopPropagation();
|
|
89
|
+
input.value = '';
|
|
90
|
+
takeKeyword();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// ---- a list of values to tick, for each field ---------------------------------------------------------
|
|
94
|
+
/** Which fields the bar offers: all unless the person took some away with the gear. */
|
|
95
|
+
const shownKey = `filters:${page.id}:${node.id}`;
|
|
96
|
+
const hiddenFields = () => {
|
|
97
|
+
const kept = context.preferences.get(shownKey);
|
|
98
|
+
return Array.isArray(kept) ? kept.filter((name) => typeof name === 'string') : [];
|
|
99
|
+
};
|
|
100
|
+
/** A field's values to tick: its choices, yes and no, or those its records hold. */
|
|
101
|
+
async function valuesOf(field) {
|
|
102
|
+
const def = page.fields[field];
|
|
103
|
+
if (def.type === 'selection')
|
|
104
|
+
return def.options.map((option) => ({ value: option.value, label: option.label }));
|
|
105
|
+
if (def.type === 'boolean')
|
|
106
|
+
return [{ value: true, label: labels.yes }, { value: false, label: labels.no }];
|
|
107
|
+
const source = context.dataSource;
|
|
108
|
+
if (def.type === 'many2many') {
|
|
109
|
+
const found = (await source?.search?.({ model: def.relation, query: '', limit: 100 })) ?? [];
|
|
110
|
+
return found.map((record) => ({ value: record.id, label: record.label }));
|
|
111
|
+
}
|
|
112
|
+
const groups = (await source?.groups?.({ model: context.model, field, filter: context.fixedFilter() })) ?? [];
|
|
113
|
+
return groups.filter((group) => group.value !== null && group.label !== '').map((group) => ({ value: group.value, label: group.label || String(group.value) }));
|
|
114
|
+
}
|
|
115
|
+
const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
116
|
+
const openMenus = [];
|
|
117
|
+
/** Close every list but `keep`. */
|
|
118
|
+
const closeOthers = (keep) => {
|
|
119
|
+
for (const close of openMenus)
|
|
120
|
+
if (close !== keep)
|
|
121
|
+
close();
|
|
122
|
+
};
|
|
123
|
+
function menuFor(button, menu, load) {
|
|
124
|
+
const items = () => [...menu.querySelectorAll('[role^="menuitem"]')];
|
|
125
|
+
const close = (focusBack = false) => {
|
|
126
|
+
if (menu.hidden)
|
|
127
|
+
return;
|
|
128
|
+
menu.hidden = true;
|
|
129
|
+
button.setAttribute('aria-expanded', 'false');
|
|
130
|
+
if (focusBack)
|
|
131
|
+
button.focus();
|
|
132
|
+
};
|
|
133
|
+
const open = async (at = 'checked') => {
|
|
134
|
+
closeOthers(closer);
|
|
135
|
+
menu.hidden = false;
|
|
136
|
+
button.setAttribute('aria-expanded', 'true');
|
|
137
|
+
await load();
|
|
138
|
+
if (menu.hidden)
|
|
139
|
+
return;
|
|
140
|
+
const all = items();
|
|
141
|
+
const first = at === 'last' ? all[all.length - 1] : at === 'checked' ? (all.find((item) => item.getAttribute('aria-checked') === 'true') ?? all[0]) : all[0];
|
|
142
|
+
first?.focus();
|
|
143
|
+
};
|
|
144
|
+
const closer = () => close();
|
|
145
|
+
openMenus.push(closer);
|
|
146
|
+
button.addEventListener('click', () => (menu.hidden ? void open() : close()));
|
|
147
|
+
button.addEventListener('keydown', (event) => {
|
|
148
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
void open(event.key === 'ArrowUp' ? 'last' : 'first');
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
menu.addEventListener('keydown', (event) => {
|
|
154
|
+
const all = items();
|
|
155
|
+
const at = all.indexOf(doc.activeElement);
|
|
156
|
+
const to = { ArrowDown: at + 1, ArrowUp: at - 1, Home: 0, End: all.length - 1 }[event.key];
|
|
157
|
+
if (to !== undefined) {
|
|
158
|
+
event.preventDefault();
|
|
159
|
+
all[(to + all.length) % all.length]?.focus();
|
|
160
|
+
}
|
|
161
|
+
else if (event.key === ' ' || event.key === 'Enter') {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
doc.activeElement?.click();
|
|
164
|
+
}
|
|
165
|
+
else if (event.key === 'Escape') {
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
// Only the list closes: not a dialog the list is in.
|
|
168
|
+
event.stopPropagation();
|
|
169
|
+
close(true);
|
|
170
|
+
}
|
|
171
|
+
else if (event.key === 'Tab')
|
|
172
|
+
close();
|
|
173
|
+
});
|
|
174
|
+
return { close };
|
|
175
|
+
}
|
|
176
|
+
/** A row of the list: a box ticked or not, and the value's words. */
|
|
177
|
+
const tickRow = (text, checked, onClick) => {
|
|
178
|
+
const row = el('div', { role: 'menuitemcheckbox', class: 'fd-filter-option', tabindex: '-1', 'aria-checked': String(checked) }, el('span', { class: 'fd-filter-box', 'aria-hidden': 'true' }, ...icon('check')), el('span', { class: 'fd-filter-option-text' }, text));
|
|
179
|
+
row.addEventListener('click', onClick);
|
|
180
|
+
return row;
|
|
181
|
+
};
|
|
182
|
+
const dropdowns = fields.map((field) => {
|
|
183
|
+
// Its own name where the page gives one ("Iteration" for Iteration Path): on its button, its list and the gear's.
|
|
184
|
+
const def = { ...page.fields[field], label: node.filterLabels?.[field] ?? page.fields[field].label };
|
|
185
|
+
const menuId = uid(`${node.id}-filter-${field}`);
|
|
186
|
+
const words = el('span', { class: 'fd-filter-words' });
|
|
187
|
+
const button = el('button', { type: 'button', class: 'fd-filter-pick', 'data-field': field, 'aria-haspopup': 'menu', 'aria-expanded': 'false', 'aria-controls': menuId }, words, ...icon('chevron-down', 'fd-filter-chevron'));
|
|
188
|
+
const menu = el('div', { class: 'fd-filter-menu', role: 'menu', id: menuId, 'aria-label': fill(labels.filterNamed, { label: def.label }), hidden: '' });
|
|
189
|
+
let known = [];
|
|
190
|
+
const draw = () => {
|
|
191
|
+
const ticked = picks.get(field) ?? [];
|
|
192
|
+
// What is ticked first, though the records no longer hold it; then the rest, in their order.
|
|
193
|
+
const all = [...ticked.filter((p) => !known.some((k) => same(k.value, p.value))), ...known];
|
|
194
|
+
menu.replaceChildren(...all.map((option) => {
|
|
195
|
+
const on = ticked.some((p) => same(p.value, option.value));
|
|
196
|
+
return tickRow(option.label, on, () => {
|
|
197
|
+
const now = picks.get(field) ?? [];
|
|
198
|
+
const next = on ? now.filter((p) => !same(p.value, option.value)) : [...now, option];
|
|
199
|
+
if (next.length)
|
|
200
|
+
picks.set(field, next);
|
|
201
|
+
else
|
|
202
|
+
picks.delete(field);
|
|
203
|
+
const focused = [...menu.children].indexOf(doc.activeElement);
|
|
204
|
+
changed();
|
|
205
|
+
draw();
|
|
206
|
+
menu.children[focused]?.focus();
|
|
207
|
+
});
|
|
208
|
+
}));
|
|
209
|
+
};
|
|
210
|
+
const { close } = menuFor(button, menu, async () => {
|
|
211
|
+
known = await valuesOf(field);
|
|
212
|
+
draw();
|
|
213
|
+
});
|
|
214
|
+
const holder = el('span', { class: 'fd-filter-field', 'data-field': field }, button, menu);
|
|
215
|
+
return { field, def, button, words, holder, close };
|
|
216
|
+
});
|
|
217
|
+
function drawButtons() {
|
|
218
|
+
const hidden = new Set(hiddenFields());
|
|
219
|
+
for (const { field, def, button, words, holder } of dropdowns) {
|
|
220
|
+
holder.hidden = hidden.has(field);
|
|
221
|
+
const ticked = picks.get(field) ?? [];
|
|
222
|
+
button.toggleAttribute('data-picked', ticked.length > 0);
|
|
223
|
+
// The field's name read out before what is ticked, which alone shows: "Work Item Type: Bug".
|
|
224
|
+
words.replaceChildren(...(ticked.length ? [el('span', { class: 'fd-sr-only' }, `${def.label}: `), ticked.map((p) => p.label).join(', ')] : [def.label]));
|
|
225
|
+
}
|
|
226
|
+
clear.hidden = !keyword && !others.length && ![...picks.values()].some((p) => p.length);
|
|
227
|
+
}
|
|
228
|
+
// ---- the gear: which fields the bar offers ------------------------------------------------------------
|
|
229
|
+
const settingsId = uid(`${node.id}-filter-settings`);
|
|
230
|
+
const gear = el('button', { type: 'button', class: 'fd-filter-tool', 'aria-label': labels.filterSettings, title: labels.filterSettings, 'aria-haspopup': 'menu', 'aria-expanded': 'false', 'aria-controls': settingsId }, ...icon('gear'));
|
|
231
|
+
const settings = el('div', { class: 'fd-filter-menu fd-filter-settings', role: 'menu', id: settingsId, 'aria-label': labels.filterSettings, hidden: '' });
|
|
232
|
+
const drawSettings = () => {
|
|
233
|
+
const hidden = new Set(hiddenFields());
|
|
234
|
+
settings.replaceChildren(...dropdowns.map(({ field, def }) => tickRow(def.label, !hidden.has(field), () => {
|
|
235
|
+
const next = hidden.has(field) ? [...hidden].filter((f) => f !== field) : [...hidden, field];
|
|
236
|
+
context.preferences.set(shownKey, next);
|
|
237
|
+
// A field taken away from the bar no longer filters the list.
|
|
238
|
+
if (!hidden.has(field) && picks.delete(field))
|
|
239
|
+
changed();
|
|
240
|
+
else
|
|
241
|
+
drawButtons();
|
|
242
|
+
const focused = [...settings.children].indexOf(doc.activeElement);
|
|
243
|
+
drawSettings();
|
|
244
|
+
settings.children[focused]?.focus();
|
|
245
|
+
})));
|
|
246
|
+
};
|
|
247
|
+
const gearMenu = menuFor(gear, settings, drawSettings);
|
|
248
|
+
const gearHolder = el('span', { class: 'fd-filter-field' }, gear, settings);
|
|
249
|
+
gearHolder.hidden = dropdowns.length === 0;
|
|
250
|
+
// ---- × clears every filter ------------------------------------------------------------------------------
|
|
251
|
+
const clear = el('button', { type: 'button', class: 'fd-filter-tool fd-filter-clear', 'aria-label': labels.clearFilters, title: labels.clearFilters }, ...icon('close'));
|
|
252
|
+
clear.addEventListener('click', () => {
|
|
253
|
+
keyword = '';
|
|
254
|
+
input.value = '';
|
|
255
|
+
picks.clear();
|
|
256
|
+
others = [];
|
|
257
|
+
changed();
|
|
258
|
+
input.focus();
|
|
259
|
+
});
|
|
260
|
+
const element = el('div', { class: 'fd-filter-bar', role: 'search', 'data-node': `${node.id}-filters` }, el('label', { class: 'fd-filter-search' }, ...icon('filter-lines', 'fd-filter-icon'), input), el('div', { class: 'fd-filter-fields' }, ...dropdowns.map((d) => d.holder), gearHolder, clear));
|
|
261
|
+
// A press anywhere else closes an open list.
|
|
262
|
+
const outside = (event) => {
|
|
263
|
+
if (!element.contains(event.target))
|
|
264
|
+
closeOthers();
|
|
265
|
+
};
|
|
266
|
+
doc.addEventListener('pointerdown', outside);
|
|
267
|
+
element.addEventListener('focusout', (event) => {
|
|
268
|
+
if (!element.contains(event.relatedTarget) && event.relatedTarget)
|
|
269
|
+
closeOthers();
|
|
270
|
+
});
|
|
271
|
+
drawButtons();
|
|
272
|
+
return {
|
|
273
|
+
element,
|
|
274
|
+
/** A search put in from outside (a map's "In this area"): it applies with the rest, one with the same words in its place. */
|
|
275
|
+
add(facet) {
|
|
276
|
+
const words = facet.kind === 'custom' ? facet.label : null;
|
|
277
|
+
others = [...others.filter((f) => !(words !== null && f.kind === 'custom' && f.label === words)), facet];
|
|
278
|
+
changed();
|
|
279
|
+
},
|
|
280
|
+
destroy() {
|
|
281
|
+
if (pause)
|
|
282
|
+
clearTimeout(pause);
|
|
283
|
+
doc.removeEventListener('pointerdown', outside);
|
|
284
|
+
gearMenu.close();
|
|
285
|
+
for (const dropdown of dropdowns)
|
|
286
|
+
dropdown.close();
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=filter-bar.js.map
|