Skip to content

Commit 7fae866

Browse files
fix(calendar/dialog): auto-select children parents
1 parent 7579c5a commit 7fae866

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

components/calendar/dialog/create-page.tsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)