diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2022-04-17 01:17:11 +0900 |
|---|---|---|
| committer | tamaina <tamaina@hotmail.co.jp> | 2022-04-17 01:17:11 +0900 |
| commit | b3818d9c48ce78f6a5886ade6a378f952bef51c9 (patch) | |
| tree | d0c141395e5a63b31f726fd691bfeb70240475fc /packages/client/src/scripts | |
| parent | Fix settings page (diff) | |
| download | misskey-b3818d9c48ce78f6a5886ade6a378f952bef51c9.tar.gz misskey-b3818d9c48ce78f6a5886ade6a378f952bef51c9.tar.bz2 misskey-b3818d9c48ce78f6a5886ade6a378f952bef51c9.zip | |
nanka iroiro
Diffstat (limited to 'packages/client/src/scripts')
| -rw-r--r-- | packages/client/src/scripts/navigate.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/packages/client/src/scripts/navigate.ts b/packages/client/src/scripts/navigate.ts new file mode 100644 index 0000000000..5e0fd60734 --- /dev/null +++ b/packages/client/src/scripts/navigate.ts @@ -0,0 +1,34 @@ +import { inject } from 'vue'; +import { router } from '@/router'; +import { defaultStore } from '@/store'; + +export type Navigate = (path: string, record?: boolean) => void; + +export class MisskeyNavigator { + public readonly navHook: Navigate | null = null; + public readonly sideViewHook: Navigate | null = null; + + // It should be constructed during vue creating in order for inject function to work + constructor() { + this.navHook = inject<null | Navigate>('navHook', null); + this.sideViewHook = inject<null | Navigate>('sideViewHook', null); + } + + // Use this method instead of router.push() + public push(path: string, record = true) { + if (this.navHook) { + this.navHook(path, record); + } else { + if (defaultStore.state.defaultSideView && this.sideViewHook && path !== '/') { + return this.sideViewHook(path, record); + } + + if (router.currentRoute.value.path === path) { + window.scroll({ top: 0, behavior: 'smooth' }); + } else { + if (record) router.push(path); + else router.replace(path); + } + } + } +} |