From 7729068219ec4b03978c36e595b42dff9793a9ec Mon Sep 17 00:00:00 2001
From: gunshiz
Date: Mon, 5 Oct 2026 21:17:40 +0700
Subject: [PATCH] feat : add dont ask me again for install web app
---
components/site-entry-prompt.tsx | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/components/site-entry-prompt.tsx b/components/site-entry-prompt.tsx
index 777f429..fe62656 100644
--- a/components/site-entry-prompt.tsx
+++ b/components/site-entry-prompt.tsx
@@ -6,10 +6,18 @@ import { usePathname } from "next/navigation";
import { syncCommissionPush } from "@/components/commission/push-client";
import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
+import { Field, FieldLabel } from "@/components/ui/field";
+import { Switch } from "@/components/ui/switch";
type InstallEvent = Event & { prompt: () => Promise; userChoice: Promise<{ outcome: string }> };
const dismissedKey = "site-entry-prompt-dismissed";
+const dontAskAgainKey = "site-entry-prompt-dont-ask-again";
+
+function isPromptDismissed() {
+ return sessionStorage.getItem(dismissedKey) === "1" ||
+ localStorage.getItem(dontAskAgainKey) === "1";
+}
function isInstalled() {
return window.matchMedia("(display-mode: standalone)").matches ||
@@ -24,6 +32,7 @@ export function SiteEntryPrompt() {
const [permission, setPermission] = useState(null);
const [busy, setBusy] = useState(false);
const [error, setError] = useState("");
+ const [dontAskAgain, setDontAskAgain] = useState(false);
useEffect(() => {
// Commission pages have their own prompt, tied to the signed-in user's messages.
@@ -41,7 +50,7 @@ export function SiteEntryPrompt() {
const frame = requestAnimationFrame(() => {
setInstalled(installedNow);
setPermission(canNotify ? Notification.permission : null);
- if (!sessionStorage.getItem(dismissedKey) &&
+ if (!isPromptDismissed() &&
((ios && !installedNow) || (canNotify && Notification.permission === "default"))) {
setOpen(true);
}
@@ -50,7 +59,7 @@ export function SiteEntryPrompt() {
const beforeInstall = (event: Event) => {
event.preventDefault();
setInstallEvent(event as InstallEvent);
- if (!sessionStorage.getItem(dismissedKey)) setOpen(true);
+ if (!isPromptDismissed()) setOpen(true);
};
const onInstalled = () => {
setInstalled(true);
@@ -71,6 +80,12 @@ export function SiteEntryPrompt() {
setOpen(false);
}
+ function toggleDontAskAgain(checked: boolean) {
+ setDontAskAgain(checked);
+ if (checked) localStorage.setItem(dontAskAgainKey, "1");
+ else localStorage.removeItem(dontAskAgainKey);
+ }
+
async function install() {
if (!installEvent) return;
await installEvent.prompt();
@@ -127,6 +142,10 @@ export function SiteEntryPrompt() {
ติดตั้งและเปิดจากหน้าจอโฮมก่อน จึงจะเปิดการแจ้งเตือนได้บน iPhone/iPad
}
{error && {error}
}
+
+ ไม่ต้องถามอีก
+
+
{installEvent && !installed && }