import { IonApp, IonButtons, IonContent, IonFooter, IonHeader, IonToolbar, setupIonicReact, } from '@ionic/react'; /* Core CSS required for Ionic components to work properly */ import '@ionic/react/css/core.css'; /* Basic CSS for apps built with Ionic */ import '@ionic/react/css/normalize.css'; import '@ionic/react/css/structure.css'; import '@ionic/react/css/typography.css'; /* Optional CSS utils that can be commented out */ import '@ionic/react/css/padding.css'; import '@ionic/react/css/float-elements.css'; import '@ionic/react/css/text-alignment.css'; import '@ionic/react/css/text-transformation.css'; import '@ionic/react/css/flex-utils.css'; import '@ionic/react/css/display.css'; /* Theme variables */ import './theme/variables.css'; import LiveMap from './components/map/LiveMap'; import { atom, useAtom } from 'jotai'; import { atomWithHash } from 'jotai/utils'; import { MapScope } from './components/map/types'; import { debounce } from 'lodash'; import GetLocation from './components/buttons/GetLocation'; import { geoPoint } from './components/map/types'; import Back from './components/buttons/Back'; import Forward from './components/buttons/Forward'; import Marker from './components/map/Marker'; setupIonicReact(); const initialScope: MapScope = { center: { lat: -37.8403508, lon: 77.5539501 }, zoom: 13, tileProvider: 'osm', }; const scopeAtom = atomWithHash('scope', initialScope); export const setCenterAtom = atom(null, (get, set, center: geoPoint) => { const previousScope = get(scopeAtom); const newScope: MapScope = { ...previousScope, center: center, }; set(scopeAtom, newScope); }); /** * * @returns The root app component */ const App: React.FC = () => { const [scope, setScope] = useAtom(scopeAtom); console.log(`App, scope: ${JSON.stringify(scope)}`); const marker = ( } key='current' /> ); return ( ); }; export default App;