diff --git a/extensions/default/src/ViewerLayout/ViewerHeader.tsx b/extensions/default/src/ViewerLayout/ViewerHeader.tsx
index da9f98936..f9398631a 100644
--- a/extensions/default/src/ViewerLayout/ViewerHeader.tsx
+++ b/extensions/default/src/ViewerLayout/ViewerHeader.tsx
@@ -9,6 +9,7 @@ import HeaderPatientInfo from './HeaderPatientInfo';
import { PatientInfoVisibility } from './HeaderPatientInfo/HeaderPatientInfo';
import { preserveQueryParameters } from '@ohif/app';
import { Types } from '@ohif/core';
+import { checkTrizRisAccess } from '../services/TrizRisAccessApi';
function ViewerHeader({ appConfig }: withAppTypes<{ appConfig: AppTypes.Config }>) {
const { servicesManager, extensionManager, commandsManager } = useSystem();
@@ -17,6 +18,22 @@ function ViewerHeader({ appConfig }: withAppTypes<{ appConfig: AppTypes.Config }
const navigate = useNavigate();
const location = useLocation();
+ const [toolbarDisabled, setToolbarDisabled] = React.useState(true);
+
+ React.useEffect(() => {
+ const chargerAcces = async () => {
+ const access = await checkTrizRisAccess();
+
+ console.log('### ACCESS TOOLBAR ###', access);
+ console.log('### canUseToolbar ###', access?.canUseToolbar);
+ console.log('### canConsulter ###', access?.canConsulter);
+ console.log('### isMedecin ###', access?.isMedecin);
+
+ setToolbarDisabled(access?.canUseToolbar !== true);
+ };
+
+ chargerAcces();
+ }, []);
const onClickReturnButton = () => {
const { pathname } = location;
const dataSourceIdx = pathname.indexOf('/', 1);
@@ -104,7 +121,21 @@ function ViewerHeader({ appConfig }: withAppTypes<{ appConfig: AppTypes.Config }
isReturnEnabled={!!appConfig.showStudyList}
onClickReturnButton={onClickReturnButton}
WhiteLabeling={appConfig.whiteLabeling}
- Secondary={}
+ Secondary={
+
+
+
+ }
PatientInfo={
appConfig.showPatientInfo !== PatientInfoVisibility.DISABLED && (
}
>
-
+
diff --git a/extensions/default/src/services/TrizRisAccessApi.ts b/extensions/default/src/services/TrizRisAccessApi.ts
index ee4c5e262..3bd8ffb9f 100644
--- a/extensions/default/src/services/TrizRisAccessApi.ts
+++ b/extensions/default/src/services/TrizRisAccessApi.ts
@@ -2,7 +2,15 @@ import { TrizRisConfig } from '@ohif/core/src/config/TrizRisConfig';
const ACCESS_URL = `${TrizRisConfig.apiBaseUrl}/ohif/access`;
-export async function checkTrizRisAccess(): Promise
{
+export interface TrizRisAccess {
+ authorized: boolean;
+ isMedecin: boolean;
+ canVisualiser: boolean;
+ canConsulter: boolean;
+ canUseToolbar: boolean;
+}
+
+export async function checkTrizRisAccess(): Promise {
try {
const response = await fetch(ACCESS_URL, {
method: 'GET',
@@ -15,15 +23,22 @@ export async function checkTrizRisAccess(): Promise {
});
if (!response.ok) {
- return false;
+ return null;
}
const result = await response.json();
+ console.log('### REPONSE ACCESS TRIZRIS ###', result);
- return result.authorized === true;
+ return {
+ authorized: result.authorized === true,
+ isMedecin: result.isMedecin === true,
+ canVisualiser: result.canVisualiser === true,
+ canConsulter: result.canConsulter === true,
+ canUseToolbar: result.canUseToolbar === true,
+ };
} catch (error) {
console.error('### ERREUR VERIFICATION ACCES TRIZRIS ###', error);
- return false;
+ return null;
}
}
diff --git a/platform/app/.webpack/webpack.pwa.js b/platform/app/.webpack/webpack.pwa.js
index 6fbd6a081..e239468d8 100644
--- a/platform/app/.webpack/webpack.pwa.js
+++ b/platform/app/.webpack/webpack.pwa.js
@@ -9,6 +9,7 @@ const webpackBase = require('./../../../.webpack/webpack.base.js');
const SRC_DIR = path.join(__dirname, '../src');
const DIST_DIR = path.join(__dirname, '../dist');
const PUBLIC_DIR = path.join(__dirname, '../public');
+const { ORTHANC_BASE_URL } = require('../config/trizris.shared');
// Ignore node_modules except @cornerstonejs (symlinked local development).
const WATCH_IGNORED = /node_modules[\\/](?!@cornerstonejs(?:[\\/]|$))/;
@@ -212,7 +213,7 @@ module.exports = (env, argv) => {
{
context: ['/orthanc'],
- target: 'http://localhost:8042',
+ target: ORTHANC_BASE_URL,
changeOrigin: true,
pathRewrite: {
'^/orthanc': '',
diff --git a/platform/app/src/routes/Mode/Mode.tsx b/platform/app/src/routes/Mode/Mode.tsx
index dcba03a87..f37c17df3 100644
--- a/platform/app/src/routes/Mode/Mode.tsx
+++ b/platform/app/src/routes/Mode/Mode.tsx
@@ -66,12 +66,96 @@ export default function ModeRoute({
userAuthenticationService,
customizationService,
} = servicesManager.services;
-
+ console.log('displaySetService =', displaySetService);
const { extensions, sopClassHandlers, hangingProtocol } = mode;
const runTimeHangingProtocolId = lowerCaseSearchParams.get('hangingprotocolid');
const runTimeStageId = lowerCaseSearchParams.get('stageid');
const token = lowerCaseSearchParams.get('token');
+ // ==================== TRIZRIS : SOP INITIAL ====================
+ const initialSopInstanceUID = new URLSearchParams(window.location.search).get(
+ 'initialSopInstanceUID'
+ );
+
+ useEffect(() => {
+ if (!initialSopInstanceUID) {
+ return;
+ }
+
+ const { viewportGridService, cornerstoneViewportService } = servicesManager.services;
+
+ const essayerNavigation = () => {
+ const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(
+ initialSopInstanceUID,
+ null
+ );
+
+ console.log('DISPLAY SET DU SOP APRES CHARGEMENT =', displaySet);
+
+ if (!displaySet) {
+ return;
+ }
+
+ const imageIndex = displaySet.instances.findIndex(
+ instance => instance.SOPInstanceUID === initialSopInstanceUID
+ );
+
+ console.log('INDEX DU SOP =', imageIndex);
+
+ if (imageIndex < 0) {
+ return;
+ }
+
+ const { viewports } = viewportGridService.getState();
+
+ let targetViewport = null;
+
+ viewports.forEach((viewport, viewportId) => {
+ console.log('VIEWPORT', viewportId, 'displaySets =', viewport.displaySetInstanceUIDs);
+
+ if (viewport.displaySetInstanceUIDs?.includes(displaySet.displaySetInstanceUID)) {
+ targetViewport = {
+ id: viewportId,
+ ...viewport,
+ };
+ }
+ });
+
+ console.log('TARGET VIEWPORT =', targetViewport);
+
+ if (!targetViewport) {
+ console.log('### VIEWPORT PAS ENCORE PRET -> ATTENTE ###');
+ return;
+ }
+
+ console.log('### VIEWPORT TROUVE POUR KEY IMAGE ###', targetViewport.id);
+
+ commandsManager.run('jumpToImage', {
+ imageIndex,
+ viewport: targetViewport,
+ });
+ };
+
+ // 1. essai immédiat
+ essayerNavigation();
+
+ // 2. attendre les display sets
+ const { unsubscribe: unsubscribeDisplaySets } = displaySetService.subscribe(
+ displaySetService.EVENTS.DISPLAY_SETS_ADDED,
+ essayerNavigation
+ );
+
+ // 3. attendre que le viewport ait réellement reçu ses données
+ const { unsubscribe: unsubscribeViewport } = cornerstoneViewportService.subscribe(
+ cornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED,
+ essayerNavigation
+ );
+
+ return () => {
+ unsubscribeDisplaySets();
+ unsubscribeViewport();
+ };
+ }, [initialSopInstanceUID, displaySetService, servicesManager]); // ===============================================================
if (token) {
updateAuthServiceAndCleanUrl(token, location, userAuthenticationService);
@@ -232,6 +316,28 @@ export default function ModeRoute({
// Add SOPClassHandlers to a new SOPClassManager.
displaySetService.init(extensionManager, sopClassHandlers);
+ const displaySets = displaySetService.getActiveDisplaySets
+ ? displaySetService.getActiveDisplaySets()
+ : displaySetService.getDisplaySets();
+
+ console.log('DISPLAY SETS =', displaySets);
+
+ if (displaySets && displaySets.length > 0) {
+ displaySets.forEach((displaySet, index) => {
+ console.log('================ DISPLAY SET', index, '================');
+
+ console.log('SeriesInstanceUID =', displaySet.SeriesInstanceUID);
+
+ console.log('displaySetInstanceUID =', displaySet.displaySetInstanceUID);
+
+ console.log('CHAMPS =', Object.keys(displaySet));
+
+ console.log('images =', displaySet.images);
+
+ console.log('instances =', displaySet.instances);
+ });
+ }
+
extensionManager.onModeEnter({
servicesManager,
extensionManager,