@corva/ui 3.54.0-8 → 3.54.0-9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/cjs-bundle/clients/api/apiCore.js +1 -1
  2. package/cjs-bundle/clients/api/apiCore.js.map +1 -1
  3. package/cjs-bundle/clients/api/constants.js +2 -0
  4. package/cjs-bundle/clients/api/constants.js.map +1 -0
  5. package/cjs-bundle/clients/api/rateLimiter.js +2 -0
  6. package/cjs-bundle/clients/api/rateLimiter.js.map +1 -0
  7. package/cjs-bundle/clients/index.js +1 -1
  8. package/cjs-bundle/clients/utils.js +1 -1
  9. package/cjs-bundle/clients/utils.js.map +1 -1
  10. package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js +1 -1
  11. package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js.map +1 -1
  12. package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js +1 -1
  13. package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js.map +1 -1
  14. package/cjs-bundle/effects/subscriptions/useSubscriptions.v1.js +1 -1
  15. package/cjs-bundle/effects/subscriptions/useSubscriptions.v1.js.map +1 -1
  16. package/cjs-bundle/effects/subscriptions/useSubscriptions.v2.js +1 -1
  17. package/clients/api/apiCore.d.ts.map +1 -1
  18. package/clients/api/apiCore.js +1 -1
  19. package/clients/api/apiCore.js.map +1 -1
  20. package/clients/api/constants.d.ts +37 -0
  21. package/clients/api/constants.d.ts.map +1 -0
  22. package/clients/api/constants.js +2 -0
  23. package/clients/api/constants.js.map +1 -0
  24. package/clients/api/rateLimiter.d.ts +24 -0
  25. package/clients/api/rateLimiter.d.ts.map +1 -0
  26. package/clients/api/rateLimiter.js +2 -0
  27. package/clients/api/rateLimiter.js.map +1 -0
  28. package/clients/index.js +1 -1
  29. package/clients/index.js.map +1 -1
  30. package/clients/utils.d.ts +4 -2
  31. package/clients/utils.d.ts.map +1 -1
  32. package/clients/utils.js +1 -1
  33. package/clients/utils.js.map +1 -1
  34. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.d.ts.map +1 -1
  35. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js +1 -1
  36. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js.map +1 -1
  37. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.d.ts.map +1 -1
  38. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js +1 -1
  39. package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js.map +1 -1
  40. package/effects/subscriptions/useSubscriptions.v1.js +1 -1
  41. package/effects/subscriptions/useSubscriptions.v1.js.map +1 -1
  42. package/effects/subscriptions/useSubscriptions.v2.d.ts.map +1 -1
  43. package/effects/subscriptions/useSubscriptions.v2.js +1 -1
  44. package/effects/useSubscriptions.d.ts.map +1 -1
  45. package/mcp-server/server.mjs +1 -1
  46. package/package.json +1 -1
  47. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DevCenterIsolatedApp.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js"],"sourcesContent":["import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { withRouter } from 'react-router-dom';\nimport { noop } from 'lodash';\nimport queryString from 'query-string';\nimport PropTypes from 'prop-types';\n\nimport { IsolatedPage, APP_IFRAME_ATTRIBUTE } from './IsolatedPage';\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\n\nimport styles from './DevCenterIsolatedApp.module.css';\n\nimport AppContext from '~/components/DevCenter/AppContext';\nimport { usePermissionsContext } from '~/permissions';\nimport { devcenter as devCenterUtils, getUserUnits, subscribeForUserUnitsUpdates } from '~/utils';\nimport { DevCenterAppContainer } from '~/components/DevCenter';\nimport { getAppVersion } from '~/components/DevCenter/DevCenterAppContainer/utils';\nimport { isInsideNewMobileApp } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'DevCenter_AppContainer';\n\nfunction DevCenterIsolatedAppComponent({\n isIsolationFeatureEnabled,\n onAppFullscreenTransparentMode,\n onIsMaximizedChange,\n onInnerContainerMouseEnter,\n onInnerContainerMouseLeave,\n onAppContainerClick,\n setInnerContainerRefFn,\n ...props\n}) {\n const devCenterRouter = useMemo(\n () => devCenterUtils.createDevCenterRouter(props.history),\n [props.history?.location]\n );\n\n const isNonIsolatedApp =\n (devCenterUtils.isCorvaApp(props?.app?.app) &&\n !devCenterUtils.isIsolationEnabledInPackageManifest(props?.app?.package)) ||\n !isIsolationFeatureEnabled;\n\n const DCAppComponent = isNonIsolatedApp ? DevCenterAppContainer : IsolatedPage;\n\n // Key to force iframe recreation when app version changes.\n // This ensures global dependencies are re-initialized for the new version.\n const appKey = props.app?.app?.app_key;\n const appVersion = getAppVersion(props.app);\n const iframeKey = `${appKey}-${appVersion}`;\n\n const appIframeDocument = useRef();\n const containerRef = useRef();\n const fixedSizeContainerRef = useRef();\n const fullscreenModeRef = useRef(false);\n const fullscreenModalModeRef = useRef(false);\n\n const isAppMaximized = devCenterUtils.isAppMaximized(\n queryString.parse(props.history?.location?.search),\n props.app.id\n );\n\n // save to ref to not re-create setIsFullscreenModalMode callback on change and reduce the amoount of DC apps re-renders\n const isAppMaximizedRef = useRef(isAppMaximized);\n isAppMaximizedRef.current = isAppMaximized;\n\n const [userUnits, setUserUnits] = useState(getUserUnits());\n\n useEffect(() => {\n const unsubscribeFn = subscribeForUserUnitsUpdates(newUserUnits => setUserUnits(newUserUnits));\n\n return () => unsubscribeFn();\n }, []);\n\n const appContextValue = useContext(AppContext);\n const permissionsContextValue = usePermissionsContext();\n\n /*\n What is fullscreen modal mode?\n\n Our apps, are shown in isolated iFrames. Because of it, when an app has some modal\n and opens it - it's opened inside of its iframe, instead of opening at the center of the screen.\n\n To make app modals & other elements be opened at the center of the screen, as if they are not inside of an iframe,\n we use some hacks.\n\n When the app wants to open a fullscreen element, we make its iframe fullscreen, but with transparent background,\n and we set width/height & position of that app iframe to inner app container that is located inside of the iframe.\n So when iframe's fullscreen element is opened, it looks like it's a part of the platform, and the app which shows the element, looks like\n usual, not in fullscreen\n\n So the platform provides this setIsFullscreenModalMode function to DC apps.\n When DC app wants to open a modal that should be opened at the center of the screen - it needs to\n call setIsFullscreenModalMode(true) first. And when it closes the modal - setIsFullscreenModalMode(false)\n\n Two things are important about this\n - all these styles that make this invisible background work should be applied at once\n - enter and exit from the mode, shouldn't trigger even a single re-render, as it may impact\n some elements inside the DC app\n\n There's a second parameter to `setIsFullscreenModalMode`: `isModal`. It should be used when a fullscreen overlay is displayed\n (Modal, for instance) that should cover everything on screen.\n\n What it does - it basically sets the stretched element's z-index to a very high value, so it covers every other UI element in CWF\n */\n\n function handleAppFullscreenTransparentModeExit() {\n onAppFullscreenTransparentMode({ appId: props.app.id, isModeEnabled: false });\n document.body.classList.remove('dc-isolated-app__body-overflow', styles.compensateScroll);\n }\n\n const setIsFullscreenModalMode = useCallback(\n function setIsFullscreenModalMode(nextIsFullscreenModalModeValue, isModal = false) {\n // When an app is already in fullscreen mode, no need to use this\n // invisible fullscreen mode to make elements take the whole screen\n\n if (\n !isIsolationFeatureEnabled ||\n isNonIsolatedApp ||\n (isAppMaximizedRef.current && !fullscreenModeRef.current) ||\n fullscreenModeRef.current === nextIsFullscreenModalModeValue\n ) {\n // Adding modal class if modal is opened when non-modal is already open\n if (isModal && fullscreenModalModeRef.current !== isModal) {\n fullscreenModalModeRef.current = isModal;\n containerRef.current?.classList.add(styles.containerMaximizedTransparentModal);\n }\n\n return;\n }\n\n const classesEditMethod = nextIsFullscreenModalModeValue ? 'add' : 'remove';\n\n containerRef.current?.classList[classesEditMethod](styles.containerMaximizedTransparent);\n\n if (isModal || classesEditMethod === 'remove') {\n containerRef.current?.classList[classesEditMethod](\n styles.containerMaximizedTransparentModal\n );\n }\n\n appIframeDocument.current = containerRef.current?.querySelector(\n `[${APP_IFRAME_ATTRIBUTE}]`\n )?.contentWindow?.document;\n\n const isolatedPageAppContainer = appIframeDocument.current?.getElementById(\n ISOLATED_PAGE_APP_CONTAINER_ID\n );\n\n if (!isolatedPageAppContainer) {\n return;\n }\n\n if (nextIsFullscreenModalModeValue) {\n const { top, left, width, height } = fixedSizeContainerRef.current.getBoundingClientRect();\n\n // We need to directly set inner iFrame container sizes together with DC platform styles\n // as passing this as props and using some effect inside of an iframe\n // results in a slight delay, which looks like a quick layout jump\n isolatedPageAppContainer.setAttribute(\n 'style',\n `\n top: ${top}px;\n left: ${left}px;\n width: ${width}px;\n height: ${height}px;\n position: absolute;\n `\n );\n onAppFullscreenTransparentMode({ appId: props.app.id, isModeEnabled: true });\n const isBodyScrollVisible = window.innerWidth !== document.body.clientWidth;\n document.body.classList.add(\n 'dc-isolated-app__body-overflow',\n isBodyScrollVisible && styles.compensateScroll\n );\n } else {\n isolatedPageAppContainer.setAttribute('style', '');\n handleAppFullscreenTransparentModeExit();\n }\n fullscreenModeRef.current = nextIsFullscreenModalModeValue;\n fullscreenModalModeRef.current = isModal;\n },\n [isIsolationFeatureEnabled, isNonIsolatedApp, isAppMaximizedRef]\n );\n\n useEffect(() => {\n return handleAppFullscreenTransparentModeExit;\n }, []);\n\n useEffect(() => {\n if (isAppMaximized && fullscreenModeRef.current) {\n setIsFullscreenModalMode(false);\n }\n }, [isAppMaximized]);\n\n /**\n * This should be the same function as calling react-intersection-observer's ref setter actually triggers re-render.\n * Which in its turn causes infinite re-render loop.\n */\n const setContainerRefs = useCallback(node => {\n containerRef.current = node;\n setInnerContainerRefFn(node);\n }, []);\n\n return (\n <div\n className={classNames('dc-isolated-app', styles.fixedSizeContainer)}\n ref={fixedSizeContainerRef}\n >\n <div\n ref={setContainerRefs}\n onMouseEnter={onInnerContainerMouseEnter}\n onMouseLeave={onInnerContainerMouseLeave}\n data-testid={`${PAGE_NAME}_${props.app.app.name}`}\n className={classNames(\n styles.container,\n isInsideNewMobileApp && styles.newMobileAppContainer,\n isAppMaximized && styles.containerMaximized\n )}\n >\n <DCAppComponent\n key={iframeKey}\n {...props}\n appContextValue={appContextValue}\n devCenterRouter={devCenterRouter}\n globalNotificationToastsAPI={window[Symbol.for('notificationToasts')]}\n globalMixpanelEventTracker={window[Symbol.for('logToMixpanel')]}\n onAppContainerClick={onAppContainerClick}\n onIsMaximizedChange={onIsMaximizedChange}\n permissionsContextValue={permissionsContextValue}\n setIsFullscreenModalMode={setIsFullscreenModalMode}\n userUnits={userUnits}\n />\n </div>\n </div>\n );\n}\n\nDevCenterIsolatedAppComponent.propTypes = {\n app: PropTypes.shape({\n id: PropTypes.number,\n app: PropTypes.shape({\n name: PropTypes.string,\n }),\n }).isRequired,\n currentUser: PropTypes.shape({}).isRequired,\n isIsolationFeatureEnabled: PropTypes.bool,\n onAppContainerClick: PropTypes.func,\n onAppFullscreenTransparentMode: PropTypes.func,\n onAppRemove: PropTypes.func,\n onInnerContainerMouseEnter: PropTypes.func,\n onInnerContainerMouseLeave: PropTypes.func,\n onIsMaximizedChange: PropTypes.func,\n onSettingChange: PropTypes.func,\n onSettingsChange: PropTypes.func,\n setInnerContainerRefFn: PropTypes.func,\n updateCurrentDashboardAppLastAnnotation: PropTypes.func,\n};\n\nDevCenterIsolatedAppComponent.defaultProps = {\n isIsolationFeatureEnabled: false,\n onAppContainerClick: noop,\n onAppFullscreenTransparentMode: noop,\n onAppRemove: undefined,\n onInnerContainerMouseEnter: noop,\n onInnerContainerMouseLeave: noop,\n onIsMaximizedChange: noop,\n onSettingChange: noop,\n onSettingsChange: noop,\n setInnerContainerRefFn: noop,\n updateCurrentDashboardAppLastAnnotation: noop,\n};\n\nexport const DevCenterIsolatedApp = withRouter(DevCenterIsolatedAppComponent);\n"],"names":["DevCenterIsolatedAppComponent","_ref","_props$history","_props$app","_props$app2","_props$app3","_props$app3$app","_props$history2","_props$history2$locat","isIsolationFeatureEnabled","onAppFullscreenTransparentMode","onIsMaximizedChange","onInnerContainerMouseEnter","onInnerContainerMouseLeave","onAppContainerClick","setInnerContainerRefFn","props","_objectWithoutProperties","_excluded","devCenterRouter","useMemo","devCenterUtils","history","location","isNonIsolatedApp","app","package","DCAppComponent","DevCenterAppContainer","IsolatedPage","appKey","app_key","appVersion","getAppVersion","iframeKey","concat","appIframeDocument","useRef","containerRef","fixedSizeContainerRef","fullscreenModeRef","fullscreenModalModeRef","isAppMaximized","queryString","parse","search","id","isAppMaximizedRef","current","_useState","useState","getUserUnits","_useState2","_slicedToArray","userUnits","setUserUnits","useEffect","unsubscribeFn","subscribeForUserUnitsUpdates","newUserUnits","appContextValue","useContext","AppContext","permissionsContextValue","usePermissionsContext","handleAppFullscreenTransparentModeExit","appId","isModeEnabled","document","body","classList","remove","styles","compensateScroll","setIsFullscreenModalMode","useCallback","nextIsFullscreenModalModeValue","_containerRef$current2","_containerRef$current4","_containerRef$current5","_containerRef$current6","_appIframeDocument$cu","isModal","_containerRef$current","add","containerMaximizedTransparentModal","_containerRef$current3","classesEditMethod","containerMaximizedTransparent","querySelector","APP_IFRAME_ATTRIBUTE","contentWindow","isolatedPageAppContainer","getElementById","ISOLATED_PAGE_APP_CONTAINER_ID","_fixedSizeContainerRe","getBoundingClientRect","top","left","width","height","setAttribute","isBodyScrollVisible","window","innerWidth","clientWidth","setContainerRefs","node","_jsx","className","classNames","fixedSizeContainer","ref","children","onMouseEnter","onMouseLeave","PAGE_NAME","name","container","isInsideNewMobileApp","newMobileAppContainer","containerMaximized","_objectSpread","globalNotificationToastsAPI","Symbol","for","globalMixpanelEventTracker","propTypes","PropTypes","shape","number","string","isRequired","currentUser","bool","func","onAppRemove","onSettingChange","onSettingsChange","updateCurrentDashboardAppLastAnnotation","defaultProps","noop","undefined","DevCenterIsolatedApp","withRouter"],"mappings":"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"}
1
+ {"version":3,"file":"DevCenterIsolatedApp.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js"],"sourcesContent":["import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { withRouter } from 'react-router-dom';\nimport { noop } from 'lodash';\nimport queryString from 'query-string';\nimport PropTypes from 'prop-types';\n\nimport { APP_IFRAME_ATTRIBUTE, IsolatedPage } from './IsolatedPage';\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\n\nimport styles from './DevCenterIsolatedApp.module.css';\n\nimport AppContext from '~/components/DevCenter/AppContext';\nimport { usePermissionsContext } from '~/permissions';\nimport { devcenter as devCenterUtils, getUserUnits, subscribeForUserUnitsUpdates } from '~/utils';\nimport { DevCenterAppContainer } from '~/components/DevCenter';\nimport { getAppVersion } from '~/components/DevCenter/DevCenterAppContainer/utils';\nimport { isInsideNewMobileApp } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'DevCenter_AppContainer';\n\nfunction DevCenterIsolatedAppComponent({\n isIsolationFeatureEnabled,\n onAppFullscreenTransparentMode,\n onIsMaximizedChange,\n onInnerContainerMouseEnter,\n onInnerContainerMouseLeave,\n onAppContainerClick,\n setInnerContainerRefFn,\n trackApiRateLimiterException,\n ...props\n}) {\n const devCenterRouter = useMemo(\n () => devCenterUtils.createDevCenterRouter(props.history),\n [props.history?.location]\n );\n\n const isNonIsolatedApp =\n (devCenterUtils.isCorvaApp(props?.app?.app) &&\n !devCenterUtils.isIsolationEnabledInPackageManifest(props?.app?.package)) ||\n !isIsolationFeatureEnabled;\n\n const DCAppComponent = isNonIsolatedApp ? DevCenterAppContainer : IsolatedPage;\n\n // Key to force iframe recreation when app version changes.\n // This ensures global dependencies are re-initialized for the new version.\n const appKey = props.app?.app?.app_key;\n const appVersion = getAppVersion(props.app);\n const iframeKey = `${appKey}-${appVersion}`;\n\n const appIframeDocument = useRef();\n const containerRef = useRef();\n const fixedSizeContainerRef = useRef();\n const fullscreenModeRef = useRef(false);\n const fullscreenModalModeRef = useRef(false);\n\n const isAppMaximized = devCenterUtils.isAppMaximized(\n queryString.parse(props.history?.location?.search),\n props.app.id\n );\n\n // save to ref to not re-create setIsFullscreenModalMode callback on change and reduce the amoount of DC apps re-renders\n const isAppMaximizedRef = useRef(isAppMaximized);\n isAppMaximizedRef.current = isAppMaximized;\n\n const [userUnits, setUserUnits] = useState(getUserUnits());\n\n useEffect(() => {\n const unsubscribeFn = subscribeForUserUnitsUpdates(newUserUnits => setUserUnits(newUserUnits));\n\n return () => unsubscribeFn();\n }, []);\n\n const appContextValue = useContext(AppContext);\n const permissionsContextValue = usePermissionsContext();\n\n /*\n What is fullscreen modal mode?\n\n Our apps, are shown in isolated iFrames. Because of it, when an app has some modal\n and opens it - it's opened inside of its iframe, instead of opening at the center of the screen.\n\n To make app modals & other elements be opened at the center of the screen, as if they are not inside of an iframe,\n we use some hacks.\n\n When the app wants to open a fullscreen element, we make its iframe fullscreen, but with transparent background,\n and we set width/height & position of that app iframe to inner app container that is located inside of the iframe.\n So when iframe's fullscreen element is opened, it looks like it's a part of the platform, and the app which shows the element, looks like\n usual, not in fullscreen\n\n So the platform provides this setIsFullscreenModalMode function to DC apps.\n When DC app wants to open a modal that should be opened at the center of the screen - it needs to\n call setIsFullscreenModalMode(true) first. And when it closes the modal - setIsFullscreenModalMode(false)\n\n Two things are important about this\n - all these styles that make this invisible background work should be applied at once\n - enter and exit from the mode, shouldn't trigger even a single re-render, as it may impact\n some elements inside the DC app\n\n There's a second parameter to `setIsFullscreenModalMode`: `isModal`. It should be used when a fullscreen overlay is displayed\n (Modal, for instance) that should cover everything on screen.\n\n What it does - it basically sets the stretched element's z-index to a very high value, so it covers every other UI element in CWF\n */\n\n function handleAppFullscreenTransparentModeExit() {\n onAppFullscreenTransparentMode({ appId: props.app.id, isModeEnabled: false });\n document.body.classList.remove('dc-isolated-app__body-overflow', styles.compensateScroll);\n }\n\n const setIsFullscreenModalMode = useCallback(\n function setIsFullscreenModalMode(nextIsFullscreenModalModeValue, isModal = false) {\n // When an app is already in fullscreen mode, no need to use this\n // invisible fullscreen mode to make elements take the whole screen\n\n if (\n !isIsolationFeatureEnabled ||\n isNonIsolatedApp ||\n (isAppMaximizedRef.current && !fullscreenModeRef.current) ||\n fullscreenModeRef.current === nextIsFullscreenModalModeValue\n ) {\n // Adding modal class if modal is opened when non-modal is already open\n if (isModal && fullscreenModalModeRef.current !== isModal) {\n fullscreenModalModeRef.current = isModal;\n containerRef.current?.classList.add(styles.containerMaximizedTransparentModal);\n }\n\n return;\n }\n\n const classesEditMethod = nextIsFullscreenModalModeValue ? 'add' : 'remove';\n\n containerRef.current?.classList[classesEditMethod](styles.containerMaximizedTransparent);\n\n if (isModal || classesEditMethod === 'remove') {\n containerRef.current?.classList[classesEditMethod](\n styles.containerMaximizedTransparentModal\n );\n }\n\n appIframeDocument.current = containerRef.current?.querySelector(\n `[${APP_IFRAME_ATTRIBUTE}]`\n )?.contentWindow?.document;\n\n const isolatedPageAppContainer = appIframeDocument.current?.getElementById(\n ISOLATED_PAGE_APP_CONTAINER_ID\n );\n\n if (!isolatedPageAppContainer) {\n return;\n }\n\n if (nextIsFullscreenModalModeValue) {\n const { top, left, width, height } = fixedSizeContainerRef.current.getBoundingClientRect();\n\n // We need to directly set inner iFrame container sizes together with DC platform styles\n // as passing this as props and using some effect inside of an iframe\n // results in a slight delay, which looks like a quick layout jump\n isolatedPageAppContainer.setAttribute(\n 'style',\n `\n top: ${top}px;\n left: ${left}px;\n width: ${width}px;\n height: ${height}px;\n position: absolute;\n `\n );\n onAppFullscreenTransparentMode({ appId: props.app.id, isModeEnabled: true });\n const isBodyScrollVisible = window.innerWidth !== document.body.clientWidth;\n document.body.classList.add(\n 'dc-isolated-app__body-overflow',\n isBodyScrollVisible && styles.compensateScroll\n );\n } else {\n isolatedPageAppContainer.setAttribute('style', '');\n handleAppFullscreenTransparentModeExit();\n }\n fullscreenModeRef.current = nextIsFullscreenModalModeValue;\n fullscreenModalModeRef.current = isModal;\n },\n [isIsolationFeatureEnabled, isNonIsolatedApp, isAppMaximizedRef]\n );\n\n useEffect(() => {\n return handleAppFullscreenTransparentModeExit;\n }, []);\n\n useEffect(() => {\n if (isAppMaximized && fullscreenModeRef.current) {\n setIsFullscreenModalMode(false);\n }\n }, [isAppMaximized]);\n\n /**\n * This should be the same function as calling react-intersection-observer's ref setter actually triggers re-render.\n * Which in its turn causes infinite re-render loop.\n */\n const setContainerRefs = useCallback(node => {\n containerRef.current = node;\n setInnerContainerRefFn(node);\n }, []);\n\n return (\n <div\n className={classNames('dc-isolated-app', styles.fixedSizeContainer)}\n ref={fixedSizeContainerRef}\n >\n <div\n ref={setContainerRefs}\n onMouseEnter={onInnerContainerMouseEnter}\n onMouseLeave={onInnerContainerMouseLeave}\n data-testid={`${PAGE_NAME}_${props.app.app.name}`}\n className={classNames(\n styles.container,\n isInsideNewMobileApp && styles.newMobileAppContainer,\n isAppMaximized && styles.containerMaximized\n )}\n >\n <DCAppComponent\n key={iframeKey}\n {...props}\n appContextValue={appContextValue}\n devCenterRouter={devCenterRouter}\n globalNotificationToastsAPI={window[Symbol.for('notificationToasts')]}\n globalMixpanelEventTracker={window[Symbol.for('logToMixpanel')]}\n onAppContainerClick={onAppContainerClick}\n onIsMaximizedChange={onIsMaximizedChange}\n permissionsContextValue={permissionsContextValue}\n setIsFullscreenModalMode={setIsFullscreenModalMode}\n userUnits={userUnits}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </div>\n );\n}\n\nDevCenterIsolatedAppComponent.propTypes = {\n app: PropTypes.shape({\n id: PropTypes.number,\n app: PropTypes.shape({\n name: PropTypes.string,\n }),\n }).isRequired,\n currentUser: PropTypes.shape({}).isRequired,\n isIsolationFeatureEnabled: PropTypes.bool,\n onAppContainerClick: PropTypes.func,\n onAppFullscreenTransparentMode: PropTypes.func,\n onAppRemove: PropTypes.func,\n onInnerContainerMouseEnter: PropTypes.func,\n onInnerContainerMouseLeave: PropTypes.func,\n onIsMaximizedChange: PropTypes.func,\n onSettingChange: PropTypes.func,\n onSettingsChange: PropTypes.func,\n setInnerContainerRefFn: PropTypes.func,\n updateCurrentDashboardAppLastAnnotation: PropTypes.func,\n};\n\nDevCenterIsolatedAppComponent.defaultProps = {\n isIsolationFeatureEnabled: false,\n onAppContainerClick: noop,\n onAppFullscreenTransparentMode: noop,\n onAppRemove: undefined,\n onInnerContainerMouseEnter: noop,\n onInnerContainerMouseLeave: noop,\n onIsMaximizedChange: noop,\n onSettingChange: noop,\n onSettingsChange: noop,\n setInnerContainerRefFn: noop,\n updateCurrentDashboardAppLastAnnotation: noop,\n};\n\nexport const DevCenterIsolatedApp = withRouter(DevCenterIsolatedAppComponent);\n"],"names":["DevCenterIsolatedAppComponent","_ref","_props$history","_props$app","_props$app2","_props$app3","_props$app3$app","_props$history2","_props$history2$locat","isIsolationFeatureEnabled","onAppFullscreenTransparentMode","onIsMaximizedChange","onInnerContainerMouseEnter","onInnerContainerMouseLeave","onAppContainerClick","setInnerContainerRefFn","trackApiRateLimiterException","props","_objectWithoutProperties","_excluded","devCenterRouter","useMemo","devCenterUtils","history","location","isNonIsolatedApp","app","package","DCAppComponent","DevCenterAppContainer","IsolatedPage","appKey","app_key","appVersion","getAppVersion","iframeKey","concat","appIframeDocument","useRef","containerRef","fixedSizeContainerRef","fullscreenModeRef","fullscreenModalModeRef","isAppMaximized","queryString","parse","search","id","isAppMaximizedRef","current","_useState","useState","getUserUnits","_useState2","_slicedToArray","userUnits","setUserUnits","useEffect","unsubscribeFn","subscribeForUserUnitsUpdates","newUserUnits","appContextValue","useContext","AppContext","permissionsContextValue","usePermissionsContext","handleAppFullscreenTransparentModeExit","appId","isModeEnabled","document","body","classList","remove","styles","compensateScroll","setIsFullscreenModalMode","useCallback","nextIsFullscreenModalModeValue","_containerRef$current2","_containerRef$current4","_containerRef$current5","_containerRef$current6","_appIframeDocument$cu","isModal","_containerRef$current","add","containerMaximizedTransparentModal","_containerRef$current3","classesEditMethod","containerMaximizedTransparent","querySelector","APP_IFRAME_ATTRIBUTE","contentWindow","isolatedPageAppContainer","getElementById","ISOLATED_PAGE_APP_CONTAINER_ID","_fixedSizeContainerRe","getBoundingClientRect","top","left","width","height","setAttribute","isBodyScrollVisible","window","innerWidth","clientWidth","setContainerRefs","node","_jsx","className","classNames","fixedSizeContainer","ref","children","onMouseEnter","onMouseLeave","PAGE_NAME","name","container","isInsideNewMobileApp","newMobileAppContainer","containerMaximized","_objectSpread","globalNotificationToastsAPI","Symbol","for","globalMixpanelEventTracker","propTypes","PropTypes","shape","number","string","isRequired","currentUser","bool","func","onAppRemove","onSettingChange","onSettingsChange","updateCurrentDashboardAppLastAnnotation","defaultProps","noop","undefined","DevCenterIsolatedApp","withRouter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DevCenterIsolatedAppPage.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"names":[],"mappings":"AAyCA;;;;GAIG;AACH;;;;gBA4FC;;;;;;;;;;;;;;;;sBAzIqB,YAAY"}
1
+ {"version":3,"file":"DevCenterIsolatedAppPage.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"names":[],"mappings":"AAyCA;;;;GAIG;AACH;;;;gBA+FC;;;;;;;;;;;;;;;;sBA5IqB,YAAY"}
@@ -1,2 +1,2 @@
1
- import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/objectWithoutProperties";import{useEffect as t,useRef as n}from"react";import i from"prop-types";import{makeStyles as e}from"@material-ui/core";import r from"classnames";import c from"moment-timezone";import{MemoryRouter as m}from"react-router-dom";import{useXProps as p}from"./effects/useXProps.js";import{ISOLATED_PAGE_APP_CONTAINER_ID as l}from"./constants.js";import{replaceUndefinedValuesWithNull as a}from"./utils/replaceUndefinedValuesWithNull.js";import{getDashboardCapturingHandler as u}from"./utils/dashboardCapturing.js";import{IsInsideIsolatedDcAppProvider as j}from"../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider/IsInsideIsolatedDcAppProvider.js";import d from"../DevCenterAppContainer/DevCenterAppContainer.js";import{jsx as I}from"react/jsx-runtime";import"@icon-park/react/es/all";import{IconParkProvider as f}from"../../../icons/IconParkProvider.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import h from"../../../hocs/withMUIProvidersHOC.js";import"../../../hocs/withAssetEditorLockHOC.js";import C from"../AppContext.js";import{THEMES as g}from"../../../constants/theme.js";import{LOCAL_STORAGE_APP_THEME_KEY as b}from"../../../CLI/hocs/constants.js";import{setThemeVariables as v}from"../../../utils/themeVariables.js";import{isPDFReportView as A}from"../../../CLI/hocs/utils.js";import{PermissionsContext as P}from"../../../permissions/PermissionsContext.js";import{updateUserUnits as y}from"../../../utils/index.js";import"../../../styles/iconPark.global.css.js";import"../../../styles/index.global.css.js";import"../../../styles/reactVirtualized.global.css.js";import"../../../styles/emojiMart.global.css.js";import"../../../styles/mapbox.global.css.js";import"../../../styles/lightbox.global.css.js";import"../../../styles/generatedThemesVariables.global.css.js";import"../../../styles/customScrollbars.global.css.js";var O=["appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits"];function S(o,s){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),t.push.apply(t,n)}return t}function x(s){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?S(Object(n),!0).forEach((function(t){o(s,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(n,o))}))}return s}var w=h(d),L=e((function(){return{"@global":{body:{backgroundColor:"transparent",overflow:"hidden"}}}}));function D(o){var i,e,d,h,S,D,k=o.CLIAppComponent,F=o.CLIAppSettings,E=o.containerReportClassName;L();var R=p(),T=R.appContextValue,U=R.globalMixpanelEventTracker,M=R.globalNotificationToastsAPI,V=R.onSettingChange,N=R.onSettingsChange,z=R.permissionsContextValue,G=R.timezone,W=R.userUnits,H=s(R,O),q=H.location.pathname.startsWith("/reports/")||A,K=null==H||null===(i=H.app)||void 0===i?void 0:i.id,X=localStorage.getItem(b)||(null===(e=H.currentUser)||void 0===e||null===(d=e.settings)||void 0===d||null===(h=d.uiSettings)||void 0===h?void 0:h.theme)||g.DARK,Z=!q&&X!==g.LIGHT;t((function(){v(Z)}),[Z]),t((function(){window[Symbol.for("notificationToasts")]=M,window[Symbol.for("logToMixpanel")]=U}),[M,U]);var B=n(!0);return(B.current||q)&&(B.current=!1,y({userUnits:W})),t((function(){return G&&c.tz.setDefault(G),function(){return c.tz.setDefault(null)}}),[G]),t((function(){var o=u(K);return window.addEventListener("message",o),function(){return window.removeEventListener("message",o)}}),[K]),I(m,{initialEntries:[((null===(S=H.location)||void 0===S?void 0:S.pathname)||"/")+((null===(D=H.location)||void 0===D?void 0:D.search)||"")],children:I(P.Provider,{value:z,children:I(C.Provider,{value:T,children:I(j,{value:!0,children:I(f,{children:I("div",{id:l,className:r(q&&E),children:I(w,x(x({},H),{},{theme:Z?g.DARK:g.LIGHT,onSettingsChange:function(o){return N(a(o))},onSettingChange:function(o,s){return V(o,a(s))},CLIAppComponent:k,CLIAppSettings:F}))})})})})})})}D.propTypes={CLIAppComponent:i.func,CLIAppSettings:i.func,containerReportClassName:i.string},D.defaultProps={CLIAppComponent:null,CLIAppSettings:null,containerReportClassName:null};export{D as DevCenterIsolatedAppPage};
1
+ import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/objectWithoutProperties";import{useEffect as t,useRef as i}from"react";import n from"prop-types";import{makeStyles as e}from"@material-ui/core";import r from"classnames";import c from"moment-timezone";import{MemoryRouter as m}from"react-router-dom";import{useXProps as p}from"./effects/useXProps.js";import{ISOLATED_PAGE_APP_CONTAINER_ID as l}from"./constants.js";import{replaceUndefinedValuesWithNull as a}from"./utils/replaceUndefinedValuesWithNull.js";import{getDashboardCapturingHandler as u}from"./utils/dashboardCapturing.js";import{IsInsideIsolatedDcAppProvider as j}from"../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider/IsInsideIsolatedDcAppProvider.js";import d from"../DevCenterAppContainer/DevCenterAppContainer.js";import{jsx as I}from"react/jsx-runtime";import"@icon-park/react/es/all";import{IconParkProvider as f}from"../../../icons/IconParkProvider.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import h from"../../../hocs/withMUIProvidersHOC.js";import"../../../hocs/withAssetEditorLockHOC.js";import C from"../AppContext.js";import{THEMES as g}from"../../../constants/theme.js";import{LOCAL_STORAGE_APP_THEME_KEY as b}from"../../../CLI/hocs/constants.js";import{setThemeVariables as v}from"../../../utils/themeVariables.js";import{isPDFReportView as A}from"../../../CLI/hocs/utils.js";import{PermissionsContext as P}from"../../../permissions/PermissionsContext.js";import{updateUserUnits as y}from"../../../utils/index.js";import"../../../styles/iconPark.global.css.js";import"../../../styles/index.global.css.js";import"../../../styles/reactVirtualized.global.css.js";import"../../../styles/emojiMart.global.css.js";import"../../../styles/mapbox.global.css.js";import"../../../styles/lightbox.global.css.js";import"../../../styles/generatedThemesVariables.global.css.js";import"../../../styles/customScrollbars.global.css.js";var O=["appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException"];function x(o,s){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(o);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),t.push.apply(t,i)}return t}function L(s){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?x(Object(i),!0).forEach((function(t){o(s,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(i)):x(Object(i)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(i,o))}))}return s}var S=h(d),w=e((function(){return{"@global":{body:{backgroundColor:"transparent",overflow:"hidden"}}}}));function k(o){var n,e,d,h,x,k,D=o.CLIAppComponent,E=o.CLIAppSettings,R=o.containerReportClassName;w();var F=p(),T=F.appContextValue,U=F.globalMixpanelEventTracker,M=F.globalNotificationToastsAPI,V=F.onSettingChange,N=F.onSettingsChange,z=F.permissionsContextValue,G=F.timezone,W=F.userUnits,H=F.trackApiRateLimiterException,q=s(F,O),K=q.location.pathname.startsWith("/reports/")||A,X=null==q||null===(n=q.app)||void 0===n?void 0:n.id,Z=localStorage.getItem(b)||(null===(e=q.currentUser)||void 0===e||null===(d=e.settings)||void 0===d||null===(h=d.uiSettings)||void 0===h?void 0:h.theme)||g.DARK,B=!K&&Z!==g.LIGHT;t((function(){v(B)}),[B]),t((function(){window[Symbol.for("notificationToasts")]=M,window[Symbol.for("logToMixpanel")]=U,window[Symbol.for("corvaAPI.rateLimiterReport")]=H}),[M,U,H]);var J=i(!0);return(J.current||K)&&(J.current=!1,y({userUnits:W})),t((function(){return G&&c.tz.setDefault(G),function(){return c.tz.setDefault(null)}}),[G]),t((function(){var o=u(X);return window.addEventListener("message",o),function(){return window.removeEventListener("message",o)}}),[X]),I(m,{initialEntries:[((null===(x=q.location)||void 0===x?void 0:x.pathname)||"/")+((null===(k=q.location)||void 0===k?void 0:k.search)||"")],children:I(P.Provider,{value:z,children:I(C.Provider,{value:T,children:I(j,{value:!0,children:I(f,{children:I("div",{id:l,className:r(K&&R),children:I(S,L(L({},q),{},{theme:B?g.DARK:g.LIGHT,onSettingsChange:function(o){return N(a(o))},onSettingChange:function(o,s){return V(o,a(s))},CLIAppComponent:D,CLIAppSettings:E,trackApiRateLimiterException:H}))})})})})})})}k.propTypes={CLIAppComponent:n.func,CLIAppSettings:n.func,containerReportClassName:n.string},k.defaultProps={CLIAppComponent:null,CLIAppSettings:null,containerReportClassName:null};export{k as DevCenterIsolatedAppPage};
2
2
  //# sourceMappingURL=DevCenterIsolatedAppPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { useXProps } from './effects/useXProps';\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\n\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IconParkProvider } from '~/icons';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport { THEMES } from '~/constants/theme';\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { setThemeVariables } from '~/utils/themeVariables';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport { updateUserUnits } from '~/utils';\nimport '~/styles/globalStyles';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent,\n CLIAppSettings,\n containerReportClassName,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const appId = xProps?.app?.id;\n\n // Force light theme for PDF reports view\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = !isReportsPage && selectedTheme !== THEMES.LIGHT;\n\n useEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker]);\n\n const isFirstRenderRef = useRef(true);\n if (isFirstRenderRef.current || isReportsPage) {\n isFirstRenderRef.current = false;\n updateUserUnits({ userUnits });\n }\n\n useEffect(() => {\n if (timezone) moment.tz.setDefault(timezone);\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n\nDevCenterIsolatedAppPage.defaultProps = {\n CLIAppComponent: null,\n CLIAppSettings: null,\n containerReportClassName: null,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","CLIAppComponent","CLIAppSettings","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useEffect","setThemeVariables","window","Symbol","for","isFirstRenderRef","useRef","current","updateUserUnits","moment","tz","setDefault","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","search","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string","defaultProps"],"mappings":"w4JAyBA,IAAMA,EAA+BC,EAAoBC,GAOnDC,EAAYC,GAAW,WAAA,MAAO,CAClC,UAAW,CACTC,KAAM,CACJC,gBAAiB,cACjBC,SAAU,WAGf,IAOM,SAASC,EAIbC,GAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAHDC,IAAAA,gBACAC,IAAAA,eACAC,IAAAA,yBAEAf,IAEA,IAAAgB,EAUIC,IATFC,IAAAA,gBACAC,IAAAA,2BACAC,IAAAA,4BACAC,IAAAA,gBACAC,IAAAA,iBACAC,IAAAA,wBACAC,IAAAA,SACAC,IAAAA,UACGC,EAAMC,EAAAX,EAAAY,GAELC,EAAgBH,EAAOI,SAASC,SAASC,WAAW,cAAgBC,EACpEC,EAAQR,SAAA,QAAAA,EAAAA,EAAQS,WAAR,IAAA5B,OAAAmB,EAAAnB,EAAa6B,GAGrBC,EACJC,aAAaC,QAAQC,aACrBd,EAAAA,EAAOe,0BAAP,UAAAjC,EAAoBkC,gBAApB,IAAAjC,GAAwC,QAAxCC,EAAAD,EAA8BkC,kBAAU,IAAAjC,SAAxCA,EAA0CkC,QAC1CC,EAAOC,KACHC,GAAelB,GAAiBQ,IAAkBQ,EAAOG,MAE/DC,GAAU,WACRC,EAAkBH,EACpB,GAAG,CAACA,IAEJE,GAAU,WACRE,OAAOC,OAAOC,IAAI,uBAAyBjC,EAC3C+B,OAAOC,OAAOC,IAAI,kBAAoBlC,CACxC,GAAG,CAACC,EAA6BD,IAEjC,IAAMmC,EAAmBC,GAAO,GAiBhC,OAhBID,EAAiBE,SAAW3B,KAC9ByB,EAAiBE,SAAU,EAC3BC,EAAgB,CAAEhC,UAAAA,KAGpBwB,GAAU,WAER,OADIzB,GAAUkC,EAAOC,GAAGC,WAAWpC,GAC5B,WAAA,OAAMkC,EAAOC,GAAGC,WAAW,KAAK,CACzC,GAAG,CAACpC,IAEJyB,GAAU,WACR,IAAMY,EAA4BC,EAA6B5B,GAE/D,OADAiB,OAAOY,iBAAiB,UAAWF,GAC5B,WAAA,OAAMV,OAAOa,oBAAoB,UAAWH,EAA0B,CAC/E,GAAG,CAAC3B,IAGF+B,EAACC,EAAY,CACXC,eAAgB,GAAE,QAAAxD,EAAAe,EAAOI,gBAAP,IAAAnB,OAAA,EAAAA,EAAiBoB,WAAY,OAAuB,QAAfnB,EAAAc,EAAOI,gBAAQ,IAAAlB,OAAA,EAAfA,EAAiBwD,SAAU,KAAKC,SAEvFJ,EAACK,EAAmBC,SAAQ,CAACC,MAAOjD,EAAwB8C,SAC1DJ,EAACQ,EAAWF,SAAQ,CAACC,MAAOtD,EAAgBmD,SAC1CJ,EAACS,EAA6B,CAACF,OAAK,EAAAH,SAClCJ,EAACU,EAAgB,CAAAN,SACfJ,EAAA,MAAA,CACE7B,GAAIwC,EACJC,UAAWC,EAAWjD,GAAiBd,GAA0BsD,SAEjEJ,EAACpE,EAA4BkF,EAAAA,EAAA,GACvBrD,GAAM,GAAA,CACVkB,MAAOG,EAAcF,EAAOC,KAAOD,EAAOG,MAQ1C1B,iBAAkB,SAAA0D,GAAY,OAC5B1D,EAAiB2D,EAA+BD,GACjD,EACD3D,gBAAiB,SAAC6D,EAAKV,GAAK,OAC1BnD,EAAgB6D,EAAKD,EAA+BT,GACrD,EACD3D,gBAAiBA,EACjBC,eAAgBA,gBASlC,CAEAT,EAAyB8E,UAAY,CACnCtE,gBAAiBuE,EAAUC,KAC3BvE,eAAgBsE,EAAUC,KAC1BtE,yBAA0BqE,EAAUE,QAGtCjF,EAAyBkF,aAAe,CACtC1E,gBAAiB,KACjBC,eAAgB,KAChBC,yBAA0B"}
1
+ {"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { useXProps } from './effects/useXProps';\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\n\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IconParkProvider } from '~/icons';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport { THEMES } from '~/constants/theme';\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { setThemeVariables } from '~/utils/themeVariables';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport { updateUserUnits } from '~/utils';\nimport '~/styles/globalStyles';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent,\n CLIAppSettings,\n containerReportClassName,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n trackApiRateLimiterException,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const appId = xProps?.app?.id;\n\n // Force light theme for PDF reports view\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = !isReportsPage && selectedTheme !== THEMES.LIGHT;\n\n useEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n window[Symbol.for('corvaAPI.rateLimiterReport')] = trackApiRateLimiterException;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker, trackApiRateLimiterException]);\n\n const isFirstRenderRef = useRef(true);\n if (isFirstRenderRef.current || isReportsPage) {\n isFirstRenderRef.current = false;\n updateUserUnits({ userUnits });\n }\n\n useEffect(() => {\n if (timezone) moment.tz.setDefault(timezone);\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n\nDevCenterIsolatedAppPage.defaultProps = {\n CLIAppComponent: null,\n CLIAppSettings: null,\n containerReportClassName: null,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","CLIAppComponent","CLIAppSettings","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useEffect","setThemeVariables","window","Symbol","for","isFirstRenderRef","useRef","current","updateUserUnits","moment","tz","setDefault","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","search","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string","defaultProps"],"mappings":"u6JAyBA,IAAMA,EAA+BC,EAAoBC,GAOnDC,EAAYC,GAAW,WAAA,MAAO,CAClC,UAAW,CACTC,KAAM,CACJC,gBAAiB,cACjBC,SAAU,WAGf,IAOM,SAASC,EAIbC,GAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAHDC,IAAAA,gBACAC,IAAAA,eACAC,IAAAA,yBAEAf,IAEA,IAAAgB,EAWIC,IAVFC,IAAAA,gBACAC,IAAAA,2BACAC,IAAAA,4BACAC,IAAAA,gBACAC,IAAAA,iBACAC,IAAAA,wBACAC,IAAAA,SACAC,IAAAA,UACAC,IAAAA,6BACGC,EAAMC,EAAAZ,EAAAa,GAELC,EAAgBH,EAAOI,SAASC,SAASC,WAAW,cAAgBC,EACpEC,EAAQR,SAAA,QAAAA,EAAAA,EAAQS,WAAR,IAAA7B,OAAAoB,EAAApB,EAAa8B,GAGrBC,EACJC,aAAaC,QAAQC,aACrBd,EAAAA,EAAOe,0BAAP,UAAAlC,EAAoBmC,gBAApB,IAAAlC,GAAwC,QAAxCC,EAAAD,EAA8BmC,kBAAU,IAAAlC,SAAxCA,EAA0CmC,QAC1CC,EAAOC,KACHC,GAAelB,GAAiBQ,IAAkBQ,EAAOG,MAE/DC,GAAU,WACRC,EAAkBH,EACpB,GAAG,CAACA,IAEJE,GAAU,WACRE,OAAOC,OAAOC,IAAI,uBAAyBlC,EAC3CgC,OAAOC,OAAOC,IAAI,kBAAoBnC,EACtCiC,OAAOC,OAAOC,IAAI,+BAAiC5B,CACpD,GAAE,CAACN,EAA6BD,EAA4BO,IAE7D,IAAM6B,EAAmBC,GAAO,GAiBhC,OAhBID,EAAiBE,SAAW3B,KAC9ByB,EAAiBE,SAAU,EAC3BC,EAAgB,CAAEjC,UAAAA,KAGpByB,GAAU,WAER,OADI1B,GAAUmC,EAAOC,GAAGC,WAAWrC,GAC5B,WAAA,OAAMmC,EAAOC,GAAGC,WAAW,KAAK,CACzC,GAAG,CAACrC,IAEJ0B,GAAU,WACR,IAAMY,EAA4BC,EAA6B5B,GAE/D,OADAiB,OAAOY,iBAAiB,UAAWF,GAC5B,WAAA,OAAMV,OAAOa,oBAAoB,UAAWH,EAA0B,CAC/E,GAAG,CAAC3B,IAGF+B,EAACC,EAAY,CACXC,eAAgB,GAAE,QAAAzD,EAAAgB,EAAOI,gBAAP,IAAApB,OAAA,EAAAA,EAAiBqB,WAAY,OAAuB,QAAfpB,EAAAe,EAAOI,gBAAQ,IAAAnB,OAAA,EAAfA,EAAiByD,SAAU,KAAKC,SAEvFJ,EAACK,EAAmBC,SAAQ,CAACC,MAAOlD,EAAwB+C,SAC1DJ,EAACQ,EAAWF,SAAQ,CAACC,MAAOvD,EAAgBoD,SAC1CJ,EAACS,EAA6B,CAACF,OAAK,EAAAH,SAClCJ,EAACU,EAAgB,CAAAN,SACfJ,EAAA,MAAA,CACE7B,GAAIwC,EACJC,UAAWC,EAAWjD,GAAiBf,GAA0BuD,SAEjEJ,EAACrE,EAA4BmF,EAAAA,EAAA,GACvBrD,GAAM,GAAA,CACVkB,MAAOG,EAAcF,EAAOC,KAAOD,EAAOG,MAQ1C3B,iBAAkB,SAAA2D,GAAY,OAC5B3D,EAAiB4D,EAA+BD,GACjD,EACD5D,gBAAiB,SAAC8D,EAAKV,GAAK,OAC1BpD,EAAgB8D,EAAKD,EAA+BT,GACrD,EACD5D,gBAAiBA,EACjBC,eAAgBA,EAChBY,6BAA8BA,gBAShD,CAEArB,EAAyB+E,UAAY,CACnCvE,gBAAiBwE,EAAUC,KAC3BxE,eAAgBuE,EAAUC,KAC1BvE,yBAA0BsE,EAAUE,QAGtClF,EAAyBmF,aAAe,CACtC3E,gBAAiB,KACjBC,eAAgB,KAChBC,yBAA0B"}
@@ -1,2 +1,2 @@
1
- import r from"@babel/runtime/helpers/slicedToArray";import t from"@babel/runtime/helpers/asyncToGenerator";import e from"@babel/runtime/helpers/defineProperty";import n from"@babel/runtime/regenerator";import{parse as u}from"querystring";import{useState as a,useRef as i,useMemo as o,useEffect as c}from"react";import s from"uuid/v1";import{castArray as p,differenceBy as f,omit as l,concat as m,merge as b,mapValues as d}from"lodash";import{getSubscriptionId as y}from"../../clients/subscriptions.v1.js";import{getAppKeyFromStackTrace as v}from"../../clients/utils.js";import{getAppStorage as h,getDataAppStorage as O,getDataAppStorageAggregate as w}from"../../clients/jsonApi/index.js";function g(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.push.apply(e,n)}return e}function j(r){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?g(Object(n),!0).forEach((function(t){e(r,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach((function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))}))}return r}function I(r,t,e){var n=y(r,t);return j(j({},r),{},{hookId:t,subId:n,appInstanceId:n,app_key:e})}function k(r,t){return x.apply(this,arguments)}function x(){return x=t(n.mark((function r(e,u){var a,i,o;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=u.timeQuery,i=u.appKey,o=e.map(function(){var r=t(n.mark((function r(t){var e,u,o,c,s,p,f,l,m;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e=t.provider,u=t.collection,o=t.assetId,c=t.subscribeOnly,s=t.params,!c){r.next=3;break}return r.abrupt("return",null);case 3:return p=s.query,f=a?"{timestamp#lte#".concat(a.timestamp.$lte):"",l=p&&f?"AND":"",m="".concat(p).concat(l).concat(f),r.prev=7,r.next=10,h(e,u,o,j(j(j({},s),m?{query:m}:{}),{},{appKey:i}));case 10:return r.abrupt("return",r.sent);case 13:return r.prev=13,r.t0=r.catch(7),r.abrupt("return",[]);case 16:case"end":return r.stop()}}),r,null,[[7,13]])})));return function(t){return r.apply(this,arguments)}}()),r.abrupt("return",Promise.all(o));case 3:case"end":return r.stop()}}),r)}))),x.apply(this,arguments)}function P(r,t){return E.apply(this,arguments)}function E(){return E=t(n.mark((function r(e,u){var a,i,o;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=u.timeQuery,i=u.appKey,o=e.map(function(){var r=t(n.mark((function r(t){var e,u,o,c,s,p,f,l,m,y,v,h;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e=t.provider,u=t.collection,o=t.assetId,c=t.subscribeOnly,s=t.params,p=void 0===s?{}:s,!c){r.next=3;break}return r.abrupt("return",null);case 3:if(!p.aggregate){r.next=5;break}return r.abrupt("return",w(e,u,j({},d(p.aggregate,JSON.stringify))));case 5:return f=JSON.stringify(b({asset_id:o},p.query,a)),l=p.limit,m=void 0===l?1:l,y=p.sort,v=void 0===y?'{"timestamp": 1}':y,r.prev=7,h=j(j({},p),{},{limit:m,sort:v,query:f,appKey:i}),r.next=11,O(e,u,h);case 11:return r.abrupt("return",r.sent);case 14:return r.prev=14,r.t0=r.catch(7),r.abrupt("return",[]);case 17:case"end":return r.stop()}}),r,null,[[7,14]])})));return function(t){return r.apply(this,arguments)}}()),r.abrupt("return",Promise.all(o));case 3:case"end":return r.stop()}}),r)}))),E.apply(this,arguments)}function D(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},b=n.timestamp,d=n.isOldApiUsed,y=a({}),h=r(y,2),O=h[0],w=h[1],g=i();g.current||(g.current=s());var x=window[Symbol.for("socket")],E=x.subscribe,D=x.unsubscribe,S=x.socket,q=o((function(){return v()}),[]),A=i([]),K=p(t).map((function(r){return I(r,g.current,q)})),N=K.map((function(r){return r.subId})).join(),Q=o((function(){if(b)return{timestamp:{$lte:b}};var r=u(window.location.search).time;return r?{timestamp:{$lte:new Date(r)/1e3}}:null}),[window.location.search,b]);return c((function(){var r=function(r){r.hookId===g.current&&w((function(t){var n=r.data;return r.subId in t&&!r.subscribeOnly&&(n=m(t[r.subId],r.data)),r.params&&r.params.limit&&(n=n.slice(-r.params.limit)),j(j({},t),{},e({},r.subId,n))}))};return S&&S.on("data",r),function(){S&&S.off("data",r)}}),[]),c((function(){A.current.forEach(D),A.current=[]}),[Q]),c((function(){var r=A.current,t=f(K,r,"subId"),e=f(r,K,"subId");t.forEach((function(r){Q&&!r.alwaysSubscribe||E(r)})),e.forEach(D),A.current=K,(d?k:P)(t,{timeQuery:Q,appKey:q,isOldApiUsed:d}).then((function(r){return w((function(n){var u=l(n,e.map((function(r){return r.subId})));return t.forEach((function(t,e){null!==r[e]&&(u[t.subId]=r[e])})),u}))}))}),[N,Q]),c((function(){return function(){return A.current.forEach(D)}}),[]),o((function(){return K.map((function(r){var t=r.subId;return{loading:!(t in O),data:O[t]}}))}),[O,N])}export{P as fetchInitialSubscriptionsData,k as fetchInitialSubscriptionsDataDeprecated,D as useSubscriptionsV1};
1
+ import r from"@babel/runtime/helpers/slicedToArray";import t from"@babel/runtime/helpers/asyncToGenerator";import e from"@babel/runtime/helpers/defineProperty";import n from"@babel/runtime/regenerator";import{parse as u}from"querystring";import{useState as a,useRef as i,useMemo as o,useEffect as c}from"react";import s from"uuid/v1";import{castArray as p,differenceBy as f,omit as l,concat as m,merge as b,mapValues as d}from"lodash";import{getSubscriptionId as y}from"../../clients/subscriptions.v1.js";import{getAppKeyAndId as v}from"../../clients/utils.js";import{getAppStorage as h,getDataAppStorage as O,getDataAppStorageAggregate as w}from"../../clients/jsonApi/index.js";function g(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.push.apply(e,n)}return e}function j(r){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?g(Object(n),!0).forEach((function(t){e(r,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach((function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))}))}return r}function I(r,t,e){var n=y(r,t);return j(j({},r),{},{hookId:t,subId:n,appInstanceId:n,app_key:e})}function k(r,t){return x.apply(this,arguments)}function x(){return x=t(n.mark((function r(e,u){var a,i,o;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=u.timeQuery,i=u.appKey,o=e.map(function(){var r=t(n.mark((function r(t){var e,u,o,c,s,p,f,l,m;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e=t.provider,u=t.collection,o=t.assetId,c=t.subscribeOnly,s=t.params,!c){r.next=3;break}return r.abrupt("return",null);case 3:return p=s.query,f=a?"{timestamp#lte#".concat(a.timestamp.$lte):"",l=p&&f?"AND":"",m="".concat(p).concat(l).concat(f),r.prev=7,r.next=10,h(e,u,o,j(j(j({},s),m?{query:m}:{}),{},{appKey:i}));case 10:return r.abrupt("return",r.sent);case 13:return r.prev=13,r.t0=r.catch(7),r.abrupt("return",[]);case 16:case"end":return r.stop()}}),r,null,[[7,13]])})));return function(t){return r.apply(this,arguments)}}()),r.abrupt("return",Promise.all(o));case 3:case"end":return r.stop()}}),r)}))),x.apply(this,arguments)}function P(r,t){return E.apply(this,arguments)}function E(){return E=t(n.mark((function r(e,u){var a,i,o;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=u.timeQuery,i=u.appKey,o=e.map(function(){var r=t(n.mark((function r(t){var e,u,o,c,s,p,f,l,m,y,v,h;return n.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e=t.provider,u=t.collection,o=t.assetId,c=t.subscribeOnly,s=t.params,p=void 0===s?{}:s,!c){r.next=3;break}return r.abrupt("return",null);case 3:if(!p.aggregate){r.next=5;break}return r.abrupt("return",w(e,u,j({},d(p.aggregate,JSON.stringify))));case 5:return f=JSON.stringify(b({asset_id:o},p.query,a)),l=p.limit,m=void 0===l?1:l,y=p.sort,v=void 0===y?'{"timestamp": 1}':y,r.prev=7,h=j(j({},p),{},{limit:m,sort:v,query:f,appKey:i}),r.next=11,O(e,u,h);case 11:return r.abrupt("return",r.sent);case 14:return r.prev=14,r.t0=r.catch(7),r.abrupt("return",[]);case 17:case"end":return r.stop()}}),r,null,[[7,14]])})));return function(t){return r.apply(this,arguments)}}()),r.abrupt("return",Promise.all(o));case 3:case"end":return r.stop()}}),r)}))),E.apply(this,arguments)}function D(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},b=n.timestamp,d=n.isOldApiUsed,y=a({}),h=r(y,2),O=h[0],w=h[1],g=i();g.current||(g.current=s());var x=window[Symbol.for("socket")],E=x.subscribe,D=x.unsubscribe,K=x.socket,S=o((function(){var r;return null===(r=v())||void 0===r?void 0:r.appKey}),[]),q=i([]),A=p(t).map((function(r){return I(r,g.current,S)})),N=A.map((function(r){return r.subId})).join(),Q=o((function(){if(b)return{timestamp:{$lte:b}};var r=u(window.location.search).time;return r?{timestamp:{$lte:new Date(r)/1e3}}:null}),[window.location.search,b]);return c((function(){var r=function(r){r.hookId===g.current&&w((function(t){var n=r.data;return r.subId in t&&!r.subscribeOnly&&(n=m(t[r.subId],r.data)),r.params&&r.params.limit&&(n=n.slice(-r.params.limit)),j(j({},t),{},e({},r.subId,n))}))};return K&&K.on("data",r),function(){K&&K.off("data",r)}}),[]),c((function(){q.current.forEach(D),q.current=[]}),[Q]),c((function(){var r=q.current,t=f(A,r,"subId"),e=f(r,A,"subId");t.forEach((function(r){Q&&!r.alwaysSubscribe||E(r)})),e.forEach(D),q.current=A,(d?k:P)(t,{timeQuery:Q,appKey:S,isOldApiUsed:d}).then((function(r){return w((function(n){var u=l(n,e.map((function(r){return r.subId})));return t.forEach((function(t,e){null!==r[e]&&(u[t.subId]=r[e])})),u}))}))}),[N,Q]),c((function(){return function(){return q.current.forEach(D)}}),[]),o((function(){return A.map((function(r){var t=r.subId;return{loading:!(t in O),data:O[t]}}))}),[O,N])}export{P as fetchInitialSubscriptionsData,k as fetchInitialSubscriptionsDataDeprecated,D as useSubscriptionsV1};
2
2
  //# sourceMappingURL=useSubscriptions.v1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscriptions.v1.js","sources":["../../../src/effects/subscriptions/useSubscriptions.v1.js"],"sourcesContent":["// NOTE: This is a deprecated module, but is still used in the codebase (some devcenter apps)\n// We don't support it, dc devs should refactor their code to use socketClient directly\nimport { parse } from 'querystring';\n\nimport { useState, useEffect, useRef, useMemo } from 'react';\nimport uuidV1 from 'uuid/v1';\nimport { castArray, omit, differenceBy, concat, merge, mapValues } from 'lodash';\n\nimport { getSubscriptionId } from '../../clients/subscriptions.v1';\n\nimport { getAppKeyFromStackTrace } from '~/clients/utils';\nimport { getAppStorage, getDataAppStorage, getDataAppStorageAggregate } from '~/clients/jsonApi';\n\nfunction getSubscriptionWithId(sub, hookId, appKey) {\n const subId = getSubscriptionId(sub, hookId);\n return { ...sub, hookId, subId, appInstanceId: subId, app_key: appKey };\n}\n\nexport async function fetchInitialSubscriptionsDataDeprecated(\n subscriptions,\n { timeQuery, appKey }\n) {\n const requests = subscriptions.map(\n async ({ provider, collection, assetId, subscribeOnly, params }) => {\n if (subscribeOnly) return null;\n const queryFromParameters = params.query;\n const queryFromTime = timeQuery ? `{timestamp#lte#${timeQuery.timestamp.$lte}` : '';\n const separator = queryFromParameters && queryFromTime ? 'AND' : '';\n const query = `${queryFromParameters}${separator}${queryFromTime}`;\n\n try {\n return await getAppStorage(provider, collection, assetId, {\n ...params,\n ...(query ? { query } : {}),\n appKey,\n });\n } catch (e) {\n return [];\n }\n }\n );\n return Promise.all(requests);\n}\n\nexport async function fetchInitialSubscriptionsData(subscriptions, { timeQuery, appKey }) {\n const requests = subscriptions.map(\n async ({ provider, collection, assetId, subscribeOnly, params = {} }) => {\n if (subscribeOnly) return null;\n\n // NOTE: Use different endpoint for aggregate queries\n // https://data.qa.corva.ai/docs#/default/aggregate_api_v1_data__provider___dataset__aggregate__get\n if (params.aggregate)\n return getDataAppStorageAggregate(provider, collection, {\n ...mapValues(params.aggregate, JSON.stringify),\n });\n\n const query = JSON.stringify(merge({ asset_id: assetId }, params.query, timeQuery));\n const { limit = 1, sort = '{\"timestamp\": 1}' } = params;\n\n try {\n const options = {\n ...params,\n limit,\n sort,\n query,\n appKey,\n };\n\n return await getDataAppStorage(provider, collection, options);\n } catch (e) {\n return [];\n }\n }\n );\n return Promise.all(requests);\n}\n\n/**\n * A hook to subscribe to the corva socket updates\n * @param {Object | Object[]} subscriptions - subscription params\n * @param {number} subscriptions.limit - only save given amount of records\n * @param {boolean} subscriptions.subscribeOnly - do NOT send initial requests for the data\n * @param {boolean} subscriptions.alwaysSubscribe - will always subscribe, even when well timeline used\n * and do NOT store previously received data if true\n * @param {Object | Object} options - various hook options\n * @param {Object | Object} options.timestamp - requested time (usually from well timeline).\n * If provided only the initial request is being sent with the {\"timestamp\": {\"$lte\":time}} query added.\n */\nexport function useSubscriptionsV1(subscriptions, { timestamp, isOldApiUsed } = {}) {\n const [data, setData] = useState({});\n // NOTE: Declare this hook id to differentiate between hooks\n const hookIdRef = useRef();\n if (!hookIdRef.current) hookIdRef.current = uuidV1();\n const { subscribe, unsubscribe, socket } = window[Symbol.for('socket')];\n const appKey = useMemo(() => getAppKeyFromStackTrace(), []);\n\n // NOTE: Save previous subscriptions to detect added/removed subscriptions\n const prevSubscriptionsRef = useRef([]);\n const currentSubscriptions = castArray(subscriptions).map(sub =>\n getSubscriptionWithId(sub, hookIdRef.current, appKey)\n );\n\n // NOTE: This string is used to trigger effects\n const currentSubscriptionsIdsJoined = currentSubscriptions.map(sub => sub.subId).join();\n const timeQuery = useMemo(() => {\n if (timestamp) return { timestamp: { $lte: timestamp } };\n const timeFromLocation = parse(window.location.search).time;\n return timeFromLocation ? { timestamp: { $lte: new Date(timeFromLocation) / 1000 } } : null;\n }, [window.location.search, timestamp]);\n\n useEffect(() => {\n const onDataReceive = event => {\n // NOTE: Skip other effects subscriptions' events\n if (event.hookId !== hookIdRef.current) return;\n setData(prevData => {\n let nextData = event.data;\n if (event.subId in prevData && !event.subscribeOnly) {\n nextData = concat(prevData[event.subId], event.data);\n }\n\n if (event.params && event.params.limit) nextData = nextData.slice(-event.params.limit);\n\n return {\n ...prevData,\n [event.subId]: nextData,\n };\n });\n };\n if (socket) socket.on('data', onDataReceive);\n return () => {\n if (socket) socket.off('data', onDataReceive);\n };\n }, []);\n\n useEffect(() => {\n const { current: prevSubscriptions } = prevSubscriptionsRef;\n prevSubscriptions.forEach(unsubscribe);\n prevSubscriptionsRef.current = [];\n }, [timeQuery]);\n\n useEffect(() => {\n const { current: prevSubscriptions } = prevSubscriptionsRef;\n const addedSubscriptions = differenceBy(currentSubscriptions, prevSubscriptions, 'subId');\n const deletedSubscriptions = differenceBy(prevSubscriptions, currentSubscriptions, 'subId');\n addedSubscriptions.forEach(subscription => {\n // NOTE: only subscribe when the timestamp wasn't provided (well timeline wasn't used)\n if (!timeQuery || subscription.alwaysSubscribe) subscribe(subscription);\n });\n deletedSubscriptions.forEach(unsubscribe);\n\n prevSubscriptionsRef.current = currentSubscriptions;\n\n // NOTE: Migrate to new api after https://corvaqa.atlassian.net/browse/DC-1090 is done\n const fetchFunc = isOldApiUsed\n ? fetchInitialSubscriptionsDataDeprecated\n : fetchInitialSubscriptionsData;\n fetchFunc(addedSubscriptions, { timeQuery, appKey, isOldApiUsed }).then(subsData =>\n setData(prevData => {\n // NOTE: Here we omit data from deleted subscriptions\n const nextData = omit(\n prevData,\n deletedSubscriptions.map(sub => sub.subId)\n );\n\n addedSubscriptions.forEach((sub, idx) => {\n if (subsData[idx] !== null) nextData[sub.subId] = subsData[idx];\n });\n return nextData;\n })\n );\n }, [currentSubscriptionsIdsJoined, timeQuery]);\n\n // NOTE: Clear all subscriptions on unmounting\n useEffect(() => () => prevSubscriptionsRef.current.forEach(unsubscribe), []);\n\n return useMemo(\n () =>\n currentSubscriptions.map(({ subId }) => ({\n loading: !(subId in data),\n data: data[subId],\n })),\n [data, currentSubscriptionsIdsJoined]\n );\n}\n"],"names":["getSubscriptionWithId","sub","hookId","appKey","subId","getSubscriptionId","_objectSpread","appInstanceId","app_key","fetchInitialSubscriptionsDataDeprecated","_x","_x2","_fetchInitialSubscriptionsDataDeprecated","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","subscriptions","_ref","timeQuery","requests","wrap","_context2","prev","next","map","_ref6","_callee","_ref5","provider","collection","assetId","subscribeOnly","params","queryFromParameters","queryFromTime","separator","query","_context","abrupt","timestamp","$lte","getAppStorage","sent","t0","stop","_x5","Promise","all","_callee2","fetchInitialSubscriptionsData","_x3","_x4","_fetchInitialSubscriptionsData","_ref2","_context4","_ref8","_callee3","_ref7","_ref7$params","_params$limit","limit","_params$sort","sort","options","_context3","aggregate","getDataAppStorageAggregate","mapValues","JSON","stringify","merge","asset_id","getDataAppStorage","_x6","_callee4","useSubscriptionsV1","_ref3","length","undefined","isOldApiUsed","_useState","useState","_useState2","_slicedToArray","data","setData","hookIdRef","useRef","current","uuidV1","window","Symbol","for","subscribe","unsubscribe","socket","useMemo","getAppKeyFromStackTrace","prevSubscriptionsRef","currentSubscriptions","castArray","currentSubscriptionsIdsJoined","join","timeFromLocation","parse","location","search","time","Date","useEffect","onDataReceive","event","prevData","nextData","concat","slice","on","off","forEach","prevSubscriptions","addedSubscriptions","differenceBy","deletedSubscriptions","subscription","alwaysSubscribe","then","subsData","omit","idx","_ref4","loading"],"mappings":"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"}
1
+ {"version":3,"file":"useSubscriptions.v1.js","sources":["../../../src/effects/subscriptions/useSubscriptions.v1.js"],"sourcesContent":["// NOTE: This is a deprecated module, but is still used in the codebase (some devcenter apps)\n// We don't support it, dc devs should refactor their code to use socketClient directly\nimport { parse } from 'querystring';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport uuidV1 from 'uuid/v1';\nimport { castArray, concat, differenceBy, mapValues, merge, omit } from 'lodash';\n\nimport { getSubscriptionId } from '../../clients/subscriptions.v1';\n\nimport { getAppKeyAndId } from '~/clients/utils';\nimport { getAppStorage, getDataAppStorage, getDataAppStorageAggregate } from '~/clients/jsonApi';\n\nfunction getSubscriptionWithId(sub, hookId, appKey) {\n const subId = getSubscriptionId(sub, hookId);\n return { ...sub, hookId, subId, appInstanceId: subId, app_key: appKey };\n}\n\nexport async function fetchInitialSubscriptionsDataDeprecated(\n subscriptions,\n { timeQuery, appKey }\n) {\n const requests = subscriptions.map(\n async ({ provider, collection, assetId, subscribeOnly, params }) => {\n if (subscribeOnly) return null;\n const queryFromParameters = params.query;\n const queryFromTime = timeQuery ? `{timestamp#lte#${timeQuery.timestamp.$lte}` : '';\n const separator = queryFromParameters && queryFromTime ? 'AND' : '';\n const query = `${queryFromParameters}${separator}${queryFromTime}`;\n\n try {\n return await getAppStorage(provider, collection, assetId, {\n ...params,\n ...(query ? { query } : {}),\n appKey,\n });\n } catch (e) {\n return [];\n }\n }\n );\n return Promise.all(requests);\n}\n\nexport async function fetchInitialSubscriptionsData(subscriptions, { timeQuery, appKey }) {\n const requests = subscriptions.map(\n async ({ provider, collection, assetId, subscribeOnly, params = {} }) => {\n if (subscribeOnly) return null;\n\n // NOTE: Use different endpoint for aggregate queries\n // https://data.qa.corva.ai/docs#/default/aggregate_api_v1_data__provider___dataset__aggregate__get\n if (params.aggregate)\n return getDataAppStorageAggregate(provider, collection, {\n ...mapValues(params.aggregate, JSON.stringify),\n });\n\n const query = JSON.stringify(merge({ asset_id: assetId }, params.query, timeQuery));\n const { limit = 1, sort = '{\"timestamp\": 1}' } = params;\n\n try {\n const options = {\n ...params,\n limit,\n sort,\n query,\n appKey,\n };\n\n return await getDataAppStorage(provider, collection, options);\n } catch (e) {\n return [];\n }\n }\n );\n return Promise.all(requests);\n}\n\n/**\n * A hook to subscribe to the corva socket updates\n * @param {Object | Object[]} subscriptions - subscription params\n * @param {number} subscriptions.limit - only save given amount of records\n * @param {boolean} subscriptions.subscribeOnly - do NOT send initial requests for the data\n * @param {boolean} subscriptions.alwaysSubscribe - will always subscribe, even when well timeline used\n * and do NOT store previously received data if true\n * @param {Object | Object} options - various hook options\n * @param {Object | Object} options.timestamp - requested time (usually from well timeline).\n * If provided only the initial request is being sent with the {\"timestamp\": {\"$lte\":time}} query added.\n */\nexport function useSubscriptionsV1(subscriptions, { timestamp, isOldApiUsed } = {}) {\n const [data, setData] = useState({});\n // NOTE: Declare this hook id to differentiate between hooks\n const hookIdRef = useRef();\n if (!hookIdRef.current) hookIdRef.current = uuidV1();\n const { subscribe, unsubscribe, socket } = window[Symbol.for('socket')];\n const appKey = useMemo(() => getAppKeyAndId()?.appKey, []);\n\n // NOTE: Save previous subscriptions to detect added/removed subscriptions\n const prevSubscriptionsRef = useRef([]);\n const currentSubscriptions = castArray(subscriptions).map(sub =>\n getSubscriptionWithId(sub, hookIdRef.current, appKey)\n );\n\n // NOTE: This string is used to trigger effects\n const currentSubscriptionsIdsJoined = currentSubscriptions.map(sub => sub.subId).join();\n const timeQuery = useMemo(() => {\n if (timestamp) return { timestamp: { $lte: timestamp } };\n const timeFromLocation = parse(window.location.search).time;\n return timeFromLocation ? { timestamp: { $lte: new Date(timeFromLocation) / 1000 } } : null;\n }, [window.location.search, timestamp]);\n\n useEffect(() => {\n const onDataReceive = event => {\n // NOTE: Skip other effects subscriptions' events\n if (event.hookId !== hookIdRef.current) return;\n setData(prevData => {\n let nextData = event.data;\n if (event.subId in prevData && !event.subscribeOnly) {\n nextData = concat(prevData[event.subId], event.data);\n }\n\n if (event.params && event.params.limit) nextData = nextData.slice(-event.params.limit);\n\n return {\n ...prevData,\n [event.subId]: nextData,\n };\n });\n };\n if (socket) socket.on('data', onDataReceive);\n return () => {\n if (socket) socket.off('data', onDataReceive);\n };\n }, []);\n\n useEffect(() => {\n const { current: prevSubscriptions } = prevSubscriptionsRef;\n prevSubscriptions.forEach(unsubscribe);\n prevSubscriptionsRef.current = [];\n }, [timeQuery]);\n\n useEffect(() => {\n const { current: prevSubscriptions } = prevSubscriptionsRef;\n const addedSubscriptions = differenceBy(currentSubscriptions, prevSubscriptions, 'subId');\n const deletedSubscriptions = differenceBy(prevSubscriptions, currentSubscriptions, 'subId');\n addedSubscriptions.forEach(subscription => {\n // NOTE: only subscribe when the timestamp wasn't provided (well timeline wasn't used)\n if (!timeQuery || subscription.alwaysSubscribe) subscribe(subscription);\n });\n deletedSubscriptions.forEach(unsubscribe);\n\n prevSubscriptionsRef.current = currentSubscriptions;\n\n // NOTE: Migrate to new api after https://corvaqa.atlassian.net/browse/DC-1090 is done\n const fetchFunc = isOldApiUsed\n ? fetchInitialSubscriptionsDataDeprecated\n : fetchInitialSubscriptionsData;\n fetchFunc(addedSubscriptions, { timeQuery, appKey, isOldApiUsed }).then(subsData =>\n setData(prevData => {\n // NOTE: Here we omit data from deleted subscriptions\n const nextData = omit(\n prevData,\n deletedSubscriptions.map(sub => sub.subId)\n );\n\n addedSubscriptions.forEach((sub, idx) => {\n if (subsData[idx] !== null) nextData[sub.subId] = subsData[idx];\n });\n return nextData;\n })\n );\n }, [currentSubscriptionsIdsJoined, timeQuery]);\n\n // NOTE: Clear all subscriptions on unmounting\n useEffect(() => () => prevSubscriptionsRef.current.forEach(unsubscribe), []);\n\n return useMemo(\n () =>\n currentSubscriptions.map(({ subId }) => ({\n loading: !(subId in data),\n data: data[subId],\n })),\n [data, currentSubscriptionsIdsJoined]\n );\n}\n"],"names":["getSubscriptionWithId","sub","hookId","appKey","subId","getSubscriptionId","_objectSpread","appInstanceId","app_key","fetchInitialSubscriptionsDataDeprecated","_x","_x2","_fetchInitialSubscriptionsDataDeprecated","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","subscriptions","_ref","timeQuery","requests","wrap","_context2","prev","next","map","_ref6","_callee","_ref5","provider","collection","assetId","subscribeOnly","params","queryFromParameters","queryFromTime","separator","query","_context","abrupt","timestamp","$lte","getAppStorage","sent","t0","stop","_x5","Promise","all","_callee2","fetchInitialSubscriptionsData","_x3","_x4","_fetchInitialSubscriptionsData","_ref2","_context4","_ref8","_callee3","_ref7","_ref7$params","_params$limit","limit","_params$sort","sort","options","_context3","aggregate","getDataAppStorageAggregate","mapValues","JSON","stringify","merge","asset_id","getDataAppStorage","_x6","_callee4","useSubscriptionsV1","_ref3","length","undefined","isOldApiUsed","_useState","useState","_useState2","_slicedToArray","data","setData","hookIdRef","useRef","current","uuidV1","window","Symbol","for","subscribe","unsubscribe","socket","useMemo","_getAppKeyAndId","getAppKeyAndId","prevSubscriptionsRef","currentSubscriptions","castArray","currentSubscriptionsIdsJoined","join","timeFromLocation","parse","location","search","time","Date","useEffect","onDataReceive","event","prevData","nextData","concat","slice","on","off","forEach","prevSubscriptions","addedSubscriptions","differenceBy","deletedSubscriptions","subscription","alwaysSubscribe","then","subsData","omit","idx","_ref4","loading"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscriptions.v2.d.ts","sourceRoot":"","sources":["../../../src/effects/subscriptions/useSubscriptions.v2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAWrE,eAAO,MAAM,kBAAkB,GAC7B,iBAAgB,gBAAgB,EAAO,EACvC,oCAIG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;IAmFrE,CAAC"}
1
+ {"version":3,"file":"useSubscriptions.v2.d.ts","sourceRoot":"","sources":["../../../src/effects/subscriptions/useSubscriptions.v2.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AASrE,eAAO,MAAM,kBAAkB,GAC7B,iBAAgB,gBAAgB,EAAO,EACvC,oCAIG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;IAmFrE,CAAC"}
@@ -1,2 +1,2 @@
1
- import r from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/slicedToArray";import{useState as n,useMemo as e,useRef as i,useEffect as o}from"react";import{getChannelName as c}from"../../clients/subscriptions/get-channel-name.js";import{parse as u}from"querystring";import{getAppKeyFromStackTrace as f}from"../../clients/utils.js";import{fetchInitialSubscriptionsDataDeprecated as s,fetchInitialSubscriptionsData as a}from"./useSubscriptions.v1.js";import{SubscriptionsClientFactory as p}from"../../clients/subscriptions/subscriptions-client.factory.js";import{castArray as m}from"lodash";function l(r,t){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);t&&(e=e.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),n.push.apply(n,e)}return n}function b(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?l(Object(e),!0).forEach((function(n){r(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):l(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}))}return t}var y=function(){var l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],y=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},O=y.timestamp,j=y.isOldApiUsed,g=y.url,h=m(l),d=h.map(c).join(","),v=Array.from(new Set(h.map(c))).sort().join(","),w=n({}),P=t(w,2),A=P[0],D=P[1],S=n(!0),E=t(S,2),T=E[0],$=E[1],k=e((function(){return f()}),[]),q=e((function(){return p.init(g)}),[g]),x=e((function(){return h.map(c)}),[d]),K=e((function(){return Array.from(new Set(h.map(c)))}),[v]),Q=i(!0),U=e((function(){if(O)return{timestamp:{$lte:O}};var r=u(window.location.search).time,t=Array.isArray(r)?r[0]:r;return t?{timestamp:{$lte:new Date(t).getTime()/1e3}}:null}),[window.location.search,O]);return o((function(){return Q.current=!0,function(){Q.current=!1}}),[]),o((function(){if(q&&0!==K.length&&!T){var t=K.map((function(t){return q.subscribe(t,(function(n){Q.current&&D((function(e){return b(b({},e),{},r({},t,n))}))}))}));return function(){t.forEach((function(r){return r()}))}}}),[v,T,q]),o((function(){d&&(j?s:a)(h,{timeQuery:U,appKey:k}).then((function(r){if(Q.current){var t=r.reduce((function(r,t,n){return r[c(h[n])]=t,r}),{});D(t),$(!1)}}))}),[d,U,j,k]),e((function(){return 0===h.length?[]:x.map((function(r){var t=!(r in A);return t?{loading:t}:{loading:!1,data:A[r]}}))}),[A,d])};export{y as useSubscriptionsV2};
1
+ import r from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/slicedToArray";import{parse as n}from"querystring";import{useState as e,useMemo as i,useRef as o,useEffect as c}from"react";import{castArray as u}from"lodash";import{getChannelName as a}from"../../clients/subscriptions/get-channel-name.js";import{getAppKeyAndId as f}from"../../clients/utils.js";import{SubscriptionsClientFactory as s}from"../../clients/subscriptions/subscriptions-client.factory.js";import{fetchInitialSubscriptionsDataDeprecated as p,fetchInitialSubscriptionsData as m}from"./useSubscriptions.v1.js";function l(r,t){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);t&&(e=e.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),n.push.apply(n,e)}return n}function b(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?l(Object(e),!0).forEach((function(n){r(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):l(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}))}return t}var y=function(){var l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],y=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},O=y.timestamp,d=y.isOldApiUsed,j=y.url,g=u(l),h=g.map(a).join(","),v=Array.from(new Set(g.map(a))).sort().join(","),w=e({}),P=t(w,2),A=P[0],D=P[1],S=e(!0),E=t(S,2),K=E[0],T=E[1],$=i((function(){var r;return null===(r=f())||void 0===r?void 0:r.appKey}),[]),k=i((function(){return s.init(j)}),[j]),q=i((function(){return g.map(a)}),[h]),x=i((function(){return Array.from(new Set(g.map(a)))}),[v]),Q=o(!0),U=i((function(){if(O)return{timestamp:{$lte:O}};var r=n(window.location.search).time,t=Array.isArray(r)?r[0]:r;return t?{timestamp:{$lte:new Date(t).getTime()/1e3}}:null}),[window.location.search,O]);return c((function(){return Q.current=!0,function(){Q.current=!1}}),[]),c((function(){if(k&&0!==x.length&&!K){var t=x.map((function(t){return k.subscribe(t,(function(n){Q.current&&D((function(e){return b(b({},e),{},r({},t,n))}))}))}));return function(){t.forEach((function(r){return r()}))}}}),[v,K,k]),c((function(){h&&(d?p:m)(g,{timeQuery:U,appKey:$}).then((function(r){if(Q.current){var t=r.reduce((function(r,t,n){return r[a(g[n])]=t,r}),{});D(t),T(!1)}}))}),[h,U,d,$]),i((function(){return 0===g.length?[]:q.map((function(r){var t=!(r in A);return t?{loading:t}:{loading:!1,data:A[r]}}))}),[A,h])};export{y as useSubscriptionsV2};
2
2
  //# sourceMappingURL=useSubscriptions.v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscriptions.d.ts","sourceRoot":"","sources":["../../src/effects/useSubscriptions.ts"],"names":[],"mappings":"AAKA;;GAEG;;aAE0Q,CAAC;gBAAsB,CAAC;OAAc,CAAC;;;;;;;;AADpT,wBAAkF"}
1
+ {"version":3,"file":"useSubscriptions.d.ts","sourceRoot":"","sources":["../../src/effects/useSubscriptions.ts"],"names":[],"mappings":"AAKA;;GAEG;;aAEmQ,CAAC;gBAAsB,CAAC;OAAc,CAAC;;;;;;;;AAD7S,wBAAkF"}
@@ -227,7 +227,7 @@ const validateDsn = (dsn) => {
227
227
 
228
228
  const MCP_SERVER_VERSION = '1.0.0';
229
229
 
230
- var version = "3.54.0-8";
230
+ var version = "3.54.0-9";
231
231
 
232
232
  const CORVA_UI_VERSION = version;
233
233
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corva/ui",
3
- "version": "3.54.0-8",
3
+ "version": "3.54.0-9",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "description": "Shared components/utils for Corva ui projects",
6
6
  "keywords": [