diff --git a/extensions/default/src/customizations/onDropHandlerCustomization.ts b/extensions/default/src/customizations/onDropHandlerCustomization.ts new file mode 100644 index 000000000..42a83bce9 --- /dev/null +++ b/extensions/default/src/customizations/onDropHandlerCustomization.ts @@ -0,0 +1,5 @@ +export default { + customOnDropHandler: () => { + return Promise.resolve({ handled: false }); + }, +}; diff --git a/extensions/default/src/getCustomizationModule.tsx b/extensions/default/src/getCustomizationModule.tsx index e33824d8c..47b785251 100644 --- a/extensions/default/src/getCustomizationModule.tsx +++ b/extensions/default/src/getCustomizationModule.tsx @@ -10,6 +10,7 @@ import menuContentCustomization from './customizations/menuContentCustomization' import getDataSourceConfigurationCustomization from './customizations/dataSourceConfigurationCustomization'; import progressDropdownCustomization from './customizations/progressDropdownCustomization'; import sortingCriteriaCustomization from './customizations/sortingCriteriaCustomization'; +import onDropHandlerCustomization from './customizations/onDropHandlerCustomization'; /** * @@ -46,6 +47,7 @@ export default function getCustomizationModule({ servicesManager, extensionManag ...progressDropdownCustomization, ...sortingCriteriaCustomization, ...defaultContextMenuCustomization, + ...onDropHandlerCustomization, }, }, ]; diff --git a/platform/app/src/components/ViewportGrid.tsx b/platform/app/src/components/ViewportGrid.tsx index 66d7d2e60..05e1723cd 100644 --- a/platform/app/src/components/ViewportGrid.tsx +++ b/platform/app/src/components/ViewportGrid.tsx @@ -24,8 +24,13 @@ function ViewerViewportGrid(props: withAppTypes) { }); const layoutHash = useRef(null); - const { displaySetService, measurementService, hangingProtocolService, uiNotificationService } = - servicesManager.services; + const { + displaySetService, + measurementService, + hangingProtocolService, + uiNotificationService, + customizationService, + } = servicesManager.services; const generateLayoutHash = () => `${numCols}-${numRows}`; @@ -208,8 +213,20 @@ function ViewerViewportGrid(props: withAppTypes) { }, [viewports]); const onDropHandler = (viewportId, { displaySetInstanceUID }) => { - const updatedViewports = _getUpdatedViewports(viewportId, displaySetInstanceUID); - viewportGridService.setDisplaySetsForViewports(updatedViewports); + const customOnDropHandler = customizationService.getCustomization('customOnDropHandler'); + const dropHandlerPromise = customOnDropHandler({ + ...props, + viewportId, + displaySetInstanceUID, + appConfig, + }); + + dropHandlerPromise.then(({ handled }) => { + if (!handled) { + const updatedViewports = _getUpdatedViewports(viewportId, displaySetInstanceUID); + viewportGridService.setDisplaySetsForViewports(updatedViewports); + } + }); }; const getViewportPanes = useCallback(() => { diff --git a/platform/docs/docs/platform/services/customization-service/sampleCustomizations.tsx b/platform/docs/docs/platform/services/customization-service/sampleCustomizations.tsx index 92b9db849..81214fb5f 100644 --- a/platform/docs/docs/platform/services/customization-service/sampleCustomizations.tsx +++ b/platform/docs/docs/platform/services/customization-service/sampleCustomizations.tsx @@ -590,6 +590,26 @@ window.config = { }; `, }, + { + id: 'customOnDropHandler ', + description: + 'CustomOnDropHandler in the viewport grid enables users to handle additional functionalities during the onDrop event in the viewport.', + default: props => { + return Promise.resolve({ handled: false }); + }, + configuration: ` +window.config = { + // rest of window config + customizationService: [ + { + customOnDropHandler: { + $set: customOnDropHandler + }, + }, + ], +}; + `, + }, ]; export const segmentationCustomizations = [