diff --git a/frontend/src/framework/ModuleDataTags.ts b/frontend/src/framework/ModuleDataTags.ts index b7251cc7c..092cf07ce 100644 --- a/frontend/src/framework/ModuleDataTags.ts +++ b/frontend/src/framework/ModuleDataTags.ts @@ -10,7 +10,8 @@ export enum ModuleDataTagId { OBSERVATIONS = "observations", SEISMIC = "seismic", WELL_COMPLETIONS = "well-completions", - VFP = "vfp" + VFP = "vfp", + POLYGONS = "polygons", } export type ModuleDataTag = { @@ -30,6 +31,11 @@ export const ModuleDataTags: ModuleDataTag[] = [ name: "3D grid model", description: "3D grid model", }, + { + id: ModuleDataTagId.POLYGONS, + name: "Polygons", + description: "Polygons", + }, { id: ModuleDataTagId.GROUP_TREE, name: "Group tree", diff --git a/frontend/src/framework/WorkbenchSession.ts b/frontend/src/framework/WorkbenchSession.ts index aa9d610c8..54fa1c5ad 100644 --- a/frontend/src/framework/WorkbenchSession.ts +++ b/frontend/src/framework/WorkbenchSession.ts @@ -77,7 +77,7 @@ export class WorkbenchSession { } } -function createEnsembleRealizationFilterFuncForWorkbenchSession(workbenchSession: WorkbenchSession) { +export function createEnsembleRealizationFilterFuncForWorkbenchSession(workbenchSession: WorkbenchSession) { return function ensembleRealizationFilterFunc(ensembleIdent: EnsembleIdent): readonly number[] { const realizationFilterSet = workbenchSession.getRealizationFilterSet(); const realizationFilter = realizationFilterSet.getRealizationFilterForEnsembleIdent(ensembleIdent); diff --git a/frontend/src/framework/components/EnsembleDropdown/ensembleDropdown.tsx b/frontend/src/framework/components/EnsembleDropdown/ensembleDropdown.tsx index b292f249a..f8bfd6a8c 100644 --- a/frontend/src/framework/components/EnsembleDropdown/ensembleDropdown.tsx +++ b/frontend/src/framework/components/EnsembleDropdown/ensembleDropdown.tsx @@ -1,24 +1,31 @@ +import React from "react"; + +import { Ensemble } from "@framework/Ensemble"; import { EnsembleIdent } from "@framework/EnsembleIdent"; -import { EnsembleSet } from "@framework/EnsembleSet"; import { ColorTile } from "@lib/components/ColorTile"; import { Dropdown, DropdownOption, DropdownProps } from "@lib/components/Dropdown"; type EnsembleDropdownProps = { - ensembleSet: EnsembleSet; + ensembles: readonly Ensemble[]; value: EnsembleIdent | null; onChange: (ensembleIdent: EnsembleIdent | null) => void; } & Omit, "options" | "value" | "onChange">; export function EnsembleDropdown(props: EnsembleDropdownProps): JSX.Element { - const { ensembleSet, value, onChange, ...rest } = props; + const { onChange, value, ...rest } = props; - function handleSelectionChanged(selectedEnsembleIdentStr: string) { - const foundEnsemble = ensembleSet.findEnsembleByIdentString(selectedEnsembleIdentStr); - onChange(foundEnsemble ? foundEnsemble.getIdent() : null); - } + const handleSelectionChange = React.useCallback( + function handleSelectionChange(selectedEnsembleIdentStr: string) { + const foundEnsemble = props.ensembles.find( + (ensemble) => ensemble.getIdent().toString() === selectedEnsembleIdentStr + ); + onChange(foundEnsemble ? foundEnsemble.getIdent() : null); + }, + [props.ensembles, onChange] + ); const optionsArr: DropdownOption[] = []; - for (const ens of ensembleSet.getEnsembleArr()) { + for (const ens of props.ensembles) { optionsArr.push({ value: ens.getIdent().toString(), label: ens.getDisplayName(), @@ -30,5 +37,5 @@ export function EnsembleDropdown(props: EnsembleDropdownProps): JSX.Element { }); } - return ; + return ; } diff --git a/frontend/src/framework/components/EnsembleSelect/ensembleSelect.tsx b/frontend/src/framework/components/EnsembleSelect/ensembleSelect.tsx index 51a9601f6..6fae717a6 100644 --- a/frontend/src/framework/components/EnsembleSelect/ensembleSelect.tsx +++ b/frontend/src/framework/components/EnsembleSelect/ensembleSelect.tsx @@ -1,31 +1,36 @@ +import React from "react"; + +import { Ensemble } from "@framework/Ensemble"; import { EnsembleIdent } from "@framework/EnsembleIdent"; -import { EnsembleSet } from "@framework/EnsembleSet"; import { ColorTile } from "@lib/components/ColorTile"; import { Select, SelectOption, SelectProps } from "@lib/components/Select"; type EnsembleSelectProps = { - ensembleSet: EnsembleSet; + ensembles: readonly Ensemble[]; value: EnsembleIdent[]; onChange: (ensembleIdentArr: EnsembleIdent[]) => void; } & Omit, "options" | "value" | "onChange">; -export function EnsembleSelect(props: EnsembleSelectProps): JSX.Element { - const { ensembleSet, value, onChange, multiple, ...rest } = props; - - function handleSelectionChanged(selectedEnsembleIdentStrArr: string[]) { - const identArr: EnsembleIdent[] = []; - for (const identStr of selectedEnsembleIdentStrArr) { - const foundEnsemble = ensembleSet.findEnsembleByIdentString(identStr); - if (foundEnsemble) { - identArr.push(foundEnsemble.getIdent()); +export function EnsembleSelect(props: EnsembleSelectProps): React.ReactNode { + const { ensembles, value, onChange, multiple, ...rest } = props; + + const handleSelectionChange = React.useCallback( + function handleSelectionChanged(selectedEnsembleIdentStrArr: string[]) { + const identArr: EnsembleIdent[] = []; + for (const identStr of selectedEnsembleIdentStrArr) { + const foundEnsemble = ensembles.find((ens) => ens.getIdent().toString() === identStr); + if (foundEnsemble) { + identArr.push(foundEnsemble.getIdent()); + } } - } - onChange(identArr); - } + onChange(identArr); + }, + [ensembles, onChange] + ); const optionsArr: SelectOption[] = []; - for (const ens of ensembleSet.getEnsembleArr()) { + for (const ens of ensembles) { optionsArr.push({ value: ens.getIdent().toString(), label: ens.getDisplayName(), @@ -48,7 +53,7 @@ export function EnsembleSelect(props: EnsembleSelectProps): JSX.Element { - + <> + +
+ +
+
+ + <> +
+ + +
+ value.toString()) ?? []} - onChange={handleThpIndicesSelectionChange} - size={Math.min(5, vfpDataAccessor?.getNumberOfValues(VfpParam.THP) ?? 5)} - multiple={true} - /> - - {vfpDataAccessor?.isProdTable() &&
- + {vfpDataAccessor?.isProdTable() && ( +
+ +