Skip to content

Commit 848ba4d

Browse files
committed
feat: persist active space selection in app.json
1 parent d9ff147 commit 848ba4d

5 files changed

Lines changed: 45 additions & 6 deletions

File tree

src/main/store/module/app.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type {
33
CodeState,
44
NotesEditorMode,
55
NotesState,
6+
SpaceId,
67
SpaceLayoutMode,
78
} from '../types'
89
import Store from 'electron-store'
@@ -42,6 +43,7 @@ const APP_STORE_DEFAULTS: AppStore = {
4243
notifications: {
4344
lastNotifiedUpdateVersion: '',
4445
},
46+
activeSpaceId: 'code',
4547
}
4648

4749
function sanitizeCodeState(value: unknown): CodeState {
@@ -216,6 +218,12 @@ function sanitizeAppStore(value: unknown): AppStore {
216218
readOptionalNumber(notificationsSource, 'nextDonateAt')
217219
?? readOptionalNumber(source, 'nextDonateNotification'),
218220
},
221+
activeSpaceId: readEnum(
222+
source,
223+
'activeSpaceId',
224+
['code', 'tools', 'math', 'notes'] as const,
225+
APP_STORE_DEFAULTS.activeSpaceId,
226+
) as SpaceId,
219227
}
220228
}
221229

src/main/store/types/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export interface NotesState {
1616
libraryFilter?: string
1717
}
1818

19+
export type SpaceId = 'code' | 'tools' | 'math' | 'notes'
20+
1921
export interface AppStore {
2022
window: {
2123
bounds: object
@@ -46,6 +48,7 @@ export interface AppStore {
4648
nextDonateAt?: number
4749
lastNotifiedUpdateVersion: string
4850
}
51+
activeSpaceId: SpaceId
4952
}
5053

5154
export interface EditorSettings {

src/renderer/App.vue

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script setup lang="ts">
22
import * as Tooltip from '@/components/ui/shadcn/tooltip'
33
import { useApp, useTheme } from '@/composables'
4-
import { i18n, ipc } from '@/electron'
5-
import { RouterName } from '@/router'
6-
import { isSpaceRouteName } from '@/spaceDefinitions'
4+
import { i18n, ipc, store } from '@/electron'
5+
import { router, RouterName } from '@/router'
6+
import { getSpaceDefinitions, isSpaceRouteName } from '@/spaceDefinitions'
77
import { isMac } from '@/utils'
88
import { LoaderCircle } from 'lucide-vue-next'
99
import { loadWASM } from 'onigasm'
@@ -51,9 +51,20 @@ watch(
5151
5252
useTheme()
5353
54+
function restoreSavedSpace() {
55+
const savedSpaceId = store.app.get<string>('activeSpaceId')
56+
if (savedSpaceId && savedSpaceId !== 'code') {
57+
const space = getSpaceDefinitions().find(s => s.id === savedSpaceId)
58+
if (space) {
59+
router.replace(space.to)
60+
}
61+
}
62+
}
63+
5464
async function init() {
5565
registerIPCListeners()
5666
ipc.send('system:renderer-ready', null, () => {})
67+
restoreSavedSpace()
5768
loadWASM(onigasmFile)
5869
await loadGrammars()
5970
notifications()

src/renderer/components/space-rail/SpaceRail.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import * as Tooltip from '@/components/ui/shadcn/tooltip'
33
import { useApp, useTheme } from '@/composables'
4-
import { i18n, ipc } from '@/electron'
4+
import { i18n, ipc, store } from '@/electron'
55
import { RouterName } from '@/router'
66
import { getSpaceDefinitions } from '@/spaceDefinitions'
77
import { isMac } from '@/utils'
@@ -23,6 +23,15 @@ const spaces = computed(() => {
2323
active: space.isActive(route.name),
2424
}))
2525
})
26+
27+
watch(
28+
() => spaces.value.find(s => s.active)?.id,
29+
(spaceId) => {
30+
if (spaceId) {
31+
store.app.set('activeSpaceId', spaceId)
32+
}
33+
},
34+
)
2635
</script>
2736

2837
<template>

src/renderer/views/Preferences.vue

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<script setup lang="ts">
22
import type { Component } from 'vue'
33
import { preferencesKeys } from '@/components/preferences/keys'
4-
import { i18n } from '@/electron'
4+
import { i18n, store } from '@/electron'
55
import { router, RouterName } from '@/router'
6+
import { getSpaceDefinitions } from '@/spaceDefinitions'
67
import { isMac } from '@/utils'
78
import {
89
Calculator,
@@ -70,7 +71,14 @@ provide(preferencesKeys, {
7071
<LayoutTwoColumn
7172
:title="i18n.t('preferences:label')"
7273
:top-space="isMac ? 16 : 6"
73-
@back="() => router.push({ name: RouterName.main })"
74+
@back="
75+
() => {
76+
const savedSpace = getSpaceDefinitions().find(
77+
(s) => s.id === store.app.get('activeSpaceId'),
78+
);
79+
router.push(savedSpace?.to ?? { name: RouterName.main });
80+
}
81+
"
7482
>
7583
<template #left>
7684
<div class="scrollbar h-full min-h-0 overflow-y-auto px-2">

0 commit comments

Comments
 (0)