diff --git a/src/renderer/components/modal/modal-types/download-maps-modal.component.tsx b/src/renderer/components/modal/modal-types/download-maps-modal.component.tsx index 1048ff17a..441620f87 100644 --- a/src/renderer/components/modal/modal-types/download-maps-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/download-maps-modal.component.tsx @@ -22,9 +22,11 @@ import { useConstant } from "renderer/hooks/use-constant.hook"; import { getLocalTimeZone, parseAbsolute, toCalendarDateTime } from "@internationalized/date"; import { VirtualScroll } from "renderer/components/shared/virtual-scroll/virtual-scroll.component"; import { MapItemComponentPropsMapper } from "shared/mappers/map/map-item-component-props.mapper"; +import { ConfigurationService } from "renderer/services/configuration.service"; export const DownloadMapsModal: ModalComponent = ({ options: {data : { ownedMaps, version }} }) => { const beatSaver = useService(BeatSaverService); + const config = useService(ConfigurationService); const mapsDownloader = useService(MapsDownloaderService); const progressBar = useService(ProgressBarService); const os = useService(OsDiagnosticService); @@ -37,12 +39,11 @@ export const DownloadMapsModal: ModalComponent([]); const [downloadbleMaps, setDownloadbleMaps] = useState([]); - const [sortOrder, setSortOrder] = useState(BsvSearchOrder.Latest); const [ownedMapHashs, setOwnedMapHashs] = useState(ownedMaps?.map(map => map.hash) ?? []); const [loading, setLoading] = useState(false); const isOnline = useObservable(() => os.isOnline$); const [searchParams, setSearchParams] = useState({ - sortOrder, + sortOrder: config.get("map-sort-order"), filter, page: 0, q: query, @@ -170,21 +171,21 @@ export const DownloadMapsModal: ModalComponent { - setSortOrder(() => newSort); + config.set("map-sort-order", newSort); setMaps(() => []); setSearchParams(() => ({ ...searchParams, sortOrder: newSort })); }; const handleSearch = () => { - const searchParams: SearchParams = { - sortOrder, + const searchParamsLocal: SearchParams = { + sortOrder: searchParams.sortOrder, filter, q: query.trim(), page: 0, }; setMaps(() => []); - setSearchParams(() => searchParams); + setSearchParams(() => searchParamsLocal); }; const handleLoadMore = () => { @@ -219,7 +220,7 @@ export const DownloadMapsModal: ModalComponent - handleSortChange(sort)} /> + handleSortChange(sort)} /> {(() => { diff --git a/src/renderer/components/modal/modal-types/playlist/download-playlist-modal/download-playlist-modal.component.tsx b/src/renderer/components/modal/modal-types/playlist/download-playlist-modal/download-playlist-modal.component.tsx index 9c44dd5a4..c58619b1d 100644 --- a/src/renderer/components/modal/modal-types/playlist/download-playlist-modal/download-playlist-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/playlist/download-playlist-modal/download-playlist-modal.component.tsx @@ -5,7 +5,7 @@ import { BSVersion } from "shared/bs-version.interface" import { BsmLocalMap } from "shared/models/maps/bsm-local-map.interface" import { LocalBPListsDetails } from "shared/models/playlists/local-playlist.models" import { DownloadPlaylistModalHeader } from "./download-playlist-modal-header.component" -import { BsvPlaylist, BsvSearchOrder, PlaylistSearchParams } from "shared/models/maps/beat-saver.model" +import { BsvPlaylist, PlaylistSearchParams } from "shared/models/maps/beat-saver.model" import { useCallback, useState } from "react" import { useOnUpdate } from "renderer/hooks/use-on-update.hook" import { useService } from "renderer/hooks/use-service.hook" @@ -20,6 +20,7 @@ import BeatConflict from "../../../../../../../assets/images/apngs/beat-conflict import { cn } from "renderer/helpers/css-class.helpers" import { VirtualScroll } from "renderer/components/shared/virtual-scroll/virtual-scroll.component" import { useTranslation } from "renderer/hooks/use-translation.hook" +import { ConfigurationService } from "renderer/services/configuration.service" export const DownloadPlaylistModal: ModalComponent, ownedMaps$: Observable}> = ( { options: { data: { version, ownedPlaylists$, ownedMaps$ }} } @@ -27,8 +28,9 @@ export const DownloadPlaylistModal: ModalComponent(null); @@ -41,7 +43,7 @@ export const DownloadPlaylistModal: ModalComponent({ q: "", - sortOrder: BsvSearchOrder.Relevance, + sortOrder: config.get("playlist-sort-order"), page: 0, }); @@ -63,6 +65,7 @@ export const DownloadPlaylistModal: ModalComponent) => { setPlaylists(() => undefined); + config.set("playlist-sort-order", value.sortOrder); setSearchParams(() => ({ ...value, page: 0})); }; diff --git a/src/renderer/config/default-configuration.config.ts b/src/renderer/config/default-configuration.config.ts index 8d16c053f..3c5c83102 100644 --- a/src/renderer/config/default-configuration.config.ts +++ b/src/renderer/config/default-configuration.config.ts @@ -1,4 +1,24 @@ -export const defaultConfiguration: { [key in DefaultConfigKey]: any } = { +import { BsvSearchOrder } from "shared/models/maps/beat-saver.model"; + +// NOTE: To refactor. Rename to LocalStorageConfigKeyValues since these are stored in the +// localStorage in the browser, and for readability +export interface DefaultConfigKeyValues { + "first-color": string; + "second-color": string; + theme: ThemeConfig; + language: string; + supported_languages: string[]; + default_mods: string[]; + "default-shared-folders": string[]; + "playlist-sort-order": BsvSearchOrder; + "map-sort-order": BsvSearchOrder; +}; + +export type DefaultConfigKey = keyof DefaultConfigKeyValues; + +export const defaultConfiguration: { + [key in DefaultConfigKey]: DefaultConfigKeyValues[key] +} = { "first-color": "#3b82ff", "second-color": "#ff4444", theme: "os", @@ -10,8 +30,8 @@ export const defaultConfiguration: { [key in DefaultConfigKey]: any } = { window.electron.path.join("Beat Saber_Data", "CustomWIPLevels"), "DLC" ], + "playlist-sort-order": BsvSearchOrder.Relevance, + "map-sort-order": BsvSearchOrder.Latest, }; -export type DefaultConfigKey = "first-color" | "second-color" | "theme" | "language" | "supported_languages" | "default_mods" | "default-shared-folders"; - export type ThemeConfig = "dark" | "light" | "os"; diff --git a/src/renderer/services/configuration.service.ts b/src/renderer/services/configuration.service.ts index 9a1a61c4e..1159e8c60 100644 --- a/src/renderer/services/configuration.service.ts +++ b/src/renderer/services/configuration.service.ts @@ -30,7 +30,7 @@ export class ConfigurationService { public get(key: string | DefaultConfigKey): Type { const rawValue = (window.sessionStorage.getItem(key) ?? window.localStorage.getItem(key)); const tryParse = tryit(() => JSON.parse(rawValue)); - + const res = (tryParse.error ? rawValue : tryParse.result) as Type; if(!res && Object.keys(defaultConfiguration).includes(key)){ @@ -40,7 +40,7 @@ export class ConfigurationService { return res; } - public set(key: string, value: unknown, persistant = true) { + public set(key: string | DefaultConfigKey, value: unknown, persistant = true) { if(value != null){ this.getPropperStorage(persistant).setItem(key, JSON.stringify(value)); @@ -51,7 +51,7 @@ export class ConfigurationService { this.emitChange(key); } - public delete(key: string) { + public delete(key: string | DefaultConfigKey) { window.localStorage.removeItem(key); window.sessionStorage.removeItem(key); this.emitChange(key);