161 lines
4.7 KiB
TypeScript
161 lines
4.7 KiB
TypeScript
|
import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';
|
||
|
|
||
|
import { LayerEnablementState } from './config/map-config';
|
||
|
|
||
|
interface DisplayPreferencesContextState {
|
||
|
vista: LayerEnablementState;
|
||
|
vistaSwitch: (e: React.FormEvent<HTMLFormElement>) => void;
|
||
|
vistaSwitchOnClick: React.MouseEventHandler<HTMLButtonElement>;
|
||
|
|
||
|
flood: LayerEnablementState;
|
||
|
floodSwitch: (e: React.FormEvent<HTMLFormElement>) => void;
|
||
|
floodSwitchOnClick: React.MouseEventHandler<HTMLButtonElement>;
|
||
|
|
||
|
creative: LayerEnablementState;
|
||
|
creativeSwitch: (e: React.FormEvent<HTMLFormElement>) => void;
|
||
|
creativeSwitchOnClick: React.MouseEventHandler<HTMLButtonElement>;
|
||
|
|
||
|
housing: LayerEnablementState;
|
||
|
housingSwitch: (e: React.FormEvent<HTMLFormElement>) => void;
|
||
|
housingSwitchOnClick: React.MouseEventHandler<HTMLButtonElement>;
|
||
|
}
|
||
|
|
||
|
const stub = (): never => {
|
||
|
throw new Error('DisplayPreferencesProvider not set up');
|
||
|
};
|
||
|
|
||
|
export const DisplayPreferencesContext = createContext<DisplayPreferencesContextState>({
|
||
|
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<LayerEnablementState>('disabled');
|
||
|
const [flood, setFlood] = useState<LayerEnablementState>('disabled');
|
||
|
const [creative, setCreative] = useState<LayerEnablementState>('disabled');
|
||
|
const [housing, setHousing] = useState<LayerEnablementState>('disabled');
|
||
|
|
||
|
/*
|
||
|
const [borough, setBorough] = useState<LayerEnablementState>('enabled');
|
||
|
const [parcel, setParcel] = useState<LayerEnablementState>('disabled');
|
||
|
const [conservation, setConservation] = useState<LayerEnablementState>('disabled');
|
||
|
const [historicData, setHistoricData] = useState<LayerEnablementState>('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 (
|
||
|
<DisplayPreferencesContext.Provider value={{
|
||
|
vista,
|
||
|
vistaSwitch,
|
||
|
vistaSwitchOnClick,
|
||
|
flood,
|
||
|
floodSwitch,
|
||
|
floodSwitchOnClick,
|
||
|
creative,
|
||
|
creativeSwitch,
|
||
|
creativeSwitchOnClick,
|
||
|
housing,
|
||
|
housingSwitch,
|
||
|
housingSwitchOnClick
|
||
|
}}>
|
||
|
{children}
|
||
|
</DisplayPreferencesContext.Provider>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export const useDisplayPreferences = (): DisplayPreferencesContextState => {
|
||
|
return useContext(DisplayPreferencesContext);
|
||
|
};
|