-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathViewerRouting.bundle.8ad7ea9b66421a4d8fce.js.map
1 lines (1 loc) · 15.9 KB
/
ViewerRouting.bundle.8ad7ea9b66421a4d8fce.js.map
1
{"version":3,"sources":["webpack:///./customHooks/useQuery.js","webpack:///./routes/ViewerRouting.js","webpack:///./googleCloud/api/GoogleCloudApi.js","webpack:///./googleCloud/utils/getServers.js","webpack:///./customHooks/useServer.js"],"names":["URLSearchParams","useLocation","search","UrlUtil","utils","urlUtil","getSeriesInstanceUIDs","seriesInstanceUIDs","routeLocation","queryFilters","queryString","getQueryFilters","querySeriesUIDs","_seriesInstanceUIDs","paramString","parseParam","ViewerRouting","routeMatch","match","location","params","project","dataset","dicomStore","studyInstanceUIDs","authToken","useQuery","get","user","getAccessToken","server","useServer","studyUIDs","seriesUIDs","ConnectedViewerRetrieveStudyData","propTypes","PropTypes","shape","string","isRequired","any","GoogleCloudApi","accessToken","console","error","this","urlBase","urlStr","config","url","URL","data","fetch","fetchConfig","response","json","status","nextPageToken","pageToken","doRequest","key","subPage","hasOwnProperty","concat","isError","message","projectId","urlBaseProject","locationId","Error","method","headers","Authorization","healthcareApiEndpoint","getServers","name","wadoUriRoot","qidoRoot","wadoRoot","imageRendering","thumbnailRendering","type","active","supportsFuzzyMatching","qidoSupportsIncludeField","isValidServer","isEqualServer","toCompare","serverLength","Object","keys","length","toCompareLength","getActiveServer","servers","find","a","appConfig","enableGoogleCloudAdapter","pathUrl","getUrlBaseDicomWeb","GoogleCloudUtilServers","setServers","dispatch","useServerFromUrl","previousServers","activeServer","urlBasedServers","serverHasChanged","newServer","exists","some","bind","undefined","useSelector","state","usePrevious","useDispatch","useContext","AppContext"],"mappings":"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","file":"ViewerRouting.bundle.8ad7ea9b66421a4d8fce.js","sourcesContent":["import { useLocation } from 'react-router-dom';\n\n/**\n * hook that builds on useLocation to parse\n * the query string for you.\n *\n * @name useQuery\n */\nexport default function() {\n return new URLSearchParams(useLocation().search);\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { utils, user } from '@ohif/core';\n//\nimport ConnectedViewerRetrieveStudyData from '../connectedComponents/ConnectedViewerRetrieveStudyData';\nimport useServer from '../customHooks/useServer';\nimport useQuery from '../customHooks/useQuery';\nconst { urlUtil: UrlUtil } = utils;\n\n/**\n * Get array of seriesUIDs from param or from queryString\n * @param {*} seriesInstanceUIDs\n * @param {*} location\n */\nconst getSeriesInstanceUIDs = (seriesInstanceUIDs, routeLocation) => {\n const queryFilters = UrlUtil.queryString.getQueryFilters(routeLocation);\n const querySeriesUIDs = queryFilters && queryFilters['seriesInstanceUID'];\n const _seriesInstanceUIDs = seriesInstanceUIDs || querySeriesUIDs;\n\n return UrlUtil.paramString.parseParam(_seriesInstanceUIDs);\n};\n\nfunction ViewerRouting({ match: routeMatch, location: routeLocation }) {\n const {\n project,\n location,\n dataset,\n dicomStore,\n studyInstanceUIDs,\n seriesInstanceUIDs,\n } = routeMatch.params;\n\n // Set the user's default authToken for outbound DICOMWeb requests.\n // Is only applied if target server does not set `requestOptions` property.\n //\n // See: `getAuthorizationHeaders.js`\n let query = useQuery();\n const authToken = query.get('token');\n\n if (authToken) {\n user.getAccessToken = () => authToken;\n }\n\n const server = useServer({ project, location, dataset, dicomStore });\n const studyUIDs = UrlUtil.paramString.parseParam(studyInstanceUIDs);\n const seriesUIDs = getSeriesInstanceUIDs(seriesInstanceUIDs, routeLocation);\n\n if (server && studyUIDs) {\n return (\n <ConnectedViewerRetrieveStudyData\n studyInstanceUIDs={studyUIDs}\n seriesInstanceUIDs={seriesUIDs}\n />\n );\n }\n\n return null;\n}\n\nViewerRouting.propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n studyInstanceUIDs: PropTypes.string.isRequired,\n seriesInstanceUIDs: PropTypes.string,\n dataset: PropTypes.string,\n dicomStore: PropTypes.string,\n location: PropTypes.string,\n project: PropTypes.string,\n }),\n }),\n location: PropTypes.any,\n};\n\nexport default ViewerRouting;\n","class GoogleCloudApi {\n setAccessToken(accessToken) {\n if (!accessToken) console.error('Access token is empty');\n this.accessToken = accessToken;\n }\n\n get fetchConfig() {\n if (!this.accessToken) throw new Error('OIDC access_token is not set');\n return {\n method: 'GET',\n headers: {\n Authorization: 'Bearer ' + this.accessToken,\n },\n };\n }\n\n get urlBase() {\n return this.healthcareApiEndpoint || 'https://healthcare.googleapis.com/v1beta1';\n }\n\n set urlBase(url) {\n this.healthcareApiEndpoint = url;\n }\n\n get urlBaseProject() {\n return this.urlBase + `/projects`;\n }\n\n getUrlBaseDicomWeb(project, location, dataset, dicomStore) {\n return (\n this.urlBase +\n `/projects/${project}/locations/${location}/datasets/${dataset}/dicomStores/${dicomStore}/dicomWeb`\n );\n }\n\n getUrlPath(project, location, dataset, dicomStore) {\n `/projects/${project}/locations/${location}/datasets/${dataset}/dicomStores/${dicomStore}`;\n }\n\n async doRequest(urlStr, config = {}, params = {}) {\n const url = new URL(urlStr);\n let data = null;\n url.search = new URLSearchParams(params);\n\n try {\n const response = await fetch(url, { ...this.fetchConfig, config });\n try {\n data = await response.json();\n } catch (err) {}\n if (response.status >= 200 && response.status < 300 && data != null) {\n if (data.nextPageToken != null) {\n params.pageToken = data.nextPageToken;\n let subPage = await this.doRequest(urlStr, config, params);\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n data[key] = data[key].concat(subPage.data[key]);\n }\n }\n }\n return {\n isError: false,\n status: response.status,\n data,\n };\n } else {\n return {\n isError: true,\n status: response.status,\n message:\n (data && data.error && data.error.message) || 'Unknown error',\n };\n }\n } catch (err) {\n if (data && data.error) {\n return {\n isError: true,\n status: err.status,\n message: err.response.data.error.message || 'Unspecified error',\n };\n }\n return {\n isError: true,\n message: (err && err.message) || 'Oops! Something went wrong',\n };\n }\n }\n\n async loadProjects() {\n return this.doRequest(\n 'https://cloudresourcemanager.googleapis.com/v1/projects'\n );\n }\n\n async loadLocations(projectId) {\n return this.doRequest(`${this.urlBaseProject}/${projectId}/locations`);\n }\n\n async loadDatasets(projectId, locationId) {\n return this.doRequest(\n `${this.urlBaseProject}/${projectId}/locations/${locationId}/datasets`\n );\n }\n\n async loadDicomStores(dataset) {\n return this.doRequest(`${this.urlBase}/${dataset}/dicomStores`);\n }\n}\n\nexport default new GoogleCloudApi();\n","const getServers = (data, name) => {\n const {\n wadoUriRoot,\n qidoRoot,\n wadoRoot,\n dataset = '',\n dicomStore = '',\n location = '',\n project = '',\n } = data;\n\n return [\n {\n name: name,\n dataset,\n dicomStore,\n location,\n project,\n imageRendering: 'wadors',\n thumbnailRendering: 'wadors',\n type: 'dicomWeb',\n active: true,\n wadoUriRoot,\n qidoRoot,\n wadoRoot,\n supportsFuzzyMatching: false,\n qidoSupportsIncludeField: false,\n },\n ];\n};\n\nconst isValidServer = server => {\n return (\n server &&\n !!server.dataset &&\n !!server.dicomStore &&\n !!server.location &&\n !!server.project\n );\n};\n\nconst isEqualServer = (server = {}, toCompare = {}) => {\n const serverLength = Object.keys(server).length;\n const toCompareLength = Object.keys(toCompare).length;\n\n if (!serverLength || !toCompareLength) {\n return false;\n }\n\n return (\n server.dataset === toCompare.dataset &&\n server.dataset === toCompare.dataset &&\n server.dicomStore === toCompare.dicomStore &&\n server.location === toCompare.location &&\n server.project === toCompare.project\n );\n};\n\nexport { getServers, isValidServer, isEqualServer };\n","import React, { useContext } from 'react';\nimport GoogleCloudApi from '../googleCloud/api/GoogleCloudApi';\nimport usePrevious from './usePrevious';\n\nimport * as GoogleCloudUtilServers from '../googleCloud/utils/getServers';\nimport { useSelector, useDispatch } from 'react-redux';\nimport isEqual from 'lodash.isequal';\n\n// Contexts\nimport AppContext from '../context/AppContext';\n\nconst getActiveServer = servers => {\n const isActive = a => a.active === true;\n\n return servers && servers.servers && servers.servers.find(isActive);\n};\n\nconst getServers = (appConfig, project, location, dataset, dicomStore) => {\n let servers = [];\n if (appConfig.enableGoogleCloudAdapter) {\n GoogleCloudApi.urlBase = appConfig.healthcareApiEndpoint;\n const pathUrl = GoogleCloudApi.getUrlBaseDicomWeb(\n project,\n location,\n dataset,\n dicomStore\n );\n const data = {\n project,\n location,\n dataset,\n dicomStore,\n wadoUriRoot: pathUrl,\n qidoRoot: pathUrl,\n wadoRoot: pathUrl,\n };\n servers = GoogleCloudUtilServers.getServers(data, dicomStore);\n if (!isValidServer(servers[0], appConfig)) {\n return;\n }\n }\n\n return servers;\n};\n\nconst isValidServer = (server, appConfig) => {\n if (appConfig.enableGoogleCloudAdapter) {\n return GoogleCloudUtilServers.isValidServer(server);\n }\n\n return !!server;\n};\n\nconst setServers = (dispatch, servers) => {\n const action = {\n type: 'SET_SERVERS',\n servers,\n };\n dispatch(action);\n};\n\nconst useServerFromUrl = (\n servers = [],\n previousServers,\n activeServer,\n urlBasedServers,\n appConfig,\n project,\n location,\n dataset,\n dicomStore\n) => {\n // update state from url available only when gcloud on\n if (!appConfig.enableGoogleCloudAdapter) {\n return false;\n }\n\n const serverHasChanged = previousServers !== servers && previousServers;\n\n // do not update from url. use state instead.\n if (serverHasChanged) {\n return false;\n }\n\n // if no valid urlbased servers\n if (!urlBasedServers || !urlBasedServers.length) {\n return false;\n } else if (!servers.length || !activeServer) {\n // no current valid server\n return true;\n }\n\n const newServer = urlBasedServers[0];\n\n let exists = servers.some(\n GoogleCloudUtilServers.isEqualServer.bind(undefined, newServer)\n );\n\n return !exists;\n};\n\nexport default function useServer({\n project,\n location,\n dataset,\n dicomStore,\n} = {}) {\n // Hooks\n const servers = useSelector(state => state && state.servers);\n const previousServers = usePrevious(servers);\n const dispatch = useDispatch();\n\n const { appConfig = {} } = useContext(AppContext);\n\n const activeServer = getActiveServer(servers);\n const urlBasedServers =\n getServers(appConfig, project, location, dataset, dicomStore) || [];\n const shouldUpdateServer = useServerFromUrl(\n servers.servers,\n previousServers,\n activeServer,\n urlBasedServers,\n appConfig,\n project,\n location,\n dataset,\n dicomStore\n );\n\n if (shouldUpdateServer) {\n setServers(dispatch, urlBasedServers);\n } else if (isValidServer(activeServer, appConfig)) {\n return activeServer;\n }\n}\n"],"sourceRoot":""}