diff --git a/datahub-web-react/src/app/entity/dataset/profile/schema/Schema.tsx b/datahub-web-react/src/app/entity/dataset/profile/schema/Schema.tsx index 2ba45bab7f9ce4..6bd21f28e0c8cb 100644 --- a/datahub-web-react/src/app/entity/dataset/profile/schema/Schema.tsx +++ b/datahub-web-react/src/app/entity/dataset/profile/schema/Schema.tsx @@ -25,6 +25,9 @@ import DescriptionField from './SchemaDescriptionField'; import analytics, { EventType, EntityActionType } from '../../../../analytics'; const MAX_FIELD_PATH_LENGTH = 100; +const SchemaContainer = styled.div` + margin-bottom: 100px; +`; const ViewRawButtonContainer = styled.div` display: flex; justify-content: flex-end; @@ -259,7 +262,7 @@ export default function SchemaView({ urn, schema, editableSchemaMetadata, update }; return ( - <> + {schema?.platformSchema?.__typename === 'TableSchema' && schema?.platformSchema?.schema?.length > 0 && ( @@ -285,6 +288,6 @@ export default function SchemaView({ urn, schema, editableSchemaMetadata, update /> ) )} - + ); } diff --git a/datahub-web-react/src/app/entity/dataset/profile/schema/SchemaDescriptionField.tsx b/datahub-web-react/src/app/entity/dataset/profile/schema/SchemaDescriptionField.tsx index fd52752b53f94d..9565f3d338ad8b 100644 --- a/datahub-web-react/src/app/entity/dataset/profile/schema/SchemaDescriptionField.tsx +++ b/datahub-web-react/src/app/entity/dataset/profile/schema/SchemaDescriptionField.tsx @@ -1,4 +1,5 @@ -import { Typography, message } from 'antd'; +import { Typography, message, Tag } from 'antd'; +import { EditOutlined } from '@ant-design/icons'; import React, { useState } from 'react'; import styled from 'styled-components'; import { FetchResult } from '@apollo/client'; @@ -7,10 +8,33 @@ import { UpdateDatasetMutation } from '../../../../../graphql/dataset.generated' import UpdateDescriptionModal from '../../../shared/DescriptionModal'; import MarkdownViewer from '../../../shared/MarkdownViewer'; +const EditIcon = styled(EditOutlined)` + cursor: pointer; + padding: 2px; + margin-top: 4px; + margin-left: 8px; + display: none; +`; + +const AddNewDescription = styled(Tag)` + cursor: pointer; + display: none; +`; + const DescriptionContainer = styled.div` position: relative; display: flex; flex-direction: row; + width: 100%; + height: 100%; + min-height: 22px; + &:hover ${EditIcon} { + display: block; + } + + &:hover ${AddNewDescription} { + display: block; + } `; const DescriptionText = styled(MarkdownViewer)` @@ -37,11 +61,18 @@ export default function DescriptionField({ description, updatedDescription, onUp const [showAddModal, setShowAddModal] = useState(false); const onCloseModal = () => setShowAddModal(false); + const currentDesc: string = updatedDescription || description; const onUpdateModal = async (desc: string | null) => { message.loading({ content: 'Updating...' }); - await onUpdate(desc || ''); - message.success({ content: 'Updated!', duration: 2 }); + try { + await onUpdate(desc || ''); + message.destroy(); + message.success({ content: 'Updated!', duration: 2 }); + } catch (e) { + message.destroy(); + message.error({ content: `Update Failed! \n ${e.message || ''}`, duration: 2 }); + } onCloseModal(); }; @@ -52,23 +83,26 @@ export default function DescriptionField({ description, updatedDescription, onUp e.stopPropagation(); }} > - setShowAddModal(true)} - /> + + {currentDesc && setShowAddModal(true)} />} {updatedDescription && (edited)} {showAddModal && (
)} + {!currentDesc && ( + setShowAddModal(true)}> + + Add Description + + )} ); } diff --git a/datahub-web-react/src/app/entity/shared/DescriptionModal.tsx b/datahub-web-react/src/app/entity/shared/DescriptionModal.tsx index ab4f77074304dd..fa9598ff863063 100644 --- a/datahub-web-react/src/app/entity/shared/DescriptionModal.tsx +++ b/datahub-web-react/src/app/entity/shared/DescriptionModal.tsx @@ -29,7 +29,7 @@ type Props = { }; export default function UpdateDescriptionModal({ title, description, original, onClose, onSubmit, isAddDesc }: Props) { - const [updatedDesc, setDesc] = useState(description || original); + const [updatedDesc, setDesc] = useState(description || description === '' ? description : original); return ( - diff --git a/datahub-web-react/src/app/entity/shared/MarkdownViewer.tsx b/datahub-web-react/src/app/entity/shared/MarkdownViewer.tsx index ad51ba516ad929..d4e89786ef3184 100644 --- a/datahub-web-react/src/app/entity/shared/MarkdownViewer.tsx +++ b/datahub-web-react/src/app/entity/shared/MarkdownViewer.tsx @@ -4,8 +4,6 @@ import { EditOutlined } from '@ant-design/icons'; import MDEditor from '@uiw/react-md-editor'; import styled from 'styled-components'; -// const { Text } = Typography; - const EditIcon = styled(EditOutlined)` cursor: pointer; position: absolute; @@ -111,7 +109,7 @@ export default function MarkdownViewer({ source, limit = 150, editable, onEditCl {showAll ? 'show less' : 'show more'} )} - + {editable && } ); }