From 4233abf41587b436402d1abec2bcc2d72c913f64 Mon Sep 17 00:00:00 2001
From: Karan Hotchandani <33024356+karanh37@users.noreply.github.com>
Date: Tue, 8 Oct 2024 23:06:54 +0530
Subject: [PATCH] Gen-882: Add max length validation for glossary term rename
(#18166)
* add max length validation for glossary term name
* add name validation
---
.../main/resources/ui/playwright/utils/glossary.ts | 11 ++++++++++-
.../main/resources/ui/src/assets/svg/ic-search.svg | 8 +++++++-
.../GlossaryHeader/GlossaryHeader.component.tsx | 11 +++++++++++
.../GlossaryTerms/GlossaryTermsV1.component.tsx | 6 +++++-
.../EntityNameModal/EntityNameModal.component.tsx | 2 ++
.../EntityNameModal/EntityNameModal.interface.ts | 3 +++
.../Glossary/GlossaryPage/GlossaryPage.component.tsx | 5 +----
7 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts
index b060e62128d..c5b7e7e2ea1 100644
--- a/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts
+++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts
@@ -37,6 +37,8 @@ import { addMultiOwner } from './entity';
import { sidebarClick } from './sidebar';
import { TaskDetails, TASK_OPEN_FETCH_LINK } from './task';
+const GLOSSARY_NAME_VALIDATION_ERROR = 'Name size must be between 1 and 128';
+
export const descriptionBox =
'.toastui-editor-md-container > .toastui-editor > .ProseMirror';
@@ -146,7 +148,7 @@ export const setupGlossaryAndTerms = async (page: Page) => {
return { glossary, term1, term2, cleanup };
};
-export const validateForm = async (page) => {
+export const validateForm = async (page: Page) => {
// Error messages
await expect(page.locator('#name_help')).toHaveText('Name is required');
await expect(page.locator('#description_help')).toHaveText(
@@ -603,6 +605,13 @@ export const updateNameForGlossaryTerm = async (
await expect(page.locator('#name')).toBeVisible();
+ // Max length validation
+ await page.locator('#name').fill(INVALID_NAMES.MAX_LENGTH);
+
+ await expect(page.locator('#name_help')).toHaveText(
+ GLOSSARY_NAME_VALIDATION_ERROR
+ );
+
await page.fill('#name', name);
const updateNameResponsePromise = page.waitForResponse(
`/api/v1/${endPoint}/*`
diff --git a/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg b/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg
index 206c4dcc02c..9be36acac92 100644
--- a/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg
+++ b/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg
@@ -1 +1,7 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx
index fa77762831c..9c0851a77ab 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx
@@ -657,6 +657,17 @@ const GlossaryHeader = ({
{
await handleGlossaryTermUpdate(data as GlossaryTerm);
- getEntityFeedCount();
+ // For name change, do not update the feed. It will be updated when the page is redirected to
+ // have the new value.
+ if (glossaryTerm.name === data.name) {
+ getEntityFeedCount();
+ }
};
const tabItems = useMemo(() => {
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx
index 3be5a50d8dc..ce65ff03214 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx
@@ -25,6 +25,7 @@ const EntityNameModal: React.FC = ({
// re-name will update actual name of the entity, it will impact across application
// By default its disabled, send allowRename true to get the functionality
allowRename = false,
+ nameValidationRules = [],
}) => {
const { t } = useTranslation();
const [form] = Form.useForm<{ name: string; displayName: string }>();
@@ -83,6 +84,7 @@ const EntityNameModal: React.FC = ({
pattern: ENTITY_NAME_REGEX,
message: t('message.entity-name-validation'),
},
+ ...nameValidationRules,
]}>
void | Promise;
entity: Partial;
title: string;
+ nameValidationRules?: Rule[];
}
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx
index 427311974d1..ab2d3592eb7 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx
@@ -280,10 +280,7 @@ const GlossaryPage = () => {
return;
}
try {
- const response = await patchGlossaryTerm(
- activeGlossary?.id as string,
- jsonPatch
- );
+ const response = await patchGlossaryTerm(activeGlossary?.id, jsonPatch);
if (response) {
setActiveGlossary(response as ModifiedGlossary);
if (activeGlossary?.name !== updatedData.name) {