-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathform-transformers.ts
More file actions
110 lines (95 loc) · 2.83 KB
/
form-transformers.ts
File metadata and controls
110 lines (95 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import {
convertToDate,
convertToDateRange,
getDateFormValue,
} from '../../../calendar/helpers.js';
import type { DateRangeValue } from '../../../date-range-picker/date-range-picker.js';
import { asNumber } from '../../util.js';
import type { FormValueType, IgcFormControl } from './types.js';
export type FormValueTransformers<T> = {
setValue: (value: T) => T;
getValue: (value: T) => T;
setDefaultValue: (value: T) => T;
getDefaultValue: (value: T) => T;
setFormValue: (value: T, host: IgcFormControl) => FormValueType;
};
export type FormValueConfig<T> = {
initialValue: T;
initialDefaultValue?: T;
transformers?: Partial<FormValueTransformers<T>>;
};
// Transformers
export const FormValueDefaultTransformers: FormValueTransformers<string> = {
setValue: (value) => value || '',
getValue: (value) => value,
setDefaultValue: (value) => value || '',
getDefaultValue: (value) => value,
setFormValue: (value, _) => value || null,
};
export const FormValueBooleanTransformers: Partial<
FormValueTransformers<boolean>
> = {
setValue: Boolean,
setDefaultValue: Boolean,
setFormValue: (checked, host) =>
checked && 'value' in host ? (host.value as string) || 'on' : null,
};
export const FormValueNumberTransformers: Partial<
FormValueTransformers<number>
> = {
setValue: asNumber,
setDefaultValue: asNumber,
setFormValue: (value) => value.toString(),
};
export const FormValueDateTimeTransformers: Partial<
FormValueTransformers<Date | null>
> = {
setValue: convertToDate,
setDefaultValue: convertToDate,
setFormValue: getDateFormValue,
};
export const FormValueDateRangeTransformers: Partial<
FormValueTransformers<DateRangeValue | null>
> = {
setValue: convertToDateRange,
setDefaultValue: convertToDateRange,
setFormValue: (value, host) => {
if (!host.name) {
return null;
}
const start = value?.start?.toISOString();
const end = value?.end?.toISOString();
const formData = new FormData();
if (start) {
formData.append(`${host.name}-start`, start);
}
if (end) {
formData.append(`${host.name}-end`, end);
}
return formData;
},
};
/* blazorSuppress */
export const FormValueFileListTransformers: FormValueTransformers<FileList | null> =
{
setValue: (value) => value || null,
getValue: (value) => value,
setDefaultValue: (value) => value || null,
getDefaultValue: (value) => value,
setFormValue: (files, host) => {
if (!(host.name && files)) {
return null;
}
const formData = new FormData();
for (const file of files) {
formData.append(host.name, file);
}
return formData;
},
};
export const FormValueSelectTransformers: Partial<
FormValueTransformers<string | undefined>
> = {
setValue: (value) => value || undefined,
setDefaultValue: (value) => value || undefined,
};