import { WebApplication } from '@/UIModels/Application' import { CollectionSort, CollectionSortProperty, PrefKey } from '@standardnotes/snjs' import { observer } from 'mobx-react-lite' import { FunctionComponent } from 'preact' import { useCallback, useState } from 'preact/hooks' import { Icon } from '@/Components/Icon/Icon' import { Menu } from '@/Components/Menu/Menu' import { MenuItem, MenuItemSeparator, MenuItemType } from '@/Components/Menu/MenuItem' type Props = { application: WebApplication closeOnBlur: (event: { relatedTarget: EventTarget | null }) => void closeDisplayOptionsMenu: () => void isOpen: boolean } export const NotesListOptionsMenu: FunctionComponent = observer( ({ closeDisplayOptionsMenu, closeOnBlur, application, isOpen }) => { const [sortBy, setSortBy] = useState(() => application.getPreference(PrefKey.SortNotesBy, CollectionSort.CreatedAt)) const [sortReverse, setSortReverse] = useState(() => application.getPreference(PrefKey.SortNotesReverse, false)) const [hidePreview, setHidePreview] = useState(() => application.getPreference(PrefKey.NotesHideNotePreview, false)) const [hideDate, setHideDate] = useState(() => application.getPreference(PrefKey.NotesHideDate, false)) const [hideTags, setHideTags] = useState(() => application.getPreference(PrefKey.NotesHideTags, true)) const [hidePinned, setHidePinned] = useState(() => application.getPreference(PrefKey.NotesHidePinned, false)) const [showArchived, setShowArchived] = useState(() => application.getPreference(PrefKey.NotesShowArchived, false)) const [showTrashed, setShowTrashed] = useState(() => application.getPreference(PrefKey.NotesShowTrashed, false)) const [hideProtected, setHideProtected] = useState(() => application.getPreference(PrefKey.NotesHideProtected, false), ) const [hideEditorIcon, setHideEditorIcon] = useState(() => application.getPreference(PrefKey.NotesHideEditorIcon, false), ) const toggleSortReverse = useCallback(() => { application.setPreference(PrefKey.SortNotesReverse, !sortReverse).catch(console.error) setSortReverse(!sortReverse) }, [application, sortReverse]) const toggleSortBy = useCallback( (sort: CollectionSortProperty) => { if (sortBy === sort) { toggleSortReverse() } else { setSortBy(sort) application.setPreference(PrefKey.SortNotesBy, sort).catch(console.error) } }, [application, sortBy, toggleSortReverse], ) const toggleSortByDateModified = useCallback(() => { toggleSortBy(CollectionSort.UpdatedAt) }, [toggleSortBy]) const toggleSortByCreationDate = useCallback(() => { toggleSortBy(CollectionSort.CreatedAt) }, [toggleSortBy]) const toggleSortByTitle = useCallback(() => { toggleSortBy(CollectionSort.Title) }, [toggleSortBy]) const toggleHidePreview = useCallback(() => { setHidePreview(!hidePreview) application.setPreference(PrefKey.NotesHideNotePreview, !hidePreview).catch(console.error) }, [application, hidePreview]) const toggleHideDate = useCallback(() => { setHideDate(!hideDate) application.setPreference(PrefKey.NotesHideDate, !hideDate).catch(console.error) }, [application, hideDate]) const toggleHideTags = useCallback(() => { setHideTags(!hideTags) application.setPreference(PrefKey.NotesHideTags, !hideTags).catch(console.error) }, [application, hideTags]) const toggleHidePinned = useCallback(() => { setHidePinned(!hidePinned) application.setPreference(PrefKey.NotesHidePinned, !hidePinned).catch(console.error) }, [application, hidePinned]) const toggleShowArchived = useCallback(() => { setShowArchived(!showArchived) application.setPreference(PrefKey.NotesShowArchived, !showArchived).catch(console.error) }, [application, showArchived]) const toggleShowTrashed = useCallback(() => { setShowTrashed(!showTrashed) application.setPreference(PrefKey.NotesShowTrashed, !showTrashed).catch(console.error) }, [application, showTrashed]) const toggleHideProtected = useCallback(() => { setHideProtected(!hideProtected) application.setPreference(PrefKey.NotesHideProtected, !hideProtected).catch(console.error) }, [application, hideProtected]) const toggleEditorIcon = useCallback(() => { setHideEditorIcon(!hideEditorIcon) application.setPreference(PrefKey.NotesHideEditorIcon, !hideEditorIcon).catch(console.error) }, [application, hideEditorIcon]) return (
Sort by
Date modified {sortBy === CollectionSort.UpdatedAt ? ( sortReverse ? ( ) : ( ) ) : null}
Creation date {sortBy === CollectionSort.CreatedAt ? ( sortReverse ? ( ) : ( ) ) : null}
Title {sortBy === CollectionSort.Title ? ( sortReverse ? ( ) : ( ) ) : null}
View
Show note preview
Show date Show tags Show editor icon
Other
Show pinned notes Show protected notes Show archived notes Show trashed notes
) }, )