@@ -57,6 +57,13 @@ import { fixOldInputCompData } from "../textInputComp/textInputConstants";
5757
5858
5959const 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+ ]
6067
6168const validationChildren = {
6269 showValidationWhenEmpty : BoolControl ,
@@ -91,11 +98,12 @@ const commonChildren = {
9198 inputFieldStyle : styleControl ( DateTimeStyle , 'inputFieldStyle' ) ,
9299 childrenInputFieldStyle : styleControl ( ChildrenMultiSelectStyle , 'childrenInputFieldStyle' ) ,
93100 timeZone : dropdownControl ( timeZoneOptions , Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ) ,
101+ pickerMode : dropdownControl ( PickerModeOptions , 'date' ) ,
94102} ;
95103type CommonChildrenType = RecordConstructorToComp < typeof commonChildren > ;
96104
97105const 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" ) ;
99107
100108const timeFields = ( children : CommonChildrenType , isMobile ?: boolean ) => [
101109 children . showTime . propertyView ( { label : trans ( "date.showTime" ) } ) ,
@@ -168,6 +176,7 @@ export type DateCompViewProps = Pick<
168176 | "secondStep"
169177 | "viewRef"
170178 | "timeZone"
179+ | "pickerMode"
171180> & {
172181 onFocus : ( ) => void ;
173182 onBlur : ( ) => void ;
@@ -178,6 +187,41 @@ export type DateCompViewProps = Pick<
178187 placeholder ?: string | [ string , string ] ;
179188} ;
180189
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+
181225const DatePickerTmpCmp = new UICompBuilder ( childrenMap , ( props ) => {
182226 const defaultValue = { ...props . defaultValue } . value ;
183227 const value = { ...props . value } . value ;
@@ -226,9 +270,7 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => {
226270 value = { tempValue ?. isValid ( ) ? tempValue : null }
227271 onChange = { ( time ) => {
228272 handleDateChange (
229- time && time . isValid ( )
230- ? time . format ( props . showTime ? DATE_TIME_FORMAT : DATE_FORMAT )
231- : "" ,
273+ getFormattedDate ( time , props . showTime , props . pickerMode ) ,
232274 props . value . onChange ,
233275 props . onEvent
234276 ) ;
@@ -255,9 +297,12 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => {
255297 placeholder : "2022-04-07 21:39:59" ,
256298 tooltip : trans ( "date.formatTip" )
257299 } ) }
300+ { children . pickerMode . propertyView ( {
301+ label : trans ( "prop.pickerMode" )
302+ } ) }
258303 { children . timeZone . propertyView ( {
259304 label : trans ( "prop.timeZone" )
260- } ) }
305+ } ) }
261306 </ Section >
262307
263308 < FormDataPropertyView { ...children } />
@@ -417,12 +462,10 @@ let DateRangeTmpCmp = (function () {
417462 disabledTime = { ( ) => disabledTime ( props . minTime , props . maxTime ) }
418463 onChange = { ( start , end ) => {
419464 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 )
423466 ) ;
424467 props . end . onChange (
425- end && end . isValid ( ) ? end . format ( props . showTime ? DATE_TIME_FORMAT : DATE_FORMAT ) : ""
468+ getFormattedDate ( end , props . showTime , props . pickerMode )
426469 ) ;
427470 props . onEvent ( "change" ) ;
428471 } }
@@ -468,6 +511,9 @@ let DateRangeTmpCmp = (function () {
468511 placeholder : "2022-04-07 21:39:59" ,
469512 tooltip : trans ( "date.formatTip" ) ,
470513 } ) }
514+ { children . pickerMode . propertyView ( {
515+ label : trans ( "prop.pickerMode" )
516+ } ) }
471517 { children . timeZone . propertyView ( {
472518 label : trans ( "prop.timeZone" )
473519 } ) }
0 commit comments