From e58e2bf3be6cf43923ff400667406ee6dc95cd3a Mon Sep 17 00:00:00 2001
From: kushagra-apptware <81357546+kushagra-apptware@users.noreply.github.com>
Date: Mon, 18 Dec 2023 11:02:33 +0530
Subject: [PATCH] feat: Deprecation 'Note' changed to Markdown Renderable
(#9396)
Setting auto merge after test cases are passed
---
.../EntityDropdown/UpdateDeprecationModal.tsx | 14 +++-
.../components/styled/DeprecationPill.tsx | 82 +++++++++++++++++--
.../tests/cypress/cypress/support/commands.js | 2 +-
3 files changed, 86 insertions(+), 12 deletions(-)
diff --git a/datahub-web-react/src/app/entity/shared/EntityDropdown/UpdateDeprecationModal.tsx b/datahub-web-react/src/app/entity/shared/EntityDropdown/UpdateDeprecationModal.tsx
index 6ae893e12575f..25527497b33a8 100644
--- a/datahub-web-react/src/app/entity/shared/EntityDropdown/UpdateDeprecationModal.tsx
+++ b/datahub-web-react/src/app/entity/shared/EntityDropdown/UpdateDeprecationModal.tsx
@@ -1,7 +1,10 @@
import React from 'react';
-import { Button, DatePicker, Form, Input, message, Modal } from 'antd';
+import { Button, DatePicker, Form, message, Modal } from 'antd';
+import styled from 'styled-components';
import { useBatchUpdateDeprecationMutation } from '../../../../graphql/mutations.generated';
import { handleBatchError } from '../utils';
+import { Editor } from '../tabs/Documentation/components/editor/Editor';
+import { ANTD_GRAY } from '../constants';
type Props = {
urns: string[];
@@ -9,6 +12,10 @@ type Props = {
refetch?: () => void;
};
+const StyledEditor = styled(Editor)`
+ border: 1px solid ${ANTD_GRAY[4.5]};
+`;
+
export const UpdateDeprecationModal = ({ urns, onClose, refetch }: Props) => {
const [batchUpdateDeprecation] = useBatchUpdateDeprecationMutation();
const [form] = Form.useForm();
@@ -64,10 +71,11 @@ export const UpdateDeprecationModal = ({ urns, onClose, refetch }: Props) => {
>
}
+ width='40%'
>
-
+
+
diff --git a/datahub-web-react/src/app/entity/shared/components/styled/DeprecationPill.tsx b/datahub-web-react/src/app/entity/shared/components/styled/DeprecationPill.tsx
index f60a74247ebcc..9ec2aab193aa0 100644
--- a/datahub-web-react/src/app/entity/shared/components/styled/DeprecationPill.tsx
+++ b/datahub-web-react/src/app/entity/shared/components/styled/DeprecationPill.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
import { InfoCircleOutlined } from '@ant-design/icons';
import { Divider, message, Modal, Popover, Tooltip, Typography } from 'antd';
import { blue } from '@ant-design/colors';
@@ -8,6 +8,8 @@ import { Deprecation } from '../../../../../types.generated';
import { getLocaleTimezone } from '../../../../shared/time/timeUtils';
import { ANTD_GRAY } from '../../constants';
import { useBatchUpdateDeprecationMutation } from '../../../../../graphql/mutations.generated';
+import { Editor } from '../../tabs/Documentation/components/editor/Editor';
+import StripMarkdownText, { removeMarkdown } from './StripMarkdownText';
const DeprecatedContainer = styled.div`
height: 18px;
@@ -38,11 +40,6 @@ const DeprecatedTitle = styled(Typography.Text)`
font-weight: bold;
`;
-const DeprecatedSubTitle = styled(Typography.Text)`
- display: block;
- margin-bottom: 5px;
-`;
-
const LastEvaluatedAtLabel = styled.div`
padding: 0;
margin: 0;
@@ -70,15 +67,42 @@ const IconGroup = styled.div`
}
`;
+const DescriptionContainer = styled.div`
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ min-height: 22px;
+ margin-bottom: 14px;
+`;
+const StyledViewer = styled(Editor)`
+ padding-right: 8px;
+ display: block;
+
+ .remirror-editor.ProseMirror {
+ padding: 0;
+ }
+`;
+
+const ExpandedActions = styled.div`
+ height: 10px;
+`;
+const ReadLessText = styled(Typography.Link)`
+ margin-right: 4px;
+`;
type Props = {
urn: string;
deprecation: Deprecation;
refetch?: () => void;
showUndeprecate: boolean | null;
};
+const ABBREVIATED_LIMIT = 80;
export const DeprecationPill = ({ deprecation, urn, refetch, showUndeprecate }: Props) => {
const [batchUpdateDeprecationMutation] = useBatchUpdateDeprecationMutation();
+ const [expanded, setExpanded] = useState(false);
+ const overLimit = deprecation?.note && removeMarkdown(deprecation?.note).length > 80;
/**
* Deprecation Decommission Timestamp
*/
@@ -131,14 +155,56 @@ export const DeprecationPill = ({ deprecation, urn, refetch, showUndeprecate }:
return (
{deprecation?.note !== '' && Deprecation note}
{isDividerNeeded && }
- {deprecation?.note !== '' && {deprecation.note}}
+
+ {expanded || !overLimit ? (
+ <>
+ {
+ deprecation?.note && deprecation?.note !== '' &&
+ <>
+
+
+ {overLimit && (
+ {
+ setExpanded(false);
+ }}
+ >
+ Read Less
+
+ )}
+
+ >
+ }
+ >
+ ) : (
+ <>
+
+ {
+ setExpanded(true);
+ }}
+ >
+ Read More
+
+ >
+ }
+ shouldWrap
+ >
+ {deprecation.note}
+
+ >
+ )}
+
{deprecation?.decommissionTime !== null && (
diff --git a/smoke-test/tests/cypress/cypress/support/commands.js b/smoke-test/tests/cypress/cypress/support/commands.js
index 5e3664f944edf..ffbd050488181 100644
--- a/smoke-test/tests/cypress/cypress/support/commands.js
+++ b/smoke-test/tests/cypress/cypress/support/commands.js
@@ -171,7 +171,7 @@ Cypress.Commands.add("deleteFromDropdown", () => {
Cypress.Commands.add("addViaFormModal", (text, modelHeader) => {
cy.waitTextVisible(modelHeader);
- cy.get(".ant-form-item-control-input-content > input[type='text']").first().type(text);
+ cy.get('.ProseMirror-focused').type(text);
cy.get(".ant-modal-footer > button:nth-child(2)").click();
});