@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.17 kB
JavaScript
import{jsx as E}from"react/jsx-runtime";import{useCallback as w,useEffect as m,useState as p}from"react";import C from"../../tools/logger";import M from"../../utils/is-mobile";import P from"./GpsPermissionRequest";import{useUserLocationAndHeading as b}from"./useUserLocationAndHeading";export default function h({onPositionUpdate:d,onAllowCompass:g,onRejectCompass:r,orientationStorageKey:t="compass-permission-granted",requestCompass:a=!0,requestCompassAllowed:s=!0}){const{startOrientation:v,startGeolocation:i,stopOrientation:l,stopGeolocation:c}=b(d),[f,u]=p(!1),[G,o]=p(!1);m(()=>(navigator.geolocation.getCurrentPosition(()=>{u(!0),i()},e=>{C.warn("Geolocation error:",e),u(!1)}),()=>{l(),c()}),[i,c,l]);const n=async()=>{typeof DeviceOrientationEvent<"u"&&typeof DeviceOrientationEvent.requestPermission=="function"&&await DeviceOrientationEvent.requestPermission()!=="granted"||(localStorage.setItem(t,"true"),v(),o(!1),g?.())},O=w(()=>{localStorage.setItem(t,"false"),o(!1),r?.()},[r]);return m(()=>{if(!f||!s||typeof navigator>"u"||!M)return;const e=localStorage.getItem(t);if(!e||a){o(!0);return}e==="true"&&n()},[f,a,s,n]),E(P,{isOpen:G,onAllow:n,onCancel:O})}