* fix: 🐛 Make Plugin switch part of ToolbarModule
Closes: #1241
* Move setCornerstoneViewport command into cornerstone extension
* Exposing extensionManager into extension's get modules functions
* Remove Plugin switch
* Updating set cornerstonelayout to work on VIEWER context
* Creating a customComponent for 2D MPR button
* Use extensionManager to show or not buttons
Adding isHidden option into toolbarModules
* Make buttons hidden depending on extension registration
* Fix unit test after changes on extensionManager
* Remove workaround for extensionManager
* Use studyMeatadataManager and remove TODO's
* Remove storeContext not needed
* Moving Exit 2D MPR into cornerstone extension with VTK context
* Remove PluginSwitch files
* Fix E2E tests
* Adding cypress screenshots into gitignore
* Remove extensionManager from getModuleFn functions and moving CustomComponent for VTK button to VTK extension
Co-authored-by: Danny Brown <danny.ri.brown@gmail.com>
* E2E Tests: Save Measurements Functionality
* Moving test file to PWA only. Script-tag doesn't have the required Study
* Removing data-cy selector from cornerstone toolbar
* feat: 🎸 Configuration so viewer tools can nix handles
Adds a key to cornerstone configuration that allows to toggle on/off
handle rendering
Closes: #1223
* Update extension docs
* Update doc
* docs: include hideHandles configuration in our configuration docs
* chore: default to hiding handles for annotations
* chore: switch to drawHandlesOnHover to mimic legacy viewer functionality
* Flip logic for drawHandlesOnHover; reverse of hideHandles
* Don't hide the handles of ellipse or rectangle roi
* invert check
Co-authored-by: Danny Brown <danny.ri.brown@gmail.com>
* Move DICOMSR to @ohif/core
* refactor: 💡 Move DICOMSR code to @ohif/core project
We've just merged support for DICOM Structured Reports. Today, support
for this feature lives in the @ohif/viewer project in it's lib folder.
Ideally, it should be moved to @ohif/core and given a clear public API
and unit tests.
Closes: #1282
* Update imports
* CR Update: Update imports
* feat: 🎸 Expose extension config to modules
Currently, only the preRegistration hook receives the extension's
configuration as a parameter. Providing getModuleFn's with the
extension's configuration, and all lifecycle/modules with the
application's configuration as rootConfig should open the doors to more
configurable extensions.
Closes: #1268
* CR Update: Pass extension and service config through extension manager preinit/getmodule
* CR Update: Remove appConfig from servicesManager
* CR Update: Remove appconfig variable
* ci: update executor and browser flag for circleci orbs
* ci: browser flag when running percy/ci tests
* ci: limit ourselves to the executors defined by the cypress orb for now
* fix: Set VTK viewport as active by interaction
* chore: upgrade cypress to latest
* Revert "fix: Set VTK viewport as active by interaction"
This reverts commit b6e174c2def9d8f688a54d32053679788b9aaf76.
* ci: add record flag for master cypress runs
* ci: simplify cypress orb tasks now that cypress@3.8 uses electron w/ chromium 78
* ci: remove video false flag
* ci: drop browser flag
* ci: store video artifacts
* fix: Set VTK viewport as active by interaction
* chore: upgrade cypress to latest
* Revert "fix: Set VTK viewport as active by interaction"
This reverts commit b6e174c2def9d8f688a54d32053679788b9aaf76.
* ci: add record flag for master cypress runs
* Tests for routes: PT/CT json, studies, series, frames, metadatas
* Fix based on reviews and JSON file for PT/CT Study added
* chore: revert to remote JSON file
* chore: delete PTCTStudy.json file
We can circle back to this approach when/if we have issues. No need to hold-up this PR. My fault on this one.
* E2E Tests: Download Image File Modal
* CI fix
* Fixes for PR comments
* Small change just to check CI behavior
* Fix for CI failure: comparing classes instead of image src
* Fixed Download button test and blocked Download Dialog event
* Deleting file ConnectedViewportDownloadForm.js
This file was not supposed to be created by this PR. It was already deleted by another user on Master branch.
* Removing wrong import line
* Fixes based on PR comments
* Fixes based on PR comments
* test: remove assignment to window
* feat: 🎸 DICOM SR STOW on MeasurementAPI
Closes: #758
* feat: 🎸 Adding the dataExchance from DICOM SR
* feat: 🎸 Fix some issues and get the retrieve measurements working
* feat: 🎸 Preventing measurement tool helpers to broke because the data is not Number (it comes as string from dcmjs)
* feat: 🎸 Adding a button to start testing SATE functionality
* feat: 🎸Small fixes into the code
* feat: 🎸 MAke sure we get latest SR in the study, even on lazyLoad mode
* Revert "feat: 🎸 Preventing measurement tool helpers to broke because the data is not Number (it comes as string from dcmjs)"
This reverts commit 4b3a1efb5810487d2319826fd59c03d779882b5e.
* feat: 🎸 Make sure after sync we update the viewports and also that annotation tools are set to passive, so it can be drawn in the viewports
* feat: 🎸 Remove console logs and start using OHIF.log
* feat: 🎸 Refactor measurement table to use Snackbar service of messages and make sure we only show save button if server type is dicomWeb
* feat: 🎸 Refactor to remove mocked wadoRoot and use server
* Fix to expose error once we can't save the SR
* Update DCMJS into latest dev version
* Update dcmjs with latest fixes
* Fix PR callouts
* Logging error on MeasurementReport creation
* Preventing from breaking on non supported tools and also warning that some toolType is not sopported
* Small error message update
* Expose better the errors and when we have unsopported tools into the measurements
* Renaming variable
* Expose dcmjs tool support check
* Change the way we warn the unsupportedTools
* Adding style to the button
* Small change on button style
* Fix git conflicts
* Fix after merge with latest master
* Fix after merge with master, btn was not clickable
* Fixing callouts
* Adding util functions into files and refactor with JSDocs
* Refactoring code, adding some basic JSDocs
* Bump dcmjs with latest version and fixes
* JSDocs and small refactors
* yarn lock file after dcmjs update
* Remove unused parameters
* Registering a plain copy of server into measurementAPI
* Small refactor
* Start changing from toolType to toolName
* Rename a function to get instanceMetadata
* Adding error if server is not DICOMWeb on retrieve
* Move snackbar outside of UI component and use UINotificationService
* Refactor and JSDocs
* Small fixes on JSDocs (style)
* Remove unused import
* Improve JSDocs on MeasurementApi
* Remove refactor leftover
* Improve JSDocs and propTypes
* JSDocs and small refactors
* Fix ExtensionManager bug and add test to bandaid
* Add tools configuration to extension manager preinit
* Fix reducing of configs
* Merge internal with external configs
* Merge internal with external configs
* Remove dialog from init in measurementstable
* Testing injected configuration
* New way to set config
* Add new prop to dialog provider to allow disabling last position
* Remove code from preinit in cornerstone
* Add new prop to dialog provider to allow disabling last position
* Add centralize to dialogs
* Reorder dialogs when adding them
* Fix draggable styles (cursor)
* Remove repositioning methods from labelling flow and remove overlay from labelling manager
* Fix empty array being set in bringToFront
* Add new command to update table and pass commands manager to modules/preinit hook
* Ad UIContextMenu service / factory
* Use new contextmenu service in measurementspanel extension
* Use dialogs for arrow annotate in default
* Remove positioning funcionality from tool context menu
* Add context menu service
* Pass commandsModule to extension
* Update edit description dialog and simple dialog to position relative
* Remove style code from labelling flow and manager
* Remove eventdata from labelling
* Remove labelling code from measurement init
* Add commandsmanager to provider
* Update contextmenu provider and service
* Add touchstart and mouseclick to hide contextmenu
* Hide labelling if click/touch
* Remove labelling and context menu dead code
* Fix undefined bug if ViewerMain grid has no children
* Fix broken prop on context menu
* Update commandsmodule based on master
* Fix broken configuration
* Update script tag config
* Remove cornerstone from toolcontextmenu
* Remove cornerstone from toolcontextmenu
* Split labelling and context menu providers
* Split labelling and context menu providers
* Update test
* Destructure extensions into new array
* CR Update: Move default arrow config to cornerstone instead of default
* CR Update: Fix app configuration props structure
* CR Update: Fix app configuration prop in script tag and extract commands manager from providers
* CR Update: Create custom providers to use commandsManager
* CR Update: Use services directly in measurementspanel
* CR Update: Pass components to providers
* CR Update: Remove position from dialog
* CR Update: fix dialog prop check
* CR Update: Fix comments
* CR Update: Update documentation
* CR Update: Add test default configuration
* CR Update: Add default empy array to extensions
* CR Update: Update i18n configuration all ot match current function configuration
* CR Update: Add defaults to injected dependencies in configuration and extension configuration
* CR Update: Add defaults to configuration with no args
* Update documentation
* CR Update: Add default for tools
* CR Update: Update config object to i18n
* CR Update: spread defaults
* CR Update: Add tool configuration example to cornerstone extension
* CR Update: Add tool configuration to netlify (testing)
* CR Update: Remove netlify config for tools
* CR Update: Rollback changes to i18n to be fixed later
* CR Update: Update documentation and pass whole cornerstone config object instead of tools key
SEE: https://www.conventionalcommits.org/en/v1.0.0/#commit-message-with-both-and-breaking-change-footer
BREAKING CHANGE: modifies the exposed react <App /> components props. The contract for providing configuration for the app has changed. Please reference updated documentation for guidance.
* docs: process docs to include UX Stories requirement
* docs: include note regarding different environments
* Services init
* Remove unused canny logos
* docs: add ModalService diagram
* docs: GIF of notification
* docs: add ui-services page
* docs: simplify ui services call out in the general services docs
* docs: tips and tricks for UI services
* docs: moar pages
* docs: dialog gif
* docs: services in summary/sidebar
* docs: gif examples at top of dialog and notification pages
* docs: add UIModal gif
* docs: details for Dialog Service
* docs: include usage information for ui modal service
* docs: detailed information about our UI Notification Service
* docs: services diagram
* docs: remove unused links
* docs: services example and image
* docs: stubbing extension pages
* docs: UX Stories --> User Cases
* chore: eslint fix
* docs: extensions overview + diagram
* docs: update extensions in sidebar
* docs: extension skeleton and registration info
* docs: copy of maintained extensions table partial in the extensions folder
* docs: swap out old extensions structure for new
* docs: process docs to include UX Stories requirement
* docs: include note regarding different environments
* Services init
* Remove unused canny logos
* docs: add ModalService diagram
* docs: GIF of notification
* docs: add ui-services page
* docs: simplify ui services call out in the general services docs
* docs: tips and tricks for UI services
* docs: moar pages
* docs: dialog gif
* docs: services in summary/sidebar
* docs: gif examples at top of dialog and notification pages
* docs: add UIModal gif
* docs: details for Dialog Service
* docs: include usage information for ui modal service
* docs: detailed information about our UI Notification Service
* docs: services diagram
* docs: remove unused links
* docs: services example and image
* Organize viewports reducers
* Organize viewports actions
* Add local state to store dom node and remove hack
* Comment usage of dom in vtk
* Fix set of enabledElements
* Fix warning in html viewport
* Update docs for state
* Add commandsmanager to commandsmodule
* refactor: Shift ConnectedViewportDownloadForm to extension-cornerstone (#1224)
* refactor: 💡 Shift ConnectedViewportDownloadForm to its own proj
Shift ConnectedViewportDownloadForm to its own project and use local
state to get enabledElement
Closes: #1206
* Refactor connected component to cornerstone component
* Remove builtin behaviour from toolbarrow
* Organize viewports reducers
* Organize viewports actions
* Add local state to store dom node and remove hack
* Comment usage of dom in vtk
* Fix set of enabledElements
* Fix warning in html viewport
* Update docs for state
* Add commandsmanager to commandsmodule
* fix: study list translations
* Don't render until translations are ready
* Try to wait for translations to load
* Use null to render "nothing"
* Try toggling useSuspense off up a layer
* logging
* Remove useSuspense false flags
* DO NOT OPEN A PR WITH IT.
Experimental changes only.
Try to solve issues with useTranslation hooks
#Please enter the commit message for your changes. Lines starting
* Remove unecessary changes
* feat: 🎸 useMedia hook to not use one more prop for upd state vl
* docs: Add license scan report and status (#1161)
Signed-off-by: fossabot <badges@fossa.io>
* fix: 🐛 Fix for JS breaking on header (#1164)
* feat: 🎸 Code review and refact
Revised code based on PRs(variable alias,...). Changed hook for
useMedia. Now, it provides two hooks: one to get displayMediaSize and
other to get Entity(component, objects...) based on displayMediaSize.
Implemented a similar solution for state manager to store
mediaQueryList(s) and displaySize for app.
* feat: 🎸 Fine tunning on mediaQuery value, fixed issue about it
* fix: 🐛 Fixed issue and refactoring
Fixed js exception and also refactoring userPreferences components to
functional component
* fix: 🐛 Code review. Localstorage fix minor bugs
* fix: 🐛 Ensure hotkey lower case always
* fix: translation switcher
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.53.6
- @ohif/ui@0.62.1
- @ohif/viewer@2.8.2
* Add new modal service
* Change serviceManager prop to servicesManager
* CR Update: fix casing and add required proptypes to providers
* CR Update: Improve ohifmodal proptypes
* CR Update: Fix typo in extensionmanager
* CR Update: add default props to service and check service in provider
* Refactor modal provider to better use its own state
* ci: don't build our master branch (#1177)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* Use modal instead of modal context
* Ci/promotable builds (#1179)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Change modal children order
* Ci/promotable builds (#1180)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* Ci/promotable builds (#1181)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* Ci/promotable builds (#1182)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Fix OHIFModal proptypes
* Ci/promotable builds (#1183)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* Ci/promotable builds (#1184)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: restore release workflow (#1185)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: restore release workflow
* Pass services to each module, improve tests
* Add servicesManager test and registerServices method
* Fix key warning of snackbar elements
* Remove netlify-cli; we';ll install this on CI server
* Update staging and prod netlify site IDs
* Clean up NPM_PUBLISH step
* Clean up DOCS_PUBLISH step
* Clean up Deploy workflow
* Custom executor to override cypress config
* Spacing
* Use an existing docker hub image
* Switch to npx instead of digging into npm bin location
* Remove e2e test before prod deploy
* Add workflow images
* docs: continous integrationn
* Add default props to modal
* chore(release): publish [skip ci]
- @ohif/extension-cornerstone@1.5.1
- @ohif/extension-vtk@0.53.7
- @ohif/core@1.9.1
- @ohif/ui@0.62.2
- @ohif/viewer@2.8.3
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.53.8
- @ohif/core@1.10.0
- @ohif/ui@0.62.3
- @ohif/viewer@2.8.4
* ci: Redirect site traffic to index.html if file is not resolved
* ci: fix typo
* fix: 🐛 Code review. Remove 'global state' for displaySize
* fix: 🐛 Code review. Ref back to useMedia and pass value down
Code review. Ref back to useMedia and pass value down (components)
instead of creating a specialized hook to tied any component on it
* fix: translation switcher
* fix
* cleanup
* add missed translation
* fix: 🐛 Code review
* fix: 🐛 Fix unit tests
* fix: 🐛 Fix unit test
* fix: 🐛 Code merge solve conflicts. Missing files changes
* Merge from master. Missing files changes
* feat: 🎸 Code review. Fix issues with DatePicker
Fixed at least the minimum issue with datePicker and update some content
on every translation changed
* fix: 🐛 Code review. Style fix on modal
* fixes in general preferences after merge
* fix
* export default i18n language
* translation fixes
* increase snackbar zindex
* initialize language
* WIP propagate props<>state fixes
* fix state propagation
* remove hotkey error when reset default
* fix datePicker
* i18n updates
* fix i18n strings
* fix reset default -- set right input value
* fix default language
* fix e2e for user preferences
* small fix datePicker props
* remove i18n from window -- debugging purposes only
* lint fixes
* Testing dialog
* Refactor modal and add dialog component to simple dialog
* Use existent dialog
* Expect event from getText callback (annotation)
* Bump cornerstone-tools version
* Use simple dialog
* bump cornersotne version
* CR Update: Update dialgo method names and default values
* CR Update: Bump overlay and show only if theres at least one overlay prop set to true
* CR Update: Use percentage over view height in draggable area
* Fix broken test vtk checks WWWC tool
* Comment test (non-deterministic)
* fix: study list translations
* Don't render until translations are ready
* Try to wait for translations to load
* Use null to render "nothing"
* Try toggling useSuspense off up a layer
* logging
* Remove useSuspense false flags
* DO NOT OPEN A PR WITH IT.
Experimental changes only.
Try to solve issues with useTranslation hooks
#Please enter the commit message for your changes. Lines starting
* Remove unecessary changes
* feat: 🎸 useMedia hook to not use one more prop for upd state vl
* docs: Add license scan report and status (#1161)
Signed-off-by: fossabot <badges@fossa.io>
* fix: 🐛 Fix for JS breaking on header (#1164)
* feat: 🎸 Code review and refact
Revised code based on PRs(variable alias,...). Changed hook for
useMedia. Now, it provides two hooks: one to get displayMediaSize and
other to get Entity(component, objects...) based on displayMediaSize.
Implemented a similar solution for state manager to store
mediaQueryList(s) and displaySize for app.
* feat: 🎸 Fine tunning on mediaQuery value, fixed issue about it
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.53.6
- @ohif/ui@0.62.1
- @ohif/viewer@2.8.2
* Add new modal service
* Change serviceManager prop to servicesManager
* CR Update: fix casing and add required proptypes to providers
* CR Update: Improve ohifmodal proptypes
* CR Update: Fix typo in extensionmanager
* CR Update: add default props to service and check service in provider
* Refactor modal provider to better use its own state
* ci: don't build our master branch (#1177)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* Use modal instead of modal context
* Ci/promotable builds (#1179)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Change modal children order
* Ci/promotable builds (#1180)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* Ci/promotable builds (#1181)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* Ci/promotable builds (#1182)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Fix OHIFModal proptypes
* Ci/promotable builds (#1183)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* Ci/promotable builds (#1184)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: restore release workflow (#1185)
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: restore release workflow
* Pass services to each module, improve tests
* Add servicesManager test and registerServices method
* Fix key warning of snackbar elements
* Remove netlify-cli; we';ll install this on CI server
* Update staging and prod netlify site IDs
* Clean up NPM_PUBLISH step
* Clean up DOCS_PUBLISH step
* Clean up Deploy workflow
* Custom executor to override cypress config
* Spacing
* Use an existing docker hub image
* Switch to npx instead of digging into npm bin location
* Remove e2e test before prod deploy
* Add workflow images
* docs: continous integrationn
* Add default props to modal
* chore(release): publish [skip ci]
- @ohif/extension-cornerstone@1.5.1
- @ohif/extension-vtk@0.53.7
- @ohif/core@1.9.1
- @ohif/ui@0.62.2
- @ohif/viewer@2.8.3
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.53.8
- @ohif/core@1.10.0
- @ohif/ui@0.62.3
- @ohif/viewer@2.8.4
* ci: Redirect site traffic to index.html if file is not resolved
* ci: fix typo
* fix: 🐛 Code review. Remove 'global state' for displaySize
* fix: 🐛 Code review. Ref back to useMedia and pass value down
Code review. Ref back to useMedia and pass value down (components)
instead of creating a specialized hook to tied any component on it
* Merge from master. Missing files changes
* feat: 🎸 Code review. Fix issues with DatePicker
Fixed at least the minimum issue with datePicker and update some content
on every translation changed
* Test Cases for User Preferences
* CI fix
* Fix for CI
* Fix based on PR review comments
* Fix for script-tag issue on CI
* Fix for new selectors on Preferences Modal and CI failure
* feat: 🎸 Filter by url query param for seriesInstnaceUID
* fix: Set SR viewport as active by interaction (#1118)
* fix: Set SR viewport as active by interaction
* quick fix
* (eslint) add "before" as global variables
* add data-cy
* add data-cy
* create E2E test
* (E2E) create custom command to set layout size
* remove .only e2e
* remove throttle for onScroll
* feat: 🎸 Code review in progress
Code review. Move retrieveMEtadata load to separate folders. Some minor
code clean up
* feat: 🎸 Code review. Missing changes from previous commit
* feat: 🎸 Code review missing changes from previous commit
When sorting, Criteria for instance must use instanceNumber and not
instancesNumber
* feat: 🎸 Code review. Add more jsdoc info
* feat: 🎸 Code review. Prettify changed code
* feat: 🎸 Instead of filtering do promote. WIP
* feat: 🎸 Fix minor issue. Allow promote or filter
* feat: 🎸 Changing component to functional component
* Merge from master Part1/2
Conflicts solved:
both added: core/src/studies/services/wado/retrieveMetadataLoader.js
both added: core/src/studies/services/wado/retrieveMetadataLoaderAsync.js
both added: core/src/studies/services/wado/retrieveMetadataLoaderSync.js
both modified: viewer/src/connectedComponents/ViewerRetrieveStudyData.js
both modified: viewer/src/routes/ViewerRouting.js
* Merge process from master Part 1/2
Missing files from previous commit
* feat: 🎸 Add cancelable promises to cut async methods
* feat: 🎸 Missing changes from previous merge process
* feat: 🎸 Missing changes from previous merge process
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: restore release workflow
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: workaround for sudo limitations
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* Inline personal access token w/ env var
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: use sudo for global command
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: make sure netlify command is available
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Try using ~/repo prefix in command
* ci: don't build our master branch
* Add netlify-cli as a dev dependency
* ci: trying a sheltered merge flow for promotions
* ci: try building with QUICK_BUILD flag
* Visual testing for Cornerstone and VTK
* Fix for CI
* Review fix: Removed cornerstone function and added snapshot description
* Added snapshot description
* Fix for CI
* playing around
* Change extension init and preRegistration signature
* Clear test code
* Update core index test
* Fix test
* Tricking the bug
* Renaming file back to trick some weird bug
* feat: 🎸 Update hotkeys and user preferences modal
This feature fix incompatibility with existent hotkeys component and
adds user preferences modal back
Closes: #923
* Update preferences structure in store
* Hide window level section of user preferences
* Update modal to reflect current hotkey value
* Clone object with hotkeys before passing to manager
* CR Update: Extract hotkeys manager format code to manager
* Fix broken cypress test
* Use new modal provider
* Rename hotkeyDefinitions in hotkeyspreferences and use array as representation
* Update study test and remove unused styles
* Study list tests: Patient Name, MRN, Modality, Description
* Fixed field selector
* Desktop tests
* Fix for study list
* Added tablet tests and small refactor on aliases
* Fix based on reviews
* feat: 🎸 New modal provider
A new modal provider/context component to unify modal related code and
simplify modal use
Closes: #1086
* refactor(ModalContext): Keep current modal lib
* Update modal provider version according to PR #1116
* Update modal provider props to use inner props
* Add custom class prop
* CR Update: Refactor provider to extract specific modal
* Fix modal import
* CR Update: Move from spread to object assign
* CR Update: Add proptypes, use classnames dependency over interpolation and rename modal
* fix: 🎸 Update AboutModal to use new modal provider (#1116)
* feat: 🎸 Update AboutModal to use new modal provider
This feature updates the AboutModal component and Header to use the new
modal context (modal provider)
* feat(ModalProvider): Add title prop to provider
* fix(ModalContext): Add defaults on hide
* CR Updates: Refactor modal provider and fix import
* CR Update: Expose props and flat modal optons
* Use customclassname instead of static
* Add cypress tag
* test: set right viewport when layout is decreased (#1146)
* chore(release): publish [skip ci]
- @ohif/viewer@2.3.6
* fix: 🐛 Minor issues measurement panel related to description (#1142)
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.52.28
- @ohif/ui@0.58.5
- @ohif/viewer@2.3.7
* fix: 🐛 Upgrade react-vtkjs-viewport to fix volume orientation (#1143)
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.52.29
- @ohif/viewer@2.3.8
* CR Update: Extract and rename AboutModal to AboutContent
* feat: 🎸 New modal provider (#1110)
* feat: 🎸 New modal provider
A new modal provider/context component to unify modal related code and
simplify modal use
Closes: #1086
* refactor(ModalContext): Keep current modal lib
* Update modal provider version according to PR #1116
* Update modal provider props to use inner props
* Add custom class prop
* CR Update: Refactor provider to extract specific modal
* Fix modal import
* CR Update: Move from spread to object assign
* CR Update: Add proptypes, use classnames dependency over interpolation and rename modal
* chore(release): publish [skip ci]
- @ohif/extension-vtk@0.52.30
- @ohif/ui@0.59.0
- @ohif/viewer@2.4.0
* CR Update: Keep translation name
* CR Update: Reposition cy tag of about modal in the correct level
* feat: 🎸 Update DownloadModal to use new modal provider (#1119)
* feat: 🎸 Update AboutModal to use new modal provider
This feature updates the AboutModal component and Header to use the new
modal context (modal provider)
* feat(ModalProvider): Add title prop to provider
* feat(DownloadModal): Refactor to use new modal provider
* Update modal provider props
* Use translation for DownloadDialog
* CR Update: Use useTranslation hook
* CR Update: Extract downloadDialog and rename to downloadContent
* CR Update: Fix typo
* CR Update: Rename download content to viewport download form
* feat: 🎸 Filter by url query param for seriesInstnaceUID
* fix: Set SR viewport as active by interaction (#1118)
* fix: Set SR viewport as active by interaction
* quick fix
* (eslint) add "before" as global variables
* add data-cy
* add data-cy
* create E2E test
* (E2E) create custom command to set layout size
* remove .only e2e
* remove throttle for onScroll
* feat: 🎸 Code review in progress
Code review. Move retrieveMEtadata load to separate folders. Some minor
code clean up
* feat: 🎸 Code review. Missing changes from previous commit
* feat: 🎸 Code review missing changes from previous commit
When sorting, Criteria for instance must use instanceNumber and not
instancesNumber
* feat: 🎸 Code review. Add more jsdoc info
* feat: 🎸 Code review. Prettify changed code
* feat: 🎸 Code review
Changed case for seriesInstanceUID. Use qido to filter (async). Fallback
to no params and same api method(async)
* fix: #1075 Returning to the Study List before all series have finished loading throws multiple errors in console
* fix: 🐛 Addressing review feedback from issue #1075
Adding support for cancelable pattern
Closes: #1075
* fix: 🐛 update unit test for exports
Closes: #1075
* feat: 🎸 New modal provider
A new modal provider/context component to unify modal related code and
simplify modal use
Closes: #1086
* refactor(ModalContext): Keep current modal lib
* Update modal provider version according to PR #1116
* Update modal provider props to use inner props
* Add custom class prop
* CR Update: Refactor provider to extract specific modal
* Fix modal import
* CR Update: Move from spread to object assign
* CR Update: Add proptypes, use classnames dependency over interpolation and rename modal
* fix: get adapter store picker to show
* fix: error caused by DICOMWeb "empty object" for patientName
* formatting
* refactor: kill the pills
* Indicate modalities is missing if not provided
* Consistent modality display
* Make sure modalities styles are applied
* revert config
* fix: 🐛 Fix ghost shadow on thumb
Updated react-dnd package for the lates. Refactored thumbnail component
Closes: 1087
* feat: 🎸 Code review
Set flex instead of float. Add cypress tag to thumb container
* feat: 🎸 Code review. Revised style when no description
* init
* use workbox-window
* Try to accomodate SW hosted at non root url
* v5 updated namespaces
* Test w/ no prompt
* add icons to manifest
* remove scope for now
* add icon tile information to entrypoint
* See if we can skirt by without a duplicate install
* shift client claims to skip waiting message
* Remove prepended slash
* comment out cache handler for now
* Simplify service-worker to skip waiting and install when a new worker is detected
* Use generated icons
* Update rollbar config
* fix: Set SR viewport as active by interaction
* quick fix
* (eslint) add "before" as global variables
* add data-cy
* add data-cy
* create E2E test
* (E2E) create custom command to set layout size
* remove .only e2e
* remove throttle for onScroll
* feat: 🎸 Load spinner when selecting gcloud store. Add key on td
* feat: 🎸 Code review. Translate loading study status
* feat: 🎸 Code review. Minor code refactoring
* fix: add missing study and index declerations
* Newer version of react-dates (calendar input component)
* Add useMedia hook
* Add useDebounce hook
* Export hooks for consumption
* Pull search filter into own component
* StudyListWithData to StudyListRoute
* Rename pagination component
* Rename Toolbar
* CustomeDateRangePicker to plain ol' css
* Remove unused styles
* Misc
* Magic to make our "OR" filters work
* Play w/ Mobile styles
* Fix pagination pushing out max width for viewport
* Tidy up small and medium templates
* Remove unecessary nesting
* Better mobile header and logo styles
* Fix studyList font size
* Remove unused code
* hookup on click
* Fix table search selectors
* Cypress uses medium width
* Remove irrelevant test
* Fix primary sort
* Fix sort for our smaller displays
* fix study list sometimes longer than specified rowsPerPage
* Simplify date picker styles
* restore study date filters
* Fix about table styling
* fix take value for search
* Fix header sizing for viewer and list route
* Remove dead code
* Restore isLoading
* Update platform/ui/src/components/studyList/StudyList.styl
Co-Authored-By: Rodrigo Antinarelli <rodrigoantinarelli@gmail.com>
* Attempt first usage of translations w/ hooks
* Pull from react-i18n library
* Fit presets on to a single line
* add no results message
* Show error message in studyList table
* Update input selectors for e2e tests
* Make sure messages span all columns
* fix test selector for table results
* Skip hover for result rows
* fix imports
* Date filtering w/ config
* Default export
* Pushed to PageComponent
* Remove DropZone
This previously only worked for null/undefined studies. I'm unable to trigger the state by testing the data. This "might" have happened when using a fresh/empty PACS; but even an empty array of studies would not show
* Try workaround for percy snapshot
* Return our modified document
* test: some dark magic to make it possible to take screenshots of WebGL canvases
* Apply transformation directly to test DOM
* investigate: window:before:load
* Register flag in correct place; add experimental-webgl check
* Remaining canvas fixes
* Remove comment
* E2E tests: Stack Scroll, Right-click to zoom, Middle-click to Pan
* About modal tests and added some cypress selectors
* Checking app version number
* Removed accidental import
* Review fixes
* ci: first attempt at adding a gated docker PR Publish (#1038)
* ci: first attempt at adding a gated docker PR Publish
* See if we can use contexts to inject variables after approval
* fix build command
* try alternative context
* docs: pull request template that spells out PR checklist
* change context back to Docker Hub
* Switch optional approval to another workflow
* Make docker builds faster
* Update .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
* feat: 🎸 Load spinner when selecting gcloud store. Add key on td
* feat: 🎸 Code review. Translate loading study status
* feat: 🎸 Code review. Minor code refactoring
* fix: add missing study and index declerations
* test: Improviment on VTK beforeEach hook (#1057)
* feat: 🎸 Some improvements on table cell and react lifecycle
* feat: 🎸 Prevent component update on a not searchData changing
* feat: 🎸 Some cypress improv to pass ci
* feat: 🎸 Code reviewe and also fixing list for gcloud
* feat: 🎸 Code review. Add spinner on first load of store
* feat: 🎸 Code review. Centering loading list spinner icon
* Adding Percy Snapshot on VTK, PDF and Microscopy tests
* Small improvement to always click on first search result
* Wait for search result
* Added timouts all over the code to avoid intermitted failures in CI
* Increasing Default Timeout and other configs
* Cleaning up the code
* try force enabling gpu
* Try custom executor with newer version of chrome
* Fix based on review comments
* Increased minimum thumbnails expected on VTK test
* Fix config validation
* Make sure we're using the chrome browser
* feat: 🎸 Progressive volume loading for vtk viewport
Adds progressive volume loading for vtkjs viewport whilst the frames are
streamed from PACs and rebuilt in the volume.
Closes: closes#1051
* Update to react-vtkjs-viewport 0.3.0
* Test cases for extensions: VTK, HTML and PDF
* Test Cases: Delete measurement, Relabel and Description through Contextmenu
* Fix: PDF, HTML and VTK extensions
* CI: running into different folders for PWA and Script-tag tests
* CI: running into different folders for PWA and Script-tag tests
* CI: running into different folders for PWA and Script-tag tests
* Fix for VTK tests and Cornerstone Eraser tool
* Removed VTK alias from Cornerstone aliases initialization
* Temporary fix for Eraser tool
* Test workaround
* Use juno for vtk
* Shift VTK tests to PWA folder
* feat: 🎸 Only allow reconstruction of datasets that make sense
Only allow reconstruction of datasets which are imaging data, that have
frames in the same orientation, with the same size and make sense to be
reconstructed in 3D.
Closes: #561
* feat: Implement a 'Exit 2D MPR' button in the toolbar to act as a toggle when '2D MPR' button is clicked
* Move logic to exit MPR and toggling into ConnectedPluginSwitch and PluginSwitch. Also, discard the ConnectedExitPluginSwitch and ExitPluginSwitch components.
* Update ToolbarRow.js
* show package bundle progress
* Ability to run "quick builds" for faster feedback on status checks (e2e)
* ci: speed up PR checks
* specify quick build value
* ci: Set cache key to only use yarn.lock checksum
* Use increasingly general pattern for restoring the cache
* Avoid running script tag e2e tests twice
* Performance improvements for CI
* Valid YAML
* Valid YAML?
* Valid YAML!!!!
* Update Node image, update yarn version
* circle
* serve
* Fix for test scripts that were failing in CI
* Test cases for tools: Length and Angle
* Test cases implemented: Scroll series, Levels, Pan, Reset, Zoom
* Added test cases for tools: Cine, More, Layout, Invert, Rotate, FlipH, FlipV
* Fixes made according to comments on PR review
* Fixes for failing scenarios: Layout and Cine
* Test cases implemented: Cornerstone tools Clear and Eraser; Measurement panel Relabel and Description
* Fix for CI failure
* Better css chunk filenames depending on context
* skip minimize flag to speed up builds that are timing out (short-term fix)
* make sure our custom TerserJS config is actually applied
* Use SKIP_MINIMIZE flag for netlify and demo builds
* fix: 🐛 set current viewport as active when switching layouts
check if current viewport index is less than the current layout lenght
and set 0 if so or keep current selected cell index as active viewport
Closes: 999
* chore: 🤖 commenting out docker layer caching in the short-term
commenting out docker layer caching in the short-term
* refactor: 💡 refactor layout matrix index conditional
* Fix for test scripts that were failing in CI
* Test cases for tools: Length and Angle
* Test cases implemented: Scroll series, Levels, Pan, Reset, Zoom
* Added test cases for tools: Cine, More, Layout, Invert, Rotate, FlipH, FlipV
* Fixes made according to comments on PR review
* Fixes for failing scenarios: Layout and Cine
* fix: 🐛 Local file: failing when retrieving segmentation data
Fix segmentation data retrieval issues for local file. Changed from
fecthing to use cornerstone loadAndCache method
BREAKING CHANGE: DICOM Seg
Closes: part of #838
* Switch SEG retrieval to WADO-RS
* Forgot a debugger
* refactor: 💡 Code refactor. Minor changes into methods
* fix: 🐛 Load local files: PDF
Items:
1. FileLoaderService: used for serveral operations on local files(load it, get list of studies, group them, accepting dicom and pdf)
2. DicomLoaderService: used for loading dicom based on dataset and studies. Depending on type of dicom loader might change. WIP
3. Refactor PDF and handleSegmentationStorage to use DicomLoaderService
* fix: 🐛 Code review
* fix: 🐛 Code review. Changed:Folder organization and dicom file
Move fileLoaderService and others to a specific folder. When loading
dicom file change to only retrieve the file(not use cornerstone to cache
or anything else).
* fix: 🐛 Code review. Move dicomLoaderService to core
Moved dicomLoaderService to ohif/core and localFileLoaders to a specific
folder.
* fix: 🐛 Code review
Simplified method to get study for dicom file. Added error handling on
file loading. DicomLoaderService to be exposed on ohif/core/utils
instead.
* fix: 🐛 Reduce local load to one method only
Reduced local file load to one method only
* fix: 🐛 HTML to use dicomLoaderService. Prefer wadors than (uri)
* fix: 🐛 Code implementation for multiframe files
* fix: 🐛 Code review. Default local loader to dicom
Closes: 838
* fix: 🐛 Code review. Use relative path to require DICOMWeb
Closes: 838
* fix: 🐛 Code review. Fix unit test. Added DicomLoaderService mod
Closes: 838
* fix: 🐛 Code review. Add 'Seg' on left thumb
When getting/creating dataset get modality for file/image read
Closes: 838
* fix: 🐛 commonjs/umd fonts import
Importing font into index-umd.js and creating a simple font css file
with font-face
Closes: #724
* fix: 🐛 Enabling workbox to cache webfonts and fonts-stylesheets
Closes: #724
* fix: 🐛 Adding all type of fonts from google - Roboto
Closes: #724
* fix: 🐛 Set series into active viewport by clicking on thumbnail
Users should be able to set the series for the active viewport by
clicking it's thumbnail into Study browser
Closes: #895
* fix: 🐛 Set series into active viewport by clicking on thumbnail
Small refactor into onClick data callback and thumbnailClick function
Closes: #895
* fix: 🐛 Refactor thumbnail click code changes
* fix: 🐛 We must clear the sopInstanceUid if we don't update it together with the viewportSpecificData, preventing console warning.
* fix: 🐛 Cleaning up a few more code changes
* TEST E2E: Drag and drop thumbnail into viewport
* TEST E2E: Drag and drop thumbnail into viewport
* fix: add pollyfill to script-tag template
* Add wait's to command
* Try to store artifacts
* ci: updated artifact location
* Changing Patient to MisterMR
* Refactors based on PR comments
* Adding new sub-folders to separate the testing scripts according to context/features
* Adding test cases for Side Panels Measurements and Series
* Removing duplicated file OHIFStudyViewer.spec.js
* refactor: 💡 React components to consume appConfig using Context
React components to consume app configuration using React Context and
React Hooks. Non React components to continue using global variable
window.config. Related documentation also changed.
Closes: #725
* refactor: 💡 Removing unecessary code
On current React component there is no need to import useContext method
from React, so, removing it.
* refactor: 💡 Code review
Code review. Minor changes based on review inputs and moving userManager
to an init method
BREAKING CHANGE: #725Closes: #725
* docs: don't include implementation detail in docs
* docs: don't include implementation detail in docs
* docs: no need to specify implementation details in employment recipe
* docs: no need to specify implementation details in deployment recipe
* ci: test docs-publish
* Specify to use prod
* Babel should transpile with env set by webpack
* in-progress
* in-progress
* Polyfill for ie11 and edge features
* Ditch polyfills w/ babel - we'll use a service for now
* Bump tools version; shift vtk.js up a layer
* Specify we shouldn't target older than IE 11
* ditch babel plugins that should be covered by preset-env
* Add a top level build demo command
* Let our babel config determine settings
* Same babel fixes as PWA
* Rebuild deps that don't satisfy our target
* Mini helper script for excluding all node_modules, except...
* Shift vtk.js dep up a layer
* Kill core-js
* Export in a node happy way
* Updated yarn lock
* Set NODE_ENV when launching anything w/ WebPack
* docs: updated FAQ
* docs: on browser support
* Add support for redux browser extension
* misc. small clean-up
* docs: Remove roadmap page; add browser-support to sidebar
* Formatting
* Remove roadmap links
* Formatting
* ci: Remove config syntax error
* Simplified bug report template
* update community request template
* Update question's template
* simplify build scripts
* specify new script names
* fix: for measurement api being pruned by minimizer in prod builds
* Use named exports
* Simplify config
* Let's not do so much heavy lifting for a dev-server build
* fix dev build
* Add hotkeys to demo
* fix: jest babel config and env specific configs
* Remove call to non-existant command
* Shift experimental proposal plugin up a layer
* Use `https`
* Try with reduced number of package exceptions
* Try to resolve cypress issue
* Try to fix cypress issue in CI
* Skip https
* Set node_env before building with WebPack
* Watch command output
* ci: no output timeout increase
* ci: test docs-publish
* Specify to use prod
* Babel should transpile with env set by webpack
* in-progress
* in-progress
* Polyfill for ie11 and edge features
* Ditch polyfills w/ babel - we'll use a service for now
* Bump tools version; shift vtk.js up a layer
* Specify we shouldn't target older than IE 11
* ditch babel plugins that should be covered by preset-env
* Add a top level build demo command
* Let our babel config determine settings
* Same babel fixes as PWA
* Rebuild deps that don't satisfy our target
* Mini helper script for excluding all node_modules, except...
* Shift vtk.js dep up a layer
* Kill core-js
* Export in a node happy way
* Updated yarn lock
* Set NODE_ENV when launching anything w/ WebPack
* docs: updated FAQ
* docs: on browser support
* Add support for redux browser extension
* misc. small clean-up
* docs: Remove roadmap page; add browser-support to sidebar
* Formatting
* Remove roadmap links
* Formatting
* ci: Remove config syntax error
* Simplified bug report template
* update community request template
* Update question's template
* simplify build scripts
* specify new script names
* fix: for measurement api being pruned by minimizer in prod builds
* Use named exports
* Simplify config
* Let's not do so much heavy lifting for a dev-server build
* fix dev build
* Add hotkeys to demo
* fix: jest babel config and env specific configs
* Remove call to non-existant command
* Shift experimental proposal plugin up a layer
* Use `https`
* Try with reduced number of package exceptions
* Try to resolve cypress issue
* Try to fix cypress issue in CI
* Skip https
* ci: test docs-publish
* Specify to use prod
* Babel should transpile with env set by webpack
* chore: production defaults to true; set in --env.production by cli
* Remove lingering merge issue
* Add minimification plugins
* Need relative URLs to find root assets
* Default public url to forward slash in define plugin
* Don't wrap w/ react-hot-loader if we're building for production
* No need to log extensions
* Minimize using terser; and minimize css
* Import redux from es; this bypasses commonjs as import and fixes our "production build" warning
* Split commone webpack build for now to test hotfix
* postfix slash
* undefined safe env access
* Try to fix node_env prod issue w/ redux
* Set NODE_ENV production for all prod builds
* Syntax error
* nix tests
* Increase max amount of available memory
* Don't run bundle analyzer by default
* fix: asset resolution when at non-root route
* ci: test docs-publish
* Specify to use prod
* Babel should transpile with env set by webpack
* chore: production defaults to true; set in --env.production by cli
* Remove lingering merge issue
* Add minimification plugins
* Need relative URLs to find root assets
* Default public url to forward slash in define plugin
* Don't wrap w/ react-hot-loader if we're building for production
* No need to log extensions
* Minimize using terser; and minimize css
* Import redux from es; this bypasses commonjs as import and fixes our "production build" warning
* Split commone webpack build for now to test hotfix
* postfix slash
* undefined safe env access
* Try to fix node_env prod issue w/ redux
* Set NODE_ENV production for all prod builds
* Syntax error
* nix tests
* Increase max amount of available memory
* Don't run bundle analyzer by default
* ci: test docs-publish
* Require unit tests for dry run
* ci: Make sure our docs publish is executable
* Try to correct path issue
* Try repo prefix
* Try as yarn command
* Need a workspace to attach to from previous step
* Add before we call our bash script
* See if we can enforce commands being available -- or just install locally?
* Try again
* Try SSH
* Include username in gh https url
* Note regarding failure on PR branches
* Remove docs publish from PR workflow
* chore: ability to specify an alternative html-template at build time
* chore: add command to build demo PWA website output
* chore: remove unused CI code
* Testing GCP capabilities
* syntax
* Naming
* naming
* chore: WebPack output progress that we care about
* chore: Only publish the app config we care about
* PWA should publish source map
* Unused index.html file
* chore: Remove unused copy-webpack-plugin ignore
* Don't generate source map until we resolve memory issue
* ci: attempt to publish with GCP bucket deploy
* Update dev config to use new template loccations and env vars
* ci: test docs-publish
* Require unit tests for dry run
* ci: Make sure our docs publish is executable
* Try to correct path issue
* Try repo prefix
* Try as yarn command
* Need a workspace to attach to from previous step
* Add before we call our bash script
* See if we can enforce commands being available -- or just install locally?
* Try again
* Try SSH
* Include username in gh https url
* Note regarding failure on PR branches
* Remove docs publish from PR workflow
* chore: ability to specify an alternative html-template at build time
* chore: add command to build demo PWA website output
* chore: remove unused CI code
* Testing GCP capabilities
* syntax
* Naming
* naming
* chore: WebPack output progress that we care about
* chore: Only publish the app config we care about
* PWA should publish source map
* Unused index.html file
* chore: Remove unused copy-webpack-plugin ignore
* Don't generate source map until we resolve memory issue
* ci: attempt to publish with GCP bucket deploy
* ci: test docs-publish
* Require unit tests for dry run
* ci: Make sure our docs publish is executable
* Try to correct path issue
* Try repo prefix
* Try as yarn command
* Need a workspace to attach to from previous step
* Add before we call our bash script
* See if we can enforce commands being available -- or just install locally?
* Try again
* Try SSH
* Include username in gh https url
* Note regarding failure on PR branches
* Remove docs publish from PR workflow
* chore: ability to specify an alternative html-template at build time
* chore: add command to build demo PWA website output
* chore: remove unused CI code
* Testing GCP capabilities
* syntax
* Naming
* naming
* ci: test docs-publish
* Require unit tests for dry run
* ci: Make sure our docs publish is executable
* Try to correct path issue
* Try repo prefix
* Try as yarn command
* Need a workspace to attach to from previous step
* Add before we call our bash script
* See if we can enforce commands being available -- or just install locally?
* Try again
* Try SSH
* Include username in gh https url
* Note regarding failure on PR branches
* Remove docs publish from PR workflow
The props for ExpandableToolMenu were changed from expecting `text` to
expecting `label` for the menu's label. These changes make sure we're
providing it that way.
* init
* more shifting
* Move @babel dependencies up to workspace root
* Begin updating dependent libraries to use sync'd webpack builds w/ watches
* Commit changes before a long weekend
* Split packages into platform and extensions
* Consolidate how/where we specify file/module type entrypoints
* Make it possible to pass in extensions as App props
* Resolve viewer's modules
* Target for UMD bundle
* Add Webpack Stylus loader
* Provide WebPack build options for microscopy, vtk, and ui
* Better entrypoint for extensions
* Push changes up to switch PCs
* Fix ESM symlink build for Viewers
* Shift docs to root
* Specify additional lerna config props
* Begin providing basic readme info
* Rename example extension folder
* Shift links to bottom of doc
* First attempt at a netlify deploy preview
* Attempt to fix deploy preview build
* push workspace enabled to initial command; remove second yarn install; use npx to call gitbook cli commands
* Try to use global gitbook-cli
* Export node_modules path
* More agressive with modifying PATH
* Follow deploy log output advice
* try again to set bin path
* Try swapping bash with a new shell
* Try bash -l instead of exec bash
* Annd let's try again
* and again
* We may have figured it out johnny, boy
* We need to pull cornerstone-wado-image-loader files from hoisted node_modules
* Attempt to fix ticks/escapes
* Change copy syntax; try running tests on viewers from root for circleci
* Lower version to match circleci image
* Try alternative jest-canvas-mock location and version file syntax
* Run version command instead of calling node directly
* Try alternative jest transform
* Set path and enable workspaces
* Add codecov flags
* Use cpx so our copying finishes?
* Get all platform unit tests to run
* Run and report individually and in parallel
* Try once relying on codecov yaml to split w/ flags
* Add projects to split by flags
* Generate separate reports
* Trigger codecov after everything has finished running; these may not support flags
* Use recommended flags from issue comments for codecov
* Fix typo
* Remove clear flag
* Shift back to calling codecov from root
* Generate example for codecov issue
* Try fixing paths
* Simplify
* Try using codecov orb
* Bump circleci version
* Upload core and viewer
* Use full string paths
* Remove individual codecov calls
* Fix dir
* Combine files before upload
* Escape anchors
* tryfix syntax
* Escape string literal
* Combine lines to reduce path
* long paths
* Use home alias
* Fix filename
* Try to see the contents of our cat'd file
* Also upload `core`
* Try running with aliased folder
* Fix path; split PR and Merge unit tests into separate jobs
* Set default threshold
* Fix typo
* Changing to scoped package names
* Adding note
* Catch more updates
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.0
- @ohif/extension-dicom-html@0.0.4-alpha.0
- @ohif/extension-dicom-microscopy@0.0.9-alpha.0
- @ohif/extension-dicom-pdf@0.0.8-alpha.0
- @ohif/extension-vtk@0.1.4-alpha.0
- @ohif/core@0.11.1-alpha.0
- @ohif/i18n@0.2.3-alpha.0
- @ohif/ui@0.2.18-alpha.0
- @ohif/viewer@0.0.22-alpha.0
* Clean up primary readme
* Support for dev and dev:* commands
* Shift build command; satisfy default PWA build
* Remove old scripts
* Clean up UI to set webpack scripts
* Tidy up project links
* Clean duplicate code in UI project
* Update UI project's docs
* Clean up ui and i18n config
* Reduce duplicate code in `@ohif/core`
* Fix @ohif/ui versions
* bump @ohif/core versions
* Redux testkit dep
* Remove unused/duplicate config files for projects/packages
* ohif-core --> @ohif/core
* Safer publish command
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.1
- @ohif/extension-dicom-html@0.0.4-alpha.1
- @ohif/extension-dicom-microscopy@0.0.9-alpha.1
- @ohif/extension-dicom-pdf@0.0.8-alpha.1
- @ohif/extension-vtk@0.1.4-alpha.1
- @ohif/core@0.11.1-alpha.1
- @ohif/i18n@0.2.3-alpha.1
- @ohif/ui@0.2.18-alpha.1
- @ohif/viewer@0.0.22-alpha.1
* test version bump
* Add global prettier config
* chore(release): publish %s [skip ci]
- @ohif/viewer@0.0.22-alpha.2
* test lerna publish
* Update package.jsons
* Fix build scripts
* catch changes
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.2
- @ohif/extension-dicom-html@0.0.4-alpha.2
- @ohif/extension-dicom-microscopy@0.0.9-alpha.2
- @ohif/extension-dicom-pdf@0.0.8-alpha.2
- @ohif/extension-vtk@0.1.4-alpha.2
- @ohif/core@0.11.1-alpha.2
- @ohif/i18n@0.2.3-alpha.2
- @ohif/ui@0.2.18-alpha.2
- @ohif/viewer@0.0.22-alpha.3
* fix eslint issues caused by eslint 6 and our react-app config
* Publish with canary tag
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.3
- @ohif/extension-dicom-html@0.0.4-alpha.3
- @ohif/extension-dicom-microscopy@0.0.9-alpha.3
- @ohif/extension-dicom-pdf@0.0.8-alpha.3
- @ohif/extension-vtk@0.1.4-alpha.3
- @ohif/core@0.11.1-alpha.3
- @ohif/i18n@0.2.3-alpha.3
- @ohif/ui@0.2.18-alpha.3
- @ohif/viewer@0.0.22-alpha.4
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.4
- @ohif/extension-dicom-html@0.0.4-alpha.4
- @ohif/extension-dicom-microscopy@0.0.9-alpha.4
- @ohif/extension-dicom-pdf@0.0.8-alpha.4
- @ohif/extension-vtk@0.1.4-alpha.4
- @ohif/core@0.11.1-alpha.4
- @ohif/i18n@0.2.3-alpha.4
- @ohif/ui@0.2.18-alpha.4
- @ohif/viewer@0.0.22-alpha.5
* Simplify build
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.5
- @ohif/extension-dicom-html@0.0.4-alpha.5
- @ohif/extension-dicom-microscopy@0.0.9-alpha.5
- @ohif/extension-dicom-pdf@0.0.8-alpha.5
- @ohif/extension-vtk@0.1.4-alpha.5
- @ohif/core@0.11.1-alpha.5
- @ohif/i18n@0.2.3-alpha.5
- @ohif/ui@0.2.18-alpha.5
- @ohif/viewer@0.0.22-alpha.6
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.6
- @ohif/extension-dicom-html@0.0.4-alpha.6
- @ohif/extension-dicom-microscopy@0.0.9-alpha.6
- @ohif/extension-dicom-pdf@0.0.8-alpha.6
- @ohif/extension-vtk@0.1.4-alpha.6
- @ohif/core@0.11.1-alpha.6
- @ohif/i18n@0.2.3-alpha.6
- @ohif/ui@0.2.18-alpha.6
- @ohif/viewer@0.0.22-alpha.7
* Split version and publish
* chore(release): publish %s [skip ci]
- @ohif/extension-cornerstone@0.0.39-alpha.7
- @ohif/extension-dicom-html@0.0.4-alpha.7
- @ohif/extension-dicom-microscopy@0.0.9-alpha.7
- @ohif/extension-dicom-pdf@0.0.8-alpha.7
- @ohif/extension-vtk@0.1.4-alpha.7
- @ohif/core@0.11.1-alpha.7
- @ohif/i18n@0.2.3-alpha.7
- @ohif/ui@0.2.18-alpha.7
- @ohif/viewer@0.0.22-alpha.8
* Try simplify netlify build
* react-viewerbase --> @ohif/ui
* add test for stylus loader
* Try new way to specify publish path
* Use an output folder that won't be ignored
* Try move command
* fiddle with paths
* Dig for some information
* Make sure we're in root for our commands
* Remove discovery
* Setup script-tag example
* Fix typo
* Move config folder
* Update cornerstone extension to use shared/root webpack configs
* capture changes
* Update extension webpack configs
* Don't check in docz output
* Fix babel runtime resolution issue
* Simplify ui build steps
* Push in progress
* Shift directories
* Get viewer dev path to work
* Fix viewer commonjs build
* Fix build pwa config for viewers
* Make sure our package specific command can be called from root
* Update notes
* Fix imports and misc. merge notes
* Bump wado-image-loader version
* Switch up commands to remove webworkers copy
* Fix CI config
* Fix more broken package references
* Add react-dropzone
* Persist so e2e test can use
* Fix lockfile
* Use cypress orb to simplify CI
* Fix config
* Try again
* Install yarn latest for orb
* Install yarn a different way
* Wait on correct port
* Run tests in viewer project
* Fix cypress config
* Make Cypress happier - use default location
* Simplify e2e testing
* Capture UI changes since fork
* Catch core up
* Grab latest deps after merge
* Fix broken import
* Make sure cornerstone-wado-image-loader resolves to 3+
* Note regarding orbs
* Fix refresh on 404 routes
* Fix odd error for cornerstone-wado-image-loader
* Different target for UMD
* Simplify dev script
* Try to get fancy with netlify output
* Let's do it again
* Try to fix measurementTools issue
* See if we can get our lerna magic to work on merge to monorepo branch
* fix(LabellingFlow): Fixes search items
Includes a function to add the items related to root element
fix#508
* fix(LabellingManager): Fixes z-index problem with header menu
Fixes z-index problem with header menu
fix#508
* fix(LabellingFlow): Includes overlay for select tree when open
fix#508
* fix(LabellingManager): Changes backgroud color to highlight the modal text
fix#508
* fix(LabellingFlow): Adjusts relabel position in the page
fix#508
* fix(LabellingFlow): Fixes select tree position and include calculation to put at the center of mouse
fix#508
* fix(LabellingFlow): Fixes autofocus and refresh page after hitting enter
fix#508
`onMeasurementsChanged` currently defines a function map every time it is called. This function map includes a throttle on the `modified` function which is not being used because the function is called at most once per time it is instantiated. These changes elevate the map definition to the file level, since what it is defining does not change based on the other executed code.
* fix(package.json): Resolve react/react-dom dependency conflict for embedded users
Some of the recent changes around the script-tag support for ohif/Viewers included moving react and
react-dom from peerDependencies to dependencies. This caused an error for embedded consumers of the
viewer because there could be multiple versions of react included. The error in the console points
to this link: https://reactjs.org/warnings/invalid-hook-call-warning.html. These changes are
necessary to resolve the issue for embedded users and don't seem to break the standalone version
either.
* fix(script-tag/index.html): Add `react` and `react-dom` as external scripts for cypress tests
The cyrpress tests won't pass unless we add the `react` and `react-dom` dependencies as external
scripts since they're no longer first order depdencies.
* Bump @ohif/extenions-cornerstone react-cornerstone-viewport dep and cut release
* fix: bump @ohif/extension-cornerstone version to latest
* Catching the yarn lock changes
* Cut new release for cornerstone extension and update Viewers to use it
* Add new commands to netlify dmeo
* Flip directions for next/previous image
* feat(commandsModule): Add `previousImage` and `nextImage` actions and commands
This change adds the keybindings for previousImage (down) and nextImage (up) to the default
configuration and adds the command and action necessary to support it. This pull request is
dependent upon https://github.com/cornerstonejs/cornerstoneTools/pull/1025 which exports the scroll
utility it uses.
* style(default.js): Switch tabs to spaces
* fix(commandsModule): import `scroll` through cornerstoneTools.import
* Bump @ohif/extenions-cornerstone react-cornerstone-viewport dep and cut release
* fix: bump @ohif/extension-cornerstone version to latest
* Catching the yarn lock changes
* fix(Viewer): Removes fixed modality insert and starting using the information returned from ohif-cor
* fix(Viewer): Includes condition when display set does not have modality information to use UN for un
This pull request adds the ability to use query parameters to pass filters into the StudyList from
the url. These parameters are of the same form used by the QIDO requests to apply the filters. This
solution seemed to me to be the most obvious way to manage them. There's one open question however,
around what to do with the parameters after the initial load. For now, the URL parameters are
overridden the moment the user tries to add another filter. Depending on review feedback it seems
like it may make more sense for those query parameter filters to be "permanent" and so any further
filtering would augment those parameters rather than replace them.
* Snapshot -- Switching branches
* fix classes and hooks for panel componet
* Restore button functionality
* feat: support for expandableToolMenu
* Shift cornerstoneTools config up a layer, and use globalToolSync
* Remaining initCornerstoneTools changes
* Pull in Segmentation Plugin
* Shift MeasurementsPanel to an extension
* Note regarding where data is coming from
* Make sure measurement callback is available
* Bump core version
* Shift MeasurementsTable to a local extensions directory
* Register appCommands as an extension
* Update package dependencies and yarn lock
* Support for panel width
* Ability to pass props to our panel component
* Add a safety check around calling our tacked on method for tool options
* Left sidebar plugins + fix activeIndex prop passed to sidebar.
* fix: viewer height
Now in a shared container w/ top bar, so we need to factor that in when calculating height
* lock file latest
* Update thumbnails if studies has changes
* bump cornerstone version to resolve globalToolSynch history issue
* Default panel to open; studies optional
* Bump minor version for ohif-cornestone-extension
* Simplify button logic
* Accommodate odd roundedButtonGroup value change emit
* Map viewers + selectedViewport instead of pulling off the window
* update i18n version -- already published
* update ohif/i18n version and add modules
* update ohif/i18n version
* update translating documentation
* replace addLocales method and exported modules
* lock files
* Update index.js
* fix(@ohif/i18n): export custom methods in the main i18n object
`initI18n`, `addLocales` and `T` are now being exported inside the main `i18n` object.
* remove unecessary dependencies
* update vtk-extension lock file
* Creates E2E tests using Cypress and includes two tests
* Improves yarn.lock file
* Includes documentation
* Cypress project id
* test e2e w/ ci and video
* run unit command before e2e
* Also cache cypress
* Persist cypress to next build step
* Try a different path
* Try without working dir
* Persist less data, but restore yarn/cypress cache in next step
* Install cypress to invalidate cache
* Add e2e as a blocker for merged publishing
I encountered this bug trying to use the IHEInvokeImageDisplay API in order to render multiple DICOM
studies in the viewer. Unfortunately, the component was no longer working and required some changes
in order to access the query parameters used in the API. These changes update the component to use
react router to access the query parameters and pass them to ConnectedViewerRetrieveStudyData as
appropriate. The move from ViewerRetrieveStudyData to ConnectedViewerRetrieveStudyData was necessary
in order to access the active server from the redux store. I also made a change from a series of if
clauses to a switch statement as it seemed a little more appropriate given the nature of the code
paths. Happy to change that back if needed. The PATIENT and default paths were not fixed as a part
of this work because we'll need a way to pass the filter in to the StudyList component.
<p><strong>ohif-viewer</strong> is a zero-footprint medical image viewer provided by the <a href="http://ohif.org/">Open Health Imaging Foundation (OHIF)</a>. It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support <a href="https://www.dicomstandard.org/dicomweb/">DICOMweb</a>.</p>
<h1>OHIF Medical Imaging Viewer</h1>
<p><strong>The OHIF Viewer</strong> is a zero-footprint medical image viewer provided by the <a href="http://ohif.org/">Open Health Imaging Foundation (OHIF)</a>. It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support <a href="https://www.dicomstandard.org/dicomweb/">DICOMweb</a>.</p>
</div>
@@ -11,196 +11,231 @@
<a href="https://github.com/OHIF/Viewers/tree/master/docs/latest">Edit the docs</a>
-[Report a Bug 🐛](https://github.com/OHIF/Viewers/issues/new?assignees=&labels=Community%3A+Report+%3Abug%3A&template=---bug-report.md)
- [Request a Feature 🚀](https://github.com/OHIF/Viewers/issues/new?assignees=&labels=Community%3A+Request+%3Ahand%3A&template=---feature-request.md)
- [Ask a Question 🤗](https://github.com/OHIF/Viewers/issues/new?assignees=&labels=Community%3A+Question+%3Aquestion%3A&template=---support-question.md)
3. Add `OHIF/Viewers` as a `remote` repository (the `upstream`)
For commercial support, academic collaberations, and answers to common
| [@ohif/core][platform-core] | Business logic and classes that model the data, services, and extensions that are framework agnostic | [NPM][core-npm] |
| [@ohif/i18n][platform-i18n] | Language files and small API for wrapping component/ui text for translations | [NPM][i18n-npm] |
| [@ohif/viewer][platform-viewer] | The OHIF Viewer. Where we consume and configure all platform library's and extensions | [NPM][viewer-npm] |
| [@ohif/ui][platform-ui] | Reusable React components we consume and compose to build our Viewer's UI | [NPM][ui-npm] |
Please file an issue for bugs, missing documentation, or unexpected behavior.
### Extensions
[**See Bugs**][bugs]
This is a list of Extensions maintained by the OHIF Core team. It's possible to
customize and configure these extensions, and you can even create your own. You
can [read more about extensions here][ohif-extensions].
### 💡 Feature Requests
Please file an issue to suggest new features. Vote on feature requests by adding
a 👍. This helps maintainers prioritize what to work on.
[**See Feature Requests**][requests-feature]
### ❓ Questions
For questions related to using the library, please visit our support community,
or file an issue on GitHub.
[Google Group][google-group]
## Roadmap
If you want to know what's planned for the very near future,
[check out our roadmap](https://ohif.canny.io/). The best way to influence when
and what is worked on is to contribute to the conversation by creating GitHub
issues, and contributing code through pull requests. OHIF's high level
priorities for the near future are:
- Feature parity with version 1
- Extension and configuration improvements with key integration partners
- Continued Developer Experience Improvements
- Segmentation Tools, and improved VTK.js support
More granular information will make it's way to the backlog as these items
become scoped for development by core maintainers.
> Don't hesitate to ask questions, propose features, or create pull requests.
> We're here, we're listening, and we're ready to build the best open source
| [@ohif/extension-dicom-pdf][extension-dicom-pdf] | View DICOM wrapped PDFs in a viewport | [NPM][pdf-npm] |
| [@ohif/extension-vtk][extension-vtk] | Volume rendering, reconstruction, and 3D visualizations | [NPM][vtk-npm] |
## Acknowledgments
@@ -224,41 +259,71 @@ Cancer Institute, Informatics Technology for Cancer Research (ITCR) program,
under a
[grant to Dr. Gordon Harris at Massachusetts General Hospital (U24 CA199460)](https://projectreporter.nih.gov/project_info_description.cfm?aid=8971104).
Extensions add new functionality to the viewer by registering one or more modules. They go one step further than configuration in that they allow us to inject custom React components, so long as they adhere to the module's interface. This can be something as simple as adding a new button to the toolbar, or as complex as a new viewport capable of rendering volumes in 3D.
## Overview
At a glance, an extension is a class or object that has a `getExtensionId()` method, and one or more "module" methods. You can find an abbreviated extension below, or [view the source](https://github.com/OHIF/Viewers/blob/react/extensions/ohif-cornerstone-extension/src/OHIFCornerstoneExtension.js#L32-L65) of our `cornerstone` viewport extension.
```js
classmyCustomExtension{
/** Required */
getExtensionId:()=>'my-extension-id';
/** React component that receives props from ConnectLayoutManager
* If more than one viewport module is registered, SopClassHandler
* is used to help determine which component is used */
getViewportModule:()=>reactViewportComponent;
/** React component that adds buttons/behavior to the viewer Toolbar */
getToolbarModule:()=>reactToolbarComponent;
/** Provides a whitelist of SOPClassUIDs the viewport is capable of rendering.
* Can modify default behavior for methods like `getDisplaySetFromSeries` */
There are a few different kinds of modules. Each kind of module allows us to extend the viewer in a different way, and provides a consistent API for us to do so. You can find a full list of the [different types of modules `in ohif-core`](https://github.com/OHIF/ohif-core/blob/43c08a29eff3fb646a0e83a03a236ddd84f4a6e8/src/plugins.js#L1-L6). Information on each type of module, it's API, and how we determine when/where it should be used is included below:
#### Viewport
An extension can register a Viewport Module by providing a `getViewportModule()` method that returns a React Component. The React component will receive the following props:
<center><i>An example of three Viewports</i></center>
For a complete example implementation, [check out the OHIFCornerstoneViewport](https://github.com/OHIF/Viewers/blob/react/extensions/ohif-cornerstone-extension/src/OHIFCornerstoneViewport.js).
#### Toolbar
An extension can register a Toolbar Module by providing a `getToolbarModule()` method that returns a React Component. The component does not receive any props. If you want to modify or react to state, you will need to connect to the redux store.
Toolbar components are rendered in the `ToolbarRow` component.
For a complete example implementation, [check out the OHIFCornerstoneViewport's Toolbar Module](https://github.com/OHIF/Viewers/blob/react/extensions/ohif-cornerstone-extension/src/ToolbarModule.js).
#### SopClassHandler
...
#### Panel
> The panel module is not yet in use.
### Registering Extensions
Extensions are registered for the application at startup. The `ExtensionManager`, exposed by `ohif-core`, registers a list of extensions with our application's store. Each module provided by the extension becomes available via `state.plugins.availablePlugins`, and consists of three parts: id, type ([PLUGIN_TYPE](https://github.com/OHIF/ohif-core/blob/43c08a29eff3fb646a0e83a03a236ddd84f4a6e8/src/plugins.js#L1-L6)), and the return value of the module method.
In a future version, we will likely expose a way to provide the extensions you would like included at startup.
A small number of powerful extensions for popular use cases are maintained by OHIF. They're co-located in the [`OHIF/Viewers`](https://github.com/OHIF/Viewers/tree/react/) repository, in the top level [`extensions/`](https://github.com/OHIF/Viewers/tree/react/extensions) directory.
Advanced topics go beyond basic configuration and deployment. Their goal is to provide insight into this project's architecture and guidance on leveraging extensions.
You can also create a new config file and specify its path relative to the build
output's root by setting the `APP_CONFIG` environment variable. You can set the
value of this environment variable a few different ways:
- ~[Add a temporary environment variable in your shell](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-temporary-environment-variables-in-your-shell)~
- Previous `react-scripts` functionality that we need to duplicate with
`dotenv-webpack`
- ~[Add environment specific variables in `.env` file(s)](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env)~
- Previous `react-scripts` functionality that we need to duplicate with
You can also create a new config file and specify its path relative to the build
output's root by setting the `REACT_APP_CONFIG` environment variable. You can
set the value of this environment variable a few different ways:
- [Add a temporary environment variable in your shell](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-temporary-environment-variables-in-your-shell)
- [Add environment specific variables in `.env` file(s)](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env)
You can read more about CORS in this Medium article: [Understanding
CORS][understanding-cors]
@@ -121,13 +121,9 @@ likely want to update:
#### OHIF Viewer
The OHIF Viewer's configuration is imported from a static `.js` file and made
available globally at `window.config`. The configuration we use is set to a
specific file when we build the viewer, and determined by the env variable:
`REACT_APP_CONFIG`. You can see where we set its value in the `dockerfile` for
this solution:
The OHIF Viewer's configuration is imported from a static `.js` file. The configuration we use is set to a specific file when we build the viewer, and determined by the env variable: `APP_CONFIG`. You can see where we set its value in the `dockerfile` for this solution:
The OHIF Viewer's configuration is imported from a static `.js` file and made
available globally at `window.config`. The configuration we use is set to a
specific file when we build the viewer, and determined by the env variable:
`REACT_APP_CONFIG`. You can see where we set its value in the `dockerfile` for
this solution:
The OHIF Viewer's configuration is imported from a static `.js` file. The configuration we use is set to a specific file when we build the viewer, and determined by the env variable: `APP_CONFIG`. You can see where we set its value in the `dockerfile` for this solution:
You can also create a new config file and specify its path relative to the build
output's root by setting the `REACT_APP_CONFIG` environment variable. You can
set the value of this environment variable a few different ways:
- [Add a temporary environment variable in your shell](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-temporary-environment-variables-in-your-shell)
- [Add environment specific variables in `.env` file(s)](https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env)
| ** Can't retrieve Study List over DICOMWeb** | 1. QIDO root URL is incorrect<br> 2. DICOM Web is not enabled on PACS |
| ** Can't retrieve images** | 1. WADO Root URL is incorrect<br> 2. DICOM Web is not enabled on PACS<br> 3. HTTP Basic Authentication username and password are incorrect or not provided. |
## Debugging Steps
### Can't retrieve Study List over DICOMWeb
1. Check that you can query your PACS using an alternative DICOM Web client
(e.g. cURL, or a Web Browser). If you cannot, then your PACS is configured
incorrectly. Refer to the documentation of the image archive.
Renders text and HTML content for <a href="https://github.com/OHIF/Viewers/blob/react/extensions/ohif-dicom-html-extension/src/OHIFDicomHtmlSopClassHandler.js#L7-L15">specific SopClassUIDs</a>.
Renders text and HTML content for <a href="https://github.com/OHIF/Viewers/blob/master/extensions/dicom-html/src/OHIFDicomHtmlSopClassHandler.js#L4-L12">specific SopClassUIDs</a>.
Renders PDFs for a <a href="https://github.com/OHIF/Viewers/blob/react/extensions/ohif-dicom-pdf-extension/src/OHIFDicomPDFSopClassHandler.js#L8">specific SopClassUID</a>.
Renders PDFs for a <a href="https://github.com/OHIF/Viewers/blob/master/extensions/dicom-pdf/src/OHIFDicomPDFSopClassHandler.js#L4-L6">specific SopClassUID</a>.
Renders Microscopy images for a <a href="https://github.com/OHIF/Viewers/blob/react/extensions/ohif-dicom-microscopy-extension/src/DicomMicroscopySopClassHandler.js#L6">specific SopClassUID</a>.
Renders Microscopy images for a <a href="https://github.com/OHIF/Viewers/blob/master/extensions/dicom-microscopy/src/DicomMicroscopySopClassHandler.js#L5-L7">specific SopClassUID</a>.
| [Commands](./modules/commands.md) | Adds named commands, scoped to a context, to the CommandsManager | `setToolActive()`, `nextSeries()` |
| [Panel](./modules/panel.md) | Adds left or right hand side panels | `<ThumbnailList />`, `<MeasurementsTable />` |
| [SOPClassHandler](./modules/sop-class-handler.md) | Determines how retrieved study data is split into "DisplaySets" | `getDisplaySetFromSeries()` |
| [Toolbar](./modules/toolbar.md) | Adds buttons or custom components to the toolbar | Toolbar button, nested buttons, custom |
| [Viewport](./modules/viewport.md) | Adds a component responsible for rendering a "DisplaySet" | `<CornerstoneViewport />`, `<DicomPdfViewport />` |
<figure style="text-align: center; font-style: italic;">Tbl. Module types with abridged descriptions and examples. Each module links to a dedicated documentation page.</figure>
### Contexts
The `@ohif/viewer` tracks "active contexts" that extensions can use to scope
their functionality. Some example contexts being:
- Route: `ROUTE:VIEWER`, `ROUTE:STUDY_LIST`
- Active Viewport: `ACTIVE_VIEWPORT:CORNERSTONE`, `ACTIVE_VIEWPORT:VTK`
An extension module can use these to say "Only show this Toolbar Button if the
active viewport is a Cornerstone viewport." This helps us use the appropriate UI
and behaviors depending on the current contexts.
For example, if we have hotkey that "rotates the active viewport", each Viewport
module that supports this behavior can add a command with the same name, scoped
to the appropriate context. When the `command` is fired, the "active contexts"
are used to determine the appropriate implementation of the rotate behavior.
## Consuming Extensions
We consume extensions, via the `ExtensionManager`, in our `@ohif/viewer`
project.
```js
constextensionManager=newExtensionManager({
commandsManager,
servicesManager,
});
// prettier-ignore
extensionManager.registerExtensions([/** **/]);
```
The `@ohif/viewer` project handles data fetching, basic routing, wires up UI
services, and is the home to the more bespoke application logic that doesn't
make as much sense to make reusable.
Long-term, replacing the `@ohif/viewer` application and consuming extensions
(and the `ExtensionManager`) in your own project is the ideal path for
applications requiring a high degree of customization that can't be achieved
with current theming, configuration, extension, and services support.
If you're not sure how to achieve your goals with the extensibility available
today, create a GitHub issue!
### `ExtensionManager`
The `ExtensionManager` is a class made available to us via the `@ohif/core`
project (platform/core). Our application instantiates a single instance of it,
and provides a `ServicesManager` and `CommandsManager` along with the application's
configuration through the appConfig key (optional).
```js
constcommandsManager=newCommandsManager();
constservicesManager=newServicesManager();
constextensionManager=newExtensionManager({
commandsManager,
servicesManager,
appConfig
});
```
The `ExtensionManager` only has a few public members:
-`registerExtension` - Registers a single extension
-`registerExtensions` - Registers an array of extensions
-`modules` - An object containing registered extensions by `MODULE_TYPE`
During registration, lifecycle hooks and modules have access to the extension's config,
the application's config and `ExtensionManager`'s `ServicesManager` and `CommandsManager` instances.
Our `@ohif/viewer` uses the `modules` member to access registered extensions at
appropriate places in our application.
## Maintained Extensions
A small number of powerful extensions for popular use cases are maintained by
OHIF. They're co-located in the [`OHIF/Viewers`][viewers-repo] repository, in
the top level [`extensions/`][ext-source] directory.
| `commandFn` | func | The function to call when command is run. Receives `options` and `storeContexts`. |
| `storeContexts` | string[] | (optional) Expected state objects to be passed in as props. Located using `getAppState` fn defined at `CommandsManager`'s instatiation. |
| `options` | object | (optional) Arguments to pass at the time of calling to the `commandFn` |
| `context` | string[] or string | (optional) Overrides the `defaultContext`. Let's us know if command is currently "available" to be run. |
## Command Behavior
**I have many similar commands. How can I share their `commandFn` and make it
reusable?**
This is where `storeContexts` and `options` come in. We use these in our
`setToolActive` command. `storeContexts` helps us identify our `activeViewport`,
and `options` allow us to pass in the name of a tool we would like to set as
active.
**If there are multiple valid commands for the application's active contexts**
- What happens: all commands are run
- When to use: A `clearData` command that cleans up state for multiple
extensions
**If no commands are valid for the application's active contexts**
- What happens: a warning is printed to the console
- When to use: a `hotkey` (like "invert") that doesn't make sense for the
current viewport (PDF or HTML)
## `CommandsManager`
The `CommandsManager` is a class defined in the `@ohif/core` project. A single
instance of it should be defined in the consuming application, and it should be
used when constructing the `ExtensionManager`.
### Instantiating
When we instantiate the `CommandsManager`, we need to pass it two methods:
-`getAppState` - Should return the application's state when called
-`getActiveContexts` - Should return the application's active contexts when
called
These methods are used internally to help determine which commands are currently
valid, and how to provide them with any state they may need at the time they are
called.
```js
constcommandsManager=newCommandsManager({
getAppState,
getActiveContexts,
});
```
### Public API
If you would like to run a command in the consuming app or an extension, you can
// Creates a new context; clears the context if it already exists
commandsManager.createContext('string');
```
### Contexts
It is up to the consuming application to define what contexts are possible, and
which ones are currently active. As extensions depend heavily on these, we will
likely publish guidance around creating contexts, and ways to override extension
defined contexts in the near future. If you would like to discuss potential
changes to how contexts work, please don't hesistate to createa new GitHub
issue.
[Some additional information on Contexts can be found here.](./../index.md#contexts)
Loaded 100 of 1222 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.