From 7e705ccfd895de599807943d08967fd4e4972534 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Mon, 6 Sep 2021 10:26:15 +0200 Subject: [PATCH] #89 - Clear filters, sorting, and grouping button --- .../components/Header/ClearFilters.tsx | 54 +++++++++++++++++++ src/pagesView/components/Header/Header.tsx | 11 ++-- 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 src/pagesView/components/Header/ClearFilters.tsx diff --git a/src/pagesView/components/Header/ClearFilters.tsx b/src/pagesView/components/Header/ClearFilters.tsx new file mode 100644 index 00000000..c297cca8 --- /dev/null +++ b/src/pagesView/components/Header/ClearFilters.tsx @@ -0,0 +1,54 @@ +import { XCircleIcon } from '@heroicons/react/solid'; +import * as React from 'react'; +import { useRecoilValue, useResetRecoilState } from 'recoil'; +import { SortingSelector, FolderSelector, TagSelector, CategorySelector, SortingAtom, DEFAULT_SORTING_OPTION, FolderAtom, DEFAULT_FOLDER_STATE, TagAtom, CategoryAtom, DEFAULT_TAG_STATE, DEFAULT_CATEGORY_STATE } from '../../state'; + +import { DefaultValue } from 'recoil'; + +export const guardRecoilDefaultValue = ( + candidate: any +): candidate is DefaultValue => { + if (candidate instanceof DefaultValue) return true; + return false; +}; + +export interface IClearFiltersProps {} + +export const ClearFilters: React.FunctionComponent = (props: React.PropsWithChildren) => { + const [ show, setShow ] = React.useState(false); + + const sorting = useRecoilValue(SortingSelector); + const folder = useRecoilValue(FolderSelector); + const tag = useRecoilValue(TagSelector); + const category = useRecoilValue(CategorySelector); + + const resetSorting = useResetRecoilState(SortingAtom); + const resetFolder = useResetRecoilState(FolderAtom); + const resetTag = useResetRecoilState(TagAtom); + const resetCategory = useResetRecoilState(CategoryAtom); + + const reset = () => { + setShow(false); + resetSorting(); + resetFolder(); + resetTag(); + resetCategory(); + }; + + React.useEffect(() => { + if (sorting !== DEFAULT_SORTING_OPTION || folder !== DEFAULT_FOLDER_STATE || tag !== DEFAULT_TAG_STATE || category !== DEFAULT_CATEGORY_STATE) { + setShow(true); + } else { + setShow(false); + } + }, [sorting, folder, tag, category]); + + if (!show) return null; + + return ( + + ); +}; \ No newline at end of file diff --git a/src/pagesView/components/Header/Header.tsx b/src/pagesView/components/Header/Header.tsx index 8ee0eaa3..e34228ca 100644 --- a/src/pagesView/components/Header/Header.tsx +++ b/src/pagesView/components/Header/Header.tsx @@ -4,7 +4,6 @@ import { Searchbox } from './Searchbox'; import { Filter } from './Filter'; import { Folders } from './Folders'; import { Settings } from '../../models'; -import { MessageHelper } from '../../../helpers/MessageHelper'; import { DashboardMessage } from '../../DashboardMessage'; import { Startup } from '../Startup'; import { Button } from '../Button'; @@ -13,6 +12,8 @@ import { Grouping } from '.'; import { ViewSwitch } from './ViewSwitch'; import { useRecoilState } from 'recoil'; import { CategoryAtom, TagAtom } from '../../state'; +import { Messenger } from '@estruyf/vscode/dist/client'; +import { ClearFilters } from './ClearFilters'; export interface IHeaderProps { settings: Settings; @@ -29,7 +30,7 @@ export const Header: React.FunctionComponent = ({totalPages, folde const [ crntCategory, setCrntCategory ] = useRecoilState(CategoryAtom); const createContent = () => { - MessageHelper.sendMessage(DashboardMessage.createContent); + Messenger.send(DashboardMessage.createContent); }; return ( @@ -55,11 +56,13 @@ export const Header: React.FunctionComponent = ({totalPages, folde
+ + - setCrntTag(value)} /> + setCrntTag(value)} /> - setCrntCategory(value)} /> + setCrntCategory(value)} />