import { Column, LegendTitle, Row } from './Boxes'; import { Button, Popover, Slider, Switch } from '@blueprintjs/core'; import { IconNames } from '@blueprintjs/icons'; import * as React from 'react'; import { Dispatch, SyntheticEvent } from 'react'; import styled from '@emotion/styled'; import { Action, ActionType, State } from './FlowMap.state'; import ColorSchemeSelector from './ColorSchemeSelector'; const SettingsOuter = styled.div` width: 290px; font-size: 12px; `; const StyledSwitch = styled(Switch)` margin-bottom: 0; align-self: flex-start; white-space: nowrap; `; interface Props { state: State; darkMode: boolean; dispatch: Dispatch; clusterZoom: number | undefined; availableClusterZoomLevels: number[] | undefined; onChangeClusteringAuto: (value: boolean) => void; } const SettingsPopover: React.FC = ( { dispatch, state, darkMode, clusterZoom, availableClusterZoomLevels, onChangeClusteringAuto, }) => { const handleToggleClustering = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_CLUSTERING_ENABLED, clusteringEnabled: value, }); }; const handleToggleClusteringAuto = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; onChangeClusteringAuto(value); }; const handleChangeManualClusterZoom = (index: number) => { dispatch({ type: ActionType.SET_MANUAL_CLUSTER_ZOOM, manualClusterZoom: availableClusterZoomLevels ? availableClusterZoomLevels[availableClusterZoomLevels.length - 1 - index] : undefined, }); }; const handleToggleDarkMode = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_DARK_MODE, darkMode: value, }); }; const handleToggleFadeEnabled = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_FADE_ENABLED, fadeEnabled: value, }); }; const handleToggleBaseMap = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_BASE_MAP_ENABLED, baseMapEnabled: value, }); }; const handleChangeFadeAmount = (value: number) => { dispatch({ type: ActionType.SET_FADE_AMOUNT, fadeAmount: value, }); }; const handleChangeBaseMapOpacity = (value: number) => { dispatch({ type: ActionType.SET_BASE_MAP_OPACITY, baseMapOpacity: value, }); }; const handleChangeColorScheme = (colorSchemeKey: string) => { dispatch({ type: ActionType.SET_COLOR_SCHEME, colorSchemeKey, }); }; const handleToggleAnimation = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_ANIMATION_ENABLED, animationEnabled: value, }); }; const handleToggleLocationTotals = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_LOCATION_TOTALS_ENABLED, locationTotalsEnabled: value, }); }; const handleToggleAdaptiveScales = (evt: SyntheticEvent) => { const value = (evt.target as HTMLInputElement).checked; dispatch({ type: ActionType.SET_ADAPTIVE_SCALES_ENABLED, adaptiveScalesEnabled: value, }); }; return ( Settings
Color scheme
{state.fadeEnabled && } {state.baseMapEnabled && ( )} {availableClusterZoomLevels && <> {state.clusteringEnabled && } {state.clusteringEnabled && !state.clusteringAuto &&
Clustering level
} }
} >