30 lines
799 B
TypeScript
30 lines
799 B
TypeScript
|
|
"use client";
|
||
|
|
|
||
|
|
import { useEffect } from "react";
|
||
|
|
import { Capacitor } from "@capacitor/core";
|
||
|
|
import { App } from "@capacitor/app";
|
||
|
|
import { useUIStore } from "@/lib/ui-store";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Maps the Android hardware back button to in-app navigation:
|
||
|
|
* go back a screen, or exit the app when already at home.
|
||
|
|
* No-op on web (Capacitor.isNativePlatform() is false).
|
||
|
|
*/
|
||
|
|
export function CapacitorBack() {
|
||
|
|
useEffect(() => {
|
||
|
|
if (!Capacitor.isNativePlatform()) return;
|
||
|
|
let remove: (() => void) | undefined;
|
||
|
|
App.addListener("backButton", () => {
|
||
|
|
if (useUIStore.getState().screen === "home") {
|
||
|
|
App.exitApp();
|
||
|
|
} else {
|
||
|
|
window.history.back();
|
||
|
|
}
|
||
|
|
}).then((h) => {
|
||
|
|
remove = () => h.remove();
|
||
|
|
});
|
||
|
|
return () => remove?.();
|
||
|
|
}, []);
|
||
|
|
return null;
|
||
|
|
}
|