From f64c44709ca5362ddf0d4356da10299c1202f1a7 Mon Sep 17 00:00:00 2001 From: mheggelund Date: Mon, 23 Oct 2023 09:44:01 +0200 Subject: [PATCH] feat: Add set/update area coordinates option --- .../AreaCoordinates/AreaCoordinates.tsx | 248 ++++++++++++++++++ src/components/Table.tsx | 29 +- 2 files changed, 275 insertions(+), 2 deletions(-) create mode 100644 src/components/AreaCoordinates/AreaCoordinates.tsx diff --git a/src/components/AreaCoordinates/AreaCoordinates.tsx b/src/components/AreaCoordinates/AreaCoordinates.tsx new file mode 100644 index 00000000..3f9f02c0 --- /dev/null +++ b/src/components/AreaCoordinates/AreaCoordinates.tsx @@ -0,0 +1,248 @@ +/* eslint-disable max-lines-per-function */ +import { + Autocomplete, + AutocompleteChanges, + Button, + Input, + Label, + Typography, +} from '@equinor/eds-core-react'; +import { useQuery } from '@tanstack/react-query'; +import { useEffect, useState } from 'react'; +import { AnalogueModelsService } from '../../api/generated/services/AnalogueModelsService'; +import { ErrorType } from '../../features/AddModel/AddModelDialog/AddModelDialog'; +import optionTypes from '../../features/Compute/ComputeVariogram/CaseCard/CaseCard'; + +interface CoordinateType { + top: { + X?: string; + Y?: string; + }; + bottom: { + X?: string; + Y?: string; + }; +} +export const AreaCoordinates = ({ modelId }: { modelId: string }) => { + const [selectedArea, setSelectedArea] = useState(); + const [areaCoordinats, setAreaCoordinats] = useState({ + top: { + X: undefined, + Y: undefined, + }, + bottom: { + X: undefined, + Y: undefined, + }, + }); + const [errors, setErrors] = useState({}); + const [submitting, setSubmitting] = useState(false); + + const { data, isLoading } = useQuery({ + queryKey: ['analogue-models', modelId], + queryFn: () => AnalogueModelsService.getApiAnalogueModels1(modelId), + }); + + const modelAreas: optionTypes[] = [ + { id: 10, name: 'Proximal' }, + { id: 11, name: 'Left' }, + { id: 12, name: 'Distal' }, + ]; + + const validateValues = ( + selectedArea?: optionTypes, + areaCoordinats?: CoordinateType, + ) => { + const errors: ErrorType = {}; + if (selectedArea === undefined) { + errors.field = 'Area to define coordinates for not selected'; + } + + if ( + areaCoordinats?.top.X === undefined || + areaCoordinats?.top.Y === undefined || + areaCoordinats?.top.X.length < 1 || + areaCoordinats?.top.Y.length < 1 + ) { + errors.formation = 'Top coordinates not selected'; + } + + if ( + areaCoordinats?.bottom.X === undefined || + areaCoordinats?.bottom.Y === undefined || + areaCoordinats?.bottom.X.length < 1 || + areaCoordinats?.bottom.Y.length < 1 + ) { + errors.file = 'Bottom coordinates not selected'; + } + console.log(errors); + + return errors; + }; + + const finishSubmit = () => { + console.log(selectedArea); + console.log(areaCoordinats); + }; + + useEffect(() => { + if (Object.keys(errors).length === 0 && submitting) { + finishSubmit(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [errors, submitting]); + + const saveChange = () => { + setErrors(validateValues(selectedArea, areaCoordinats)); + setSubmitting(true); + }; + + if (isLoading)

Loading.....

; + + return ( + <> + {data?.success && {data.data.name}} + Set coordinates for model areas +
+ option.name} + onOptionsChange={(changes: AutocompleteChanges) => + setSelectedArea(changes.selectedItems[0]) + } + > + +
+ Bottom Right Corner +
+
+
+
+
+ +
+ Top Left Corner +
+
+
+
+
+ +
+ + ); +}; + +/** + * + * + * +const CoordinateSet = ({ + label, + position, + areaCoordinats, + setAreaCoordinats, +}: { + label: string; + position: { + X: string; + Y: string; + }; + areaCoordinats: CoordinateType; + setAreaCoordinats: (areaCoordinats: CoordinateType) => void; +}) => { + return ( +
+ {label} +
+
+
+
+
+ ); +}; + */ diff --git a/src/components/Table.tsx b/src/components/Table.tsx index 96508401..e80ab5d7 100644 --- a/src/components/Table.tsx +++ b/src/components/Table.tsx @@ -1,12 +1,16 @@ /* eslint-disable max-lines-per-function */ -import { Button, Chip } from '@equinor/eds-core-react'; +import { Button, Chip, Scrim, SideSheet } from '@equinor/eds-core-react'; import { EdsDataGrid } from '@equinor/eds-data-grid-react'; import { useQuery } from '@tanstack/react-query'; +import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { AnalogueModelsService } from '../api/generated'; +import { AreaCoordinates } from './AreaCoordinates/AreaCoordinates'; import * as Styled from './Table.styled'; export const Table = () => { + const [toggle, setToggle] = useState(false); + const [activeModel, setActiveModel] = useState(); const { isLoading, data } = useQuery({ queryKey: ['analogue-models'], queryFn: () => AnalogueModelsService.getApiAnalogueModels(), @@ -66,7 +70,6 @@ export const Table = () => { header: 'Status', id: 'isProcessed', }, - { accessorKey: 'navigate', cell: ({ row }) => ( @@ -81,8 +84,30 @@ export const Table = () => { header: '', id: 'navigate', }, + { + accessorKey: 'areas', + cell: ({ row }) => ( + + ), + header: '', + id: 'areas', + }, ]} /> + {activeModel && ( + + setToggle(!toggle)}> + + + + )} ); };