ENH - app store

This commit is contained in:
Eichenholz
2026-08-07 10:56:43 +02:00
parent ec47ce20c4
commit cff9bfe9e2
4 changed files with 93 additions and 17 deletions
+25
View File
@@ -72,6 +72,31 @@ describe('app store', () => {
expect(mocks.saveDeviceNamespace).toHaveBeenCalledTimes(1)
})
it('reinstalls core and claimed apps removed from the Home Screen', () => {
vi.useFakeTimers()
const apps = useAppStoreStore()
apps.hydrate({ claimedApps: ['memory'] })
apps.removeHomeApp('mail')
apps.removeHomeApp('memory')
mocks.saveDeviceNamespace.mockClear()
apps.installApp('mail')
apps.installApp('memory')
expect(apps.installingApps).toEqual({ mail: true, memory: true })
expect(apps.homeLayout.hidden).toEqual(['mail', 'memory'])
vi.advanceTimersByTime(3000)
expect(apps.installingApps).toEqual({})
expect(apps.homeLayout.hidden).toEqual([])
expect(apps.homeLayout.grid).toContain('mail')
expect(apps.homeLayout.grid).toContain('memory')
expect(apps.claimedApps).toEqual(['memory'])
expect(mocks.saveDeviceNamespace).toHaveBeenCalledTimes(2)
})
it('persists home reordering and removal independently from installation', () => {
const apps = useAppStoreStore()
apps.hydrate(null)
+13 -2
View File
@@ -43,11 +43,22 @@ export const useAppStoreStore = defineStore('app-store', {
}
},
installApp(id: LaunchablePhoneAppId): void {
if (this.claimedApps.includes(id) || this.installingApps[id]) return
const installed =
CORE_APP_IDS.includes(id) || this.claimedApps.includes(id)
if (
this.installingApps[id] ||
(installed && !this.homeLayout.hidden.includes(id))
) {
return
}
this.installingApps[id] = true
globalThis.setTimeout(() => {
this.claimApp(id)
if (CORE_APP_IDS.includes(id) || this.claimedApps.includes(id)) {
this.restoreHomeApp(id)
} else {
this.claimApp(id)
}
delete this.installingApps[id]
}, INSTALL_DURATION_MS)
},