@isahaq/kosh-ui 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +21 -2
- package/dist/api.d.ts +158 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +216 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +14 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +355 -0
- package/dist/app.js.map +1 -0
- package/dist/components/primitives.d.ts +60 -0
- package/dist/components/primitives.d.ts.map +1 -0
- package/dist/components/primitives.js +105 -0
- package/dist/components/primitives.js.map +1 -0
- package/dist/context.d.ts +34 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +58 -0
- package/dist/context.js.map +1 -0
- package/dist/i18n/index.d.ts +14 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +43 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/messages.d.ts +104 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +194 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +4 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +7 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/format.d.ts +18 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +48 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/registry.d.ts +80 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +57 -0
- package/dist/registry.js.map +1 -0
- package/dist/search/SearchBar.d.ts +19 -0
- package/dist/search/SearchBar.d.ts.map +1 -0
- package/dist/search/SearchBar.js +84 -0
- package/dist/search/SearchBar.js.map +1 -0
- package/dist/shell/Login.d.ts +7 -0
- package/dist/shell/Login.d.ts.map +1 -0
- package/dist/shell/Login.js +41 -0
- package/dist/shell/Login.js.map +1 -0
- package/dist/views/FormView.d.ts +5 -0
- package/dist/views/FormView.d.ts.map +1 -0
- package/dist/views/FormView.js +276 -0
- package/dist/views/FormView.js.map +1 -0
- package/dist/views/KanbanView.d.ts +11 -0
- package/dist/views/KanbanView.d.ts.map +1 -0
- package/dist/views/KanbanView.js +156 -0
- package/dist/views/KanbanView.js.map +1 -0
- package/dist/views/ListView.d.ts +5 -0
- package/dist/views/ListView.d.ts.map +1 -0
- package/dist/views/ListView.js +227 -0
- package/dist/views/ListView.js.map +1 -0
- package/dist/views/widgets.d.ts +15 -0
- package/dist/views/widgets.d.ts.map +1 -0
- package/dist/views/widgets.js +253 -0
- package/dist/views/widgets.js.map +1 -0
- package/package.json +75 -3
- package/src/styles.css +101 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The form renderer (RFC 0007 §5): statusbar and transition buttons from the served view (only what the user may
|
|
4
|
+
* run, from the current state), groups, notebooks, editable lines, registered components (escape hatches), onchange
|
|
5
|
+
* assistance, and saves with compare-and-set (a record changed by someone else since it was opened is not
|
|
6
|
+
* overwritten: the user reloads). Conditions only decide display; the server re-checks every write.
|
|
7
|
+
*/
|
|
8
|
+
import { evaluate, holds, } from '@isahaq/kosh-views';
|
|
9
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
10
|
+
import { ArrowLeft, MoreHorizontal, Plus, Trash2 } from 'lucide-react';
|
|
11
|
+
import { useEffect, useId, useMemo, useState } from 'react';
|
|
12
|
+
import { useTranslation } from 'react-i18next';
|
|
13
|
+
import { ApiError } from '../api.js';
|
|
14
|
+
import { Alert, Button, Dialog, Label, Menu, MenuContent, MenuItem, MenuTrigger, Spinner, Tabs, TabsContent, TabsList, TabsTrigger, } from '../components/primitives.js';
|
|
15
|
+
import { useKosh } from '../context.js';
|
|
16
|
+
import { cn } from '../lib/cn.js';
|
|
17
|
+
import { PrefetchedNames, useRowNames } from './widgets.js';
|
|
18
|
+
function commandsOf(lines) {
|
|
19
|
+
return {
|
|
20
|
+
...(lines.rows.some((r) => r.id === undefined)
|
|
21
|
+
? { create: lines.rows.filter((r) => r.id === undefined).map((r) => r.values) }
|
|
22
|
+
: {}),
|
|
23
|
+
...(lines.rows.some((r) => r.id !== undefined && r.dirty)
|
|
24
|
+
? {
|
|
25
|
+
update: lines.rows
|
|
26
|
+
.filter((r) => r.id !== undefined && r.dirty)
|
|
27
|
+
.map((r) => ({ id: r.id, values: r.values })),
|
|
28
|
+
}
|
|
29
|
+
: {}),
|
|
30
|
+
...(lines.deleted.length > 0 ? { delete: lines.deleted } : {}),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** The payload of a save: changed values, many2many as `{ set }`. */
|
|
34
|
+
function payloadOf(changes, fields, lines) {
|
|
35
|
+
const out = {};
|
|
36
|
+
for (const [key, value] of Object.entries(changes)) {
|
|
37
|
+
if (fields[key]?.kind === 'many2many')
|
|
38
|
+
out[key] = { set: Array.isArray(value) ? value : [] };
|
|
39
|
+
else
|
|
40
|
+
out[key] = value;
|
|
41
|
+
}
|
|
42
|
+
for (const [key, state] of lines) {
|
|
43
|
+
const commands = commandsOf(state);
|
|
44
|
+
if (Object.keys(commands).length > 0)
|
|
45
|
+
out[key] = commands;
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
function Lines({ node, served, ids, readonly, state, onState, }) {
|
|
50
|
+
const { api, registry } = useKosh();
|
|
51
|
+
const { t } = useTranslation();
|
|
52
|
+
const field = served.fields[served.view.model]?.[node.field];
|
|
53
|
+
const target = field?.target ?? '';
|
|
54
|
+
const columnFields = served.fields[target] ?? {};
|
|
55
|
+
const columns = node.columns.filter((c) => columnFields[c.field] !== undefined);
|
|
56
|
+
const loaded = useQuery({
|
|
57
|
+
queryKey: ['lines', target, ids],
|
|
58
|
+
queryFn: () => api.list(target, {
|
|
59
|
+
filter: { id: { in: [...ids] } },
|
|
60
|
+
fields: ['id', ...columns.map((c) => c.field)],
|
|
61
|
+
limit: 1000,
|
|
62
|
+
}),
|
|
63
|
+
enabled: ids.length > 0 && target !== '',
|
|
64
|
+
});
|
|
65
|
+
const rows = state?.rows ??
|
|
66
|
+
(loaded.data?.items ?? []).map((r) => ({
|
|
67
|
+
key: `id-${r.id}`,
|
|
68
|
+
id: r.id,
|
|
69
|
+
values: r,
|
|
70
|
+
dirty: false,
|
|
71
|
+
}));
|
|
72
|
+
const names = useRowNames(rows.map((r) => r.values), Object.values(columnFields));
|
|
73
|
+
if (field === undefined)
|
|
74
|
+
return null;
|
|
75
|
+
const set = (next, deleted = state?.deleted ?? []) => onState({ rows: next, deleted });
|
|
76
|
+
return (_jsx(PrefetchedNames.Provider, { value: names, children: _jsxs("div", { className: "col-span-full overflow-x-auto", children: [_jsxs("table", { className: "w-full text-sm", children: [_jsx("caption", { className: "sr-only", children: node.id }), _jsx("thead", { children: _jsxs("tr", { className: "border-b", children: [columns.map((c) => (_jsx("th", { scope: "col", className: "px-2 py-1.5 text-start font-medium text-muted-foreground", children: c.label ?? columnFields[c.field]?.label ?? c.field }, c.id))), _jsx("th", { className: "w-10", children: _jsx("span", { className: "sr-only", children: t('views.removeLine') }) })] }) }), _jsx("tbody", { children: rows.map((row, index) => (_jsxs("tr", { className: "border-b", children: [columns.map((c) => {
|
|
77
|
+
const meta = columnFields[c.field];
|
|
78
|
+
const Widget = registry.widget(c, meta);
|
|
79
|
+
return (_jsx("td", { className: "px-2 py-1", children: _jsx(Widget, { id: `${row.key}-${c.id}`, node: c, field: meta, value: row.values[c.field], record: row.values, readonly: readonly || meta.readonly, onChange: (value) => set(rows.map((r, i) => i === index
|
|
80
|
+
? { ...r, values: { ...r.values, [c.field]: value }, dirty: true }
|
|
81
|
+
: r)) }) }, c.id));
|
|
82
|
+
}), _jsx("td", { children: readonly ? null : (_jsx(Button, { variant: "ghost", size: "icon", "aria-label": t('views.removeLine'), onClick: () => set(rows.filter((_, i) => i !== index), row.id === undefined
|
|
83
|
+
? (state?.deleted ?? [])
|
|
84
|
+
: [...(state?.deleted ?? []), row.id]), children: _jsx(Trash2, { "aria-hidden": true }) })) })] }, row.key))) })] }), readonly ? null : (_jsxs(Button, { variant: "link", size: "sm", className: "mt-1", onClick: () => set([...rows, { key: `new-${rows.length}-${Date.now()}`, values: {}, dirty: true }]), children: [_jsx(Plus, { "aria-hidden": true }), t('views.addLine')] }))] }) }));
|
|
85
|
+
}
|
|
86
|
+
/** The default form renderer. */
|
|
87
|
+
export function FormView({ served, recordId, defaults, onSaved, onBack }) {
|
|
88
|
+
const { api, registry, uid, companyId } = useKosh();
|
|
89
|
+
const { t } = useTranslation();
|
|
90
|
+
const queryClient = useQueryClient();
|
|
91
|
+
const formId = useId();
|
|
92
|
+
const view = served.view;
|
|
93
|
+
if (view.type !== 'form')
|
|
94
|
+
throw new Error(`FormView renders form views, not ${view.type}.`);
|
|
95
|
+
const model = view.model;
|
|
96
|
+
const fields = served.fields[model] ?? {};
|
|
97
|
+
const isNew = recordId === 'new';
|
|
98
|
+
const loaded = useQuery({
|
|
99
|
+
queryKey: ['record', model, recordId],
|
|
100
|
+
queryFn: async () => isNew
|
|
101
|
+
? {
|
|
102
|
+
record: {
|
|
103
|
+
id: 0,
|
|
104
|
+
...(await api.onchange(model, { values: defaults ?? {}, changed: [] })).values,
|
|
105
|
+
},
|
|
106
|
+
etag: null,
|
|
107
|
+
}
|
|
108
|
+
: api.get(model, recordId),
|
|
109
|
+
});
|
|
110
|
+
const [changes, setChanges] = useState({});
|
|
111
|
+
const [lines, setLines] = useState(new Map());
|
|
112
|
+
const [problem, setProblem] = useState(null);
|
|
113
|
+
const [warnings, setWarnings] = useState([]);
|
|
114
|
+
const [confirming, setConfirming] = useState(null);
|
|
115
|
+
const [deleting, setDeleting] = useState(false);
|
|
116
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: a new record id starts a clean form
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
setChanges({});
|
|
119
|
+
setLines(new Map());
|
|
120
|
+
setProblem(null);
|
|
121
|
+
}, [recordId]);
|
|
122
|
+
const record = loaded.data?.record;
|
|
123
|
+
const values = useMemo(() => ({ ...(record ?? {}), ...changes }), [record, changes]);
|
|
124
|
+
const env = { uid, companyId };
|
|
125
|
+
const dirty = Object.keys(changes).length > 0 || lines.size > 0;
|
|
126
|
+
const canEdit = isNew ? served.operations.create : served.operations.write;
|
|
127
|
+
const locked = !canEdit || (!isNew && holds(view.readonlyWhen, values, env));
|
|
128
|
+
const save = useMutation({
|
|
129
|
+
mutationFn: async () => {
|
|
130
|
+
const payload = payloadOf(changes, fields, lines);
|
|
131
|
+
return isNew
|
|
132
|
+
? api.create(model, payload)
|
|
133
|
+
: api.update(model, recordId, payload, loaded.data?.etag ?? null);
|
|
134
|
+
},
|
|
135
|
+
onSuccess: async (result) => {
|
|
136
|
+
setChanges({});
|
|
137
|
+
setLines(new Map());
|
|
138
|
+
setProblem(null);
|
|
139
|
+
await queryClient.invalidateQueries({ queryKey: ['list', model] });
|
|
140
|
+
if (isNew)
|
|
141
|
+
onSaved(result.record.id);
|
|
142
|
+
else
|
|
143
|
+
queryClient.setQueryData(['record', model, recordId], result);
|
|
144
|
+
},
|
|
145
|
+
onError: (e) => setProblem(e instanceof ApiError ? e : null),
|
|
146
|
+
});
|
|
147
|
+
const transition = useMutation({
|
|
148
|
+
mutationFn: async (name) => {
|
|
149
|
+
if (dirty)
|
|
150
|
+
await save.mutateAsync();
|
|
151
|
+
return api.transition(model, recordId, name);
|
|
152
|
+
},
|
|
153
|
+
onSuccess: async (result) => {
|
|
154
|
+
setProblem(null);
|
|
155
|
+
queryClient.setQueryData(['record', model, recordId], result);
|
|
156
|
+
await queryClient.invalidateQueries({ queryKey: ['list', model] });
|
|
157
|
+
},
|
|
158
|
+
onError: (e) => setProblem(e instanceof ApiError ? e : null),
|
|
159
|
+
});
|
|
160
|
+
const remove = useMutation({
|
|
161
|
+
mutationFn: () => api.remove(model, recordId),
|
|
162
|
+
onSuccess: async () => {
|
|
163
|
+
await queryClient.invalidateQueries({ queryKey: ['list', model] });
|
|
164
|
+
onBack();
|
|
165
|
+
},
|
|
166
|
+
onError: (e) => setProblem(e instanceof ApiError ? e : null),
|
|
167
|
+
});
|
|
168
|
+
const change = (key, value) => {
|
|
169
|
+
const next = { ...changes, [key]: value };
|
|
170
|
+
setChanges(next);
|
|
171
|
+
if (!served.onchange.includes(key))
|
|
172
|
+
return;
|
|
173
|
+
void api
|
|
174
|
+
.onchange(model, {
|
|
175
|
+
...(isNew ? {} : { id: recordId }),
|
|
176
|
+
values: { ...values, [key]: value },
|
|
177
|
+
changed: [key],
|
|
178
|
+
})
|
|
179
|
+
.then((result) => {
|
|
180
|
+
const assisted = {};
|
|
181
|
+
for (const [k, v] of Object.entries(result.values))
|
|
182
|
+
if (k !== key && k !== 'id' && values[k] !== v)
|
|
183
|
+
assisted[k] = v;
|
|
184
|
+
if (Object.keys(assisted).length > 0)
|
|
185
|
+
setChanges((c) => ({ ...c, ...assisted }));
|
|
186
|
+
setWarnings(result.warnings ?? []);
|
|
187
|
+
})
|
|
188
|
+
.catch(() => undefined);
|
|
189
|
+
};
|
|
190
|
+
const names = useRowNames(record === undefined ? [] : [values], Object.values(fields));
|
|
191
|
+
if (loaded.isPending)
|
|
192
|
+
return _jsx(Spinner, { label: t('app.loading') });
|
|
193
|
+
if (loaded.isError)
|
|
194
|
+
return (_jsx(Alert, { action: _jsx(Button, { size: "sm", onClick: onBack, children: t('views.back') }), children: loaded.error instanceof ApiError ? loaded.error.message : t('app.error') }));
|
|
195
|
+
const visible = (condition) => evaluate(condition, values, env) !== false;
|
|
196
|
+
const renderField = (node) => {
|
|
197
|
+
const field = fields[node.field];
|
|
198
|
+
if (field === undefined || !visible(node.visibleWhen))
|
|
199
|
+
return null;
|
|
200
|
+
const Widget = registry.widget(node, field);
|
|
201
|
+
const readonly = locked || field.readonly || holds(node.readonlyWhen, values, env);
|
|
202
|
+
const id = `${formId}-${node.id}`;
|
|
203
|
+
const invalid = problem?.problem.detail.includes(node.field) === true;
|
|
204
|
+
return (_jsxs("div", { className: cn('grid gap-1', (field.kind === 'text' || field.kind === 'html') && 'col-span-full'), children: [_jsxs(Label, { htmlFor: id, children: [node.label ?? field.label, field.required && !readonly ? (_jsxs("span", { "aria-hidden": true, className: "text-danger", children: [' ', "*"] })) : null] }), _jsx("div", { className: "min-h-9 py-1.5 text-sm", children: _jsx(Widget, { id: id, node: node, field: field, value: values[node.field], record: values, readonly: readonly, onChange: (v) => change(node.field, v), invalid: invalid }) }), node.help === undefined ? null : (_jsx("p", { className: "text-xs text-muted-foreground", children: node.help }))] }, node.id));
|
|
205
|
+
};
|
|
206
|
+
const renderNodes = (nodes) => nodes.map((node) => {
|
|
207
|
+
switch (node.kind) {
|
|
208
|
+
case 'field':
|
|
209
|
+
return renderField(node);
|
|
210
|
+
case 'group':
|
|
211
|
+
if (!visible(node.visibleWhen))
|
|
212
|
+
return null;
|
|
213
|
+
return (_jsxs("fieldset", { className: "col-span-full", children: [node.label === undefined ? null : (_jsx("legend", { className: "mb-2 text-sm font-semibold", children: node.label })), _jsx("div", { className: cn('grid gap-x-6 gap-y-3', node.columns === 1
|
|
214
|
+
? 'grid-cols-1'
|
|
215
|
+
: node.columns === 3
|
|
216
|
+
? 'sm:grid-cols-3'
|
|
217
|
+
: 'sm:grid-cols-2'), children: renderNodes(node.children) })] }, node.id));
|
|
218
|
+
case 'notebook': {
|
|
219
|
+
const pages = node.pages.filter((p) => visible(p.visibleWhen));
|
|
220
|
+
if (pages.length === 0)
|
|
221
|
+
return null;
|
|
222
|
+
return (_jsxs(Tabs, { defaultValue: pages[0]?.id, className: "col-span-full", children: [_jsx(TabsList, { children: pages.map((p) => (_jsx(TabsTrigger, { value: p.id, children: p.label }, p.id))) }), pages.map((p) => (_jsx(TabsContent, { value: p.id, children: _jsx("div", { className: "grid gap-x-6 gap-y-3 sm:grid-cols-2", children: renderNodes(p.children) }) }, p.id)))] }, node.id));
|
|
223
|
+
}
|
|
224
|
+
case 'lines': {
|
|
225
|
+
const ids = Array.isArray(values[node.field])
|
|
226
|
+
? values[node.field].filter((v) => typeof v === 'number')
|
|
227
|
+
: [];
|
|
228
|
+
return (_jsx(Lines, { node: node, served: served, ids: ids, readonly: locked || holds(node.readonlyWhen, values, env), state: lines.get(node.field), onState: (state) => setLines((m) => new Map(m).set(node.field, state)) }, node.id));
|
|
229
|
+
}
|
|
230
|
+
default: {
|
|
231
|
+
// component nodes (the escape hatch)
|
|
232
|
+
if (!visible(node.visibleWhen))
|
|
233
|
+
return null;
|
|
234
|
+
const Component = registry.component(node.component);
|
|
235
|
+
if (Component === undefined)
|
|
236
|
+
return (_jsx(Alert, { tone: "warning", children: `Component '${node.component}' is not registered.` }, node.id));
|
|
237
|
+
return (_jsx("div", { className: "col-span-full", children: _jsx(Component, { node: node, record: isNew ? null : (record ?? null), model: model, served: served, api: api, version: loaded.data?.etag ?? null, reload: () => void queryClient.invalidateQueries({ queryKey: ['record', model, recordId] }) }) }, node.id));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
const statusbar = view.header.statusbar;
|
|
242
|
+
const state = statusbar === undefined ? undefined : values[statusbar];
|
|
243
|
+
const buttons = view.header.buttons.filter((b) => {
|
|
244
|
+
const spec = served.transitions.find((tr) => tr.name === b.transition);
|
|
245
|
+
return (!isNew &&
|
|
246
|
+
spec !== undefined &&
|
|
247
|
+
(state === undefined || spec.from.includes(String(state))) &&
|
|
248
|
+
visible(b.visibleWhen));
|
|
249
|
+
});
|
|
250
|
+
const title = String(values['displayName'] ?? values['name'] ?? (isNew ? t('views.new') : `#${recordId}`));
|
|
251
|
+
return (_jsxs(PrefetchedNames.Provider, { value: names, children: [_jsxs("form", { "aria-label": title, className: "grid gap-4", onSubmit: (e) => {
|
|
252
|
+
e.preventDefault();
|
|
253
|
+
if (dirty && !locked)
|
|
254
|
+
save.mutate();
|
|
255
|
+
}, children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": t('views.back'), onClick: onBack, children: _jsx(ArrowLeft, { className: "rtl:-scale-x-100", "aria-hidden": true }) }), _jsx("h1", { className: "text-lg font-semibold", children: title })] }), _jsxs("div", { className: "flex items-center gap-2", children: [dirty && !locked ? (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", onClick: () => {
|
|
256
|
+
setChanges({});
|
|
257
|
+
setLines(new Map());
|
|
258
|
+
setProblem(null);
|
|
259
|
+
}, children: t('views.discard') }), _jsx(Button, { type: "submit", variant: "primary", busy: save.isPending, children: t('views.save') })] })) : null, !isNew && served.operations.unlink ? (_jsxs(Menu, { children: [_jsx(MenuTrigger, { asChild: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": "Actions", children: _jsx(MoreHorizontal, { "aria-hidden": true }) }) }), _jsx(MenuContent, { children: _jsxs(MenuItem, { onSelect: () => setDeleting(true), children: [_jsx(Trash2, { className: "size-4", "aria-hidden": true }), t('views.delete')] }) })] })) : null] })] }), problem === null ? null : (_jsx(Alert, { tone: problem.kind === 'stale-record' ? 'warning' : 'danger', action: problem.kind === 'stale-record' ? (_jsx(Button, { type: "button", size: "sm", onClick: () => {
|
|
260
|
+
setChanges({});
|
|
261
|
+
setProblem(null);
|
|
262
|
+
void loaded.refetch();
|
|
263
|
+
}, children: t('views.reload') })) : undefined, children: problem.kind === 'stale-record' ? t('views.stale') : problem.message })), warnings.map((w) => (_jsx(Alert, { tone: "info", children: w }, w))), statusbar === undefined && buttons.length === 0 ? null : (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 rounded-lg border bg-surface px-3 py-2", children: [_jsx("div", { className: "flex flex-wrap gap-2", children: buttons.map((b) => (_jsx(Button, { type: "button", size: "sm", variant: b.primary === true ? 'primary' : 'secondary', busy: transition.isPending && transition.variables === b.transition, onClick: () => b.confirm === undefined ? transition.mutate(b.transition) : setConfirming(b), children: b.label ?? b.transition }, b.id))) }), statusbar === undefined ? null : (_jsx("ol", { "aria-label": fields[statusbar]?.label ?? statusbar, className: "flex flex-wrap items-center gap-1 text-xs", children: (fields[statusbar]?.options ?? []).map((o) => (_jsx("li", { "aria-current": o.value === state ? 'step' : undefined, className: cn('rounded-full px-2.5 py-1', o.value === state
|
|
264
|
+
? 'bg-primary text-primary-foreground'
|
|
265
|
+
: 'bg-muted text-muted-foreground'), children: o.label }, o.value))) }))] })), _jsxs("div", { className: "grid gap-6 rounded-lg border bg-surface p-5", children: [locked && !isNew ? (_jsx("p", { className: "text-xs text-muted-foreground", children: t('views.readonly') })) : null, _jsx("div", { className: "grid gap-x-6 gap-y-4 sm:grid-cols-2", children: renderNodes(view.sheet) })] }), view.chatter === true && registry.component('chatter') !== undefined && !isNew
|
|
266
|
+
? (() => {
|
|
267
|
+
const Chatter = registry.component('chatter');
|
|
268
|
+
return (_jsx(Chatter, { node: { kind: 'component', id: 'chatter', component: 'chatter' }, record: record ?? null, model: model, served: served, api: api, version: loaded.data?.etag ?? null, reload: () => void loaded.refetch() }));
|
|
269
|
+
})()
|
|
270
|
+
: null] }), _jsx(Dialog, { open: confirming !== null, onOpenChange: (open) => !open && setConfirming(null), title: confirming?.label ?? confirming?.transition ?? '', description: confirming?.confirm ?? '', footer: _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setConfirming(null), children: t('views.no') }), _jsx(Button, { variant: "primary", onClick: () => {
|
|
271
|
+
if (confirming !== null)
|
|
272
|
+
transition.mutate(confirming.transition);
|
|
273
|
+
setConfirming(null);
|
|
274
|
+
}, children: t('views.yes') })] }) }), _jsx(Dialog, { open: deleting, onOpenChange: setDeleting, title: t('views.confirmDelete'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setDeleting(false), children: t('views.no') }), _jsx(Button, { variant: "danger", busy: remove.isPending, onClick: () => remove.mutate(), children: t('views.delete') })] }) })] }));
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=FormView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormView.js","sourceRoot":"","sources":["../../src/views/FormView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kanban renderer (RFC 0007 §5): one column per value of the group-by field (selection or state options, or
|
|
3
|
+
* the groups the server returns for a many2one), cards from the view's card spec, drag-and-drop with dnd-kit
|
|
4
|
+
* (keyboard too: Space to pick up, arrows, Space to drop). Moving a card between state columns runs the transition
|
|
5
|
+
* that leads there; other fields are written. The server refuses moves the user may not make.
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactElement } from 'react';
|
|
8
|
+
import type { ViewProps } from '../registry.js';
|
|
9
|
+
/** The default kanban renderer. */
|
|
10
|
+
export declare function KanbanView(props: ViewProps): ReactElement;
|
|
11
|
+
//# sourceMappingURL=KanbanView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KanbanView.d.ts","sourceRoot":"","sources":["../../src/views/KanbanView.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,OAAO,CAAC;AAMpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAuLhD,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CA0GzD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The kanban renderer (RFC 0007 §5): one column per value of the group-by field (selection or state options, or
|
|
4
|
+
* the groups the server returns for a many2one), cards from the view's card spec, drag-and-drop with dnd-kit
|
|
5
|
+
* (keyboard too: Space to pick up, arrows, Space to drop). Moving a card between state columns runs the transition
|
|
6
|
+
* that leads there; other fields are written. The server refuses moves the user may not make.
|
|
7
|
+
*/
|
|
8
|
+
import { DndContext, KeyboardSensor, PointerSensor, useDraggable, useDroppable, useSensor, useSensors, } from '@dnd-kit/core';
|
|
9
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
10
|
+
import { useState } from 'react';
|
|
11
|
+
import { useTranslation } from 'react-i18next';
|
|
12
|
+
import { ApiError } from '../api.js';
|
|
13
|
+
import { Alert, Input, Spinner } from '../components/primitives.js';
|
|
14
|
+
import { useKosh } from '../context.js';
|
|
15
|
+
import { cn } from '../lib/cn.js';
|
|
16
|
+
import { PrefetchedNames, useRowNames } from './widgets.js';
|
|
17
|
+
const and = (a, b) => a === undefined ? b : { and: [a, b] };
|
|
18
|
+
function Card({ row, served, onOpen, }) {
|
|
19
|
+
const { registry } = useKosh();
|
|
20
|
+
const view = served.view;
|
|
21
|
+
const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({
|
|
22
|
+
id: row.id,
|
|
23
|
+
data: { row },
|
|
24
|
+
});
|
|
25
|
+
if (view.type !== 'kanban')
|
|
26
|
+
throw new Error('kanban');
|
|
27
|
+
const fields = served.fields[view.model] ?? {};
|
|
28
|
+
const show = (node) => {
|
|
29
|
+
const field = fields[node.field];
|
|
30
|
+
if (field === undefined)
|
|
31
|
+
return null;
|
|
32
|
+
const Widget = registry.widget(node, field);
|
|
33
|
+
return (_jsx(Widget, { id: `${row.id}-${node.id}`, node: node, field: field, value: row[node.field], record: row, readonly: true }, node.id));
|
|
34
|
+
};
|
|
35
|
+
const text = (key) => {
|
|
36
|
+
if (key === undefined)
|
|
37
|
+
return null;
|
|
38
|
+
const field = fields[key];
|
|
39
|
+
return field === undefined ? null : show({ kind: 'field', id: key, field: key });
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs("li", { ref: setNodeRef, style: transform === null
|
|
42
|
+
? undefined
|
|
43
|
+
: { transform: `translate3d(${transform.x}px, ${transform.y}px, 0)` }, className: cn('rounded-md border bg-surface p-3 text-sm shadow-sm', isDragging && 'opacity-70 shadow-lg'), children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("button", { type: "button", className: "text-start font-medium hover:underline", onClick: () => onOpen(row.id), children: text(view.card.title) }), _jsx("button", { type: "button", className: "cursor-grab rounded px-1 text-muted-foreground hover:bg-muted", "aria-label": `Move ${String(row['displayName'] ?? row[view.card.title] ?? row.id)}`, ...attributes, ...listeners, children: "\u283F" })] }), view.card.subtitle === undefined ? null : (_jsx("div", { className: "text-muted-foreground", children: text(view.card.subtitle) })), (view.card.badges ?? []).length === 0 ? null : (_jsx("div", { className: "mt-2 flex flex-wrap gap-1", children: (view.card.badges ?? []).map(show) })), (view.card.footer ?? []).length === 0 ? null : (_jsx("div", { className: "mt-2 flex flex-wrap justify-between gap-2 text-xs text-muted-foreground", children: (view.card.footer ?? []).map(show) }))] }));
|
|
44
|
+
}
|
|
45
|
+
function ColumnView({ column, props, keys, groupField, }) {
|
|
46
|
+
const { api } = useKosh();
|
|
47
|
+
const { t } = useTranslation();
|
|
48
|
+
const queryClient = useQueryClient();
|
|
49
|
+
const view = props.served.view;
|
|
50
|
+
const { setNodeRef, isOver } = useDroppable({ id: column.key, data: { column } });
|
|
51
|
+
const [quick, setQuick] = useState('');
|
|
52
|
+
const where = and(props.where, { [groupField.key]: column.value });
|
|
53
|
+
const rows = useQuery({
|
|
54
|
+
queryKey: ['list', view.model, where, keys, 'kanban'],
|
|
55
|
+
queryFn: () => api.list(view.model, { filter: where, fields: keys, limit: 100, count: true }),
|
|
56
|
+
});
|
|
57
|
+
const items = rows.data?.items ?? [];
|
|
58
|
+
const names = useRowNames(items, Object.values(props.served.fields[view.model] ?? {}));
|
|
59
|
+
const create = useMutation({
|
|
60
|
+
mutationFn: (name) => api.create(view.model, {
|
|
61
|
+
[view.type === 'kanban' ? view.card.title : 'name']: name,
|
|
62
|
+
...(groupField.kind === 'state' ? {} : { [groupField.key]: column.value }),
|
|
63
|
+
}),
|
|
64
|
+
onSuccess: async () => {
|
|
65
|
+
setQuick('');
|
|
66
|
+
await queryClient.invalidateQueries({ queryKey: ['list', view.model] });
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
// New records start in the initial state, so quick create applies to columns of other fields only.
|
|
70
|
+
const quickCreate = view.type === 'kanban' &&
|
|
71
|
+
view.quickCreate === true &&
|
|
72
|
+
props.served.operations.create &&
|
|
73
|
+
groupField.kind !== 'state';
|
|
74
|
+
return (_jsxs("section", { ref: setNodeRef, "aria-label": column.label, className: cn('flex w-72 shrink-0 flex-col rounded-lg bg-muted/50 p-2', isOver && 'ring-2 ring-ring'), children: [_jsxs("h2", { className: "flex items-center justify-between px-1 pb-2 text-sm font-semibold", children: [_jsx("span", { children: column.label }), _jsx("span", { className: "text-xs font-normal text-muted-foreground", children: rows.data?.count ?? items.length })] }), quickCreate ? (_jsx("form", { className: "mb-2", onSubmit: (e) => {
|
|
75
|
+
e.preventDefault();
|
|
76
|
+
if (quick.trim() !== '')
|
|
77
|
+
create.mutate(quick.trim());
|
|
78
|
+
}, children: _jsx(Input, { "aria-label": `${t('views.quickCreate')}: ${column.label}`, placeholder: t('views.quickCreate'), value: quick, onChange: (e) => setQuick(e.target.value) }) })) : null, rows.isPending ? (_jsx(Spinner, { label: t('app.loading') })) : (_jsx(PrefetchedNames.Provider, { value: names, children: _jsx("ul", { className: "grid gap-2", children: items.map((row) => (_jsx(Card, { row: row, served: props.served, onOpen: props.onOpen }, row.id))) }) }))] }));
|
|
79
|
+
}
|
|
80
|
+
/** The default kanban renderer. */
|
|
81
|
+
export function KanbanView(props) {
|
|
82
|
+
const { api } = useKosh();
|
|
83
|
+
const { t } = useTranslation();
|
|
84
|
+
const queryClient = useQueryClient();
|
|
85
|
+
const [error, setError] = useState(null);
|
|
86
|
+
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }), useSensor(KeyboardSensor));
|
|
87
|
+
const view = props.served.view;
|
|
88
|
+
const fields = view.type === 'kanban' ? (props.served.fields[view.model] ?? {}) : {};
|
|
89
|
+
const groupField = view.type === 'kanban' ? fields[view.groupBy] : undefined;
|
|
90
|
+
const groups = useQuery({
|
|
91
|
+
queryKey: ['groups', view.model, props.where, groupField?.key],
|
|
92
|
+
queryFn: () => api.aggregate(view.model, {
|
|
93
|
+
where: props.where,
|
|
94
|
+
groupBy: [groupField?.key],
|
|
95
|
+
measures: { n: 'count' },
|
|
96
|
+
}),
|
|
97
|
+
enabled: groupField !== undefined && groupField.options === undefined,
|
|
98
|
+
});
|
|
99
|
+
const groupNames = useRowNames((groups.data ?? []).map((g) => ({ [groupField?.key ?? '']: g[groupField?.key ?? ''] })), groupField === undefined ? [] : [groupField]);
|
|
100
|
+
const move = useMutation({
|
|
101
|
+
mutationFn: async ({ row, to }) => {
|
|
102
|
+
if (groupField === undefined)
|
|
103
|
+
return;
|
|
104
|
+
if (groupField.kind === 'state') {
|
|
105
|
+
const from = String(row[groupField.key]);
|
|
106
|
+
const transition = props.served.transitions.find((tr) => tr.field === groupField.key && tr.to === to.value && tr.from.includes(from));
|
|
107
|
+
if (transition === undefined)
|
|
108
|
+
throw new Error(t('views.moveRefused'));
|
|
109
|
+
await api.transition(view.model, row.id, transition.name);
|
|
110
|
+
}
|
|
111
|
+
else
|
|
112
|
+
await api.update(view.model, row.id, { [groupField.key]: to.value });
|
|
113
|
+
},
|
|
114
|
+
onSuccess: async () => {
|
|
115
|
+
setError(null);
|
|
116
|
+
await queryClient.invalidateQueries({ queryKey: ['list', view.model] });
|
|
117
|
+
},
|
|
118
|
+
onError: (e) => setError(e instanceof ApiError ? e.message : e instanceof Error ? e.message : String(e)),
|
|
119
|
+
});
|
|
120
|
+
if (view.type !== 'kanban' || groupField === undefined)
|
|
121
|
+
return (_jsx(Alert, { children: `The kanban needs the field ${view.type === 'kanban' ? view.groupBy : ''}.` }));
|
|
122
|
+
const columns = groupField.options !== undefined
|
|
123
|
+
? groupField.options.map((o) => ({ key: o.value, value: o.value, label: o.label }))
|
|
124
|
+
: (groups.data ?? []).map((g) => {
|
|
125
|
+
const value = g[groupField.key] ?? null;
|
|
126
|
+
const label = value === null
|
|
127
|
+
? t('views.none')
|
|
128
|
+
: groupField.kind === 'many2one'
|
|
129
|
+
? (groupNames.get(groupField.target ?? '')?.get(Number(value)) ??
|
|
130
|
+
`#${String(value)}`)
|
|
131
|
+
: String(value);
|
|
132
|
+
return { key: JSON.stringify(value), value, label };
|
|
133
|
+
});
|
|
134
|
+
const keys = [
|
|
135
|
+
...new Set([
|
|
136
|
+
'id',
|
|
137
|
+
'displayName',
|
|
138
|
+
view.groupBy,
|
|
139
|
+
view.card.title,
|
|
140
|
+
...(view.card.subtitle === undefined ? [] : [view.card.subtitle]),
|
|
141
|
+
...(view.card.footer ?? []).map((f) => f.field),
|
|
142
|
+
...(view.card.badges ?? []).map((f) => f.field),
|
|
143
|
+
]),
|
|
144
|
+
].filter((k) => k === 'id' || fields[k] !== undefined);
|
|
145
|
+
const onDragEnd = (event) => {
|
|
146
|
+
const row = event.active.data.current?.['row'];
|
|
147
|
+
const to = event.over?.data.current?.['column'];
|
|
148
|
+
if (row === undefined ||
|
|
149
|
+
to === undefined ||
|
|
150
|
+
JSON.stringify(row[groupField.key] ?? null) === JSON.stringify(to.value))
|
|
151
|
+
return;
|
|
152
|
+
move.mutate({ row, to });
|
|
153
|
+
};
|
|
154
|
+
return (_jsxs("div", { className: "grid gap-3", children: [error === null ? null : _jsx(Alert, { children: error }), _jsx(DndContext, { sensors: sensors, onDragEnd: onDragEnd, children: _jsx("div", { className: "flex gap-3 overflow-x-auto pb-2", children: columns.map((column) => (_jsx(ColumnView, { column: column, props: props, keys: keys, groupField: groupField }, column.key))) }) })] }));
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=KanbanView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KanbanView.js","sourceRoot":"","sources":["../../src/views/KanbanView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/views/ListView.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,OAAO,CAAC;AAMrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA6ZhD,iCAAiC;AACjC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAyDvD"}
|