From 1a6d34ac598a665a051043479f1299d7fdcaf79f Mon Sep 17 00:00:00 2001 From: Ben Grant Date: Sun, 28 May 2023 23:15:58 +1000 Subject: [PATCH] View event availabilities --- frontend/src/app/[id]/EventAvailabilities.tsx | 118 ++++++++++++++++++ frontend/src/app/[id]/layout.tsx | 17 +++ frontend/src/app/[id]/not-found.tsx | 17 +++ frontend/src/app/[id]/page.module.scss | 66 ++++++++++ frontend/src/app/[id]/page.tsx | 41 ++++++ .../components/Copyable/Copyable.module.scss | 7 ++ frontend/src/components/Copyable/Copyable.tsx | 33 +++++ .../src/components/CreateForm/CreateForm.tsx | 20 +-- .../EventInfo/EventInfo.module.scss | 8 -- .../components/EventInfo/EventInfo.tsx | 19 +-- .../src/components/Login/Login.module.scss | 23 ++++ frontend/src/components/Login/Login.tsx | 100 +++++++++++++++ frontend/src/components/Stats/Stats.tsx | 11 +- frontend/src/components/index.ts | 18 --- frontend/src/config/api.ts | 39 +++++- frontend/src/utils/expandTimes.ts | 13 ++ frontend/src/utils/index.ts | 1 + 17 files changed, 483 insertions(+), 68 deletions(-) create mode 100644 frontend/src/app/[id]/EventAvailabilities.tsx create mode 100644 frontend/src/app/[id]/layout.tsx create mode 100644 frontend/src/app/[id]/not-found.tsx create mode 100644 frontend/src/app/[id]/page.module.scss create mode 100644 frontend/src/app/[id]/page.tsx create mode 100644 frontend/src/components/Copyable/Copyable.module.scss create mode 100644 frontend/src/components/Copyable/Copyable.tsx create mode 100644 frontend/src/components/Login/Login.module.scss create mode 100644 frontend/src/components/Login/Login.tsx delete mode 100644 frontend/src/components/index.ts create mode 100644 frontend/src/utils/expandTimes.ts diff --git a/frontend/src/app/[id]/EventAvailabilities.tsx b/frontend/src/app/[id]/EventAvailabilities.tsx new file mode 100644 index 0000000..56f1021 --- /dev/null +++ b/frontend/src/app/[id]/EventAvailabilities.tsx @@ -0,0 +1,118 @@ +'use client' + +import { useMemo, useState } from 'react' +import { Trans } from 'react-i18next/TransWithoutContext' + +import AvailabilityViewer from '/src/components/AvailabilityViewer/AvailabilityViewer' +import Content from '/src/components/Content/Content' +import Login from '/src/components/Login/Login' +import Section from '/src/components/Section/Section' +import SelectField from '/src/components/SelectField/SelectField' +import { EventResponse, PersonResponse } from '/src/config/api' +import { useTranslation } from '/src/i18n/client' +import timezones from '/src/res/timezones.json' +import { expandTimes, makeClass } from '/src/utils' + +import styles from './page.module.scss' + +const EventAvailabilities = ({ event, people }: { event: EventResponse, people: PersonResponse[] }) => { + const { t, i18n } = useTranslation('event') + + const expandedTimes = useMemo(() => expandTimes(event.times), [event.times]) + + const [user, setUser] = useState() + const [password, setPassword] = useState() + + const [tab, setTab] = useState<'group' | 'you'>('group') + const [timezone, setTimezone] = useState(Intl.DateTimeFormat().resolvedOptions().timeZone) + + return <> +
+ + { + setUser(u) + setPassword(p) + }} /> + + setTimezone(event.currentTarget.value)} + options={timezones} + /> + + {event?.timezone && event.timezone !== timezone &&

+ + {/* eslint-disable-next-line */} + {/* @ts-ignore */} + _{{timezone: event.timezone}} + _ { + e.preventDefault() + setTimezone(event.timezone) + }}>__ + +

} + + {(( + Intl.DateTimeFormat().resolvedOptions().timeZone !== timezone + && (event?.timezone && event.timezone !== Intl.DateTimeFormat().resolvedOptions().timeZone) + ) || ( + event?.timezone === undefined + && Intl.DateTimeFormat().resolvedOptions().timeZone !== timezone + )) && ( +

+ + {/* eslint-disable-next-line */} + {/* @ts-ignore */} + _{{timezone: Intl.DateTimeFormat().resolvedOptions().timeZone}} + _ { + e.preventDefault() + setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone) + }}>__ + +

+ )} +
+
+ + +
+ + +
+
+ + {tab === 'group' && } + +} + +export default EventAvailabilities diff --git a/frontend/src/app/[id]/layout.tsx b/frontend/src/app/[id]/layout.tsx new file mode 100644 index 0000000..2717856 --- /dev/null +++ b/frontend/src/app/[id]/layout.tsx @@ -0,0 +1,17 @@ +import Content from '/src/components/Content/Content' +import Footer from '/src/components/Footer/Footer' +import Header from '/src/components/Header/Header' + +const Layout = async ({ children }: { children: React.ReactNode }) => <> + + {/* @ts-expect-error Async Server Component */} +
+ + + {children} + + {/* @ts-expect-error Async Server Component */} +