diff --git a/frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts b/frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts index e9a8ea328..8ad0ef75a 100644 --- a/frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts +++ b/frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts @@ -1,5 +1,4 @@ import { getGridModelsInfoOptions, getGridParameterOptions, getGridSurfaceOptions } from "@api"; -import { NO_UPDATE } from "@modules/_shared/DataProviderFramework/delegates/_utils/Dependency"; import type { AreSettingsValidArgs, CustomDataProviderImplementation, @@ -28,6 +27,16 @@ const realizationGridSettings = [ Setting.COLOR_SCALE, Setting.OPACITY_PERCENT, ] as const; + +/** + * Default grid layer range used as fallback when grid data is not available. + * Represents [start, end, step] for each of the three dimensions (i, j, k). + */ +const DEFAULT_GRID_LAYER_RANGE: [[number, number, number], [number, number, number], [number, number, number]] = [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], +]; export type RealizationGridSettings = typeof realizationGridSettings; type SettingsWithTypes = MakeSettingTypesMap; @@ -234,12 +243,12 @@ export class RealizationGridProvider const data = getHelperDependency(realizationGridDataDep); if (!gridName || !data) { - return NO_UPDATE; + return DEFAULT_GRID_LAYER_RANGE; } const gridDimensions = data.find((gridModel) => gridModel.grid_name === gridName)?.dimensions ?? null; if (!gridDimensions) { - return NO_UPDATE; + return DEFAULT_GRID_LAYER_RANGE; } return [ diff --git a/frontend/src/modules/_shared/DataProviderFramework/settings/implementations/GridLayerRangeSetting.tsx b/frontend/src/modules/_shared/DataProviderFramework/settings/implementations/GridLayerRangeSetting.tsx index c46f8c1a9..d4e25d8a2 100644 --- a/frontend/src/modules/_shared/DataProviderFramework/settings/implementations/GridLayerRangeSetting.tsx +++ b/frontend/src/modules/_shared/DataProviderFramework/settings/implementations/GridLayerRangeSetting.tsx @@ -3,6 +3,7 @@ import React from "react"; import { cloneDeep, isEqual } from "lodash"; import { Button } from "@lib/components/Button"; +import { Checkbox } from "@lib/components/Checkbox"; import { Input } from "@lib/components/Input"; import { Slider } from "@lib/components/Slider"; import { useElementSize } from "@lib/hooks/useElementSize"; @@ -40,6 +41,24 @@ export class GridLayerRangeSetting implements CustomSettingImplementation(cloneDeep(props.value)); const [prevValue, setPrevValue] = React.useState(cloneDeep(props.value)); + const [prevAvailableValues, setPrevAvailableValues] = React.useState(availableValues); + const [resetOnModelChange, setResetOnModelChange] = React.useState(true); + + if (!isEqual(availableValues, prevAvailableValues)) { + setPrevAvailableValues(availableValues); + + if (resetOnModelChange) { + const resetValue: [[number, number], [number, number], [number, number]] = [ + [availableValues[0][0], availableValues[0][1]], + [availableValues[1][0], availableValues[1][1]], + [availableValues[2][0], availableValues[2][1]], + ]; + + setInternalValue(resetValue); + props.onValueChange(resetValue); + } + } + if (!isEqual(props.value, prevValue)) { setInternalValue(cloneDeep(props.value)); setPrevValue(cloneDeep(props.value)); @@ -132,6 +151,15 @@ export class GridLayerRangeSetting implements CustomSettingImplementation ))} +
+ { + setResetOnModelChange(e.target.checked); + }} + /> +