@trungkhai/dynamic-form 0.1.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/README.md +149 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.d.ts +718 -0
- package/dist/index.es.js +1361 -0
- package/package.json +52 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,718 @@
|
|
|
1
|
+
import { Dispatch } from 'react';
|
|
2
|
+
import { FormInstance } from 'antd';
|
|
3
|
+
import { FormItemProps } from 'antd';
|
|
4
|
+
import { ForwardRefExoticComponent } from 'react';
|
|
5
|
+
import { JSX } from 'react';
|
|
6
|
+
import { JSXElementConstructor } from 'react';
|
|
7
|
+
import { MemoExoticComponent } from 'react';
|
|
8
|
+
import { ReactElement } from 'react';
|
|
9
|
+
import { ReactNode } from 'react';
|
|
10
|
+
import { ReactPortal } from 'react';
|
|
11
|
+
import { RefAttributes } from 'react';
|
|
12
|
+
import { SetStateAction } from 'react';
|
|
13
|
+
import { SizeType } from 'antd/es/config-provider/SizeContext';
|
|
14
|
+
|
|
15
|
+
export declare type ActionOnFieldChange = {
|
|
16
|
+
clear?: string[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export declare type ActionOnFieldEmpty = {
|
|
20
|
+
disable?: string[];
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export declare interface AdditionalConfig {
|
|
24
|
+
default?: number | string;
|
|
25
|
+
field_col_span?: number;
|
|
26
|
+
on_field_change?: ActionOnFieldChange;
|
|
27
|
+
on_field_empty?: ActionOnFieldEmpty;
|
|
28
|
+
image?: {
|
|
29
|
+
max?: number;
|
|
30
|
+
multiple?: boolean;
|
|
31
|
+
accept?: string;
|
|
32
|
+
maxSize?: number;
|
|
33
|
+
};
|
|
34
|
+
file?: {
|
|
35
|
+
max?: number;
|
|
36
|
+
multiple?: boolean;
|
|
37
|
+
accept?: string;
|
|
38
|
+
maxSize?: number;
|
|
39
|
+
};
|
|
40
|
+
text?: {
|
|
41
|
+
textarea?: boolean;
|
|
42
|
+
rows?: number;
|
|
43
|
+
};
|
|
44
|
+
datetime?: {
|
|
45
|
+
format?: string;
|
|
46
|
+
showTime?: boolean;
|
|
47
|
+
};
|
|
48
|
+
number?: {
|
|
49
|
+
min?: number;
|
|
50
|
+
max?: number;
|
|
51
|
+
};
|
|
52
|
+
select?: {
|
|
53
|
+
multiple?: boolean;
|
|
54
|
+
search_keyword?: boolean;
|
|
55
|
+
searchDebounceMs?: number;
|
|
56
|
+
};
|
|
57
|
+
view_value?: ViewValueConfig;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export declare const ApiDetailItem: MemoExoticComponent<({ value, code, modeConfig }: ApiDetailItemProps) => JSX.Element>;
|
|
61
|
+
|
|
62
|
+
/** @deprecated Use ApiViewItem with mode: "api" */
|
|
63
|
+
declare type ApiDetailItemProps = {
|
|
64
|
+
value?: unknown;
|
|
65
|
+
code?: string;
|
|
66
|
+
modeConfig?: ApiViewConfig;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export declare const ApiItem: MemoExoticComponent<({ value, code, modeConfig }: ApiItemProps) => JSX.Element>;
|
|
70
|
+
|
|
71
|
+
/** @deprecated Use ApiViewItem with mode: "api" */
|
|
72
|
+
declare type ApiItemProps = {
|
|
73
|
+
value?: unknown;
|
|
74
|
+
code?: string;
|
|
75
|
+
modeConfig?: ApiViewConfig;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export declare type ApiViewConfig = {
|
|
79
|
+
url: string;
|
|
80
|
+
method?: "GET" | "POST" | string;
|
|
81
|
+
data_path?: string;
|
|
82
|
+
result_type?: "array" | "object";
|
|
83
|
+
mapping_attr?: string[];
|
|
84
|
+
link?: string;
|
|
85
|
+
params?: Record<string, unknown>;
|
|
86
|
+
data?: Record<string, unknown>;
|
|
87
|
+
url_template?: boolean;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export declare const ApiViewItem: MemoExoticComponent<({ value, code, modeConfig, viewConfig, }: ApiViewItemProps) => JSX.Element | null>;
|
|
91
|
+
|
|
92
|
+
declare type ApiViewItemProps = {
|
|
93
|
+
value?: unknown;
|
|
94
|
+
code?: string;
|
|
95
|
+
modeConfig?: ApiViewConfig;
|
|
96
|
+
viewConfig?: ViewValueConfig;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export declare type ApiViewRequestSpec = {
|
|
100
|
+
method?: string;
|
|
101
|
+
url: string;
|
|
102
|
+
params?: Record<string, unknown>;
|
|
103
|
+
data?: Record<string, unknown>;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
declare type AxiosLike = {
|
|
107
|
+
(config: {
|
|
108
|
+
method?: string;
|
|
109
|
+
url?: string;
|
|
110
|
+
params?: Record<string, unknown>;
|
|
111
|
+
data?: unknown;
|
|
112
|
+
signal?: AbortSignal;
|
|
113
|
+
headers?: Record<string, string>;
|
|
114
|
+
onUploadProgress?: (event: {
|
|
115
|
+
loaded: number;
|
|
116
|
+
total?: number;
|
|
117
|
+
}) => void;
|
|
118
|
+
}): Promise<{
|
|
119
|
+
data: unknown;
|
|
120
|
+
}>;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export declare type BeforeSubmitResult = Record<string, unknown> | false | void | undefined;
|
|
124
|
+
|
|
125
|
+
export declare function buildApiViewRequests(value: unknown, config: ApiViewConfig): ApiViewRequestSpec[];
|
|
126
|
+
|
|
127
|
+
export declare function buildCacheKey(parts: unknown[]): string;
|
|
128
|
+
|
|
129
|
+
export declare type CacheConfig = {
|
|
130
|
+
ttlMs?: number;
|
|
131
|
+
enabled?: boolean;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export declare function cachedRequest<T>(ctx: Pick<DynamicFormContextValue, "optionCache" | "viewCache" | "cache">, cacheStore: "optionCache" | "viewCache", key: string, fetcher: (signal: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
135
|
+
|
|
136
|
+
export declare function createAxiosDynamicFormClient(axiosInstance: AxiosLike): DynamicFormClient;
|
|
137
|
+
|
|
138
|
+
export declare type CustomFieldRenderer = (group: FieldGroup, context: {
|
|
139
|
+
state: FieldState;
|
|
140
|
+
options?: Record<string, unknown>[];
|
|
141
|
+
optionsLoading?: boolean;
|
|
142
|
+
optionsError?: unknown;
|
|
143
|
+
onSearchKeyword?: (keywords: string) => void;
|
|
144
|
+
readOnly?: boolean;
|
|
145
|
+
formInstance: FormInstance;
|
|
146
|
+
disabled: boolean;
|
|
147
|
+
setFieldState: (code: string, patch: Partial<FieldState>) => void;
|
|
148
|
+
}) => ReactNode;
|
|
149
|
+
|
|
150
|
+
export declare function debounce<T extends (...args: never[]) => void>(fn: T, delay: number): (...args: Parameters<T>) => void;
|
|
151
|
+
|
|
152
|
+
export declare const defaultI18n: DynamicFormI18n;
|
|
153
|
+
|
|
154
|
+
export declare function DefaultLayout({ fieldGroups, fieldStates, renderField, gutter, defaultColSpan, }: LayoutRendererProps): JSX.Element;
|
|
155
|
+
|
|
156
|
+
export declare const defaultMessages: DynamicFormMessages;
|
|
157
|
+
|
|
158
|
+
export declare const defaultOptionResponseParser: (response: unknown) => Record<string, unknown>[];
|
|
159
|
+
|
|
160
|
+
export declare const defaultParsers: DynamicFormParsers;
|
|
161
|
+
|
|
162
|
+
export declare const defaultRedirectHandler: RedirectHandler;
|
|
163
|
+
|
|
164
|
+
export declare const defaultSubmitResponseParser: (response: unknown) => {
|
|
165
|
+
redirectUrl: string | undefined;
|
|
166
|
+
data: unknown;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export declare const defaultViewResponseParser: (response: unknown, config?: {
|
|
170
|
+
dataPath?: string;
|
|
171
|
+
}) => unknown;
|
|
172
|
+
|
|
173
|
+
export declare type DeleteUploadAdapter = (options: DeleteUploadOptions) => Promise<boolean>;
|
|
174
|
+
|
|
175
|
+
export declare type DeleteUploadOptions = {
|
|
176
|
+
path: string;
|
|
177
|
+
fieldCode: string;
|
|
178
|
+
fieldGroup: FieldGroup;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export declare const DynamicForm: ForwardRefExoticComponent<DynamicFormProps & RefAttributes<DynamicFormRef>>;
|
|
182
|
+
|
|
183
|
+
export declare type DynamicFormClient = {
|
|
184
|
+
request: RequestClient;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export declare type DynamicFormContextValue = {
|
|
188
|
+
client: DynamicFormClient;
|
|
189
|
+
upload: DynamicFormUpload;
|
|
190
|
+
i18n: DynamicFormI18n;
|
|
191
|
+
parsers: DynamicFormParsers;
|
|
192
|
+
renderers: DynamicFormRenderers;
|
|
193
|
+
transformers: DynamicFormTransformers;
|
|
194
|
+
cache: Required<CacheConfig>;
|
|
195
|
+
submitDebounceMs: number;
|
|
196
|
+
redirectHandler: RedirectHandler;
|
|
197
|
+
/* Excluded from this release type: optionCache */
|
|
198
|
+
/* Excluded from this release type: viewCache */
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
export declare interface DynamicFormData {
|
|
202
|
+
id: number;
|
|
203
|
+
code: string;
|
|
204
|
+
form_id: number;
|
|
205
|
+
method: "GET" | "POST" | "PUT" | "DELETE" | string;
|
|
206
|
+
action: string;
|
|
207
|
+
config: {
|
|
208
|
+
body: string;
|
|
209
|
+
};
|
|
210
|
+
created_at: string;
|
|
211
|
+
updated_at: string;
|
|
212
|
+
created_by: number | null;
|
|
213
|
+
deleted_at: string | null;
|
|
214
|
+
form: Form;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export declare type DynamicFormI18n = {
|
|
218
|
+
messages: DynamicFormMessages;
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
export declare type DynamicFormMessages = {
|
|
222
|
+
submit: string;
|
|
223
|
+
submitError: string;
|
|
224
|
+
inputPlaceholder: (label: string) => string;
|
|
225
|
+
selectPlaceholder: (label: string) => string;
|
|
226
|
+
optionLoading?: string;
|
|
227
|
+
optionError?: string;
|
|
228
|
+
uploadError?: string;
|
|
229
|
+
viewLoading?: string;
|
|
230
|
+
viewEmpty?: string;
|
|
231
|
+
viewError?: string;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
export declare type DynamicFormParsers = {
|
|
235
|
+
optionResponse: OptionResponseParser;
|
|
236
|
+
submitResponse: SubmitResponseParser;
|
|
237
|
+
viewResponse: ViewResponseParser;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
export declare type DynamicFormProps = {
|
|
241
|
+
formConfig: DynamicFormData;
|
|
242
|
+
formInstance: FormInstance;
|
|
243
|
+
relatedData?: Record<string, unknown>;
|
|
244
|
+
uploadUrl?: string;
|
|
245
|
+
submitTrackingUrl?: string;
|
|
246
|
+
onBeforeSubmit?: (data: Record<string, unknown>) => BeforeSubmitResult | Promise<BeforeSubmitResult>;
|
|
247
|
+
onSubmitSuccess?: (payload: SubmitSuccessPayload) => void;
|
|
248
|
+
onSubmitError?: (error: unknown) => void;
|
|
249
|
+
isRedirectAfterCreate?: boolean;
|
|
250
|
+
onRedirect?: (url: string, target?: string) => void;
|
|
251
|
+
size?: SizeType;
|
|
252
|
+
manualSubmit?: boolean;
|
|
253
|
+
onValuesChange?: (changedValues: unknown, allValues: unknown) => void;
|
|
254
|
+
readOnly?: boolean;
|
|
255
|
+
submitDebounceMs?: number;
|
|
256
|
+
gutter?: [number, number];
|
|
257
|
+
defaultColSpan?: number;
|
|
258
|
+
submitButtonLabel?: string;
|
|
259
|
+
/** @deprecated use uploadUrl */
|
|
260
|
+
uploadResourceUrl?: string;
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
export declare function DynamicFormProvider({ children, client, upload, i18n, parsers, renderers, transformers, cache, submitDebounceMs, redirectHandler, requestClient, uploadAdapter, deleteUploadAdapter, messages, optionResponseParser, customFieldRenderers, }: DynamicFormProviderProps_2): JSX.Element;
|
|
264
|
+
|
|
265
|
+
export declare type DynamicFormProviderConfig = {
|
|
266
|
+
client: DynamicFormClient;
|
|
267
|
+
upload?: Partial<DynamicFormUpload>;
|
|
268
|
+
i18n?: Partial<DynamicFormI18n>;
|
|
269
|
+
parsers?: Partial<DynamicFormParsers>;
|
|
270
|
+
renderers?: DynamicFormRenderers;
|
|
271
|
+
transformers?: DynamicFormTransformers;
|
|
272
|
+
cache?: CacheConfig;
|
|
273
|
+
submitDebounceMs?: number;
|
|
274
|
+
redirectHandler?: RedirectHandler;
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
export declare type DynamicFormProviderProps = DynamicFormProviderConfig & {
|
|
278
|
+
children: ReactNode;
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
declare type DynamicFormProviderProps_2 = DynamicFormProviderConfig & {
|
|
282
|
+
children: ReactNode;
|
|
283
|
+
/** @deprecated use client.request */
|
|
284
|
+
requestClient?: RequestClient;
|
|
285
|
+
/** @deprecated use upload.upload */
|
|
286
|
+
uploadAdapter?: UploadAdapter;
|
|
287
|
+
/** @deprecated use upload.remove — legacy signature accepts path string */
|
|
288
|
+
deleteUploadAdapter?: (path: string) => Promise<boolean>;
|
|
289
|
+
/** @deprecated use i18n.messages */
|
|
290
|
+
messages?: Partial<DynamicFormMessages>;
|
|
291
|
+
/** @deprecated use parsers.optionResponse */
|
|
292
|
+
optionResponseParser?: OptionResponseParser;
|
|
293
|
+
/** @deprecated use renderers.fields as map */
|
|
294
|
+
customFieldRenderers?: Record<string, CustomFieldRenderer>;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
export declare type DynamicFormRef = {
|
|
298
|
+
submit: () => Promise<void>;
|
|
299
|
+
getProcessedValues: () => Promise<Record<string, unknown>>;
|
|
300
|
+
isSubmitting: () => boolean;
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
export declare type DynamicFormRenderers = {
|
|
304
|
+
fields?: FieldRendererEntry[];
|
|
305
|
+
layout?: (props: LayoutRendererProps) => ReactNode;
|
|
306
|
+
submitActions?: (props: SubmitActionsRendererProps) => ReactNode;
|
|
307
|
+
viewValue?: (props: ViewValueRendererProps) => ReactNode;
|
|
308
|
+
link?: (props: LinkRendererProps) => ReactNode;
|
|
309
|
+
viewLoading?: () => ReactNode;
|
|
310
|
+
viewEmpty?: () => ReactNode;
|
|
311
|
+
viewError?: (error: unknown) => ReactNode;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
export declare type DynamicFormTransformers = {
|
|
315
|
+
normalizeInitialValues?: (values: Record<string, unknown>, fieldGroups: FieldGroup[]) => Record<string, unknown>;
|
|
316
|
+
transformFieldValue?: (code: string, value: unknown, group: FieldGroup) => unknown;
|
|
317
|
+
transformSubmitValues?: (values: Record<string, unknown>, fieldGroups: FieldGroup[], relatedData?: Record<string, unknown>) => Record<string, unknown>;
|
|
318
|
+
parseRelatedDataTemplates?: (values: Record<string, unknown>, relatedData: Record<string, unknown>) => Record<string, unknown>;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
export declare type DynamicFormUpload = {
|
|
322
|
+
upload: UploadAdapter;
|
|
323
|
+
remove: DeleteUploadAdapter;
|
|
324
|
+
getPayload?: GetUploadPayload;
|
|
325
|
+
uploadUrl?: string;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
export declare type DynamicUploadFile = {
|
|
329
|
+
uid?: string;
|
|
330
|
+
path: string;
|
|
331
|
+
name?: string;
|
|
332
|
+
type?: string;
|
|
333
|
+
size?: number;
|
|
334
|
+
upload_date?: string;
|
|
335
|
+
[key: string]: unknown;
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
export declare function extractDependencyFields(group: FieldGroup): string[];
|
|
339
|
+
|
|
340
|
+
export declare function extractViewData(response: unknown, config: ApiViewConfig): Record<string, unknown>[];
|
|
341
|
+
|
|
342
|
+
export declare function fetchApiViewItems(value: unknown, config: ApiViewConfig, request: (spec: ApiViewRequestSpec & {
|
|
343
|
+
signal?: AbortSignal;
|
|
344
|
+
}) => Promise<{
|
|
345
|
+
data: unknown;
|
|
346
|
+
}>, signal?: AbortSignal): Promise<Record<string, unknown>[]>;
|
|
347
|
+
|
|
348
|
+
export declare interface Field {
|
|
349
|
+
id: number;
|
|
350
|
+
code: string;
|
|
351
|
+
name: string;
|
|
352
|
+
title: string;
|
|
353
|
+
type_id: number;
|
|
354
|
+
created_at: string;
|
|
355
|
+
updated_at: string;
|
|
356
|
+
created_by: number | null;
|
|
357
|
+
deleted_at: string | null;
|
|
358
|
+
type: FieldType;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
export declare type FieldGroup = {
|
|
362
|
+
id: number;
|
|
363
|
+
field_id: number;
|
|
364
|
+
code: string;
|
|
365
|
+
name: string;
|
|
366
|
+
label: string;
|
|
367
|
+
form_id: number;
|
|
368
|
+
description: string | null;
|
|
369
|
+
position: string;
|
|
370
|
+
is_required: boolean;
|
|
371
|
+
is_hidden: boolean;
|
|
372
|
+
is_readonly: boolean;
|
|
373
|
+
limit: number | null;
|
|
374
|
+
depend_id: number | null;
|
|
375
|
+
is_option_api: boolean;
|
|
376
|
+
option_config: OptionConfig | null;
|
|
377
|
+
additional_config: AdditionalConfig | null;
|
|
378
|
+
created_at: string;
|
|
379
|
+
updated_at: string;
|
|
380
|
+
created_by: number | null;
|
|
381
|
+
deleted_at: string | null;
|
|
382
|
+
field: Field;
|
|
383
|
+
metas: MetaItem[] | null;
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
declare type FieldGroupsResult = {
|
|
387
|
+
fieldGroups: FieldGroup[];
|
|
388
|
+
fieldByCode: Map<string, FieldGroup>;
|
|
389
|
+
visibleFieldGroups: FieldGroup[];
|
|
390
|
+
initialValues: Record<string, unknown>;
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
export declare type FieldRendererContext = {
|
|
394
|
+
group: FieldGroup;
|
|
395
|
+
formInstance: FormInstance;
|
|
396
|
+
value: unknown;
|
|
397
|
+
state: FieldState;
|
|
398
|
+
disabled: boolean;
|
|
399
|
+
readOnly: boolean;
|
|
400
|
+
options?: Record<string, unknown>[];
|
|
401
|
+
optionsLoading?: boolean;
|
|
402
|
+
optionsError?: unknown;
|
|
403
|
+
onSearchKeyword?: (keywords: string) => void;
|
|
404
|
+
setFieldState: (code: string, patch: Partial<FieldState>) => void;
|
|
405
|
+
requestClient: RequestClient;
|
|
406
|
+
messages: DynamicFormMessages;
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
export declare type FieldRendererEntry = CustomFieldRenderer | {
|
|
410
|
+
match: string | FieldRendererPredicate;
|
|
411
|
+
render: CustomFieldRenderer;
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
declare type FieldRendererPredicate = (group: FieldGroup) => boolean;
|
|
415
|
+
|
|
416
|
+
export declare type FieldState = {
|
|
417
|
+
disabled?: boolean;
|
|
418
|
+
hidden?: boolean;
|
|
419
|
+
required?: boolean;
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
export declare type FieldStates = Record<string, FieldState>;
|
|
423
|
+
|
|
424
|
+
export declare interface FieldType {
|
|
425
|
+
id: number;
|
|
426
|
+
code: "text" | "number" | "datetime" | "select" | string;
|
|
427
|
+
name: string;
|
|
428
|
+
format: string | null;
|
|
429
|
+
description: string | null;
|
|
430
|
+
created_at: string;
|
|
431
|
+
updated_at: string;
|
|
432
|
+
created_by: number | null;
|
|
433
|
+
deleted_at: string | null;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export declare function fillTemplate(template: string, data: Record<string, unknown>): string;
|
|
437
|
+
|
|
438
|
+
export declare interface Form {
|
|
439
|
+
id: number;
|
|
440
|
+
code: string;
|
|
441
|
+
name: string;
|
|
442
|
+
description: string | null;
|
|
443
|
+
config: unknown | null;
|
|
444
|
+
created_at: string | null;
|
|
445
|
+
updated_at: string | null;
|
|
446
|
+
created_by: number | null;
|
|
447
|
+
deleted_at: string | null;
|
|
448
|
+
field_groups: FieldGroup[];
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
export declare const FormItem: MemoExoticComponent<({ group, formInstance, fieldState, setFieldState, uploadUrl, readOnly, size, ...formItemProps }: FormItemPropsExtended) => JSX.Element>;
|
|
452
|
+
|
|
453
|
+
declare type FormItemPropsExtended = {
|
|
454
|
+
group: FieldGroup;
|
|
455
|
+
formInstance: FormInstance;
|
|
456
|
+
fieldState: FieldState;
|
|
457
|
+
setFieldState: (code: string, patch: Partial<FieldState>) => void;
|
|
458
|
+
uploadUrl?: string;
|
|
459
|
+
readOnly?: boolean;
|
|
460
|
+
size?: SizeType;
|
|
461
|
+
} & FormItemProps;
|
|
462
|
+
|
|
463
|
+
export declare function getByPath(obj: unknown, path: string): unknown;
|
|
464
|
+
|
|
465
|
+
export declare function getCached<T>(cache: Map<string, {
|
|
466
|
+
data: unknown;
|
|
467
|
+
expiresAt: number;
|
|
468
|
+
}>, key: string): T | undefined;
|
|
469
|
+
|
|
470
|
+
export declare function getMappedLabel(data: Record<string, unknown>, config: ApiViewConfig): string;
|
|
471
|
+
|
|
472
|
+
export declare function getMappedLink(data: Record<string, unknown>, config: ApiViewConfig): string | null;
|
|
473
|
+
|
|
474
|
+
export declare type GetUploadPayload = (options: UploadAdapterOptions) => FormData | Record<string, unknown>;
|
|
475
|
+
|
|
476
|
+
export declare function isEmptyValue(value: unknown): boolean;
|
|
477
|
+
|
|
478
|
+
export declare type LayoutRendererProps = {
|
|
479
|
+
fieldGroups: FieldGroup[];
|
|
480
|
+
fieldStates: FieldStates;
|
|
481
|
+
renderField: (group: FieldGroup) => ReactNode;
|
|
482
|
+
gutter: [number, number];
|
|
483
|
+
defaultColSpan: number;
|
|
484
|
+
size?: "small" | "middle" | "large" | "medium";
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
export declare type LinkRendererProps = {
|
|
488
|
+
url: string;
|
|
489
|
+
label: ReactNode;
|
|
490
|
+
data: Record<string, unknown>;
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
export declare function mapOptions(options: Record<string, unknown>[] | undefined, group: FieldGroup): {
|
|
494
|
+
label: string;
|
|
495
|
+
value: string | number;
|
|
496
|
+
}[] | undefined;
|
|
497
|
+
|
|
498
|
+
export declare function mapOptionToSelectItem(option: Record<string, unknown>, group: FieldGroup): {
|
|
499
|
+
label: string;
|
|
500
|
+
value: string | number;
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
export declare type MetaItem = {
|
|
504
|
+
id: number;
|
|
505
|
+
form_id: number;
|
|
506
|
+
field_group_id: number;
|
|
507
|
+
label: string;
|
|
508
|
+
key: string;
|
|
509
|
+
value: string;
|
|
510
|
+
name: string;
|
|
511
|
+
description: string | null;
|
|
512
|
+
position: string;
|
|
513
|
+
created_at: string;
|
|
514
|
+
updated_at: string;
|
|
515
|
+
created_by: number | null;
|
|
516
|
+
deleted_at: string | null;
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
export declare const MetaItemValue: MemoExoticComponent<({ code, value, fieldGroup, }: {
|
|
520
|
+
code: string;
|
|
521
|
+
value: string;
|
|
522
|
+
fieldGroup?: FieldGroup;
|
|
523
|
+
}) => string | JSX.Element>;
|
|
524
|
+
|
|
525
|
+
export declare function normalizeApiViewConfig(viewConfig?: ViewValueConfig): ApiViewConfig | undefined;
|
|
526
|
+
|
|
527
|
+
export declare function normalizeMetaForForm(meta: Record<string, unknown>, fieldGroups: FieldGroup[]): Record<string, unknown>;
|
|
528
|
+
|
|
529
|
+
export declare interface OptionConfig {
|
|
530
|
+
url: string;
|
|
531
|
+
method: "GET" | "POST" | string;
|
|
532
|
+
label_attr: string[];
|
|
533
|
+
value_attr: string;
|
|
534
|
+
api_options?: {
|
|
535
|
+
params?: Record<string, unknown>;
|
|
536
|
+
data?: Record<string, unknown>;
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export declare type OptionResponseParser = (response: unknown, group?: FieldGroup) => Record<string, unknown>[];
|
|
541
|
+
|
|
542
|
+
export declare function parseFormValues<T extends Record<string, unknown>>(formValues: T, relatedData: Record<string, unknown>): T;
|
|
543
|
+
|
|
544
|
+
export declare type RedirectHandler = (url: string, target?: string) => void;
|
|
545
|
+
|
|
546
|
+
export declare function replaceTemplateInObject(obj: Record<string, unknown>, dependencyValues: Record<string, unknown>): Record<string, unknown>;
|
|
547
|
+
|
|
548
|
+
export declare type RequestClient = (config: RequestConfig) => Promise<{
|
|
549
|
+
data: unknown;
|
|
550
|
+
}>;
|
|
551
|
+
|
|
552
|
+
export declare type RequestConfig = {
|
|
553
|
+
method?: string;
|
|
554
|
+
url?: string;
|
|
555
|
+
params?: Record<string, unknown>;
|
|
556
|
+
data?: Record<string, unknown>;
|
|
557
|
+
signal?: AbortSignal;
|
|
558
|
+
headers?: Record<string, string>;
|
|
559
|
+
onUploadProgress?: (event: {
|
|
560
|
+
loaded: number;
|
|
561
|
+
total?: number;
|
|
562
|
+
}) => void;
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
export declare function resolveApiOptionMeta(group: FieldGroup, formValues: Record<string, unknown>): {
|
|
566
|
+
params?: Record<string, unknown>;
|
|
567
|
+
data?: Record<string, unknown>;
|
|
568
|
+
} | undefined;
|
|
569
|
+
|
|
570
|
+
export declare function resolveFieldRenderer(group: FieldGroup, entries?: FieldRendererEntry[]): CustomFieldRenderer | undefined;
|
|
571
|
+
|
|
572
|
+
export declare function resolveFieldRendererFromMap(group: FieldGroup, entries?: FieldRendererEntry[], legacyMap?: Record<string, CustomFieldRenderer>): CustomFieldRenderer | undefined;
|
|
573
|
+
|
|
574
|
+
export declare function resolveFieldViewValue(group: FieldGroup, rawValue: unknown, context: {
|
|
575
|
+
optionList?: Record<string, unknown>[];
|
|
576
|
+
viewValueFetched?: unknown;
|
|
577
|
+
}): string | null;
|
|
578
|
+
|
|
579
|
+
export declare function resolveViewValueConfig(rawValue: unknown, viewConfig: ViewValueConfig | undefined, fetchedData?: unknown): string | null;
|
|
580
|
+
|
|
581
|
+
export declare function setCache(cache: Map<string, {
|
|
582
|
+
data: unknown;
|
|
583
|
+
expiresAt: number;
|
|
584
|
+
}>, key: string, data: unknown, ttlMs: number): void;
|
|
585
|
+
|
|
586
|
+
export declare type SubmitActionsRendererProps = {
|
|
587
|
+
onSubmit: () => void;
|
|
588
|
+
loading: boolean;
|
|
589
|
+
label: string;
|
|
590
|
+
disabled?: boolean;
|
|
591
|
+
};
|
|
592
|
+
|
|
593
|
+
export declare type SubmitResponseParser = (response: unknown) => {
|
|
594
|
+
redirectUrl?: string;
|
|
595
|
+
data?: unknown;
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
export declare type SubmitSuccessPayload = {
|
|
599
|
+
values: Record<string, unknown>;
|
|
600
|
+
response: unknown;
|
|
601
|
+
data: unknown;
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
export declare type UploadAdapter = (options: UploadAdapterOptions) => Promise<DynamicUploadFile>;
|
|
605
|
+
|
|
606
|
+
export declare type UploadAdapterOptions = {
|
|
607
|
+
file: File | Blob;
|
|
608
|
+
fieldCode: string;
|
|
609
|
+
fieldGroup: FieldGroup;
|
|
610
|
+
uploadUrl?: string;
|
|
611
|
+
signal?: AbortSignal;
|
|
612
|
+
onProgress?: (percent: number) => void;
|
|
613
|
+
metadata?: Record<string, unknown>;
|
|
614
|
+
};
|
|
615
|
+
|
|
616
|
+
/** @alias DynamicUploadFile */
|
|
617
|
+
export declare type UploadResult = DynamicUploadFile;
|
|
618
|
+
|
|
619
|
+
export declare function useCachedViewRequest<T>(cacheKeyParts: unknown[], fetcher: (signal: AbortSignal) => Promise<T>, enabled?: boolean): {
|
|
620
|
+
data: T | undefined;
|
|
621
|
+
isLoading: boolean;
|
|
622
|
+
error: unknown;
|
|
623
|
+
refetch: () => Promise<T | undefined>;
|
|
624
|
+
};
|
|
625
|
+
|
|
626
|
+
export declare function useDependencyValues(group: FieldGroup, formInstance: FormInstance): Record<string, unknown>;
|
|
627
|
+
|
|
628
|
+
export declare const useDynamicField: ({ formInstance, uploadUrl, setFieldState, }: UseDynamicFieldOptions) => {
|
|
629
|
+
getDynamicField: (group: FieldGroup, { state, options, optionsLoading, optionsError, onSearchKeyword, readOnly, }: {
|
|
630
|
+
state: FieldState;
|
|
631
|
+
options?: Record<string, unknown>[];
|
|
632
|
+
optionsLoading?: boolean;
|
|
633
|
+
optionsError?: unknown;
|
|
634
|
+
onSearchKeyword?: (keywords: string) => void;
|
|
635
|
+
readOnly?: boolean;
|
|
636
|
+
}) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | ReactPortal | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | JSX.Element | null | undefined;
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
declare type UseDynamicFieldOptions = {
|
|
640
|
+
formInstance: FormInstance;
|
|
641
|
+
uploadUrl?: string;
|
|
642
|
+
setFieldState: (code: string, patch: Partial<FieldState>) => void;
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
export declare function useDynamicFormContext(): DynamicFormContextValue;
|
|
646
|
+
|
|
647
|
+
export declare function useDynamicFormContextOptional(): DynamicFormContextValue | null;
|
|
648
|
+
|
|
649
|
+
export declare function useDynamicOptions({ group, formInstance, searchKeyword, searchDebounceMs, }: UseDynamicOptionsOptions): {
|
|
650
|
+
options: Record<string, unknown>[] | undefined;
|
|
651
|
+
isLoading: boolean;
|
|
652
|
+
error: unknown;
|
|
653
|
+
refetch: () => Promise<void>;
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
declare type UseDynamicOptionsOptions = {
|
|
657
|
+
group: FieldGroup;
|
|
658
|
+
formInstance: FormInstance;
|
|
659
|
+
searchKeyword?: string;
|
|
660
|
+
searchDebounceMs?: number;
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
export declare function useFieldGroups(formConfig: DynamicFormData | undefined): FieldGroupsResult;
|
|
664
|
+
|
|
665
|
+
export declare function useFieldStates(fieldGroups: FieldGroup[]): {
|
|
666
|
+
fieldStates: FieldStates;
|
|
667
|
+
setFieldStates: Dispatch<SetStateAction<FieldStates>>;
|
|
668
|
+
setFieldState: (code: string, patch: Partial<FieldState>) => void;
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
export declare function useProcessedValues({ formInstance, fieldByCode, relatedData, transformers, }: UseProcessedValuesOptions): {
|
|
672
|
+
buildProcessedValues: () => Promise<Record<string, unknown>>;
|
|
673
|
+
};
|
|
674
|
+
|
|
675
|
+
declare type UseProcessedValuesOptions = {
|
|
676
|
+
formInstance: FormInstance;
|
|
677
|
+
fieldByCode: Map<string, FieldGroup>;
|
|
678
|
+
relatedData?: Record<string, unknown>;
|
|
679
|
+
transformers: DynamicFormTransformers;
|
|
680
|
+
};
|
|
681
|
+
|
|
682
|
+
export declare const useViewMode: ({ formConfig, formValues, }: UseViewModeProps) => ViewColumnField[];
|
|
683
|
+
|
|
684
|
+
declare type UseViewModeProps = {
|
|
685
|
+
formConfig: DynamicFormData | undefined;
|
|
686
|
+
formValues: Record<string, unknown>;
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
export declare type ViewColumnField = {
|
|
690
|
+
key: string;
|
|
691
|
+
label: string;
|
|
692
|
+
rawValue: unknown;
|
|
693
|
+
viewValue: ReactNode;
|
|
694
|
+
field_group: FieldGroup;
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
export declare type ViewResponseParser = (response: unknown, config?: {
|
|
698
|
+
dataPath?: string;
|
|
699
|
+
}) => unknown;
|
|
700
|
+
|
|
701
|
+
export declare type ViewValueConfig = {
|
|
702
|
+
mode?: "raw" | "formatted" | "api" | "api_ids" | "api_detail";
|
|
703
|
+
api?: ApiViewConfig;
|
|
704
|
+
/** @deprecated use mode: "api" with api config */
|
|
705
|
+
api_ids?: ApiViewConfig;
|
|
706
|
+
/** @deprecated use mode: "api" with api config */
|
|
707
|
+
api_detail?: ApiViewConfig;
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
export declare type ViewValueRendererProps = {
|
|
711
|
+
value: unknown;
|
|
712
|
+
group: FieldGroup;
|
|
713
|
+
loading?: boolean;
|
|
714
|
+
error?: unknown;
|
|
715
|
+
children: ReactNode;
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
export { }
|