@@ -57,6 +57,13 @@ import { fixOldInputCompData } from "../textInputComp/textInputConstants";
57
57
58
58
59
59
const EventOptions = [ changeEvent , focusEvent , blurEvent ] as const ;
60
+ const PickerModeOptions = [
61
+ { label : "Date" , value : "date" } ,
62
+ { label : "Week" , value : "week" } ,
63
+ { label : "Month" , value : "month" } ,
64
+ { label : "Quarter" , value : "quarter" } ,
65
+ { label : "Year" , value : "year" } ,
66
+ ]
60
67
61
68
const validationChildren = {
62
69
showValidationWhenEmpty : BoolControl ,
@@ -91,11 +98,12 @@ const commonChildren = {
91
98
inputFieldStyle : styleControl ( DateTimeStyle , 'inputFieldStyle' ) ,
92
99
childrenInputFieldStyle : styleControl ( ChildrenMultiSelectStyle , 'childrenInputFieldStyle' ) ,
93
100
timeZone : dropdownControl ( timeZoneOptions , Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ) ,
101
+ pickerMode : dropdownControl ( PickerModeOptions , 'date' ) ,
94
102
} ;
95
103
type CommonChildrenType = RecordConstructorToComp < typeof commonChildren > ;
96
104
97
105
const datePickerProps = ( props : RecordConstructorToView < typeof commonChildren > ) =>
98
- _ . pick ( props , "format" , "inputFormat" , "showTime" , "use12Hours" , "hourStep" , "minuteStep" , "secondStep" , "placeholder" ) ;
106
+ _ . pick ( props , "format" , "inputFormat" , "showTime" , "use12Hours" , "hourStep" , "minuteStep" , "secondStep" , "placeholder" , "pickerMode" ) ;
99
107
100
108
const timeFields = ( children : CommonChildrenType , isMobile ?: boolean ) => [
101
109
children . showTime . propertyView ( { label : trans ( "date.showTime" ) } ) ,
@@ -168,6 +176,7 @@ export type DateCompViewProps = Pick<
168
176
| "secondStep"
169
177
| "viewRef"
170
178
| "timeZone"
179
+ | "pickerMode"
171
180
> & {
172
181
onFocus : ( ) => void ;
173
182
onBlur : ( ) => void ;
@@ -178,6 +187,41 @@ export type DateCompViewProps = Pick<
178
187
placeholder ?: string | [ string , string ] ;
179
188
} ;
180
189
190
+ const getFormattedDate = (
191
+ time : dayjs . Dayjs | null | undefined ,
192
+ showTime : boolean ,
193
+ pickerMode : string ,
194
+ ) => {
195
+ let updatedTime = undefined ;
196
+ if ( time ?. isValid ( ) ) {
197
+ switch ( pickerMode ) {
198
+ case 'week' : {
199
+ updatedTime = dayjs ( time ) . day ( 0 ) ;
200
+ break ;
201
+ }
202
+ case 'month' : {
203
+ updatedTime = dayjs ( time ) . set ( 'date' , 1 ) ;
204
+ break ;
205
+ }
206
+ case 'quarter' : {
207
+ updatedTime = dayjs ( time ) . set ( 'date' , 1 ) ;
208
+ break ;
209
+ }
210
+ case 'year' : {
211
+ updatedTime = dayjs ( time ) . set ( 'date' , 1 ) . set ( 'month' , 1 ) ;
212
+ break ;
213
+ }
214
+ default : {
215
+ updatedTime = time ;
216
+ break ;
217
+ }
218
+ }
219
+ }
220
+ return updatedTime
221
+ ? updatedTime . format ( showTime ? DATE_TIME_FORMAT : DATE_FORMAT )
222
+ : "" ;
223
+ }
224
+
181
225
const DatePickerTmpCmp = new UICompBuilder ( childrenMap , ( props ) => {
182
226
const defaultValue = { ...props . defaultValue } . value ;
183
227
const value = { ...props . value } . value ;
@@ -226,9 +270,7 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => {
226
270
value = { tempValue ?. isValid ( ) ? tempValue : null }
227
271
onChange = { ( time ) => {
228
272
handleDateChange (
229
- time && time . isValid ( )
230
- ? time . format ( props . showTime ? DATE_TIME_FORMAT : DATE_FORMAT )
231
- : "" ,
273
+ getFormattedDate ( time , props . showTime , props . pickerMode ) ,
232
274
props . value . onChange ,
233
275
props . onEvent
234
276
) ;
@@ -255,9 +297,12 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => {
255
297
placeholder : "2022-04-07 21:39:59" ,
256
298
tooltip : trans ( "date.formatTip" )
257
299
} ) }
300
+ { children . pickerMode . propertyView ( {
301
+ label : trans ( "prop.pickerMode" )
302
+ } ) }
258
303
{ children . timeZone . propertyView ( {
259
304
label : trans ( "prop.timeZone" )
260
- } ) }
305
+ } ) }
261
306
</ Section >
262
307
263
308
< FormDataPropertyView { ...children } />
@@ -417,12 +462,10 @@ let DateRangeTmpCmp = (function () {
417
462
disabledTime = { ( ) => disabledTime ( props . minTime , props . maxTime ) }
418
463
onChange = { ( start , end ) => {
419
464
props . start . onChange (
420
- start && start . isValid ( )
421
- ? start . format ( props . showTime ? DATE_TIME_FORMAT : DATE_FORMAT )
422
- : ""
465
+ getFormattedDate ( start , props . showTime , props . pickerMode )
423
466
) ;
424
467
props . end . onChange (
425
- end && end . isValid ( ) ? end . format ( props . showTime ? DATE_TIME_FORMAT : DATE_FORMAT ) : ""
468
+ getFormattedDate ( end , props . showTime , props . pickerMode )
426
469
) ;
427
470
props . onEvent ( "change" ) ;
428
471
} }
@@ -468,6 +511,9 @@ let DateRangeTmpCmp = (function () {
468
511
placeholder : "2022-04-07 21:39:59" ,
469
512
tooltip : trans ( "date.formatTip" ) ,
470
513
} ) }
514
+ { children . pickerMode . propertyView ( {
515
+ label : trans ( "prop.pickerMode" )
516
+ } ) }
471
517
{ children . timeZone . propertyView ( {
472
518
label : trans ( "prop.timeZone" )
473
519
} ) }
0 commit comments