diff --git a/web/apps/photos/src/components/Collections/AllCollections/header.tsx b/web/apps/photos/src/components/Collections/AllCollections/header.tsx index adb902e5ca..3d227367bf 100644 --- a/web/apps/photos/src/components/Collections/AllCollections/header.tsx +++ b/web/apps/photos/src/components/Collections/AllCollections/header.tsx @@ -5,7 +5,7 @@ import { } from "@ente/shared/components/Container"; import Close from "@mui/icons-material/Close"; import { Box, DialogTitle, Stack, Typography } from "@mui/material"; -import { CollectionListSortOptions } from "components/Collections/CollectionListSortOptions"; +import { CollectionsSortOptions } from "components/Collections/CollectionListSortOptions"; import { t } from "i18next"; export default function AllCollectionsHeader({ @@ -31,7 +31,7 @@ export default function AllCollectionsHeader({ - void; /** - * The sort order that should be used for showing the collections in the - * bar. + * The scheme that should be used for sorting the collections in the bar. */ - collectionListSortBy: CollectionsSortBy; + collectionsSortBy: CollectionsSortBy; /** - * Called when the user changes the sort order. + * Called when the user changes the sorting scheme. */ - setCollectionListSortBy: (order: CollectionsSortBy) => void; + onChangeCollectionsSortBy: (by: CollectionsSortBy) => void; /** * The list of people that should be shown in the bar. */ @@ -92,8 +91,8 @@ export const CollectionListBar: React.FC = ({ activeCollectionID, setActiveCollectionID, onShowAllCollections, - collectionListSortBy, - setCollectionListSortBy, + collectionsSortBy, + onChangeCollectionsSortBy, people, activePerson, onSelectPerson, @@ -200,10 +199,10 @@ export const CollectionListBar: React.FC = ({ const controls1 = isMobile && ( - @@ -213,9 +212,9 @@ export const CollectionListBar: React.FC = ({ const controls2 = !isMobile && ( - diff --git a/web/apps/photos/src/components/Collections/CollectionListSortOptions.tsx b/web/apps/photos/src/components/Collections/CollectionsSortOptions.tsx similarity index 64% rename from web/apps/photos/src/components/Collections/CollectionListSortOptions.tsx rename to web/apps/photos/src/components/Collections/CollectionsSortOptions.tsx index 4479bcfde5..49e1772714 100644 --- a/web/apps/photos/src/components/Collections/CollectionListSortOptions.tsx +++ b/web/apps/photos/src/components/Collections/CollectionsSortOptions.tsx @@ -6,16 +6,35 @@ import SortIcon from "@mui/icons-material/Sort"; import SvgIcon from "@mui/material/SvgIcon"; import { t } from "i18next"; -interface CollectionListSortOptionsProps { - setSortBy: (order: CollectionsSortBy) => void; +interface CollectionsSortOptionsProps { + /** + * The sorting scheme currently active. + */ activeSortBy: CollectionsSortBy; + /** + * Change the scheme that should be used. + */ + onChangeSortBy: (by: CollectionsSortBy) => void; + /** + * Set this to true if we're being shown inside a dialog, to further + * increase the elevation of the menu. + */ nestedInDialog?: boolean; - disableBG?: boolean; + /** + * Set this to true to disable the background in the button that triggers + * the menu. + */ + disableTriggerButtonBackground?: boolean; } -export const CollectionListSortOptions: React.FC< - CollectionListSortOptionsProps -> = (props) => { +/** + * A button that shows an overflow menu allowing the user to choose from amongst + * the {@link CollectionsSortBy} values that should be used for sorting the + * lists of collections. + */ +export const CollectionsSortOptions: React.FC = ( + props, +) => { const SortByOption = SortByOptionCreator(props); return ( @@ -32,7 +51,8 @@ export const CollectionListSortOptions: React.FC< triggerButtonProps={{ sx: { background: (theme) => - !props.disableBG && theme.colors.fill.faint, + !props.disableTriggerButtonBackground && + theme.colors.fill.faint, }, }} > @@ -48,10 +68,10 @@ export const CollectionListSortOptions: React.FC< }; const SortByOptionCreator = - ({ setSortBy, activeSortBy }: CollectionListSortOptionsProps) => + ({ onChangeSortBy, activeSortBy }: CollectionsSortOptionsProps) => (props: { sortBy: CollectionsSortBy; children: any }) => { const handleClick = () => { - setSortBy(props.sortBy); + onChangeSortBy(props.sortBy); }; return ( diff --git a/web/apps/photos/src/components/Collections/index.tsx b/web/apps/photos/src/components/Collections/index.tsx index 17e012d58c..2709fad0a2 100644 --- a/web/apps/photos/src/components/Collections/index.tsx +++ b/web/apps/photos/src/components/Collections/index.tsx @@ -172,9 +172,9 @@ export const Collections: React.FC = ({ people, activePerson, onSelectPerson, - collectionListSortBy: collectionsSortBy, - setCollectionListSortBy: setCollectionsSortBy, + collectionsSortBy, }} + onChangeCollectionsSortBy={setCollectionsSortBy} onShowAllCollections={() => setOpenAllCollectionDialog(true)} collectionSummaries={sortedCollectionSummaries.filter((x) => shouldBeShownOnCollectionBar(x.type), @@ -256,5 +256,5 @@ const useCollectionsSortByLocalState = (initialValue: CollectionsSortBy) => { setValue(value); }; - return [value, setter]; + return [value, setter] as const; }; diff --git a/web/apps/photos/src/services/collectionService.ts b/web/apps/photos/src/services/collectionService.ts index f5a8ba4785..66d8e153cb 100644 --- a/web/apps/photos/src/services/collectionService.ts +++ b/web/apps/photos/src/services/collectionService.ts @@ -1068,13 +1068,13 @@ export const getFavCollection = async () => { } }; -export function sortCollectionSummaries( +export const sortCollectionSummaries = ( collectionSummaries: CollectionSummary[], - sortBy: CollectionsSortBy, -) { - return collectionSummaries + by: CollectionsSortBy, +) => + collectionSummaries .sort((a, b) => { - switch (sortBy) { + switch (by) { case "name": return a.name.localeCompare(b.name); case "creation-time-asc": @@ -1092,7 +1092,6 @@ export function sortCollectionSummaries( COLLECTION_SORT_ORDER.get(a.type) - COLLECTION_SORT_ORDER.get(b.type), ); -} function compareCollectionsLatestFile(first: EnteFile, second: EnteFile) { if (!first) {