+
+
{getEntityName(currentUser)}
{isEmpty(selectedPersona)
? t('label.default')
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/UserTeamSelectableList/UserTeamSelectableList.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/UserTeamSelectableList/UserTeamSelectableList.component.tsx
index d536e63e4d8..0b87484a4b4 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/common/UserTeamSelectableList/UserTeamSelectableList.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/common/UserTeamSelectableList/UserTeamSelectableList.component.tsx
@@ -15,7 +15,6 @@ import { isEmpty, noop, toString } from 'lodash';
import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { ReactComponent as EditIcon } from '../../../assets/svg/edit-new.svg';
-import { WILD_CARD_CHAR } from '../../../constants/char.constants';
import {
DE_ACTIVE_COLOR,
PAGE_SIZE_MEDIUM,
@@ -138,7 +137,7 @@ export const UserTeamSelectableList = ({
} else {
try {
const { data } = await searchData(
- WILD_CARD_CHAR,
+ '',
afterPage,
PAGE_SIZE_MEDIUM,
'teamType:Group',
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/explore/ExplorePageV1.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/explore/ExplorePageV1.component.tsx
index d3256cf45b9..8f7f731362e 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/explore/ExplorePageV1.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/explore/ExplorePageV1.component.tsx
@@ -11,8 +11,6 @@
* limitations under the License.
*/
-import { useAdvanceSearch } from '../../components/Explore/AdvanceSearchProvider/AdvanceSearchProvider.component';
-
import { Space, Typography } from 'antd';
import { get, isEmpty, isNil, isString, lowerCase } from 'lodash';
import Qs from 'qs';
@@ -25,6 +23,7 @@ import React, {
} from 'react';
import { useHistory, useLocation, useParams } from 'react-router-dom';
import AppState from '../../AppState';
+import { useAdvanceSearch } from '../../components/Explore/AdvanceSearchProvider/AdvanceSearchProvider.component';
import {
ExploreProps,
ExploreSearchIndex,
@@ -52,6 +51,7 @@ import { Aggregations, SearchResponse } from '../../interface/search.interface';
import { searchQuery } from '../../rest/searchAPI';
import { getCountBadge } from '../../utils/CommonUtils';
import { getCombinedQueryFilterObject } from '../../utils/ExplorePage/ExplorePageUtils';
+import { escapeESReservedCharacters } from '../../utils/StringsUtils';
import { showErrorToast } from '../../utils/ToastUtils';
import {
QueryFieldInterface,
@@ -306,7 +306,7 @@ const ExplorePageV1: FunctionComponent = () => {
setIsLoading(true);
Promise.all([
searchQuery({
- query: searchQueryParam,
+ query: escapeESReservedCharacters(searchQueryParam),
searchIndex,
queryFilter: combinedQueryFilter,
sortField: newSortValue,
@@ -335,7 +335,7 @@ const ExplorePageV1: FunctionComponent = () => {
SearchIndex.SEARCH_INDEX,
].map((index) =>
searchQuery({
- query: searchQueryParam,
+ query: escapeESReservedCharacters(searchQueryParam),
pageNumber: 0,
pageSize: 0,
queryFilter: combinedQueryFilter,
diff --git a/openmetadata-ui/src/main/resources/ui/src/styles/components/size.less b/openmetadata-ui/src/main/resources/ui/src/styles/components/size.less
index 6bb0ee50efd..308af9559e0 100644
--- a/openmetadata-ui/src/main/resources/ui/src/styles/components/size.less
+++ b/openmetadata-ui/src/main/resources/ui/src/styles/components/size.less
@@ -38,6 +38,9 @@
.w-24 {
width: 6rem;
}
+.w-28 {
+ width: 7rem;
+}
.w-32 {
width: 8rem;
}
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/EntityVersionUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/EntityVersionUtils.tsx
index aa59f5769f4..35e1ddab3f2 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/EntityVersionUtils.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/EntityVersionUtils.tsx
@@ -122,7 +122,7 @@ export const getDiffValue = (oldValue: string, newValue: string) => {
return (
{part.value}
@@ -135,7 +135,7 @@ export const getAddedDiffElement = (text: string) => {
{text}
@@ -147,7 +147,7 @@ export const getRemovedDiffElement = (text: string) => {
{text}
@@ -156,7 +156,7 @@ export const getRemovedDiffElement = (text: string) => {
export const getNormalDiffElement = (text: string) => {
return (
-
+
{text}
);
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/SearchUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/SearchUtils.tsx
index 7359031cd06..ed0d6d9de45 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/SearchUtils.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/SearchUtils.tsx
@@ -11,11 +11,20 @@
* limitations under the License.
*/
+import { SearchOutlined } from '@ant-design/icons';
import { Button } from 'antd';
import i18next from 'i18next';
import { isEmpty } from 'lodash';
import React from 'react';
import { Link } from 'react-router-dom';
+import { ReactComponent as IconDashboard } from '../assets/svg/dashboard-grey.svg';
+import { ReactComponent as IconContainer } from '../assets/svg/ic-storage.svg';
+import { ReactComponent as IconStoredProcedure } from '../assets/svg/ic-stored-procedure.svg';
+import { ReactComponent as IconMlModal } from '../assets/svg/mlmodal.svg';
+import { ReactComponent as IconPipeline } from '../assets/svg/pipeline-grey.svg';
+import { ReactComponent as IconTable } from '../assets/svg/table-grey.svg';
+import { ReactComponent as IconTag } from '../assets/svg/tag-grey.svg';
+import { ReactComponent as IconTopic } from '../assets/svg/topic-grey.svg';
import {
Option,
SearchSuggestions,
@@ -28,18 +37,9 @@ import { EntityType, FqnPart } from '../enums/entity.enum';
import { SearchIndex } from '../enums/search.enum';
import { getPartialNameFromTableFQN } from './CommonUtils';
import { serviceTypeLogo } from './ServiceUtils';
+import { escapeESReservedCharacters } from './StringsUtils';
import { getEntityLink } from './TableUtils';
-import { SearchOutlined } from '@ant-design/icons';
-import { ReactComponent as IconDashboard } from '../assets/svg/dashboard-grey.svg';
-import { ReactComponent as IconContainer } from '../assets/svg/ic-storage.svg';
-import { ReactComponent as IconStoredProcedure } from '../assets/svg/ic-stored-procedure.svg';
-import { ReactComponent as IconMlModal } from '../assets/svg/mlmodal.svg';
-import { ReactComponent as IconPipeline } from '../assets/svg/pipeline-grey.svg';
-import { ReactComponent as IconTable } from '../assets/svg/table-grey.svg';
-import { ReactComponent as IconTag } from '../assets/svg/tag-grey.svg';
-import { ReactComponent as IconTopic } from '../assets/svg/topic-grey.svg';
-
export const getSearchAPIQueryParams = (
queryString: string,
from: number,
@@ -53,7 +53,9 @@ export const getSearchAPIQueryParams = (
): Record => {
const start = (from - 1) * size;
- const encodedQueryString = queryString ? encodeURIComponent(queryString) : '';
+ const encodedQueryString = queryString
+ ? escapeESReservedCharacters(queryString)
+ : '';
const query =
encodedQueryString === WILD_CARD_CHAR
? encodedQueryString
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/StringsUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/StringsUtils.ts
index 8eb99c4847c..64b86c44e9e 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/StringsUtils.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/StringsUtils.ts
@@ -186,3 +186,41 @@ export const customServiceComparator = (a: string, b: string): number => {
* @returns - String text replacing + to valid component of a Uniform Resource Identifier (URI).
*/
export const replacePlus = (fqn: string) => fqn.replaceAll('+', ' ');
+
+export const ES_RESERVED_CHARACTERS: Record = {
+ '+': '\\+',
+ '-': '\\-',
+ '=': '\\=',
+ '&&': '\\&&',
+ '||': '\\||',
+ '>': '\\>',
+ '<': '\\<',
+ '!': '\\!',
+ '(': '\\(',
+ ')': '\\)',
+ '{': '\\{',
+ '}': '\\}',
+ '[': '\\[',
+ ']': '\\]',
+ '^': '\\^',
+ '"': '\\"',
+ '~': '\\~',
+ '*': '\\*',
+ '?': '\\?',
+ ':': '\\:',
+ '\\': '\\\\',
+ '/': '\\/',
+};
+
+export const escapeESReservedCharacters = (text?: string) => {
+ const reUnescapedHtml = /[+-=&&||> {
+ return ES_RESERVED_CHARACTERS[char] ?? char;
+ };
+
+ return text && reHasUnescapedHtml.test(text)
+ ? text.replace(reUnescapedHtml, getReplacedChar)
+ : text ?? '';
+};