@@ -11,13 +11,20 @@ export const isTime = (v: string): boolean => {
1111 return timeLikeRegex . test ( v ) ;
1212} ;
1313
14+ export const isDate = ( v : string ) : boolean => {
15+ // Accept common backend date shapes, including:
16+ // YYYY-MM-DD
17+ const dateLikeRegex = / ^ \d { 4 } - \d { 2 } - \d { 2 } $ / ;
18+ return dateLikeRegex . test ( v ) ;
19+ } ;
20+
1421export const isDateTime = ( v : string ) : boolean => {
1522 // Accept common backend date/datetime shapes, including:
16- // YYYY-MM-DD, YYYY-MM- DDTHH:mm:ss(.ffffff), YYYY-MM-DD HH:mm(:ss)
23+ // YYYY-MM-DDTHH:mm:ss(.ffffff), YYYY-MM-DD HH:mm(:ss)
1724 // with optional timezone suffix.
18- const dateLikeRegex =
25+ const dateTimeLikeRegex =
1926 / ^ \d { 4 } - \d { 2 } - \d { 2 } (?: [ T \s ] \d { 2 } : \d { 2 } (?: : \d { 2 } (?: \. \d { 1 , 6 } ) ? ) ? (?: Z | [ + - ] \d { 2 } : ? \d { 2 } ) ? ) ? $ / ;
20- return dateLikeRegex . test ( v ) ;
27+ return dateTimeLikeRegex . test ( v ) ;
2128} ;
2229
2330export const isNumeric = ( v : string ) : boolean => {
@@ -87,13 +94,23 @@ export const transformFiltersToServer = (data: any) => {
8794 const filters = transformDataToServer ( data ) ;
8895 const filtersData : Record < string , string | string [ ] > = { } ;
8996 for ( const [ k , v ] of Object . entries ( filters ) ) {
90- if ( isArray ( v ) && v . length === 2 && v . every ( isDateTime ) ) {
97+ if (
98+ isArray ( v ) &&
99+ v . length === 2 &&
100+ v . every ( ( item : any ) => isDateTime ( item ) || isDate ( item ) )
101+ ) {
91102 filtersData [ `${ k } __gte` ] = v [ 0 ] ;
92103 filtersData [ `${ k } __lte` ] = v [ 1 ] ;
93104 } else if ( isArray ( v ) ) {
94105 // Serialize __in as comma-separated so one query param works (status__in=active,inactive)
95106 filtersData [ `${ k } __in` ] = v . join ( "," ) ;
96- } else if ( isDateTime ( v ) || isTime ( v ) || isNumeric ( v ) || isBoolean ( v ) ) {
107+ } else if (
108+ isDateTime ( v ) ||
109+ isDate ( v ) ||
110+ isTime ( v ) ||
111+ isNumeric ( v ) ||
112+ isBoolean ( v )
113+ ) {
97114 filtersData [ k ] = v as string ;
98115 } else {
99116 filtersData [ `${ k } __icontains` ] = String ( v ) ;
@@ -112,12 +129,15 @@ export const transformValueFromServer = (value: any): any => {
112129 if ( isBoolean ( value ) ) {
113130 return value !== "false" && ! ! value ;
114131 }
115- if ( isDateTime ( value ) ) {
132+ if ( isDate ( value ) ) {
116133 return dayjs ( value ) ;
117134 }
118135 if ( isTime ( value ) ) {
119136 return dayjs ( `1970-01-01T${ value } ` ) ;
120137 }
138+ if ( isDateTime ( value ) ) {
139+ return dayjs ( value ) ;
140+ }
121141 return value ;
122142} ;
123143
@@ -163,11 +183,16 @@ export const transformColumnValueFromServer = (
163183 if ( isBoolean ( value ) ) {
164184 return < Checkbox checked = { value } /> ;
165185 }
166- if ( isDateTime ( value ) ) {
167- return dayjs ( value ) . format ( dateTimeFormat ) ;
186+ if ( isDate ( value ) ) {
187+ // remove time from dateTimeFormat ss optional
188+ const dateFormat = dateTimeFormat ?. replace ( / H H : m m ( : s s ) ? (?: .S S S ) ? / , "" ) ;
189+ return dayjs ( value ) . format ( dateFormat ) ;
168190 }
169191 if ( isTime ( value ) ) {
170192 return value ;
171193 }
194+ if ( isDateTime ( value ) ) {
195+ return dayjs ( value ) . format ( dateTimeFormat ) ;
196+ }
172197 return value ;
173198} ;
0 commit comments