Merge remote-tracking branch 'origin/main'

This commit is contained in:
mohitdeuex 2024-03-20 13:52:46 +05:30
commit d6c7465b19
22 changed files with 155 additions and 172 deletions

View File

@ -465,6 +465,7 @@ export const service = {
description: 'This is a Glue service', description: 'This is a Glue service',
newDescription: 'This is updated Glue service description', newDescription: 'This is updated Glue service description',
Owner: 'Aaron Johnson', Owner: 'Aaron Johnson',
serviceType: 'databaseService',
}; };
export const SERVICE_TYPE = { export const SERVICE_TYPE = {

View File

@ -34,7 +34,7 @@ describe('Login configuration', { tags: 'Settings' }, () => {
cy.get('[data-testid="access-block-time"]').should('have.text', '500'); cy.get('[data-testid="access-block-time"]').should('have.text', '500');
cy.get('[data-testid="jwt-token-expiry-time"]').should( cy.get('[data-testid="jwt-token-expiry-time"]').should(
'have.text', 'have.text',
'5000 Milliseconds' '5000 Seconds'
); );
/* ==== End Cypress Studio ==== */ /* ==== End Cypress Studio ==== */
}); });

View File

@ -34,7 +34,7 @@ describe('Services page should work properly', { tags: 'Integration' }, () => {
); );
interceptURL( interceptURL(
'GET', 'GET',
`/api/v1/services/ingestionPipelines?fields=*&service=${service.name}*`, `/api/v1/services/ingestionPipelines?fields=*&service=${service.name}*&serviceType=${service.serviceType}`,
'ingestionPipelines' 'ingestionPipelines'
); );
cy.login(); cy.login();

View File

@ -249,7 +249,7 @@ const DataProductsDetailsPage = ({
description={t('message.rename-entity', { description={t('message.rename-entity', {
entity: t('label.data-product'), entity: t('label.data-product'),
})} })}
icon={<EditIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={EditIcon}
id="rename-button" id="rename-button"
name={t('label.rename')} name={t('label.rename')}
/> />
@ -271,7 +271,7 @@ const DataProductsDetailsPage = ({
description={t('message.edit-entity-style-description', { description={t('message.edit-entity-style-description', {
entity: t('label.data-product'), entity: t('label.data-product'),
})} })}
icon={<StyleIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={StyleIcon}
id="rename-button" id="rename-button"
name={t('label.style')} name={t('label.style')}
/> />
@ -296,7 +296,7 @@ const DataProductsDetailsPage = ({
entityType: t('label.data-product'), entityType: t('label.data-product'),
} }
)} )}
icon={<DeleteIcon color={DE_ACTIVE_COLOR} width="14px" />} icon={DeleteIcon}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />

View File

@ -28,7 +28,6 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { ReactComponent as IconDelete } from '../../../assets/svg/ic-delete.svg'; import { ReactComponent as IconDelete } from '../../../assets/svg/ic-delete.svg';
import { ReactComponent as IconDropdown } from '../../../assets/svg/menu.svg'; import { ReactComponent as IconDropdown } from '../../../assets/svg/menu.svg';
import { WORKFLOWS_PROFILER_DOCS } from '../../../constants/docs.constants'; import { WORKFLOWS_PROFILER_DOCS } from '../../../constants/docs.constants';
import { DROPDOWN_ICON_SIZE_PROPS } from '../../../constants/ManageButton.constants';
import { mockDatasetData } from '../../../constants/mockTourData.constants'; import { mockDatasetData } from '../../../constants/mockTourData.constants';
import { useTourProvider } from '../../../context/TourProvider/TourProvider'; import { useTourProvider } from '../../../context/TourProvider/TourProvider';
import { EntityType } from '../../../enums/entity.enum'; import { EntityType } from '../../../enums/entity.enum';
@ -157,13 +156,7 @@ const SampleDataTable = ({
description={t('message.delete-entity-type-action-description', { description={t('message.delete-entity-type-action-description', {
entityType: t('label.sample-data'), entityType: t('label.sample-data'),
})} })}
icon={ icon={IconDelete}
<IconDelete
className="m-t-xss"
{...DROPDOWN_ICON_SIZE_PROPS}
name="Delete"
/>
}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />

View File

@ -361,7 +361,7 @@ const DomainDetailsPage = ({
description={t('message.rename-entity', { description={t('message.rename-entity', {
entity: t('label.domain'), entity: t('label.domain'),
})} })}
icon={<EditIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={EditIcon}
id="rename-button" id="rename-button"
name={t('label.rename')} name={t('label.rename')}
/> />
@ -383,7 +383,7 @@ const DomainDetailsPage = ({
description={t('message.edit-entity-style-description', { description={t('message.edit-entity-style-description', {
entity: t('label.domain'), entity: t('label.domain'),
})} })}
icon={<StyleIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={StyleIcon}
id="edit-style-button" id="edit-style-button"
name={t('label.style')} name={t('label.style')}
/> />
@ -408,7 +408,7 @@ const DomainDetailsPage = ({
entityType: t('label.domain'), entityType: t('label.domain'),
} }
)} )}
icon={<DeleteIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={DeleteIcon}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />

View File

@ -54,6 +54,7 @@ import {
Status, Status,
} from '../../../generated/entity/data/glossaryTerm'; } from '../../../generated/entity/data/glossaryTerm';
import { Style } from '../../../generated/type/tagLabel'; import { Style } from '../../../generated/type/tagLabel';
import { useApplicationStore } from '../../../hooks/useApplicationStore';
import { useFqn } from '../../../hooks/useFqn'; import { useFqn } from '../../../hooks/useFqn';
import { import {
exportGlossaryInCSVFormat, exportGlossaryInCSVFormat,
@ -71,8 +72,6 @@ import {
getGlossaryVersionsPath, getGlossaryVersionsPath,
} from '../../../utils/RouterUtils'; } from '../../../utils/RouterUtils';
import { showErrorToast } from '../../../utils/ToastUtils'; import { showErrorToast } from '../../../utils/ToastUtils';
import { useApplicationStore } from '../../../hooks/useApplicationStore';
import { TitleBreadcrumbProps } from '../../common/TitleBreadcrumb/TitleBreadcrumb.interface'; import { TitleBreadcrumbProps } from '../../common/TitleBreadcrumb/TitleBreadcrumb.interface';
import Voting from '../../Entity/Voting/Voting.component'; import Voting from '../../Entity/Voting/Voting.component';
import StyleModal from '../../Modals/StyleModal/StyleModal.component'; import StyleModal from '../../Modals/StyleModal/StyleModal.component';
@ -274,7 +273,7 @@ const GlossaryHeader = ({
description={t('message.export-entity-help', { description={t('message.export-entity-help', {
entity: t('label.glossary-term-lowercase-plural'), entity: t('label.glossary-term-lowercase-plural'),
})} })}
icon={<ExportIcon width="18px" />} icon={ExportIcon}
id="export-button" id="export-button"
name={t('label.export')} name={t('label.export')}
/> />
@ -292,7 +291,7 @@ const GlossaryHeader = ({
description={t('message.import-entity-help', { description={t('message.import-entity-help', {
entity: t('label.glossary-term-lowercase'), entity: t('label.glossary-term-lowercase'),
})} })}
icon={<ImportIcon width="20px" />} icon={ImportIcon}
id="import-button" id="import-button"
name={t('label.import')} name={t('label.import')}
/> />
@ -316,7 +315,7 @@ const GlossaryHeader = ({
? t('label.glossary') ? t('label.glossary')
: t('label.glossary-term'), : t('label.glossary-term'),
})} })}
icon={<EditIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={EditIcon}
id="rename-button" id="rename-button"
name={t('label.rename')} name={t('label.rename')}
/> />
@ -338,7 +337,7 @@ const GlossaryHeader = ({
description={t('message.edit-entity-style-description', { description={t('message.edit-entity-style-description', {
entity: t('label.glossary-term'), entity: t('label.glossary-term'),
})} })}
icon={<StyleIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={StyleIcon}
id="rename-button" id="rename-button"
name={t('label.style')} name={t('label.style')}
/> />
@ -365,13 +364,7 @@ const GlossaryHeader = ({
: t('label.glossary-term'), : t('label.glossary-term'),
} }
)} )}
icon={ icon={IconDelete}
<Icon
className="align-middle"
component={IconDelete}
style={{ fontSize: '16px' }}
/>
}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />

View File

@ -47,10 +47,7 @@ import {
AssetsFilterOptions, AssetsFilterOptions,
ASSET_MENU_KEYS, ASSET_MENU_KEYS,
} from '../../../../constants/Assets.constants'; } from '../../../../constants/Assets.constants';
import { import { ES_UPDATE_DELAY } from '../../../../constants/constants';
DE_ACTIVE_COLOR,
ES_UPDATE_DELAY,
} from '../../../../constants/constants';
import { GLOSSARIES_DOCS } from '../../../../constants/docs.constants'; import { GLOSSARIES_DOCS } from '../../../../constants/docs.constants';
import { ERROR_PLACEHOLDER_TYPE } from '../../../../enums/common.enum'; import { ERROR_PLACEHOLDER_TYPE } from '../../../../enums/common.enum';
import { EntityType } from '../../../../enums/entity.enum'; import { EntityType } from '../../../../enums/entity.enum';
@ -288,6 +285,11 @@ const AssetsTabs = forwardRef(
} }
}; };
const onExploreCardDelete = useCallback((source: SourceType) => {
setAssetToDelete(source);
setShowDeleteModal(true);
}, []);
const handleAssetButtonVisibleChange = (newVisible: boolean) => const handleAssetButtonVisibleChange = (newVisible: boolean) =>
setVisible(newVisible); setVisible(newVisible);
@ -321,7 +323,7 @@ const AssetsTabs = forwardRef(
description={t('message.delete-asset-from-entity-type', { description={t('message.delete-asset-from-entity-type', {
entityType: entityTypeString, entityType: entityTypeString,
})} })}
icon={<DeleteIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={DeleteIcon}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />
@ -335,11 +337,6 @@ const AssetsTabs = forwardRef(
}, },
]; ];
const onExploreCardDelete = useCallback((source: SourceType) => {
setAssetToDelete(source);
setShowDeleteModal(true);
}, []);
const handleCheckboxChange = ( const handleCheckboxChange = (
selected: boolean, selected: boolean,
source: EntityDetailUnion source: EntityDetailUnion
@ -384,6 +381,69 @@ const AssetsTabs = forwardRef(
} }
}; };
const onAssetRemove = useCallback(
async (assetsData: SourceType[]) => {
if (!activeEntity) {
return;
}
setAssetRemoving(true);
try {
const entities = [...(assetsData?.values() ?? [])].map((item) => {
return getEntityReferenceFromEntity(
item as EntityDetailUnion,
(item as EntityDetailUnion).entityType
);
});
switch (type) {
case AssetsOfEntity.DATA_PRODUCT:
await removeAssetsFromDataProduct(
activeEntity.fullyQualifiedName ?? '',
entities
);
break;
case AssetsOfEntity.GLOSSARY:
await removeAssetsFromGlossaryTerm(
activeEntity as GlossaryTerm,
entities
);
break;
case AssetsOfEntity.DOMAIN:
await removeAssetsFromDomain(
activeEntity.fullyQualifiedName ?? '',
entities
);
break;
default:
// Handle other entity types here
break;
}
await new Promise((resolve) => {
setTimeout(() => {
resolve('');
}, ES_UPDATE_DELAY);
});
} catch (err) {
showErrorToast(err as AxiosError);
} finally {
setShowDeleteModal(false);
onRemoveAsset?.();
setAssetRemoving(false);
hideNotification();
setSelectedItems(new Map()); // Reset selected items
}
},
[type, activeEntity, entityFqn]
);
const deleteSelectedItems = useCallback(() => { const deleteSelectedItems = useCallback(() => {
if (selectedItems) { if (selectedItems) {
onAssetRemove(Array.from(selectedItems.values())); onAssetRemove(Array.from(selectedItems.values()));
@ -655,69 +715,6 @@ const AssetsTabs = forwardRef(
); );
}, [assetsHeader, assetListing, selectedCard]); }, [assetsHeader, assetListing, selectedCard]);
const onAssetRemove = useCallback(
async (assetsData: SourceType[]) => {
if (!activeEntity) {
return;
}
setAssetRemoving(true);
try {
const entities = [...(assetsData?.values() ?? [])].map((item) => {
return getEntityReferenceFromEntity(
item as EntityDetailUnion,
(item as EntityDetailUnion).entityType
);
});
switch (type) {
case AssetsOfEntity.DATA_PRODUCT:
await removeAssetsFromDataProduct(
activeEntity.fullyQualifiedName ?? '',
entities
);
break;
case AssetsOfEntity.GLOSSARY:
await removeAssetsFromGlossaryTerm(
activeEntity as GlossaryTerm,
entities
);
break;
case AssetsOfEntity.DOMAIN:
await removeAssetsFromDomain(
activeEntity.fullyQualifiedName ?? '',
entities
);
break;
default:
// Handle other entity types here
break;
}
await new Promise((resolve) => {
setTimeout(() => {
resolve('');
}, ES_UPDATE_DELAY);
});
} catch (err) {
showErrorToast(err as AxiosError);
} finally {
setShowDeleteModal(false);
onRemoveAsset?.();
setAssetRemoving(false);
hideNotification();
setSelectedItems(new Map()); // Reset selected items
}
},
[type, activeEntity, entityFqn]
);
const clearFilters = useCallback(() => { const clearFilters = useCallback(() => {
setQuickFilterQuery(undefined); setQuickFilterQuery(undefined);
setSelectedQuickFilters((pre) => { setSelectedQuickFilters((pre) => {

View File

@ -16,6 +16,7 @@ import {
StopOutlined, StopOutlined,
UserOutlined, UserOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
import Icon from '@ant-design/icons/lib/components/Icon';
import { IChangeEvent } from '@rjsf/core'; import { IChangeEvent } from '@rjsf/core';
import { RJSFSchema } from '@rjsf/utils'; import { RJSFSchema } from '@rjsf/utils';
import validator from '@rjsf/validator-ajv8'; import validator from '@rjsf/validator-ajv8';
@ -40,12 +41,7 @@ import { ReactComponent as IconExternalLink } from '../../../../assets/svg/exter
import { ReactComponent as DeleteIcon } from '../../../../assets/svg/ic-delete.svg'; import { ReactComponent as DeleteIcon } from '../../../../assets/svg/ic-delete.svg';
import { ReactComponent as IconRestore } from '../../../../assets/svg/ic-restore.svg'; import { ReactComponent as IconRestore } from '../../../../assets/svg/ic-restore.svg';
import { ReactComponent as IconDropdown } from '../../../../assets/svg/menu.svg'; import { ReactComponent as IconDropdown } from '../../../../assets/svg/menu.svg';
import { ICON_DIMENSION } from '../../../../constants/constants';
import Icon from '@ant-design/icons/lib/components/Icon';
import {
DE_ACTIVE_COLOR,
ICON_DIMENSION,
} from '../../../../constants/constants';
import { GlobalSettingOptions } from '../../../../constants/GlobalSettings.constants'; import { GlobalSettingOptions } from '../../../../constants/GlobalSettings.constants';
import { ServiceCategory } from '../../../../enums/service.enum'; import { ServiceCategory } from '../../../../enums/service.enum';
import { import {
@ -175,13 +171,7 @@ const AppDetails = () => {
description={t('message.restore-action-description', { description={t('message.restore-action-description', {
entityType: getEntityName(appData), entityType: getEntityName(appData),
})} })}
icon={ icon={IconRestore}
<IconRestore
className="m-t-xss"
name="Restore"
width="18px"
/>
}
id="restore-button" id="restore-button"
name={t('label.restore')} name={t('label.restore')}
/> />
@ -202,11 +192,7 @@ const AppDetails = () => {
description={t('message.disable-app', { description={t('message.disable-app', {
app: getEntityName(appData), app: getEntityName(appData),
})} })}
icon={ icon={StopOutlined as SvgComponent}
<StopOutlined
style={{ fontSize: '18px', color: DE_ACTIVE_COLOR }}
/>
}
id="disable-button" id="disable-button"
name={t('label.disable')} name={t('label.disable')}
/> />
@ -225,7 +211,7 @@ const AppDetails = () => {
description={t('message.uninstall-app', { description={t('message.uninstall-app', {
app: getEntityName(appData), app: getEntityName(appData),
})} })}
icon={<DeleteIcon color={DE_ACTIVE_COLOR} width="18px" />} icon={DeleteIcon}
id="uninstall-button" id="uninstall-button"
name={t('label.uninstall')} name={t('label.uninstall')}
/> />

View File

@ -51,7 +51,6 @@ import {
GlobalSettingOptions, GlobalSettingOptions,
GlobalSettingsMenuCategory, GlobalSettingsMenuCategory,
} from '../../../../constants/GlobalSettings.constants'; } from '../../../../constants/GlobalSettings.constants';
import { DROPDOWN_ICON_SIZE_PROPS } from '../../../../constants/ManageButton.constants';
import { usePermissionProvider } from '../../../../context/PermissionProvider/PermissionProvider'; import { usePermissionProvider } from '../../../../context/PermissionProvider/PermissionProvider';
import { ResourceEntity } from '../../../../context/PermissionProvider/PermissionProvider.interface'; import { ResourceEntity } from '../../../../context/PermissionProvider/PermissionProvider.interface';
import { ERROR_PLACEHOLDER_TYPE } from '../../../../enums/common.enum'; import { ERROR_PLACEHOLDER_TYPE } from '../../../../enums/common.enum';
@ -464,13 +463,6 @@ const TeamDetailsV1 = ({
return t('message.are-you-sure-want-to-text', { text }); return t('message.are-you-sure-want-to-text', { text });
}; };
const restoreIcon = useMemo(
() => (
<IconRestore {...DROPDOWN_ICON_SIZE_PROPS} name={t('label.restore')} />
),
[currentTeam.isJoinable]
);
const handleTeamExportClick = useCallback(async () => { const handleTeamExportClick = useCallback(async () => {
if (currentTeam?.name) { if (currentTeam?.name) {
showModal({ showModal({
@ -499,7 +491,7 @@ const TeamDetailsV1 = ({
description={t('message.export-entity-help', { description={t('message.export-entity-help', {
entity: t('label.team-lowercase'), entity: t('label.team-lowercase'),
})} })}
icon={<ExportIcon width="18px" />} icon={ExportIcon}
id="export" id="export"
name={t('label.export')} name={t('label.export')}
/> />
@ -517,7 +509,7 @@ const TeamDetailsV1 = ({
description={t('message.import-entity-help', { description={t('message.import-entity-help', {
entity: t('label.team-lowercase'), entity: t('label.team-lowercase'),
})} })}
icon={<ImportIcon width="20px" />} icon={ImportIcon}
id="import-button" id="import-button"
name={t('label.import')} name={t('label.import')}
/> />
@ -539,7 +531,7 @@ const TeamDetailsV1 = ({
label: ( label: (
<ManageButtonItemLabel <ManageButtonItemLabel
description={t('message.restore-deleted-team')} description={t('message.restore-deleted-team')}
icon={restoreIcon} icon={IconRestore}
id="restore-team-dropdown" id="restore-team-dropdown"
name={t('label.restore-entity', { name={t('label.restore-entity', {
entity: t('label.team'), entity: t('label.team'),
@ -558,7 +550,7 @@ const TeamDetailsV1 = ({
label: ( label: (
<ManageButtonItemLabel <ManageButtonItemLabel
description={t('message.access-to-collaborate')} description={t('message.access-to-collaborate')}
icon={<IconOpenLock {...DROPDOWN_ICON_SIZE_PROPS} />} icon={IconOpenLock}
id="open-group-dropdown" id="open-group-dropdown"
name={ name={
<Row> <Row>

View File

@ -248,7 +248,7 @@ export const UserTab = ({
description={t('message.export-entity-help', { description={t('message.export-entity-help', {
entity: t('label.user-lowercase'), entity: t('label.user-lowercase'),
})} })}
icon={<ExportIcon width="18px" />} icon={ExportIcon}
id="export" id="export"
name={t('label.export')} name={t('label.export')}
/> />
@ -265,7 +265,7 @@ export const UserTab = ({
description={t('message.import-entity-help', { description={t('message.import-entity-help', {
entity: t('label.team-lowercase'), entity: t('label.team-lowercase'),
})} })}
icon={<ImportIcon width="20px" />} icon={ImportIcon}
id="import-button" id="import-button"
name={t('label.import')} name={t('label.import')}
/> />

View File

@ -25,7 +25,6 @@ import { ReactComponent as IconRestore } from '../../../../assets/svg/ic-restore
import { ReactComponent as IconSetting } from '../../../../assets/svg/ic-settings-gray.svg'; import { ReactComponent as IconSetting } from '../../../../assets/svg/ic-settings-gray.svg';
import { ReactComponent as IconDropdown } from '../../../../assets/svg/menu.svg'; import { ReactComponent as IconDropdown } from '../../../../assets/svg/menu.svg';
import { NO_PERMISSION_FOR_ACTION } from '../../../../constants/HelperTextUtil'; import { NO_PERMISSION_FOR_ACTION } from '../../../../constants/HelperTextUtil';
import { DROPDOWN_ICON_SIZE_PROPS } from '../../../../constants/ManageButton.constants';
import { EntityType } from '../../../../enums/entity.enum'; import { EntityType } from '../../../../enums/entity.enum';
import { ANNOUNCEMENT_ENTITIES } from '../../../../utils/AnnouncementsUtils'; import { ANNOUNCEMENT_ENTITIES } from '../../../../utils/AnnouncementsUtils';
import { showErrorToast } from '../../../../utils/ToastUtils'; import { showErrorToast } from '../../../../utils/ToastUtils';
@ -127,13 +126,7 @@ const ManageButton: FC<ManageButtonProps> = ({
description={t('message.restore-action-description', { description={t('message.restore-action-description', {
entityType, entityType,
})} })}
icon={ icon={IconRestore}
<IconRestore
className="m-t-xss"
name="Restore"
{...DROPDOWN_ICON_SIZE_PROPS}
/>
}
id="restore-button" id="restore-button"
name={t('label.restore')} name={t('label.restore')}
/> />
@ -156,13 +149,7 @@ const ManageButton: FC<ManageButtonProps> = ({
label: ( label: (
<ManageButtonItemLabel <ManageButtonItemLabel
description={t('message.announcement-action-description')} description={t('message.announcement-action-description')}
icon={ icon={IconAnnouncementsBlack}
<IconAnnouncementsBlack
className="m-t-xss"
name="announcement"
{...DROPDOWN_ICON_SIZE_PROPS}
/>
}
id="announcement-button" id="announcement-button"
name={t('label.announcement-plural')} name={t('label.announcement-plural')}
/> />
@ -184,7 +171,7 @@ const ManageButton: FC<ManageButtonProps> = ({
description={t('message.update-displayName-entity', { description={t('message.update-displayName-entity', {
entity: entityName, entity: entityName,
})} })}
icon={<EditIcon width="18px" />} icon={EditIcon}
id="rename-button" id="rename-button"
name={t('label.rename')} name={t('label.rename')}
/> />
@ -207,13 +194,7 @@ const ManageButton: FC<ManageButtonProps> = ({
deleteButtonDescription ?? deleteButtonDescription ??
t('message.update-profiler-settings') t('message.update-profiler-settings')
} }
icon={ icon={IconSetting}
<IconSetting
className="m-t-xss"
{...DROPDOWN_ICON_SIZE_PROPS}
name="Profiler Settings"
/>
}
id="profiler-setting-button" id="profiler-setting-button"
name={t('label.profiler-setting-plural')} name={t('label.profiler-setting-plural')}
/> />
@ -237,13 +218,7 @@ const ManageButton: FC<ManageButtonProps> = ({
entityType, entityType,
}) })
} }
icon={ icon={IconDelete}
<IconDelete
className="m-t-xss"
{...DROPDOWN_ICON_SIZE_PROPS}
name="Delete"
/>
}
id="delete-button" id="delete-button"
name={t('label.delete')} name={t('label.delete')}
/> />

View File

@ -10,6 +10,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
import { Col, Row, Typography } from 'antd'; import { Col, Row, Typography } from 'antd';
import React from 'react'; import React from 'react';
import { MangeButtonItemLabelProps } from './ManageButtonItemLabel.interface'; import { MangeButtonItemLabelProps } from './ManageButtonItemLabel.interface';
@ -21,10 +22,12 @@ export const ManageButtonItemLabel = ({
description, description,
id, id,
}: MangeButtonItemLabelProps) => { }: MangeButtonItemLabelProps) => {
const Icon = icon;
return ( return (
<Row className="cursor-pointer" data-testid={id} onClick={onClick}> <Row className="cursor-pointer" data-testid={id} onClick={onClick}>
<Col className="self-center" data-testid={`${id}-icon`} span={3}> <Col className="self-center" data-testid={`${id}-icon`} span={3}>
{icon} <Icon width="18px" />
</Col> </Col>
<Col <Col
className="text-left" className="text-left"

View File

@ -12,12 +12,14 @@
*/ */
import { render, screen } from '@testing-library/react'; import { render, screen } from '@testing-library/react';
import React from 'react'; import React from 'react';
import { act } from 'react-test-renderer';
import { ReactComponent as Icon } from '../../../assets/svg/teams-grey.svg';
import { ManageButtonItemLabel } from './ManageButtonContentItem.component'; import { ManageButtonItemLabel } from './ManageButtonContentItem.component';
import { MangeButtonItemLabelProps } from './ManageButtonItemLabel.interface'; import { MangeButtonItemLabelProps } from './ManageButtonItemLabel.interface';
const mockProps: MangeButtonItemLabelProps = { const mockProps: MangeButtonItemLabelProps = {
name: 'export', name: 'export',
icon: null, icon: Icon,
description: 'description', description: 'description',
id: 'export', id: 'export',
}; };
@ -40,4 +42,15 @@ describe('ManageButtonContentItem component', () => {
await screen.findByTestId(`${mockProps.id}-description`) await screen.findByTestId(`${mockProps.id}-description`)
).toBeInTheDocument(); ).toBeInTheDocument();
}); });
it('should call onClick for clicking on item', async () => {
const mockClick = jest.fn();
render(<ManageButtonItemLabel {...mockProps} onClick={mockClick} />);
await act(async () => {
screen.getByTestId(`${mockProps.id}`).click();
});
expect(mockClick).toHaveBeenCalled();
});
}); });

View File

@ -15,7 +15,7 @@ import { ReactNode } from 'react';
export interface MangeButtonItemLabelProps { export interface MangeButtonItemLabelProps {
name: ReactNode; name: ReactNode;
onClick?: React.MouseEventHandler<HTMLDivElement>; onClick?: React.MouseEventHandler<HTMLDivElement>;
icon: ReactNode; icon: SvgComponent;
description: string; description: string;
id: string; id: string;
} }

View File

@ -77,6 +77,7 @@ import {
sortTagsCaseInsensitive, sortTagsCaseInsensitive,
} from '../../utils/CommonUtils'; } from '../../utils/CommonUtils';
import { getQueryFilterForDatabase } from '../../utils/Database/Database.util'; import { getQueryFilterForDatabase } from '../../utils/Database/Database.util';
import entityUtilClassBase from '../../utils/EntityUtilClassBase';
import { getEntityName } from '../../utils/EntityUtils'; import { getEntityName } from '../../utils/EntityUtils';
import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils'; import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils';
import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils';
@ -118,6 +119,11 @@ const DatabaseDetails: FunctionComponent = () => {
const [updateProfilerSetting, setUpdateProfilerSetting] = const [updateProfilerSetting, setUpdateProfilerSetting] =
useState<boolean>(false); useState<boolean>(false);
const extraDropdownContent = entityUtilClassBase.getManageExtraOptions(
EntityType.DATABASE,
decodedDatabaseFQN
);
const history = useHistory(); const history = useHistory();
const isMounting = useRef(true); const isMounting = useRef(true);
@ -645,6 +651,7 @@ const DatabaseDetails: FunctionComponent = () => {
afterDomainUpdateAction={afterDomainUpdateAction} afterDomainUpdateAction={afterDomainUpdateAction}
dataAsset={database} dataAsset={database}
entityType={EntityType.DATABASE} entityType={EntityType.DATABASE}
extraDropdownContent={extraDropdownContent}
openTaskCount={feedCount.openTaskCount} openTaskCount={feedCount.openTaskCount}
permissions={databasePermission} permissions={databasePermission}
onDisplayNameUpdate={handleUpdateDisplayName} onDisplayNameUpdate={handleUpdateDisplayName}

View File

@ -79,6 +79,7 @@ import {
getFeedCounts, getFeedCounts,
sortTagsCaseInsensitive, sortTagsCaseInsensitive,
} from '../../utils/CommonUtils'; } from '../../utils/CommonUtils';
import entityUtilClassBase from '../../utils/EntityUtilClassBase';
import { getEntityName } from '../../utils/EntityUtils'; import { getEntityName } from '../../utils/EntityUtils';
import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils'; import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils';
import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils';
@ -126,6 +127,11 @@ const DatabaseSchemaPage: FunctionComponent = () => {
const [updateProfilerSetting, setUpdateProfilerSetting] = const [updateProfilerSetting, setUpdateProfilerSetting] =
useState<boolean>(false); useState<boolean>(false);
const extraDropdownContent = entityUtilClassBase.getManageExtraOptions(
EntityType.DATABASE_SCHEMA,
decodedDatabaseSchemaFQN
);
const handleShowDeletedTables = (value: boolean) => { const handleShowDeletedTables = (value: boolean) => {
setShowDeletedTables(value); setShowDeletedTables(value);
setCurrentTablesPage(INITIAL_PAGING_VALUE); setCurrentTablesPage(INITIAL_PAGING_VALUE);
@ -717,6 +723,7 @@ const DatabaseSchemaPage: FunctionComponent = () => {
afterDomainUpdateAction={afterDomainUpdateAction} afterDomainUpdateAction={afterDomainUpdateAction}
dataAsset={databaseSchema} dataAsset={databaseSchema}
entityType={EntityType.DATABASE_SCHEMA} entityType={EntityType.DATABASE_SCHEMA}
extraDropdownContent={extraDropdownContent}
permissions={databaseSchemaPermission} permissions={databaseSchemaPermission}
onDisplayNameUpdate={handleUpdateDisplayName} onDisplayNameUpdate={handleUpdateDisplayName}
onOwnerUpdate={handleUpdateOwner} onOwnerUpdate={handleUpdateOwner}

View File

@ -25,7 +25,6 @@ import IconGoogle from '../../assets/img/icon-google.png';
import IconOkta from '../../assets/img/icon-okta.png'; import IconOkta from '../../assets/img/icon-okta.png';
import loginBG from '../../assets/img/login-bg.png'; import loginBG from '../../assets/img/login-bg.png';
import { ReactComponent as IconFailBadge } from '../../assets/svg/fail-badge.svg'; import { ReactComponent as IconFailBadge } from '../../assets/svg/fail-badge.svg';
import { useBasicAuth } from '../../components/Auth/AuthProviders/BasicAuthProvider'; import { useBasicAuth } from '../../components/Auth/AuthProviders/BasicAuthProvider';
import BrandImage from '../../components/common/BrandImage/BrandImage'; import BrandImage from '../../components/common/BrandImage/BrandImage';
import Loader from '../../components/common/Loader/Loader'; import Loader from '../../components/common/Loader/Loader';
@ -308,7 +307,7 @@ const SignInPage = () => {
<Col className="relative" span={16}> <Col className="relative" span={16}>
<div className="absolute inset-0"> <div className="absolute inset-0">
<img <img
alt="bg-image" alt="Login Background"
className="w-full h-full" className="w-full h-full"
data-testid="bg-image" data-testid="bg-image"
src={loginBG} src={loginBG}

View File

@ -266,6 +266,7 @@ const ServiceDetailsPage: FunctionComponent = () => {
const response = await getIngestionPipelines({ const response = await getIngestionPipelines({
arrQueryFields: ['owner', 'pipelineStatuses'], arrQueryFields: ['owner', 'pipelineStatuses'],
serviceFilter: decodedServiceFQN, serviceFilter: decodedServiceFQN,
serviceType: getEntityTypeFromServiceCategory(serviceCategory),
paging, paging,
pipelineType: [ pipelineType: [
PipelineType.Metadata, PipelineType.Metadata,

View File

@ -91,6 +91,7 @@ import {
} from '../../utils/CommonUtils'; } from '../../utils/CommonUtils';
import { defaultFields } from '../../utils/DatasetDetailsUtils'; import { defaultFields } from '../../utils/DatasetDetailsUtils';
import EntityLink from '../../utils/EntityLink'; import EntityLink from '../../utils/EntityLink';
import entityUtilClassBase from '../../utils/EntityUtilClassBase';
import { getEntityName } from '../../utils/EntityUtils'; import { getEntityName } from '../../utils/EntityUtils';
import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils'; import { DEFAULT_ENTITY_PERMISSION } from '../../utils/PermissionsUtils';
import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils';
@ -126,6 +127,11 @@ const TableDetailsPageV1: React.FC = () => {
DEFAULT_ENTITY_PERMISSION DEFAULT_ENTITY_PERMISSION
); );
const extraDropdownContent = entityUtilClassBase.getManageExtraOptions(
EntityType.TABLE,
datasetFQN
);
const viewUsagePermission = useMemo( const viewUsagePermission = useMemo(
() => tablePermissions.ViewAll || tablePermissions.ViewUsage, () => tablePermissions.ViewAll || tablePermissions.ViewUsage,
[tablePermissions] [tablePermissions]
@ -1025,6 +1031,7 @@ const TableDetailsPageV1: React.FC = () => {
afterDomainUpdateAction={updateTableDetailsState} afterDomainUpdateAction={updateTableDetailsState}
dataAsset={tableDetails} dataAsset={tableDetails}
entityType={EntityType.TABLE} entityType={EntityType.TABLE}
extraDropdownContent={extraDropdownContent}
openTaskCount={feedCount.openTaskCount} openTaskCount={feedCount.openTaskCount}
permissions={tablePermissions} permissions={tablePermissions}
onDisplayNameUpdate={handleDisplayNameUpdate} onDisplayNameUpdate={handleDisplayNameUpdate}

View File

@ -20,7 +20,7 @@ import { ReactComponent as IconDisableTag } from '../assets/svg/disable-tag.svg'
import { ReactComponent as EditIcon } from '../assets/svg/edit-new.svg'; import { ReactComponent as EditIcon } from '../assets/svg/edit-new.svg';
import { ManageButtonItemLabel } from '../components/common/ManageButtonContentItem/ManageButtonContentItem.component'; import { ManageButtonItemLabel } from '../components/common/ManageButtonContentItem/ManageButtonContentItem.component';
import RichTextEditorPreviewer from '../components/common/RichTextEditor/RichTextEditorPreviewer'; import RichTextEditorPreviewer from '../components/common/RichTextEditor/RichTextEditorPreviewer';
import { DE_ACTIVE_COLOR, NO_DATA_PLACEHOLDER } from '../constants/constants'; import { NO_DATA_PLACEHOLDER } from '../constants/constants';
import { OperationPermission } from '../context/PermissionProvider/PermissionProvider.interface'; import { OperationPermission } from '../context/PermissionProvider/PermissionProvider.interface';
import { ProviderType } from '../generated/entity/bot'; import { ProviderType } from '../generated/entity/bot';
import { Tag } from '../generated/entity/classification/tag'; import { Tag } from '../generated/entity/classification/tag';
@ -228,7 +228,7 @@ export const getClassificationExtraDropdownContent = (
? t('message.enable-classification-description') ? t('message.enable-classification-description')
: t('message.disable-classification-description') : t('message.disable-classification-description')
} }
icon={<IconDisableTag color={DE_ACTIVE_COLOR} width="18px" />} icon={IconDisableTag}
id="enable-disable" id="enable-disable"
name={ name={
isClassificationDisabled isClassificationDisabled

View File

@ -10,6 +10,8 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { ItemType } from 'antd/lib/menu/hooks/useItems';
import DataProductsPage from '../components/DataProducts/DataProductsPage/DataProductsPage.component'; import DataProductsPage from '../components/DataProducts/DataProductsPage/DataProductsPage.component';
import { import {
getEditWebhookPath, getEditWebhookPath,
@ -281,6 +283,13 @@ class EntityUtilClassBase {
} }
} }
} }
public getManageExtraOptions(
_entityType?: EntityType,
_fqn?: string
): ItemType[] {
return [];
}
} }
const entityUtilClassBase = new EntityUtilClassBase(); const entityUtilClassBase = new EntityUtilClassBase();