@@ -5,6 +5,7 @@ import useTranslation from 'next-translate/useTranslation';
55
66import Button from 'components/button' ;
77import MatchSelect from 'components/match-select' ;
8+ import RecurSelect from 'components/recur-select' ;
89import SubjectSelect from 'components/subject-select' ;
910import TimeSelect from 'components/time-select' ;
1011import { useNav } from 'components/dialog/context' ;
@@ -39,6 +40,7 @@ export default function CreatePage({
3940 setLoading,
4041 setChecked,
4142} : CreatePageProps ) : JSX . Element {
43+ // TODO: Revalidate local data after creation to account for recur rules.
4244 const updateRemote = useCallback ( async ( updated : Meeting ) => {
4345 const created = new Meeting ( clone ( { ...updated , id : '' } ) ) . toJSON ( ) ;
4446 const { data } = await axios . post < MeetingJSON > ( '/api/meetings' , created ) ;
@@ -89,7 +91,18 @@ export default function CreatePage({
8991 [ setMeeting ]
9092 ) ;
9193 const onTimeChange = useCallback (
92- ( time : Timeslot ) => setMeeting ( ( prev ) => new Meeting ( { ...prev , time } ) ) ,
94+ ( time : Timeslot ) => {
95+ setMeeting ( ( prev ) => new Meeting ( { ...prev , time } ) ) ;
96+ } ,
97+ [ setMeeting ]
98+ ) ;
99+ const onRecurChange = useCallback (
100+ ( recur : string ) => {
101+ setMeeting ( ( prev ) => {
102+ const time = new Timeslot ( { ...prev . time , recur } ) ;
103+ return new Meeting ( { ...prev , time } ) ;
104+ } ) ;
105+ } ,
93106 [ setMeeting ]
94107 ) ;
95108 const onNotesChange = useCallback (
@@ -141,6 +154,13 @@ export default function CreatePage({
141154 renderToPortal
142155 outlined
143156 />
157+ < RecurSelect
158+ label = 'Select recurrence'
159+ className = { styles . field }
160+ onChange = { onRecurChange }
161+ value = { meeting . time . recur }
162+ outlined
163+ />
144164 < TextField
145165 outlined
146166 textarea
0 commit comments