From a2dee0c28d9e47edf45362195a29ad6a3f6d1f82 Mon Sep 17 00:00:00 2001 From: cade Date: Mon, 1 Jul 2024 19:35:33 -0700 Subject: [PATCH] various ui and library refactoring --- .../from-session/[sessionId]/loading.tsx | 5 + .../sessions/create/[order]/loading.tsx | 5 + .../[missionId]/sessions/loading.tsx | 5 + .../[missionId]/sessions/page.tsx | 0 .../[missionId]/sessions/loading.tsx | 3 - app/(pages)/(private)/templates/page.tsx | 4 +- app/_components/account-menu.tsx | 37 +++--- app/_components/dropdown-menu.tsx | 119 ++++++++++++++++++ app/_components/event-card.tsx | 8 +- app/_components/event-comment.tsx | 25 ++-- ...list-item-menu.tsx => event-type-menu.tsx} | 42 +++---- app/_components/event-types.tsx | 4 +- .../filterable-input-link-list.tsx | 10 +- app/_components/form-banner.tsx | 31 ++--- ...nput-list-item-menu.tsx => input-menu.tsx} | 49 ++++---- app/_components/insight-form.tsx | 2 +- ...insight-card-menu.tsx => insight-menu.tsx} | 49 ++++---- app/_components/insights.tsx | 4 +- app/_components/menu.tsx | 58 --------- ...nk-list-item-menu.tsx => mission-menu.tsx} | 52 ++++---- app/_components/missions.tsx | 9 +- app/_components/module-form-section.tsx | 33 ++--- app/_components/plot-figure.tsx | 1 + app/_components/popover.tsx | 20 +-- app/_components/session-form.tsx | 5 +- app/_components/session-layout.tsx | 6 +- ...nk-list-item-menu.tsx => session-menu.tsx} | 51 ++++---- app/_components/session-page.tsx | 11 +- app/_components/sessions-page.tsx | 99 +++++++-------- app/_components/subject-layout.tsx | 17 +-- app/_components/subject-list.tsx | 12 +- app/_components/subject-menu.tsx | 51 ++++---- ...k-list-item-menu.tsx => template-menu.tsx} | 39 +++--- app/_components/tip.tsx | 7 +- app/_components/view-all-sessions-button.tsx | 1 + app/_queries/collapsible-archive.tsx | 14 +-- bun.lockb | Bin 354870 -> 358776 bytes package.json | 7 +- tailwind.css | 4 - 39 files changed, 500 insertions(+), 399 deletions(-) create mode 100644 app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/from-session/[sessionId]/loading.tsx create mode 100644 app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/loading.tsx create mode 100644 app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx rename app/(pages)/(private)/{ => @modal/(md)}/subjects/[subjectId]/training-plans/[missionId]/sessions/page.tsx (100%) delete mode 100644 app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx create mode 100644 app/_components/dropdown-menu.tsx rename app/_components/{event-type-link-list-item-menu.tsx => event-type-menu.tsx} (60%) rename app/_components/{input-list-item-menu.tsx => input-menu.tsx} (57%) rename app/_components/{insight-card-menu.tsx => insight-menu.tsx} (56%) delete mode 100644 app/_components/menu.tsx rename app/_components/{mission-link-list-item-menu.tsx => mission-menu.tsx} (57%) rename app/_components/{session-link-list-item-menu.tsx => session-menu.tsx} (77%) rename app/_components/{template-link-list-item-menu.tsx => template-menu.tsx} (51%) diff --git a/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/from-session/[sessionId]/loading.tsx b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/from-session/[sessionId]/loading.tsx new file mode 100644 index 00000000..e3d948d8 --- /dev/null +++ b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/from-session/[sessionId]/loading.tsx @@ -0,0 +1,5 @@ +import PageModalLoading from '@/_components/page-modal-loading'; + +const Loading = PageModalLoading; + +export default Loading; diff --git a/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/loading.tsx b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/loading.tsx new file mode 100644 index 00000000..e3d948d8 --- /dev/null +++ b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/create/[order]/loading.tsx @@ -0,0 +1,5 @@ +import PageModalLoading from '@/_components/page-modal-loading'; + +const Loading = PageModalLoading; + +export default Loading; diff --git a/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx new file mode 100644 index 00000000..e3d948d8 --- /dev/null +++ b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx @@ -0,0 +1,5 @@ +import PageModalLoading from '@/_components/page-modal-loading'; + +const Loading = PageModalLoading; + +export default Loading; diff --git a/app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/page.tsx b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/page.tsx similarity index 100% rename from app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/page.tsx rename to app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/training-plans/[missionId]/sessions/page.tsx diff --git a/app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx b/app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx deleted file mode 100644 index f2300ace..00000000 --- a/app/(pages)/(private)/subjects/[subjectId]/training-plans/[missionId]/sessions/loading.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import SessionsLoading from '@/_components/sessions-loading'; - -export default SessionsLoading; diff --git a/app/(pages)/(private)/templates/page.tsx b/app/(pages)/(private)/templates/page.tsx index a211700a..dd2fee67 100644 --- a/app/(pages)/(private)/templates/page.tsx +++ b/app/(pages)/(private)/templates/page.tsx @@ -1,6 +1,6 @@ import Button from '@/_components/button'; import Empty from '@/_components/empty'; -import TemplateLinkListItemMenu from '@/_components/template-link-list-item-menu'; +import TemplateMenu from '@/_components/template-menu'; import listTemplates from '@/_queries/list-templates'; import InformationCircleIcon from '@heroicons/react/24/outline/ExclamationCircleIcon'; @@ -32,7 +32,7 @@ const Page = async () => { > {template.name} - + ))} diff --git a/app/_components/account-menu.tsx b/app/_components/account-menu.tsx index aad95fca..14b3bec9 100644 --- a/app/_components/account-menu.tsx +++ b/app/_components/account-menu.tsx @@ -1,7 +1,7 @@ 'use client'; import Avatar from '@/_components/avatar'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import signOut from '@/_mutations/sign-out'; import ArrowLeftStartOnRectangleIcon from '@heroicons/react/24/outline/ArrowLeftStartOnRectangleIcon'; import Bars3Icon from '@heroicons/react/24/outline/Bars3Icon'; @@ -17,21 +17,24 @@ const AccountMenu = ({ user }: AccountMenuProps) => { const [isTransitioning, startTransition] = useTransition(); return ( - - - - - - - + + + + + } + > + + Account settings - - + { @@ -41,9 +44,9 @@ const AccountMenu = ({ user }: AccountMenuProps) => { > Sign out - - - + + + ); }; diff --git a/app/_components/dropdown-menu.tsx b/app/_components/dropdown-menu.tsx new file mode 100644 index 00000000..6c998b2f --- /dev/null +++ b/app/_components/dropdown-menu.tsx @@ -0,0 +1,119 @@ +'use client'; + +import ButtonPrimitive from '@/_components/button'; +import * as Primitive from '@radix-ui/react-dropdown-menu'; +import { useToggle } from '@uidotdev/usehooks'; +import * as React from 'react'; +import { twMerge } from 'tailwind-merge'; + +const Button = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + + + +)); + +Button.displayName = ButtonPrimitive.displayName; + +const Content = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +Content.displayName = Primitive.Content.displayName; + +const Item = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +Item.displayName = Primitive.Item.displayName; + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +Label.displayName = Primitive.Label.displayName; + +const Root = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + trigger: React.ReactNode; + } +>(({ children, trigger, ...props }, ref) => { + const [open, toggleOpen] = useToggle(false); + + return ( + + toggleOpen()} + onPointerDown={(e) => e.preventDefault()} + ref={ref} + > + {trigger} + + {children} + + ); +}); + +Root.displayName = Primitive.Root.displayName; + +const Separator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +Separator.displayName = Primitive.Separator.displayName; + +export default Object.assign(Root, { + Button, + Content, + Group: Primitive.Group, + Item, + Label, + Portal: Primitive.Portal, + Separator, +}); diff --git a/app/_components/event-card.tsx b/app/_components/event-card.tsx index bc57972f..3a1612c3 100644 --- a/app/_components/event-card.tsx +++ b/app/_components/event-card.tsx @@ -25,6 +25,7 @@ interface EventCardProps { isTeamMember?: boolean; mission?: NonNullable; subjectId: string; + totalModules?: number; user?: User | null; } @@ -38,6 +39,7 @@ const EventCard = ({ isTeamMember, mission, subjectId, + totalModules, user, }: EventCardProps) => { const comments = forceArray(event?.comments); @@ -50,7 +52,11 @@ const EventCard = ({
{(showModule || event) && (
- {showModule && <>Module {(eventType.order as number) + 1}} + {showModule && ( + <> + Module {(eventType.order as number) + 1} / {totalModules} + + )} {event && (
{mission ? 'Completed' : 'Recorded'} by diff --git a/app/_components/event-comment.tsx b/app/_components/event-comment.tsx index 1b201a15..b530a856 100644 --- a/app/_components/event-comment.tsx +++ b/app/_components/event-comment.tsx @@ -4,7 +4,7 @@ import Alert from '@/_components/alert'; import Avatar from '@/_components/avatar'; import DateTime from '@/_components/date-time'; import DirtyHtml from '@/_components/dirty-html'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import deleteComment from '@/_mutations/delete-comment'; import { Database } from '@/_types/database'; import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; @@ -59,17 +59,22 @@ const EventComment = ({ {!isPublic && !isArchived && (userId === profile.id || isTeamMember) && ( - - - - - - toggleDeleteAlert(true)}> + +
+ +
+
+ } + > + + toggleDeleteAlert(true)}> Delete comment - - - + + + )}
{content} diff --git a/app/_components/event-type-link-list-item-menu.tsx b/app/_components/event-type-menu.tsx similarity index 60% rename from app/_components/event-type-link-list-item-menu.tsx rename to app/_components/event-type-menu.tsx index 7b5ea61a..fb7c27b5 100644 --- a/app/_components/event-type-link-list-item-menu.tsx +++ b/app/_components/event-type-menu.tsx @@ -1,7 +1,7 @@ 'use client'; import Alert from '@/_components/alert'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import deleteEventType from '@/_mutations/delete-event-type'; import DocumentDuplicateIcon from '@heroicons/react/24/outline/DocumentDuplicateIcon'; import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; @@ -9,15 +9,12 @@ import PencilIcon from '@heroicons/react/24/outline/PencilIcon'; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; import { useToggle } from '@uidotdev/usehooks'; -interface EventTypeLinkListItemMenuProps { +interface EventTypeMenuProps { eventTypeId: string; subjectId: string; } -const EventTypeLinkListItemMenu = ({ - eventTypeId, - subjectId, -}: EventTypeLinkListItemMenuProps) => { +const EventTypeMenu = ({ eventTypeId, subjectId }: EventTypeMenuProps) => { const [deleteAlert, toggleDeleteAlert] = useToggle(false); return ( @@ -29,35 +26,38 @@ const EventTypeLinkListItemMenu = ({ onClose={toggleDeleteAlert} onConfirm={() => deleteEventType(eventTypeId)} /> - - -
- + +
+ +
-
- - + + Edit - - + Create template - - toggleDeleteAlert(true)}> + + toggleDeleteAlert(true)}> Delete - - -
+ + + ); }; -export default EventTypeLinkListItemMenu; +export default EventTypeMenu; diff --git a/app/_components/event-types.tsx b/app/_components/event-types.tsx index a21bb851..1b4375f0 100644 --- a/app/_components/event-types.tsx +++ b/app/_components/event-types.tsx @@ -1,5 +1,5 @@ import Button from '@/_components/button'; -import EventTypeLinkListItemMenu from '@/_components/event-type-link-list-item-menu'; +import EventTypeMenu from '@/_components/event-type-menu'; import Tip from '@/_components/tip'; import listSubjectEventTypes from '@/_queries/list-subject-event-types'; import ArrowUpRightIcon from '@heroicons/react/24/outline/ArrowUpRightIcon'; @@ -58,7 +58,7 @@ const EventTypes = async ({ isTeamMember, subjectId }: EventTypesProps) => { )} {isTeamMember && ( - diff --git a/app/_components/filterable-input-link-list.tsx b/app/_components/filterable-input-link-list.tsx index 9a53b538..e5635d2d 100644 --- a/app/_components/filterable-input-link-list.tsx +++ b/app/_components/filterable-input-link-list.tsx @@ -7,7 +7,7 @@ import INPUT_LABELS from '@/_constants/constant-input-labels'; import { ListInputsData } from '@/_queries/list-inputs'; import { usePrevious } from '@uidotdev/usehooks'; import Fuse from 'fuse.js'; -import InputListItemMenu from './input-list-item-menu'; +import InputMenu from './input-menu'; import { ChangeEvent, @@ -74,13 +74,13 @@ const FilterableInputLinkList = ({ inputs }: FilterableInputLinkListProps) => { {filteredInputs.map((input) => (
  • - +
  • ))} diff --git a/app/_components/form-banner.tsx b/app/_components/form-banner.tsx index 86a5cd78..d4776590 100644 --- a/app/_components/form-banner.tsx +++ b/app/_components/form-banner.tsx @@ -1,8 +1,8 @@ 'use client'; import Button from '@/_components/button'; -import Menu from '@/_components/menu'; import Select from '@/_components/select'; +import Tip from '@/_components/tip'; import { ListInputsBySubjectIdData } from '@/_queries/list-inputs-by-subject-id'; import { ListTemplatesWithDataData } from '@/_queries/list-templates-with-data'; import { TemplateDataJson } from '@/_types/template-data-json'; @@ -14,7 +14,7 @@ import { useToggle } from '@uidotdev/usehooks'; import { FieldValues, Path, PathValue, UseFormReturn } from 'react-hook-form'; import { twMerge } from 'tailwind-merge'; -import Tip from '@/_components/tip'; +import DropdownMenu from '@/_components/dropdown-menu'; import { Description, Dialog, @@ -54,28 +54,31 @@ const FormBanner = ({ {form.formState.isDirty ? 'Unsaved changes' : 'No unsaved changes'}
    - - -
    - + +
    + +
    -
    - + } + > + {useTemplateEnabled && ( - toggleUseTemplateModal()}> + toggleUseTemplateModal()}> Use template - + )} - form.reset()} > Discard changes - - -
    + + + {useTemplateEnabled && (
    diff --git a/app/_components/input-list-item-menu.tsx b/app/_components/input-menu.tsx similarity index 57% rename from app/_components/input-list-item-menu.tsx rename to app/_components/input-menu.tsx index 55b7d330..0384ec8f 100644 --- a/app/_components/input-list-item-menu.tsx +++ b/app/_components/input-menu.tsx @@ -1,51 +1,54 @@ 'use client'; import Alert from '@/_components/alert'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import deleteInput from '@/_mutations/delete-input'; import DocumentDuplicateIcon from '@heroicons/react/24/outline/DocumentDuplicateIcon'; import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; import { useToggle } from '@uidotdev/usehooks'; -interface InputListItemMenuProps { +interface InputMenuProps { inputId: string; } -const InputListItemMenu = ({ inputId }: InputListItemMenuProps) => { +const InputMenu = ({ inputId }: InputMenuProps) => { const [deleteAlert, toggleDeleteAlert] = useToggle(false); return ( <> - deleteInput(inputId)} - /> - - -
    - + +
    + +
    -
    - - + + Duplicate - - toggleDeleteAlert(true)}> + + toggleDeleteAlert(true)}> Delete - - -
    + + + + deleteInput(inputId)} + /> ); }; -export default InputListItemMenu; +export default InputMenu; diff --git a/app/_components/insight-form.tsx b/app/_components/insight-form.tsx index d4708859..23a6a2f8 100644 --- a/app/_components/insight-form.tsx +++ b/app/_components/insight-form.tsx @@ -83,7 +83,7 @@ const InsightForm = ({ events, insight, subjectId }: InsightFormProps) => { marginBottom: config?.marginBottom ?? '60', marginLeft: config?.marginLeft ?? '60', marginRight: config?.marginRight ?? '40', - marginTop: config?.marginTop ?? '40', + marginTop: config?.marginTop ?? '25', name: insight?.name ?? '', showBars: config?.showBars ?? false, showDots: config?.showDots ?? true, diff --git a/app/_components/insight-card-menu.tsx b/app/_components/insight-menu.tsx similarity index 56% rename from app/_components/insight-card-menu.tsx rename to app/_components/insight-menu.tsx index f9cc3239..dc8adf60 100644 --- a/app/_components/insight-card-menu.tsx +++ b/app/_components/insight-menu.tsx @@ -1,52 +1,55 @@ 'use client'; import Alert from '@/_components/alert'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import deleteInsight from '@/_mutations/delete-insight'; import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; import PencilIcon from '@heroicons/react/24/outline/PencilIcon'; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; import { useToggle } from '@uidotdev/usehooks'; -interface InsightCardMenuProps { +interface InsightMenuProps { insightId: string; subjectId: string; } -const InsightCardMenu = ({ insightId, subjectId }: InsightCardMenuProps) => { +const InsightMenu = ({ insightId, subjectId }: InsightMenuProps) => { const [deleteAlert, toggleDeleteAlert] = useToggle(false); return ( <> - deleteInsight(insightId)} - /> - - -
    - + +
    + +
    -
    - - + + Edit - - toggleDeleteAlert(true)}> + + toggleDeleteAlert(true)}> Delete - - -
    + + + + deleteInsight(insightId)} + /> ); }; -export default InsightCardMenu; +export default InsightMenu; diff --git a/app/_components/insights.tsx b/app/_components/insights.tsx index 4b7f7301..bb4b312a 100644 --- a/app/_components/insights.tsx +++ b/app/_components/insights.tsx @@ -1,7 +1,7 @@ 'use client'; import Button from '@/_components/button'; -import InsightCardMenu from '@/_components/insight-card-menu'; +import InsightMenu from '@/_components/insight-menu'; import PlotFigure from '@/_components/plot-figure'; import { ListEventsData } from '@/_queries/list-events'; import { ListInsightsData } from '@/_queries/list-insights'; @@ -60,7 +60,7 @@ const Insights = ({ )} {!isReadOnly && ( - + )}
    diff --git a/app/_components/menu.tsx b/app/_components/menu.tsx deleted file mode 100644 index 0c23c6b2..00000000 --- a/app/_components/menu.tsx +++ /dev/null @@ -1,58 +0,0 @@ -'use client'; - -import Button, { ButtonProps } from '@/_components/button'; -import { Menu as MenuPrimitive } from '@headlessui/react'; -import { twMerge } from 'tailwind-merge'; - -const Menu = Object.assign( - ({ className, ...rest }: Parameters[0]) => ( - - ), - { - Button: ({ - className, - ...rest - }: Parameters[0]) => ( - - ), - Item: ({ className, ...rest }: ButtonProps) => ( - - {({ active }) => ( - {isTeamMember && ( - + )} , ); diff --git a/app/_components/module-form-section.tsx b/app/_components/module-form-section.tsx index 4de4eae9..75547432 100644 --- a/app/_components/module-form-section.tsx +++ b/app/_components/module-form-section.tsx @@ -4,7 +4,6 @@ import Alert from '@/_components/alert'; import Button from '@/_components/button'; import IconButton from '@/_components/icon-button'; import InputForm from '@/_components/input-form'; -import Menu from '@/_components/menu'; import PageModalHeader from '@/_components/page-modal-header'; import RichTextarea from '@/_components/rich-textarea'; import Select, { IOption } from '@/_components/select'; @@ -34,6 +33,7 @@ import { DialogTitle, } from '@headlessui/react'; +import DropdownMenu from '@/_components/dropdown-menu'; import { ArrayPath, Controller, @@ -121,18 +121,21 @@ const ModuleFormSection = >({ {...listeners} />
    Module {eventTypeIndex + 1}
    - - -
    - + +
    + +
    -
    - - toggleUseTemplateModal()}> + } + > + + toggleUseTemplateModal()}> Use template - - + { const { content, inputs } = form.getValues( `modules[${eventTypeIndex}]` as Path, @@ -148,16 +151,16 @@ const ModuleFormSection = >({ > Create template - - + toggleDeleteAlert(true)} > Delete - - -
    + + + `${humanizeDurationShort(t * 1000)}` diff --git a/app/_components/popover.tsx b/app/_components/popover.tsx index 6ca91c59..0242e924 100644 --- a/app/_components/popover.tsx +++ b/app/_components/popover.tsx @@ -1,15 +1,15 @@ 'use client'; -import * as PopoverPrimitive from '@radix-ui/react-popover'; +import * as Primitive from '@radix-ui/react-popover'; import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'; import { twMerge } from 'tailwind-merge'; const PopoverContent = forwardRef< - ElementRef, - ComponentPropsWithoutRef + ElementRef, + ComponentPropsWithoutRef >(({ className, align = 'center', ...props }, ref) => ( - - + - + )); -PopoverContent.displayName = PopoverPrimitive.Content.displayName; +PopoverContent.displayName = Primitive.Content.displayName; -const Popover = Object.assign(PopoverPrimitive.Root, { - Close: PopoverPrimitive.Close, +const Popover = Object.assign(Primitive.Root, { + Close: Primitive.Close, Content: PopoverContent, - Trigger: PopoverPrimitive.Trigger, + Trigger: Primitive.Trigger, }); export default Popover; diff --git a/app/_components/session-form.tsx b/app/_components/session-form.tsx index 5cc28be9..5bf0fd90 100644 --- a/app/_components/session-form.tsx +++ b/app/_components/session-form.tsx @@ -182,7 +182,10 @@ const SessionForm = ({ form={form} />
    - + +
    + +
    )} {!sessionsReversed.length && ( - + {isPublic || subject.archived ? ( 'No training sessions.' @@ -92,7 +87,7 @@ const SessionsPage = async ({ )} {!!sessionsReversed.length && ( -
      +
        {sessionsReversed.map((session) => { const completedModules = session.modules.filter( (m) => m.event?.length, @@ -100,49 +95,46 @@ const SessionsPage = async ({ return (
      • {!isPublic && !subject.archived && isTeamMember && ( - )} -
    + + Close + + ); }; diff --git a/app/_components/subject-layout.tsx b/app/_components/subject-layout.tsx index 1bb5a5ff..9da20417 100644 --- a/app/_components/subject-layout.tsx +++ b/app/_components/subject-layout.tsx @@ -49,17 +49,18 @@ const SubjectLayout = async ({ {isTeamMember ? ( - - +
    + + +
    ) : ( diff --git a/app/_components/subject-list.tsx b/app/_components/subject-list.tsx index 1494cb6b..2c1d7f5e 100644 --- a/app/_components/subject-list.tsx +++ b/app/_components/subject-list.tsx @@ -69,13 +69,11 @@ const SubjectList = async ({ archived = false }: SubjectListProps) => { /> {subject.name} - -
    - + +
    +
    + +
    diff --git a/app/_components/subject-menu.tsx b/app/_components/subject-menu.tsx index e9712caf..85b2c128 100644 --- a/app/_components/subject-menu.tsx +++ b/app/_components/subject-menu.tsx @@ -2,15 +2,15 @@ import Alert from '@/_components/alert'; import Button from '@/_components/button'; +import DropdownMenu from '@/_components/dropdown-menu'; import IconButton from '@/_components/icon-button'; -import Menu from '@/_components/menu'; import Switch from '@/_components/switch'; import Tip from '@/_components/tip'; import createShareCode from '@/_mutations/create-share-code'; import updateSubject from '@/_mutations/update-subject'; import { GetSubjectData } from '@/_queries/get-subject'; import { ListSubjectsData } from '@/_queries/list-subjects'; -import { Dialog, DialogPanel } from '@headlessui/react'; +import { Dialog, DialogPanel, DialogTitle } from '@headlessui/react'; import ArchiveBoxIcon from '@heroicons/react/24/outline/ArchiveBoxIcon'; import ArchiveBoxXMarkIcon from '@heroicons/react/24/outline/ArchiveBoxXMarkIcon'; import ArrowDownTrayIcon from '@heroicons/react/24/outline/ArrowDownTrayIcon'; @@ -26,17 +26,15 @@ import { ReactNode, useOptimistic, useRef, useTransition } from 'react'; interface SubjectMenuProps { children: ReactNode; - className?: string; isPublic?: boolean; - itemsClassName?: string; + contentClassName?: string; subject: NonNullable | NonNullable[0]; } const SubjectMenu = ({ children, - className, isPublic, - itemsClassName, + contentClassName, subject, }: SubjectMenuProps) => { const [, copyToClipboard] = useCopyToClipboard(); @@ -55,16 +53,18 @@ const SubjectMenu = ({ return ( <> - - {children} - - + + + Edit profile - + +
    - @@ -102,17 +102,17 @@ const SubjectMenu = ({ Copy client link )} - + Clients can complete training plans, record events and comment.
    - toggleShareModal(true)}> + toggleShareModal(true)}> Share profile - - + @@ -135,8 +135,9 @@ const SubjectMenu = ({ > Export events - - + + @@ -156,13 +157,13 @@ const SubjectMenu = ({ )} {subject.archived ? 'Unarchive' : 'Archive'} - - toggleDeleteAlert(true)}> + + toggleDeleteAlert(true)}> Delete - -
    -
    + + +
    - Share + Share } onClick={() => toggleShareModal(false)} diff --git a/app/_components/template-link-list-item-menu.tsx b/app/_components/template-menu.tsx similarity index 51% rename from app/_components/template-link-list-item-menu.tsx rename to app/_components/template-menu.tsx index c15f804e..26260ddb 100644 --- a/app/_components/template-link-list-item-menu.tsx +++ b/app/_components/template-menu.tsx @@ -1,23 +1,37 @@ 'use client'; import Alert from '@/_components/alert'; -import Menu from '@/_components/menu'; +import DropdownMenu from '@/_components/dropdown-menu'; import deleteTemplate from '@/_mutations/delete-template'; import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; import { useToggle } from '@uidotdev/usehooks'; -interface TemplateLinkListItemMenuItemsProps { +interface TemplateMenuProps { templateId: string; } -const TemplateLinkListItemMenu = ({ - templateId, -}: TemplateLinkListItemMenuItemsProps) => { +const TemplateMenu = ({ templateId }: TemplateMenuProps) => { const [deleteAlert, toggleDeleteAlert] = useToggle(false); return ( <> + +
    + +
    +
    + } + > + + toggleDeleteAlert(true)}> + + Delete + + + deleteTemplate(templateId)} /> - - -
    - -
    -
    - - toggleDeleteAlert(true)}> - - Delete - - -
    ); }; -export default TemplateLinkListItemMenu; +export default TemplateMenu; diff --git a/app/_components/tip.tsx b/app/_components/tip.tsx index 92afcfda..c0ca1c13 100644 --- a/app/_components/tip.tsx +++ b/app/_components/tip.tsx @@ -1,5 +1,6 @@ 'use client'; +import Button from '@/_components/button'; import Popover from '@/_components/popover'; import InformationCircleIcon from '@heroicons/react/24/outline/InformationCircleIcon'; import { PopoverContentProps } from '@radix-ui/react-popover'; @@ -14,8 +15,10 @@ interface TipProps extends PopoverContentProps { const Tip = ({ children, className, tipClassName, ...rest }: TipProps) => ( - - + + View all sessions diff --git a/app/_queries/collapsible-archive.tsx b/app/_queries/collapsible-archive.tsx index 73f4c021..f40a30da 100644 --- a/app/_queries/collapsible-archive.tsx +++ b/app/_queries/collapsible-archive.tsx @@ -3,7 +3,7 @@ import Button from '@/_components/button'; import ChevronDownIcon from '@heroicons/react/24/outline/ChevronDownIcon'; import ChevronUpIcon from '@heroicons/react/24/outline/ChevronUpIcon'; -import * as Collapsible from '@radix-ui/react-collapsible'; +import * as Primitive from '@radix-ui/react-collapsible'; import { ReactNode, useState } from 'react'; interface CollapsibleArchiveProps { @@ -14,12 +14,12 @@ const CollapsibleArchive = ({ children }: CollapsibleArchiveProps) => { const [isOpen, setIsOpen] = useState(false); return ( - - + + {children} - +
    - + - +
    -
    + ); }; diff --git a/bun.lockb b/bun.lockb index 5ba00d9b83130c572c3eb3aa2d90aaa5d3871165..cd1c817573cc3cb30adc092cc91208c13b7096e1 100755 GIT binary patch delta 68285 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 cYx7_alX%$_rXrbyW;Tmy3Td2UiO-q%;v<8 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 KiG3|!*#AG4b_cou diff --git a/package.json b/package.json index 885b5c9d..800a967a 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@heroicons/react": "^2.1.4", "@observablehq/plot": "^0.6.15", "@radix-ui/react-collapsible": "^1.1.0", + "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-switch": "^1.1.0", @@ -48,8 +49,8 @@ "@types/lodash": "^4.17.6", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^7.14.1", - "@typescript-eslint/parser": "^7.14.1", + "@typescript-eslint/eslint-plugin": "^7.15.0", + "@typescript-eslint/parser": "^7.15.0", "@uidotdev/usehooks": "^2.4.1", "@vercel/analytics": "^1.3.1", "@visx/responsive": "^3.10.2", @@ -75,7 +76,7 @@ "supabase": "^1.178.2", "tailwind-merge": "^2.3.0", "tailwindcss": "^3.4.4", - "typescript": "^5.5.2", + "typescript": "^5.5.3", "vercel": "^34.2.8", "xss": "^1.0.15" } diff --git a/tailwind.css b/tailwind.css index 2f953f8b..25cac8ac 100644 --- a/tailwind.css +++ b/tailwind.css @@ -89,10 +89,6 @@ @apply pointer-events-none opacity-50 print:opacity-100; } - .print-exact { - -webkit-print-color-adjust: exact; - } - .prose { @apply space-y-3 [overflow-wrap:anywhere] prose-a:-m-1 prose-a:p-1 prose-a:text-fg-3 prose-a:underline prose-a:transition-colors prose-a:hover:cursor-pointer prose-strong:font-bold prose-strong:text-fg-1 prose-ol:list-inside prose-ol:list-decimal prose-ol:space-y-3 prose-ul:list-inside prose-ul:list-disc prose-ul:space-y-3 prose-li:marker:text-fg-3 prose-table:min-w-full prose-table:whitespace-nowrap prose-table:border prose-table:border-t-0 prose-table:border-alpha-1 prose-table:bg-bg-2 prose-table:text-sm prose-tr:border-t prose-tr:border-alpha-1 prose-th:px-3 prose-th:py-1 prose-th:text-left prose-th:font-normal prose-th:text-fg-4 prose-td:px-3 prose-td:py-1; }