)}
- {overrideDate.availOverrideTimeslots.map((timeslot) => {
+ {overrideDate.availOverrideTimeslots.map((timeslot, idx) => {
return (
-
+
{format(new Date(timeslot.startTime), "h:mm aaa")} -{" "}
{format(new Date(timeslot.endTime), "h:mm aaa")}
);
})}
-
{
+ onClose={async () => {
+ await onSuccessfulDelete();
setModalOpen(false);
}}
- >
- {
- setModalOpen(false);
- }}
- />
-
+ />
);
@@ -428,6 +500,12 @@ const AvailOverrideDateSection = ({
type SetAvailabilityOverridesCardProps = {
profileId: string;
};
+
+type NewAvailOverrideDate = AvailOverrideDate & {
+ edited: boolean;
+ unavailable: boolean;
+};
+
export const SetAvailabilityOverridesCard = ({
profileId,
}: SetAvailabilityOverridesCardProps) => {
@@ -435,116 +513,92 @@ export const SetAvailabilityOverridesCard = ({
data: availOverrideDatesData,
loading: availOverrideDatesLoading,
error: availOverrideDatesError,
+ refetch: refetchAvailOverrideDates,
} = useGetAvailOverrideDatesQuery({
variables: { profileId },
});
+ const [modalOpen, setModalOpen] = useState(false);
- const {
- data: availWeeklysData,
- loading: availWeeklysLoading,
- error: availWeeklysError,
- } = useGetAvailWeeklysQuery({
- variables: {
- profileId,
- },
- });
-
- const [editAvailOverrideDayModalOpen, setEditAvailOverrideDayModalOpen] =
- useState(false);
const { fromUTC } = useTimezoneConverters();
+
if (!fromUTC) return
;
- let availOverrideDates: AvailOverrideDate[] = [];
- let availWeeklys: DateInterval[] = [];
+ let availOverrideDates: { [key: string]: NewAvailOverrideDate } = {};
+
if (
!availOverrideDatesLoading &&
!availOverrideDatesError &&
availOverrideDatesData
) {
- availOverrideDates = availOverrideDatesData.getAvailOverrideDates.map(
- (date) => {
- return {
- ...date,
- startTime: fromUTC(new Date(date.startTime)),
- endTime: fromUTC(new Date(date.endTime)),
- availOverrideTimeslots: date.availOverrideTimeslots.map(
- (timeslot) => ({
- startTime: fromUTC(new Date(timeslot.startTime)),
- endTime: fromUTC(new Date(timeslot.endTime)),
- })
- ),
- };
- }
+ const sorted = [...availOverrideDatesData.getAvailOverrideDates].sort(
+ (a, b) => a.startTime - b.startTime
);
- }
-
- if (!availWeeklysLoading && !availWeeklysError && availWeeklysData) {
- availWeeklys = availWeeklysData.getAvailWeeklys.map((avail) => {
- return {
- startTime: fromUTC(new Date(avail.startTime)),
- endTime: fromUTC(new Date(avail.endTime)),
+ for (const overrideDate of sorted) {
+ const startTime = fromUTC(new Date(overrideDate.startTime));
+ let temp = {
+ ...overrideDate,
+ startTime: startTime,
+ endTime: fromUTC(new Date(overrideDate.endTime)),
+ availOverrideTimeslots: overrideDate.availOverrideTimeslots.map(
+ (timeslot) => ({
+ startTime: fromUTC(new Date(timeslot.startTime)),
+ endTime: fromUTC(new Date(timeslot.endTime)),
+ })
+ ),
+ edited: false,
+ unavailable: overrideDate.availOverrideTimeslots.length === 0,
};
- });
+ availOverrideDates[startTime.toLocaleString()] = temp;
+ }
}
- console.log(
- Intl.DateTimeFormat.supportedLocalesOf(["ban", "id-u-co-pinyin", "de-ID"])
- );
-
return (
Add date overrides
-
-
-
+
Add dates when your availability changes from your weekly hours.
+
+
- {availOverrideDates.map((overrideDate, idx) => {
+ {Object.values(availOverrideDates).map((overrideDate, idx) => {
return (
-
{
+ refetchAvailOverrideDates();
+ }}
/>
+
);
- })}
-
-
-
-
-
+ }) || (
+
+ No overrides added.
+
+ )}
-
{
- setEditAvailOverrideDayModalOpen(false);
+
+
+ {
+ await refetchAvailOverrideDates();
+ setModalOpen(false);
}}
- >
- {
- setEditAvailOverrideDayModalOpen(false);
- }}
- />
-
+ />
);
};
diff --git a/src/components/Availabilities/SetDateInterval.tsx b/src/components/Availabilities/SetDateInterval.tsx
index 6ba86045..e567df2b 100644
--- a/src/components/Availabilities/SetDateInterval.tsx
+++ b/src/components/Availabilities/SetDateInterval.tsx
@@ -13,6 +13,7 @@ import React from "react";
import { DateInterval } from "../../generated/graphql";
import { Text } from "../atomic";
import Select from "../atomic/Select";
+import { DeleteIcon } from "../FormSchemaEditor/icons";
type SetDateIntervalProps = {
date: Date;
@@ -89,7 +90,7 @@ export const SetDateInterval = ({
};
return (
-
+
From
-
);
diff --git a/src/components/Availabilities/SetWeeklyAvailabilitiesCard.tsx b/src/components/Availabilities/SetWeeklyAvailabilitiesCard.tsx
index 8e96ac41..83640d12 100644
--- a/src/components/Availabilities/SetWeeklyAvailabilitiesCard.tsx
+++ b/src/components/Availabilities/SetWeeklyAvailabilitiesCard.tsx
@@ -9,7 +9,7 @@ import {
startOfDay,
startOfWeek,
} from "date-fns";
-import React, { useState } from "react";
+import React, { useEffect, useState } from "react";
import {
DateInterval,
refetchGetAvailWeeklysQuery,
@@ -35,19 +35,26 @@ export const SetWeeklyAvailabilitiesCard = ({
});
const { toUTC, fromUTC } = useTimezoneConverters();
+ const [weeklyAvailabilities, setWeeklyAvailabilities] = useState<
+ DateInterval[]
+ >([]);
+ const [modified, setModified] = useState(false);
+
const [setWeeklyAvailabilitiesMutation] = useSetAvailWeeklysMutation({
refetchQueries: [refetchGetAvailWeeklysQuery({ profileId })],
});
const [allDayAvailableError, setAllDayAvailableError] = useState(-1); // Index of error
- let weeklyAvailabilities: DateInterval[] = [];
-
- if (!loading && !error && data && fromUTC) {
- weeklyAvailabilities = data.getAvailWeeklys.map((x) => ({
- startTime: fromUTC(new Date(x.startTime)),
- endTime: fromUTC(new Date(x.endTime)),
- }));
- }
+ useEffect(() => {
+ if (!loading && !error && data && fromUTC) {
+ setWeeklyAvailabilities(
+ data.getAvailWeeklys.map((x) => ({
+ startTime: fromUTC(new Date(x.startTime)),
+ endTime: fromUTC(new Date(x.endTime)),
+ }))
+ );
+ }
+ }, [loading]);
const addWeeklyAvailability = (date: Date) => {
const availabilitiesForDate = weeklyAvailabilities.filter((interval) =>
@@ -108,12 +115,8 @@ export const SetWeeklyAvailabilitiesCard = ({
endTime: toUTC(newAvailability.endTime),
})
.sort((a, b) => a.startTime.getTime() - b.startTime.getTime());
- setWeeklyAvailabilitiesMutation({
- variables: {
- profileId: profileId,
- availabilities: newWeeklyAvailabilities,
- },
- });
+ setWeeklyAvailabilities(newWeeklyAvailabilities);
+ setModified(true);
};
const editWeeklyAvailability =
@@ -130,12 +133,8 @@ export const SetWeeklyAvailabilitiesCard = ({
endTime: toUTC(newDateInterval.endTime),
},
].sort((a, b) => a.startTime.getTime() - b.startTime.getTime());
- setWeeklyAvailabilitiesMutation({
- variables: {
- profileId: profileId,
- availabilities: newWeeklyAvailabilities,
- },
- });
+ setWeeklyAvailabilities(newWeeklyAvailabilities);
+ setModified(true);
setAllDayAvailableError(-1);
};
@@ -144,21 +143,36 @@ export const SetWeeklyAvailabilitiesCard = ({
...weeklyAvailabilities.slice(0, dateIntervalIndex),
...weeklyAvailabilities.slice(dateIntervalIndex + 1),
];
+ setWeeklyAvailabilities(newWeeklyAvailabilities);
+ setModified(true);
+ setAllDayAvailableError(-1);
+ };
+
+ const saveWeeklyAvailabilities = () => {
setWeeklyAvailabilitiesMutation({
variables: {
profileId: profileId,
- availabilities: newWeeklyAvailabilities,
+ availabilities: weeklyAvailabilities,
},
});
- setAllDayAvailableError(-1);
};
return (
-
+
Set Weekly Availabilities
+
@@ -177,9 +191,7 @@ export const SetWeeklyAvailabilitiesCard = ({
{weekdayNames[getDay(date)].toUpperCase() + "S"}
{weeklyAvailabilities.map((interval, intervalIndex) => {
if (getDay(interval.startTime) !== getDay(date)) {
- return (
-
- );
+ return
;
}
return (
void;
@@ -43,50 +45,47 @@ const Calendar = ({
}, [monthyear, getSelectableDates]);
return (
-
-
-
+
+
+
{
+ setMonthyear(([prevMonth, prevYear]) => {
+ let newMonthYear: [number, number];
+ if (prevMonth === 0) {
+ newMonthYear = [11, prevYear - 1];
+ } else {
+ newMonthYear = [prevMonth - 1, prevYear];
+ }
+ setDays(padDatesInMonth(getDatesInThisMonth(...newMonthYear)));
+ return newMonthYear;
+ });
+ }}
+ />
+
{monthNames[monthyear[0]]} {monthyear[1]}
-
-
{
- setMonthyear(([prevMonth, prevYear]) => {
- let newMonthYear: [number, number];
- if (prevMonth === 0) {
- newMonthYear = [11, prevYear - 1];
- } else {
- newMonthYear = [prevMonth - 1, prevYear];
- }
- setDays(padDatesInMonth(getDatesInThisMonth(...newMonthYear)));
- return newMonthYear;
- });
- }}
- />
-
- {
- setMonthyear(([prevMonth, prevYear]) => {
- let newMonthYear: [number, number];
- if (prevMonth === 11) {
- newMonthYear = [0, prevYear + 1];
- } else {
- newMonthYear = [prevMonth + 1, prevYear];
- }
- setDays(padDatesInMonth(getDatesInThisMonth(...newMonthYear)));
- return newMonthYear;
- });
- }}
- />
-
-
+ {
+ setMonthyear(([prevMonth, prevYear]) => {
+ let newMonthYear: [number, number];
+ if (prevMonth === 11) {
+ newMonthYear = [0, prevYear + 1];
+ } else {
+ newMonthYear = [prevMonth + 1, prevYear];
+ }
+ setDays(padDatesInMonth(getDatesInThisMonth(...newMonthYear)));
+ return newMonthYear;
+ });
+ }}
+ />
-
-
+
{weekdayNamesAbbreviated.map((dayOfWeek, i) => (
@@ -100,7 +99,7 @@ const Calendar = ({
const selected =
selectedDate && selectedDate.getTime() === day.getTime();
const selectable =
- day > new Date() &&
+ day > today &&
inMonth &&
(selectAnyDate || selectableDatesSet.has(day.getDate()));
@@ -120,9 +119,7 @@ const Calendar = ({
disabled={!selectable}
key={i}
className={backgroundStyles}
- onClick={() => {
- onSelect(day);
- }}
+ onClick={() => onSelect(day)}
>
{day.getDate()}
diff --git a/src/components/FormSchemaEditor/icons.tsx b/src/components/FormSchemaEditor/icons.tsx
index 58abae7b..49440d94 100644
--- a/src/components/FormSchemaEditor/icons.tsx
+++ b/src/components/FormSchemaEditor/icons.tsx
@@ -12,9 +12,9 @@ export const EditIcon = (props: HTMLAttributes
) => {
@@ -33,30 +33,30 @@ export const DeleteIcon = (props: HTMLAttributes) => {
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index 49f15e39..4970de75 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -47,7 +47,17 @@ export const getApolloClient = (
) => {
// TODO: Do we need to initialize a new ApolloClient?
// Or can we just use [client] as defined above?
- const cache = new InMemoryCache().restore(initialState || {});
+ const cache = new InMemoryCache({
+ typePolicies: {
+ Query: {
+ fields: {
+ getAvailOverrideDates: {
+ merge: true,
+ },
+ },
+ },
+ },
+ }).restore(initialState || {});
return new ApolloClient({
link: from([authLink, uploadLink]),
cache,
diff --git a/src/pages/program/[slug]/[profileRoute]/mentees/index.tsx b/src/pages/program/[slug]/[profileRoute]/mentees/index.tsx
index 1aaf38d0..e13afee6 100644
--- a/src/pages/program/[slug]/[profileRoute]/mentees/index.tsx
+++ b/src/pages/program/[slug]/[profileRoute]/mentees/index.tsx
@@ -56,7 +56,6 @@ const ViewMenteesPage: Page = () => {
{mentees?.map((mentee, index: number) => {
- console.log(mentee);
return
;
})}
diff --git a/src/pages/program/[slug]/[profileRoute]/mentors/index.tsx b/src/pages/program/[slug]/[profileRoute]/mentors/index.tsx
index 15a62903..c1edee7f 100644
--- a/src/pages/program/[slug]/[profileRoute]/mentors/index.tsx
+++ b/src/pages/program/[slug]/[profileRoute]/mentors/index.tsx
@@ -40,7 +40,6 @@ const ViewMentorsPage: Page = () => {
let newMentors = searchText
? fuse.search(searchText).map((x) => x.item)
: unfilteredProfiles;
- console.log(searchText, newMentors);
if (!filteredTags.length) {
return newMentors;
}
diff --git a/src/pages/program/[slug]/apply.tsx b/src/pages/program/[slug]/apply.tsx
index c6c5ac99..69ef8529 100644
--- a/src/pages/program/[slug]/apply.tsx
+++ b/src/pages/program/[slug]/apply.tsx
@@ -89,29 +89,12 @@ const ProgramApplyPage: Page = (_) => {
}
return (
- <>
- {/* For Testing */}
- {/*
*/}
-
- {/* Nav bar goes here */}
-
-
-
+
+ {/* Nav bar goes here */}
+
+
+ {!formSubmitted ? (
+
{currentProgram?.name}
@@ -161,12 +144,11 @@ const ProgramApplyPage: Page = (_) => {
-
-
-
- Thank You
-
-
+ ) : (
+
+
+ Thank You
+
@@ -196,16 +178,18 @@ const ProgramApplyPage: Page = (_) => {
-
+ )}
{}}
+ onClose={() => {
+ setFormSubmitted(false);
+ }}
programName={currentProgram.name}
/>
- >
+
);
};