@bagelink/vue 1.15.205 → 1.15.207
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/index.cjs +38 -38
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +9111 -8887
- package/dist/utils/BagelFormUtils.d.ts +111 -0
- package/dist/utils/BagelFormUtils.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/utils/BagelFormUtils.ts +341 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { BaseBagelField, BglFormSchemaT, Field, Path, SchemaChild, UploadInputProps } from '../types/BagelForm';
|
|
2
|
+
import { IconType, Option } from '../types';
|
|
3
|
+
interface InputOptions<T, P extends Path<T>> extends Partial<BaseBagelField<T, P>> {
|
|
4
|
+
defaultValue?: string | number;
|
|
5
|
+
autocomplete?: string;
|
|
6
|
+
}
|
|
7
|
+
interface DateOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
8
|
+
enableTime?: boolean;
|
|
9
|
+
mode?: 'day' | 'month' | 'year';
|
|
10
|
+
locale?: string;
|
|
11
|
+
timezone?: string;
|
|
12
|
+
}
|
|
13
|
+
interface TextInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
14
|
+
type?: 'text' | 'tel' | 'email' | 'time';
|
|
15
|
+
pattern?: string;
|
|
16
|
+
multiline?: boolean;
|
|
17
|
+
autoheight?: boolean;
|
|
18
|
+
code?: boolean;
|
|
19
|
+
rows?: number | string;
|
|
20
|
+
icon?: IconType;
|
|
21
|
+
iconStart?: IconType;
|
|
22
|
+
}
|
|
23
|
+
interface SlctInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
24
|
+
searchable?: boolean;
|
|
25
|
+
multiselect?: boolean;
|
|
26
|
+
clearable?: boolean;
|
|
27
|
+
onSearch?: (search: string) => any;
|
|
28
|
+
}
|
|
29
|
+
interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
30
|
+
max?: number;
|
|
31
|
+
min?: number;
|
|
32
|
+
step?: number;
|
|
33
|
+
layout?: 'default' | 'vertical' | 'horizontal';
|
|
34
|
+
padZero?: number;
|
|
35
|
+
center?: boolean;
|
|
36
|
+
useGrouping?: boolean;
|
|
37
|
+
}
|
|
38
|
+
type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>;
|
|
39
|
+
export declare function getBaseField<T, P extends Path<T>>(id?: P, labelOrRest?: string | Partial<BaseBagelField<T, P>>, rest?: Partial<BaseBagelField<T, P>>): BaseBagelField<T, P>;
|
|
40
|
+
export declare function richText<T, P extends Path<T>>(id: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P>;
|
|
41
|
+
export declare function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): BaseBagelField<T, P>;
|
|
42
|
+
export declare function selectField<T, P extends Path<T>>(id: P, label?: string, options?: Option[] | (() => Option[]), config?: SlctInputOptions<T, P>): BaseBagelField<T, P>;
|
|
43
|
+
export declare const slctField: typeof selectField;
|
|
44
|
+
interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
45
|
+
value?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function checkField<T, P extends Path<T>>(id: P, label?: string, options?: CheckInputOptions<T, P>): BaseBagelField<T, P>;
|
|
48
|
+
interface EmailInputOptions<T, P extends Path<T>> extends InputOptions<T, P> {
|
|
49
|
+
autocorrect?: boolean;
|
|
50
|
+
serverValidate?: boolean;
|
|
51
|
+
preventFakeEmails?: boolean;
|
|
52
|
+
pattern?: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function emailField<T, P extends Path<T>>(id: P, label?: string, options?: EmailInputOptions<T, P>): BaseBagelField<T, P>;
|
|
55
|
+
export declare function dateField<T, P extends Path<T>>(id: P, label?: string, options?: DateOptions<T, P>): BaseBagelField<T, P>;
|
|
56
|
+
export declare function numField<T, P extends Path<T>>(id: P, label?: string, options?: NumFieldOptions<T, P>): BaseBagelField<T, P>;
|
|
57
|
+
export declare function frmRow<T, P extends Path<T>>(...children: SchemaChild<T, P>[]): {
|
|
58
|
+
$el: string;
|
|
59
|
+
class: string;
|
|
60
|
+
children: SchemaChild<T, P>[];
|
|
61
|
+
};
|
|
62
|
+
export type UploadOptions<T, K extends Path<T>> = UploadInputProps & InputOptions<T, K>;
|
|
63
|
+
export declare function uploadField<T, P extends Path<T>>(id: P, label?: string, options?: UploadOptions<T, P>): BaseBagelField<T, P>;
|
|
64
|
+
interface RangeOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
65
|
+
min?: number;
|
|
66
|
+
max?: number;
|
|
67
|
+
step?: number;
|
|
68
|
+
rtl?: boolean;
|
|
69
|
+
multiRange?: boolean;
|
|
70
|
+
formatValue?: (value: number) => string;
|
|
71
|
+
}
|
|
72
|
+
export declare function rangeField<T, P extends Path<T>>(id: P, label?: string, options?: RangeOptions<T, P>): BaseBagelField<T, P>;
|
|
73
|
+
export declare function bglForm<T>(idOrField?: string | Field<T>, ...schema: Field<T>[]): {
|
|
74
|
+
$el: string;
|
|
75
|
+
id?: string;
|
|
76
|
+
attrs: {
|
|
77
|
+
schema: (string | Field<T> | undefined)[];
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
export declare function telField<T, P extends Path<T>>(id: P, label?: string, options?: {
|
|
81
|
+
[key: string]: any;
|
|
82
|
+
}): BaseBagelField<T, P>;
|
|
83
|
+
export declare function colorField<T, P extends Path<T>>(id: P, label?: string, options?: {
|
|
84
|
+
[key: string]: any;
|
|
85
|
+
}): BaseBagelField<T, P>;
|
|
86
|
+
export declare function findBglFieldById<T>(id: string, _schema: BglFormSchemaT<T>): Field<T> | undefined;
|
|
87
|
+
export interface ArrayFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
88
|
+
delete?: boolean;
|
|
89
|
+
add?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export type ArrayType = 'number' | 'text';
|
|
92
|
+
export declare function arrField<T, P extends Path<T>>(id: P, label: string, schemaOrType: BglFormSchemaT<any> | ArrayType, options?: ArrayFieldOptions<T, P>): BaseBagelField<T, P>;
|
|
93
|
+
export declare function useForm(): {
|
|
94
|
+
txtField: typeof txtField;
|
|
95
|
+
selectField: typeof selectField;
|
|
96
|
+
checkField: typeof checkField;
|
|
97
|
+
dateField: typeof dateField;
|
|
98
|
+
numField: typeof numField;
|
|
99
|
+
frmRow: typeof frmRow;
|
|
100
|
+
uploadField: typeof uploadField;
|
|
101
|
+
rangeField: typeof rangeField;
|
|
102
|
+
bglForm: typeof bglForm;
|
|
103
|
+
telField: typeof telField;
|
|
104
|
+
colorField: typeof colorField;
|
|
105
|
+
arrField: typeof arrField;
|
|
106
|
+
richText: typeof richText;
|
|
107
|
+
findBglFieldById: typeof findBglFieldById;
|
|
108
|
+
getBaseField: typeof getBaseField;
|
|
109
|
+
};
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=BagelFormUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BagelFormUtils.d.ts","sourceRoot":"","sources":["../../src/utils/BagelFormUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -31,6 +31,7 @@ export { type BagelToastOptions, type ToastApi, ToastPlugin, useToast } from './
|
|
|
31
31
|
|
|
32
32
|
export * from './types'
|
|
33
33
|
export * from './utils'
|
|
34
|
+
export * as bagelFormUtils from './utils/BagelFormUtils'
|
|
34
35
|
export * from './utils/allCountries'
|
|
35
36
|
export * from './utils/calendar/dateUtils'
|
|
36
37
|
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BagelFormUtils — legacy `$el`-based schema-builder helpers.
|
|
3
|
+
*
|
|
4
|
+
* These construct `BaseBagelField` descriptors for the object-schema form
|
|
5
|
+
* renderer (`BagelForm` / `BglFormSchemaT`). Retained for backwards
|
|
6
|
+
* compatibility with consumers (e.g. Blox block configs) that author form
|
|
7
|
+
* schemas with `txtField`/`slctField`/`frmRow`/… rather than the newer
|
|
8
|
+
* `defineSchema`/FormFlow API. Pure factory functions, no runtime deps.
|
|
9
|
+
*
|
|
10
|
+
* Re-exported as the `bagelFormUtils` namespace from the package root.
|
|
11
|
+
*/
|
|
12
|
+
import type {
|
|
13
|
+
BaseBagelField,
|
|
14
|
+
BglFormSchemaT,
|
|
15
|
+
Field,
|
|
16
|
+
Path,
|
|
17
|
+
SchemaChild,
|
|
18
|
+
UploadInputProps,
|
|
19
|
+
} from '../types/BagelForm'
|
|
20
|
+
import type { IconType, Option } from '../types'
|
|
21
|
+
|
|
22
|
+
interface InputOptions<T, P extends Path<T>> extends Partial<BaseBagelField<T, P>> {
|
|
23
|
+
defaultValue?: string | number
|
|
24
|
+
autocomplete?: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface DateOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
28
|
+
enableTime?: boolean
|
|
29
|
+
mode?: 'day' | 'month' | 'year'
|
|
30
|
+
locale?: string
|
|
31
|
+
timezone?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface TextInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
35
|
+
type?: 'text' | 'tel' | 'email' | 'time'
|
|
36
|
+
pattern?: string
|
|
37
|
+
multiline?: boolean
|
|
38
|
+
autoheight?: boolean
|
|
39
|
+
code?: boolean
|
|
40
|
+
rows?: number | string
|
|
41
|
+
icon?: IconType
|
|
42
|
+
iconStart?: IconType
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface SlctInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
46
|
+
searchable?: boolean
|
|
47
|
+
multiselect?: boolean
|
|
48
|
+
clearable?: boolean
|
|
49
|
+
onSearch?: (search: string) => any
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
53
|
+
max?: number
|
|
54
|
+
min?: number
|
|
55
|
+
step?: number
|
|
56
|
+
layout?: 'default' | 'vertical' | 'horizontal'
|
|
57
|
+
padZero?: number
|
|
58
|
+
center?: boolean
|
|
59
|
+
useGrouping?: boolean
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>
|
|
63
|
+
|
|
64
|
+
export function getBaseField<T, P extends Path<T>>(
|
|
65
|
+
id?: P,
|
|
66
|
+
labelOrRest: string | Partial<BaseBagelField<T, P>> = {},
|
|
67
|
+
rest: Partial<BaseBagelField<T, P>> = {},
|
|
68
|
+
): BaseBagelField<T, P> {
|
|
69
|
+
if (typeof labelOrRest === 'object') return { id, ...labelOrRest }
|
|
70
|
+
return { id, label: labelOrRest, ...rest }
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function richText<T, P extends Path<T>>(id: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P> {
|
|
74
|
+
return {
|
|
75
|
+
$el: 'richtext',
|
|
76
|
+
class: options?.class,
|
|
77
|
+
required: options?.required,
|
|
78
|
+
id,
|
|
79
|
+
label,
|
|
80
|
+
vIf: options?.vIf,
|
|
81
|
+
placeholder: options?.placeholder,
|
|
82
|
+
attrs: { autocomplete: options?.autocomplete },
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): BaseBagelField<T, P> {
|
|
87
|
+
return {
|
|
88
|
+
$el: 'text',
|
|
89
|
+
id,
|
|
90
|
+
label,
|
|
91
|
+
class: options?.class,
|
|
92
|
+
required: options?.required,
|
|
93
|
+
vIf: options?.vIf,
|
|
94
|
+
disabled: options?.disabled,
|
|
95
|
+
placeholder: options?.placeholder,
|
|
96
|
+
defaultValue: options?.defaultValue,
|
|
97
|
+
validate: options?.validate,
|
|
98
|
+
onUpdate: options?.onUpdate,
|
|
99
|
+
attrs: {
|
|
100
|
+
type: options?.type,
|
|
101
|
+
pattern: options?.pattern,
|
|
102
|
+
multiline: options?.multiline,
|
|
103
|
+
autocomplete: options?.autocomplete,
|
|
104
|
+
rows: options?.rows,
|
|
105
|
+
code: options?.code,
|
|
106
|
+
autoheight: options?.autoheight,
|
|
107
|
+
icon: options?.icon,
|
|
108
|
+
iconStart: options?.iconStart,
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function selectField<T, P extends Path<T>>(
|
|
114
|
+
id: P,
|
|
115
|
+
label?: string,
|
|
116
|
+
options?: Option[] | (() => Option[]),
|
|
117
|
+
config?: SlctInputOptions<T, P>,
|
|
118
|
+
): BaseBagelField<T, P> {
|
|
119
|
+
return {
|
|
120
|
+
$el: 'select',
|
|
121
|
+
id,
|
|
122
|
+
// Runtime renderer also accepts a lazy `() => Option[]` loader, which the
|
|
123
|
+
// static `FieldOptions` type doesn't model — cast to preserve that.
|
|
124
|
+
options: options as BaseBagelField<T, P>['options'],
|
|
125
|
+
class: config?.class,
|
|
126
|
+
placeholder: config?.placeholder,
|
|
127
|
+
required: config?.required,
|
|
128
|
+
label,
|
|
129
|
+
defaultValue: config?.defaultValue,
|
|
130
|
+
vIf: config?.vIf,
|
|
131
|
+
attrs: {
|
|
132
|
+
disabled: config?.disabled,
|
|
133
|
+
searchable: config?.searchable,
|
|
134
|
+
multiselect: config?.multiselect,
|
|
135
|
+
onSearch: config?.onSearch,
|
|
136
|
+
clearable: config?.clearable,
|
|
137
|
+
autocomplete: config?.autocomplete,
|
|
138
|
+
},
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const slctField = selectField
|
|
143
|
+
|
|
144
|
+
interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
145
|
+
value?: string
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function checkField<T, P extends Path<T>>(id: P, label?: string, options?: CheckInputOptions<T, P>): BaseBagelField<T, P> {
|
|
149
|
+
return {
|
|
150
|
+
$el: 'check',
|
|
151
|
+
class: options?.class,
|
|
152
|
+
required: options?.required,
|
|
153
|
+
id,
|
|
154
|
+
label,
|
|
155
|
+
attrs: { value: options?.value },
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface EmailInputOptions<T, P extends Path<T>> extends InputOptions<T, P> {
|
|
160
|
+
autocorrect?: boolean
|
|
161
|
+
serverValidate?: boolean
|
|
162
|
+
preventFakeEmails?: boolean
|
|
163
|
+
pattern?: string
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function emailField<T, P extends Path<T>>(id: P, label?: string, options?: EmailInputOptions<T, P>): BaseBagelField<T, P> {
|
|
167
|
+
return {
|
|
168
|
+
$el: 'email',
|
|
169
|
+
id,
|
|
170
|
+
label,
|
|
171
|
+
class: options?.class,
|
|
172
|
+
required: options?.required,
|
|
173
|
+
vIf: options?.vIf,
|
|
174
|
+
attrs: {
|
|
175
|
+
autocorrect: options?.autocorrect,
|
|
176
|
+
serverValidate: options?.serverValidate,
|
|
177
|
+
preventFakeEmails: options?.preventFakeEmails,
|
|
178
|
+
pattern: options?.pattern,
|
|
179
|
+
},
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function dateField<T, P extends Path<T>>(id: P, label?: string, options?: DateOptions<T, P>): BaseBagelField<T, P> {
|
|
184
|
+
return {
|
|
185
|
+
$el: 'date',
|
|
186
|
+
class: options?.class,
|
|
187
|
+
required: options?.required,
|
|
188
|
+
id,
|
|
189
|
+
disabled: options?.disabled,
|
|
190
|
+
label,
|
|
191
|
+
defaultValue: options?.defaultValue,
|
|
192
|
+
vIf: options?.vIf,
|
|
193
|
+
attrs: {
|
|
194
|
+
disabled: options?.disabled,
|
|
195
|
+
autocomplete: options?.autocomplete,
|
|
196
|
+
enableTime: options?.enableTime,
|
|
197
|
+
mode: options?.mode,
|
|
198
|
+
locale: options?.locale,
|
|
199
|
+
timezone: options?.timezone,
|
|
200
|
+
},
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export function numField<T, P extends Path<T>>(id: P, label?: string, options?: NumFieldOptions<T, P>): BaseBagelField<T, P> {
|
|
205
|
+
return {
|
|
206
|
+
$el: 'number',
|
|
207
|
+
class: options?.class,
|
|
208
|
+
required: options?.required,
|
|
209
|
+
defaultValue: options?.defaultValue,
|
|
210
|
+
id,
|
|
211
|
+
label,
|
|
212
|
+
disabled: options?.disabled,
|
|
213
|
+
placeholder: options?.placeholder,
|
|
214
|
+
helptext: options?.helptext,
|
|
215
|
+
vIf: options?.vIf,
|
|
216
|
+
attrs: {
|
|
217
|
+
autocomplete: options?.autocomplete,
|
|
218
|
+
step: options?.step,
|
|
219
|
+
min: options?.min,
|
|
220
|
+
max: options?.max,
|
|
221
|
+
layout: options?.layout,
|
|
222
|
+
padZero: options?.padZero,
|
|
223
|
+
center: options?.center,
|
|
224
|
+
useGrouping: options?.useGrouping,
|
|
225
|
+
},
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function frmRow<T, P extends Path<T>>(...children: SchemaChild<T, P>[]): {
|
|
230
|
+
$el: string
|
|
231
|
+
class: string
|
|
232
|
+
children: SchemaChild<T, P>[]
|
|
233
|
+
} {
|
|
234
|
+
return { $el: 'div', class: 'flex gap-1 m_block align-items-end', children }
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export type UploadOptions<T, K extends Path<T>> = UploadInputProps & InputOptions<T, K>
|
|
238
|
+
|
|
239
|
+
export function uploadField<T, P extends Path<T>>(id: P, label?: string, options?: UploadOptions<T, P>): BaseBagelField<T, P> {
|
|
240
|
+
return { $el: 'upload', id, label, vIf: options?.vIf, attrs: { ...options } }
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
interface RangeOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
244
|
+
min?: number
|
|
245
|
+
max?: number
|
|
246
|
+
step?: number
|
|
247
|
+
rtl?: boolean
|
|
248
|
+
multiRange?: boolean
|
|
249
|
+
formatValue?: (value: number) => string
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function rangeField<T, P extends Path<T>>(id: P, label?: string, options?: RangeOptions<T, P>): BaseBagelField<T, P> {
|
|
253
|
+
return {
|
|
254
|
+
$el: 'range',
|
|
255
|
+
id,
|
|
256
|
+
label,
|
|
257
|
+
vIf: options?.vIf,
|
|
258
|
+
attrs: {
|
|
259
|
+
autocomplete: options?.autocomplete,
|
|
260
|
+
min: options?.min,
|
|
261
|
+
max: options?.max,
|
|
262
|
+
step: options?.step,
|
|
263
|
+
rtl: options?.rtl,
|
|
264
|
+
multiRange: options?.multiRange,
|
|
265
|
+
formatValue: options?.formatValue,
|
|
266
|
+
},
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function bglForm<T>(idOrField?: string | Field<T>, ...schema: Field<T>[]): {
|
|
271
|
+
$el: string
|
|
272
|
+
id?: string
|
|
273
|
+
attrs: { schema: (string | Field<T> | undefined)[] }
|
|
274
|
+
} {
|
|
275
|
+
if (typeof idOrField === 'string') {
|
|
276
|
+
return { $el: 'bagelform', id: idOrField, attrs: { schema: [idOrField, ...schema] } }
|
|
277
|
+
}
|
|
278
|
+
return { $el: 'bagelform', attrs: { schema: [idOrField, ...schema] } }
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export function telField<T, P extends Path<T>>(id: P, label?: string, options?: { [key: string]: any }): BaseBagelField<T, P> {
|
|
282
|
+
return { $el: 'tel', id, label, vIf: options?.vIf, attrs: options, class: options?.class }
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export function colorField<T, P extends Path<T>>(id: P, label?: string, options?: { [key: string]: any }): BaseBagelField<T, P> {
|
|
286
|
+
return { $el: 'color', id, label, vIf: options?.vIf, attrs: options, class: options?.class }
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export function findBglFieldById<T>(id: string, _schema: BglFormSchemaT<T>): Field<T> | undefined {
|
|
290
|
+
for (const field of _schema) {
|
|
291
|
+
if ((field as BaseBagelField<T, Path<T>>).id === id) return field as Field<T>
|
|
292
|
+
const children = (field as BaseBagelField<T, Path<T>>).children
|
|
293
|
+
if (children && Number(children.length) > 0) {
|
|
294
|
+
const fieldChildren = children.filter(
|
|
295
|
+
(c): c is Field<T> => typeof c === 'object' && c !== null && '$el' in c,
|
|
296
|
+
)
|
|
297
|
+
const child = findBglFieldById(id, fieldChildren as BglFormSchemaT<T>)
|
|
298
|
+
if (child) return child
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return undefined
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
export interface ArrayFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
|
|
305
|
+
delete?: boolean
|
|
306
|
+
add?: boolean
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export type ArrayType = 'number' | 'text'
|
|
310
|
+
|
|
311
|
+
export function arrField<T, P extends Path<T>>(
|
|
312
|
+
id: P,
|
|
313
|
+
label: string,
|
|
314
|
+
schemaOrType: BglFormSchemaT<any> | ArrayType,
|
|
315
|
+
options?: ArrayFieldOptions<T, P>,
|
|
316
|
+
): BaseBagelField<T, P> {
|
|
317
|
+
const attrs: Record<string, any> = { delete: true, add: true, ...options }
|
|
318
|
+
if (typeof schemaOrType === 'string') attrs.type = schemaOrType
|
|
319
|
+
else attrs.schema = schemaOrType
|
|
320
|
+
return { label, id, class: options?.class, $el: 'array', vIf: options?.vIf, attrs }
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
export function useForm() {
|
|
324
|
+
return {
|
|
325
|
+
txtField,
|
|
326
|
+
selectField,
|
|
327
|
+
checkField,
|
|
328
|
+
dateField,
|
|
329
|
+
numField,
|
|
330
|
+
frmRow,
|
|
331
|
+
uploadField,
|
|
332
|
+
rangeField,
|
|
333
|
+
bglForm,
|
|
334
|
+
telField,
|
|
335
|
+
colorField,
|
|
336
|
+
arrField,
|
|
337
|
+
richText,
|
|
338
|
+
findBglFieldById,
|
|
339
|
+
getBaseField,
|
|
340
|
+
}
|
|
341
|
+
}
|