Skip to content

Commit

Permalink
chore: Change to dialog for edit name and description in modle view. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
mheggelund authored Jun 21, 2024
1 parent 016ab2b commit b59be59
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const useHandleModelComponent = (

export const validateValues = (
inputValues: Partial<AnalogueModelDetail> | undefined,
files: FilesProps,
files?: FilesProps,
isEdit?: boolean,
) => {
const errors: ErrorType = {};
Expand All @@ -40,8 +40,10 @@ export const validateValues = (
errors.description = 'Description not provided';
}

if (!files.NC && !isEdit) {
errors.file = 'NC file missing';
if (files && !isEdit) {
if (!files.NC) {
errors.file = 'NC file missing';
}
}

return errors;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,11 @@ import * as Styled from './HandleModelComponent.styled';

interface AddModelDialogProps {
confirm?: (file: File, metadata: AnalogueModelDetail) => Promise<void>;
edit?: (metadata: AnalogueModelDetail) => Promise<void>;
progress?: number;
uploading?: boolean;
defaultMetadata: AnalogueModelDetail;
isEdit?: boolean;
isAddUploading?: boolean;
existingData?: AnalogueModelDetail;
closeDialog?: () => void;
modelId?: string;
}

Expand Down Expand Up @@ -69,14 +66,11 @@ export interface StratColumnType {

export const HandleModelComponent = ({
confirm,
edit,
progress,
uploading,
defaultMetadata,
isEdit,
isAddUploading,
existingData,
closeDialog,
modelId,
}: AddModelDialogProps) => {
const [isFileDisplay, setFileDisplay] = useState<boolean>(false);
Expand All @@ -99,15 +93,10 @@ export const HandleModelComponent = ({
);

const handleSubmit = () => {
setErrors(validateValues(metadata, files, isEdit));
setErrors(validateValues(metadata, files));
setSubmitting(true);
};

const handleClose = () => {
setMetadata(defaultMetadata);
if (closeDialog) closeDialog();
};

const fileAdded = (e: React.ChangeEvent<HTMLInputElement>) => {
if (!e.target.files) return;
const file = e.target.files[0];
Expand All @@ -118,35 +107,23 @@ export const HandleModelComponent = ({

useEffect(() => {
const cleanupStates = () => {
if (!isEdit) setMetadata(defaultMetadata);
setFiles(defaultFiles);
setrawFile(undefined);
setFileSize(0);
setSubmitting(false);
};

const finishSubmit = () => {
if (files.NC && !isEdit && confirm) {
if (files.NC && confirm) {
confirm(files.NC, metadata);
} else if (isEdit && edit) {
edit(metadata);
}
cleanupStates();
};

if (Object.keys(errors).length === 0 && submitting) {
finishSubmit();
}
}, [
confirm,
defaultMetadata,
edit,
errors,
files.NC,
isEdit,
metadata,
submitting,
]);
}, [confirm, defaultMetadata, errors, files.NC, metadata, submitting]);

function toggleINIFileContent() {
setFileDisplay(!isFileDisplay);
Expand All @@ -172,13 +149,11 @@ export const HandleModelComponent = ({

return (
<Styled.Wrapper>
{!isEdit && progress !== undefined && progress <= 0 && (
<Typography variant="h3">
{isEdit ? 'Edit model details' : 'Add new model'}
</Typography>
{progress !== undefined && progress <= 0 && (
<Typography variant="h3">Add new model</Typography>
)}
<Styled.CustomContent>
{!isEdit && progress !== undefined && progress <= 0 && (
{progress !== undefined && progress <= 0 && (
<ModelInputFilesTable
files={files}
setFiles={setFiles}
Expand All @@ -191,7 +166,7 @@ export const HandleModelComponent = ({
/>
)}
{isFileDisplay && <INIFileContent />}
{(isEdit || !isAddUploading) && (
{!isAddUploading && (
<>
<ModelMetadata
errors={errors}
Expand All @@ -213,21 +188,10 @@ export const HandleModelComponent = ({
{!isAddUploading && (
<div>
<Button onClick={handleSubmit} disabled={uploading}>
{isEdit
? 'Save changes'
: uploading
{uploading
? 'Wait for model to finish uploading'
: 'Confirm and start uploading'}
</Button>
{isEdit && (
<Button
variant="outlined"
onClick={handleClose}
disabled={uploading}
>
Close
</Button>
)}
</div>
)}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Dialog } from '@equinor/eds-core-react';
import styled from 'styled-components';
import { spacings } from '../../../tokens/spacings';

export const DialogWrapper = styled(Dialog)`
min-width: 300px;
`;

export const Buttons = styled(Dialog.Actions)`
display: flex;
flex-direction: row;
column-gap: ${spacings.SMALL};
`;
106 changes: 106 additions & 0 deletions src/features/ModelView/EditNameDescription/EditNameDescription.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/* eslint-disable max-lines-per-function */
import { Button, Dialog, Typography } from '@equinor/eds-core-react';
import _ from 'lodash';
import { useEffect, useState } from 'react';
import { AnalogueModelDetail } from '../../../api/generated';
import { ErrorBanner } from '../../../components/ErrorBanner/ErrorBanner';
import { validateValues } from '../../HandleModel/HandleModelComponent/HandleModelComponent.hooks';
import * as Styled2 from '../../HandleModel/HandleModelComponent/HandleModelComponent.styled';
import { ModelMetadata } from '../../HandleModel/ModelMetadata/ModelMetadata';
import * as Styled from './EditNameDescription.styled';
export const EditNameDescription = ({
edit,
isEdit,
defaultMetadata,
closeDialog,
}: {
edit: (metadata: AnalogueModelDetail) => Promise<void>;
isEdit: boolean;
defaultMetadata: AnalogueModelDetail;
closeDialog: () => void;
}) => {
const [errors, setErrors] = useState({});
const [metadata, setMetadata] =
useState<AnalogueModelDetail>(defaultMetadata);
const [submitting, setSubmitting] = useState(false);

useEffect(() => {
const cleanupStates = () => {
if (!isEdit) setMetadata(defaultMetadata);
setSubmitting(false);
};

const finishSubmit = () => {
if (isEdit && edit) {
edit(metadata);
}
cleanupStates();
};

if (Object.keys(errors).length === 0 && submitting) {
finishSubmit();
}
}, [defaultMetadata, edit, errors, isEdit, metadata, submitting]);

const getErroMessageList = () => {
if (_.isEmpty(errors)) return;

const errorList: string[] = [];

Object.keys(errors).forEach(function (key) {
// TODO: Fix the TS error for errors[key]
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const message = errors[key];
errorList.push(message);
});
return errorList;
};
const ErrorList = getErroMessageList();

const handleSubmit = () => {
setErrors(validateValues(metadata, undefined, isEdit));
setSubmitting(true);
};

const handleClose = () => {
setMetadata(defaultMetadata);
if (closeDialog) closeDialog();
};

return (
<>
<Styled.DialogWrapper open={isEdit ? isEdit : false}>
<Dialog.CustomContent>
<Typography variant="body_short">Edit name description</Typography>
{isEdit && (
<>
<ModelMetadata
errors={errors}
metadata={metadata}
setMetadata={setMetadata}
/>
{!_.isEmpty(errors) &&
ErrorList !== undefined &&
ErrorList.map((e, i) => {
return (
<Styled2.ErrorDiv key={i}>
<ErrorBanner text={e} />
</Styled2.ErrorDiv>
);
})}
</>
)}
</Dialog.CustomContent>
<Styled.Buttons>
<Button variant="outlined" onClick={handleSubmit}>
Save
</Button>
<Button color={'danger'} variant="outlined" onClick={handleClose}>
Cancel
</Button>
</Styled.Buttons>
</Styled.DialogWrapper>
</>
);
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Dialog, Table } from '@equinor/eds-core-react';
import { Dialog } from '@equinor/eds-core-react';
import styled from 'styled-components';
import { spacings } from '../../../tokens/spacings';

Expand Down Expand Up @@ -27,28 +27,7 @@ export const MetadataInfo = styled.div`
max-width: 60%;
`;

const DataTable = styled(Table)`
min-width: 256px;
width: 85%;
`;

export const DescriptionWrapper = styled.div`
min-height: 200px;
`;

export const DataCell = styled(Table.Cell)`
display: flex;
flex-direction: row;
align-items: center;
> p {
padding-right: 10px;
}
`;

export const Actions = styled(Dialog.Actions)`
display: flex;
column-gap: ${spacings.SMALL};
`;

export { DataTable as Table };
27 changes: 9 additions & 18 deletions src/features/ModelView/ModelMetadataView/ModelMetadataView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,8 @@ import { GrossDepositionEnviromentGroup } from '../../../components/GrossDeposit
import { StratigraphicColumnSelect } from '../../../components/StrategraphicColumn/StratigraphicColumnSelect/StratigraphicColumnSelect';
import { StratigrapicGroups } from '../../../components/StrategraphicColumn/StratigrapicGroups/StratigrapicGroups';
import { useFetchModel } from '../../../hooks/useFetchModel';
import {
HandleModelComponent,
StratColumnType,
} from '../../HandleModel/HandleModelComponent/HandleModelComponent';
import { StratColumnType } from '../../HandleModel/HandleModelComponent/HandleModelComponent';
import { EditNameDescription } from '../EditNameDescription/EditNameDescription';
import * as Styled from './ModelMetadataView.styled';
export const defaultStratColumnData: StratColumnType = {
country: undefined,
Expand Down Expand Up @@ -315,21 +313,14 @@ export const ModelMetadataView = ({
<>
<Typography variant="h3">Description and metadata</Typography>

{!isAddModelDialog && (
<Styled.DescriptionWrapper>
{data.data.description && <div>{data.data.description}</div>}
</Styled.DescriptionWrapper>
)}
<>{data.data.description && <div>{data.data.description}</div>}</>

{isAddModelDialog && (
<HandleModelComponent
edit={updateModelMetadata}
defaultMetadata={defaultMetadata}
isEdit={true}
existingData={data.data}
closeDialog={toggleEditMetadata}
/>
)}
<EditNameDescription
edit={updateModelMetadata}
isEdit={isAddModelDialog}
defaultMetadata={defaultMetadata}
closeDialog={toggleEditMetadata}
/>
<div>
{!isAddModelDialog && (
<Button
Expand Down

0 comments on commit b59be59

Please sign in to comment.