@skopon-cool/form-sdk 0.1.1 → 0.1.4
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 +49 -11
- package/dist/adapter/a2uiAdapter.d.ts +0 -1
- package/dist/adapter/a2uiAdapter.d.ts.map +1 -1
- package/dist/adapter/formFileAccept.d.ts.map +1 -1
- package/dist/adapter/formSchema.d.ts +1 -0
- package/dist/adapter/formSchema.d.ts.map +1 -1
- package/dist/blocks/case_singleselect/adapter.d.ts +10 -0
- package/dist/blocks/case_singleselect/adapter.d.ts.map +1 -0
- package/dist/blocks/case_singleselect/catalog.d.ts +2 -0
- package/dist/blocks/case_singleselect/catalog.d.ts.map +1 -0
- package/dist/blocks/case_singleselect/index.d.ts +3 -0
- package/dist/blocks/case_singleselect/index.d.ts.map +1 -0
- package/dist/blocks/registry.d.ts +8 -0
- package/dist/blocks/registry.d.ts.map +1 -0
- package/dist/blocks/resume_multiselect/adapter.d.ts +10 -0
- package/dist/blocks/resume_multiselect/adapter.d.ts.map +1 -0
- package/dist/blocks/resume_multiselect/catalog.d.ts +2 -0
- package/dist/blocks/resume_multiselect/catalog.d.ts.map +1 -0
- package/dist/blocks/resume_multiselect/index.d.ts +3 -0
- package/dist/blocks/resume_multiselect/index.d.ts.map +1 -0
- package/dist/blocks/types.d.ts +27 -0
- package/dist/blocks/types.d.ts.map +1 -0
- package/dist/catalog/a2uiCustomCatalog.d.ts.map +1 -1
- package/dist/catalog/caseSearchContext.d.ts +28 -0
- package/dist/catalog/caseSearchContext.d.ts.map +1 -0
- package/dist/catalog/resumeSearchContext.d.ts +30 -0
- package/dist/catalog/resumeSearchContext.d.ts.map +1 -0
- package/dist/catalog/skoponCaseSelect.d.ts +2 -0
- package/dist/catalog/skoponCaseSelect.d.ts.map +1 -0
- package/dist/catalog/skoponResumeSelect.d.ts +2 -0
- package/dist/catalog/skoponResumeSelect.d.ts.map +1 -0
- package/dist/catalog/useSkoponBoundField.d.ts +2 -0
- package/dist/catalog/useSkoponBoundField.d.ts.map +1 -1
- package/dist/client/formClient.d.ts.map +1 -1
- package/dist/components/AskUserFormCard.d.ts +10 -2
- package/dist/components/AskUserFormCard.d.ts.map +1 -1
- package/dist/components/SkoponA2uiStreamRenderer.d.ts +7 -1
- package/dist/components/SkoponA2uiStreamRenderer.d.ts.map +1 -1
- package/dist/components/SkoponA2uiStreamRenderer.test.d.ts +2 -0
- package/dist/components/SkoponA2uiStreamRenderer.test.d.ts.map +1 -0
- package/dist/components/SkoponFormRenderer.d.ts +6 -0
- package/dist/components/SkoponFormRenderer.d.ts.map +1 -1
- package/dist/form-sdk.css +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1390 -710
- package/dist/submit/buildCurlStatement.d.ts +8 -0
- package/dist/submit/buildCurlStatement.d.ts.map +1 -1
- package/dist/submit/intersectPayloadBlocksWithForm.d.ts +26 -0
- package/dist/submit/intersectPayloadBlocksWithForm.d.ts.map +1 -0
- package/dist/submit/submitFormJson.d.ts.map +1 -1
- package/dist/types/index.d.ts +26 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +11 -6
- package/src/adapter/a2uiAdapter.test.ts +116 -0
- package/src/adapter/a2uiAdapter.ts +48 -4
- package/src/adapter/formFileAccept.test.ts +53 -0
- package/src/adapter/formFileAccept.ts +11 -2
- package/src/adapter/formSchema.test.ts +35 -0
- package/src/adapter/formSchema.ts +70 -3
- package/src/blocks/case_singleselect/adapter.ts +74 -0
- package/src/blocks/case_singleselect/catalog.ts +1 -0
- package/src/blocks/case_singleselect/index.ts +14 -0
- package/src/blocks/registry.ts +34 -0
- package/src/blocks/resume_multiselect/adapter.ts +57 -0
- package/src/blocks/resume_multiselect/catalog.ts +1 -0
- package/src/blocks/resume_multiselect/index.ts +14 -0
- package/src/blocks/types.ts +34 -0
- package/src/catalog/a2uiCustomCatalog.tsx +34 -5
- package/src/catalog/caseSearchContext.tsx +46 -0
- package/src/catalog/resumeSearchContext.tsx +48 -0
- package/src/catalog/skoponCaseSelect.tsx +215 -0
- package/src/catalog/skoponResumeSelect.tsx +227 -0
- package/src/catalog/textFieldPreview.test.tsx +1 -1
- package/src/catalog/useSkoponBoundField.test.ts +62 -0
- package/src/catalog/useSkoponBoundField.ts +10 -1
- package/src/client/formClient.test.ts +83 -0
- package/src/client/formClient.ts +10 -2
- package/src/components/AskUserFormCard.tsx +146 -58
- package/src/components/SkoponA2uiStreamRenderer.test.ts +78 -0
- package/src/components/SkoponA2uiStreamRenderer.test.tsx +103 -0
- package/src/components/SkoponA2uiStreamRenderer.tsx +141 -23
- package/src/components/SkoponFormRenderer.tsx +42 -17
- package/src/index.ts +34 -2
- package/src/styles/index.css +65 -0
- package/src/submit/buildCurlStatement.ts +49 -0
- package/src/submit/intersectPayloadBlocksWithForm.ts +175 -0
- package/src/submit/submit.test.ts +170 -10
- package/src/submit/submitFormJson.ts +20 -1
- package/src/types/index.ts +30 -0
- package/dist/submit/intersectPayloadWithForm.d.ts +0 -17
- package/dist/submit/intersectPayloadWithForm.d.ts.map +0 -1
- package/src/submit/intersectPayloadWithForm.ts +0 -54
package/src/types/index.ts
CHANGED
|
@@ -17,6 +17,8 @@ export type A2uiComponentName =
|
|
|
17
17
|
| 'FileUpload'
|
|
18
18
|
| 'SkoponMedia'
|
|
19
19
|
| 'SkoponSelect'
|
|
20
|
+
| 'SkoponResumeSelect'
|
|
21
|
+
| 'SkoponCaseSelect'
|
|
20
22
|
|
|
21
23
|
export interface A2uiComponentNode {
|
|
22
24
|
id: string
|
|
@@ -53,6 +55,8 @@ export type FormBlockType =
|
|
|
53
55
|
| 'datetime'
|
|
54
56
|
| 'time'
|
|
55
57
|
| 'file'
|
|
58
|
+
| 'resume_multiselect'
|
|
59
|
+
| 'case_singleselect'
|
|
56
60
|
| 'image'
|
|
57
61
|
| 'video'
|
|
58
62
|
| 'audio'
|
|
@@ -80,6 +84,24 @@ export interface FormBlockOption {
|
|
|
80
84
|
label: string
|
|
81
85
|
}
|
|
82
86
|
|
|
87
|
+
/** 简历多选组件:渲染时用于 /univ/resume/search 的筛选条件 */
|
|
88
|
+
export interface FormResumeFilter {
|
|
89
|
+
names?: string[]
|
|
90
|
+
agentUniqueIds?: string[]
|
|
91
|
+
resumeUniqueIds?: string[]
|
|
92
|
+
pageSize?: number
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** 案例单选组件:渲染时用于 /univ/case/list 的筛选条件 */
|
|
96
|
+
export interface FormCaseFilter {
|
|
97
|
+
/** Agent 类型(编辑器辅助,运行时不用) */
|
|
98
|
+
agentKind?: string
|
|
99
|
+
/** Agent unique_id(编辑器辅助,运行时不用) */
|
|
100
|
+
agentUniqueId?: string
|
|
101
|
+
flowId?: number
|
|
102
|
+
pageSize?: number
|
|
103
|
+
}
|
|
104
|
+
|
|
83
105
|
export interface FormBlock {
|
|
84
106
|
id: string
|
|
85
107
|
type: FormBlockType
|
|
@@ -98,6 +120,14 @@ export interface FormBlock {
|
|
|
98
120
|
fileMinCount?: number
|
|
99
121
|
fileMaxCount?: number
|
|
100
122
|
defaultValue?: string | string[] | boolean
|
|
123
|
+
/** 简历多选:是否显示「换一批」 */
|
|
124
|
+
resumeEnableRefresh?: boolean
|
|
125
|
+
/** 简历多选:列表筛选条件(持久化进 block json) */
|
|
126
|
+
resumeFilter?: FormResumeFilter
|
|
127
|
+
/** 案例单选:是否显示「换一批」 */
|
|
128
|
+
caseEnableRefresh?: boolean
|
|
129
|
+
/** 案例单选:列表筛选条件(持久化进 block json) */
|
|
130
|
+
caseFilter?: FormCaseFilter
|
|
101
131
|
}
|
|
102
132
|
|
|
103
133
|
export interface FormSchema {
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { FormBlock, FormSchema } from '../types/index';
|
|
2
|
-
/** payload 单个字段的元数据约定(见 docs/ask/ payload.json) */
|
|
3
|
-
export interface AskUserPayloadField {
|
|
4
|
-
用途描述?: string;
|
|
5
|
-
字段类型?: string;
|
|
6
|
-
字段格式?: string;
|
|
7
|
-
字段枚举?: string;
|
|
8
|
-
[key: string]: unknown;
|
|
9
|
-
}
|
|
10
|
-
export type AskUserPayload = Record<string, AskUserPayloadField | unknown>;
|
|
11
|
-
export interface PayloadFormIntersection {
|
|
12
|
-
matchedBlocks: FormBlock[];
|
|
13
|
-
remainderPayload: AskUserPayload;
|
|
14
|
-
}
|
|
15
|
-
export declare function getPayloadKeys(payload: unknown): string[];
|
|
16
|
-
export declare function intersectPayloadWithForm(payload: unknown, formDefinition: FormSchema | undefined): PayloadFormIntersection;
|
|
17
|
-
//# sourceMappingURL=intersectPayloadWithForm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"intersectPayloadWithForm.d.ts","sourceRoot":"","sources":["../../src/submit/intersectPayloadWithForm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3D,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAA;AAE1E,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,SAAS,EAAE,CAAA;IAC1B,gBAAgB,EAAE,cAAc,CAAA;CACjC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAGzD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,UAAU,GAAG,SAAS,GACrC,uBAAuB,CA0BzB"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { FormBlock, FormSchema } from '../types/index'
|
|
2
|
-
import { isInputBlockType } from '../types/index'
|
|
3
|
-
|
|
4
|
-
/** payload 单个字段的元数据约定(见 docs/ask/ payload.json) */
|
|
5
|
-
export interface AskUserPayloadField {
|
|
6
|
-
用途描述?: string
|
|
7
|
-
字段类型?: string
|
|
8
|
-
字段格式?: string
|
|
9
|
-
字段枚举?: string
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type AskUserPayload = Record<string, AskUserPayloadField | unknown>
|
|
14
|
-
|
|
15
|
-
export interface PayloadFormIntersection {
|
|
16
|
-
matchedBlocks: FormBlock[]
|
|
17
|
-
remainderPayload: AskUserPayload
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function getPayloadKeys(payload: unknown): string[] {
|
|
21
|
-
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return []
|
|
22
|
-
return Object.keys(payload as Record<string, unknown>)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function intersectPayloadWithForm(
|
|
26
|
-
payload: unknown,
|
|
27
|
-
formDefinition: FormSchema | undefined,
|
|
28
|
-
): PayloadFormIntersection {
|
|
29
|
-
const keys = getPayloadKeys(payload)
|
|
30
|
-
const source = (payload ?? {}) as Record<string, unknown>
|
|
31
|
-
|
|
32
|
-
const blocks = formDefinition?.blocks ?? []
|
|
33
|
-
const inputBlockNames = new Set(
|
|
34
|
-
blocks
|
|
35
|
-
.filter((block) => isInputBlockType(block.type) && block.name?.trim())
|
|
36
|
-
.map((block) => block.name!.trim()),
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
const matchedBlocks = blocks.filter(
|
|
40
|
-
(block) =>
|
|
41
|
-
isInputBlockType(block.type) &&
|
|
42
|
-
block.name?.trim() &&
|
|
43
|
-
keys.includes(block.name.trim()),
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
const remainderPayload: AskUserPayload = {}
|
|
47
|
-
for (const key of keys) {
|
|
48
|
-
if (!inputBlockNames.has(key)) {
|
|
49
|
-
remainderPayload[key] = source[key]
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return { matchedBlocks, remainderPayload }
|
|
54
|
-
}
|