all repos — caroster @ 8b292b59765e5453a63272be05822c149c511ef0

[Octree] Group carpool to your event https://caroster.io

frontend/stores/useMapStore.ts (view raw)

 1import {ReactNode} from 'react';
 2import type {LatLngExpression} from 'leaflet';
 3import {create} from 'zustand';
 4import {TravelEntity} from '../generated/graphql';
 5
 6type State = {
 7  map?: any;
 8  preventUpdateKey: string;
 9  markers: Array<ReactNode>;
10  focusedTravel?: string;
11  bounds: Array<LatLngExpression>;
12  setMap: (map: any) => void;
13  setPreventUpdateKey: (preventUpdateKey: string) => void;
14  setMarkers: (markers: Array<ReactNode>) => void;
15  setFocusOnTravel: (travel?: TravelEntity) => void;
16  setBounds: (bounds: Array<LatLngExpression>) => void;
17};
18
19const useMapStore = create<State>((set, get) => ({
20  map: undefined,
21  preventUpdateKey: '',
22  markers: [],
23  focusedTravel: undefined,
24  bounds: [],
25  setMap: map => set({map}),
26  setPreventUpdateKey: preventUpdateKey => set({preventUpdateKey}),
27  setMarkers: markers => set({markers}),
28  setFocusOnTravel: travel => {
29    if (!travel) {
30      set({focusedTravel: undefined});
31    } else {
32      set({focusedTravel: travel.id});
33      const lat = travel.attributes.meeting_latitude;
34      const long = travel.attributes.meeting_longitude;
35      if (lat && long) get().map?.panTo([lat, long]);
36    }
37  },
38  setBounds: bounds => {
39    set({bounds});
40  },
41}));
42
43export default useMapStore;