cdp-material-sdk 0.0.5 → 0.0.9
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/dist/hooks/useFieldRegistry.d.ts +36 -0
- package/dist/host-react.d.ts +2 -0
- package/dist/host-react.js +7 -6
- package/dist/index.js +14 -13
- package/dist/useFieldRegistry-CwjlA-ja.js +123 -0
- package/docs/component-development/README.md +10 -0
- package/docs/component-development/recipes//344/275/277/347/224/250Adapter/351/200/202/351/205/215/347/273/204/344/273/266API.md +121 -23
- package/docs/component-development/recipes//345/243/260/346/230/216props.md +313 -0
- package/docs/component-development/recipes//345/243/260/346/230/216/346/225/260/346/215/256/345/255/227/346/256/265/347/273/204/344/273/266.md +115 -12
- package/docs/component-development/recipes//345/243/260/346/230/216/346/225/260/346/215/256/345/256/271/345/231/250/347/273/204/344/273/266.md +10 -4
- package/docs/component-development/recipes//351/205/215/347/275/256Loading/347/255/226/347/225/245.md +96 -0
- package/docs/component-development/reference/Manifest/345/255/227/346/256/265/345/217/202/350/200/203.md +2 -1
- package/docs/component-development/reference/SDK/345/257/274/345/205/245/350/276/271/347/225/214.md +5 -4
- package/docs/component-development/reference/Traits/350/203/275/345/212/233/346/250/241/345/236/213.md +43 -6
- package/docs/component-development/reference//345/274/225/346/223/216/345/237/272/347/241/200/350/203/275/345/212/233/346/250/241/345/236/213.md +11 -9
- package/package.json +1 -1
- package/dist/DataScope-B7ffH5qN.js +0 -106
|
@@ -37,15 +37,52 @@ Traits 之间不互斥,一个组件可以同时声明多个 trait。例如 For
|
|
|
37
37
|
|
|
38
38
|
- 声明 `COMPONENT_TRAIT.DATA_FIELD`。
|
|
39
39
|
- 声明 `meta.valueSchema`。
|
|
40
|
-
-
|
|
41
|
-
-
|
|
40
|
+
- 组件接收并渲染 `value`,值变化时调用 `onChange(nextValue)`。
|
|
41
|
+
- 如组件支持只读/必填/标签语义,分别接收 `readOnly` / `required` / `label`;置于数据容器内时支持 `name`。
|
|
42
|
+
|
|
43
|
+
下列 props / actions / state / events 由引擎在声明 `DATA_FIELD` 后**自动注入并合并到 manifest**,作者一般**不需要**在自己的 manifest 中重复声明——重复声明会**覆盖**引擎注入的版本(包括 `valueSchema` 自动特化),破坏对外行为一致性。仅当组件**确有特化需求**(例如定制 `setValue.params` 取值规则)时,才建议显式声明覆盖:
|
|
44
|
+
|
|
45
|
+
#### 自动注入的 props
|
|
46
|
+
|
|
47
|
+
| Prop | 类型 | 说明 |
|
|
48
|
+
|------|------|------|
|
|
49
|
+
| `value` | 由 `meta.valueSchema` 决定 | 字段当前值 |
|
|
50
|
+
| `readOnly` | `boolean` | 是否只读 |
|
|
51
|
+
| `required` | `boolean` | 是否必填 |
|
|
52
|
+
| `name` | `string` | 字段名(容器内组织值用) |
|
|
53
|
+
| `label` | `string` | 显示标签 |
|
|
54
|
+
| `labelStrategy` | 标签策略对象 | 字段级标签策略局部覆盖;未设置时向上继承(FieldLayout / Form / Page / 默认) |
|
|
55
|
+
|
|
56
|
+
#### 自动注入的 actions
|
|
57
|
+
|
|
58
|
+
| Action | 说明 |
|
|
59
|
+
|--------|------|
|
|
60
|
+
| `getValue` | 获取当前值;返回类型由 `valueSchema` 特化 |
|
|
61
|
+
| `setValue({ value, triggerEvent? })` | 设置值;返回 `{ newValue, oldValue }`;`triggerEvent` 默认 `true` |
|
|
62
|
+
| `getReadOnly` / `setReadOnly({ readOnly })` / `toggleReadOnly` | 只读状态读写与切换 |
|
|
63
|
+
| `getRequired` / `setRequired({ required })` / `toggleRequired` | 必填状态读写与切换 |
|
|
64
|
+
| `triggerValueChange({ newValue?, oldValue? })` | 手动触发 `valueChange` 事件,用于 `updateFields` / 直写 Store 等绕过 `setValue` 的场景 |
|
|
65
|
+
|
|
66
|
+
#### 自动注入的 state
|
|
67
|
+
|
|
68
|
+
| State | Schema | 说明 |
|
|
69
|
+
|-------|--------|------|
|
|
70
|
+
| `value` | `meta.valueSchema` | 当前值;schema 由 `valueSchema` 自动透传 |
|
|
71
|
+
| `readOnly` | `boolean` | 当前只读状态 |
|
|
72
|
+
| `required` | `boolean` | 当前必填状态 |
|
|
73
|
+
|
|
74
|
+
#### 自动注入的 events
|
|
75
|
+
|
|
76
|
+
| Event | 说明 |
|
|
77
|
+
|-------|------|
|
|
78
|
+
| `valueChange` | 值变更事件;`onChange(nextValue)` 或 `setValue` 默认触发;可被事件编排消费 |
|
|
42
79
|
|
|
43
80
|
### 宿主可据此做什么
|
|
44
81
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
82
|
+
- 注入和回写字段值,在数据容器内按 `name` 组织值。
|
|
83
|
+
- 让表达式、设计器和 AI 工具识别 value 类型与字段语义。
|
|
84
|
+
- 基于 `valueSchema` 自动特化 `getValue` / `setValue` / `state.value` 的类型描述。
|
|
85
|
+
- 统一管理只读/必填状态,支持事件编排基于 `readOnly` / `required` / `value` 状态联动。
|
|
49
86
|
|
|
50
87
|
---
|
|
51
88
|
|
|
@@ -9,7 +9,7 @@ related:
|
|
|
9
9
|
---
|
|
10
10
|
# 引擎基础能力模型
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
引擎基础能力是宿主自动赋予所有组件的通用运行时能力。组件作者一般不需要在 manifest 中重复声明这些能力——它们由宿主统一注入,重复声明会**覆盖**宿主版本,破坏对外行为的一致性。仅当组件**确有特化需求**时,才建议显式声明覆盖。
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -17,24 +17,26 @@ related:
|
|
|
17
17
|
|
|
18
18
|
| 能力 | 外部含义 | 组件作者需要做什么 |
|
|
19
19
|
|------|----------|-------------------|
|
|
20
|
-
| `hidden` prop | 宿主告诉组件当前是否隐藏 |
|
|
21
|
-
| `getHidden` action | 外部流程读取组件显隐状态 |
|
|
22
|
-
| `setHidden` action | 外部流程设置组件显隐状态 |
|
|
23
|
-
| `toggleHidden` action | 外部流程切换组件显隐状态 |
|
|
24
|
-
| `hidden` state | 外部表达式、编排或 AI 读取当前显隐状态 |
|
|
25
|
-
| `mount` / `unmount` events | 基础生命周期通知 |
|
|
20
|
+
| `hidden` prop | 宿主告诉组件当前是否隐藏 | 可按需读取;不建议改写为其他业务语义 |
|
|
21
|
+
| `getHidden` action | 外部流程读取组件显隐状态 | 默认不声明;如需特化(例如不同的 returns 描述)再显式覆盖 |
|
|
22
|
+
| `setHidden` action | 外部流程设置组件显隐状态 | 默认不声明;如需特化再显式覆盖 |
|
|
23
|
+
| `toggleHidden` action | 外部流程切换组件显隐状态 | 默认不声明;如需特化再显式覆盖 |
|
|
24
|
+
| `hidden` state | 外部表达式、编排或 AI 读取当前显隐状态 | 默认不声明;如需特化 schema 再显式覆盖 |
|
|
25
|
+
| `mount` / `unmount` events | 基础生命周期通知 | 默认不声明;普通组件无需重复 |
|
|
26
|
+
|
|
27
|
+
> 显式声明同名字段会覆盖宿主默认版本,请确认特化是必要的,并在 review 时让上游能识别这是有意覆盖。
|
|
26
28
|
|
|
27
29
|
---
|
|
28
30
|
|
|
29
31
|
## 与组件 manifest 的关系
|
|
30
32
|
|
|
31
|
-
基础能力由宿主在运行时补充。第三方组件 manifest
|
|
33
|
+
基础能力由宿主在运行时补充。第三方组件 manifest 通常只需声明组件自己的业务能力,例如:
|
|
32
34
|
|
|
33
35
|
- 业务 actions,例如 `refresh`、`clear`、`focus`。
|
|
34
36
|
- 业务 state,例如 `selectedRows`、`keyword`。
|
|
35
37
|
- 业务 events,例如 `valueChange`、`itemClick` 或自定义事件。
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
一般不需要为了获得显隐控制而在 manifest 中手写 `getHidden`、`setHidden`、`toggleHidden` 或 `hidden` state;只在确有特化需求时再覆盖。
|
|
38
40
|
|
|
39
41
|
---
|
|
40
42
|
|
package/package.json
CHANGED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { createContext as D, useContext as f, useCallback as l, useRef as j, useMemo as E } from "react";
|
|
2
|
-
import { useStore as O } from "zustand";
|
|
3
|
-
import { cloneDeep as i, has as g, set as M } from "lodash-es";
|
|
4
|
-
import { jsx as k } from "react/jsx-runtime";
|
|
5
|
-
const b = D(null), d = D(null), x = "value", m = (t) => t !== null && typeof t == "object" && !Array.isArray(t), p = (t) => Array.isArray(t) && t.every((n) => n === void 0 || m(n)), C = (t, n, e = [x]) => {
|
|
6
|
-
if (!g(t, e)) {
|
|
7
|
-
M(t, e, i(n));
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
if (p(n)) {
|
|
11
|
-
n.forEach((r, o) => {
|
|
12
|
-
C(t, r, [...e, o]);
|
|
13
|
-
});
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
if (m(n))
|
|
17
|
-
for (const [r, o] of Object.entries(n))
|
|
18
|
-
C(
|
|
19
|
-
t,
|
|
20
|
-
o,
|
|
21
|
-
[...e, r]
|
|
22
|
-
);
|
|
23
|
-
}, $ = (t, n) => {
|
|
24
|
-
if (n === void 0)
|
|
25
|
-
return t;
|
|
26
|
-
if (t === void 0)
|
|
27
|
-
return i(n);
|
|
28
|
-
const e = p(n), r = p(t), o = Array.isArray(n), s = Array.isArray(t), u = m(n), a = m(t);
|
|
29
|
-
if (o !== s || u !== a)
|
|
30
|
-
return i(n);
|
|
31
|
-
if ((o || s) && (!e || !r))
|
|
32
|
-
return i(n);
|
|
33
|
-
if (e !== r || u !== a)
|
|
34
|
-
return i(n);
|
|
35
|
-
if (!e && !u)
|
|
36
|
-
return i(n);
|
|
37
|
-
const c = { value: i(n) };
|
|
38
|
-
return C(c, t), c.value;
|
|
39
|
-
}, P = (t) => t === void 0 || t !== null && typeof t == "object", K = (t, n, e) => !t || !n || t !== n.componentId || n.hasInitializedRef.current || n.initialDefaultValueRef.current === void 0 ? !1 : P(e), I = (t, n, e) => K(t, n, e) ? $(e, n?.initialDefaultValueRef.current) : e;
|
|
40
|
-
function U(t) {
|
|
41
|
-
const n = f(b), e = f(d), r = n?.store ?? null, o = t ?? e?.componentId, s = l(() => {
|
|
42
|
-
const c = r && o ? r.getState().components[o]?.value : void 0;
|
|
43
|
-
return I(o, e, c);
|
|
44
|
-
}, [o, e, r]), u = l((c) => {
|
|
45
|
-
!r || !o || r.getState().setComponentData(o, c);
|
|
46
|
-
}, [o, r]), a = l(() => {
|
|
47
|
-
!r || !o || r.getState().resetComponentData(o);
|
|
48
|
-
}, [o, r]);
|
|
49
|
-
return { getContainerData: s, setContainerData: u, resetContainerData: a };
|
|
50
|
-
}
|
|
51
|
-
function T(t) {
|
|
52
|
-
const n = U(t), e = f(b), r = f(d), o = e?.store ?? null, s = t ?? r?.componentId;
|
|
53
|
-
return {
|
|
54
|
-
containerData: o ? I(
|
|
55
|
-
s,
|
|
56
|
-
r,
|
|
57
|
-
O(o, (a) => s ? a.components[s]?.value : void 0)
|
|
58
|
-
) : void 0,
|
|
59
|
-
...n
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
const Y = D(null), _ = "components", h = "value", w = (t, n) => `${_}.${t}.${h}.${n}`, q = ({
|
|
63
|
-
relativePath: t,
|
|
64
|
-
record: n,
|
|
65
|
-
getRecord: e,
|
|
66
|
-
index: r,
|
|
67
|
-
registerField: o,
|
|
68
|
-
unregisterField: s,
|
|
69
|
-
children: u
|
|
70
|
-
}) => {
|
|
71
|
-
const a = f(d);
|
|
72
|
-
if (!a?.componentId)
|
|
73
|
-
throw new Error(
|
|
74
|
-
"[cdp-material-sdk] DataScope 必须在数据容器组件内部使用,请确保上层提供 DataContainerRuntimeContext。"
|
|
75
|
-
);
|
|
76
|
-
const c = a.componentId, y = l(
|
|
77
|
-
(v) => {
|
|
78
|
-
const S = t ? t(v) : v;
|
|
79
|
-
return w(c, S);
|
|
80
|
-
},
|
|
81
|
-
[c, t]
|
|
82
|
-
), A = j(n);
|
|
83
|
-
A.current = n;
|
|
84
|
-
const R = E(
|
|
85
|
-
() => ({
|
|
86
|
-
resolvePath: y,
|
|
87
|
-
inScope: !0,
|
|
88
|
-
getRecord: e ?? (() => A.current),
|
|
89
|
-
index: r,
|
|
90
|
-
registerField: o,
|
|
91
|
-
unregisterField: s
|
|
92
|
-
}),
|
|
93
|
-
[y, e, r, o, s]
|
|
94
|
-
);
|
|
95
|
-
return /* @__PURE__ */ k(Y.Provider, { value: R, children: u });
|
|
96
|
-
};
|
|
97
|
-
export {
|
|
98
|
-
d as D,
|
|
99
|
-
b as P,
|
|
100
|
-
q as a,
|
|
101
|
-
Y as b,
|
|
102
|
-
U as c,
|
|
103
|
-
I as r,
|
|
104
|
-
K as s,
|
|
105
|
-
T as u
|
|
106
|
-
};
|