7
7
8
8
import { useCallback } from 'react' ;
9
9
import { Grid } from '@mui/material' ;
10
+ import { type DateOrTimeView } from '@mui/x-date-pickers' ;
10
11
import { useIntl } from 'react-intl' ;
11
12
import { type Option , SubmitButton , useSnackMessage } from '@gridsuite/commons-ui' ;
12
13
import yup from '../../utils/yup-config' ;
@@ -16,7 +17,7 @@ import { yupResolver } from '@hookform/resolvers/yup';
16
17
import { FormContainer , SelectElement , TextareaAutosizeElement } from 'react-hook-form-mui' ;
17
18
import { DateTimePickerElement , type DateTimePickerElementProps } from 'react-hook-form-mui/date-pickers' ;
18
19
import { TZDate } from '@date-fns/tz' ;
19
- import { addSeconds } from 'date-fns' ;
20
+ import { endOfMinute , startOfMinute } from 'date-fns' ;
20
21
import { UserAdminSrv } from '../../services' ;
21
22
import { getErrorMessage , handleAnnouncementCreationErrors } from '../../utils/error' ;
22
23
@@ -49,9 +50,10 @@ const formSchema = yup
49
50
type FormSchema = InferType < typeof formSchema > ;
50
51
51
52
const datetimePickerTransform : NonNullable < DateTimePickerElementProps < FormSchema > [ 'transform' ] > = {
52
- input : ( value ) => ( value && new TZDate ( value ) ) || null ,
53
- output : ( value , context ) => value ?. toISOString ( ) || '' ,
53
+ input : ( value ) => ( value ? new TZDate ( value ) : null ) ,
54
+ output : ( value ) => value ?. toISOString ( ) ?? '' ,
54
55
} ;
56
+ const pickerView = [ 'year' , 'month' , 'day' , 'hours' , 'minutes' ] as const satisfies readonly DateOrTimeView [ ] ;
55
57
56
58
export default function AddAnnouncementForm ( { onAnnouncementCreated } : Readonly < AddAnnouncementFormProps > ) {
57
59
const intl = useIntl ( ) ;
@@ -66,16 +68,16 @@ export default function AddAnnouncementForm({ onAnnouncementCreated }: Readonly<
66
68
[SEVERITY]: null,
67
69
},*/
68
70
} ) ;
69
- const { register , setValue , handleSubmit , formState, control , getValues } = formContext ;
71
+ const { formState, getValues } = formContext ;
70
72
const startDateValue = getValues ( START_DATE ) ;
71
73
72
74
const onSubmit = useCallback < SubmitHandler < FormSchema > > (
73
75
( params ) => {
74
76
UserAdminSrv . addAnnouncement ( {
75
77
//id: crypto.randomUUID(),
76
78
message : params . message ,
77
- startDate : params . startDate ,
78
- endDate : params . endDate ,
79
+ startDate : startOfMinute ( new TZDate ( params . startDate ) ) . toISOString ( ) ,
80
+ endDate : endOfMinute ( new TZDate ( params . endDate ) ) . toISOString ( ) ,
79
81
severity : params . severity ,
80
82
} )
81
83
. then ( ( ) => onAnnouncementCreated ?.( ) )
@@ -107,8 +109,9 @@ export default function AddAnnouncementForm({ onAnnouncementCreated }: Readonly<
107
109
< DateTimePickerElement < FormSchema >
108
110
name = { START_DATE }
109
111
label = { intl . formatMessage ( { id : 'announcements.table.startDate' } ) }
110
- transform = { datetimePickerTransform } //TODO round startOf(min)
112
+ transform = { datetimePickerTransform }
111
113
timezone = "system"
114
+ views = { pickerView }
112
115
timeSteps = { { hours : 1 , minutes : 1 , seconds : 0 } }
113
116
disablePast
114
117
/>
@@ -117,11 +120,12 @@ export default function AddAnnouncementForm({ onAnnouncementCreated }: Readonly<
117
120
< DateTimePickerElement < FormSchema >
118
121
name = { END_DATE }
119
122
label = { intl . formatMessage ( { id : 'announcements.table.endDate' } ) }
120
- transform = { datetimePickerTransform } //TODO round startOf(min)
123
+ transform = { datetimePickerTransform }
121
124
timezone = "system"
125
+ views = { pickerView }
122
126
timeSteps = { { hours : 1 , minutes : 1 , seconds : 0 } }
123
127
disablePast
124
- minDateTime = { startDateValue ? addSeconds ( new TZDate ( startDateValue ) , 1 ) : undefined }
128
+ minDateTime = { startDateValue ? new TZDate ( startDateValue ) : undefined }
125
129
/>
126
130
</ Grid >
127
131
< Grid item xs = { 2 } >
0 commit comments