Skip to content

Commit b72e7e9

Browse files
authored
feat: Global state continued (#359)
* feat: Added empty analogue model state * feat: Removed all unnecessary fetch model calls, and removed some prop drills * feat: Added model area type and outcrops to global state * feat: Added several Dto's to global state * feat: Updated GDE and stratographics * feat: Added new hook for compute settings * feat: Updated model page to do most calls. Added multiple states in global context
1 parent 25e01fa commit b72e7e9

File tree

32 files changed

+381
-266
lines changed

32 files changed

+381
-266
lines changed

src/components/AreaCoordinates/AreaCoordinates.tsx

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ import {
1616
CoordinateDto,
1717
ModelAreaTypeDto,
1818
} from '../../api/generated';
19-
import { useFetchCases } from '../../hooks/useFetchCases';
20-
import { useFetchModel } from '../../hooks/useFetchModel';
21-
import { useFetchModelAreas } from '../../hooks/useFetchModelAreas';
2219
import { useMutateAreaCoordinates } from '../../hooks/useMutateAreaCoordinates';
2320
import { ErrorMessage } from '../ErrorMessage/ErrorMessage';
2421
import { AnalogueModelImageView } from '../ImageView/AnalogueModelImageView';
@@ -29,6 +26,10 @@ import {
2926
validateCoordinates,
3027
} from './hooks/AreaCoordinates.hooks';
3128
import { useModelResults } from './hooks/useModelResults';
29+
import {
30+
analogueModelDefault,
31+
usePepmContextStore,
32+
} from '../../hooks/GlobalState';
3233

3334
export type AreaCoordinateType = {
3435
modelAreaId: string;
@@ -84,13 +85,11 @@ export const AreaCoordinates = ({
8485
const [fallbackAreaCoordinate, setfallbackAreaCoordinate] =
8586
useState<AreaCoordinateType>();
8687
const { modelId } = useParams();
87-
const { data, isLoading } = useFetchModel(modelId);
88-
const cases = useFetchCases();
88+
const { analogueModel, modelAreaTypes, computeCases } = usePepmContextStore();
8989
const { activeAreaResultList } = useModelResults(
9090
activeArea.name,
91-
cases.data?.data,
91+
computeCases,
9292
);
93-
const modelAreas = useFetchModelAreas();
9493
const mutateAreaCoordinates = useMutateAreaCoordinates();
9594

9695
const handleSelectChange = async (
@@ -108,7 +107,8 @@ export const AreaCoordinates = ({
108107
return;
109108
}
110109

111-
const selectableAreas = data?.data?.modelAreas && data?.data?.modelAreas;
110+
const selectableAreas =
111+
analogueModel.modelAreas && analogueModel.modelAreas;
112112

113113
const selectedArea = selectableAreas?.filter(
114114
(area) => area.modelAreaType === changes.selectedItems[0].name,
@@ -267,7 +267,7 @@ export const AreaCoordinates = ({
267267
setEdit(!edit);
268268
};
269269

270-
if (modelAreas.isLoading || modelAreas.data === undefined || isLoading)
270+
if (modelAreaTypes.length === 0 || analogueModel === analogueModelDefault)
271271
return <p>Loading.....</p>;
272272

273273
return (
@@ -278,7 +278,7 @@ export const AreaCoordinates = ({
278278
<Autocomplete
279279
className={errors?.area && 'autocomplete-error'}
280280
label={'Select area'}
281-
options={modelAreas.data.data}
281+
options={modelAreaTypes}
282282
optionLabel={(option) => option.name}
283283
onOptionsChange={handleSelectChange}
284284
selectedOptions={[activeArea]}
@@ -365,18 +365,19 @@ export const AreaCoordinates = ({
365365
</Styled.CoordinateFields>
366366
)}
367367
</Styled.Selects>
368-
{data && data.data.analogueModelImage === null && (
369-
<div>
370-
<Typography>
371-
No image is found for this model. Try refreshing the page
372-
</Typography>
373-
</div>
374-
)}
375-
{data?.data.analogueModelId &&
376-
data.data.analogueModelImage?.analogueModelImageId && (
368+
{analogueModel !== analogueModelDefault &&
369+
analogueModel.analogueModelImage === null && (
370+
<div>
371+
<Typography>
372+
No image is found for this model. Try refreshing the page
373+
</Typography>
374+
</div>
375+
)}
376+
{analogueModel.analogueModelId &&
377+
analogueModel.analogueModelImage?.analogueModelImageId && (
377378
<AnalogueModelImageView
378-
modelId={data?.data.analogueModelId}
379-
imageId={data?.data.analogueModelImage?.analogueModelImageId}
379+
modelId={analogueModel.analogueModelId}
380+
imageId={analogueModel.analogueModelImage?.analogueModelImageId}
380381
coordinateBox={areaCoordinate}
381382
/>
382383
)}

src/components/AreaCoordinates/CoordinatesDialog/CoordinatesDialog.tsx

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33

44
import { Button, Dialog, Snackbar } from '@equinor/eds-core-react';
55
import { useState } from 'react';
6-
import { useParams } from 'react-router-dom';
76
import { CoordinateDto } from '../../../api/generated';
8-
import { useFetchModel } from '../../../hooks/useFetchModel';
9-
import { useFetchModelAreas } from '../../../hooks/useFetchModelAreas';
107
import { AreaCoordinates } from '../AreaCoordinates';
118
import * as Styled from '../AreaCoordinates.styled';
9+
import {
10+
analogueModelDefault,
11+
usePepmContextStore,
12+
} from '../../../hooks/GlobalState';
1213

1314
export type AreaCoordinateType = {
1415
modelAreaId: string;
@@ -23,15 +24,7 @@ export const CoordinatesDialog = ({
2324
toggleOpen: () => void;
2425
}) => {
2526
const [showSaveAlert, setSaveAlert] = useState(false);
26-
27-
const { modelId } = useParams();
28-
29-
const { data, isLoading } = useFetchModel(modelId);
30-
const modelAreas = useFetchModelAreas();
31-
32-
// const [activeModelArea, setActiveModelArea] = useState(null);
33-
34-
// const {data, isLoading} = useFetch
27+
const { analogueModel, modelAreaTypes } = usePepmContextStore();
3528

3629
function clearStatus() {
3730
setSaveAlert(false);
@@ -41,14 +34,16 @@ export const CoordinatesDialog = ({
4134
toggleOpen();
4235
};
4336

44-
if (modelAreas.isLoading || modelAreas.data === undefined || isLoading)
37+
if (modelAreaTypes.length === 0 || analogueModel === analogueModelDefault)
4538
return <p>Loading.....</p>;
4639

4740
return (
4841
<>
4942
<Styled.Dialog open={open}>
5043
<Dialog.Header>
51-
<Dialog.Title>Manage model areas for {data?.data.name}</Dialog.Title>
44+
<Dialog.Title>
45+
Manage model areas for {analogueModel.name}
46+
</Dialog.Title>
5247
</Dialog.Header>
5348
<Styled.Content>
5449
<AreaCoordinates setSaveAlert={setSaveAlert}></AreaCoordinates>

src/components/GrossDepositionEnviroment/GdeSelect/GdeSelect.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* eslint-disable max-lines-per-function */
22
import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react';
33
import { GeologicalStandardDto } from '../../../api/generated';
4-
import { useFetchGrossDepData } from '../../../hooks/useFetchGrossDepData';
54
import * as StyledDialog from '../../../styles/addRowDialog/AddRowDialog.styled';
65
import { sortList } from '../../../utils/SortList';
76
import {
87
GDEErrorType,
98
GdeType,
109
} from '../GrossDepositionEnviromentGroup/GrossDepositionEnviromentGroup';
10+
import { usePepmContextStore } from '../../../hooks/GlobalState';
1111

1212
export const GdeSelect = ({
1313
gdeObject,
@@ -20,29 +20,28 @@ export const GdeSelect = ({
2020
error: GDEErrorType;
2121
setErrors: React.Dispatch<React.SetStateAction<GDEErrorType>>;
2222
}) => {
23-
const GdeData = useFetchGrossDepData();
23+
const { geologyStandards } = usePepmContextStore();
24+
if (geologyStandards.length === 0) return <p>Loading .....</p>;
2425

25-
if (GdeData.isLoading || !GdeData.data?.success) return <p>Loading .....</p>;
26-
27-
const Gde = GdeData.data.data.filter(
26+
const Gde = geologyStandards.filter(
2827
(g) => g.geologyGroup === 'GrossDepositionalEnvironment',
2928
);
3029

31-
const De = GdeData.data.data.filter(
30+
const De = geologyStandards.filter(
3231
(g) =>
3332
g.geologyGroup === 'DepositionalEnvironment' &&
3433
g.geologicalStandardParentId ===
3534
gdeObject.grossDepEnv?.geologicalStandardId,
3635
);
3736

38-
const SubEnvironment = GdeData.data.data.filter(
37+
const SubEnvironment = geologyStandards.filter(
3938
(g) =>
4039
g.geologyGroup === 'Subenvironment' &&
4140
g.geologicalStandardParentId ===
4241
gdeObject.grossDepEnv?.geologicalStandardId,
4342
);
4443

45-
const ArchitecturalElement = GdeData.data.data.filter(
44+
const ArchitecturalElement = geologyStandards.filter(
4645
(g) => g.geologyGroup === 'ArchitecturalElement',
4746
);
4847

src/components/GrossDepositionEnviroment/GrossDepositionEnviromentGroup/GrossDepositionEnviromentGroup.tsx

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ import { useMutation } from '@tanstack/react-query';
1111
import { useState } from 'react';
1212
import {
1313
AddGeologicalGroupForm,
14-
AnalogueModelDetail,
1514
AnalogueModelsService,
1615
DeleteGeologicalGroupCommandResponse,
17-
GeologicalGroupDto,
1816
GeologicalStandardDto,
1917
} from '../../../api/generated';
2018
import { queryClient } from '../../../auth/queryClient';
@@ -24,6 +22,7 @@ import * as Styled from './GrossDepositionEnviromentGroup.styled';
2422

2523
import { validateInput } from './GDE.hooks';
2624
import { useIsOwnerOrAdmin } from '../../../hooks/useIsOwnerOrAdmin';
25+
import { usePepmContextStore } from '../../../hooks/GlobalState';
2726

2827
export interface GdeType {
2928
grossDepEnv?: GeologicalStandardDto;
@@ -46,18 +45,15 @@ export type GDEErrorType = {
4645
};
4746
export const GrossDepositionEnviromentGroup = ({
4847
modelIdParent,
49-
defaultMetadata,
50-
gdeGroups,
5148
deleteGdeRow,
5249
}: {
5350
modelIdParent?: string;
54-
defaultMetadata: AnalogueModelDetail;
55-
gdeGroups: GeologicalGroupDto[];
5651
deleteGdeRow: (
5752
geologicalGroupId: string,
5853
) => Promise<DeleteGeologicalGroupCommandResponse | undefined>;
5954
}) => {
6055
const isOwnerOrAdmin = useIsOwnerOrAdmin();
56+
const { analogueModel } = usePepmContextStore();
6157
const [showGdeDialog, setShowGdeDialog] = useState<boolean>(false);
6258
const [gdeObject, setGdeObject] = useState<GdeType>(defaultGdeData);
6359
const [errors, setErrors] = useState<GDEErrorType>({});
@@ -85,7 +81,7 @@ export const GrossDepositionEnviromentGroup = ({
8581
});
8682

8783
const handleAddGde = async () => {
88-
const id = modelIdParent ? modelIdParent : defaultMetadata.analogueModelId;
84+
const id = modelIdParent ? modelIdParent : analogueModel.analogueModelId;
8985
const err = await validateInput(gdeObject);
9086
setErrors(err);
9187

@@ -128,7 +124,7 @@ export const GrossDepositionEnviromentGroup = ({
128124
<Typography variant="h4" as="h3">
129125
Gross Depositional Environment (GDE)
130126
</Typography>
131-
{gdeGroups.length > 0 && (
127+
{analogueModel.geologicalGroups.length > 0 && (
132128
<Table>
133129
<Table.Head>
134130
<Table.Row>
@@ -141,7 +137,7 @@ export const GrossDepositionEnviromentGroup = ({
141137
</Table.Head>
142138

143139
<Table.Body>
144-
{gdeGroups.map((row) => (
140+
{analogueModel.geologicalGroups.map((row) => (
145141
<Table.Row key={row.geologicalGroupId}>
146142
<Table.Cell>
147143
{isOwnerOrAdmin && (

src/components/OutcropAnalogue/OutcropAnalogueGroup/OutcropAnalogueGroup.tsx

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,13 @@ import {
88
} from '@equinor/eds-core-react';
99
import { delete_to_trash as deleteIcon } from '@equinor/eds-icons';
1010
import { useState } from 'react';
11-
import {
12-
AddAnalogueModelOutcropForm,
13-
AnalogueModelDetail,
14-
OutcropDto,
15-
RegionDto,
16-
} from '../../../api/generated';
11+
import { AddAnalogueModelOutcropForm } from '../../../api/generated';
1712
import { useOutcropAnalouge } from '../../../hooks/useOutcropAnalogue';
1813
import * as StyledDialog from '../../../styles/addRowDialog/AddRowDialog.styled';
1914
import { OutcropSelect } from '../OutcropSelect/OutcropSelect';
2015
import * as Styled from './OutcropAnalogueGroup.styled';
2116
import { useIsOwnerOrAdmin } from '../../../hooks/useIsOwnerOrAdmin';
17+
import { usePepmContextStore } from '../../../hooks/GlobalState';
2218

2319
export interface OutcropType {
2420
outcropId?: string;
@@ -42,14 +38,11 @@ export type OutcropErrorType = {
4238

4339
export const OutcropAnalogueGroup = ({
4440
modelIdParent,
45-
defaultMetadata,
46-
outcropGroup,
4741
}: {
4842
modelIdParent?: string;
49-
defaultMetadata: AnalogueModelDetail;
50-
outcropGroup: OutcropDto[];
5143
}) => {
5244
const isOwnerOrAdmin = useIsOwnerOrAdmin();
45+
const { analogueModel } = usePepmContextStore();
5346
const [showOutcropDialog, setShowOutcropDialog] = useState<boolean>(false);
5447
const [errors, setErrors] = useState<OutcropErrorType>({});
5548
const [outcropObject, setOutcropObject] =
@@ -73,7 +66,7 @@ export const OutcropAnalogueGroup = ({
7366
};
7467

7568
const handleAddOutcropAnalogue = async () => {
76-
const id = modelIdParent ? modelIdParent : defaultMetadata.analogueModelId;
69+
const id = modelIdParent ? modelIdParent : analogueModel.analogueModelId;
7770
const err = await validateInput(outcropObject);
7871
setErrors(err);
7972

@@ -90,7 +83,7 @@ export const OutcropAnalogueGroup = ({
9083
};
9184

9285
const handleDeleteOutcropAnalogue = async (stratigraphicGroupId: string) => {
93-
const id = modelIdParent ? modelIdParent : defaultMetadata.analogueModelId;
86+
const id = modelIdParent ? modelIdParent : analogueModel.analogueModelId;
9487
const res = await useOutcrop.deleteOutcropAnalogue.mutateAsync({
9588
id: id,
9689
outcropId: stratigraphicGroupId,
@@ -103,7 +96,7 @@ export const OutcropAnalogueGroup = ({
10396
<Typography variant="h4" as="h3">
10497
Outcrop Analogue
10598
</Typography>
106-
{outcropGroup.length > 0 && (
99+
{analogueModel.outcrops.length > 0 && (
107100
<Table>
108101
<Table.Head>
109102
<Table.Row>
@@ -117,7 +110,7 @@ export const OutcropAnalogueGroup = ({
117110
</Table.Row>
118111
</Table.Head>
119112
<Table.Body>
120-
{outcropGroup.map((row) => (
113+
{analogueModel.outcrops.map((row) => (
121114
<Table.Row key={row.outcropId}>
122115
<Table.Cell>
123116
{isOwnerOrAdmin && (
@@ -180,7 +173,7 @@ export const OutcropAnalogueGroup = ({
180173
<Dialog.CustomContent>
181174
<OutcropSelect
182175
outcropObject={outcropObject}
183-
outcropGroup={outcropGroup}
176+
outcropGroup={analogueModel.outcrops}
184177
setOutcropObject={setOutcropObject}
185178
error={errors}
186179
/>

src/components/OutcropAnalogue/OutcropSelect/OutcropSelect.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* eslint-disable max-lines-per-function */
22
import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react';
33
import { OutcropDto } from '../../../api/generated';
4-
import { useFetchOutcropData } from '../../../hooks/useFetchOutcropData';
54
import * as StyledDialog from '../../../styles/addRowDialog/AddRowDialog.styled';
65
import { sortList } from '../../../utils/SortList';
76
import {
87
OutcropErrorType,
98
OutcropType,
109
} from '../OutcropAnalogueGroup/OutcropAnalogueGroup';
10+
import { usePepmContextStore } from '../../../hooks/GlobalState';
1111

1212
export const OutcropSelect = ({
1313
outcropObject,
@@ -20,9 +20,10 @@ export const OutcropSelect = ({
2020
error: OutcropErrorType;
2121
setOutcropObject: React.Dispatch<React.SetStateAction<OutcropType>>;
2222
}) => {
23-
const OutcropData = useFetchOutcropData();
24-
if (OutcropData.isLoading || !OutcropData.data?.success)
25-
return <p>Loading .....</p>;
23+
const { outcrops } = usePepmContextStore();
24+
const oc: OutcropDto[] = [...outcrops];
25+
26+
if (outcrops.length === 0) return <p>Loading .....</p>;
2627

2728
const filterDisabled = (option: OutcropDto) => {
2829
const caseExists = outcropGroup.filter(
@@ -35,7 +36,7 @@ export const OutcropSelect = ({
3536
<StyledDialog.AutocompleteList>
3637
<Autocomplete
3738
label="Analogue"
38-
options={sortList(OutcropData.data.data)}
39+
options={sortList(oc)}
3940
optionLabel={(option) => option.name}
4041
onOptionsChange={(e: AutocompleteChanges<OutcropDto>) => {
4142
const copyObject: OutcropType = {

0 commit comments

Comments
 (0)