Skip to content

Commit c7ad3f4

Browse files
feat(ui): Add option to remove asset from an Application (#14679)
1 parent c731e72 commit c7ad3f4

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

datahub-web-react/src/app/entityV2/application/ApplicationEntitiesTab.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export function ApplicationEntitiesTab() {
2626
placeholderText="Filter assets..."
2727
skipCache
2828
applyView
29+
shouldRefetch
2930
/>
3031
</SearchCardContext.Provider>
3132
);

datahub-web-react/src/app/previewV2/DefaultPreviewCard.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ import ContextPath from '@app/previewV2/ContextPath';
2424
import DefaultPreviewCardFooter from '@app/previewV2/DefaultPreviewCardFooter';
2525
import EntityHeader from '@app/previewV2/EntityHeader';
2626
import { ActionsAndStatusSection } from '@app/previewV2/shared';
27-
import { useRemoveDataProductAssets, useRemoveDomainAssets, useRemoveGlossaryTermAssets } from '@app/previewV2/utils';
27+
import {
28+
useRemoveApplicationAssets,
29+
useRemoveDataProductAssets,
30+
useRemoveDomainAssets,
31+
useRemoveGlossaryTermAssets,
32+
} from '@app/previewV2/utils';
2833
import { useSearchContext } from '@app/search/context/SearchContext';
2934
import HoverCardAttributionDetails from '@app/sharedV2/propagation/HoverCardAttributionDetails';
3035
import { AttributionDetails } from '@app/sharedV2/propagation/types';
@@ -408,6 +413,7 @@ function useRemoveRelationship(entityType: EntityType) {
408413
const { removeDomain } = useRemoveDomainAssets(setShouldRefetchEmbeddedListSearch);
409414
const { removeTerm } = useRemoveGlossaryTermAssets(setShouldRefetchEmbeddedListSearch);
410415
const { removeDataProduct } = useRemoveDataProductAssets(setShouldRefetchEmbeddedListSearch);
416+
const { removeApplication } = useRemoveApplicationAssets(setShouldRefetchEmbeddedListSearch);
411417

412418
const previewData = usePreviewData();
413419
const entityData = useEntityData();
@@ -434,6 +440,13 @@ function useRemoveRelationship(entityType: EntityType) {
434440
removeButtonText: showRemovalFromList ? removeText || 'Remove from Data Product' : null,
435441
};
436442
}
443+
if (pageEntityType === EntityType.Application) {
444+
return {
445+
removeRelationship: () => (onRemove ? onRemove() : removeApplication(previewData?.urn)),
446+
removeButtonText: showRemovalFromList ? removeText || 'Remove from Application' : null,
447+
};
448+
}
449+
437450
return {
438451
removeRelationship: () => {},
439452
removeButtonText: null,

datahub-web-react/src/app/previewV2/utils.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useEntityContext } from '@app/entity/shared/EntityContext';
44
import { EntityCapabilityType } from '@app/entityV2/Entity';
55
import { useBatchSetDataProductMutation } from '@src/graphql/dataProduct.generated';
66

7+
import { useBatchSetApplicationMutation } from '@graphql/application.generated';
78
import { useRemoveTermMutation, useUnsetDomainMutation } from '@graphql/mutations.generated';
89
import { BrowsePathV2, GlobalTags, Owner } from '@types';
910

@@ -154,6 +155,45 @@ export function useRemoveDataProductAssets(setShouldRefetchEmbeddedListSearch) {
154155
return { removeDataProduct };
155156
}
156157

158+
export function useRemoveApplicationAssets(setShouldRefetchEmbeddedListSearch) {
159+
const [batchSetApplicationMutation] = useBatchSetApplicationMutation();
160+
161+
function handleApplication(urn) {
162+
batchSetApplicationMutation({ variables: { input: { resourceUrns: [urn] } } })
163+
.then(() => {
164+
setTimeout(() => {
165+
setShouldRefetchEmbeddedListSearch(true);
166+
message.success({ content: 'Removed Application.', duration: 2 });
167+
}, 2000);
168+
})
169+
.catch((e: unknown) => {
170+
message.destroy();
171+
if (e instanceof Error) {
172+
message.error({
173+
content: `Failed to remove application: ${e.message}`,
174+
duration: 3,
175+
});
176+
}
177+
});
178+
}
179+
180+
const removeApplication = (urn) => {
181+
Modal.confirm({
182+
title: `Confirm Application Removal`,
183+
content: `Are you sure you want to remove this application?`,
184+
onOk() {
185+
handleApplication(urn);
186+
},
187+
onCancel() {},
188+
okText: 'Yes',
189+
maskClosable: true,
190+
closable: true,
191+
});
192+
};
193+
194+
return { removeApplication };
195+
}
196+
157197
export const isDefaultBrowsePath = (browsePaths: BrowsePathV2) => {
158198
return browsePaths.path?.length === 1 && browsePaths?.path[0]?.name === 'Default';
159199
};

0 commit comments

Comments
 (0)