hide the import/export and bulk edit button in case of entity is delete (#20306)

This commit is contained in:
Ashish Gupta 2025-03-18 15:08:33 +05:30 committed by GitHub
parent 7fa3e53403
commit ba4549ca3f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 164 additions and 47 deletions

View File

@ -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}

View File

@ -625,7 +625,7 @@ const SchemaTable = () => {
defaultVisibleColumns={DEFAULT_SCHEMA_TABLE_VISIBLE_COLUMNS}
expandable={expandableConfig}
extraTableFilters={getBulkEditButton(
tablePermissions.EditAll,
tablePermissions.EditAll && !deleted,
handleEditTable
)}
locale={{

View File

@ -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(

View File

@ -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);

View File

@ -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(

View File

@ -261,7 +261,10 @@ function SchemaTablesTab({
</Typography.Text>
</span>
{getBulkEditButton(permissions.table.EditAll, handleEditTable)}
{getBulkEditButton(
permissions.table.EditAll && !databaseSchemaDetails.deleted,
handleEditTable
)}
</>
)
}

View File

@ -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(

View File

@ -286,7 +286,8 @@ function ServiceMainTabContent({
{entityType === EntityType.DATABASE_SERVICE &&
getBulkEditButton(
servicePermission.EditAll,
servicePermission.EditAll &&
!serviceDetails.deleted,
handleEditTable
)}
</>

View File

@ -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(

View File

@ -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([]);

View File

@ -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: (

View File

@ -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);

View File

@ -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: (

View File

@ -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);

View File

@ -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: (

View File

@ -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 [];

View File

@ -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([]);

View File

@ -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: (