diff --git a/src/features/AddModel/AddModelDialog/AddModelDialog.hooks.ts b/src/features/AddModel/AddModelDialog/AddModelDialog.hooks.ts index 76cfe15e..a3388a62 100644 --- a/src/features/AddModel/AddModelDialog/AddModelDialog.hooks.ts +++ b/src/features/AddModel/AddModelDialog/AddModelDialog.hooks.ts @@ -40,13 +40,6 @@ export const validateValues = ( errors.description = 'Description not provided'; } - if ( - inputValues?.analogues === undefined || - inputValues?.analogues?.length <= 0 - ) { - errors.analogues = 'Analogues not selected'; - } - if (!files.NC && !isEdit) { errors.file = 'NC file missing'; } diff --git a/src/features/AddModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx b/src/features/AddModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx new file mode 100644 index 00000000..e688b6fc --- /dev/null +++ b/src/features/AddModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx @@ -0,0 +1,67 @@ +/* eslint-disable max-lines-per-function */ +/* eslint-disable react/prop-types */ + +import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react'; +import { AnalogueList, AnalogueModelDetail } from '../../../../api/generated'; + +export const AnalogueSelect = ({ + errors, + data, + analogue, + metadata, + setMetadata, +}: { + errors: string | undefined; + data: AnalogueList[]; + analogue: AnalogueList[] | undefined; + metadata: AnalogueModelDetail; + setMetadata: (metadata: AnalogueModelDetail) => void; +}) => { + const emptyOption: AnalogueList[] = [ + { + analogueId: 'Analogue', + name: 'NoRelevant', + description: 'Not relevant', + }, + ]; + + const selectedOptions = + metadata.analogues.length > 0 ? metadata.analogues : emptyOption; + + const optionList: AnalogueList[] = + data.length > 0 ? emptyOption.concat(data) : emptyOption; + + const intersection = optionList.filter( + (a) => + selectedOptions && + selectedOptions.some((b) => JSON.stringify(a) === JSON.stringify(b)), + ); + + function handleAddMetadata(e: AutocompleteChanges) { + const removeNotSelected = e.selectedItems.filter( + (i) => i.analogueId !== 'Analogue', + ); + const newList = [...removeNotSelected]; + + setMetadata({ + ...metadata, + analogues: [...newList], + }); + } + + return ( + option.name} + multiple + initialSelectedOptions={ + intersection.length === 0 ? emptyOption : intersection + } + onOptionsChange={(e: AutocompleteChanges) => + handleAddMetadata(e) + } + /> + ); +}; diff --git a/src/features/AddModel/ModelMetadata/ModelMetadata.tsx b/src/features/AddModel/ModelMetadata/ModelMetadata.tsx index ba4be715..744d2fa6 100644 --- a/src/features/AddModel/ModelMetadata/ModelMetadata.tsx +++ b/src/features/AddModel/ModelMetadata/ModelMetadata.tsx @@ -1,6 +1,5 @@ /* eslint-disable max-lines-per-function */ import { - Autocomplete, AutocompleteChanges, Label, Typography, @@ -10,7 +9,6 @@ import { ErrorType } from '../AddModelDialog/AddModelDialog'; import { useMsal } from '@azure/msal-react'; import { useQuery } from '@tanstack/react-query'; import { - AnalogueList, AnalogueModelDetail, AnaloguesService, MetadataDto, @@ -18,6 +16,7 @@ import { OpenAPI, } from '../../../api/generated'; import { useAccessToken } from '../../../hooks/useAccessToken'; +import { AnalogueSelect } from './AnalogueSelect/AnalogueSelect'; import { MetadataSelect } from './MetadataSelect/MetadataSelect'; import * as Styled from './ModelMetadata.styled'; @@ -46,16 +45,6 @@ export const ModelMetadata = ({ enabled: !!token, }); - const setSelectedAnalogueOptions = () => { - if (analougeData.data?.success && metadata.analogues) { - const analogue = metadata?.analogues; - - return analougeData.data?.data.filter( - (c) => analogue.findIndex((x: AnalogueList) => x.name === c.name) > -1, - ); - } - }; - function handleAddMetadata( e: AutocompleteChanges, propType: string, @@ -70,13 +59,9 @@ export const ModelMetadata = ({ const removeNotSelected = e.selectedItems.filter( (i) => i.metadataType === propType, ); - // console.log(removeNotSelected) const newList = [...metadataList, ...removeNotSelected]; - // if (propType === 'Formation') console.log(e.selectedItems); - // if (propType === 'Formation') console.log(newList); - setMetadata({ ...metadata, metadata: [...newList], @@ -152,20 +137,13 @@ export const ModelMetadata = ({ - option.name} - selectedOptions={setSelectedAnalogueOptions()} - multiple - onOptionsChange={(e: AutocompleteChanges) => - setMetadata({ - ...metadata, - analogues: e.selectedItems, - }) - } - > + {errors.analogues && ( )} diff --git a/src/features/ModelTable/ModelTable.tsx b/src/features/ModelTable/ModelTable.tsx index e8996d6e..1a80648c 100644 --- a/src/features/ModelTable/ModelTable.tsx +++ b/src/features/ModelTable/ModelTable.tsx @@ -81,9 +81,11 @@ export const ModelTable = ({ size: 100, cell: ({ row }) => ( - {row.original.analogues.map((a) => ( -

{a.name + ', '}

- ))} + {row.original.analogues.length > 0 + ? row.original.analogues.map((a) => ( +

{a.name + ', '}

+ )) + : 'Not relevant'}
), }, diff --git a/src/features/ModelView/TableDataCell/TableDataCell.tsx b/src/features/ModelView/TableDataCell/TableDataCell.tsx index 6499b66d..0fc31dfc 100644 --- a/src/features/ModelView/TableDataCell/TableDataCell.tsx +++ b/src/features/ModelView/TableDataCell/TableDataCell.tsx @@ -16,7 +16,7 @@ export const TableDataCell = ({ {m.name} )) ) : ( - - + Not relevant ) ) : data.metadata?.filter((m) => m.metadataType === type).length ? ( data.metadata