Skip to content

Commit

Permalink
WIP: simplified risks params
Browse files Browse the repository at this point in the history
  • Loading branch information
eatyourgreens committed Jun 18, 2024
1 parent d839554 commit 9914c68
Show file tree
Hide file tree
Showing 13 changed files with 179 additions and 149 deletions.
22 changes: 19 additions & 3 deletions frontend/src/config/color-maps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,34 @@ export const RASTER_COLOR_MAPS = {
scheme: 'reds',
range: [0, 75],
},
power: {
totalValue: {
scheme: 'reds',
range: [0, 10],
},
water: {
economicUse: {
scheme: 'blues',
range: [0, 10],
},
transport: {
populationUse: {
scheme: 'purples',
range: [0, 10],
},
totalRisk: {
scheme: 'reds',
range: [0, 10],
},
ead: {
scheme: 'reds',
range: [0, 10],
},
eael: {
scheme: 'reds',
range: [0, 10],
},
none: {
scheme: 'reds',
range: [0, 10],
},
};

function invertColorScale<T>(colorScale: (t: number) => T) {
Expand Down
67 changes: 67 additions & 0 deletions frontend/src/config/risks/domains.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { DataParamGroupConfig } from 'lib/controls/data-params';

export interface RiskParams {
returnPeriod: number;
epoch: number;
rcp: string;
confidence: string | number;
}

export const RISK_DOMAINS: Record<string, DataParamGroupConfig<RiskParams>> = {
none: {
paramDomains: {
returnPeriod: [0],
epoch: [2010],
rcp: ['baseline'],
confidence: ['None'],
},
paramDefaults: {
returnPeriod: 0,
epoch: 2010,
rcp: 'baseline',
confidence: 'None',
},
},
fluvial: {
paramDomains: {
returnPeriod: [100],

rcp: ['baseline'],
epoch: [2010],
confidence: ['None'],
},
paramDefaults: {
returnPeriod: 100,

rcp: 'baseline',
epoch: 2010,
confidence: 'None',
},
paramDependencies: {
rcp: ({ epoch }) => {
if (epoch === 2010) return ['baseline'];
else if (epoch === 2050 || epoch === 2080) return ['2.6', '4.5', '8.5'];
},
},
},
cyclone: {
paramDomains: {
returnPeriod: [100],
epoch: [2010],
rcp: ['baseline'],
confidence: [5, 50, 95],
},
paramDefaults: {
returnPeriod: 100,
epoch: 2010,
rcp: 'baseline',
confidence: 50,
},
paramDependencies: {
rcp: ({ epoch }) => {
if (epoch === 2010) return ['baseline'];
if (epoch === 2050 || epoch === 2100) return ['4.5', '8.5'];
},
},
},
};
2 changes: 1 addition & 1 deletion frontend/src/lib/recoil/grouped-family.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function groupedFamily<FVT, FPT>(
(group) =>
({ get }) => {
const groupParams = get(paramsFamily(group));
console.log({ group, groupParams });
console.log({ group, groupParams, paramsFamily });
const deps = fromPairs(groupParams?.map((param) => [param, family(paramFn(group, param))]));
return get(waitForAll(deps));
},
Expand Down
71 changes: 0 additions & 71 deletions frontend/src/sidebar/risks/DamageSourceControl.tsx

This file was deleted.

86 changes: 67 additions & 19 deletions frontend/src/sidebar/risks/RisksControl.tsx
Original file line number Diff line number Diff line change
@@ -1,30 +1,78 @@
import { FormControl, FormControlLabel, FormLabel, Radio, RadioGroup } from '@mui/material';
import {
FormControl,
FormControlLabel,
FormLabel,
MenuItem,
Radio,
RadioGroup,
Select,
} from '@mui/material';
import { useRecoilState } from 'recoil';

import { StateEffectRoot } from 'lib/recoil/state-effects/StateEffectRoot';

import { InputSection } from 'sidebar/ui/InputSection';
import { InputRow } from 'sidebar/ui/InputRow';
import { EpochControl } from 'sidebar/ui/params/EpochControl';
import { RCPControl } from 'sidebar/ui/params/RCPControl';
import { riskSelectionState } from 'state/risks/risk-selection';
import {
riskSourceState,
riskSourceStateEffect
} from 'state/risk-mapping/risk-map';

const SECTORS = {
all: 'All sectors',
power: 'Power',
transport: 'Transport',
water: 'Water',
}
const HAZARDS = ['none', 'cyclone', 'fluvial'];
const HAZARDS_METADATA = {
none: { label: 'None' },
cyclone: { label: 'Cyclone' },
fluvial: { label: 'All Flooding' },
};

export const RisksControl = () => {
const [riskSource, setRiskSource] = useRecoilState(riskSourceState);
const [riskSelection, setRiskSelection] = useRecoilState(riskSelectionState);
console.log({ riskSource, riskSelection })

return (
<>
<FormControl>
<FormLabel>Sector</FormLabel>
<RadioGroup value={riskSelection} onChange={(e, value) => setRiskSelection(value)}>
{Object.entries(SECTORS).map(([sector, label]) => (
<FormControlLabel
key={sector}
label={label}
control={<Radio value={sector} />}
/>
))}
</RadioGroup>
</FormControl>
<StateEffectRoot state={riskSourceState} effect={riskSourceStateEffect} />
<InputSection>
<FormControl fullWidth>
<FormLabel>Display</FormLabel>
<Select<string>
variant="standard"
value={riskSelection}
onChange={(e) => setRiskSelection(e.target.value)}
>
<MenuItem value="totalValue">Total value</MenuItem>
<MenuItem value="economicUse">Economic use</MenuItem>
<MenuItem value="populationUse">Population use</MenuItem>
<MenuItem value="totalRisk">Total risk</MenuItem>
<MenuItem value="ead">Expected Annual Damages (EAD)</MenuItem>
<MenuItem value="eael">Expected Annual Economic Losses (EAEL)</MenuItem>
</Select>
</FormControl>
</InputSection>
<InputSection>
<FormControl>
<FormLabel>Hazard</FormLabel>
<RadioGroup value={riskSource} onChange={(e, value) => setRiskSource(value)}>
{HAZARDS.map((hazard) => (
<FormControlLabel
key={hazard}
label={HAZARDS_METADATA[hazard].label}
control={<Radio value={hazard} />}
/>
))}
</RadioGroup>
</FormControl>
</InputSection>
<InputSection>
<InputRow>
<EpochControl group={riskSource} />
<RCPControl group={riskSource} />
</InputRow>
</InputSection>
</>
);
};
12 changes: 0 additions & 12 deletions frontend/src/sidebar/risks/RisksSection.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
import { FC } from 'react';

import { Collapse } from '@mui/material';
import { TransitionGroup } from 'react-transition-group';

import { StateEffectRoot } from 'lib/recoil/state-effects/StateEffectRoot';

import { RisksControl } from './RisksControl';
import { SidebarPanel } from 'sidebar/SidebarPanel';
import { DamageSourceControl } from './DamageSourceControl';
import { SidebarPanelSection } from 'sidebar/ui/SidebarPanelSection';
import { risksStyleStateEffect, sectionStyleValueState } from 'state/sections';
import { ErrorBoundary } from 'lib/react/ErrorBoundary';
Expand All @@ -23,13 +18,6 @@ export const RisksSection: FC = () => {
<SidebarPanelSection>
<RisksControl />
</SidebarPanelSection>
<SidebarPanelSection variant="style">
<TransitionGroup>
<Collapse>
<DamageSourceControl />
</Collapse>
</TransitionGroup>
</SidebarPanelSection>
</ErrorBoundary>
</SidebarPanel>
);
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/state/data-params.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { HAZARD_DOMAINS } from 'config/hazards/domains';
import { RISK_DOMAINS } from 'config/risks/domains';
import { totalDamagesConfig } from 'config/domains/total-damages';
import {
DataParamGroupConfig,
Expand All @@ -21,6 +22,7 @@ export type DataParamParam = Readonly<{

export const dataParamConfig: Record<string, DataParamGroupConfig> = {
...HAZARD_DOMAINS,
...RISK_DOMAINS,
all: totalDamagesConfig,
adaptation: adaptationDomainsConfig,
};
Expand Down
18 changes: 10 additions & 8 deletions frontend/src/state/layers/risks.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import { HazardParams } from 'config/hazards/domains';
import { riskViewLayer } from 'config/risks/risk-view-layer';
import { ViewLayer } from 'lib/data-map/view-layers';
import { truthyKeys } from 'lib/helpers';
import { selector } from 'recoil';
import { dataParamsByGroupState } from 'state/data-params';
import { riskVisibilityState } from 'state/risks/risk-visibility';
import { riskSourceState } from 'state/risk-mapping/risk-map';
import { riskSelectionState } from 'state/risks/risk-selection';
import { sectionVisibilityState } from 'state/sections';

export const riskLayerState = selector<ViewLayer[]>({
key: 'riskLayerState',
get: ({ get }) =>
get(sectionVisibilityState('risks'))
? truthyKeys(get(riskVisibilityState)).map((risk) =>
riskViewLayer(risk, get(dataParamsByGroupState(risk)) as HazardParams),
)
: [],
get: ({ get }) => {
const riskSource = get(riskSourceState);
const riskSelection = get(riskSelectionState);
console.log('riskLayerState', [riskViewLayer(riskSelection, get(dataParamsByGroupState(riskSource)) as HazardParams)])
return get(sectionVisibilityState('risks'))
? [riskViewLayer(riskSelection, get(dataParamsByGroupState(riskSource)) as HazardParams)]
: []
}
});
2 changes: 1 addition & 1 deletion frontend/src/state/layers/view-layers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export const viewLayersState = selector<ConfigTree<ViewLayer>>({
const regionLevel = get(regionLevelState);
const background = get(backgroundState);
const showLabels = get(showLabelsState);
console.log(get(riskLayerState), get(hazardLayerState))
console.trace(get(riskLayerState), get(hazardLayerState))

return [
// administrative region boundaries or population density
Expand Down
Loading

0 comments on commit 9914c68

Please sign in to comment.