import React, { createContext, useCallback, useContext, useEffect, useState } from 'react'; import { LayerEnablementState } from './config/map-config'; interface DisplayPreferencesContextState { vista: LayerEnablementState; vistaSwitch: (e: React.FormEvent) => void; vistaSwitchOnClick: React.MouseEventHandler; flood: LayerEnablementState; floodSwitch: (e: React.FormEvent) => void; floodSwitchOnClick: React.MouseEventHandler; creative: LayerEnablementState; creativeSwitch: (e: React.FormEvent) => void; creativeSwitchOnClick: React.MouseEventHandler; housing: LayerEnablementState; housingSwitch: (e: React.FormEvent) => void; housingSwitchOnClick: React.MouseEventHandler; } const stub = (): never => { throw new Error('DisplayPreferencesProvider not set up'); }; export const DisplayPreferencesContext = createContext({ vista: undefined, vistaSwitch: stub, vistaSwitchOnClick: undefined, flood: undefined, floodSwitch: stub, floodSwitchOnClick: undefined, creative: undefined, creativeSwitch: stub, creativeSwitchOnClick: undefined, housing: undefined, housingSwitch: stub, housingSwitchOnClick: undefined, /* conservation: undefined, conservationSwitch: stub, conservationSwitchOnClick: undefined, parcel: undefined, parcelSwitch: stub, parcelSwitchOnClick: undefined, borough: undefined, boroughSwitch: stub, boroughSwitchOnClick: undefined, not needed right now historicData */ }); const noop = () => {}; export const DisplayPreferencesProvider: React.FC<{}> = ({children}) => { const [vista, setVista] = useState('disabled'); const [flood, setFlood] = useState('disabled'); const [creative, setCreative] = useState('disabled'); const [housing, setHousing] = useState('disabled'); /* const [borough, setBorough] = useState('enabled'); const [parcel, setParcel] = useState('disabled'); const [conservation, setConservation] = useState('disabled'); const [historicData, setHistoricData] = useState('disabled'); */ const vistaSwitch = useCallback( (e) => { e.preventDefault(); const newVista = (vista === 'enabled')? 'disabled' : 'enabled'; setVista(newVista); }, [vista], ) const vistaSwitchOnClick = (e) => { e.preventDefault(); const newVista = (vista === 'enabled')? 'disabled' : 'enabled'; setVista(newVista); } const floodSwitch = useCallback( (e) => { e.preventDefault(); const newFlood = (flood === 'enabled')? 'disabled' : 'enabled'; setFlood(newFlood); }, [flood], ) const floodSwitchOnClick = (e) => { e.preventDefault(); const newFlood = (flood === 'enabled')? 'disabled' : 'enabled'; setFlood(newFlood); } const housingSwitch = useCallback( (e) => { e.preventDefault(); const newHousing = (housing === 'enabled')? 'disabled' : 'enabled'; setHousing(newHousing); }, [housing], ) const housingSwitchOnClick = (e) => { e.preventDefault(); const newHousing = (housing === 'enabled')? 'disabled' : 'enabled'; setHousing(newHousing); } const creativeSwitch = useCallback( (e) => { e.preventDefault(); const newCreative = (creative === 'enabled')? 'disabled' : 'enabled'; setCreative(newCreative); }, [creative], ) const creativeSwitchOnClick = (e) => { e.preventDefault(); const newCreative = (creative === 'enabled')? 'disabled' : 'enabled'; setCreative(newCreative); } return ( {children} ); }; export const useDisplayPreferences = (): DisplayPreferencesContextState => { return useContext(DisplayPreferencesContext); };