diff --git a/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.interface.ts index be6ec2bdfa9..0f0b5a07c39 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.interface.ts @@ -28,6 +28,7 @@ export interface AsyncSelectListProps { placeholder?: string; debounceTimeout?: number; defaultValue?: string[]; + value?: string[]; initialOptions?: SelectOption[]; onChange?: (option: DefaultOptionType | DefaultOptionType[]) => void; fetchOptions: ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.tsx b/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.tsx index 2b5ff83332a..c3c7aa02832 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/AsyncSelectList/AsyncSelectList.tsx @@ -236,7 +236,7 @@ const AsyncSelectList: FC = ({ {...props}> {tagOptions.map(({ label, value, displayName, data }) => ( { const { currentUser } = useAuthContext(); - const [relatedTermsOptions, setRelatedTermsOptions] = useState< - EntityReference[] - >([]); const owner = Form.useWatch('owner', form); const reviewersList = Form.useWatch('reviewers', form) ?? []; - const fetchGlossaryTerms = async ( - searchText = '', - page: number - ): Promise<{ - data: { - label: string; - value: string; - }[]; - paging: Paging; - }> => { - const res = await searchData( - searchText, - page, - PAGE_SIZE, - '', - '', - '', - SearchIndex.GLOSSARY - ); - - let termResult = formatSearchGlossaryTermResponse(res.data.hits.hits); - if (editMode && glossaryTerm) { - termResult = termResult.filter((item) => { - return item.fullyQualifiedName !== glossaryTerm.fullyQualifiedName; - }); - } - const results = termResult.map(getEntityReferenceFromGlossaryTerm); - setRelatedTermsOptions((prev) => [...prev, ...results]); - - return { - data: results.map((item) => ({ - label: item.fullyQualifiedName ?? '', - value: item.fullyQualifiedName ?? '', - })), - paging: { - total: res.data.hits.total.value, - }, - }; - }; + const getRelatedTermFqnList = (relatedTerms: DefaultOptionType[]): string[] => + relatedTerms.map((tag: DefaultOptionType) => tag.value as string); const handleSave: FormProps['onFinish'] = (formObj) => { const { @@ -127,10 +83,21 @@ const AddGlossaryTermForm = ({ description: description, reviewers: reviewersList, relatedTerms: editMode - ? relatedTermsOptions - .filter((item) => includes(relatedTerms, item.fullyQualifiedName)) - .map((term) => term.id) - : relatedTerms, + ? relatedTerms.map((term: DefaultOptionType) => { + if (isString(term)) { + return glossaryTerm?.relatedTerms?.find( + (r) => r.fullyQualifiedName === term + )?.id; + } + if (term.data) { + return term.data.id; + } + + return glossaryTerm?.relatedTerms?.find( + (r) => r.fullyQualifiedName === term.value + )?.id; + }) + : getRelatedTermFqnList(relatedTerms), references: references.length > 0 ? references : undefined, synonyms: synonyms, mutuallyExclusive, @@ -169,7 +136,7 @@ const AddGlossaryTermForm = ({ tags, references, mutuallyExclusive, - relatedTerms: relatedTerms?.map((r) => r.fullyQualifiedName || ''), + relatedTerms: relatedTerms?.map((r) => r.fullyQualifiedName ?? ''), }); if (reviewers) { @@ -185,10 +152,6 @@ const AddGlossaryTermForm = ({ if (owner) { form.setFieldValue('owner', owner); } - - if (relatedTerms && relatedTerms.length > 0) { - setRelatedTermsOptions((prev) => [...prev, ...relatedTerms]); - } } }, [editMode, glossaryTerm, glossaryReviewers, form]); @@ -249,6 +212,11 @@ const AddGlossaryTermForm = ({ type: FieldTypes.TAG_SUGGESTION, props: { 'data-testid': 'tags-container', + initialOptions: glossaryTerm?.tags?.map((data) => ({ + label: data.tagFQN, + value: data.tagFQN, + data, + })), }, }, { @@ -278,7 +246,12 @@ const AddGlossaryTermForm = ({ placeholder: t('label.add-entity', { entity: t('label.related-term-plural'), }), - fetchOptions: fetchGlossaryTerms, + fetchOptions: fetchGlossaryList, + initialOptions: glossaryTerm?.relatedTerms?.map((data) => ({ + label: data.fullyQualifiedName, + value: data.fullyQualifiedName, + data, + })), }, }, { diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryTerms/tabs/AssetsTabs.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryTerms/tabs/AssetsTabs.component.tsx index 0555dacc020..fcafcdd345f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryTerms/tabs/AssetsTabs.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryTerms/tabs/AssetsTabs.component.tsx @@ -71,6 +71,7 @@ import { import { getCountBadge, Transi18next } from '../../../../utils/CommonUtils'; import { getEntityName } from '../../../../utils/EntityUtils'; import { getEntityTypeFromSearchIndex } from '../../../../utils/SearchUtils'; +import { getDecodedFqn } from '../../../../utils/StringsUtils'; import { getEntityIcon } from '../../../../utils/TableUtils'; import { showErrorToast } from '../../../../utils/ToastUtils'; import ErrorPlaceHolder from '../../../common/ErrorWithPlaceholder/ErrorPlaceHolder'; @@ -248,7 +249,7 @@ const AssetsTabs = forwardRef( break; case AssetsOfEntity.GLOSSARY: - data = await getGlossaryTermByFQN(fqn); + data = await getGlossaryTermByFQN(getDecodedFqn(fqn)); break; default: diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/TagSuggestion.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/TagSuggestion.tsx index 9dc8ab83131..99507dfc657 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/TagSuggestion.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/TasksPage/shared/TagSuggestion.tsx @@ -83,7 +83,6 @@ const TagSuggestion: React.FC = ({ return ( item.tagFQN) || []} fetchOptions={isGlossaryType ? fetchGlossaryList : fetchTagsElasticSearch} initialOptions={initialOptions} mode="multiple" @@ -93,6 +92,7 @@ const TagSuggestion: React.FC = ({ field: t('label.tag-plural'), }) } + value={value?.map((item) => item.tagFQN) ?? []} onChange={(value) => handleTagSelection(value)} /> );