diff --git a/frontend/src/app/[id]/EventAvailabilities.tsx b/frontend/src/app/[id]/EventAvailabilities.tsx index 54dfbe7..8233963 100644 --- a/frontend/src/app/[id]/EventAvailabilities.tsx +++ b/frontend/src/app/[id]/EventAvailabilities.tsx @@ -167,6 +167,7 @@ const EventAvailabilities = ({ event }: EventAvailabilitiesProps) => { people={people} table={table} /> : user && { if (!event) return const oldAvailability = [...user.availability] setUser({ ...user, availability }) + addRecent({ + id: event.id, + name: event.name, + created_at: event.created_at, + user: availability.length > 0 ? { + name: user.name, + availability, + } : undefined, + }) updatePerson(event.id, user.name, { availability }, password) .catch(e => { console.warn(e) diff --git a/frontend/src/app/global.css b/frontend/src/app/global.css index 1dcd3f1..25db19c 100644 --- a/frontend/src/app/global.css +++ b/frontend/src/app/global.css @@ -135,3 +135,11 @@ a:focus-visible { *::-webkit-scrollbar-thumb:active { background: var(--secondary); } + +input[type=checkbox], input[type=radio] { + accent-color: var(--primary); +} +input[type=checkbox]:focus-visible, input[type=radio]:focus-visible { + outline: var(--focus-ring); + outline-offset: 2px; +} diff --git a/frontend/src/components/AvailabilityEditor/AvailabilityEditor.tsx b/frontend/src/components/AvailabilityEditor/AvailabilityEditor.tsx index 5b6ba8f..ba9e894 100644 --- a/frontend/src/components/AvailabilityEditor/AvailabilityEditor.tsx +++ b/frontend/src/components/AvailabilityEditor/AvailabilityEditor.tsx @@ -2,16 +2,18 @@ import { Fragment, useCallback, useEffect, useRef, useState } from 'react' import Button from '/src/components/Button/Button' import Content from '/src/components/Content/Content' -import GoogleCalendar from '/src/components/GoogleCalendar/GoogleCalendar' import { usePalette } from '/src/hooks/usePalette' import { useTranslation } from '/src/i18n/client' import { calculateTable, makeClass, parseSpecificDate } from '/src/utils' import styles from './AvailabilityEditor.module.scss' +import GoogleCalendar from './components/GoogleCalendar/GoogleCalendar' +import RecentEvents from './components/RecentEvents/RecentEvents' import viewerStyles from '../AvailabilityViewer/AvailabilityViewer.module.scss' import Skeleton from '../AvailabilityViewer/components/Skeleton/Skeleton' interface AvailabilityEditorProps { + eventId?: string times: string[] timezone: string value: string[] @@ -19,7 +21,7 @@ interface AvailabilityEditorProps { table?: ReturnType } -const AvailabilityEditor = ({ times, timezone, value = [], onChange, table }: AvailabilityEditorProps) => { +const AvailabilityEditor = ({ eventId, times, timezone, value = [], onChange, table }: AvailabilityEditorProps) => { const { t } = useTranslation('event') // Ref and state required to rerender but also access static version in callbacks @@ -74,6 +76,11 @@ const AvailabilityEditor = ({ times, timezone, value = [], onChange, table }: Av times={times} onImport={onChange} /> + } diff --git a/frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.module.scss b/frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.module.scss new file mode 100644 index 0000000..2bb2870 --- /dev/null +++ b/frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.module.scss @@ -0,0 +1,63 @@ +.wrapper { + width: 100%; +} + +.title { + display: flex; + align-items: center; + + & strong { + margin-right: 1ex; + } +} + +.icon { + height: 24px; + width: 24px; + margin-right: 12px; +} + +.linkButton { + font: inherit; + color: var(--primary); + border: 0; + background: none; + text-decoration: underline; + padding: 0; + margin: 0; + display: inline; + cursor: pointer; + appearance: none; + border-radius: .2em; + + &:focus-visible { + outline: var(--focus-ring); + outline-offset: 2px; + } +} + +.options { + font-size: 14px; + padding: 0 0 5px; +} + +.item { + display: flex; + margin-block: .5em; +} + +.name { + margin-left: .6em; + font-size: 15px; + font-weight: 500; + display: flex; + flex-direction: column; + align-items: flex-start; +} + +.info { + font-size: 14px; + opacity: .6; + font-weight: 500; + padding: 14px 0 10px; +} diff --git a/frontend/src/components/GoogleCalendar/GoogleCalendar.tsx b/frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.tsx similarity index 90% rename from frontend/src/components/GoogleCalendar/GoogleCalendar.tsx rename to frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.tsx index a480f76..9f21a18 100644 --- a/frontend/src/components/GoogleCalendar/GoogleCalendar.tsx +++ b/frontend/src/components/AvailabilityEditor/components/GoogleCalendar/GoogleCalendar.tsx @@ -4,7 +4,7 @@ import { Temporal } from '@js-temporal/polyfill' import Button from '/src/components/Button/Button' import { useTranslation } from '/src/i18n/client' -import googleLogo from '/src/res/google.svg' +import GoogleIcon from '/src/res/GoogleIcon' import { allowUrlToWrap, parseSpecificDate } from '/src/utils' import styles from './GoogleCalendar.module.scss' @@ -119,14 +119,14 @@ const GoogleCalendar = ({ timezone, timeStart, timeEnd, times, onImport }: Googl isLoading={canLoad} surfaceColor="#4286F5" shadowColor="#3367BD" - icon={} + icon={