From 3092f83a00047fddbef3f6a104fb09dd0ecc1f8c Mon Sep 17 00:00:00 2001 From: Deluan <deluan@navidrome.org> Date: Wed, 29 Jul 2020 14:41:18 -0400 Subject: [PATCH] Add option to select default album view --- resources/i18n/pt.json | 3 ++- ui/src/album/AlbumList.js | 5 +++-- ui/src/album/albumLists.js | 2 ++ ui/src/i18n/en.json | 3 ++- ui/src/personal/Personal.js | 25 +++++++++++++++++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json index a934b2741..b42113a8f 100644 --- a/resources/i18n/pt.json +++ b/resources/i18n/pt.json @@ -263,7 +263,8 @@ "name": "Pessoal", "options": { "theme": "Tema", - "language": "Língua" + "language": "Língua", + "defaultView": "Tela inicial" } } }, diff --git a/ui/src/album/AlbumList.js b/ui/src/album/AlbumList.js index a816c783d..65b557e9b 100644 --- a/ui/src/album/AlbumList.js +++ b/ui/src/album/AlbumList.js @@ -19,7 +19,7 @@ import AlbumListView from './AlbumListView' import AlbumGridView from './AlbumGridView' import { ALBUM_MODE_LIST } from './albumState' import AddToPlaylistDialog from '../dialogs/AddToPlaylistDialog' -import albumLists from './albumLists' +import albumLists, { defaultAlbumList } from './albumLists' const AlbumFilter = (props) => { const translate = useTranslate() @@ -73,7 +73,8 @@ const AlbumList = (props) => { // If it does not have filter/sort params (usually coming from Menu), // reload with correct filter/sort params if (!location.search) { - const type = albumListType || 'all' + const type = + albumListType || localStorage.getItem('defaultView') || defaultAlbumList const listParams = albumLists[type] if (listParams) { return <Redirect to={`/album/${type}?${listParams.params}`} /> diff --git a/ui/src/album/albumLists.js b/ui/src/album/albumLists.js index 49ec4674d..7dc1b0ef1 100644 --- a/ui/src/album/albumLists.js +++ b/ui/src/album/albumLists.js @@ -23,3 +23,5 @@ export default { params: 'sort=play_count&order=DESC&filter={"recently_played":true}', }, } + +export const defaultAlbumList = 'recentlyAdded' diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json index cbfd26abb..c1a288c66 100644 --- a/ui/src/i18n/en.json +++ b/ui/src/i18n/en.json @@ -264,7 +264,8 @@ "name": "Personal", "options": { "theme": "Theme", - "language": "Language" + "language": "Language", + "defaultView": "Default View" } } }, diff --git a/ui/src/personal/Personal.js b/ui/src/personal/Personal.js index 18a39b666..ab7f9bae4 100644 --- a/ui/src/personal/Personal.js +++ b/ui/src/personal/Personal.js @@ -15,6 +15,7 @@ import { changeTheme } from './actions' import themes from '../themes' import { docsUrl } from '../utils/docsUrl' import { useGetLanguageChoices } from '../i18n' +import albumLists, { defaultAlbumList } from '../album/albumLists' const useStyles = makeStyles({ root: { marginTop: '1em' }, @@ -95,6 +96,29 @@ const SelectTheme = (props) => { ) } +const SelectDefaultView = (props) => { + const translate = useTranslate() + const current = localStorage.getItem('defaultView') || defaultAlbumList + const choices = Object.keys(albumLists).map((type) => ({ + id: type, + name: translate(`resources.album.lists.${type}`), + })) + + return ( + <SelectInput + {...props} + source="defaultView" + label={translate('menu.personal.options.defaultView')} + defaultValue={current} + choices={choices} + translateChoice={false} + onChange={(event) => { + localStorage.setItem('defaultView', event.target.value) + }} + /> + ) +} + const Personal = () => { const translate = useTranslate() const classes = useStyles() @@ -105,6 +129,7 @@ const Personal = () => { <SimpleForm toolbar={null}> <SelectTheme /> <SelectLanguage /> + <SelectDefaultView /> </SimpleForm> </Card> )