53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import type { IProject } from '@/modelTypes/IProject'
|
|
|
|
type ProjectView = Record<IProject['id'], string>
|
|
|
|
const DEFAULT_PROJECT_VIEW = 'project.list' as const
|
|
|
|
/**
|
|
* Save the current project view to local storage
|
|
*/
|
|
export function saveProjectView(projectId: IProject['id'], routeName: string) {
|
|
if (routeName.includes('settings.')) {
|
|
return
|
|
}
|
|
|
|
if (!projectId) {
|
|
return
|
|
}
|
|
|
|
// We use local storage and not the store here to make it persistent across reloads.
|
|
const savedProjectView = localStorage.getItem('projectView')
|
|
let savedProjectViewJson: ProjectView | false = false
|
|
if (savedProjectView !== null) {
|
|
savedProjectViewJson = JSON.parse(savedProjectView) as ProjectView
|
|
}
|
|
|
|
let projectView: ProjectView = {}
|
|
if (savedProjectViewJson) {
|
|
projectView = savedProjectViewJson
|
|
}
|
|
|
|
projectView[projectId] = routeName
|
|
localStorage.setItem('projectView', JSON.stringify(projectView))
|
|
}
|
|
|
|
export const getProjectView = (projectId: IProject['id']) => {
|
|
// Remove old stored settings
|
|
const savedProjectView = localStorage.getItem('projectView')
|
|
if (savedProjectView !== null && savedProjectView.startsWith('project.')) {
|
|
localStorage.removeItem('projectView')
|
|
}
|
|
|
|
if (!savedProjectView) {
|
|
return DEFAULT_PROJECT_VIEW
|
|
}
|
|
|
|
const savedProjectViewJson: ProjectView = JSON.parse(savedProjectView)
|
|
|
|
if (!savedProjectViewJson[projectId]) {
|
|
return DEFAULT_PROJECT_VIEW
|
|
}
|
|
|
|
return savedProjectViewJson[projectId]
|
|
} |