diff --git a/apps/studio/components/interfaces/HomePageActions.tsx b/apps/studio/components/interfaces/HomePageActions.tsx index 2509b438ce980..0667f73c2cf0c 100644 --- a/apps/studio/components/interfaces/HomePageActions.tsx +++ b/apps/studio/components/interfaces/HomePageActions.tsx @@ -5,21 +5,15 @@ import { useOrgProjectsInfiniteQuery } from 'data/projects/org-projects-infinite import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { PROJECT_STATUS } from 'lib/constants' -import { Filter, Grid, List, Loader2, Plus, Search, X } from 'lucide-react' +import { Grid, List, Loader2, Plus, Search, X } from 'lucide-react' import Link from 'next/link' import { parseAsArrayOf, parseAsString, useQueryState } from 'nuqs' -import { - Button, - Checkbox_Shadcn_, - Label_Shadcn_, - Popover_Shadcn_, - PopoverContent_Shadcn_, - PopoverTrigger_Shadcn_, - ToggleGroup, - ToggleGroupItem, -} from 'ui' +import { useEffect } from 'react' +import { Button, ToggleGroup, ToggleGroupItem } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' +import { FilterPopover } from '../ui/FilterPopover' + interface HomePageActionsProps { slug?: string hideNewProject?: boolean @@ -43,6 +37,10 @@ export const HomePageActions = ({ ) const [viewMode, setViewMode] = useLocalStorageQuery(LOCAL_STORAGE_KEYS.PROJECTS_VIEW, 'grid') + const [filterStatusStorage, setFilterStatusStorage, { isSuccess }] = useLocalStorageQuery< + string[] + >(LOCAL_STORAGE_KEYS.PROJECTS_FILTER, []) + const { isFetching: isFetchingProjects } = useOrgProjectsInfiniteQuery( { slug, @@ -52,6 +50,10 @@ export const HomePageActions = ({ { placeholderData: keepPreviousData } ) + useEffect(() => { + if (isSuccess && !!urlSlug) setFilterStatus(filterStatusStorage) + }, [filterStatusStorage, isSuccess, urlSlug, setFilterStatus]) + return (
@@ -76,44 +78,18 @@ export const HomePageActions = ({ ]} /> - - -
diff --git a/apps/studio/components/ui/FilterPopover.tsx b/apps/studio/components/ui/FilterPopover.tsx index a052ed2dd0c94..9583df9dac1ca 100644 --- a/apps/studio/components/ui/FilterPopover.tsx +++ b/apps/studio/components/ui/FilterPopover.tsx @@ -1,8 +1,7 @@ import { useIntersectionObserver } from '@uidotdev/usehooks' import { noop } from 'lodash' -import { X } from 'lucide-react' +import { ChevronDown, X } from 'lucide-react' import { useEffect, useRef, useState } from 'react' - import { Button, Checkbox_Shadcn_, @@ -12,9 +11,6 @@ import { PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, ScrollArea, - Tooltip, - TooltipContent, - TooltipTrigger, } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' @@ -185,6 +181,7 @@ export const FilterPopover = >({ type={buttonType ?? (activeOptions.length > 0 ? 'default' : 'dashed')} onClick={() => setOpen(false)} className={variant === 'rounded' ? 'rounded-full' : ''} + iconRight={} >
{name} @@ -259,10 +256,12 @@ export const FilterPopover = >({ )}
- {hasNextPage && ( + {hasNextPage ? (
+ ) : ( +
)}
diff --git a/packages/common/constants/local-storage.ts b/packages/common/constants/local-storage.ts index 6a6aeb6518bb5..d35915541a0f6 100644 --- a/packages/common/constants/local-storage.ts +++ b/packages/common/constants/local-storage.ts @@ -7,6 +7,7 @@ export const LOCAL_STORAGE_KEYS = { SIDEBAR_BEHAVIOR: 'supabase-sidebar-behavior', EDITOR_PANEL_STATE: 'supabase-editor-panel-state', PROJECTS_VIEW: 'projects-view', + PROJECTS_FILTER: 'projects-filter', FEEDBACK_WIDGET_CONTENT: 'feedback-widget-content', FEEDBACK_WIDGET_SCREENSHOT: 'feedback-widget-screenshot', INCIDENT_BANNER_DISMISSED: (id: string) => `incident-banner-dismissed-${id}`,