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
+