mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-26 11:21:16 +01:00
Better listening for path changes
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
import { appWindow } from '@tauri-apps/api/window';
|
||||
import { NAMESPACE_NO_SYNC, getKeyValue, setKeyValue } from './keyValueStore';
|
||||
|
||||
const key = ['window_pathname', appWindow.label];
|
||||
const namespace = NAMESPACE_NO_SYNC;
|
||||
const fallback = undefined;
|
||||
|
||||
export async function initPathnamePersistance() {
|
||||
if (window.location.pathname === '/') {
|
||||
const pathname = await getKeyValue<string | undefined>({ key, namespace, fallback });
|
||||
if (pathname != null) {
|
||||
window.location.replace(pathname);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
window.addEventListener('pushstate', async () => {
|
||||
const { pathname: value } = window.location;
|
||||
await setKeyValue<string | undefined>({ key, namespace, value });
|
||||
});
|
||||
}
|
||||
@@ -36,7 +36,7 @@ export async function getKeyValue<T>({
|
||||
return extractKeyValueOrFallback(kv, fallback);
|
||||
}
|
||||
|
||||
export function extractKeyValue<T>(kv: KeyValue | null): T | undefined {
|
||||
function extractKeyValue<T>(kv: KeyValue | null): T | undefined {
|
||||
if (kv === null) return undefined;
|
||||
try {
|
||||
return JSON.parse(kv.value) as T;
|
||||
@@ -45,7 +45,7 @@ export function extractKeyValue<T>(kv: KeyValue | null): T | undefined {
|
||||
}
|
||||
}
|
||||
|
||||
export function extractKeyValueOrFallback<T>(kv: KeyValue | null, fallback: T): T {
|
||||
function extractKeyValueOrFallback<T>(kv: KeyValue | null, fallback: T): T {
|
||||
const v = extractKeyValue<T>(kv);
|
||||
if (v === undefined) return fallback;
|
||||
return v;
|
||||
|
||||
21
src-web/lib/persistPathname.ts
Normal file
21
src-web/lib/persistPathname.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { appWindow } from '@tauri-apps/api/window';
|
||||
import { NAMESPACE_NO_SYNC, getKeyValue, setKeyValue } from './keyValueStore';
|
||||
|
||||
const key = ['window_pathname', appWindow.label];
|
||||
const namespace = NAMESPACE_NO_SYNC;
|
||||
const fallback = undefined;
|
||||
|
||||
export async function setPathname(value: string) {
|
||||
await setKeyValue<string | undefined>({ key, namespace, value });
|
||||
}
|
||||
|
||||
export async function maybeRestorePathname() {
|
||||
if (window.location.pathname !== '/') {
|
||||
return;
|
||||
}
|
||||
|
||||
const pathname = await getKeyValue<string | undefined>({ key, namespace, fallback });
|
||||
if (pathname != null) {
|
||||
window.location.replace(pathname);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user