From 62f8af489150784c6803d4faf2e24b65bc3f86ea Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 5 Jul 2022 22:25:27 +0900
Subject: [PATCH] enhance(client): improve usability

---
 packages/client/src/nirax.ts  | 7 ++++++-
 packages/client/src/router.ts | 4 ++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/client/src/nirax.ts b/packages/client/src/nirax.ts
index 19c4464ea8..cd29ae87a5 100644
--- a/packages/client/src/nirax.ts
+++ b/packages/client/src/nirax.ts
@@ -61,6 +61,7 @@ export class Router extends EventEmitter<{
 		props: Map<string, string> | null;
 		key: string;
 	}) => void;
+	same: () => void;
 }> {
 	private routes: RouteDef[];
 	private currentPath: string;
@@ -210,11 +211,15 @@ export class Router extends EventEmitter<{
 	}
 
 	public push(path: string) {
+		const beforePath = this.currentPath;
+		if (path === beforePath) {
+			this.emit('same');
+			return;
+		}
 		if (this.navHook) {
 			const cancel = this.navHook(path);
 			if (cancel) return;
 		}
-		const beforePath = this.currentPath;
 		this.navigate(path, null);
 		this.emit('push', {
 			beforePath,
diff --git a/packages/client/src/router.ts b/packages/client/src/router.ts
index b3baad188e..2ff41e9723 100644
--- a/packages/client/src/router.ts
+++ b/packages/client/src/router.ts
@@ -258,6 +258,10 @@ mainRouter.addListener('push', ctx => {
 	}
 });
 
+mainRouter.addListener('same', () => {
+	window.scroll({ top: 0, behavior: 'smooth' });
+});
+
 window.addEventListener('popstate', (event) => {
 	mainRouter.change(location.pathname + location.search + location.hash, event.state?.key);
 	const scrollPos = scrollPosStore.get(event.state?.key) ?? 0;