Move handlers to separate functions

This commit is contained in:
jeffvli
2022-11-08 01:36:26 -08:00
parent 3cdd08fe89
commit 9022f05463
@@ -1,6 +1,6 @@
/* eslint-disable no-plusplus */ /* eslint-disable no-plusplus */
import { useState, useCallback, useMemo } from 'react'; import { useState, useCallback, useMemo, MouseEvent } from 'react';
import { Group, Box, Slider } from '@mantine/core'; import { Group, Box } from '@mantine/core';
import { useDebouncedValue, useSetState, useToggle } from '@mantine/hooks'; import { useDebouncedValue, useSetState, useToggle } from '@mantine/hooks';
import { useQueryClient } from '@tanstack/react-query'; import { useQueryClient } from '@tanstack/react-query';
import { AnimatePresence, motion } from 'framer-motion'; import { AnimatePresence, motion } from 'framer-motion';
@@ -21,6 +21,7 @@ import {
DropdownMenu, DropdownMenu,
NumberInput, NumberInput,
ScrollArea, ScrollArea,
Slider,
Paper, Paper,
Text, Text,
VirtualGridAutoSizerContainer, VirtualGridAutoSizerContainer,
@@ -168,6 +169,66 @@ export const AlbumListRoute = () => {
200 200
); );
const handleSetFilter = (e: MouseEvent<HTMLButtonElement>) => {
if (!e.currentTarget?.value) return;
setFilters({ sortBy: e.currentTarget.value as AlbumSort });
};
const handleSetOrder = (e: MouseEvent<HTMLButtonElement>) => {
if (!e.currentTarget?.value) return;
setFilters({ orderBy: e.currentTarget.value as SortOrder });
};
const handleSetServerFolder = (e: MouseEvent<HTMLButtonElement>) => {
if (!e.currentTarget?.value) return;
const value = e.currentTarget.value as string;
if (filters.serverFolderId.includes(value)) {
setFilters({
serverFolderId: filters.serverFolderId.filter((id) => id !== value),
});
} else {
setFilters({
serverFolderId: [...filters.serverFolderId, value],
});
}
};
const handleToggleAdvancedFilters = () => {
toggleAdvFilter();
};
const handleSetViewType = (e: MouseEvent<HTMLButtonElement>) => {
if (!e.currentTarget?.value) return;
const type = e.currentTarget.value;
if (type === CardDisplayType.CARD) {
setPage('albums', {
...page,
list: {
...page.list,
display: CardDisplayType.CARD,
type: 'grid',
},
});
} else if (type === CardDisplayType.POSTER) {
setPage('albums', {
...page,
list: {
...page.list,
display: CardDisplayType.POSTER,
type: 'grid',
},
});
} else {
setPage('albums', {
...page,
list: {
...page.list,
type: 'list',
},
});
}
};
return ( return (
<AnimatedPage> <AnimatedPage>
<VirtualGridContainer> <VirtualGridContainer>
@@ -190,7 +251,8 @@ export const AlbumListRoute = () => {
<DropdownMenu.Item <DropdownMenu.Item
key={`filter-${filter.value}`} key={`filter-${filter.value}`}
$isActive={filter.value === filters.sortBy} $isActive={filter.value === filters.sortBy}
onClick={() => setFilters({ sortBy: filter.value })} value={filter.value}
onClick={handleSetFilter}
> >
{filter.name} {filter.name}
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -198,7 +260,7 @@ export const AlbumListRoute = () => {
<DropdownMenu.Divider /> <DropdownMenu.Divider />
<DropdownMenu.Item <DropdownMenu.Item
$isActive={isAdvFilter} $isActive={isAdvFilter}
onClick={() => toggleAdvFilter()} onClick={handleToggleAdvancedFilters}
> >
Advanced Filters Advanced Filters
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -218,7 +280,8 @@ export const AlbumListRoute = () => {
<DropdownMenu.Item <DropdownMenu.Item
key={`sort-${sort.value}`} key={`sort-${sort.value}`}
$isActive={sort.value === filters.orderBy} $isActive={sort.value === filters.orderBy}
onClick={() => setFilters({ orderBy: sort.value })} value={sort.value}
onClick={handleSetOrder}
> >
{sort.name} {sort.name}
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -239,22 +302,8 @@ export const AlbumListRoute = () => {
key={folder.id} key={folder.id}
$isActive={filters.serverFolderId.includes(folder.id)} $isActive={filters.serverFolderId.includes(folder.id)}
closeMenuOnClick={false} closeMenuOnClick={false}
onClick={() => { value={folder.id}
if (filters.serverFolderId.includes(folder.id)) { onClick={handleSetServerFolder}
setFilters({
serverFolderId: filters.serverFolderId.filter(
(id) => id !== folder.id
),
});
} else {
setFilters({
serverFolderId: [
...filters.serverFolderId,
folder.id,
],
});
}
}}
> >
{folder.name} {folder.name}
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -283,16 +332,8 @@ export const AlbumListRoute = () => {
page.list.type === 'grid' && page.list.type === 'grid' &&
page.list.display === CardDisplayType.CARD page.list.display === CardDisplayType.CARD
} }
onClick={() => value={CardDisplayType.CARD}
setPage('albums', { onClick={handleSetViewType}
...page,
list: {
...page.list,
display: CardDisplayType.CARD,
type: 'grid',
},
})
}
> >
Card Card
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -301,31 +342,16 @@ export const AlbumListRoute = () => {
page.list.type === 'grid' && page.list.type === 'grid' &&
page.list.display === CardDisplayType.POSTER page.list.display === CardDisplayType.POSTER
} }
onClick={() => value={CardDisplayType.POSTER}
setPage('albums', { onClick={handleSetViewType}
...page,
list: {
...page.list,
display: CardDisplayType.POSTER,
type: 'grid',
},
})
}
> >
Poster Poster
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
disabled disabled
$isActive={page.list.type === 'list'} $isActive={page.list.type === 'list'}
onClick={() => value="list"
setPage('albums', { onClick={handleSetViewType}
...page,
list: {
...page.list,
type: 'list',
},
})
}
> >
List List
</DropdownMenu.Item> </DropdownMenu.Item>