1+ import type { LitElement } from 'lit' ;
12import {
2- convertToDate ,
3- convertToDateRange ,
4- getDateFormValue ,
5- } from '../../../calendar/helpers.js' ;
6- import type { DateRangeValue } from '../../../date-range-picker/date-range-picker.js' ;
7- import { asNumber } from '../../util.js' ;
8- import type { FormValueType , IgcFormControl } from './types.js' ;
9-
10- type FormValueTransformers < T > = {
11- setValue : ( value : T ) => T ;
12- getValue : ( value : T ) => T ;
13- setDefaultValue : ( value : T ) => T ;
14- getDefaultValue : ( value : T ) => T ;
15- setFormValue : ( value : T , host : IgcFormControl ) => FormValueType ;
16- } ;
17-
18- type FormValueConfig < T > = {
19- initialValue : T ;
20- initialDefaultValue ?: T ;
21- transformers ?: Partial < FormValueTransformers < T > > ;
22- } ;
23-
24- const defaultTransformers : FormValueTransformers < string > = {
25- setValue : ( value ) => value || '' ,
26- getValue : ( value ) => value ,
27- setDefaultValue : ( value ) => value || '' ,
28- getDefaultValue : ( value ) => value ,
29- setFormValue : ( value , _ : IgcFormControl ) => value || null ,
30- } ;
31-
32- export const defaultBooleanTransformers : Partial <
33- FormValueTransformers < boolean >
34- > = {
35- setValue : Boolean ,
36- setDefaultValue : Boolean ,
37- setFormValue : ( checked , host ) => {
38- return checked && 'value' in host ? ( host . value as string ) || 'on' : null ;
39- } ,
40- } ;
41-
42- export const defaultNumberTransformers : Partial < FormValueTransformers < number > > =
43- {
44- setValue : asNumber ,
45- setDefaultValue : asNumber ,
46- setFormValue : ( value ) => value . toString ( ) ,
47- } ;
48-
49- export const defaultDateTimeTransformers : Partial <
50- FormValueTransformers < Date | null >
51- > = {
52- setValue : convertToDate ,
53- setDefaultValue : convertToDate ,
54- setFormValue : getDateFormValue ,
55- } ;
56-
57- export const defaultFileListTransformer : Partial <
58- FormValueTransformers < FileList | null >
59- > = {
60- setValue : ( value ) => value || null ,
61- getValue : ( value ) => value ,
62- setDefaultValue : ( value ) => value || null ,
63- getDefaultValue : ( value ) => value ,
64- setFormValue : ( files : FileList | null , host : IgcFormControl ) => {
65- if ( ! host . name || ! files ) {
66- return null ;
67- }
68-
69- const data = new FormData ( ) ;
70-
71- for ( const file of Array . from ( files ) ) {
72- data . append ( host . name , file ) ;
73- }
74-
75- return data ;
76- } ,
77- } ;
78-
79- /**
80- * Converts a DateDateRangeValue object to FormData with
81- * start and end Date values as ISO 8601 strings.
82- * The keys are prefixed with the host name
83- * and suffixed with 'start' or 'end' accordingly.
84- * In case the host does not have a name, it does not participate in form submission.
85- *
86- * If the date values are null or undefined, the form data values
87- * are empty strings ''.
88- */
89- export function getDateRangeFormValue (
90- value : DateRangeValue | null ,
91- host : IgcFormControl
92- ) : FormValueType {
93- if ( ! host . name ) {
94- return null ;
95- }
96-
97- const start = value ?. start ?. toISOString ( ) ;
98- const end = value ?. end ?. toISOString ( ) ;
99-
100- const fd = new FormData ( ) ;
101- const prefix = `${ host . name } -` ;
102-
103- if ( start ) {
104- fd . append ( `${ prefix } start` , start ) ;
105- }
106- if ( end ) {
107- fd . append ( `${ prefix } end` , end ) ;
108- }
109-
110- return fd ;
111- }
112-
113- export const defaultDateRangeTransformers : Partial <
114- FormValueTransformers < DateRangeValue | null >
115- > = {
116- setValue : convertToDateRange ,
117- setDefaultValue : convertToDateRange ,
118- setFormValue : getDateRangeFormValue ,
119- } ;
3+ type FormValueConfig ,
4+ FormValueDefaultTransformers ,
5+ type FormValueTransformers ,
6+ } from './form-transformers.js' ;
7+ import type { IgcFormControl } from './types.js' ;
1208
1219/* blazorSuppress */
12210export class FormValue < T > {
12311 private static readonly setFormValueKey = '_setFormValue' as const ;
12412
125- private _host : IgcFormControl ;
13+ private readonly _host : IgcFormControl ;
14+ private readonly _transformers : FormValueTransformers < T > ;
15+ private readonly _setFormValue : IgcFormControl [ typeof FormValue . setFormValueKey ] ;
16+
12617 private _value : T ;
12718 private _defaultValue : T ;
128- private _transformers : FormValueTransformers < T > ;
129- private _setFormValue : IgcFormControl [ typeof FormValue . setFormValueKey ] ;
13019
13120 constructor ( host : IgcFormControl , config : FormValueConfig < T > ) {
13221 this . _host = host ;
@@ -135,7 +24,7 @@ export class FormValue<T> {
13524 this . _setFormValue = host [ FormValue . setFormValueKey ] ;
13625
13726 this . _transformers = {
138- ...defaultTransformers ,
27+ ...FormValueDefaultTransformers ,
13928 ...config . transformers ,
14029 } as FormValueTransformers < T > ;
14130 }
@@ -166,10 +55,8 @@ export class FormValue<T> {
16655}
16756
16857export function createFormValueState < T > (
169- host : IgcFormControl ,
58+ host : LitElement ,
17059 config : FormValueConfig < T >
17160) : FormValue < T > {
172- return new FormValue ( host , config ) ;
61+ return new FormValue ( host as IgcFormControl , config ) ;
17362}
174-
175- export type FormValueOf < T > = ReturnType < typeof createFormValueState < T > > ;
0 commit comments