diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Database/DatabaseSchema/DatabaseSchemaTable/DatabaseSchemaTable.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Database/DatabaseSchema/DatabaseSchemaTable/DatabaseSchemaTable.tsx index 090922eaa95..e26588716ea 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Database/DatabaseSchema/DatabaseSchemaTable/DatabaseSchemaTable.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Database/DatabaseSchema/DatabaseSchemaTable/DatabaseSchemaTable.tsx @@ -334,7 +334,7 @@ export const DatabaseSchemaTable = ({ dataSource={schemas} defaultVisibleColumns={DEFAULT_DATABASE_SCHEMA_VISIBLE_COLUMNS} extraTableFilters={getBulkEditButton( - permissions.databaseSchema.EditAll, + permissions.databaseSchema.EditAll && !isDatabaseDeleted, handleEditTable )} loading={isLoading} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Database/SchemaTable/SchemaTable.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Database/SchemaTable/SchemaTable.component.tsx index bfec8b08401..9284c45e5e6 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Database/SchemaTable/SchemaTable.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Database/SchemaTable/SchemaTable.component.tsx @@ -625,7 +625,7 @@ const SchemaTable = () => { defaultVisibleColumns={DEFAULT_SCHEMA_TABLE_VISIBLE_COLUMNS} expandable={expandableConfig} extraTableFilters={getBulkEditButton( - tablePermissions.EditAll, + tablePermissions.EditAll && !deleted, handleEditTable )} locale={{ diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/APICollectionPage/APICollectionPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/APICollectionPage/APICollectionPage.tsx index 2bf1fcb2573..231adfa6101 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/APICollectionPage/APICollectionPage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/APICollectionPage/APICollectionPage.tsx @@ -106,9 +106,10 @@ const APICollectionPage: FunctionComponent = () => { entityUtilClassBase.getManageExtraOptions( EntityType.API_COLLECTION, decodedAPICollectionFQN, - apiCollectionPermission + apiCollectionPermission, + apiCollection?.deleted ?? false ), - [apiCollectionPermission, decodedAPICollectionFQN] + [apiCollectionPermission, decodedAPICollectionFQN, apiCollection?.deleted] ); const { currentVersion, apiCollectionId } = useMemo( diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseDetailsPage/DatabaseDetailsPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseDetailsPage/DatabaseDetailsPage.tsx index 896d164cb8f..61a20cb14f7 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseDetailsPage/DatabaseDetailsPage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseDetailsPage/DatabaseDetailsPage.tsx @@ -128,9 +128,10 @@ const DatabaseDetails: FunctionComponent = () => { entityUtilClassBase.getManageExtraOptions( EntityType.DATABASE, decodedDatabaseFQN, - databasePermission + databasePermission, + database?.deleted ?? false ), - [decodedDatabaseFQN, databasePermission] + [decodedDatabaseFQN, databasePermission, database?.deleted] ); const fetchDatabasePermission = async () => { setIsLoading(true); diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/DatabaseSchemaPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/DatabaseSchemaPage.component.tsx index 5b9667bf290..872138de871 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/DatabaseSchemaPage.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/DatabaseSchemaPage.component.tsx @@ -113,9 +113,14 @@ const DatabaseSchemaPage: FunctionComponent = () => { entityUtilClassBase.getManageExtraOptions( EntityType.DATABASE_SCHEMA, decodedDatabaseSchemaFQN, - databaseSchemaPermission + databaseSchemaPermission, + databaseSchema?.deleted ?? false ), - [databaseSchemaPermission, decodedDatabaseSchemaFQN] + [ + databaseSchemaPermission, + decodedDatabaseSchemaFQN, + databaseSchema?.deleted, + ] ); const { version: currentVersion, id: databaseSchemaId = '' } = useMemo( diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/SchemaTablesTab.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/SchemaTablesTab.tsx index 1924f3bd272..ad385acaa8b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/SchemaTablesTab.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/DatabaseSchemaPage/SchemaTablesTab.tsx @@ -261,7 +261,10 @@ function SchemaTablesTab({ - {getBulkEditButton(permissions.table.EditAll, handleEditTable)} + {getBulkEditButton( + permissions.table.EditAll && !databaseSchemaDetails.deleted, + handleEditTable + )} ) } diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceDetailsPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceDetailsPage.tsx index 864de194f17..491abd44573 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceDetailsPage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceDetailsPage.tsx @@ -264,9 +264,15 @@ const ServiceDetailsPage: FunctionComponent = () => { ? EntityType.DATABASE_SERVICE : EntityType.ALL, decodedServiceFQN, - servicePermission + servicePermission, + serviceDetails?.deleted ?? false ), - [servicePermission, decodedServiceFQN, serviceCategory] + [ + servicePermission, + decodedServiceFQN, + serviceCategory, + serviceDetails?.deleted, + ] ); const handleShowDeleted = useCallback( diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceMainTabContent.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceMainTabContent.tsx index 45a5bc6dbf5..3be50910031 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceMainTabContent.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/ServiceDetailsPage/ServiceMainTabContent.tsx @@ -286,7 +286,8 @@ function ServiceMainTabContent({ {entityType === EntityType.DATABASE_SERVICE && getBulkEditButton( - servicePermission.EditAll, + servicePermission.EditAll && + !serviceDetails.deleted, handleEditTable )} diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx index d02e0303b17..edc24fdfcea 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/TableDetailsPageV1/TableDetailsPageV1.tsx @@ -157,9 +157,10 @@ const TableDetailsPageV1: React.FC = () => { entityUtilClassBase.getManageExtraOptions( EntityType.TABLE, tableFqn, - tablePermissions + tablePermissions, + tableDetails?.deleted ?? false ), - [tablePermissions, tableFqn] + [tablePermissions, tableFqn, tableDetails?.deleted] ); const { viewUsagePermission, viewTestCasePermission } = useMemo( diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.test.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.test.tsx index df918533885..dace27c6198 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.test.tsx @@ -177,7 +177,11 @@ describe('Database Util', () => { EditAll: true, } as OperationPermission; - const result = ExtraDatabaseDropdownOptions('databaseFqn', permission); + const result = ExtraDatabaseDropdownOptions( + 'databaseFqn', + permission, + false + ); expect(result).toHaveLength(1); expect(result[0].key).toBe('import-button'); @@ -189,7 +193,11 @@ describe('Database Util', () => { EditAll: false, } as OperationPermission; - const result = ExtraDatabaseDropdownOptions('databaseFqn', permission); + const result = ExtraDatabaseDropdownOptions( + 'databaseFqn', + permission, + false + ); expect(result).toHaveLength(1); expect(result[0].key).toBe('export-button'); @@ -201,7 +209,11 @@ describe('Database Util', () => { EditAll: true, } as OperationPermission; - const result = ExtraDatabaseDropdownOptions('databaseFqn', permission); + const result = ExtraDatabaseDropdownOptions( + 'databaseFqn', + permission, + false + ); expect(result).toHaveLength(2); expect(result[0].key).toBe('import-button'); @@ -213,7 +225,26 @@ describe('Database Util', () => { ViewAll: false, EditAll: false, } as OperationPermission; - const result = ExtraDatabaseDropdownOptions('databaseFqn', permission); + const result = ExtraDatabaseDropdownOptions( + 'databaseFqn', + permission, + false + ); + + expect(result).toHaveLength(0); + expect(result).toStrictEqual([]); + }); + + it('should not render any buttons when the entity is deleted', () => { + const permission = { + ViewAll: true, + EditAll: true, + } as OperationPermission; + const result = ExtraDatabaseDropdownOptions( + 'databaseFqn', + permission, + true + ); expect(result).toHaveLength(0); expect(result).toStrictEqual([]); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.tsx index 9c6a6cab425..8ce661e0117 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/Database/Database.util.tsx @@ -222,7 +222,8 @@ export const getDatabaseWidgetsFromKey = (widgetConfig: WidgetConfig) => { export const ExtraDatabaseDropdownOptions = ( fqn: string, - permission: OperationPermission + permission: OperationPermission, + deleted: boolean ) => { const { showModal } = useEntityExportModalProvider(); const history = useHistory(); @@ -230,7 +231,7 @@ export const ExtraDatabaseDropdownOptions = ( const { ViewAll, EditAll } = permission; return [ - ...(EditAll + ...(EditAll && !deleted ? [ { label: ( @@ -252,7 +253,7 @@ export const ExtraDatabaseDropdownOptions = ( }, ] : []), - ...(ViewAll + ...(ViewAll && !deleted ? [ { label: ( diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.test.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.test.tsx index df5be64dbc2..7d6c02e3f3b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.test.tsx @@ -43,7 +43,8 @@ describe('ExtraDatabaseSchemaDropdownOptions', () => { const result = ExtraDatabaseSchemaDropdownOptions( 'databaseSchemaFqn', - permission + permission, + false ); expect(result).toHaveLength(1); @@ -58,7 +59,8 @@ describe('ExtraDatabaseSchemaDropdownOptions', () => { const result = ExtraDatabaseSchemaDropdownOptions( 'databaseSchemaFqn', - permission + permission, + false ); expect(result).toHaveLength(1); @@ -73,7 +75,8 @@ describe('ExtraDatabaseSchemaDropdownOptions', () => { const result = ExtraDatabaseSchemaDropdownOptions( 'databaseSchemaFqn', - permission + permission, + false ); expect(result).toHaveLength(2); @@ -88,7 +91,23 @@ describe('ExtraDatabaseSchemaDropdownOptions', () => { } as OperationPermission; const result = ExtraDatabaseSchemaDropdownOptions( 'databaseSchemaFqn', - permission + permission, + false + ); + + expect(result).toHaveLength(0); + expect(result).toStrictEqual([]); + }); + + it('should not render any buttons when the entity is deleted', () => { + const permission = { + ViewAll: true, + EditAll: true, + } as OperationPermission; + const result = ExtraDatabaseSchemaDropdownOptions( + 'databaseSchemaFqn', + permission, + true ); expect(result).toHaveLength(0); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.tsx index f34dbcfe134..89ba6d79867 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseSchemaDetailsUtils.tsx @@ -124,7 +124,8 @@ export const getDataBaseSchemaPageBaseTabs = ({ export const ExtraDatabaseSchemaDropdownOptions = ( fqn: string, - permission: OperationPermission + permission: OperationPermission, + deleted: boolean ) => { const { showModal } = useEntityExportModalProvider(); const history = useHistory(); @@ -132,7 +133,7 @@ export const ExtraDatabaseSchemaDropdownOptions = ( const { ViewAll, EditAll } = permission; return [ - ...(EditAll + ...(EditAll && !deleted ? [ { label: ( @@ -156,7 +157,7 @@ export const ExtraDatabaseSchemaDropdownOptions = ( }, ] : []), - ...(ViewAll + ...(ViewAll && !deleted ? [ { label: ( diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.test.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.test.tsx index 5d59be530ae..58a99e5b0d0 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.test.tsx @@ -43,7 +43,8 @@ describe('ExtraDatabaseServiceDropdownOptions', () => { const result = ExtraDatabaseServiceDropdownOptions( 'databaseServiceFqn', - permission + permission, + false ); expect(result).toHaveLength(1); @@ -58,7 +59,8 @@ describe('ExtraDatabaseServiceDropdownOptions', () => { const result = ExtraDatabaseServiceDropdownOptions( 'databaseServiceFqn', - permission + permission, + false ); expect(result).toHaveLength(1); @@ -73,7 +75,8 @@ describe('ExtraDatabaseServiceDropdownOptions', () => { const result = ExtraDatabaseServiceDropdownOptions( 'databaseServiceFqn', - permission + permission, + false ); expect(result).toHaveLength(2); @@ -88,7 +91,23 @@ describe('ExtraDatabaseServiceDropdownOptions', () => { } as OperationPermission; const result = ExtraDatabaseServiceDropdownOptions( 'databaseServiceFqn', - permission + permission, + false + ); + + expect(result).toHaveLength(0); + expect(result).toStrictEqual([]); + }); + + it('should not render any buttons when the entity is deleted', () => { + const permission = { + ViewAll: true, + EditAll: true, + } as OperationPermission; + const result = ExtraDatabaseServiceDropdownOptions( + 'databaseServiceFqn', + permission, + true ); expect(result).toHaveLength(0); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.tsx index 11b080b1641..5781cfcbdb8 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DatabaseServiceUtils.tsx @@ -307,7 +307,8 @@ export const getDatabaseConfig = (type: DatabaseServiceType) => { export const ExtraDatabaseServiceDropdownOptions = ( fqn: string, - permission: OperationPermission + permission: OperationPermission, + deleted: boolean ) => { const { showModal } = useEntityExportModalProvider(); const history = useHistory(); @@ -315,7 +316,7 @@ export const ExtraDatabaseServiceDropdownOptions = ( const { ViewAll, EditAll } = permission; return [ - ...(EditAll + ...(EditAll && !deleted ? [ { label: ( @@ -339,7 +340,7 @@ export const ExtraDatabaseServiceDropdownOptions = ( }, ] : []), - ...(ViewAll + ...(ViewAll && !deleted ? [ { label: ( diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/EntityUtilClassBase.ts b/openmetadata-ui/src/main/resources/ui/src/utils/EntityUtilClassBase.ts index 1f267c873cf..174b3504f5a 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/EntityUtilClassBase.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/EntityUtilClassBase.ts @@ -375,20 +375,35 @@ class EntityUtilClassBase { public getManageExtraOptions( _entityType: EntityType, _fqn: string, - _permission: OperationPermission + _permission: OperationPermission, + _deleted: boolean ): ItemType[] { // We are encoding here since we are getting the decoded fqn from the OSS code const encodedFqn = getEncodedFqn(_fqn); switch (_entityType) { case EntityType.TABLE: - return [...ExtraTableDropdownOptions(encodedFqn, _permission)]; + return [ + ...ExtraTableDropdownOptions(encodedFqn, _permission, _deleted), + ]; case EntityType.DATABASE: - return [...ExtraDatabaseDropdownOptions(encodedFqn, _permission)]; + return [ + ...ExtraDatabaseDropdownOptions(encodedFqn, _permission, _deleted), + ]; case EntityType.DATABASE_SCHEMA: - return [...ExtraDatabaseSchemaDropdownOptions(encodedFqn, _permission)]; + return [ + ...ExtraDatabaseSchemaDropdownOptions( + encodedFqn, + _permission, + _deleted + ), + ]; case EntityType.DATABASE_SERVICE: return [ - ...ExtraDatabaseServiceDropdownOptions(encodedFqn, _permission), + ...ExtraDatabaseServiceDropdownOptions( + encodedFqn, + _permission, + _deleted + ), ]; default: return []; diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.test.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.test.tsx index ff15c5e1f17..4061a55e95d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.test.tsx @@ -79,7 +79,7 @@ describe('TableUtils', () => { EditAll: true, } as OperationPermission; - const result = ExtraTableDropdownOptions('tableFqn', permission); + const result = ExtraTableDropdownOptions('tableFqn', permission, false); expect(result).toHaveLength(1); expect(result[0].key).toBe('import-button'); @@ -91,7 +91,7 @@ describe('TableUtils', () => { EditAll: false, } as OperationPermission; - const result = ExtraTableDropdownOptions('tableFqn', permission); + const result = ExtraTableDropdownOptions('tableFqn', permission, false); expect(result).toHaveLength(1); expect(result[0].key).toBe('export-button'); @@ -103,7 +103,7 @@ describe('TableUtils', () => { EditAll: true, } as OperationPermission; - const result = ExtraTableDropdownOptions('tableFqn', permission); + const result = ExtraTableDropdownOptions('tableFqn', permission, false); expect(result).toHaveLength(2); expect(result[0].key).toBe('import-button'); @@ -115,7 +115,18 @@ describe('TableUtils', () => { ViewAll: false, EditAll: false, } as OperationPermission; - const result = ExtraTableDropdownOptions('tableFqn', permission); + const result = ExtraTableDropdownOptions('tableFqn', permission, false); + + expect(result).toHaveLength(0); + expect(result).toStrictEqual([]); + }); + + it('should not render any buttons when the entity is deleted', () => { + const permission = { + ViewAll: true, + EditAll: true, + } as OperationPermission; + const result = ExtraTableDropdownOptions('tableFqn', permission, true); expect(result).toHaveLength(0); expect(result).toStrictEqual([]); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.tsx index 10e016d1e16..57d3e205bd4 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/TableUtils.tsx @@ -1076,7 +1076,8 @@ export const getColumnOptionsFromTableColumn = (columns: Column[]) => { export const ExtraTableDropdownOptions = ( fqn: string, - permission: OperationPermission + permission: OperationPermission, + deleted: boolean ) => { const { showModal } = useEntityExportModalProvider(); const history = useHistory(); @@ -1084,7 +1085,7 @@ export const ExtraTableDropdownOptions = ( const { ViewAll, EditAll } = permission; return [ - ...(EditAll + ...(EditAll && !deleted ? [ { label: ( @@ -1106,7 +1107,7 @@ export const ExtraTableDropdownOptions = ( }, ] : []), - ...(ViewAll + ...(ViewAll && !deleted ? [ { label: (