Skip to content

Commit 35a4bc8

Browse files
committed
Fix issue with intersection logic
- Have no debounce time for allow identifier value intersection checkbox - Make allow intersection flag to be a part of filter object s.t. filter data is kept within one atom. To prevent out of sync update of values. (resulted in triggering query when flag was separate atom)
1 parent 596a5ce commit 35a4bc8

File tree

19 files changed

+57
-65
lines changed

19 files changed

+57
-65
lines changed

frontend/src/modules/InplaceVolumetricsPlot/interfaces.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ export type SettingsToViewInterface = {
2626
subplotBy: SourceAndTableIdentifierUnion;
2727
colorBy: SourceAndTableIdentifierUnion;
2828
plotType: PlotType;
29-
areSelectedTablesComparable: boolean;
3029
areTableDefinitionSelectionsValid: boolean;
3130
};
3231

@@ -41,6 +40,7 @@ export const settingsToViewInterfaceInitialization: InterfaceInitialization<Sett
4140
tableNames: get(selectedTableNamesAtom),
4241
fluidZones: get(selectedFluidZonesAtom),
4342
identifiersValues: get(selectedIdentifiersValuesAtom),
43+
areSelectedTablesComparable: get(areSelectedTablesComparableAtom),
4444
};
4545
},
4646
resultName: (get) => get(selectedResultNameAtom),
@@ -49,6 +49,5 @@ export const settingsToViewInterfaceInitialization: InterfaceInitialization<Sett
4949
subplotBy: (get) => get(selectedSubplotByAtom),
5050
colorBy: (get) => get(selectedColorByAtom),
5151
plotType: (get) => get(userSelectedPlotTypeAtom),
52-
areSelectedTablesComparable: (get) => get(areSelectedTablesComparableAtom),
5352
areTableDefinitionSelectionsValid: (get) => get(areTableDefinitionSelectionsValidAtom),
5453
};

frontend/src/modules/InplaceVolumetricsPlot/settings/atoms/derivedAtoms.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { FixupSelection, fixupUserSelection } from "@lib/utils/fixupUserSelectio
55
import { fixupUserSelectedIdentifierValues } from "@modules/_shared/InplaceVolumetrics/fixupUserSelectedIdentifierValues";
66
import { RealSelector, SelectorColumn, SourceAndTableIdentifierUnion } from "@modules/_shared/InplaceVolumetrics/types";
77
import {
8-
IdentifierValueCriteria,
98
TableDefinitionsAccessor,
109
makeUniqueTableNamesIntersection,
1110
} from "@modules_shared/InplaceVolumetrics/TableDefinitionsAccessor";
1211

1312
import { atom } from "jotai";
1413

1514
import {
15+
selectedIdentifierValueCriteriaAtom,
1616
userSelectedColorByAtom,
1717
userSelectedEnsembleIdentsAtom,
1818
userSelectedFluidZonesAtom,
@@ -50,11 +50,12 @@ export const selectedEnsembleIdentsAtom = atom((get) => {
5050
export const tableDefinitionsAccessorAtom = atom<TableDefinitionsAccessor>((get) => {
5151
const selectedTableNames = get(selectedTableNamesAtom);
5252
const tableDefinitions = get(tableDefinitionsQueryAtom);
53+
const selectedIdentifierValueCriteria = get(selectedIdentifierValueCriteriaAtom);
5354

5455
return new TableDefinitionsAccessor(
5556
tableDefinitions.isLoading ? [] : tableDefinitions.data,
5657
selectedTableNames,
57-
IdentifierValueCriteria.REQUIRE_EQUALITY
58+
selectedIdentifierValueCriteria
5859
);
5960
});
6061

frontend/src/modules/InplaceVolumetricsPlot/settings/settings.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): React.ReactNod
178178
selectedFluidZones={selectedFluidZones}
179179
selectedIdentifiersValues={selectedIdentifiersValues}
180180
selectedTableNames={selectedTableNames}
181-
selectedAllowIdentifierValueIntersection={
181+
selectedAllowIdentifierValuesIntersection={
182182
selectedIdentifierValueCriteria === IdentifierValueCriteria.ALLOW_INTERSECTION
183183
}
184184
onChange={handleFilterChange}

frontend/src/modules/InplaceVolumetricsPlot/typesAndEnums.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ export const plotTypeToStringMapping: Record<PlotType, string> = {
2121
export type InplaceVolumetricsFilterSelections = Omit<
2222
InplaceVolumetricsFilterSettings,
2323
"allowIdentifierValuesIntersection"
24-
>;
24+
> & {
25+
areSelectedTablesComparable: boolean;
26+
};

frontend/src/modules/InplaceVolumetricsPlot/view/atoms/baseAtoms.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ export const filterAtom = atom<InplaceVolumetricsFilterSelections>({
1313
tableNames: [],
1414
fluidZones: [],
1515
identifiersValues: [],
16+
areSelectedTablesComparable: false,
1617
});
1718
export const resultNameAtom = atom<InplaceVolumetricResultName_api | null>(null);
1819
export const resultName2Atom = atom<InplaceVolumetricResultName_api | null>(null);
1920
export const selectorColumnAtom = atom<SelectorColumn | null>(null);
2021
export const subplotByAtom = atom<SourceAndTableIdentifierUnion>(SourceIdentifier.ENSEMBLE);
2122
export const plotTypeAtom = atom<PlotType>(PlotType.HISTOGRAM);
2223
export const colorByAtom = atom<SourceAndTableIdentifierUnion>(SourceIdentifier.TABLE_NAME);
23-
export const areSelectedTablesComparableAtom = atom(false);
2424
export const areTableDefinitionSelectionsValidAtom = atom(false);

frontend/src/modules/InplaceVolumetricsPlot/view/atoms/derivedAtoms.ts

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export const identifiersValuesAtom = atom((get) => {
2222
return filter?.identifiersValues ?? [];
2323
});
2424

25+
export const areSelectedTablesComparableAtom = atom((get) => {
26+
const filter = get(filterAtom);
27+
return filter?.areSelectedTablesComparable ?? false;
28+
});
29+
2530
export const doAccumulateFluidZonesAtom = atom((get) => {
2631
const subplotBy = get(subplotByAtom);
2732
const colorBy = get(colorByAtom);

frontend/src/modules/InplaceVolumetricsPlot/view/atoms/interfaceEffects.ts

-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { InterfaceEffects } from "@framework/Module";
22
import { SettingsToViewInterface } from "@modules/InplaceVolumetricsPlot/interfaces";
33

44
import {
5-
areSelectedTablesComparableAtom,
65
areTableDefinitionSelectionsValidAtom,
76
colorByAtom,
87
filterAtom,
@@ -42,10 +41,6 @@ export const settingsToViewInterfaceEffects: InterfaceEffects<SettingsToViewInte
4241
const colorBy = getInterfaceValue("colorBy");
4342
setAtomValue(colorByAtom, colorBy);
4443
},
45-
(getInterfaceValue, setAtomValue) => {
46-
const areSelectedTablesComparable = getInterfaceValue("areSelectedTablesComparable");
47-
setAtomValue(areSelectedTablesComparableAtom, areSelectedTablesComparable);
48-
},
4944
(getInterfaceValue, setAtomValue) => {
5045
const areTableDefinitionSelectionsValid = getInterfaceValue("areTableDefinitionSelectionsValid");
5146
setAtomValue(areTableDefinitionSelectionsValidAtom, areTableDefinitionSelectionsValid);

frontend/src/modules/InplaceVolumetricsPlot/view/atoms/queryAtoms.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ import { InplaceVolumetricResultName_api } from "@api";
22
import { atomWithQueries } from "@framework/utils/atomUtils";
33
import { useGetAggregatedPerRealizationTableDataQueries } from "@modules/_shared/InplaceVolumetrics/queryHooks";
44

5+
import { areTableDefinitionSelectionsValidAtom, resultName2Atom, resultNameAtom } from "./baseAtoms";
56
import {
67
areSelectedTablesComparableAtom,
7-
areTableDefinitionSelectionsValidAtom,
8-
resultName2Atom,
9-
resultNameAtom,
10-
} from "./baseAtoms";
11-
import {
128
doAccumulateFluidZonesAtom,
139
ensembleIdentsWithRealizationsAtom,
1410
fluidZonesAtom,

frontend/src/modules/InplaceVolumetricsPlot/view/view.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import { useElementBoundingRect } from "@lib/hooks/useElementBoundingRect";
99

1010
import { useAtomValue } from "jotai";
1111

12-
import { areSelectedTablesComparableAtom, resultNameAtom } from "./atoms/baseAtoms";
12+
import { resultNameAtom } from "./atoms/baseAtoms";
13+
import { areSelectedTablesComparableAtom } from "./atoms/derivedAtoms";
1314
import { aggregatedTableDataQueriesAtom } from "./atoms/queryAtoms";
1415
import { useMakeViewStatusWriterMessages } from "./hooks/useMakeViewStatusWriterMessages";
1516
import { useBuildPlotAndTable } from "./hooks/usePlotBuilder";

frontend/src/modules/InplaceVolumetricsTable/interfaces.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { InplaceVolumetricsFilterSelections } from "./types";
1717

1818
export type SettingsToViewInterface = {
1919
filter: InplaceVolumetricsFilterSelections;
20-
areSelectedTablesComparable: boolean;
2120
resultNames: InplaceVolumetricResultName_api[];
2221
accumulationOptions: Omit<SourceAndTableIdentifierUnion, SourceIdentifier.ENSEMBLE | SourceIdentifier.TABLE_NAME>[];
2322
tableType: TableType;
@@ -36,9 +35,9 @@ export const settingsToViewInterfaceInitialization: InterfaceInitialization<Sett
3635
tableNames: get(selectedTableNamesAtom),
3736
fluidZones: get(selectedFluidZonesAtom),
3837
identifiersValues: get(selectedIdentifiersValuesAtom),
38+
areSelectedTablesComparable: get(areSelectedTablesComparableAtom),
3939
};
4040
},
41-
areSelectedTablesComparable: (get) => get(areSelectedTablesComparableAtom),
4241
resultNames: (get) => get(selectedResultNamesAtom),
4342
accumulationOptions: (get) => get(selectedAccumulationOptionsAtom),
4443
tableType: (get) => get(selectedTableTypeAtom),

frontend/src/modules/InplaceVolumetricsTable/settings/settings.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): React.ReactNod
177177
selectedFluidZones={selectedFluidZones}
178178
selectedIdentifiersValues={selectedIdentifiersValues}
179179
selectedTableNames={selectedTableNames}
180-
selectedAllowIdentifierValueIntersection={
180+
selectedAllowIdentifierValuesIntersection={
181181
selectedIdentifierValueCriteria === IdentifierValueCriteria.ALLOW_INTERSECTION
182182
}
183183
onChange={handleFilterChange}

frontend/src/modules/InplaceVolumetricsTable/types.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ import { InplaceVolumetricsFilterSettings } from "@framework/types/inplaceVolume
33
export type InplaceVolumetricsFilterSelections = Omit<
44
InplaceVolumetricsFilterSettings,
55
"allowIdentifierValuesIntersection"
6-
>;
6+
> & {
7+
areSelectedTablesComparable: boolean;
8+
};

frontend/src/modules/InplaceVolumetricsTable/view/atoms/baseAtoms.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ export const filterAtom = atom<InplaceVolumetricsFilterSelections>({
99
tableNames: [],
1010
fluidZones: [],
1111
identifiersValues: [],
12+
areSelectedTablesComparable: false,
1213
});
13-
export const areSelectedTablesComparableAtom = atom<boolean>(false);
1414
export const resultNamesAtom = atom<InplaceVolumetricResultName_api[]>([]);
1515
export const accumulationOptionsAtom = atom<
1616
Omit<SourceAndTableIdentifierUnion, SourceIdentifier.ENSEMBLE | SourceIdentifier.TABLE_NAME>[]

frontend/src/modules/InplaceVolumetricsTable/view/atoms/derivedAtoms.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ export const identifiersValuesAtom = atom((get) => {
2323
return filter?.identifiersValues ?? [];
2424
});
2525

26+
export const areSelectedTablesComparableAtom = atom((get) => {
27+
const filter = get(filterAtom);
28+
return filter?.areSelectedTablesComparable ?? false;
29+
});
30+
2631
export const ensembleIdentsWithRealizationsAtom = atom((get) => {
2732
const filter = get(filterAtom);
2833
const ensemblIdents = filter?.ensembleIdents ?? [];
@@ -68,7 +73,7 @@ export const isQueryFetchingAtom = atom((get) => {
6873
return activeQueriesResult.isFetching;
6974
});
7075

71-
export const hasAllQueriesFailedAtom = atom((get) => {
76+
export const haveAllQueriesFailedAtom = atom((get) => {
7277
const tableType = get(tableTypeAtom);
7378
const perRealizationTableDataResults = get(perRealizationTableDataResultsAtom);
7479
const statisticalTableDataResults = get(statisticalTableDataResultsAtom);

frontend/src/modules/InplaceVolumetricsTable/view/atoms/interfaceEffects.ts

-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { SettingsToViewInterface } from "@modules/InplaceVolumetricsTable/interf
33

44
import {
55
accumulationOptionsAtom,
6-
areSelectedTablesComparableAtom,
76
areTableDefinitionSelectionsValidAtom,
87
filterAtom,
98
resultNamesAtom,
@@ -16,10 +15,6 @@ export const settingsToViewInterfaceEffects: InterfaceEffects<SettingsToViewInte
1615
const filter = getInterfaceValue("filter");
1716
setAtomValue(filterAtom, filter);
1817
},
19-
(getInterfaceValue, setAtomValue) => {
20-
const areSelectedTablesComparable = getInterfaceValue("areSelectedTablesComparable");
21-
setAtomValue(areSelectedTablesComparableAtom, areSelectedTablesComparable);
22-
},
2318
(getInterfaceValue, setAtomValue) => {
2419
const resultNames = getInterfaceValue("resultNames");
2520
setAtomValue(resultNamesAtom, resultNames);

frontend/src/modules/InplaceVolumetricsTable/view/atoms/queryAtoms.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,10 @@ import {
55
} from "@modules/_shared/InplaceVolumetrics/queryHooks";
66
import { TableType } from "@modules/_shared/InplaceVolumetrics/types";
77

8-
import {
9-
areSelectedTablesComparableAtom,
10-
areTableDefinitionSelectionsValidAtom,
11-
resultNamesAtom,
12-
tableTypeAtom,
13-
} from "./baseAtoms";
8+
import { areTableDefinitionSelectionsValidAtom, resultNamesAtom, tableTypeAtom } from "./baseAtoms";
149
import {
1510
accumulateFluidZonesAtom,
11+
areSelectedTablesComparableAtom,
1612
ensembleIdentsWithRealizationsAtom,
1713
fluidZonesAtom,
1814
groupByIdentifiersAtom,

frontend/src/modules/InplaceVolumetricsTable/view/view.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import { useElementBoundingRect } from "@lib/hooks/useElementBoundingRect";
1111

1212
import { useAtomValue } from "jotai";
1313

14-
import { areSelectedTablesComparableAtom } from "./atoms/baseAtoms";
15-
import { hasAllQueriesFailedAtom as haveAllQueriesFailedAtom, isQueryFetchingAtom } from "./atoms/derivedAtoms";
14+
import { areSelectedTablesComparableAtom, haveAllQueriesFailedAtom, isQueryFetchingAtom } from "./atoms/derivedAtoms";
1615
import { useMakeViewStatusWriterMessages } from "./hooks/useMakeViewStatusWriterMessages";
1716
import { useTableBuilder } from "./hooks/useTableBuilder";
1817

frontend/src/modules/_shared/InplaceVolumetrics/TableDefinitionsAccessor.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,14 @@ export class TableDefinitionsAccessor {
141141

142142
// Tables are not comparable when identifier values are not equal
143143
if (this._identifierValueCriteria === IdentifierValueCriteria.ALLOW_INTERSECTION) {
144-
const values = Array.from(
145-
new Set(identifierWithValues.values.concat(currentIdentifierWithValues.values))
144+
const valuesIntersection = identifierWithValues.values.filter((value) =>
145+
currentIdentifierWithValues.values.includes(value)
146146
);
147+
148+
// Set or update existing identifier with intersected values
147149
commonIdentifiersWithValuesMap.set(identifier, {
148150
identifier,
149-
values,
151+
values: valuesIntersection,
150152
});
151153
} else if (!isEqual(identifierWithValues.values.sort(), currentIdentifierWithValues.values.sort())) {
152154
this._tablesNotComparable = true;
@@ -164,6 +166,7 @@ export class TableDefinitionsAccessor {
164166
this._resultNamesIntersection = sortResultNames(Array.from(resultNames));
165167
this._commonIdentifiersWithValues = Array.from(commonIdentifiersWithValuesMap.values());
166168

169+
// Not comparable if there are no common identifiers
167170
if (this._commonIdentifiersWithValues.length === 0) {
168171
this._tablesNotComparable = true;
169172
}

0 commit comments

Comments
 (0)