Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenthoms committed Apr 25, 2024
1 parent 9406708 commit e3d17ff
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 115 deletions.
4 changes: 2 additions & 2 deletions frontend/src/modules/Grid3D/settings/settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ export function Settings(props: ModuleSettingsProps<State, SettingsToViewInterfa
gridModelInfo?.property_info_arr.filter((el) => el.property_name === selectedGridModelParameterName) ?? [];

return (
<>
<div className="flex flex-col gap-1">
<CollapsibleGroup title="Ensemble & realization" expanded>
<Label text="Ensemble">
<EnsembleDropdown
Expand Down Expand Up @@ -408,7 +408,7 @@ export function Settings(props: ModuleSettingsProps<State, SettingsToViewInterfa
/>
</Label>
</CollapsibleGroup>
</>
</div>
);
}

Expand Down
9 changes: 5 additions & 4 deletions frontend/src/modules/Intersection/settings/settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import {
intersectionTypeAtom,
selectedCustomIntersectionPolylineIdAtom,
selectedEnsembleIdentAtom,
selectedWellboreUuidAtom,
selectedWellboreAtom,
} from "../sharedAtoms/sharedAtoms";
import { State } from "../state";
import {
Expand Down Expand Up @@ -101,7 +101,7 @@ export function Settings(props: ModuleSettingsProps<State, SettingsToViewInterfa
const selectedGridModelParameterDateOrInterval = useAtomValue(selectedGridModelParameterDateOrIntervalAtom);
const setSelectedGridModelParameterDateOrInterval = useSetAtom(userSelectedGridModelParameterDateOrIntervalAtom);

const selectedWellboreHeader = useAtomValue(selectedWellboreUuidAtom);
const selectedWellboreHeader = useAtomValue(selectedWellboreAtom);
const setSelectedWellboreHeader = useSetAtom(userSelectedWellboreUuidAtom);

const [selectedSeismicDataType, setSelectedSeismicDataType] = useAtom(userSelectedSeismicDataTypeAtom);
Expand Down Expand Up @@ -184,7 +184,8 @@ export function Settings(props: ModuleSettingsProps<State, SettingsToViewInterfa

function handleIntersectionTypeChange(type: IntersectionType) {
setIntersectionType(type);
const uuid = type === IntersectionType.WELLBORE ? selectedWellboreHeader : selectedCustomIntersectionPolylineId;
const uuid =
type === IntersectionType.WELLBORE ? selectedWellboreHeader?.uuid : selectedCustomIntersectionPolylineId;
const intersection: Intersection = {
type: type,
uuid: uuid ?? "",
Expand Down Expand Up @@ -286,7 +287,7 @@ export function Settings(props: ModuleSettingsProps<State, SettingsToViewInterfa
<PendingWrapper isPending={wellHeaders.isFetching} errorMessage={wellHeadersErrorMessage}>
<Select
options={makeWellHeaderOptions(wellHeaders.data ?? [])}
value={selectedWellboreHeader ? [selectedWellboreHeader] : []}
value={selectedWellboreHeader ? [selectedWellboreHeader.uuid] : []}
onChange={handleWellHeaderSelectionChange}
size={5}
filter
Expand Down
22 changes: 15 additions & 7 deletions frontend/src/modules/Intersection/sharedAtoms/sharedAtoms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,30 @@ export const selectedEnsembleIdentAtom = atom<EnsembleIdent | null>((get) => {
return userSelectedEnsembleIdent;
});

export const selectedWellboreUuidAtom = atom((get) => {
export const selectedWellboreAtom = atom((get) => {
const userSelectedWellboreUuid = get(userSelectedWellboreUuidAtom);
const wellboreHeaders = get(drilledWellboreHeadersQueryAtom);

if (!wellboreHeaders.data) {
return null;
}

if (
!userSelectedWellboreUuid ||
!wellboreHeaders.data.some((el) => el.wellbore_uuid === userSelectedWellboreUuid)
) {
return wellboreHeaders.data[0].wellbore_uuid ?? null;
const userSelectedWellboreHeader = wellboreHeaders.data.find((el) => el.wellbore_uuid === userSelectedWellboreUuid);

if (!userSelectedWellboreUuid || !userSelectedWellboreHeader) {
if (wellboreHeaders.data.length === 0) {
return null;
}
return {
uuid: wellboreHeaders.data[0].wellbore_uuid,
identifier: wellboreHeaders.data[0].unique_wellbore_identifier,
};
}

return userSelectedWellboreUuid;
return {
uuid: userSelectedWellboreUuid,
identifier: userSelectedWellboreHeader.unique_wellbore_identifier,
};
});

export const intersectionTypeAtom = atom<IntersectionType>(IntersectionType.WELLBORE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {
} from "@modules/Intersection/sharedAtoms/sharedAtoms";

import { atom } from "jotai";
import simplify from "simplify-js";

import { wellboreTrajectoryQueryAtom } from "./queryAtoms";

Expand Down
10 changes: 5 additions & 5 deletions frontend/src/modules/Intersection/view/atoms/queryAtoms.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { WellboreTrajectory_api } from "@api";
import { apiService } from "@framework/ApiService";
import { selectedWellboreUuidAtom } from "@modules/Intersection/sharedAtoms/sharedAtoms";
import { selectedWellboreAtom } from "@modules/Intersection/sharedAtoms/sharedAtoms";

import { atomWithQuery } from "jotai-tanstack-query";

const STALE_TIME = 60 * 1000;
const CACHE_TIME = 60 * 1000;

export const wellboreTrajectoryQueryAtom = atomWithQuery((get) => {
const wellboreUuid = get(selectedWellboreUuidAtom);
const wellbore = get(selectedWellboreAtom);

return {
queryKey: ["getWellboreTrajectory", wellboreUuid ?? ""],
queryFn: () => apiService.well.getWellTrajectories(wellboreUuid ? [wellboreUuid] : []),
queryKey: ["getWellboreTrajectory", wellbore?.uuid ?? ""],
queryFn: () => apiService.well.getWellTrajectories(wellbore?.uuid ? [wellbore.uuid] : []),
staleTime: STALE_TIME,
gcTime: CACHE_TIME,
select: (data: WellboreTrajectory_api[]) => data[0],
enabled: wellboreUuid ? true : false,
enabled: wellbore?.uuid ? true : false,
};
});
114 changes: 36 additions & 78 deletions frontend/src/modules/Intersection/view/components/intersection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -241,87 +241,45 @@ export type ReadoutBoxProps = {
readoutItems: ReadoutItem[];
};

function additionalInformationItemToReadableString(key: string, value: unknown): string {
switch (key) {
case AdditionalInformationKey.CELL_INDEX:
return `Cell index: ${(value as number).toFixed(0)}`;
case AdditionalInformationKey.PROP_VALUE:
return `Property value: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.MD:
return `MD: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.MAX:
return `Max: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.MIN:
return `Min: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.P10:
return `P10: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.P90:
return `P90: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.P50:
return `P50: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.MEAN:
return `Mean: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.SCHEMATIC_INFO:
return (value as string[]).join(", ");
case AdditionalInformationKey.X:
return `X: ${(value as number).toFixed(2)}`;
case AdditionalInformationKey.Y:
return `Y: ${(value as number).toFixed(2)}`;
default:
return "";
}
}

function makeAdditionalInformation(item: ReadoutItem): React.ReactNode {
const additionalInformation = getAdditionalInformationFromReadoutItem(item);
return Object.entries(additionalInformation).map(([key, value], index) => {
switch (key) {
case AdditionalInformationKey.CELL_INDEX:
return (
<span key={index} className="block">
Cell index: {(value as number).toFixed(0)}
</span>
);
case AdditionalInformationKey.PROP_VALUE:
return (
<span key={index} className="block">
Property value: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.MD:
return (
<span key={index} className="block">
MD: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.MAX:
return (
<span key={index} className="block">
Max: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.MIN:
return (
<span key={index} className="block">
Min: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.P10:
return (
<span key={index} className="block">
P10: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.P90:
return (
<span key={index} className="block">
P90: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.P50:
return (
<span key={index} className="block">
P50: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.MEAN:
return (
<span key={index} className="block">
Mean: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.SCHEMATIC_INFO:
return (
<span key={index} className="block">
{(value as string[]).map((el) => (
<span key={el}>{el}</span>
))}
</span>
);
case AdditionalInformationKey.X:
return (
<span key={index} className="block">
X: {(value as number).toFixed(2)}
</span>
);
case AdditionalInformationKey.Y:
return (
<span key={index} className="block">
Y: {(value as number).toFixed(2)}
</span>
);
default:
return null;
}
return (
<span key={index} className="block">
{additionalInformationItemToReadableString(key, value)}
</span>
);
});
}

Expand Down
24 changes: 6 additions & 18 deletions frontend/src/modules/Intersection/view/view.tsx
Original file line number Diff line number Diff line change
@@ -1,37 +1,25 @@
import React from "react";

import { IntersectionReferenceSystem } from "@equinor/esv-intersection";
import { ModuleViewProps } from "@framework/Module";
import { useViewStatusWriter } from "@framework/StatusWriter";
import { SyncSettingKey, SyncSettingsHelper } from "@framework/SyncSettings";
import { useEnsembleSet } from "@framework/WorkbenchSession";
import { IntersectionType } from "@framework/types/intersection";
import { ColorScaleGradientType } from "@lib/utils/ColorScale";
import { useWellboreTrajectoriesQuery } from "@modules/_shared/WellBore";
import { useFieldWellboreTrajectoriesQuery } from "@modules/_shared/WellBore/queryHooks";
import { EsvIntersectionReadoutEvent } from "@modules/_shared/components/EsvIntersection";
import { CameraPosition, ZoomTransform } from "@modules/_shared/components/EsvIntersection/esvIntersection";
import { CameraPosition } from "@modules/_shared/components/EsvIntersection/esvIntersection";
import { isWellborepathLayer } from "@modules/_shared/components/EsvIntersection/utils/layers";
import { calcExtendedSimplifiedWellboreTrajectoryInXYPlane } from "@modules/_shared/utils/wellbore";

import { useAtom, useAtomValue } from "jotai";
import simplify from "simplify-js";
import { useAtomValue } from "jotai";

import { intersectionReferenceSystemAtom, selectedCustomIntersectionPolylineAtom } from "./atoms/derivedAtoms";
import { Intersection } from "./components/intersection";
import { useGridParameterQuery, useGridSurfaceQuery } from "./queries/gridQueries";
import { useGridPolylineIntersection as useGridPolylineIntersectionQuery } from "./queries/polylineIntersection";
import { useWellboreCasingQuery } from "./queries/wellboreSchematicsQueries";

import { SettingsToViewInterface } from "../settingsToViewInterface";
import {
addCustomIntersectionPolylineEditModeActiveAtom,
currentCustomIntersectionPolylineAtom,
editCustomIntersectionPolylineEditModeActiveAtom,
intersectionTypeAtom,
selectedEnsembleIdentAtom,
selectedWellboreUuidAtom,
} from "../sharedAtoms/sharedAtoms";
import { intersectionTypeAtom, selectedEnsembleIdentAtom, selectedWellboreAtom } from "../sharedAtoms/sharedAtoms";
import { State } from "../state";

export function View(props: ModuleViewProps<State, SettingsToViewInterface>): JSX.Element {
Expand Down Expand Up @@ -60,7 +48,7 @@ export function View(props: ModuleViewProps<State, SettingsToViewInterface>): JS
const gridModelParameterDateOrInterval = props.viewContext.useSettingsToViewInterfaceValue(
"gridModelParameterDateOrInterval"
);
const wellboreUuid = useAtomValue(selectedWellboreUuidAtom);
const wellboreHeader = useAtomValue(selectedWellboreAtom);
const showGridLines = props.viewContext.useSettingsToViewInterfaceValue("showGridlines");
const intersectionExtensionLength =
props.viewContext.useSettingsToViewInterfaceValue("intersectionExtensionLength");
Expand All @@ -78,7 +66,7 @@ export function View(props: ModuleViewProps<State, SettingsToViewInterface>): JS
}

props.viewContext.setInstanceTitle(
`${wellboreUuid} - ${gridModelName}, ${gridModelParameterName}, ${gridModelParameterDateOrInterval} (${ensembleName})`
`${wellboreHeader?.identifier} - ${gridModelName}, ${gridModelParameterName}, ${gridModelParameterDateOrInterval} (${ensembleName})`
);

const polylineUtmXy: number[] = [];
Expand Down Expand Up @@ -123,7 +111,7 @@ export function View(props: ModuleViewProps<State, SettingsToViewInterface>): JS
}

// Wellbore casing query
const wellboreCasingQuery = useWellboreCasingQuery(wellboreUuid ?? undefined);
const wellboreCasingQuery = useWellboreCasingQuery(wellboreHeader?.uuid ?? undefined);
if (wellboreCasingQuery.isError) {
statusWriter.addError(wellboreCasingQuery.error.message);
}
Expand Down

0 comments on commit e3d17ff

Please sign in to comment.