Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | 34x 34x | import { useViewportsByPositionStore } from './stores/useViewportsByPositionStore'; /** * This find or create viewport is paired with the reduce results from * below, and the action of this viewport is to look for previously filled * viewports, and to reuse by position id. If there is no filled viewport, * then one can be re-used from the display set if it isn't going to be displayed. * @param hangingProtocolService - bound parameter supplied before using this * @param viewportsByPosition - bound parameter supplied before using this * @param position - the position in the grid to retrieve * @param positionId - the current position on screen to retrieve * @param options - the set of options used, so that subsequent calls can * store state that is reset by the setLayout. * This class uses the options to store the already viewed * display sets, filling it initially with the pre-existing viewports. */ export const findOrCreateViewport = ( hangingProtocolService, isHangingProtocolLayout, viewportsByPosition, position: number, positionId: string, options: Record<string, unknown> ) => { const byPositionViewport = viewportsByPosition?.[positionId]; Iif (byPositionViewport) { return { ...byPositionViewport }; } const { protocolId, stageIndex } = hangingProtocolService.getState(); // Setup the initial in display correctly for initial view/select Iif (!options.inDisplay) { options.inDisplay = [...viewportsByPosition.initialInDisplay]; } // See if there is a default viewport for new views const missing = hangingProtocolService.getMissingViewport( isHangingProtocolLayout ? protocolId : 'default', stageIndex, options ); Iif (missing) { const displaySetInstanceUIDs = missing.displaySetsInfo.map(it => it.displaySetInstanceUID); options.inDisplay.push(...displaySetInstanceUIDs); return { displaySetInstanceUIDs, displaySetOptions: missing.displaySetsInfo.map(it => it.displaySetOptions), viewportOptions: { ...missing.viewportOptions, }, }; } // and lastly if there is no default viewport, then we see if we can grab the // viewportsByPosition at the position index and use that // const candidate = Object.values(viewportsByPosition)[position]; // // if it has something to display, then we can use it // return candidate?.displaySetInstanceUIDs ? candidate : {}; return {}; }; /** * Records the information on what viewports are displayed in which position. * Also records what instances from the existing positions are going to be in * view initially. * @param state is the viewport grid state * @param syncService is the state sync service to use for getting existing state * @returns Set of states that can be applied to the state sync to remember * the current view state. */ const findViewportsByPosition = (state, { numRows, numCols }) => { const { viewports } = state; const { setViewportsByPosition, addInitialInDisplay } = useViewportsByPositionStore.getState(); const initialInDisplay = []; const viewportsByPosition = {}; viewports.forEach(viewport => { Iif (viewport.positionId) { const storedViewport = { ...viewport, viewportOptions: { ...viewport.viewportOptions }, }; viewportsByPosition[viewport.positionId] = storedViewport; setViewportsByPosition(viewport.positionId, storedViewport); } }); for (let row = 0; row < numRows; row++) { for (let col = 0; col < numCols; col++) { const positionId = `${col}-${row}`; const viewport = viewportsByPosition[positionId]; Iif (viewport?.displaySetInstanceUIDs) { initialInDisplay.push(...viewport.displaySetInstanceUIDs); } } } initialInDisplay.forEach(displaySetInstanceUID => addInitialInDisplay(displaySetInstanceUID)); }; export default findViewportsByPosition; |