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 579be93c4fd..c4dc7233e22 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
@@ -630,6 +630,7 @@ const AssetsTabs = forwardRef(
handleSummaryPanelDisplay={setSelectedCard}
id={_id}
key={'assets_' + _id}
+ searchValue={searchValue}
showCheckboxes={Boolean(activeEntity) && permissions.Create}
showTags={false}
source={_source}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.test.tsx
index 739c1eb6678..b3e9f1af63b 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.test.tsx
@@ -29,6 +29,17 @@ jest.mock('../../../../hoc/LimitWrapper', () => {
return jest.fn().mockImplementation(() => <>LimitWrapper>);
});
+jest.mock('../../../../utils/StringsUtils', () => ({
+ ...jest.requireActual('../../../../utils/StringsUtils'),
+ stringToHTML: jest.fn((text) => text),
+}));
+
+jest.mock('../../../../utils/EntityUtils', () => ({
+ ...jest.requireActual('../../../../utils/EntityUtils'),
+ highlightSearchText: jest.fn((text) => text),
+ getTitleCase: jest.fn((text) => text.charAt(0).toUpperCase() + text.slice(1)),
+}));
+
describe('BotListV1', () => {
it('renders the component', () => {
render(
, { wrapper: MemoryRouter });
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.tsx
index 7c6b402f7cb..92e57ac7284 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Bot/BotListV1/BotListV1.component.tsx
@@ -34,8 +34,12 @@ import LimitWrapper from '../../../../hoc/LimitWrapper';
import { useAuth } from '../../../../hooks/authHooks';
import { usePaging } from '../../../../hooks/paging/usePaging';
import { getBots } from '../../../../rest/botsAPI';
-import { getEntityName } from '../../../../utils/EntityUtils';
+import {
+ getEntityName,
+ highlightSearchText,
+} from '../../../../utils/EntityUtils';
import { getSettingPageEntityBreadCrumb } from '../../../../utils/GlobalSettingsUtils';
+import { stringToHTML } from '../../../../utils/StringsUtils';
import { showErrorToast } from '../../../../utils/ToastUtils';
import DeleteWidgetModal from '../../../common/DeleteWidget/DeleteWidgetModal';
import ErrorPlaceHolder from '../../../common/ErrorWithPlaceholder/ErrorPlaceHolder';
@@ -73,6 +77,7 @@ const BotListV1 = ({
const [handleErrorPlaceholder, setHandleErrorPlaceholder] = useState(false);
const [searchedData, setSearchedData] = useState
([]);
+ const [searchTerm, setSearchTerm] = useState('');
const breadcrumbs: TitleBreadcrumbProps['titleLinks'] = useMemo(
() => getSettingPageEntityBreadCrumb(GlobalSettingsMenuCategory.BOTS),
@@ -123,7 +128,7 @@ const BotListV1 = ({
return (
- {name}
+ {stringToHTML(highlightSearchText(name, searchTerm))}
);
},
@@ -134,7 +139,12 @@ const BotListV1 = ({
key: 'description',
render: (_, record) =>
record?.description ? (
-
+
) : (
{t('label.no-entity', {
@@ -205,6 +215,7 @@ const BotListV1 = ({
}, [selectedUser]);
const handleSearch = (text: string) => {
+ setSearchTerm(text);
if (text) {
const normalizeText = lowerCase(text);
const matchedData = botUsers.filter(
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/Ingestion.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/Ingestion.component.tsx
index 0bb51802490..03b4cfeea04 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/Ingestion.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/Ingestion.component.tsx
@@ -193,6 +193,7 @@ const Ingestion: React.FC = ({
isNumberBasedPaging={!isEmpty(searchText)}
pipelineIdToFetchStatus={pipelineIdToFetchStatus}
pipelineType={pipelineType}
+ searchText={searchText}
serviceCategory={serviceCategory}
serviceName={serviceName}
triggerIngestion={triggerIngestion}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.interface.ts b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.interface.ts
index e059b0f8fd2..94514af804d 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.interface.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.interface.ts
@@ -56,4 +56,5 @@ export interface IngestionListTableProps {
record: IngestionPipeline
) => ReactNode;
tableClassName?: string;
+ searchText?: string;
}
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.test.tsx
index 8fb97ca21f4..e2480974b67 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.test.tsx
@@ -98,12 +98,21 @@ jest.mock('../../../../common/NextPrevious/NextPrevious', () =>
);
jest.mock('../../../../../utils/IngestionListTableUtils', () => ({
- renderNameField: jest.fn().mockImplementation(() => nameField
),
+ renderNameField: jest
+ .fn()
+ .mockImplementation(() => () => nameField
),
renderScheduleField: jest
.fn()
.mockImplementation(() => scheduleField
),
renderStatusField: jest.fn().mockImplementation(() => statusField
),
- renderTypeField: jest.fn().mockImplementation(() => typeField
),
+ renderTypeField: jest
+ .fn()
+ .mockImplementation(() => () => typeField
),
+}));
+
+jest.mock('../../../../../utils/EntityUtils', () => ({
+ ...jest.requireActual('../../../../../utils/EntityUtils'),
+ highlightSearchText: jest.fn((text) => text),
}));
describe('Ingestion', () => {
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx
index c0123163103..7ca82cdc2bf 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx
@@ -33,7 +33,10 @@ import { UseAirflowStatusProps } from '../../../../../hooks/useAirflowStatus';
import { useApplicationStore } from '../../../../../hooks/useApplicationStore';
import { deleteIngestionPipelineById } from '../../../../../rest/ingestionPipelineAPI';
import { Transi18next } from '../../../../../utils/CommonUtils';
-import { getEntityName } from '../../../../../utils/EntityUtils';
+import {
+ getEntityName,
+ highlightSearchText,
+} from '../../../../../utils/EntityUtils';
import {
renderNameField,
renderScheduleField,
@@ -81,6 +84,7 @@ function IngestionListTable({
triggerIngestion,
customRenderNameField,
tableClassName,
+ searchText,
}: Readonly) {
const { t } = useTranslation();
const { theme } = useApplicationStore();
@@ -250,7 +254,7 @@ function IngestionListTable({
title: t('label.name'),
dataIndex: 'name',
key: 'name',
- render: customRenderNameField ?? renderNameField,
+ render: customRenderNameField ?? renderNameField(searchText),
},
...(showDescriptionCol
? [
@@ -261,7 +265,7 @@ function IngestionListTable({
render: (description: string) =>
!isUndefined(description) && description.trim() ? (
) : (
@@ -280,7 +284,7 @@ function IngestionListTable({
dataIndex: 'pipelineType',
key: 'pipelineType',
width: 120,
- render: renderTypeField,
+ render: renderTypeField(searchText),
},
]),
{
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.test.tsx
index 0eab37f464e..dc2821bd022 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.test.tsx
@@ -140,10 +140,21 @@ jest.mock('../../../rest/serviceAPI', () => ({
searchService: mockSearchService,
}));
-jest.mock('../../../utils/EntityUtils', () => ({
- getEntityName: jest.fn().mockReturnValue('Glue'),
+jest.mock('../../../utils/StringsUtils', () => ({
+ ...jest.requireActual('../../../utils/StringsUtils'),
+ stringToHTML: jest.fn((text) => text),
}));
+jest.mock('../../../utils/EntityUtils', () => {
+ const actual = jest.requireActual('../../../utils/EntityUtils');
+
+ return {
+ ...actual,
+ getEntityName: jest.fn().mockReturnValue('Glue'),
+ highlightSearchText: jest.fn((text) => text),
+ };
+});
+
jest.mock('../../../utils/PermissionsUtils', () => ({
checkPermission: jest.fn().mockReturnValue(true),
}));
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.tsx
index a6df62acd5f..b199e98c6b3 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Services.tsx
@@ -48,7 +48,7 @@ import { DatabaseServiceSearchSource } from '../../../interface/search.interface
import { ServicesType } from '../../../interface/service.interface';
import { getServices, searchService } from '../../../rest/serviceAPI';
import { getServiceLogo } from '../../../utils/CommonUtils';
-import { getEntityName } from '../../../utils/EntityUtils';
+import { getEntityName, highlightSearchText } from '../../../utils/EntityUtils';
import { checkPermission } from '../../../utils/PermissionsUtils';
import { getAddServicePath } from '../../../utils/RouterUtils';
import {
@@ -56,6 +56,7 @@ import {
getResourceEntityFromServiceCategory,
getServiceTypesFromServiceCategory,
} from '../../../utils/ServiceUtils';
+import { stringToHTML } from '../../../utils/StringsUtils';
import { showErrorToast } from '../../../utils/ToastUtils';
import ErrorPlaceHolder from '../../common/ErrorWithPlaceholder/ErrorPlaceHolder';
import { ListView } from '../../common/ListView/ListView.component';
@@ -314,7 +315,9 @@ const Services = ({ serviceName }: ServicesProps) => {
record.fullyQualifiedName ?? record.name,
serviceName
)}>
- {getEntityName(record)}
+ {stringToHTML(
+ highlightSearchText(getEntityName(record), searchTerm)
+ )}
),
@@ -329,7 +332,7 @@ const Services = ({ serviceName }: ServicesProps) => {