diff --git a/src/app/Store.ts b/src/app/Store.ts index 486263c8..862d938b 100644 --- a/src/app/Store.ts +++ b/src/app/Store.ts @@ -13,6 +13,7 @@ export namespace Store { export const ID_SOUNDS_VERSION = 'minecraft_sounds_version' export const ID_PROJECTS = 'misode_projects' export const ID_BACKUPS = 'misode_generator_backups' + export const ID_PROJECT_PANEL_OPEN = 'misode_project_panel_open' export const ID_OPEN_PROJECT = 'misode_open_project' export const ID_TREE_VIEW_MODE = 'misode_tree_view_mode' @@ -69,6 +70,12 @@ export namespace Store { return backups[id] } + export function getProjectPanelOpen(): boolean | undefined { + const open = localStorage.getItem(ID_PROJECT_PANEL_OPEN) + if (open === null) return undefined + return JSON.parse(open) + } + export function getOpenProject() { return localStorage.getItem(ID_OPEN_PROJECT) ?? DRAFT_PROJECT.name } @@ -119,6 +126,14 @@ export namespace Store { localStorage.setItem(ID_BACKUPS, JSON.stringify(backups)) } + export function setProjectPanelOpen(open: boolean | undefined) { + if (open === undefined) { + localStorage.removeItem(ID_PROJECT_PANEL_OPEN) + } else { + localStorage.setItem(ID_PROJECT_PANEL_OPEN, JSON.stringify(open)) + } + } + export function setOpenProject(projectName: string | undefined) { if (projectName === undefined) { localStorage.removeItem(ID_OPEN_PROJECT) diff --git a/src/app/pages/Generator.tsx b/src/app/pages/Generator.tsx index 7282afa5..0abe627d 100644 --- a/src/app/pages/Generator.tsx +++ b/src/app/pages/Generator.tsx @@ -1,6 +1,6 @@ import { DataModel, Path } from '@mcschema/core' import { getCurrentUrl, route } from 'preact-router' -import { useEffect, useErrorBoundary, useMemo, useRef, useState } from 'preact/hooks' +import { useCallback, useEffect, useErrorBoundary, useMemo, useRef, useState } from 'preact/hooks' import config from '../../config.json' import { Analytics } from '../Analytics' import { Ad, Btn, BtnMenu, ErrorPanel, FileCreation, FileRenaming, Footer, HasPreview, Octicon, PreviewPanel, ProjectCreation, ProjectDeletion, ProjectPanel, SearchList, SourcePanel, TextInput, Tree, VersionSwitcher } from '../components' @@ -302,20 +302,21 @@ export function Generator({}: Props) { } } - const [projectShown, setProjectShown] = useState(window.innerWidth > 600) - const [projectCreating, setProjectCreating] = useState(false) - const [projectDeleting, setprojectDeleting] = useState(false) - const [fileSaving, setFileSaving] = useState(undefined) - const [fileRenaming, setFileRenaming] = useState<{ type: string, id: string } | undefined>(undefined) - - const toggleProject = () => { + const [projectShown, setProjectShown] = useState(Store.getProjectPanelOpen() ?? window.innerWidth > 600) + const toggleProjectShown = useCallback(() => { if (projectShown) { Analytics.hideProject(gen.id, projects.length, project.files.length, 'menu') } else { Analytics.showProject(gen.id, projects.length, project.files.length, 'menu') } + Store.setProjectPanelOpen(!projectShown) setProjectShown(!projectShown) - } + }, [projectShown]) + + const [projectCreating, setProjectCreating] = useState(false) + const [projectDeleting, setprojectDeleting] = useState(false) + const [fileSaving, setFileSaving] = useState(undefined) + const [fileRenaming, setFileRenaming] = useState<{ type: string, id: string } | undefined>(undefined) return <>
@@ -366,7 +367,7 @@ export function Generator({}: Props) {