@keenaioc/data-view 0.0.0-poc.1 → 0.2.0-alpha.8
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 +105 -0
- package/DATA-PRIVACY.md +20 -0
- package/INTEGRATION.md +178 -0
- package/KNOWN-LIMITATIONS.md +34 -0
- package/LICENSE +21 -0
- package/README.md +67 -5
- package/dist/contracts.d.ts +33 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +83 -0
- package/dist/contracts.js.map +1 -0
- package/dist/data-view.d.ts +3 -0
- package/dist/data-view.d.ts.map +1 -0
- package/dist/data-view.js +822 -0
- package/dist/data-view.js.map +1 -0
- package/dist/engine.d.ts +34 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +307 -0
- package/dist/engine.js.map +1 -0
- package/dist/gantt-bar.d.ts +17 -0
- package/dist/gantt-bar.d.ts.map +1 -0
- package/dist/gantt-bar.js +142 -0
- package/dist/gantt-bar.js.map +1 -0
- package/dist/gantt-dependencies.d.ts +27 -0
- package/dist/gantt-dependencies.d.ts.map +1 -0
- package/dist/gantt-dependencies.js +218 -0
- package/dist/gantt-dependencies.js.map +1 -0
- package/dist/gantt-dependency-ui.d.ts +37 -0
- package/dist/gantt-dependency-ui.d.ts.map +1 -0
- package/dist/gantt-dependency-ui.js +79 -0
- package/dist/gantt-dependency-ui.js.map +1 -0
- package/dist/gantt-grid.d.ts +27 -0
- package/dist/gantt-grid.d.ts.map +1 -0
- package/dist/gantt-grid.js +72 -0
- package/dist/gantt-grid.js.map +1 -0
- package/dist/gantt-operations.d.ts +14 -0
- package/dist/gantt-operations.d.ts.map +1 -0
- package/dist/gantt-operations.js +103 -0
- package/dist/gantt-operations.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/operations.d.ts +11 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +117 -0
- package/dist/operations.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +465 -0
- package/dist/registry.js.map +1 -0
- package/dist/remote-data.d.ts +19 -0
- package/dist/remote-data.d.ts.map +1 -0
- package/dist/remote-data.js +67 -0
- package/dist/remote-data.js.map +1 -0
- package/dist/row-move.d.ts +7 -0
- package/dist/row-move.d.ts.map +1 -0
- package/dist/row-move.js +27 -0
- package/dist/row-move.js.map +1 -0
- package/dist/schedule-view.d.ts +27 -0
- package/dist/schedule-view.d.ts.map +1 -0
- package/dist/schedule-view.js +122 -0
- package/dist/schedule-view.js.map +1 -0
- package/dist/schedule.d.ts +28 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +97 -0
- package/dist/schedule.js.map +1 -0
- package/dist/style.css +986 -0
- package/dist/timeline.d.ts +25 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +58 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toolbar.d.ts +10 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +31 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/types.d.ts +472 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/use-remote-data.d.ts +18 -0
- package/dist/use-remote-data.d.ts.map +1 -0
- package/dist/use-remote-data.js +12 -0
- package/dist/use-remote-data.js.map +1 -0
- package/dist/use-row-move.d.ts +12 -0
- package/dist/use-row-move.d.ts.map +1 -0
- package/dist/use-row-move.js +151 -0
- package/dist/use-row-move.js.map +1 -0
- package/dist/v2-panels.d.ts +37 -0
- package/dist/v2-panels.d.ts.map +1 -0
- package/dist/v2-panels.js +108 -0
- package/dist/v2-panels.js.map +1 -0
- package/dist/view-state.d.ts +30 -0
- package/dist/view-state.d.ts.map +1 -0
- package/dist/view-state.js +94 -0
- package/dist/view-state.js.map +1 -0
- package/dist/view-workspace.d.ts +3 -0
- package/dist/view-workspace.d.ts.map +1 -0
- package/dist/view-workspace.js +95 -0
- package/dist/view-workspace.js.map +1 -0
- package/dist/virtual-list.d.ts +12 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +46 -0
- package/dist/virtual-list.js.map +1 -0
- package/package.json +19 -16
- package/index.d.ts +0 -2
- package/index.js +0 -5
- package/react.d.ts +0 -2
- package/react.js +0 -8
- package/style.css +0 -1
package/dist/registry.js
ADDED
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState } from "react";
|
|
3
|
+
const TEXT_OPERATORS = ["contains", "notContains", "equals", "notEquals", "isEmpty", "isNotEmpty"];
|
|
4
|
+
const NUMBER_OPERATORS = ["equals", "notEquals", "greaterThan", "greaterThanOrEqual", "lessThan", "lessThanOrEqual", "isEmpty", "isNotEmpty"];
|
|
5
|
+
const DATE_OPERATORS = ["equals", "before", "after", "isEmpty", "isNotEmpty"];
|
|
6
|
+
const OPTION_OPERATORS = ["equals", "notEquals", "containsAny", "isEmpty", "isNotEmpty"];
|
|
7
|
+
export const FILTER_OPERATOR_LABELS = {
|
|
8
|
+
contains: "包含",
|
|
9
|
+
notContains: "不包含",
|
|
10
|
+
equals: "等於",
|
|
11
|
+
notEquals: "不等於",
|
|
12
|
+
greaterThan: "大於",
|
|
13
|
+
greaterThanOrEqual: "大於或等於",
|
|
14
|
+
lessThan: "小於",
|
|
15
|
+
lessThanOrEqual: "小於或等於",
|
|
16
|
+
before: "早於",
|
|
17
|
+
after: "晚於",
|
|
18
|
+
isEmpty: "為空白",
|
|
19
|
+
isNotEmpty: "不是空白",
|
|
20
|
+
isTrue: "已打勾",
|
|
21
|
+
isFalse: "未打勾",
|
|
22
|
+
containsAny: "包含其中一個",
|
|
23
|
+
};
|
|
24
|
+
function isEmpty(value) {
|
|
25
|
+
return value === null || value === undefined || value === "" || (Array.isArray(value) && value.length === 0);
|
|
26
|
+
}
|
|
27
|
+
function textOf(value) {
|
|
28
|
+
if (isEmpty(value))
|
|
29
|
+
return "";
|
|
30
|
+
if (Array.isArray(value))
|
|
31
|
+
return value.map(textOf).join("、");
|
|
32
|
+
if (typeof value === "object") {
|
|
33
|
+
const record = value;
|
|
34
|
+
return String(record.label ?? record.name ?? record.id ?? "");
|
|
35
|
+
}
|
|
36
|
+
return String(value);
|
|
37
|
+
}
|
|
38
|
+
function compareText(left, right) {
|
|
39
|
+
return textOf(left).localeCompare(textOf(right), "zh-Hant", { numeric: true });
|
|
40
|
+
}
|
|
41
|
+
function compareNumber(left, right) {
|
|
42
|
+
const a = Number(left);
|
|
43
|
+
const b = Number(right);
|
|
44
|
+
if (!Number.isFinite(a) && !Number.isFinite(b))
|
|
45
|
+
return 0;
|
|
46
|
+
if (!Number.isFinite(a))
|
|
47
|
+
return 1;
|
|
48
|
+
if (!Number.isFinite(b))
|
|
49
|
+
return -1;
|
|
50
|
+
return a - b;
|
|
51
|
+
}
|
|
52
|
+
function compareDate(left, right) {
|
|
53
|
+
const a = Date.parse(String(left ?? ""));
|
|
54
|
+
const b = Date.parse(String(right ?? ""));
|
|
55
|
+
if (Number.isNaN(a) && Number.isNaN(b))
|
|
56
|
+
return 0;
|
|
57
|
+
if (Number.isNaN(a))
|
|
58
|
+
return 1;
|
|
59
|
+
if (Number.isNaN(b))
|
|
60
|
+
return -1;
|
|
61
|
+
return a - b;
|
|
62
|
+
}
|
|
63
|
+
function commonFilter(value, rule) {
|
|
64
|
+
const left = textOf(value).toLocaleLowerCase("zh-Hant");
|
|
65
|
+
const right = textOf(rule.value).toLocaleLowerCase("zh-Hant");
|
|
66
|
+
if (rule.operator === "isEmpty")
|
|
67
|
+
return isEmpty(value);
|
|
68
|
+
if (rule.operator === "isNotEmpty")
|
|
69
|
+
return !isEmpty(value);
|
|
70
|
+
if (rule.operator === "contains")
|
|
71
|
+
return left.includes(right);
|
|
72
|
+
if (rule.operator === "notContains")
|
|
73
|
+
return !left.includes(right);
|
|
74
|
+
if (rule.operator === "notEquals")
|
|
75
|
+
return left !== right;
|
|
76
|
+
if (rule.operator === "containsAny") {
|
|
77
|
+
const values = Array.isArray(value) ? value.map((item) => textOf(item).toLocaleLowerCase("zh-Hant")) : [left];
|
|
78
|
+
const targets = Array.isArray(rule.value) ? rule.value.map((item) => textOf(item).toLocaleLowerCase("zh-Hant")) : [right];
|
|
79
|
+
return targets.some((target) => values.includes(target));
|
|
80
|
+
}
|
|
81
|
+
return left === right;
|
|
82
|
+
}
|
|
83
|
+
/** References compare permanent IDs, never translated or duplicate display names. */
|
|
84
|
+
function referenceFilter(value, rule) {
|
|
85
|
+
if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
|
|
86
|
+
return commonFilter(value, rule);
|
|
87
|
+
const ids = (v) => [...new Set((Array.isArray(v) ? v : isEmpty(v) ? [] : [v]).map((x) => typeof x === "object" && x ? String(x.id) : String(x)))].sort();
|
|
88
|
+
const values = ids(value), targets = ids(rule.value);
|
|
89
|
+
if (rule.operator === "containsAny")
|
|
90
|
+
return targets.some((id) => values.includes(id));
|
|
91
|
+
const equal = JSON.stringify(values) === JSON.stringify(targets);
|
|
92
|
+
return rule.operator === "notEquals" ? !equal : equal;
|
|
93
|
+
}
|
|
94
|
+
function numberFilter(value, rule) {
|
|
95
|
+
if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
|
|
96
|
+
return commonFilter(value, rule);
|
|
97
|
+
if (isEmpty(value) || isEmpty(rule.value))
|
|
98
|
+
return false;
|
|
99
|
+
const left = Number(value);
|
|
100
|
+
const right = Number(rule.value);
|
|
101
|
+
if (!Number.isFinite(left) || !Number.isFinite(right))
|
|
102
|
+
return false;
|
|
103
|
+
if (rule.operator === "notEquals")
|
|
104
|
+
return left !== right;
|
|
105
|
+
if (rule.operator === "greaterThan")
|
|
106
|
+
return left > right;
|
|
107
|
+
if (rule.operator === "greaterThanOrEqual")
|
|
108
|
+
return left >= right;
|
|
109
|
+
if (rule.operator === "lessThan")
|
|
110
|
+
return left < right;
|
|
111
|
+
if (rule.operator === "lessThanOrEqual")
|
|
112
|
+
return left <= right;
|
|
113
|
+
return left === right;
|
|
114
|
+
}
|
|
115
|
+
function dateFilter(value, rule) {
|
|
116
|
+
if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
|
|
117
|
+
return commonFilter(value, rule);
|
|
118
|
+
const left = Date.parse(String(value ?? ""));
|
|
119
|
+
const right = Date.parse(String(rule.value ?? ""));
|
|
120
|
+
if (Number.isNaN(left) || Number.isNaN(right))
|
|
121
|
+
return false;
|
|
122
|
+
if (rule.operator === "before")
|
|
123
|
+
return left < right;
|
|
124
|
+
if (rule.operator === "after")
|
|
125
|
+
return left > right;
|
|
126
|
+
return new Date(left).toISOString().slice(0, 10) === new Date(right).toISOString().slice(0, 10);
|
|
127
|
+
}
|
|
128
|
+
function group(value, field) {
|
|
129
|
+
if (isEmpty(value))
|
|
130
|
+
return { key: "__empty__", label: "空白" };
|
|
131
|
+
const items = Array.isArray(value) ? value : [value];
|
|
132
|
+
const ids = items.map((v) => typeof v === "object" && v ? String(v.id ?? textOf(v)) : String(v));
|
|
133
|
+
const normalized = ids.length === 1 ? ids[0] : JSON.stringify([...new Set(ids)].sort());
|
|
134
|
+
const option = field.options?.find((item) => item.value === String(value));
|
|
135
|
+
return { key: encodeURIComponent(normalized), label: option?.label ?? textOf(Array.isArray(value) ? [...value].sort((a, b) => textOf(a).localeCompare(textOf(b), "zh-Hant")) : value) };
|
|
136
|
+
}
|
|
137
|
+
function optionFor(value, field) {
|
|
138
|
+
return field.options?.find((item) => item.value === String(value));
|
|
139
|
+
}
|
|
140
|
+
function renderOption(value, field) {
|
|
141
|
+
const option = optionFor(value, field);
|
|
142
|
+
const label = option?.label ?? textOf(value);
|
|
143
|
+
if (!label)
|
|
144
|
+
return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
|
|
145
|
+
return _jsx("span", { className: "hy-dv-tag", style: { backgroundColor: option?.color, color: option?.textColor }, children: label });
|
|
146
|
+
}
|
|
147
|
+
function renderMultiOptions(value, field) {
|
|
148
|
+
const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
|
|
149
|
+
if (values.length === 0)
|
|
150
|
+
return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
|
|
151
|
+
return _jsx("span", { className: "hy-dv-tags", children: values.map((item, index) => _jsx("span", { children: renderOption(item, field) }, `${textOf(item)}-${index}`)) });
|
|
152
|
+
}
|
|
153
|
+
function renderPeople(value, field) {
|
|
154
|
+
const values = (Array.isArray(value) ? value : isEmpty(value) ? [] : [value]).map((item) => typeof item === "object" && item ? item : { id: String(item), label: String(item) });
|
|
155
|
+
if (!values.length)
|
|
156
|
+
return null;
|
|
157
|
+
const label = values.map((v) => v.label).join("、");
|
|
158
|
+
if (field.appearance?.people === "combined") {
|
|
159
|
+
const option = values.length === 1 ? field.options?.find((o) => o.value === values[0].id) : undefined;
|
|
160
|
+
return _jsx("span", { className: "hy-dv-person", title: label, style: { backgroundColor: option?.color, color: option?.textColor }, children: label });
|
|
161
|
+
}
|
|
162
|
+
return _jsx("span", { className: "hy-dv-tags", title: label, children: values.map((person) => {
|
|
163
|
+
const option = field.options?.find((o) => o.value === person.id);
|
|
164
|
+
return _jsxs("span", { className: "hy-dv-person", style: { backgroundColor: option?.color, color: option?.textColor }, children: [field.appearance?.avatar === true && _jsx("span", { className: "hy-dv-avatar", children: person.label.slice(0, 1) }), _jsx("span", { className: "hy-dv-pill-label", children: person.label })] }, person.id);
|
|
165
|
+
}) });
|
|
166
|
+
}
|
|
167
|
+
function renderRelations(value, field) {
|
|
168
|
+
if (field.appearance?.relation === "text")
|
|
169
|
+
return textOf(value);
|
|
170
|
+
const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
|
|
171
|
+
return _jsx("span", { className: "hy-dv-tags", children: values.map((item, index) => {
|
|
172
|
+
const relation = typeof item === "object" ? item : { id: String(item), label: String(item) };
|
|
173
|
+
return _jsx("span", { className: "hy-dv-relation", children: relation.label }, `${relation.id}-${index}`);
|
|
174
|
+
}) });
|
|
175
|
+
}
|
|
176
|
+
function renderAttachments(value) {
|
|
177
|
+
const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
|
|
178
|
+
if (values.length === 0)
|
|
179
|
+
return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
|
|
180
|
+
return _jsx("span", { className: "hy-dv-attachments", children: values.map((item, index) => {
|
|
181
|
+
const file = typeof item === "object" ? item : { id: String(item), name: String(item) };
|
|
182
|
+
return file.url && /^(https?:\/\/|\/(?!\/))/.test(file.url) ? _jsx("a", { href: file.url, target: "_blank", rel: "noreferrer", children: file.name }, `${file.id}-${index}`) : _jsx("span", { children: file.name }, `${file.id}-${index}`);
|
|
183
|
+
}) });
|
|
184
|
+
}
|
|
185
|
+
function formatNumber(value, field, style) {
|
|
186
|
+
if (isEmpty(value) || !Number.isFinite(Number(value)))
|
|
187
|
+
return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
|
|
188
|
+
const number = Number(value);
|
|
189
|
+
const precision = field.precision ?? (style === "currency" ? 0 : 2);
|
|
190
|
+
if (style === "currency")
|
|
191
|
+
return new Intl.NumberFormat("zh-TW", { style: "currency", currency: field.currency ?? "TWD", maximumFractionDigits: precision }).format(number);
|
|
192
|
+
if (style === "percent")
|
|
193
|
+
return new Intl.NumberFormat("zh-TW", { style: "percent", maximumFractionDigits: precision }).format(number);
|
|
194
|
+
return new Intl.NumberFormat("zh-TW", { maximumFractionDigits: precision }).format(number);
|
|
195
|
+
}
|
|
196
|
+
function TextEditor({ value, field, onCommit, onCancel }) {
|
|
197
|
+
const [draft, setDraft] = useState(textOf(value));
|
|
198
|
+
const done = useRef(false);
|
|
199
|
+
const commit = () => { if (!done.current) {
|
|
200
|
+
done.current = true;
|
|
201
|
+
onCommit(draft);
|
|
202
|
+
} };
|
|
203
|
+
const multiline = field.type === "multiLineText";
|
|
204
|
+
function keyDown(event) {
|
|
205
|
+
if (event.key === "Escape") {
|
|
206
|
+
done.current = true;
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
onCancel();
|
|
209
|
+
}
|
|
210
|
+
if (event.key === "Enter" && (!multiline || event.metaKey || event.ctrlKey)) {
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
commit();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const common = { autoFocus: true, value: draft, placeholder: field.placeholder, onChange: (event) => setDraft(event.target.value), onKeyDown: keyDown };
|
|
216
|
+
return multiline
|
|
217
|
+
? _jsx("textarea", { className: "hy-dv-editor hy-dv-textarea", ...common, onBlur: commit })
|
|
218
|
+
: _jsx("input", { className: "hy-dv-editor", ...common, onBlur: commit });
|
|
219
|
+
}
|
|
220
|
+
function NumberEditor({ value, field, onCommit, onCancel }) {
|
|
221
|
+
const [draft, setDraft] = useState(isEmpty(value) ? "" : String(value));
|
|
222
|
+
const done = useRef(false);
|
|
223
|
+
function commit() { if (!done.current) {
|
|
224
|
+
done.current = true;
|
|
225
|
+
onCommit(draft === "" ? null : Number(draft));
|
|
226
|
+
} }
|
|
227
|
+
return _jsx("input", { autoFocus: true, className: "hy-dv-editor", type: "number", step: field.type === "percentage" ? "0.01" : "any", value: draft, onChange: (event) => setDraft(event.target.value), onBlur: commit, onKeyDown: (event) => {
|
|
228
|
+
if (event.key === "Escape") {
|
|
229
|
+
done.current = true;
|
|
230
|
+
event.preventDefault();
|
|
231
|
+
onCancel();
|
|
232
|
+
}
|
|
233
|
+
if (event.key === "Enter")
|
|
234
|
+
commit();
|
|
235
|
+
} });
|
|
236
|
+
}
|
|
237
|
+
function CheckboxEditor({ value, onCommit }) {
|
|
238
|
+
return _jsx("input", { autoFocus: true, className: "hy-dv-check", type: "checkbox", checked: Boolean(value), onChange: (event) => onCommit(event.target.checked) });
|
|
239
|
+
}
|
|
240
|
+
function DateEditor({ value, field, onCommit, onCancel }) {
|
|
241
|
+
const type = field.type === "date" ? "date" : "datetime-local";
|
|
242
|
+
const initial = isEmpty(value) ? "" : String(value).slice(0, type === "date" ? 10 : 16);
|
|
243
|
+
const [draft, setDraft] = useState(initial);
|
|
244
|
+
const done = useRef(false);
|
|
245
|
+
const commit = () => { if (!done.current) {
|
|
246
|
+
done.current = true;
|
|
247
|
+
onCommit(draft || null);
|
|
248
|
+
} };
|
|
249
|
+
return _jsx("input", { autoFocus: true, className: "hy-dv-editor", type: type, value: draft, onChange: (event) => setDraft(event.target.value), onBlur: commit, onKeyDown: (event) => {
|
|
250
|
+
if (event.key === "Escape") {
|
|
251
|
+
done.current = true;
|
|
252
|
+
event.preventDefault();
|
|
253
|
+
onCancel();
|
|
254
|
+
}
|
|
255
|
+
if (event.key === "Enter")
|
|
256
|
+
commit();
|
|
257
|
+
} });
|
|
258
|
+
}
|
|
259
|
+
function SelectEditor({ value, field, onCommit, onCancel }) {
|
|
260
|
+
return _jsxs("select", { autoFocus: true, className: "hy-dv-editor", value: isEmpty(value) ? "" : String(value), onChange: (event) => onCommit(event.target.value || null), onBlur: onCancel, children: [_jsx("option", { value: "", children: "\u7A7A\u767D" }), (field.options ?? []).map((option) => _jsx("option", { value: option.value, children: option.label }, option.value))] });
|
|
261
|
+
}
|
|
262
|
+
function MultiSelectEditor({ value, field, onCommit, onCancel }) {
|
|
263
|
+
const [draft, setDraft] = useState((Array.isArray(value) ? value : []).map(String));
|
|
264
|
+
return _jsx("select", { autoFocus: true, multiple: true, className: "hy-dv-editor hy-dv-multi-select", value: draft, onChange: (event) => setDraft([...event.target.selectedOptions].map((option) => option.value)), onBlur: () => onCommit(draft), onKeyDown: (event) => {
|
|
265
|
+
if (event.key === "Escape")
|
|
266
|
+
onCancel();
|
|
267
|
+
if (event.key === "Enter" && (event.metaKey || event.ctrlKey))
|
|
268
|
+
onCommit(draft);
|
|
269
|
+
}, children: (field.options ?? []).map((option) => _jsx("option", { value: option.value, children: option.label }, option.value)) });
|
|
270
|
+
}
|
|
271
|
+
export function ReferenceEditor({ value, field, onCommit, onCancel }) {
|
|
272
|
+
const multiple = field.type === "person" && field.multiple !== false;
|
|
273
|
+
const original = (Array.isArray(value) ? value : isEmpty(value) ? [] : [value]);
|
|
274
|
+
const [draft, setDraft] = useState(original.map((v) => v.id));
|
|
275
|
+
const [query, setQuery] = useState("");
|
|
276
|
+
function commit(ids) {
|
|
277
|
+
const values = ids.map((id) => ({ id, label: field.options?.find((o) => o.value === id)?.label ?? original.find((v) => v.id === id)?.label ?? "未命名" }));
|
|
278
|
+
onCommit(field.type === "person" ? values : values[0] ?? null);
|
|
279
|
+
}
|
|
280
|
+
const options = (field.options ?? []).filter((o) => o.label.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
|
|
281
|
+
return _jsxs("div", { className: "hy-dv-reference-editor", onKeyDown: (e) => { if (e.key === "Escape") {
|
|
282
|
+
e.stopPropagation();
|
|
283
|
+
onCancel();
|
|
284
|
+
} }, children: [_jsx("input", { autoFocus: true, "aria-label": `搜尋${field.label}`, placeholder: "\u641C\u5C0B", value: query, onChange: (e) => setQuery(e.target.value) }), _jsx("div", { role: "group", "aria-label": field.label, children: options.map((option) => _jsxs("button", { type: "button", "aria-pressed": draft.includes(option.value), onClick: () => { const ids = multiple ? draft.includes(option.value) ? draft.filter((id) => id !== option.value) : [...draft, option.value] : [option.value]; setDraft(ids); if (!multiple)
|
|
285
|
+
commit(ids); }, children: [option.label, draft.includes(option.value) ? " ✓" : ""] }, option.value)) }), _jsxs("footer", { children: [_jsx("button", { type: "button", onClick: () => commit([]), children: "\u7A7A\u767D" }), _jsx("button", { type: "button", onClick: onCancel, children: "\u53D6\u6D88" }), multiple && _jsx("button", { type: "button", onClick: () => commit(draft), children: "\u78BA\u8A8D" })] })] });
|
|
286
|
+
}
|
|
287
|
+
function AttachmentEditor({ onRequestAttachment, onCancel }) {
|
|
288
|
+
return _jsxs("label", { className: "hy-dv-upload", children: ["\u9078\u64C7\u9644\u4EF6", _jsx("input", { autoFocus: true, type: "file", multiple: true, onChange: (event) => {
|
|
289
|
+
if (event.target.files?.length)
|
|
290
|
+
onRequestAttachment?.([...event.target.files]);
|
|
291
|
+
onCancel();
|
|
292
|
+
} })] });
|
|
293
|
+
}
|
|
294
|
+
const textSpec = (type, label, Editor = TextEditor) => ({
|
|
295
|
+
type, label, editable: true, deletable: true, operators: TEXT_OPERATORS, isEmpty,
|
|
296
|
+
validate: (value) => value === null || value === undefined || typeof value === "string" ? null : "請輸入文字",
|
|
297
|
+
compare: compareText, filter: commonFilter, group,
|
|
298
|
+
render: (value) => isEmpty(value) ? _jsx("span", { className: "hy-dv-empty", children: "\u2014" }) : _jsx("span", { className: type === "multiLineText" ? "hy-dv-prewrap" : undefined, children: textOf(value) }),
|
|
299
|
+
Editor,
|
|
300
|
+
});
|
|
301
|
+
const numberSpec = (type, label, style) => ({
|
|
302
|
+
type, label, editable: true, deletable: true, operators: NUMBER_OPERATORS, isEmpty,
|
|
303
|
+
validate: (value) => isEmpty(value) || (typeof value === "number" && Number.isFinite(value)) ? null : "請輸入有效數字",
|
|
304
|
+
compare: compareNumber, filter: numberFilter, group,
|
|
305
|
+
render: (value, field) => formatNumber(value, field, style), Editor: NumberEditor,
|
|
306
|
+
});
|
|
307
|
+
const dateSpec = (type, label, editable = true) => ({
|
|
308
|
+
type, label, editable, deletable: editable, operators: DATE_OPERATORS, isEmpty,
|
|
309
|
+
validate: (value) => isEmpty(value) || validDateValue(value, type === "date") ? null : "請輸入有效日期",
|
|
310
|
+
compare: compareDate, filter: dateFilter, group,
|
|
311
|
+
render: (value) => isEmpty(value) ? _jsx("span", { className: "hy-dv-empty", children: "\u2014" }) : !validDateValue(value, type === "date") ? _jsx("span", { className: "hy-dv-no-access", children: "\u65E5\u671F\u683C\u5F0F\u932F\u8AA4" }) : new Intl.DateTimeFormat("zh-TW", type === "date" ? { year: "numeric", month: "2-digit", day: "2-digit", timeZone: "UTC" } : { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }).format(new Date(String(value))),
|
|
312
|
+
Editor: editable ? DateEditor : undefined,
|
|
313
|
+
});
|
|
314
|
+
export const FIELD_TYPE_REGISTRY = {
|
|
315
|
+
singleLineText: textSpec("singleLineText", "單行文字"),
|
|
316
|
+
multiLineText: textSpec("multiLineText", "多行文字"),
|
|
317
|
+
number: numberSpec("number", "數字"),
|
|
318
|
+
currency: numberSpec("currency", "金額", "currency"),
|
|
319
|
+
percentage: numberSpec("percentage", "百分比", "percent"),
|
|
320
|
+
checkbox: {
|
|
321
|
+
type: "checkbox", label: "打勾框", editable: true, deletable: true, operators: ["isTrue", "isFalse"], isEmpty: () => false,
|
|
322
|
+
validate: (value) => typeof value === "boolean" ? null : "請使用打勾或取消",
|
|
323
|
+
compare: (left, right) => Number(Boolean(left)) - Number(Boolean(right)),
|
|
324
|
+
filter: (value, rule) => rule.operator === "isTrue" ? Boolean(value) : !Boolean(value),
|
|
325
|
+
group: (value) => ({ key: value ? "checked" : "unchecked", label: value ? "已打勾" : "未打勾" }),
|
|
326
|
+
render: (value) => _jsx("span", { "aria-label": value ? "已打勾" : "未打勾", className: `hy-dv-checkbox ${value ? "is-checked" : ""}`, children: value ? "✓" : "" }),
|
|
327
|
+
toggleValue: (value) => !Boolean(value),
|
|
328
|
+
Editor: CheckboxEditor,
|
|
329
|
+
},
|
|
330
|
+
date: dateSpec("date", "日期"),
|
|
331
|
+
dateTime: dateSpec("dateTime", "日期+時間"),
|
|
332
|
+
singleSelect: {
|
|
333
|
+
type: "singleSelect", label: "單選項", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
|
|
334
|
+
validate: (value, field) => isEmpty(value) || field.options?.some((option) => option.value === String(value)) ? null : "選項不存在",
|
|
335
|
+
compare: (left, right, field) => {
|
|
336
|
+
const order = field.options?.map((option) => option.value) ?? [];
|
|
337
|
+
const a = order.indexOf(String(left));
|
|
338
|
+
const b = order.indexOf(String(right));
|
|
339
|
+
return a >= 0 && b >= 0 ? a - b : compareText(left, right);
|
|
340
|
+
},
|
|
341
|
+
filter: commonFilter, group, render: renderOption, Editor: SelectEditor,
|
|
342
|
+
},
|
|
343
|
+
multiSelect: {
|
|
344
|
+
type: "multiSelect", label: "多選項", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
|
|
345
|
+
validate: (value, field) => isEmpty(value) || (Array.isArray(value) && value.every((v) => typeof v === "string" && field.options?.some((o) => o.value === v))) ? null : "多選值包含不存在的選項",
|
|
346
|
+
compare: compareText, filter: commonFilter, group, render: renderMultiOptions, Editor: MultiSelectEditor,
|
|
347
|
+
},
|
|
348
|
+
person: {
|
|
349
|
+
type: "person", label: "人員", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
|
|
350
|
+
validate: (value, field) => isEmpty(value) || (Array.isArray(value) ? value : [value]).every((v) => validReference(v, field)) ? null : "人員格式或 ID 不正確",
|
|
351
|
+
compare: compareText, filter: referenceFilter, group, render: renderPeople, Editor: ReferenceEditor,
|
|
352
|
+
},
|
|
353
|
+
relation: {
|
|
354
|
+
type: "relation", label: "關聯資料", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
|
|
355
|
+
validate: (value, field) => isEmpty(value) || validReference(value, field) ? null : "關聯資料格式或 ID 不正確",
|
|
356
|
+
compare: compareText, filter: referenceFilter, group, render: renderRelations, Editor: ReferenceEditor,
|
|
357
|
+
},
|
|
358
|
+
attachment: {
|
|
359
|
+
type: "attachment", label: "附件", editable: true, deletable: true, operators: ["isEmpty", "isNotEmpty"], isEmpty,
|
|
360
|
+
validate: (value) => isEmpty(value) || Array.isArray(value) ? null : "附件格式不正確",
|
|
361
|
+
compare: compareText, filter: commonFilter, group, render: renderAttachments, Editor: AttachmentEditor,
|
|
362
|
+
},
|
|
363
|
+
createdAt: dateSpec("createdAt", "建立時間", false),
|
|
364
|
+
updatedAt: dateSpec("updatedAt", "最後更新時間", false),
|
|
365
|
+
createdBy: { ...textSpec("createdBy", "建立者"), editable: false, deletable: false, Editor: undefined, filter: referenceFilter, render: renderPeople },
|
|
366
|
+
updatedBy: { ...textSpec("updatedBy", "最後修改者"), editable: false, deletable: false, Editor: undefined, filter: referenceFilter, render: renderPeople },
|
|
367
|
+
autoNumber: { ...numberSpec("autoNumber", "自動編號"), editable: false, deletable: false, Editor: undefined },
|
|
368
|
+
systemReadOnly: { ...textSpec("systemReadOnly", "唯讀系統欄位"), editable: false, deletable: false, Editor: undefined },
|
|
369
|
+
};
|
|
370
|
+
function validReference(value, field) {
|
|
371
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
372
|
+
return false;
|
|
373
|
+
const record = value;
|
|
374
|
+
return typeof record.id === "string" && record.id.length > 0 && typeof record.label === "string" &&
|
|
375
|
+
(!field.options || field.options.some((o) => o.value === record.id));
|
|
376
|
+
}
|
|
377
|
+
function validDateValue(value, dateOnly) {
|
|
378
|
+
if (typeof value !== "string" || !(dateOnly ? /^\d{4}-\d{2}-\d{2}$/ : /^\d{4}-\d{2}-\d{2}T([01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d{1,3})?)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)?$/).test(value))
|
|
379
|
+
return false;
|
|
380
|
+
const day = value.slice(0, 10);
|
|
381
|
+
const date = Date.parse(`${day}T00:00:00Z`);
|
|
382
|
+
return Number.isFinite(date) && new Date(date).toISOString().slice(0, 10) === day && Number.isFinite(Date.parse(value));
|
|
383
|
+
}
|
|
384
|
+
export function getFieldTypeDefinition(type) {
|
|
385
|
+
return FIELD_TYPE_REGISTRY[type];
|
|
386
|
+
}
|
|
387
|
+
export function renderFieldValue(value, field, row) {
|
|
388
|
+
if (field.internal || field.canRead?.({ row, field }) === false)
|
|
389
|
+
return null;
|
|
390
|
+
if (field.render)
|
|
391
|
+
return field.render(value, row);
|
|
392
|
+
if (isEmpty(value) && field.type !== "checkbox" && field.appearance?.empty !== "dash")
|
|
393
|
+
return null;
|
|
394
|
+
if (field.appearance?.systemValue || ["createdBy", "updatedBy", "systemReadOnly"].includes(field.type))
|
|
395
|
+
return _jsx("span", { className: "hy-dv-system-value", title: textOf(value), children: textOf(value) });
|
|
396
|
+
return getFieldTypeDefinition(field.type).render(value, field);
|
|
397
|
+
}
|
|
398
|
+
/** The registry owns clipboard conversion too, so every view uses the same types. */
|
|
399
|
+
export function formatClipboardValue(value, field) {
|
|
400
|
+
if (isEmpty(value))
|
|
401
|
+
return "";
|
|
402
|
+
if (["multiSelect", "person", "relation", "attachment"].includes(field.type))
|
|
403
|
+
return JSON.stringify(value);
|
|
404
|
+
return String(value);
|
|
405
|
+
}
|
|
406
|
+
export function parseClipboardValue(text, field) {
|
|
407
|
+
const value = text.trim();
|
|
408
|
+
if (field.type === "attachment")
|
|
409
|
+
throw new Error("附件請使用上傳介面,不能透過貼上修改");
|
|
410
|
+
if (["number", "currency", "percentage"].includes(field.type)) {
|
|
411
|
+
if (!value)
|
|
412
|
+
return null;
|
|
413
|
+
const percent = field.type === "percentage" && value.endsWith("%");
|
|
414
|
+
const number = Number(percent ? value.slice(0, -1) : value);
|
|
415
|
+
if (!Number.isFinite(number))
|
|
416
|
+
throw new Error(`${field.label}需要有效數字`);
|
|
417
|
+
return percent ? number / 100 : number;
|
|
418
|
+
}
|
|
419
|
+
if (field.type === "checkbox") {
|
|
420
|
+
if (["true", "1", "是", "已打勾"].includes(value.toLowerCase()))
|
|
421
|
+
return true;
|
|
422
|
+
if (["", "false", "0", "否", "未打勾"].includes(value.toLowerCase()))
|
|
423
|
+
return false;
|
|
424
|
+
throw new Error(`${field.label}請填 true 或 false`);
|
|
425
|
+
}
|
|
426
|
+
if (["person", "relation", "multiSelect"].includes(field.type)) {
|
|
427
|
+
if (!value)
|
|
428
|
+
return field.type === "relation" ? null : [];
|
|
429
|
+
if (value.startsWith("[") || value.startsWith("{"))
|
|
430
|
+
return JSON.parse(value);
|
|
431
|
+
const options = value.split(/[、,]/).map((label) => {
|
|
432
|
+
const option = field.options?.find((o) => o.value === label.trim() || o.label === label.trim());
|
|
433
|
+
if (!option)
|
|
434
|
+
throw new Error(`${field.label}的選項不存在:${label}`);
|
|
435
|
+
return option;
|
|
436
|
+
});
|
|
437
|
+
if (field.type === "multiSelect")
|
|
438
|
+
return options.map((o) => o.value);
|
|
439
|
+
if (field.type === "relation") {
|
|
440
|
+
if (options.length !== 1)
|
|
441
|
+
throw new Error("關聯資料請使用單一值");
|
|
442
|
+
return { id: options[0].value, label: options[0].label };
|
|
443
|
+
}
|
|
444
|
+
return options.map((o) => ({ id: o.value, label: o.label }));
|
|
445
|
+
}
|
|
446
|
+
if (field.type === "singleSelect")
|
|
447
|
+
return value ? field.options?.find((o) => o.value === value || o.label === value)?.value ?? value : null;
|
|
448
|
+
if (field.type === "date" || field.type === "dateTime")
|
|
449
|
+
return value || null;
|
|
450
|
+
return text;
|
|
451
|
+
}
|
|
452
|
+
export function formatReadableValue(value, field, row) {
|
|
453
|
+
if (field.internal || field.renderAction || field.canRead?.({ row, field }) === false)
|
|
454
|
+
return "";
|
|
455
|
+
if (field.formatText)
|
|
456
|
+
return field.formatText(value, row);
|
|
457
|
+
if (field.type === "checkbox")
|
|
458
|
+
return value ? "已打勾" : "未打勾";
|
|
459
|
+
const items = Array.isArray(value) ? value : [value];
|
|
460
|
+
return items.map((v) => field.options?.find((o) => o.value === String(typeof v === "object" && v ? v.id : v))?.label ?? textOf(v)).join("、");
|
|
461
|
+
}
|
|
462
|
+
export function formatReadableRow(row, fields) {
|
|
463
|
+
return fields.filter((f) => !f.internal && !f.renderAction && f.canRead?.({ row, field: f }) !== false).map((f) => `${f.label}:${formatReadableValue(f.getValue ? f.getValue(row) : row[f.id], f, row)}`).join("\n");
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DataSource, DataViewQuery } from "./types.js";
|
|
2
|
+
export type RemoteSnapshot<Row> = {
|
|
3
|
+
queryKey: string;
|
|
4
|
+
rows: Row[];
|
|
5
|
+
total?: number;
|
|
6
|
+
complete: boolean;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
error: string | null;
|
|
9
|
+
groupCounts?: Record<string, number>;
|
|
10
|
+
};
|
|
11
|
+
/** Only the host's data source talks to its backend. No database or transport dependency. */
|
|
12
|
+
export declare function createRemoteController<Row>(source: DataSource<Row>, getRowId: (row: Row) => string, onChange: (state: RemoteSnapshot<Row>) => void): {
|
|
13
|
+
setQuery(next: DataViewQuery): void;
|
|
14
|
+
loadMore: () => Promise<void>;
|
|
15
|
+
retry(): void;
|
|
16
|
+
dispose(): void;
|
|
17
|
+
readonly state: RemoteSnapshot<Row>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=remote-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-data.d.ts","sourceRoot":"","sources":["../src/remote-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAoB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,cAAc,CAAC,GAAG,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AACrL,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI;mBA2BhI,aAAa;;;;;EAW/B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { dataViewQueryKey } from "./contracts.js";
|
|
2
|
+
/** Only the host's data source talks to its backend. No database or transport dependency. */
|
|
3
|
+
export function createRemoteController(source, getRowId, onChange) {
|
|
4
|
+
let generation = 0, abort = null;
|
|
5
|
+
let query = null, cursor, snapshot;
|
|
6
|
+
let state = { queryKey: "", rows: [], complete: false, loading: false, error: null };
|
|
7
|
+
let cursors = new Set();
|
|
8
|
+
const publish = (patch) => { state = { ...state, ...patch }; onChange(state); };
|
|
9
|
+
async function load() {
|
|
10
|
+
if (!query || state.loading || state.complete)
|
|
11
|
+
return;
|
|
12
|
+
const n = generation;
|
|
13
|
+
abort = new AbortController();
|
|
14
|
+
publish({ loading: true, error: null });
|
|
15
|
+
try {
|
|
16
|
+
const result = await source.query({ query, cursor, snapshot, signal: abort.signal });
|
|
17
|
+
if (n !== generation)
|
|
18
|
+
return;
|
|
19
|
+
if (!Number.isSafeInteger(result.total) || result.total < 0 || !result.snapshot || (snapshot && snapshot !== result.snapshot))
|
|
20
|
+
throw new Error("查詢結果版本或總數無效,請重新查詢");
|
|
21
|
+
if (state.total !== undefined && result.total !== state.total)
|
|
22
|
+
throw new Error("載入期間資料總數改變,請重新查詢");
|
|
23
|
+
if (result.nextCursor && (cursors.has(result.nextCursor) || !result.rows.length))
|
|
24
|
+
throw new Error("資料來源未提供下一段有效結果");
|
|
25
|
+
const ids = new Set(state.rows.map(getRowId));
|
|
26
|
+
for (const row of result.rows) {
|
|
27
|
+
const id = getRowId(row);
|
|
28
|
+
if (!id || ids.has(id))
|
|
29
|
+
throw new Error("分批結果含重複或無效資料 ID,請重新查詢");
|
|
30
|
+
ids.add(id);
|
|
31
|
+
}
|
|
32
|
+
const rows = [...state.rows, ...result.rows];
|
|
33
|
+
if (rows.length > result.total || (!result.nextCursor && rows.length !== result.total))
|
|
34
|
+
throw new Error("資料尚未完整,請重新查詢");
|
|
35
|
+
cursor = result.nextCursor ?? undefined;
|
|
36
|
+
snapshot = result.snapshot;
|
|
37
|
+
if (cursor)
|
|
38
|
+
cursors.add(cursor);
|
|
39
|
+
publish({ rows, total: result.total, complete: !cursor, loading: false, groupCounts: result.groupCounts ?? state.groupCounts });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (n === generation)
|
|
43
|
+
publish({ loading: false, error: error instanceof Error ? error.message : "查詢失敗", complete: false });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
setQuery(next) {
|
|
48
|
+
const key = dataViewQueryKey(next);
|
|
49
|
+
if (query && key === state.queryKey)
|
|
50
|
+
return;
|
|
51
|
+
generation++;
|
|
52
|
+
abort?.abort();
|
|
53
|
+
query = next;
|
|
54
|
+
cursor = undefined;
|
|
55
|
+
snapshot = undefined;
|
|
56
|
+
cursors = new Set();
|
|
57
|
+
publish({ queryKey: key, rows: [], total: undefined, groupCounts: undefined, complete: false, loading: false, error: null });
|
|
58
|
+
void load();
|
|
59
|
+
},
|
|
60
|
+
loadMore: load,
|
|
61
|
+
retry() { const current = query; query = null; if (current)
|
|
62
|
+
this.setQuery(current); },
|
|
63
|
+
dispose() { generation++; abort?.abort(); },
|
|
64
|
+
get state() { return state; },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=remote-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../src/remote-data.ts"],"names":[],"mappings":"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"}
|