Files
web/components/Common/OpenInAppDrawer.jsx
Husanjonazamov 64af77101f classify web
2026-02-24 12:52:49 +05:00

83 lines
2.8 KiB
JavaScript

import { Button } from "@/components/ui/button"
import {
Drawer,
DrawerContent,
DrawerDescription,
DrawerFooter,
DrawerHeader,
DrawerTitle,
} from "@/components/ui/drawer"
import { settingsData } from "@/redux/reducer/settingSlice";
import { t } from "@/utils"
import { usePathname } from "next/navigation";
import { useSelector } from "react-redux";
import { toast } from "sonner";
const OpenInAppDrawer = ({ isOpenInApp, setIsOpenInApp }) => {
const path = usePathname()
const settings = useSelector(settingsData);
const companyName = settings?.company_name;
const scheme = settings?.deep_link_scheme;
const playStoreLink = settings?.play_store_link;
const appStoreLink = settings?.app_store_link;
function handleOpenInApp() {
var appScheme = `${scheme}://${window.location.hostname}${path}`;
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
var isAndroid = /android/i.test(userAgent);
var isIOS = /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
let applicationLink;
if (isAndroid) {
applicationLink = playStoreLink;
} else if (isIOS) {
applicationLink = appStoreLink;
} else {
// Fallback for desktop or other platforms
applicationLink = playStoreLink || appStoreLink;
}
// Attempt to open the app
window.location.href = appScheme;
// Set a timeout to check if app opened
setTimeout(function () {
if (document.hidden || document.webkitHidden) {
// App opened successfully
} else {
// App is not installed, ask user if they want to go to app store
if (confirm(`${companyName} ${t('appIsNotInstalled')} ${isIOS ? t('appStore') : t('playStore')}?`)) {
if (!applicationLink) {
toast.error(`${companyName} ${isIOS ? t('appStore') : t('playStore')} ${t('linkNotAvailable')}`);
return;
}
window.location.href = applicationLink;
}
}
}, 1000);
}
return (
<Drawer open={isOpenInApp} onOpenChange={setIsOpenInApp}>
<DrawerContent>
<DrawerHeader>
<DrawerTitle>{`${t('viewIn')} ${companyName} ${t('app')}`}</DrawerTitle>
<DrawerDescription>
{t('getTheBestExperienceByOpeningThisInOurMobileApp')}
</DrawerDescription>
</DrawerHeader>
<DrawerFooter>
<Button onClick={handleOpenInApp}>
{t('openInApp')}
</Button>
</DrawerFooter>
</DrawerContent>
</Drawer>
)
}
export default OpenInAppDrawer