diff --git a/public/static/DeleteIcon.svg b/public/static/DeleteIcon.svg index 177d7450..90342cb2 100644 --- a/public/static/DeleteIcon.svg +++ b/public/static/DeleteIcon.svg @@ -8,28 +8,28 @@ d="M1 5H3H19" stroke="#DB3B25" stroke-width="2" - stroke-linecap="round" - stroke-linejoin="round" + strokeLinecap="round" + strokeLinejoin="round" /> \ No newline at end of file diff --git a/src/components/Authentication/AuthenticationModal.tsx b/src/components/Authentication/AuthenticationModal.tsx index 4bf2479a..07c94452 100644 --- a/src/components/Authentication/AuthenticationModal.tsx +++ b/src/components/Authentication/AuthenticationModal.tsx @@ -1,5 +1,5 @@ import { useRouter } from "next/router"; -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { Text, Modal } from "../atomic"; import Login from "./Login"; import Signup from "./Signup"; @@ -18,16 +18,17 @@ const AuthenticationModal = ({ const [isLogin, setIsLogin] = useState(false); const router = useRouter(); - const reset = () => { - setIsLogin(false); - onClose(); - } + useEffect(() => { + if (isOpen) { + setIsLogin(false); + } + }, [isOpen]); return ( - +
+ {currentDate && + currentDate.availOverrideTimeslots.length === 0 && + (currentDate.unavailable ? ( + +
+ + You have set today as unavailable. + +
+ +
+
+ ) : ( + +
+ + Your availabilities will be the same as weekly + availability today. + +
+ +
+
+ ))} + +
+
+ + +
+
+ )} +
+ +
+
- ) : ( -
- - Select a date to override.
- Weekly availabilities on that day will be overridden. -
-
- )} -
- -
- -
-
- +
); }; type AvailOverrideDateSectionProps = { overrideDate: AvailOverrideDate; - availWeeklys: DateInterval[]; + availOverrideDates: { [key: string]: NewAvailOverrideDate }; + onSuccessfulDelete: () => void; }; const AvailOverrideDateSection = ({ overrideDate, - availWeeklys, -}: AvailOverrideDateSectionProps) => { + availOverrideDates, + onSuccessfulDelete, +}: // availWeeklys, +AvailOverrideDateSectionProps) => { const [modalOpen, setModalOpen] = useState(false); - const [deleteAvailOverrideDateMutation] = useDeleteAvailOverrideDateMutation({ - refetchQueries: [ - refetchGetAvailOverrideDatesQuery({ profileId: overrideDate.profileId }), - ], - }); + const [deleteAvailOverrideDateMutation] = + useDeleteAvailOverrideDateMutation(); return ( @@ -377,7 +449,7 @@ const AvailOverrideDateSection = ({ > edit -
+
)} - {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