@@ -41,6 +41,8 @@ export default function CreatePage({
4141} : CreatePageProps ) : JSX . Element {
4242 const { editing, setEditing, onEditStop, setDialogPage } = useCalendarState ( ) ;
4343 const { t } = useTranslation ( ) ;
44+ const { user } = useUser ( ) ;
45+ const { org } = useOrg ( ) ;
4446 const nav = useNav ( ) ;
4547
4648 const prevLoading = usePrevious ( loading ) ;
@@ -78,11 +80,11 @@ export default function CreatePage({
7880 ) ;
7981
8082 const subjectOptions = useMemo ( ( ) => {
81- const subjects : Subject [ ] = [ ] ;
83+ const subjects : Subject [ ] = [ ] ;
8284 people . forEach ( ( p ) => {
83- if ( p . roles . includes ( 'tutor' ) )
85+ if ( p . roles . includes ( 'tutor' ) )
8486 p . subjects . forEach ( ( s ) => {
85- if ( subjects . every ( ( o ) => o . id !== s . id ) ) subjects . push ( s )
87+ if ( subjects . every ( ( o ) => o . id !== s . id ) ) subjects . push ( s ) ;
8688 } ) ;
8789 } ) ;
8890 return subjects . length ? subjects : undefined ;
@@ -111,26 +113,33 @@ export default function CreatePage({
111113 const onStudentsChange = useCallback (
112114 ( u : User [ ] ) => {
113115 setEditing ( ( prev ) => {
114- const ppl = prev . people . filter ( ( p ) => ! p . roles . includes ( 'tutee' ) ) ;
116+ const ppl = [
117+ ...prev . people . filter ( ( p ) => ! p . roles . includes ( 'tutee' ) ) ,
118+ ...u . map ( ( p ) => new User ( { ...p , roles : [ 'tutee' ] } ) ) ,
119+ ] ;
120+ u . forEach ( ( p ) =>
121+ p . parents . forEach ( ( parentId ) => {
122+ if ( ppl . some ( ( person ) => person . id === parentId ) ) return ;
123+ const usr =
124+ user . id === parentId ? user : { name : `${ p . name } 's Parent` } ;
125+ ppl . push ( new User ( { ...usr , id : parentId , roles : [ 'parent' ] } ) ) ;
126+ } )
127+ ) ;
115128 return new Meeting ( {
116129 ...prev ,
117- people : [
118- ...ppl ,
119- ...u . map ( ( p ) => new User ( { ...p , roles : [ 'tutee' ] } ) ) ,
120- ] ,
130+ people : ppl ,
121131 } ) ;
122132 } ) ;
123133 } ,
124- [ setEditing ]
134+ [ setEditing , user ]
125135 ) ;
126136 const onTutorsChange = useCallback (
127137 ( u : User [ ] ) => {
128138 setEditing ( ( prev ) => {
129- const ppl = prev . people . filter ( ( p ) => ! p . roles . includes ( 'tutor' ) ) ;
130139 return new Meeting ( {
131140 ...prev ,
132141 people : [
133- ...ppl ,
142+ ...prev . people . filter ( ( p ) => ! p . roles . includes ( 'tutor' ) ) ,
134143 ...u . map ( ( p ) => new User ( { ...p , roles : [ 'tutor' ] } ) ) ,
135144 ] ,
136145 } ) ;
@@ -141,11 +150,10 @@ export default function CreatePage({
141150 const onParentsChange = useCallback (
142151 ( u : User [ ] ) => {
143152 setEditing ( ( prev ) => {
144- const ppl = prev . people . filter ( ( p ) => ! p . roles . includes ( 'parent' ) ) ;
145153 return new Meeting ( {
146154 ...prev ,
147155 people : [
148- ...ppl ,
156+ ...prev . people . filter ( ( p ) => ! p . roles . includes ( 'parent' ) ) ,
149157 ...u . map ( ( p ) => new User ( { ...p , roles : [ 'parent' ] } ) ) ,
150158 ] ,
151159 } ) ;
@@ -154,8 +162,6 @@ export default function CreatePage({
154162 [ setEditing ]
155163 ) ;
156164
157- const { user } = useUser ( ) ;
158- const { org } = useOrg ( ) ;
159165 const studentsQuery = useMemo < Partial < UsersQueryInterface > > (
160166 ( ) => ( org ? { orgs : [ org . id ] } : { met : [ user . id , 'tutee' ] } ) ,
161167 [ org , user . id ]
@@ -245,7 +251,8 @@ export default function CreatePage({
245251 textarea
246252 rows = { 4 }
247253 placeholder = { t ( 'meeting:description-placeholder' , {
248- subject : join ( editing . subjects . map ( ( s ) => s . name ) ) || 'Computer Science' ,
254+ subject :
255+ join ( editing . subjects . map ( ( s ) => s . name ) ) || 'Computer Science' ,
249256 } ) }
250257 label = 'Add description'
251258 className = { styles . field }
0 commit comments