import { batch, createContext, JSX } from 'solid-js'; import { createStore } from 'solid-js/store'; import { Marker as LeafletMarker } from 'leaflet'; import { Stop, Stops } from './types'; export type ByStopIdMarkers = Record; export interface SearchStore { getFoundStops: () => Stop[]; setFoundStops: (stops: Stop[]) => void; getDisplayedStops: () => Stop[]; setDisplayedStops: (stops: Stop[]) => void; addMarkers: (stopId: number, markers: LeafletMarker[]) => void; }; export const SearchContext = createContext(); export function SearchProvider(props: { children: JSX.Element }) { type Store = { foundStops: Stop[]; markers: ByStopIdMarkers; displayedStops: Stop[]; }; const [store, setStore] = createStore({ foundStops: [], markers: {}, displayedStops: [] }); const getFoundStops = (): Stop[] => { return store.foundStops; } const setFoundStops = (stops: Stop[]): void => { setStore('foundStops', stops); } const getDisplayedStops = (): Stop[] => { return store.displayedStops; } const setDisplayedStops = (stops: Stop[]): void => { setStore((s: Store) => { setStore('displayedStops', stops); return s; }); } const addMarkers = (stopId: number, markers: L.Marker[]): void => { setStore('markers', stopId, markers); } return ( {props.children} ); }