@cosmicdrift/kumiko-renderer-web 0.146.3 → 0.147.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/package.json +4 -4
- package/src/__tests__/dashboard-screen.test.tsx +4 -0
- package/src/__tests__/form-action-bar.test.tsx +9 -0
- package/src/__tests__/projection-list-actions.test.tsx +42 -0
- package/src/__tests__/use-mutation.test.tsx +86 -0
- package/src/app/dashboard-body.tsx +22 -26
- package/src/index.ts +4 -0
- package/src/layout/nav-tree.tsx +10 -10
- package/src/primitives/index.tsx +24 -4
- package/src/widgets/__tests__/ai-text-field.test.tsx +267 -0
- package/src/widgets/__tests__/form-kit.test.tsx +77 -0
- package/src/widgets/__tests__/result-panel.test.tsx +72 -0
- package/src/widgets/__tests__/widgets.test.tsx +14 -0
- package/src/widgets/ai-text-field.tsx +370 -0
- package/src/widgets/detail-list.tsx +4 -1
- package/src/widgets/form-fields.tsx +15 -12
- package/src/widgets/index.ts +6 -0
- package/src/widgets/mode-switch.tsx +2 -1
- package/src/widgets/use-draft.ts +8 -3
package/src/widgets/use-draft.ts
CHANGED
|
@@ -3,9 +3,13 @@ import { useCallback, useState } from "react";
|
|
|
3
3
|
/** Formular-State für Rechner-Screens: ein Draft-Objekt + `patch` für
|
|
4
4
|
* Teil-Updates + `field(name)` das die `{ id, name, value, onChange }`-Props
|
|
5
5
|
* fertig für die Feld-Widgets (NumberField/MoneyField/PercentField) liefert.
|
|
6
|
-
* Ersetzt das pro Screen wiederholte Draft-Interface + patch-Helper.
|
|
6
|
+
* Ersetzt das pro Screen wiederholte Draft-Interface + patch-Helper.
|
|
7
|
+
* `idPrefix` verhindert doppelte DOM-`id`s, wenn mehrere `useDraft`-Formulare
|
|
8
|
+
* mit gleichnamigen Feldern auf derselben Seite gemountet werden — `name`
|
|
9
|
+
* bleibt der reine Key fürs Form-Payload. */
|
|
7
10
|
export function useDraft<T extends object>(
|
|
8
11
|
defaults: T,
|
|
12
|
+
options?: { readonly idPrefix?: string },
|
|
9
13
|
): {
|
|
10
14
|
readonly draft: T;
|
|
11
15
|
readonly patch: (changes: Partial<T>) => void;
|
|
@@ -19,17 +23,18 @@ export function useDraft<T extends object>(
|
|
|
19
23
|
readonly onChange: (v: T[K]) => void;
|
|
20
24
|
};
|
|
21
25
|
} {
|
|
26
|
+
const idPrefix = options?.idPrefix;
|
|
22
27
|
const [draft, setDraft] = useState<T>(defaults);
|
|
23
28
|
const patch = useCallback((changes: Partial<T>) => setDraft((d) => ({ ...d, ...changes })), []);
|
|
24
29
|
const reset = useCallback(() => setDraft(defaults), [defaults]);
|
|
25
30
|
const field = useCallback(
|
|
26
31
|
<K extends keyof T>(name: K) => ({
|
|
27
|
-
id: String(name),
|
|
32
|
+
id: idPrefix !== undefined ? `${idPrefix}-${String(name)}` : String(name),
|
|
28
33
|
name: String(name),
|
|
29
34
|
value: draft[name],
|
|
30
35
|
onChange: (v: T[K]) => setDraft((d) => ({ ...d, [name]: v })),
|
|
31
36
|
}),
|
|
32
|
-
[draft],
|
|
37
|
+
[draft, idPrefix],
|
|
33
38
|
);
|
|
34
39
|
return { draft, patch, reset, field };
|
|
35
40
|
}
|