diff --git a/src/renderer/features/albums/components/album-list-header-filters.tsx b/src/renderer/features/albums/components/album-list-header-filters.tsx index 6db35b049..3664160f3 100644 --- a/src/renderer/features/albums/components/album-list-header-filters.tsx +++ b/src/renderer/features/albums/components/album-list-header-filters.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next'; import { ALBUM_TABLE_COLUMNS } from '/@/renderer/components/item-list/item-table-list/default-columns'; import { useAlbumListFilters } from '/@/renderer/features/albums/hooks/use-album-list-filters'; import { ListConfigMenu } from '/@/renderer/features/shared/components/list-config-menu'; +import { ListDisplayTypeToggleButton } from '/@/renderer/features/shared/components/list-display-type-toggle-button'; import { ListFiltersModal } from '/@/renderer/features/shared/components/list-filters'; import { ListRefreshButton } from '/@/renderer/features/shared/components/list-refresh-button'; import { ListSortByDropdown } from '/@/renderer/features/shared/components/list-sort-by-dropdown'; @@ -69,6 +70,7 @@ export const AlbumListHeaderFilters = ({ toggleGenreTarget }: { toggleGenreTarge + { + { + { + { + ; + displayType: ListDisplayType; + onToggle: () => void; +} + +export const DisplayTypeToggleButton = ({ + buttonProps, + displayType, + onToggle, +}: DisplayTypeToggleButtonProps) => { + const { t } = useTranslation(); + const isGrid = displayType === ListDisplayType.GRID; + + return ( + + ); +}; diff --git a/src/renderer/features/shared/components/list-display-type-toggle-button.tsx b/src/renderer/features/shared/components/list-display-type-toggle-button.tsx new file mode 100644 index 000000000..80cfadb24 --- /dev/null +++ b/src/renderer/features/shared/components/list-display-type-toggle-button.tsx @@ -0,0 +1,24 @@ +import { DisplayTypeToggleButton } from '/@/renderer/features/shared/components/display-type-toggle-button'; +import { useSettingsStore, useSettingsStoreActions } from '/@/renderer/store'; +import { ItemListKey, ListDisplayType } from '/@/shared/types/types'; + +interface ListDisplayTypeToggleButtonProps { + listKey: ItemListKey; +} + +export const ListDisplayTypeToggleButton = ({ listKey }: ListDisplayTypeToggleButtonProps) => { + const displayType = useSettingsStore( + (state) => state.lists[listKey]?.display, + ) as ListDisplayType; + const { setList } = useSettingsStoreActions(); + + const handleToggleDisplayType = () => { + const newDisplayType = + displayType === ListDisplayType.GRID ? ListDisplayType.TABLE : ListDisplayType.GRID; + setList(listKey, { + display: newDisplayType, + }); + }; + + return ; +}; diff --git a/src/renderer/features/songs/components/song-list-header-filters.tsx b/src/renderer/features/songs/components/song-list-header-filters.tsx index 6b7e707cf..642cfa776 100644 --- a/src/renderer/features/songs/components/song-list-header-filters.tsx +++ b/src/renderer/features/songs/components/song-list-header-filters.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next'; import { SONG_TABLE_COLUMNS } from '/@/renderer/components/item-list/item-table-list/default-columns'; import { useAlbumListFilters } from '/@/renderer/features/albums/hooks/use-album-list-filters'; import { ListConfigMenu } from '/@/renderer/features/shared/components/list-config-menu'; +import { ListDisplayTypeToggleButton } from '/@/renderer/features/shared/components/list-display-type-toggle-button'; import { ListFiltersModal } from '/@/renderer/features/shared/components/list-filters'; import { ListRefreshButton } from '/@/renderer/features/shared/components/list-refresh-button'; import { ListSortByDropdown } from '/@/renderer/features/shared/components/list-sort-by-dropdown'; @@ -69,6 +70,7 @@ export const SongListHeaderFilters = ({ toggleGenreTarget }: { toggleGenreTarget +