Skip to content
Snippets Groups Projects
Commit 59419657 authored by David Bühler's avatar David Bühler Committed by Valentin Perrelle
Browse files

[Ivette] Eva state component: global state for the selected domain.

parent 6916be94
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
import React from 'react'; import React from 'react';
import * as Ivette from 'ivette'; import * as Ivette from 'ivette';
import * as States from 'frama-c/states'; import * as States from 'frama-c/states';
import { GlobalState, useGlobalState } from 'dome/data/states';
import * as Eva from 'frama-c/plugins/eva/api/general'; import * as Eva from 'frama-c/plugins/eva/api/general';
import * as Boxes from 'dome/layout/boxes'; import * as Boxes from 'dome/layout/boxes';
import { HSplit } from 'dome/layout/splitters'; import { HSplit } from 'dome/layout/splitters';
...@@ -31,13 +32,15 @@ import { Text } from 'frama-c/richtext'; ...@@ -31,13 +32,15 @@ import { Text } from 'frama-c/richtext';
import { Select } from 'dome/controls/buttons'; import { Select } from 'dome/controls/buttons';
import { Label } from 'dome/controls/labels'; import { Label } from 'dome/controls/labels';
const globalSelectedDomain = new GlobalState<string>("");
export function EvaStates(): JSX.Element { export function EvaStates(): JSX.Element {
const [selection] = States.useSelection(); const [selection] = States.useSelection();
const selectedLoc = selection?.current; const selectedLoc = selection?.current;
const marker = selectedLoc?.marker; const marker = selectedLoc?.marker;
const states = States.useRequest(Eva.getStates, marker); const states = States.useRequest(Eva.getStates, marker);
const [domains, setDomains] = React.useState<string[]>([]); const [domains, setDomains] = React.useState<string[]>([]);
const [selected, setSelected] = React.useState<string>(); const [selected, setSelected] = useGlobalState(globalSelectedDomain);
const [stateBefore, setStateBefore] = React.useState(""); const [stateBefore, setStateBefore] = React.useState("");
const [stateAfter, setStateAfter] = React.useState(""); const [stateAfter, setStateAfter] = React.useState("");
...@@ -45,7 +48,7 @@ export function EvaStates(): JSX.Element { ...@@ -45,7 +48,7 @@ export function EvaStates(): JSX.Element {
if (states && states.length > 0) { if (states && states.length > 0) {
const names = states.map((d) => d[0]); const names = states.map((d) => d[0]);
setDomains(names); setDomains(names);
if (!selected || !names.includes(selected)) if (!names.includes(selected))
setSelected(names[0]); setSelected(names[0]);
const selectedDomain = states.find((d) => d[0] === selected); const selectedDomain = states.find((d) => d[0] === selected);
if (selectedDomain) { if (selectedDomain) {
...@@ -54,7 +57,7 @@ export function EvaStates(): JSX.Element { ...@@ -54,7 +57,7 @@ export function EvaStates(): JSX.Element {
} }
} else } else
setDomains([]); setDomains([]);
}, [states, selected]); }, [states, selected, setSelected]);
if (domains.length === 0) if (domains.length === 0)
return (<></>); return (<></>);
...@@ -71,7 +74,7 @@ export function EvaStates(): JSX.Element { ...@@ -71,7 +74,7 @@ export function EvaStates(): JSX.Element {
<Select <Select
title="Select the analysis domain to be shown" title="Select the analysis domain to be shown"
value={selected} value={selected}
onChange={setSelected} onChange={(domain) => setSelected(domain ?? "")}
> >
{list} {list}
</Select> </Select>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment