From 9d5c6c259273773776e5170b26ddcf7d0d6c7fc1 Mon Sep 17 00:00:00 2001 From: cade Date: Sun, 30 Jun 2024 17:09:28 -0700 Subject: [PATCH] add basic subject archive functionality --- .../event-types/[eventTypeId]/page.tsx | 1 + .../subjects/(group)/@archived/loading.tsx | 3 + .../subjects/(group)/@archived/page.tsx | 15 +++ .../(private)/subjects/(group)/layout.tsx | 8 +- .../(private)/subjects/(group)/page.tsx | 107 +---------------- app/_components/event-card.tsx | 11 +- app/_components/event-comment.tsx | 30 +++-- app/_components/event-comments.tsx | 3 + app/_components/event-form.tsx | 4 +- app/_components/event-page.tsx | 1 + app/_components/event-type-form.tsx | 2 +- app/_components/input-form.tsx | 2 +- app/_components/insights.tsx | 9 +- app/_components/module-form-section.tsx | 2 +- app/_components/session-layout.tsx | 3 + app/_components/session-page.tsx | 2 + app/_components/sessions-page.tsx | 8 +- app/_components/subject-events-page.tsx | 1 + app/_components/subject-insights-page.tsx | 3 +- app/_components/subject-layout.tsx | 10 +- app/_components/subject-list.tsx | 111 ++++++++++++++++++ app/_components/subject-menu.tsx | 27 ++++- app/_components/timeline-event-card.tsx | 5 +- app/_components/timeline-events.tsx | 3 + app/_mutations/delete-subject.ts | 13 -- app/_mutations/update-subject.ts | 5 +- app/_queries/collapsible-archive.tsx | 36 ++++++ app/_queries/count-archived-subjects.ts | 10 ++ app/_queries/get-input.ts | 3 +- app/_queries/get-subject.ts | 5 +- app/_queries/list-inputs-by-subject-id.ts | 1 + app/_queries/list-inputs.ts | 1 + app/_queries/list-subjects-by-team-id.ts | 3 +- app/_queries/list-subjects.ts | 7 +- bun.lockb | Bin 354111 -> 354870 bytes package.json | 1 + ...0701001105_add-subject-archived-column.sql | 4 + 37 files changed, 298 insertions(+), 162 deletions(-) create mode 100644 app/(pages)/(private)/subjects/(group)/@archived/loading.tsx create mode 100644 app/(pages)/(private)/subjects/(group)/@archived/page.tsx create mode 100644 app/_components/subject-list.tsx delete mode 100644 app/_mutations/delete-subject.ts create mode 100644 app/_queries/collapsible-archive.tsx create mode 100644 app/_queries/count-archived-subjects.ts create mode 100644 supabase/migrations/20240701001105_add-subject-archived-column.sql diff --git a/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/event-types/[eventTypeId]/page.tsx b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/event-types/[eventTypeId]/page.tsx index 02ef20ab..98b396db 100644 --- a/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/event-types/[eventTypeId]/page.tsx +++ b/app/(pages)/(private)/@modal/(md)/subjects/[subjectId]/event-types/[eventTypeId]/page.tsx @@ -28,6 +28,7 @@ const Page = async ({ params: { eventTypeId, subjectId } }: PageProps) => { null; + +export default Loading; diff --git a/app/(pages)/(private)/subjects/(group)/@archived/page.tsx b/app/(pages)/(private)/subjects/(group)/@archived/page.tsx new file mode 100644 index 00000000..74d0c804 --- /dev/null +++ b/app/(pages)/(private)/subjects/(group)/@archived/page.tsx @@ -0,0 +1,15 @@ +import SubjectList from '@/_components/subject-list'; +import CollapsibleArchive from '@/_queries/collapsible-archive'; +import countArchivedSubjects from '@/_queries/count-archived-subjects'; + +const Page = async () => { + const { count } = await countArchivedSubjects(); + if (!count) return null; + + return ( + + + + ); +}; +export default Page; diff --git a/app/(pages)/(private)/subjects/(group)/layout.tsx b/app/(pages)/(private)/subjects/(group)/layout.tsx index bf55eb1a..60a6ca7c 100644 --- a/app/(pages)/(private)/subjects/(group)/layout.tsx +++ b/app/(pages)/(private)/subjects/(group)/layout.tsx @@ -2,10 +2,11 @@ import Button from '@/_components/button'; import { ReactNode } from 'react'; interface LayoutProps { + archived: ReactNode; children: ReactNode; } -const Layout = ({ children }: LayoutProps) => ( +const Layout = async ({ archived, children }: LayoutProps) => ( <>

Subjects

@@ -13,7 +14,10 @@ const Layout = ({ children }: LayoutProps) => ( Create subject
- {children} +
+ {children} + {archived} +
); diff --git a/app/(pages)/(private)/subjects/(group)/page.tsx b/app/(pages)/(private)/subjects/(group)/page.tsx index 4530f50c..26f5553d 100644 --- a/app/(pages)/(private)/subjects/(group)/page.tsx +++ b/app/(pages)/(private)/subjects/(group)/page.tsx @@ -1,110 +1,7 @@ -import Avatar from '@/_components/avatar'; -import Button from '@/_components/button'; -import Empty from '@/_components/empty'; -import SubjectMenu from '@/_components/subject-menu'; -import getCurrentUser from '@/_queries/get-current-user'; -import listSubjects, { ListSubjectsData } from '@/_queries/list-subjects'; -import ArrowRightIcon from '@heroicons/react/24/outline/ArrowRightIcon'; -import EllipsisVerticalIcon from '@heroicons/react/24/outline/EllipsisVerticalIcon'; -import InformationCircleIcon from '@heroicons/react/24/outline/InformationCircleIcon'; +import SubjectList from '@/_components/subject-list'; export const metadata = { title: 'Subjects' }; -const Page = async () => { - const [{ data: subjects }, user] = await Promise.all([ - listSubjects(), - getCurrentUser(), - ]); - - if (!subjects?.length) { - return ( - - - Subjects can be dogs, cats, humans or -
- anything else you want to track. -
- ); - } - - const { - clientSubjects, - teamSubjects, - }: { - clientSubjects: NonNullable; - teamSubjects: NonNullable; - } = subjects.reduce( - (acc, subject) => { - if (!!user && subject.team_id === user.id) acc.teamSubjects.push(subject); - else acc.clientSubjects.push(subject); - return acc; - }, - { - clientSubjects: [] as NonNullable, - teamSubjects: [] as NonNullable, - }, - ); - - return ( -
- {!!teamSubjects.length && ( -
    - {teamSubjects.map((subject) => ( -
  • - - -
    - -
    -
    -
  • - ))} -
- )} - {!!clientSubjects.length && ( -
    - {clientSubjects.map((subject) => ( -
  • - -
  • - ))} -
- )} -
- ); -}; +const Page = () => ; export default Page; diff --git a/app/_components/event-card.tsx b/app/_components/event-card.tsx index a3f9302c..bc57972f 100644 --- a/app/_components/event-card.tsx +++ b/app/_components/event-card.tsx @@ -20,6 +20,7 @@ interface EventCardProps { | NonNullable | NonNullable['modules'][0]; hideContent?: boolean; + isArchived?: boolean; isPublic?: boolean; isTeamMember?: boolean; mission?: NonNullable; @@ -32,6 +33,7 @@ const EventCard = ({ event, eventType, hideContent, + isArchived, isPublic, isTeamMember, mission, @@ -39,7 +41,6 @@ const EventCard = ({ user, }: EventCardProps) => { const comments = forceArray(event?.comments); - const showComments = event && (!isPublic || !!comments.length); const showDescription = !hideContent && !!eventType.content; const showModule = mission && typeof eventType.order === 'number'; @@ -73,25 +74,27 @@ const EventCard = ({ )} )} - {(!isPublic || event) && ( + {(event || (!isPublic && !isArchived)) && ( )} - {showComments && ( + {event && (!!comments.length || (!isPublic && !isArchived)) && (
- {!isPublic && } + {!isPublic && !isArchived && }
)} diff --git a/app/_components/event-comment.tsx b/app/_components/event-comment.tsx index f22d32f8..1b201a15 100644 --- a/app/_components/event-comment.tsx +++ b/app/_components/event-comment.tsx @@ -16,6 +16,7 @@ interface EventCommentProps { createdAt: string; id: string; profile: Database['public']['Tables']['profiles']['Row']; + isArchived?: boolean; isPublic?: boolean; isTeamMember?: boolean; userId?: string; @@ -26,6 +27,7 @@ const EventComment = ({ createdAt, id, profile, + isArchived, isPublic, isTeamMember, userId, @@ -54,19 +56,21 @@ const EventComment = ({ formatter="date-time" /> - {!isPublic && (userId === profile.id || isTeamMember) && ( - - - - - - toggleDeleteAlert(true)}> - - Delete comment - - - - )} + {!isPublic && + !isArchived && + (userId === profile.id || isTeamMember) && ( + + + + + + toggleDeleteAlert(true)}> + + Delete comment + + + + )} {content} diff --git a/app/_components/event-comments.tsx b/app/_components/event-comments.tsx index 0b6421fb..c52281b7 100644 --- a/app/_components/event-comments.tsx +++ b/app/_components/event-comments.tsx @@ -12,6 +12,7 @@ interface EventCommentsProps { id: string; profile: Database['public']['Tables']['profiles']['Row']; }>; + isArchived?: boolean; isPublic?: boolean; isTeamMember?: boolean; userId?: string; @@ -20,6 +21,7 @@ interface EventCommentsProps { const EventComments = ({ className, comments, + isArchived, isPublic, isTeamMember, userId, @@ -33,6 +35,7 @@ const EventComments = ({ content={content} createdAt={created_at} id={id} + isArchived={isArchived} isPublic={isPublic} isTeamMember={isTeamMember} key={id} diff --git a/app/_components/event-form.tsx b/app/_components/event-form.tsx index aff0254e..fbfecc66 100644 --- a/app/_components/event-form.tsx +++ b/app/_components/event-form.tsx @@ -34,6 +34,7 @@ interface EventFormProps { | NonNullable['type']> | NonNullable | NonNullable['modules'][0]; + isArchived?: boolean; isMission?: boolean; isPublic?: boolean; subjectId: string; @@ -55,6 +56,7 @@ const EventForm = ({ disabled, event, eventType, + isArchived, isMission, isPublic, subjectId, @@ -305,7 +307,7 @@ const EventForm = ({ {form.formState.errors.root.message} )} - {!isPublic && ( + {!isPublic && !isArchived && (
{!event && !isMission && ( diff --git a/app/_components/event-page.tsx b/app/_components/event-page.tsx index 5fdd3796..3c379682 100644 --- a/app/_components/event-page.tsx +++ b/app/_components/event-page.tsx @@ -44,6 +44,7 @@ const EventPage = async ({ eventId, isPublic, subjectId }: EventPageProps) => { setCreateInputModal({ label: value, - subjects_for: [{ subject_id: subjectId }], + subjects: [{ id: subjectId }], }) } options={availableInputs as IOption[]} diff --git a/app/_components/input-form.tsx b/app/_components/input-form.tsx index 8494f8b1..5d7f63bd 100644 --- a/app/_components/input-form.tsx +++ b/app/_components/input-form.tsx @@ -70,7 +70,7 @@ const InputForm = ({ options: input?.options ?? [], settings: input?.settings as InputSettingsJson, subjects: forceArray(subjects).filter(({ id }) => - input?.subjects_for?.some(({ subject_id }) => subject_id === id), + input?.subjects?.some((sf) => sf.id === id), ), type: INPUT_TYPE_OPTIONS.find(({ id }) => id === input?.type), }, diff --git a/app/_components/insights.tsx b/app/_components/insights.tsx index b051f37a..4b7f7301 100644 --- a/app/_components/insights.tsx +++ b/app/_components/insights.tsx @@ -13,6 +13,7 @@ import { twMerge } from 'tailwind-merge'; interface InsightsProps { events: NonNullable; insights: NonNullable; + isArchived?: boolean; isPublic?: boolean; isTeamMember: boolean; searchString: string; @@ -23,6 +24,7 @@ interface InsightsProps { const Insights = ({ events, insights, + isArchived, isPublic, isTeamMember, searchString, @@ -34,6 +36,7 @@ const Insights = ({ return insights.map((insight) => { const config = insight.config as InsightConfigJson; + const isReadOnly = !isTeamMember || isArchived; return (
{insight.name} - {!isTeamMember && ( + {isReadOnly && ( )} - {isTeamMember && ( + {!isReadOnly && ( )}
diff --git a/app/_components/module-form-section.tsx b/app/_components/module-form-section.tsx index 5e38b82b..4de4eae9 100644 --- a/app/_components/module-form-section.tsx +++ b/app/_components/module-form-section.tsx @@ -187,7 +187,7 @@ const ModuleFormSection = >({ onCreateOption={(value) => setCreateInputModal({ label: value, - subjects_for: [{ subject_id: subjectId }], + subjects: [{ id: subjectId }], }) } options={availableInputs as IOption[]} diff --git a/app/_components/session-layout.tsx b/app/_components/session-layout.tsx index 029299fe..f0a3c2f7 100644 --- a/app/_components/session-layout.tsx +++ b/app/_components/session-layout.tsx @@ -10,6 +10,7 @@ import { ReactNode } from 'react'; interface SessionLayoutProps { children: ReactNode; + isArchived?: boolean; isCreate?: boolean; isEdit?: boolean; isPublic?: boolean; @@ -23,6 +24,7 @@ interface SessionLayoutProps { const SessionLayout = async ({ children, + isArchived, isCreate, isEdit, isPublic, @@ -104,6 +106,7 @@ const SessionLayout = async ({ Draft ) : ( !isPublic && + !isArchived && isTeamMember && (isEditOrCreate ? (

{mission.name}

- {!isPublic && isTeamMember && ( + {!isPublic && !subject.archived && isTeamMember && ( - {!isPublic && isTeamMember && ( + {!isPublic && !subject.archived && isTeamMember && ( - {isTeamMember && ( + {isTeamMember && !subject.archived && ( + +
+ +
+
+ + ))} + + )} + {!!clientSubjects.length && ( +
    + {clientSubjects.map((subject) => ( +
  • + +
  • + ))} +
+ )} + + ); +}; + +export default SubjectList; diff --git a/app/_components/subject-menu.tsx b/app/_components/subject-menu.tsx index b59f5f2f..e9712caf 100644 --- a/app/_components/subject-menu.tsx +++ b/app/_components/subject-menu.tsx @@ -7,11 +7,12 @@ import Menu from '@/_components/menu'; import Switch from '@/_components/switch'; import Tip from '@/_components/tip'; import createShareCode from '@/_mutations/create-share-code'; -import deleteSubject from '@/_mutations/delete-subject'; 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 ArchiveBoxIcon from '@heroicons/react/24/outline/ArchiveBoxIcon'; +import ArchiveBoxXMarkIcon from '@heroicons/react/24/outline/ArchiveBoxXMarkIcon'; import ArrowDownTrayIcon from '@heroicons/react/24/outline/ArrowDownTrayIcon'; import ArrowTopRightOnSquareIcon from '@heroicons/react/24/outline/ArrowTopRightOnSquareIcon'; import CheckIcon from '@heroicons/react/24/outline/CheckIcon'; @@ -43,6 +44,7 @@ const SubjectMenu = ({ const [deleteAlert, toggleDeleteAlert] = useToggle(false); const [hasCopiedClientLink, toggleHasCopiedClientLink] = useToggle(false); const [hasCopiedPublicLink, toggleHasCopiedPublicLink] = useToggle(false); + const [isArchiveTransitioning, startIsArchiveTransition] = useTransition(); const [isDownloadTransitioning, startIsDownloadTransition] = useTransition(); const [isGenerateTransitioning, startGenerateTransition] = useTransition(); const [opPublic, toggleOpPublic] = useOptimistic(subject.public, (s) => !s); @@ -134,6 +136,27 @@ const SubjectMenu = ({ Export events + + startIsArchiveTransition(async () => { + e.preventDefault(); + + await updateSubject({ + archived: !subject.archived, + id: subject.id, + }); + }) + } + > + {subject.archived ? ( + + ) : ( + + )} + {subject.archived ? 'Unarchive' : 'Archive'} + toggleDeleteAlert(true)}> Delete @@ -145,7 +168,7 @@ const SubjectMenu = ({ isConfirmingText="Deleting…" isOpen={deleteAlert} onClose={toggleDeleteAlert} - onConfirm={() => deleteSubject(subject.id)} + onConfirm={() => updateSubject({ deleted: true, id: subject.id })} />
diff --git a/app/_components/timeline-event-card.tsx b/app/_components/timeline-event-card.tsx index e619445c..48113683 100644 --- a/app/_components/timeline-event-card.tsx +++ b/app/_components/timeline-event-card.tsx @@ -20,6 +20,7 @@ import EventComments, { interface TimelineEventCardProps { group: NonNullable; + isArchived?: boolean; isPublic?: boolean; isTeamMember: boolean; subjectId: string; @@ -28,6 +29,7 @@ interface TimelineEventCardProps { const TimelineEventCard = ({ group, + isArchived, isPublic, isTeamMember, subjectId, @@ -183,11 +185,12 @@ const TimelineEventCard = ({
- {!isPublic && ( + {!isPublic && !isArchived && ( ; filters: EventFilters; + isArchived?: boolean; isPublic?: boolean; isTeamMember: boolean; subjectId: string; @@ -23,6 +24,7 @@ interface TimelineEventsProps { const TimelineEvents = ({ events, filters, + isArchived, isPublic, isTeamMember, subjectId, @@ -63,6 +65,7 @@ const TimelineEvents = ({ {dayGroup.map((eventGroup) => ( { - const supabase = createServerSupabaseClient(); - await supabase.from('subjects').update({ deleted: true }).eq('id', id); - await supabase.from('input_subjects').delete().eq('subject_id', id); - revalidatePath('/', 'layout'); -}; - -export default deleteSubject; diff --git a/app/_mutations/update-subject.ts b/app/_mutations/update-subject.ts index f416e6e2..9b9acaa6 100644 --- a/app/_mutations/update-subject.ts +++ b/app/_mutations/update-subject.ts @@ -1,9 +1,12 @@ 'use server'; +import { Database } from '@/_types/database'; import createServerSupabaseClient from '@/_utilities/create-server-supabase-client'; import { revalidatePath } from 'next/cache'; -const updateSubject = async (subject: { public: boolean; id: string }) => { +const updateSubject = async ( + subject: Database['public']['Tables']['subjects']['Update'] & { id: string }, +) => { await createServerSupabaseClient() .from('subjects') .update(subject) diff --git a/app/_queries/collapsible-archive.tsx b/app/_queries/collapsible-archive.tsx new file mode 100644 index 00000000..597b1f71 --- /dev/null +++ b/app/_queries/collapsible-archive.tsx @@ -0,0 +1,36 @@ +'use client'; +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 { ReactNode, useState } from 'react'; + +interface CollapsibleArchiveProps { + children: ReactNode; + label: string; +} + +const CollapsibleArchive = ({ children, label }: CollapsibleArchiveProps) => { + const [isOpen, setIsOpen] = useState(false); + + return ( + + + {children} + +
+ + + +
+
+ ); +}; +export default CollapsibleArchive; diff --git a/app/_queries/count-archived-subjects.ts b/app/_queries/count-archived-subjects.ts new file mode 100644 index 00000000..0a60ad88 --- /dev/null +++ b/app/_queries/count-archived-subjects.ts @@ -0,0 +1,10 @@ +import createServerSupabaseClient from '@/_utilities/create-server-supabase-client'; + +const countArchivedSubjects = async () => + createServerSupabaseClient() + .from('subjects') + .select('*', { count: 'exact', head: true }) + .eq('archived', true) + .eq('deleted', false); + +export default countArchivedSubjects; diff --git a/app/_queries/get-input.ts b/app/_queries/get-input.ts index ee38c588..b7630d1e 100644 --- a/app/_queries/get-input.ts +++ b/app/_queries/get-input.ts @@ -9,10 +9,11 @@ const getInput = (inputId: string) => label, options:input_options(id, label), settings, - subjects_for:input_subjects(subject_id), + subjects(id), type`, ) .eq('id', inputId) + .eq('subjects.deleted', false) .order('order', { referencedTable: 'options' }) .single(); diff --git a/app/_queries/get-subject.ts b/app/_queries/get-subject.ts index d6896b0a..7b16c939 100644 --- a/app/_queries/get-subject.ts +++ b/app/_queries/get-subject.ts @@ -3,8 +3,11 @@ import createServerSupabaseClient from '@/_utilities/create-server-supabase-clie const getSubject = (subjectId: string) => createServerSupabaseClient() .from('subjects') - .select('banner, id, image_uri, name, public, share_code, team_id') + .select( + 'archived, banner, id, image_uri, name, public, share_code, team_id', + ) .eq('id', subjectId) + .eq('deleted', false) .single(); export type GetSubjectData = Awaited>['data']; diff --git a/app/_queries/list-inputs-by-subject-id.ts b/app/_queries/list-inputs-by-subject-id.ts index d5dd7664..0dec487e 100644 --- a/app/_queries/list-inputs-by-subject-id.ts +++ b/app/_queries/list-inputs-by-subject-id.ts @@ -26,6 +26,7 @@ const listInputsBySubjectId = async (subjectId: string) => { .eq('archived', false) .not('id', 'in', `(${blacklist.data.map((is) => is.input_id).join(',')})`) .eq('subjects.deleted', false) + .eq('subjects.archived', false) .order('name', { referencedTable: 'subjects' }) .order('label'); }; diff --git a/app/_queries/list-inputs.ts b/app/_queries/list-inputs.ts index b7befa25..1cf19b58 100644 --- a/app/_queries/list-inputs.ts +++ b/app/_queries/list-inputs.ts @@ -8,6 +8,7 @@ const listInputs = async () => .eq('team_id', (await getCurrentUser())?.id ?? '') .eq('archived', false) .eq('subjects.deleted', false) + .not('subjects.archived', 'is', null) .order('name', { referencedTable: 'subjects' }) .order('label'); diff --git a/app/_queries/list-subjects-by-team-id.ts b/app/_queries/list-subjects-by-team-id.ts index ea19f194..28afd826 100644 --- a/app/_queries/list-subjects-by-team-id.ts +++ b/app/_queries/list-subjects-by-team-id.ts @@ -4,9 +4,10 @@ import createServerSupabaseClient from '@/_utilities/create-server-supabase-clie const listSubjectsByTeamId = async () => createServerSupabaseClient() .from('subjects') - .select('id, image_uri, name, team_id') + .select('archived, id, image_uri, name, team_id') .eq('team_id', (await getCurrentUser())?.id ?? '') .eq('deleted', false) + .not('archived', 'is', null) .order('name'); export type ListSubjectsByTeamIdData = Awaited< diff --git a/app/_queries/list-subjects.ts b/app/_queries/list-subjects.ts index d627c042..00fda87d 100644 --- a/app/_queries/list-subjects.ts +++ b/app/_queries/list-subjects.ts @@ -1,11 +1,14 @@ import createServerSupabaseClient from '@/_utilities/create-server-supabase-client'; -const listSubjects = async () => +const listSubjects = async ( + { archived }: { archived: boolean } = { archived: false }, +) => createServerSupabaseClient() .from('subjects') - .select('id, image_uri, name, public, share_code, team_id') + .select('archived, id, image_uri, name, public, share_code, team_id') .not('team_id', 'is', null) .eq('deleted', false) + .eq('archived', archived) .order('name'); export type ListSubjectsData = Awaited>['data']; diff --git a/bun.lockb b/bun.lockb index ae9c06b1473ebc8f71ac65b3bd398a3b6a8e60d6..5ba00d9b83130c572c3eb3aa2d90aaa5d3871165 100755 GIT binary patch delta 55212 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 z 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 diff --git a/package.json b/package.json index f522c838..885b5c9d 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@headlessui/react": "^2.1.1", "@heroicons/react": "^2.1.4", "@observablehq/plot": "^0.6.15", + "@radix-ui/react-collapsible": "^1.1.0", "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-switch": "^1.1.0", diff --git a/supabase/migrations/20240701001105_add-subject-archived-column.sql b/supabase/migrations/20240701001105_add-subject-archived-column.sql new file mode 100644 index 00000000..66c7a769 --- /dev/null +++ b/supabase/migrations/20240701001105_add-subject-archived-column.sql @@ -0,0 +1,4 @@ +drop index if exists "public"."subjects_id_deleted_index"; +drop index if exists "public"."subjects_team_id_deleted_name_index"; +alter table "public"."subjects" add column "archived" boolean not null default false; +create index subjects_team_id_deleted_archived_name_index on public.subjects using btree (team_id, deleted, name, archived);