@duke333/builder-ui 0.2.2 → 0.2.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/dist/{BuilderAdminPages-C-jaMLOa.d.ts → BuilderAdminPages-DwwdA8Dv.d.ts} +24 -2
- package/dist/{RuntimeEntryDialog-Bw741XbS.d.ts → RuntimeEntryDialog-B4TbF8os.d.ts} +1 -1
- package/dist/admin/index.d.ts +2 -2
- package/dist/admin/index.js +172 -23
- package/dist/admin/index.js.map +1 -1
- package/dist/api/index.d.ts +14 -0
- package/dist/api/index.js +19 -2
- package/dist/api/index.js.map +1 -1
- package/dist/components/index.d.ts +5 -3
- package/dist/components/index.js +44 -14
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.js +30 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +236 -33
- package/dist/index.js +1114 -521
- package/dist/index.js.map +1 -1
- package/dist/integration/index.d.ts +1 -1
- package/dist/integration/index.js +221 -28
- package/dist/integration/index.js.map +1 -1
- package/dist/runtime/index.d.ts +16 -26
- package/dist/runtime/index.js +41 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtimeUtils-CCtLyIf1.d.ts +33 -0
- package/dist/styles.css +155 -0
- package/dist/styles.css.map +1 -1
- package/package.json +5 -2
package/dist/api/index.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ type BuilderApiTransport = {
|
|
|
13
13
|
delete<T>(path: string, options?: {
|
|
14
14
|
query?: BuilderApiQuery;
|
|
15
15
|
}): Promise<T>;
|
|
16
|
+
upload?<T>(path: string, body: Blob, options?: {
|
|
17
|
+
contentType: string;
|
|
18
|
+
}): Promise<T>;
|
|
16
19
|
};
|
|
17
20
|
type BuilderFieldOptionsQuery = {
|
|
18
21
|
search?: string;
|
|
@@ -59,6 +62,9 @@ type BuilderApiContracts = {
|
|
|
59
62
|
BuilderFieldTriggerResponse: unknown;
|
|
60
63
|
ListBuilderViewEntriesQuery: object;
|
|
61
64
|
ListBuilderViewEntriesResponse: unknown;
|
|
65
|
+
BuilderFileUploadRequest: unknown;
|
|
66
|
+
BuilderFileUploadResponse: unknown;
|
|
67
|
+
BuilderFilePresignResponse: unknown;
|
|
62
68
|
};
|
|
63
69
|
declare function createBuilderApiClient<C extends BuilderApiContracts>(rootTransport: BuilderApiTransport, options?: BuilderApiClientOptions): {
|
|
64
70
|
listBuilderForms: (query: C["ListBuilderFormsQuery"]) => Promise<C["ListBuilderFormsResponse"]>;
|
|
@@ -96,6 +102,14 @@ declare function createBuilderApiClient<C extends BuilderApiContracts>(rootTrans
|
|
|
96
102
|
updateCompositeBuilderViewEntry: (viewId: string, id: string, input: C["UpdateCompositeBuilderViewEntryInput"]) => Promise<C["BuilderViewEntry"]>;
|
|
97
103
|
updateBuilderViewEntry: (viewId: string, id: string, input: C["UpdateBuilderViewEntryInput"]) => Promise<C["BuilderViewEntry"]>;
|
|
98
104
|
deleteBuilderViewEntry: (viewId: string, id: string) => Promise<void>;
|
|
105
|
+
presignRuntimeBuilderFile: (context: {
|
|
106
|
+
formId?: string;
|
|
107
|
+
viewId?: string;
|
|
108
|
+
}, fieldKey: string, input: C["BuilderFileUploadRequest"]) => Promise<C["BuilderFilePresignResponse"]>;
|
|
109
|
+
uploadRuntimeBuilderFile: (context: {
|
|
110
|
+
formId?: string;
|
|
111
|
+
viewId?: string;
|
|
112
|
+
}, fieldKey: string, file: Blob) => Promise<C["BuilderFileUploadResponse"]>;
|
|
99
113
|
};
|
|
100
114
|
type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<typeof createBuilderApiClient<C>>;
|
|
101
115
|
|
package/dist/api/index.js
CHANGED
|
@@ -16,7 +16,8 @@ function createBuilderApiClient(rootTransport, options = {}) {
|
|
|
16
16
|
get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),
|
|
17
17
|
post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),
|
|
18
18
|
patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),
|
|
19
|
-
delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions)
|
|
19
|
+
delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),
|
|
20
|
+
upload: rootTransport.upload ? (value, body, requestOptions) => rootTransport.upload(path(value), body, requestOptions) : void 0
|
|
20
21
|
};
|
|
21
22
|
return {
|
|
22
23
|
listBuilderForms: (query) => transport.get("/builder/forms", {
|
|
@@ -91,7 +92,23 @@ function createBuilderApiClient(rootTransport, options = {}) {
|
|
|
91
92
|
),
|
|
92
93
|
deleteBuilderViewEntry: (viewId, id) => transport.delete(
|
|
93
94
|
`/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`
|
|
94
|
-
)
|
|
95
|
+
),
|
|
96
|
+
presignRuntimeBuilderFile: (context, fieldKey, input) => {
|
|
97
|
+
const owner = context.viewId ? `views/${encodeURIComponent(context.viewId)}` : `forms/${encodeURIComponent(context.formId ?? "")}`;
|
|
98
|
+
return transport.post(
|
|
99
|
+
`/builder/runtime/${owner}/fields/${encodeURIComponent(fieldKey)}/files/presign`,
|
|
100
|
+
input
|
|
101
|
+
);
|
|
102
|
+
},
|
|
103
|
+
uploadRuntimeBuilderFile: (context, fieldKey, file) => {
|
|
104
|
+
if (!transport.upload) throw new Error("Builder transport server file upload \u0434\u044D\u043C\u0436\u0438\u0445\u0433\u04AF\u0439 \u0431\u0430\u0439\u043D\u0430");
|
|
105
|
+
const owner = context.viewId ? `views/${encodeURIComponent(context.viewId)}` : `forms/${encodeURIComponent(context.formId ?? "")}`;
|
|
106
|
+
return transport.upload(
|
|
107
|
+
`/builder/runtime/${owner}/fields/${encodeURIComponent(fieldKey)}/files/upload`,
|
|
108
|
+
file,
|
|
109
|
+
{ contentType: file.type }
|
|
110
|
+
);
|
|
111
|
+
}
|
|
95
112
|
};
|
|
96
113
|
}
|
|
97
114
|
export {
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/api/createBuilderApiClient.ts"],"sourcesContent":["export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiClientOptions = {\n apiBasePath?: string;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n rootTransport: BuilderApiTransport,\n options: BuilderApiClientOptions = {},\n) {\n const basePath = options.apiBasePath?.trim().replace(/\\/+$/g, \"\") ?? \"\";\n const path = (value: string) => `${basePath}${value}`;\n const transport: BuilderApiTransport = {\n get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),\n post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),\n patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),\n delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),\n };\n\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () =>\n transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () =>\n transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/api/createBuilderApiClient.ts"],"sourcesContent":["export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n upload?<T>(path: string, body: Blob, options?: { contentType: string }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiClientOptions = {\n apiBasePath?: string;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n BuilderFileUploadRequest: unknown;\n BuilderFileUploadResponse: unknown;\n BuilderFilePresignResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n rootTransport: BuilderApiTransport,\n options: BuilderApiClientOptions = {},\n) {\n const basePath = options.apiBasePath?.trim().replace(/\\/+$/g, \"\") ?? \"\";\n const path = (value: string) => `${basePath}${value}`;\n const transport: BuilderApiTransport = {\n get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),\n post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),\n patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),\n delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),\n upload: rootTransport.upload\n ? (value, body, requestOptions) => rootTransport.upload!(path(value), body, requestOptions)\n : undefined,\n };\n\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () =>\n transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () =>\n transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n\n presignRuntimeBuilderFile: (\n context: { formId?: string; viewId?: string },\n fieldKey: string,\n input: C[\"BuilderFileUploadRequest\"],\n ) => {\n const owner = context.viewId ? `views/${encodeURIComponent(context.viewId)}` : `forms/${encodeURIComponent(context.formId ?? \"\")}`;\n return transport.post<C[\"BuilderFilePresignResponse\"]>(\n `/builder/runtime/${owner}/fields/${encodeURIComponent(fieldKey)}/files/presign`,\n input,\n );\n },\n\n uploadRuntimeBuilderFile: (\n context: { formId?: string; viewId?: string },\n fieldKey: string,\n file: Blob,\n ) => {\n if (!transport.upload) throw new Error(\"Builder transport server file upload дэмжихгүй байна\");\n const owner = context.viewId ? `views/${encodeURIComponent(context.viewId)}` : `forms/${encodeURIComponent(context.formId ?? \"\")}`;\n return transport.upload<C[\"BuilderFileUploadResponse\"]>(\n `/builder/runtime/${owner}/fields/${encodeURIComponent(fieldKey)}/files/upload`,\n file,\n { contentType: file.type },\n );\n },\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { R as RuntimeEntryDialogDraftRowsChange } from '../RuntimeEntryDialog-
|
|
2
|
-
export { D as DynamicFormContracts, a as DynamicFormDependencies, b as DynamicFormErrorStateProps, c as DynamicFormFieldsProps, d as DynamicFormNotifications, e as DynamicFormProps, f as DynamicFormShellProps, g as DynamicFormSubmitProps, h as DynamicListContracts, i as DynamicListDataGridProps, j as DynamicListDependencies, k as DynamicListErrorStateProps, l as DynamicListProps, m as DynamicViewAddButtonProps, n as DynamicViewColumnActions, o as DynamicViewContracts, p as DynamicViewDataGridProps, q as DynamicViewDeleteDialogProps, r as DynamicViewDependencies, s as DynamicViewEntryDialogProps, t as DynamicViewErrorStateProps, u as DynamicViewInteractionEvent, v as DynamicViewProps, w as RuntimeEntryDialogActionsProps, x as RuntimeEntryDialogDependencies, y as RuntimeEntryDialogFieldsProps, z as RuntimeEntryDialogNotifications, A as RuntimeEntryDialogProps, B as RuntimeEntryDialogSaveArgs, C as RuntimeEntryDialogShellProps, E as RuntimeEntryDialogViewLike, F as createDynamicFormComponent, G as createDynamicListComponent, H as createDynamicViewComponent, I as createRuntimeEntryDialogComponent, J as shouldHandleDynamicViewRowClick } from '../RuntimeEntryDialog-
|
|
1
|
+
import { R as RuntimeEntryDialogDraftRowsChange } from '../RuntimeEntryDialog-B4TbF8os.js';
|
|
2
|
+
export { D as DynamicFormContracts, a as DynamicFormDependencies, b as DynamicFormErrorStateProps, c as DynamicFormFieldsProps, d as DynamicFormNotifications, e as DynamicFormProps, f as DynamicFormShellProps, g as DynamicFormSubmitProps, h as DynamicListContracts, i as DynamicListDataGridProps, j as DynamicListDependencies, k as DynamicListErrorStateProps, l as DynamicListProps, m as DynamicViewAddButtonProps, n as DynamicViewColumnActions, o as DynamicViewContracts, p as DynamicViewDataGridProps, q as DynamicViewDeleteDialogProps, r as DynamicViewDependencies, s as DynamicViewEntryDialogProps, t as DynamicViewErrorStateProps, u as DynamicViewInteractionEvent, v as DynamicViewProps, w as RuntimeEntryDialogActionsProps, x as RuntimeEntryDialogDependencies, y as RuntimeEntryDialogFieldsProps, z as RuntimeEntryDialogNotifications, A as RuntimeEntryDialogProps, B as RuntimeEntryDialogSaveArgs, C as RuntimeEntryDialogShellProps, E as RuntimeEntryDialogViewLike, F as createDynamicFormComponent, G as createDynamicListComponent, H as createDynamicViewComponent, I as createRuntimeEntryDialogComponent, J as shouldHandleDynamicViewRowClick } from '../RuntimeEntryDialog-B4TbF8os.js';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ReactNode, ComponentType } from 'react';
|
|
5
5
|
import { BuilderApiContracts } from '../api/index.js';
|
|
6
6
|
import { BuilderHooks } from '../hooks/index.js';
|
|
7
|
-
import { BuilderRuntimePresentation, BuilderRuntimeFormSchemaLike, BuilderRuntimeEntryLike, BuilderRuntimeEntryValues } from '../
|
|
7
|
+
import { B as BuilderRuntimePresentation, a as BuilderRuntimeFormSchemaLike, b as BuilderRuntimeEntryLike, c as BuilderRuntimeEntryValues } from '../runtimeUtils-CCtLyIf1.js';
|
|
8
8
|
import '@tanstack/react-query';
|
|
9
9
|
|
|
10
10
|
type RuntimeDatasourceLike = {
|
|
@@ -93,9 +93,11 @@ type RuntimeSubformDialogFieldsProps<TSchema> = {
|
|
|
93
93
|
viewId: string;
|
|
94
94
|
schema: TSchema;
|
|
95
95
|
namePrefix: "values";
|
|
96
|
+
parentValues?: Record<string, unknown>;
|
|
96
97
|
};
|
|
97
98
|
type RuntimeSubformDialogActionsProps = {
|
|
98
99
|
isSaving: boolean;
|
|
100
|
+
submitLabel: string;
|
|
99
101
|
onClose(): void;
|
|
100
102
|
};
|
|
101
103
|
type RuntimeSubformNotifications = {
|
package/dist/components/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { FormProvider, useForm } from "react-hook-form";
|
|
|
6
6
|
|
|
7
7
|
// src/runtime/runtimeUtils.ts
|
|
8
8
|
function emptyFieldValue(field) {
|
|
9
|
+
if (field.defaultValue !== void 0) return field.defaultValue;
|
|
10
|
+
if (field.type === "file" && field.multiple) return [];
|
|
9
11
|
return field.type === "checkbox" ? false : "";
|
|
10
12
|
}
|
|
11
13
|
function createBuilderFormDefaultValues(schema) {
|
|
@@ -215,7 +217,7 @@ function createDynamicViewComponent(deps) {
|
|
|
215
217
|
}
|
|
216
218
|
|
|
217
219
|
// src/components/RuntimeEntryDialog.tsx
|
|
218
|
-
import { useEffect, useMemo as useMemo4, useState as useState2 } from "react";
|
|
220
|
+
import { useEffect, useMemo as useMemo4, useRef, useState as useState2 } from "react";
|
|
219
221
|
import { FormProvider as FormProvider2, useForm as useForm2 } from "react-hook-form";
|
|
220
222
|
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
221
223
|
function isDbTableSource(source) {
|
|
@@ -241,6 +243,12 @@ function childRowPayload(row, includeIdentity) {
|
|
|
241
243
|
...values
|
|
242
244
|
};
|
|
243
245
|
}
|
|
246
|
+
function hasDraftChange(row) {
|
|
247
|
+
return row.values._delete === true || row.values._draftNew === true || row.values._draftDirty === true;
|
|
248
|
+
}
|
|
249
|
+
function changedChildPayloads(rows, includeIdentity) {
|
|
250
|
+
return rows.filter(hasDraftChange).filter((row) => includeIdentity || row.values._delete !== true).map((row) => childRowPayload(row, includeIdentity));
|
|
251
|
+
}
|
|
244
252
|
function createRuntimeEntryDialogComponent(deps) {
|
|
245
253
|
return function RuntimeEntryDialog({
|
|
246
254
|
open,
|
|
@@ -251,6 +259,7 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
251
259
|
isSaving
|
|
252
260
|
}) {
|
|
253
261
|
const [draftSubforms, setDraftSubforms] = useState2({});
|
|
262
|
+
const isSubmittingRef = useRef(false);
|
|
254
263
|
const compositeCreate = deps.useCreateCompositeEntry?.(view.id);
|
|
255
264
|
const compositeUpdate = deps.useUpdateCompositeEntry?.(view.id);
|
|
256
265
|
const form = useForm2({
|
|
@@ -258,16 +267,18 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
258
267
|
values: open ? createBuilderEntryDefaultValues(view, editing) : void 0
|
|
259
268
|
});
|
|
260
269
|
const mainTableName = runtimeViewTableName(view);
|
|
261
|
-
const
|
|
262
|
-
() => Object.values(draftSubforms).some((draft) => draft.rows.
|
|
270
|
+
const hasDraftChanges = useMemo4(
|
|
271
|
+
() => Object.values(draftSubforms).some((draft) => draft.rows.some(hasDraftChange)),
|
|
263
272
|
[draftSubforms]
|
|
264
273
|
);
|
|
265
274
|
useEffect(() => {
|
|
266
275
|
if (open) setDraftSubforms({});
|
|
267
276
|
}, [open]);
|
|
268
277
|
const onSubmit = form.handleSubmit(async (values) => {
|
|
278
|
+
if (isSubmittingRef.current) return;
|
|
279
|
+
isSubmittingRef.current = true;
|
|
269
280
|
try {
|
|
270
|
-
if (!editing &&
|
|
281
|
+
if (!editing && hasDraftChanges) {
|
|
271
282
|
if (!mainTableName) throw new Error("Main form datasource table \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439");
|
|
272
283
|
if (!compositeCreate) throw new Error("Composite create handler \u0442\u043E\u0445\u0438\u0440\u0443\u0443\u043B\u0430\u0433\u0434\u0430\u0430\u0433\u04AF\u0439 \u0431\u0430\u0439\u043D\u0430");
|
|
273
284
|
await compositeCreate.mutateAsync({
|
|
@@ -276,12 +287,12 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
276
287
|
...Object.fromEntries(
|
|
277
288
|
Object.values(draftSubforms).map((draft) => [
|
|
278
289
|
draft.dataKey,
|
|
279
|
-
draft.rows
|
|
290
|
+
changedChildPayloads(draft.rows, false)
|
|
280
291
|
])
|
|
281
292
|
)
|
|
282
293
|
}
|
|
283
294
|
});
|
|
284
|
-
} else if (editing &&
|
|
295
|
+
} else if (editing && hasDraftChanges) {
|
|
285
296
|
if (!mainTableName) throw new Error("Main form datasource table \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439");
|
|
286
297
|
if (!compositeUpdate) throw new Error("Composite update handler \u0442\u043E\u0445\u0438\u0440\u0443\u0443\u043B\u0430\u0433\u0434\u0430\u0430\u0433\u04AF\u0439 \u0431\u0430\u0439\u043D\u0430");
|
|
287
298
|
await compositeUpdate.mutateAsync({
|
|
@@ -296,7 +307,7 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
296
307
|
...Object.fromEntries(
|
|
297
308
|
Object.values(draftSubforms).map((draft) => [
|
|
298
309
|
draft.dataKey,
|
|
299
|
-
draft.rows
|
|
310
|
+
changedChildPayloads(draft.rows, true)
|
|
300
311
|
])
|
|
301
312
|
)
|
|
302
313
|
}
|
|
@@ -309,6 +320,8 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
309
320
|
deps.notifications.success(editing ? "\u041C\u04E9\u0440 \u0445\u0430\u0434\u0433\u0430\u043B\u0430\u0433\u0434\u043B\u0430\u0430" : "\u041C\u04E9\u0440 \u043D\u044D\u043C\u044D\u0433\u0434\u043B\u044D\u044D");
|
|
310
321
|
} catch (error) {
|
|
311
322
|
deps.notifications.error(deps.notifications.errorMessage(error, "\u0425\u0430\u0434\u0433\u0430\u043B\u0430\u0445\u0430\u0434 \u0430\u043B\u0434\u0430\u0430 \u0433\u0430\u0440\u043B\u0430\u0430"));
|
|
323
|
+
} finally {
|
|
324
|
+
isSubmittingRef.current = false;
|
|
312
325
|
}
|
|
313
326
|
});
|
|
314
327
|
const saving = isSaving || Boolean(compositeCreate?.isPending || compositeUpdate?.isPending);
|
|
@@ -357,8 +370,8 @@ function createRuntimeEntryDialogComponent(deps) {
|
|
|
357
370
|
}
|
|
358
371
|
|
|
359
372
|
// src/components/RuntimeSubformField.tsx
|
|
360
|
-
import { useEffect as useEffect2, useMemo as useMemo5, useRef, useState as useState3 } from "react";
|
|
361
|
-
import { FormProvider as FormProvider3, useForm as useForm3 } from "react-hook-form";
|
|
373
|
+
import { useEffect as useEffect2, useMemo as useMemo5, useRef as useRef2, useState as useState3 } from "react";
|
|
374
|
+
import { FormProvider as FormProvider3, useForm as useForm3, useFormContext, useWatch } from "react-hook-form";
|
|
362
375
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
363
376
|
function subformButtonLabel(subform) {
|
|
364
377
|
return subform.buttonLabel?.trim() || subform.label;
|
|
@@ -385,7 +398,7 @@ function draftEntry(values, editing) {
|
|
|
385
398
|
return {
|
|
386
399
|
id: editing?.id ?? crypto.randomUUID(),
|
|
387
400
|
viewId: editing?.viewId ?? "",
|
|
388
|
-
values: editing ? values.values : { ...values.values, _draftNew: true },
|
|
401
|
+
values: editing ? { ...values.values, _draftDirty: true } : { ...values.values, _draftNew: true },
|
|
389
402
|
version: editing?.version ?? 0,
|
|
390
403
|
createdAt: editing?.createdAt ?? now,
|
|
391
404
|
updatedAt: now
|
|
@@ -398,7 +411,9 @@ function RuntimeSubformEntryDialog({
|
|
|
398
411
|
view,
|
|
399
412
|
childField,
|
|
400
413
|
parentValue: linkedParentValue,
|
|
414
|
+
parentValues,
|
|
401
415
|
editing,
|
|
416
|
+
isDraft,
|
|
402
417
|
isSaving,
|
|
403
418
|
deps,
|
|
404
419
|
onClose,
|
|
@@ -428,7 +443,9 @@ function RuntimeSubformEntryDialog({
|
|
|
428
443
|
}
|
|
429
444
|
});
|
|
430
445
|
onClose();
|
|
431
|
-
|
|
446
|
+
if (!isDraft) {
|
|
447
|
+
deps.notifications.success(editing ? "Section \u0445\u0430\u0434\u0433\u0430\u043B\u0430\u0433\u0434\u043B\u0430\u0430" : "Section \u043D\u044D\u043C\u044D\u0433\u0434\u043B\u044D\u044D");
|
|
448
|
+
}
|
|
432
449
|
} catch (error) {
|
|
433
450
|
deps.notifications.error(
|
|
434
451
|
deps.notifications.errorMessage(error, "Subform \u0445\u0430\u0434\u0433\u0430\u043B\u0430\u0445\u0430\u0434 \u0430\u043B\u0434\u0430\u0430 \u0433\u0430\u0440\u043B\u0430\u0430")
|
|
@@ -459,10 +476,18 @@ function RuntimeSubformEntryDialog({
|
|
|
459
476
|
formId: view.form.id,
|
|
460
477
|
viewId: view.id,
|
|
461
478
|
schema: view.form.schema,
|
|
462
|
-
namePrefix: "values"
|
|
479
|
+
namePrefix: "values",
|
|
480
|
+
parentValues
|
|
463
481
|
}
|
|
464
482
|
) : null,
|
|
465
|
-
/* @__PURE__ */ jsx5(
|
|
483
|
+
/* @__PURE__ */ jsx5(
|
|
484
|
+
deps.DialogActions,
|
|
485
|
+
{
|
|
486
|
+
isSaving,
|
|
487
|
+
submitLabel: editing ? "\u0428\u0438\u043D\u044D\u0447\u043B\u044D\u0445" : "\u041D\u044D\u043C\u044D\u0445",
|
|
488
|
+
onClose
|
|
489
|
+
}
|
|
490
|
+
)
|
|
466
491
|
]
|
|
467
492
|
}
|
|
468
493
|
) })
|
|
@@ -476,10 +501,13 @@ function createRuntimeSubformFieldComponent(deps) {
|
|
|
476
501
|
draftRows = [],
|
|
477
502
|
onDraftRowsChange
|
|
478
503
|
}) {
|
|
504
|
+
const { control } = useFormContext();
|
|
505
|
+
const watchedParentValues = useWatch({ control, name: "values" });
|
|
479
506
|
const [isEntryDialogOpen, setEntryDialogOpen] = useState3(false);
|
|
480
507
|
const [editing, setEditing] = useState3(null);
|
|
481
|
-
const initializedDraft =
|
|
508
|
+
const initializedDraft = useRef2(false);
|
|
482
509
|
const linkedValue = parentValue(parentEntry, subform.parentField);
|
|
510
|
+
const parentValues = watchedParentValues && typeof watchedParentValues === "object" && !Array.isArray(watchedParentValues) ? watchedParentValues : void 0;
|
|
483
511
|
const isDraftMode = Boolean(onDraftRowsChange);
|
|
484
512
|
const canFetchBackendRows = Boolean(linkedValue);
|
|
485
513
|
const canUseBackendRows = canFetchBackendRows && !isDraftMode;
|
|
@@ -569,7 +597,9 @@ function createRuntimeSubformFieldComponent(deps) {
|
|
|
569
597
|
view,
|
|
570
598
|
childField: subform.childField,
|
|
571
599
|
parentValue: linkedValue,
|
|
600
|
+
parentValues,
|
|
572
601
|
editing,
|
|
602
|
+
isDraft: isDraftMode,
|
|
573
603
|
isSaving: canUseBackendRows ? save.isPending : false,
|
|
574
604
|
deps,
|
|
575
605
|
onClose: () => {
|