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 (
-