From b71654c0fe0076b8e384f7abfd049eb5349ab446 Mon Sep 17 00:00:00 2001 From: motoki317 Date: Wed, 17 Apr 2024 16:22:01 +0900 Subject: [PATCH] Retain search condition up to tab session --- dashboard/src/libs/localStore.ts | 11 ++++++++--- dashboard/src/pages/apps.tsx | 14 +++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dashboard/src/libs/localStore.ts b/dashboard/src/libs/localStore.ts index a64302796..e149dce65 100644 --- a/dashboard/src/libs/localStore.ts +++ b/dashboard/src/libs/localStore.ts @@ -3,13 +3,18 @@ import { createStore } from 'solid-js/store' // https://www.solidjs.com/examples/todos -export const createLocalSignal = (name: string, init: T): ReturnType> => { - const localState = localStorage.getItem(name) +const createStorageSignal = (name: string, init: T, storage: Storage): ReturnType> => { + const localState = storage.getItem(name) const [state, setState] = createSignal(localState ? JSON.parse(localState) : init) - createEffect(() => localStorage.setItem(name, JSON.stringify(state()))) + createEffect(() => storage.setItem(name, JSON.stringify(state()))) return [state, setState] } +export const createSessionSignal = (name: string, init: T): ReturnType> => + createStorageSignal(name, init, sessionStorage) +export const createLocalSignal = (name: string, init: T): ReturnType> => + createStorageSignal(name, init, localStorage) + export const createLocalStore = (name: string, init: T): ReturnType> => { const localState = localStorage.getItem(name) const [state, setState] = createStore(localState ? JSON.parse(localState) : init) diff --git a/dashboard/src/pages/apps.tsx b/dashboard/src/pages/apps.tsx index b331a60b3..095c3e3a3 100644 --- a/dashboard/src/pages/apps.tsx +++ b/dashboard/src/pages/apps.tsx @@ -13,7 +13,7 @@ import { import type { SelectOption } from '/@/components/templates/Select' import { client, getRepositoryCommits, user } from '/@/libs/api' import { ApplicationState, type Provider, applicationState, repositoryURLToProvider } from '/@/libs/application' -import { createLocalSignal } from '/@/libs/localStore' +import { createSessionSignal } from '/@/libs/localStore' import { Button } from '../components/UI/Button' import { MaterialSymbols } from '../components/UI/MaterialSymbols' import { TabRound } from '../components/UI/TabRound' @@ -239,7 +239,7 @@ const AppsList: Component<{ } export default () => { - const [scope, _setScope] = createLocalSignal('apps-scope', GetRepositoriesRequest_Scope.MINE) + const [scope, _setScope] = createSessionSignal('apps-scope', GetRepositoriesRequest_Scope.MINE) const [isPending, start] = useTransition() const setScope = (scope: GetRepositoriesRequest_Scope) => { @@ -248,14 +248,14 @@ export default () => { }) } - const [statuses, setStatuses] = createLocalSignal( + const [statuses, setStatuses] = createSessionSignal( 'apps-statuses-v1', allStatuses.map((s) => s.value), ) - const [provider, setProvider] = createLocalSignal('apps-provider', ['GitHub', 'GitLab', 'Gitea']) - const [query, setQuery] = createLocalSignal('apps-query', '') - const [sort, setSort] = createLocalSignal('apps-sort', sortItems.desc.value) - const [includeNoApp, setIncludeNoApp] = createLocalSignal('apps-include-no-app', false) + const [provider, setProvider] = createSessionSignal('apps-provider', ['GitHub', 'GitLab', 'Gitea']) + const [query, setQuery] = createSessionSignal('apps-query', '') + const [sort, setSort] = createSessionSignal('apps-sort', sortItems.desc.value) + const [includeNoApp, setIncludeNoApp] = createSessionSignal('apps-include-no-app', false) const [scrollParentRef, setScrollParentRef] = createSignal()