redux-connected-devtools 1.0.2 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. package/dist/components/DevInspector/DevInspector.js +12 -0
  2. package/{src/components/DevInspector/DevInspector.style.tsx → dist/components/DevInspector/DevInspector.style.js} +1 -3
  3. package/dist/components/DevList/DevList.js +24 -0
  4. package/{src/components/DevList/DevList.style.tsx → dist/components/DevList/DevList.style.js} +2 -4
  5. package/dist/components/DevMenu/DevMenu.js +25 -0
  6. package/{src/components/DevMenu/DevMenu.style.tsx → dist/components/DevMenu/DevMenu.style.js} +15 -19
  7. package/dist/components/DevPanel/DevPanel.js +38 -0
  8. package/dist/components/DevPanel/DevPanel.style.js +22 -0
  9. package/dist/components/DevtoolsApp/DevtoolsApp.js +17 -0
  10. package/dist/components/DevtoolsApp/DevtoolsApp.style.js +11 -0
  11. package/dist/components/Icon/AllIcons.js +18 -0
  12. package/dist/components/Icon/Icon.js +9 -0
  13. package/dist/components/Icon/Icon.style.js +10 -0
  14. package/{src/components/JourneyRow/JourneyRow.tsx → dist/components/JourneyRow/JourneyRow.js} +9 -32
  15. package/{src/components/JourneyRow/JourneyRow.style.tsx → dist/components/JourneyRow/JourneyRow.style.js} +7 -12
  16. package/dist/components/JsonViewer/JsonViewer.js +7 -0
  17. package/{src/components/JsonViewer/JsonViewer.style.tsx → dist/components/JsonViewer/JsonViewer.style.js} +1 -2
  18. package/dist/components/Lifecycle/Lifecycle.js +15 -0
  19. package/{src/components/Lifecycle/Lifecycle.style.tsx → dist/components/Lifecycle/Lifecycle.style.js} +1 -2
  20. package/dist/components/RequestDetails/RequestDetails.js +10 -0
  21. package/dist/components/RequestDetails/RequestDetails.style.js +16 -0
  22. package/dist/components/RequestJourney/RequestJourney.js +14 -0
  23. package/dist/components/RequestJourney/RequestJourney.style.js +26 -0
  24. package/dist/components/RequestRow/RequestRow.js +9 -0
  25. package/{src/components/RequestRow/RequestRow.style.tsx → dist/components/RequestRow/RequestRow.style.js} +6 -10
  26. package/dist/components/Size/Size.js +10 -0
  27. package/dist/components/Size/Size.style.js +5 -0
  28. package/{src/components/Time/Time.tsx → dist/components/Time/Time.js} +3 -17
  29. package/{src/components/Time/Time.style.tsx → dist/components/Time/Time.style.js} +4 -7
  30. package/dist/containers/DevMenuContainer.js +11 -0
  31. package/dist/containers/DevPanelContainer.js +6 -0
  32. package/dist/containers/DevtoolsAppContainer.js +24 -0
  33. package/{src/containers/EndpointConfigsContainer.tsx → dist/containers/EndpointConfigsContainer.js} +2 -5
  34. package/{src/containers/EndpointStatusContainer.tsx → dist/containers/EndpointStatusContainer.js} +2 -5
  35. package/{src/containers/GlobalSettingsContainer.tsx → dist/containers/GlobalSettingsContainer.js} +2 -5
  36. package/{src/containers/GlobalStatsContainer.tsx → dist/containers/GlobalStatsContainer.js} +2 -5
  37. package/{src/containers/LifecycleApiErrorContainer.tsx → dist/containers/LifecycleApiErrorContainer.js} +2 -4
  38. package/dist/containers/LifecycleFailedContainer.js +9 -0
  39. package/{src/containers/LifecycleGeneralErrorContainer.tsx → dist/containers/LifecycleGeneralErrorContainer.js} +2 -4
  40. package/{src/containers/LifecycleInQueueContainer.tsx → dist/containers/LifecycleInQueueContainer.js} +2 -4
  41. package/{src/containers/LifecyclePendingApiContainer.tsx → dist/containers/LifecyclePendingApiContainer.js} +2 -4
  42. package/{src/containers/LifecyclePostActionContainer.tsx → dist/containers/LifecyclePostActionContainer.js} +2 -4
  43. package/{src/containers/LifecycleReceivedContainer.tsx → dist/containers/LifecycleReceivedContainer.js} +2 -4
  44. package/{src/data/devComponents.tsx → dist/data/devComponents.js} +3 -4
  45. package/{src/data/devRoutes.ts → dist/data/devRoutes.js} +23 -28
  46. package/dist/dts/components/DevInspector/DevInspector.d.ts +7 -0
  47. package/dist/dts/components/DevInspector/DevInspector.style.d.ts +1 -0
  48. package/dist/dts/components/DevList/DevList.d.ts +9 -0
  49. package/dist/dts/components/DevList/DevList.style.d.ts +2 -0
  50. package/dist/dts/components/DevMenu/DevMenu.d.ts +12 -0
  51. package/dist/dts/components/DevMenu/DevMenu.style.d.ts +7 -0
  52. package/dist/dts/components/DevPanel/DevPanel.d.ts +6 -0
  53. package/dist/dts/components/DevPanel/DevPanel.style.d.ts +3 -0
  54. package/dist/dts/components/DevtoolsApp/DevtoolsApp.d.ts +10 -0
  55. package/dist/dts/components/DevtoolsApp/DevtoolsApp.style.d.ts +1 -0
  56. package/dist/dts/components/Icon/AllIcons.d.ts +8 -0
  57. package/dist/dts/components/Icon/Icon.d.ts +10 -0
  58. package/dist/dts/components/Icon/Icon.style.d.ts +3 -0
  59. package/dist/dts/components/JourneyRow/JourneyRow.d.ts +7 -0
  60. package/dist/dts/components/JourneyRow/JourneyRow.style.d.ts +5 -0
  61. package/dist/dts/components/JsonViewer/JsonViewer.d.ts +7 -0
  62. package/dist/dts/components/JsonViewer/JsonViewer.style.d.ts +3 -0
  63. package/dist/dts/components/Lifecycle/Lifecycle.d.ts +7 -0
  64. package/dist/dts/components/Lifecycle/Lifecycle.style.d.ts +1 -0
  65. package/dist/dts/components/RequestDetails/RequestDetails.d.ts +7 -0
  66. package/dist/dts/components/RequestDetails/RequestDetails.style.d.ts +4 -0
  67. package/dist/dts/components/RequestJourney/RequestJourney.d.ts +7 -0
  68. package/dist/dts/components/RequestJourney/RequestJourney.style.d.ts +1 -0
  69. package/dist/dts/components/RequestRow/RequestRow.d.ts +11 -0
  70. package/dist/dts/components/RequestRow/RequestRow.style.d.ts +6 -0
  71. package/dist/dts/components/Size/Size.d.ts +6 -0
  72. package/dist/dts/components/Size/Size.style.d.ts +1 -0
  73. package/dist/dts/components/Time/Time.d.ts +6 -0
  74. package/dist/dts/components/Time/Time.style.d.ts +3 -0
  75. package/dist/dts/containers/DevMenuContainer.d.ts +8 -0
  76. package/dist/dts/containers/DevPanelContainer.d.ts +6 -0
  77. package/dist/dts/containers/DevtoolsAppContainer.d.ts +7 -0
  78. package/dist/dts/containers/EndpointConfigsContainer.d.ts +3 -0
  79. package/dist/dts/containers/EndpointStatusContainer.d.ts +3 -0
  80. package/dist/dts/containers/GlobalSettingsContainer.d.ts +3 -0
  81. package/dist/dts/containers/GlobalStatsContainer.d.ts +3 -0
  82. package/dist/dts/containers/LifecycleApiErrorContainer.d.ts +3 -0
  83. package/dist/dts/containers/LifecycleFailedContainer.d.ts +3 -0
  84. package/dist/dts/containers/LifecycleGeneralErrorContainer.d.ts +3 -0
  85. package/dist/dts/containers/LifecycleInQueueContainer.d.ts +3 -0
  86. package/dist/dts/containers/LifecyclePendingApiContainer.d.ts +3 -0
  87. package/dist/dts/containers/LifecyclePostActionContainer.d.ts +3 -0
  88. package/dist/dts/containers/LifecycleReceivedContainer.d.ts +3 -0
  89. package/dist/dts/data/devComponents.d.ts +4 -0
  90. package/dist/dts/data/devRoutes.d.ts +8 -0
  91. package/dist/dts/hooks/useStoreSize.d.ts +7 -0
  92. package/dist/dts/index.d.ts +1 -0
  93. package/dist/dts/store/selectors.d.ts +2235 -0
  94. package/dist/dts/types.d.ts +0 -0
  95. package/dist/dts/utils/date.d.ts +4 -0
  96. package/dist/dts/utils/download.d.ts +1 -0
  97. package/dist/hooks/useStoreSize.js +16 -0
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +1 -0
  100. package/dist/redux-connected-devtools.es.js +992 -0
  101. package/dist/redux-connected-devtools.es.js.map +1 -0
  102. package/dist/redux-connected-devtools.umd.js +247 -0
  103. package/dist/redux-connected-devtools.umd.js.map +1 -0
  104. package/dist/store/selectors.js +143 -0
  105. package/dist/types.js +1 -0
  106. package/dist/utils/date.js +8 -0
  107. package/dist/utils/download.js +17 -0
  108. package/package.json +29 -13
  109. package/.env +0 -2
  110. package/.prettierrc.js +0 -10
  111. package/.vscode/settings.json +0 -12
  112. package/.vscode/tasks.json +0 -33
  113. package/index.html +0 -58
  114. package/jest.config.js +0 -8
  115. package/public/devtools.html +0 -8
  116. package/public/icon.png +0 -0
  117. package/public/manifest.json +0 -29
  118. package/public/options.html +0 -12
  119. package/public/panel.html +0 -39
  120. package/public/popup.html +0 -12
  121. package/src/__tests__/sum.ts +0 -9
  122. package/src/background.ts +0 -49
  123. package/src/components/DevInspector/DevInspector.scss +0 -2
  124. package/src/components/DevInspector/DevInspector.tsx +0 -34
  125. package/src/components/DevList/DevList.scss +0 -2
  126. package/src/components/DevList/DevList.tsx +0 -62
  127. package/src/components/DevMenu/DevMenu.scss +0 -2
  128. package/src/components/DevMenu/DevMenu.tsx +0 -76
  129. package/src/components/DevPanel/DevPanel.scss +0 -2
  130. package/src/components/DevPanel/DevPanel.style.tsx +0 -16
  131. package/src/components/DevPanel/DevPanel.tsx +0 -51
  132. package/src/components/JourneyRow/JourneyRow.scss +0 -2
  133. package/src/components/JsonViewer/JsonViewer.scss +0 -2
  134. package/src/components/JsonViewer/JsonViewer.tsx +0 -24
  135. package/src/components/Lifecycle/Lifecycle.scss +0 -2
  136. package/src/components/Lifecycle/Lifecycle.tsx +0 -31
  137. package/src/components/LogsViewer/LogsViewer.scss +0 -2
  138. package/src/components/LogsViewer/LogsViewer.style.tsx +0 -5
  139. package/src/components/LogsViewer/LogsViewer.tsx +0 -14
  140. package/src/components/RequestDetails/RequestDetails.scss +0 -2
  141. package/src/components/RequestDetails/RequestDetails.style.tsx +0 -20
  142. package/src/components/RequestDetails/RequestDetails.tsx +0 -60
  143. package/src/components/RequestJourney/RequestJourney.scss +0 -2
  144. package/src/components/RequestJourney/RequestJourney.style.tsx +0 -6
  145. package/src/components/RequestJourney/RequestJourney.tsx +0 -33
  146. package/src/components/RequestRow/RequestRow.scss +0 -2
  147. package/src/components/RequestRow/RequestRow.tsx +0 -37
  148. package/src/components/Time/Time.scss +0 -2
  149. package/src/containers/DevMenuContainer.tsx +0 -28
  150. package/src/containers/DevPanelContainer.tsx +0 -10
  151. package/src/content_script.ts +0 -19
  152. package/src/devtools.tsx +0 -29
  153. package/src/index.ts +0 -1
  154. package/src/injected_script.ts +0 -9
  155. package/src/options.tsx +0 -77
  156. package/src/panel.tsx +0 -30
  157. package/src/popup.tsx +0 -63
  158. package/src/store/initialState.ts +0 -42
  159. package/src/store/selectors.ts +0 -205
  160. package/src/sum.ts +0 -3
  161. package/src/types.ts +0 -1
  162. package/src/utils/date.ts +0 -3
  163. package/tsconfig.json +0 -24
  164. package/vite.config.ts +0 -45
  165. package/webpack/webpack.common.js +0 -46
  166. package/webpack/webpack.dev.js +0 -7
  167. package/webpack/webpack.prod.js +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redux-connected-devtools.es.js","sources":["../src/components/Icon/AllIcons.tsx","../src/components/Icon/Icon.style.tsx","../src/components/Icon/Icon.tsx","../src/components/DevtoolsApp/DevtoolsApp.style.tsx","../src/components/DevMenu/DevMenu.style.tsx","../src/components/DevMenu/DevMenu.tsx","../src/data/devRoutes.ts","../src/store/selectors.ts","../src/containers/DevMenuContainer.tsx","../src/components/DevPanel/DevPanel.style.tsx","../src/components/DevInspector/DevInspector.style.tsx","../src/components/RequestJourney/RequestJourney.style.tsx","../src/utils/date.ts","../src/components/Time/Time.style.tsx","../src/components/Time/Time.tsx","../src/components/JourneyRow/JourneyRow.style.tsx","../src/components/JourneyRow/JourneyRow.tsx","../src/components/RequestJourney/RequestJourney.tsx","../src/components/RequestDetails/RequestDetails.style.tsx","../src/components/JsonViewer/JsonViewer.style.tsx","../src/components/JsonViewer/JsonViewer.tsx","../src/components/RequestDetails/RequestDetails.tsx","../src/components/DevInspector/DevInspector.tsx","../src/components/DevList/DevList.style.tsx","../src/components/DevList/DevList.tsx","../src/components/RequestRow/RequestRow.style.tsx","../src/components/RequestRow/RequestRow.tsx","../src/components/Lifecycle/Lifecycle.style.tsx","../src/components/Lifecycle/Lifecycle.tsx","../src/containers/LifecycleReceivedContainer.tsx","../src/containers/GlobalStatsContainer.tsx","../src/containers/EndpointConfigsContainer.tsx","../src/containers/GlobalSettingsContainer.tsx","../src/containers/EndpointStatusContainer.tsx","../src/containers/LifecycleInQueueContainer.tsx","../src/containers/LifecycleGeneralErrorContainer.tsx","../src/containers/LifecyclePendingApiContainer.tsx","../src/containers/LifecycleApiErrorContainer.tsx","../src/containers/LifecyclePostActionContainer.tsx","../src/containers/LifecycleFailedContainer.tsx","../src/data/devComponents.tsx","../src/components/DevPanel/DevPanel.tsx","../src/containers/DevPanelContainer.tsx","../src/components/Size/Size.style.tsx","../src/components/Size/Size.tsx","../src/components/DevtoolsApp/DevtoolsApp.tsx","../src/utils/download.ts","../src/hooks/useStoreSize.ts","../src/containers/DevtoolsAppContainer.tsx"],"sourcesContent":["import React from 'react';\n\nexport type IconName = 'download' | 'close' | 'clearAll';\n\ntype IconProps = {\n size?: number;\n};\n\nconst Download = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z' />\n </svg>\n );\n};\n\nconst Close = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z' />\n </svg>\n );\n};\n\nconst ClearAll = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z' />\n </svg>\n );\n};\n\ntype Icons = Record<IconName, React.FC<IconProps>>;\n\nexport const allIcons: Icons = {\n close: Close,\n clearAll: ClearAll,\n download: Download,\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ color?: string }>`\n margin: 0 3px;\n color: ${(props) => props.color ?? 'inherit'};\n cursor: pointer;\n\n &:hover {\n color: gold;\n }\n`;\n","import React from 'react';\nimport { allIcons, IconName } from './AllIcons';\nimport { Container } from './Icon.style';\n\nexport type IconProps = {\n name: IconName;\n color?: string;\n size?: number;\n onClick?: () => void;\n};\n\nexport function Icon(props: IconProps) {\n const { name, size = 20, color } = props;\n const Cmp = allIcons[name];\n\n return (\n <Container\n className='Icon-container'\n data-testid='Icon-container'\n color={color}\n onClick={props.onClick}\n >\n <Cmp size={size} />\n </Container>\n );\n}\n\nexport default Icon;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n background-color: #223;\n z-index: 3;\n color: #eee;\n display: flex;\n flex-direction: column;\n min-width: 880px;\n min-height: 880px;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n width: 190px;\n ${(props) => props.theme.borderRight('1px solid rgba(255, 255, 255, 0.2)')}\n box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n`;\n\nexport const MenuGroup = styled.div`\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n`;\n\nexport const MenuGroupTitle = styled.div`\n font-size: 13px;\n padding: 5px 10px;\n color: rgba(255, 255, 255, 0.5);\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n background-color: rgba(0, 0, 0, 0.1);\n`;\n\nexport const MenuItem = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 6px 10px;\n font-size: 14px;\n color: rgba(255, 255, 255, 0.89);\n background-color: transparent;\n\n &.selected {\n color: gold;\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n }\n`;\n\nexport const Title = styled.div`\n flex: 1;\n`;\n\nexport const Badge = styled.div`\n background-color: rgba(0, 0, 80, 0.3);\n padding: 0 4px;\n font-size: 12px;\n border-radius: 7px;\n border: 1px solid #334;\n color: cyan;\n`;\n\nexport const BadgeTotal = styled(Badge)`\n color: #555;\n`;\n","import React from 'react';\nimport { IDevRoute } from '../../data/devRoutes';\nimport {\n Container,\n MenuGroup,\n MenuGroupTitle,\n MenuItem,\n Title,\n Badge,\n BadgeTotal,\n} from './DevMenu.style';\nimport classnames from 'classnames';\n\nexport type DevMenuProps = {\n groups: string[];\n items: IDevRoute[];\n onClick: (route: IDevRoute) => void;\n selectedId: string;\n badges: Record<string, number>;\n badgesTotal: Record<string, number>;\n};\n\nexport function DevMenu(props: DevMenuProps) {\n const { groups, items, selectedId, badges, badgesTotal } = props;\n\n function renderItem(item: IDevRoute) {\n const { title, id } = item;\n const selected = id === selectedId;\n\n const badge = badges[id];\n const badgeTotal = badgesTotal[id];\n\n return (\n <MenuItem\n key={item.id}\n className={classnames({ selected })}\n onClick={() => props.onClick(item)}\n >\n <Title>{title}</Title>\n {badgeTotal > 0 && badgeTotal !== badge && (\n <BadgeTotal>{badgeTotal}</BadgeTotal>\n )}\n {badge > 0 && <Badge>{badge}</Badge>}\n </MenuItem>\n );\n }\n\n function renderItems(groupItems: IDevRoute[]) {\n return groupItems.map((item: IDevRoute) => renderItem(item));\n }\n\n function renderGroup(group: string) {\n const groupItems = items.filter((item) => item.group === group);\n\n return (\n <MenuGroup key={group}>\n <MenuGroupTitle>{group}</MenuGroupTitle>\n {renderItems(groupItems)}\n </MenuGroup>\n );\n }\n\n function renderGroups() {\n return groups.map((group: string) => renderGroup(group));\n }\n\n return (\n <Container\n className='DevMenu-container'\n data-testid='DevMenu-container'\n >\n {renderGroups()}\n </Container>\n );\n}\n\nexport default DevMenu;\n","export type IDevRoute = {\n id: string;\n title: string;\n group: string;\n componentId: string;\n};\n\nexport const devRoutes: IDevRoute[] = [\n {\n id: 'lifecycleReceived',\n title: '1. Received',\n group: 'lifecycle',\n componentId: 'LifecycleReceived',\n },\n {\n id: 'lifecycleInQueue',\n title: '2. In queue',\n group: 'lifecycle',\n componentId: 'LifecycleInQueue',\n },\n\n {\n id: 'lifecyclePendingApi',\n title: '3. Pending API',\n group: 'lifecycle',\n componentId: 'LifecyclePendingApi',\n },\n {\n id: 'lifecyclePostAction',\n title: '4. Post action',\n group: 'lifecycle',\n componentId: 'LifecyclePostAction',\n },\n {\n id: 'lifecycleGeneralError',\n title: 'e1. General errors',\n group: 'errors',\n componentId: 'LifecycleGeneralError',\n },\n {\n id: 'lifecycleApiError',\n title: 'e2. API errors',\n group: 'errors',\n componentId: 'LifecycleApiError',\n },\n {\n id: 'lifecycleFailed',\n title: 'e3. Failed requests (after retries)',\n group: 'errors',\n componentId: 'LifecycleFailed',\n },\n {\n id: 'endpointStatus',\n title: 'Endpoint status',\n group: 'settings & stats',\n componentId: 'EndpointStatus',\n },\n {\n id: 'settingsGlobal',\n title: 'Global settings',\n group: 'settings & stats',\n componentId: 'GlobalSettings',\n },\n {\n id: 'settingsEndpoints',\n title: 'Endpoints configs',\n group: 'settings & stats',\n componentId: 'EndpointConfigs',\n },\n {\n id: 'statsGlobal',\n title: 'Global stats',\n group: 'settings & stats',\n componentId: 'GlobalStats',\n },\n];\n\nconst getGroups = (): string[] => {\n const output: string[] = [];\n\n devRoutes.forEach((group) => {\n if (!output.includes(group.group)) {\n output.push(group.group);\n }\n });\n\n return output;\n};\n\nexport const devGroups: string[] = getGroups();\n","import { createSelector } from 'reselect';\nimport { connectedSelectors, LifecycleStatus } from 'redux-connected';\n\nexport const $requests = createSelector(\n connectedSelectors.$requests,\n (requests) => {\n return requests\n .map((request) => {\n const { items } = request;\n\n const lastPoint = items[items.length - 1] ?? {};\n\n const journeyWithDelta = items.map((point, index) => {\n const nextPoint = items[index + 1] ?? point;\n const delta = nextPoint.timestamp - point.timestamp;\n\n return {\n ...point,\n delta,\n };\n });\n\n return {\n ...request,\n items: journeyWithDelta,\n lastPointTimestamp: lastPoint.timestamp,\n lastPointStatus: lastPoint.status,\n };\n })\n .sort((a: any, b: any) => {\n if (a.lastPointTimestamp === b.lastPointTimestamp) {\n return 0;\n }\n\n return a.lastPointTimestamp > b.lastPointTimestamp ? -1 : 1;\n });\n }\n);\n\n// 1\nexport const $requestsReceived = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.RECEIVED;\n });\n});\n\nexport const $requestsReceivedPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.RECEIVED);\n });\n});\n\n// 2\nexport const $requestsInQueue = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.IN_QUEUE;\n });\n});\n\nexport const $requestsInQueuePast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n return items.find((point) => point.status === LifecycleStatus.IN_QUEUE);\n });\n});\n\n// 3\nexport const $requestsPendingApi = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return (\n lastPoint &&\n lastPoint.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\nexport const $requestsPendingApiPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\n// 4\nexport const $requestsPostAction = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.POST_ACTION;\n });\n});\n\nexport const $requestsPostActionPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.POST_ACTION\n );\n });\n});\n\n// e1\nexport const $requestsGeneralError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.GENERAL_ERROR;\n });\n});\n\nexport const $requestsGeneralErrorPast = createSelector(\n $requests,\n (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.GENERAL_ERROR\n );\n });\n }\n);\n\n// e2\nexport const $requestsApiError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.API_ERROR;\n });\n});\n\n// e3\nexport const $requestsFailed = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.FAILED);\n });\n});\n\nexport const $requestsApiErrorPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.API_ERROR\n );\n });\n});\n\nexport const $menuBadges = createSelector(\n $requestsReceived,\n $requestsInQueue,\n $requestsGeneralError,\n $requestsPendingApi,\n $requestsApiError,\n $requestsFailed,\n $requestsPostAction,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n\nexport const $menuBadgesTotal = createSelector(\n $requestsReceivedPast,\n $requestsInQueuePast,\n $requestsGeneralErrorPast,\n $requestsPendingApiPast,\n $requestsApiErrorPast,\n $requestsFailed,\n $requestsPostActionPast,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport DevMenu from '../components/DevMenu/DevMenu';\nimport { devGroups, devRoutes, IDevRoute } from '../data/devRoutes';\nimport { $menuBadges, $menuBadgesTotal } from '../store/selectors';\n\ntype DevPanelProps = {\n selectedId: string;\n onClick: (route: IDevRoute) => void;\n};\n\nexport function DevMenuContainer(props: DevPanelProps) {\n const badges = useSelector($menuBadges);\n const badgesTotal = useSelector($menuBadgesTotal);\n\n return (\n <DevMenu\n groups={devGroups}\n items={devRoutes}\n badges={badges}\n badgesTotal={badgesTotal}\n selectedId={props.selectedId}\n onClick={props.onClick}\n />\n );\n}\n\nexport default DevMenuContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n color: #eee;\n background-color: #232332;\n display: flex;\n flex-direction: row;\n`;\n\nexport const Content = styled.div`\n flex: 1;\n background-color: rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n`;\n\nexport const Actions = styled.div`\n position: absolute;\n bottom: 5px;\n ${(props) => props.theme.left('10px')}\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n border-top: 1px solid #333;\n max-height: 380px;\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","export const timestamp = () => new Date().getTime();\n\nexport let startOfTime = timestamp();\n\nexport const resetStartOfTime = () => {\n startOfTime = timestamp();\n};\n\nexport const getMinutes = () => {\n return new Date().getMinutes();\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n font-family: monospace;\n color: #99a;\n`;\n\nexport const Full = styled.div`\n font-size: 24px;\n`;\n\nexport const Fraction = styled.div`\n font-size: 12px;\n`;\n","import React from 'react';\nimport { startOfTime } from '../../utils/date';\nimport { Container, Full, Fraction } from './Time.style';\n\nexport type TimeProps = {\n value: number;\n};\n\nexport function Time(props: TimeProps) {\n const { value } = props;\n\n const relativeValue = (value - startOfTime) / 1000;\n\n const full = Math.floor(relativeValue);\n const fraction = (relativeValue - full).toFixed(3).split('.').pop();\n\n return (\n <Container className='Time-container' data-testid='Time-container'>\n <Full>{full}</Full>\n <Fraction>{fraction}</Fraction>\n </Container>\n );\n}\n\nexport default Time;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px 20px;\n\n &:nth-child(2n-1) {\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: pointer;\n }\n`;\n\nexport const Status = styled.div`\n color: #aaa;\n`;\n\nexport const DataIcon = styled.div`\n background-color: #000;\n padding: 3px 7px;\n font-size: 13px;\n font-weight: bold;\n color: purple;\n border-radius: 5px;\n ${(props) => props.theme.marginLeft('10px')}\n`;\n\nexport const Delta = styled.div`\n font-size: 13px;\n width: 60px;\n font-weight: bold;\n color: olive;\n ${(props) => props.theme.marginRight('10px')}\n text-align: center;\n font-family: monospace;\n`;\n\nexport const Flex = styled.div`\n flex: 1;\n`;\n","import React from 'react';\nimport Time from '../Time/Time';\nimport { Container, Status, DataIcon, Delta, Flex } from './JourneyRow.style';\nimport { JourneyPoint, LifecycleStatus } from 'redux-connected';\n\nexport type JourneyRowProps = {\n point: JourneyPoint;\n};\n\nconst statusMap: Record<LifecycleStatus, string> = {\n [LifecycleStatus.RECEIVED]: 'Received',\n [LifecycleStatus.POST_ACTION_OPTIMISTIC]: 'Post action (optimistic)',\n [LifecycleStatus.IN_QUEUE]: 'In queue',\n [LifecycleStatus.GENERAL_ERROR]: 'General error',\n [LifecycleStatus.PENDING_API_RESPONSE]: 'Pending API',\n [LifecycleStatus.API_ERROR]: 'API error',\n [LifecycleStatus.POST_ACTION]: 'Post action',\n [LifecycleStatus.FAILED]: 'Failed',\n};\n\nexport function JourneyRow(props: JourneyRowProps) {\n const { point } = props;\n const { status, timestamp, data, delta = '' } = point;\n\n function printPoint() {\n console.log(data);\n }\n\n function renderDataIcon() {\n if (!data) {\n return null;\n }\n\n return <DataIcon>D</DataIcon>;\n }\n\n function renderDelta() {\n if (!delta) {\n return null;\n }\n\n return <Delta>+{delta.toLocaleString()}</Delta>;\n }\n\n return (\n <Container\n className='JourneyRow-container'\n data-testid='JourneyRow-container'\n onClick={printPoint}\n >\n <Status>{statusMap[status]}</Status>\n {renderDataIcon()}\n <Flex />\n {renderDelta()}\n <Time value={timestamp} />\n </Container>\n );\n}\n\nexport default JourneyRow;\n","import React from 'react';\nimport { Container } from './RequestJourney.style';\nimport { ApiRequest, JourneyPoint } from 'redux-connected';\nimport JourneyRow from '../JourneyRow/JourneyRow';\n\nexport type RequestJourneyProps = {\n item: ApiRequest;\n};\n\nexport function RequestJourney(props: RequestJourneyProps) {\n const { item } = props;\n\n function renderItem(point: JourneyPoint, index: number) {\n return <JourneyRow key={index} point={point} />;\n }\n\n function renderItems() {\n return item.items.map((point: JourneyPoint, index: number) =>\n renderItem(point, index)\n );\n }\n\n return (\n <Container\n className='RequestJourney-container'\n data-testid='RequestJourney-container'\n >\n {renderItems()}\n </Container>\n );\n}\n\nexport default RequestJourney;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n padding: 20px;\n`;\n\nexport const Table = styled.table``;\n\nexport const Tr = styled.tr``;\n\nexport const Td = styled.td`\n color: goldenrod;\n\n &:first-child {\n color: #778;\n text-align: right;\n ${(props) => props.theme.paddingRight('10px')}\n }\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ width?: number }>`\n flex: 1;\n max-height: 850px;\n overflow: auto;\n padding: 0 25px;\n max-width: ${(props) => (props.width ? props.width + 'px' : '680px')};\n color: #ccc;\n line-height: 26px;\n\n &::-webkit-scrollbar {\n width: 8px;\n height: 7px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","import React from 'react';\nimport { Container } from './JsonViewer.style';\n\nexport type JsonViewerProps = {\n json: Json | undefined;\n width?: number;\n};\n\nexport function JsonViewer(props: JsonViewerProps) {\n const { json, width } = props;\n\n return (\n <Container\n className='JsonViewer-container'\n data-testid='JsonViewer-container'\n width={width}\n >\n <pre>{JSON.stringify(json, null, 4)}</pre>\n </Container>\n );\n}\n\nexport default JsonViewer;\n","import React from 'react';\nimport { Container, Table, Tr, Td } from './RequestDetails.style';\nimport { ApiRequest } from 'redux-connected';\nimport JsonViewer from '../JsonViewer/JsonViewer';\nimport bytes from 'bytes';\n\nexport type RequestDetailsProps = {\n item: ApiRequest;\n};\n\nexport function RequestDetails(props: RequestDetailsProps) {\n const { item } = props;\n\n return (\n <Container\n className='RequestDetails-container'\n data-testid='RequestDetails-container'\n >\n <Table>\n <tbody>\n <Tr>\n <Td>sequence</Td>\n <Td>{item.sequence}</Td>\n </Tr>\n <Tr>\n <Td>id</Td>\n <Td>{item.shortId}</Td>\n </Tr>\n <Tr>\n <Td>apiVerb</Td>\n <Td>{item.argsApiVerb}</Td>\n </Tr>\n <Tr>\n <Td>connection</Td>\n <Td>{item.argsConnectionType}</Td>\n </Tr>\n <Tr>\n <Td>duration</Td>\n <Td>{item.apiDuration}</Td>\n </Tr>\n <Tr>\n <Td>nodeName</Td>\n <Td>{item.argsNodeName}</Td>\n </Tr>\n <Tr>\n <Td>responseSize</Td>\n <Td>\n {item.apiResponseSize &&\n bytes(item.apiResponseSize)}\n </Td>\n </Tr>\n </tbody>\n </Table>\n\n <JsonViewer width={290} json={item.originalAction} />\n </Container>\n );\n}\n\nexport default RequestDetails;\n","import React from 'react';\nimport { Container } from './DevInspector.style';\nimport { ApiRequest } from 'redux-connected';\nimport RequestJourney from '../RequestJourney/RequestJourney';\nimport RequestDetails from '../RequestDetails/RequestDetails';\n\nexport type DevInspectorProps = {\n item?: ApiRequest;\n};\n\nexport function DevInspector(props: DevInspectorProps) {\n const { item } = props;\n\n if (!item) {\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n ></Container>\n );\n }\n\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n >\n <RequestDetails item={item} />\n <RequestJourney item={item} />\n </Container>\n );\n}\n\nexport default DevInspector;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n\n .list {\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n }\n`;\n\nexport const Empty = styled.div`\n color: #456;\n margin: 30px;\n font-size: 17px;\n text-align: center;\n text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);\n`;\n","import React from 'react';\nimport { Container, Empty } from './DevList.style';\nimport { FixedSizeList as List } from 'react-window';\nimport classnames from 'classnames';\n\nexport type DevListProps = {\n items: Json[];\n row: React.FC<any>;\n selectedRow: any;\n onClick: (item: any) => void;\n};\n\nexport function DevList(props: DevListProps) {\n const { row: Cmp, items, selectedRow } = props;\n\n const Item = (rowInfo: any) => {\n const { index, style } = rowInfo;\n\n const item = items[index];\n const className = classnames({ selected: item.id === selectedRow?.id });\n\n return (\n <Cmp\n onClick={props.onClick}\n className={className}\n index={index}\n style={style}\n item={item}\n />\n );\n };\n\n function renderEmpty() {\n return <Empty>Empty list</Empty>;\n }\n\n function renderList() {\n if (items.length === 0) {\n return renderEmpty();\n }\n\n return (\n <List\n height={850}\n itemCount={items.length}\n itemSize={68}\n width={350}\n className='list'\n >\n {Item}\n </List>\n );\n }\n\n return (\n <Container\n className='DevList-container'\n data-testid='DevList-container'\n >\n {renderList()}\n </Container>\n );\n}\n\nexport default DevList;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ index: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px;\n max-width: 90%;\n background-color: ${(props) =>\n props.index % 2 === 1 ? 'rgba(0, 0, 0, 0.2)' : 'transparent'};\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n }\n`;\n\nexport const Col = styled.div`\n &:first-child {\n flex: 1;\n }\n`;\n\nexport const Id = styled.div`\n color: goldenrod;\n font-size: 16px;\n`;\n\nexport const Type = styled.div`\n color: brown;\n`;\n","import React from 'react';\nimport { Container, Col, Id, Type } from './RequestRow.style';\nimport Time from '../Time/Time';\nimport { ApiRequest } from 'redux-connected';\n\nexport type RequestRowProps = {\n style: Json;\n item: ApiRequest;\n index: number;\n className?: string;\n onClick: (item: ApiRequest) => void;\n};\n\nexport function RequestRow(props: RequestRowProps) {\n const { index, style, item, className } = props;\n const { sequence, createdTS } = item;\n\n return (\n <Container\n className={`DevListRow-container ${className}`}\n data-testid='DevListRow-container'\n style={style}\n index={index}\n onClick={() => props.onClick(item)}\n >\n <Col>\n <Id>{sequence}</Id>\n <Type>{item.originalAction?.type}</Type>\n </Col>\n <Col>\n <Time value={createdTS} />\n </Col>\n </Container>\n );\n}\n\nexport default RequestRow;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n`;\n","import DevInspector from '../DevInspector/DevInspector';\nimport DevList from '../DevList/DevList';\nimport React, { useState } from 'react';\nimport RequestRow from '../RequestRow/RequestRow';\nimport { ApiRequest } from 'redux-connected';\nimport { Container } from './Lifecycle.style';\n\nexport type LifecycleProps = {\n requests: ApiRequest[];\n};\n\nexport function Lifecycle(props: LifecycleProps) {\n const { requests } = props;\n const [item, setItem] = useState<ApiRequest>();\n\n function onClick(newItem: ApiRequest) {\n setItem(newItem);\n }\n\n return (\n <Container\n className='Lifecycle-container'\n data-testid='Lifecycle-container'\n >\n <DevList\n items={requests}\n row={RequestRow}\n onClick={onClick}\n selectedRow={item}\n />\n <DevInspector item={item} />\n </Container>\n );\n}\n\nexport default Lifecycle;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsReceivedPast } from '../store/selectors';\n\nexport function LifecycleReceivedContainer() {\n const requests = useSelector($requestsReceivedPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleReceivedContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalStatsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalStatsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalStatsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointConfigsContainer() {\n const json = useSelector(connectedSelectors.$endpointsConfigRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointConfigsContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalSettingsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalSettingsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalSettingsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointStatusContainer() {\n const json = useSelector(connectedSelectors.$endpointsStateRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointStatusContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsInQueuePast } from '../store/selectors';\n\nexport function LifecycleInQueueContainer() {\n const requests = useSelector($requestsInQueuePast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleInQueueContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsGeneralErrorPast } from '../store/selectors';\n\nexport function LifecycleGeneralErrorContainer() {\n const requests = useSelector($requestsGeneralErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleGeneralErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPendingApiPast } from '../store/selectors';\n\nexport function LifecyclePendingApiContainer() {\n const requests = useSelector($requestsPendingApiPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePendingApiContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsApiErrorPast } from '../store/selectors';\n\nexport function LifecycleApiErrorContainer() {\n const requests = useSelector($requestsApiErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleApiErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPostActionPast } from '../store/selectors';\n\nexport function LifecyclePostActionContainer() {\n const requests = useSelector($requestsPostActionPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePostActionContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsFailed } from '../store/selectors';\n\nexport function LifecycleFailedContainer() {\n const requests = useSelector($requestsFailed);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleFailedContainer;\n","import LifecycleReceivedContainer from '../containers/LifecycleReceivedContainer';\nimport GlobalStatsContainer from '../containers/GlobalStatsContainer';\nimport EndpointConfigsContainer from '../containers/EndpointConfigsContainer';\nimport GlobalSettingsContainer from '../containers/GlobalSettingsContainer';\nimport EndpointStatusContainer from '../containers/EndpointStatusContainer';\nimport LifecycleInQueueContainer from '../containers/LifecycleInQueueContainer';\nimport LifecycleGeneralErrorContainer from '../containers/LifecycleGeneralErrorContainer';\nimport LifecyclePendingApiContainer from '../containers/LifecyclePendingApiContainer';\nimport LifecycleApiErrorContainer from '../containers/LifecycleApiErrorContainer';\nimport LifecyclePostActionContainer from '../containers/LifecyclePostActionContainer';\nimport LifecycleFailedContainer from '../containers/LifecycleFailedContainer';\n\ntype DevComponents = Record<string, React.FC<any>>;\n\nexport const devComponents: DevComponents = {\n LifecycleReceived: LifecycleReceivedContainer,\n LifecycleInQueue: LifecycleInQueueContainer,\n LifecycleGeneralError: LifecycleGeneralErrorContainer,\n LifecyclePendingApi: LifecyclePendingApiContainer,\n LifecycleApiError: LifecycleApiErrorContainer,\n LifecycleFailed: LifecycleFailedContainer,\n LifecyclePostAction: LifecyclePostActionContainer,\n GlobalSettings: GlobalSettingsContainer,\n GlobalStats: GlobalStatsContainer,\n EndpointConfigs: EndpointConfigsContainer,\n EndpointStatus: EndpointStatusContainer,\n};\n","import DevMenu from '../../containers/DevMenuContainer';\nimport React, { useState } from 'react';\nimport { Actions, Container, Content } from './DevPanel.style';\nimport { devComponents } from '../../data/devComponents';\nimport { devRoutes, IDevRoute } from '../../data/devRoutes';\n\nexport type DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanel(props: DevPanelProps) {\n const [route, setRoute] = useState<IDevRoute>(devRoutes[0]);\n\n function renderRoute() {\n const Cmp = devComponents[route.componentId];\n return <Cmp key={route.id} />;\n }\n\n return (\n <Container\n className='DevPanel-container'\n data-testid='DevPanel-container'\n >\n <DevMenu\n selectedId={route.id}\n onClick={(item: IDevRoute) => setRoute(item)}\n />\n <Actions>{props.children}</Actions>\n <Content>{renderRoute()}</Content>\n </Container>\n );\n}\n\n/*\n for the chrome extension devtools panel\n TODO: find another way to encapsulate this\n\nlet bgConnection;\n\nfunction init(id: string) {\n bgConnection = chrome.runtime?.connect({\n name: id,\n });\n\n if (bgConnection) {\n bgConnection.onMessage.addListener((message: Json) => {\n console.log('message ->', message);\n });\n }\n}\n\nif (chrome) {\n const tabId = String(chrome.devtools?.inspectedWindow.tabId ?? '');\n init(tabId);\n}\n*/\n\nexport default DevPanel;\n","import React from 'react';\nimport DevPanel from '../components/DevPanel/DevPanel';\n\ntype DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanelContainer(props: DevPanelProps) {\n return <DevPanel>{props.children}</DevPanel>;\n}\n\nexport default DevPanelContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n color: olive;\n margin: 0 5px;\n`;\n","import React from 'react';\nimport { Container } from './Size.style';\nimport bytes from 'bytes';\nimport { useMemo } from 'react';\n\nexport type SizeProps = {\n size?: number;\n};\n\nexport function Size(props: SizeProps) {\n const { size = 0 } = props;\n const sizeText = useMemo(() => bytes(size), [size]);\n\n return (\n <Container className='Size-container' data-testid='Size-container'>\n {!size ? '-' : sizeText}\n </Container>\n );\n}\n\nexport default Size;\n","import Icon from '../Icon/Icon';\nimport React, { useRef } from 'react';\nimport { Container } from './DevtoolsApp.style';\nimport { DevPanelContainer } from '../../containers/DevPanelContainer';\nimport { Provider } from 'react-redux';\nimport Size from '../Size/Size';\nimport classnames from 'classnames';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n clearRequests: () => void;\n downloadState: () => void;\n storeSizeInBytes?: number;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsApp(props: DevtoolsAppProps) {\n const { connectedStore, storeSizeInBytes, isDarkMode } = props;\n const ref = useRef(null);\n\n const className = classnames('DevtoolsApp-container', {\n darkMode: isDarkMode,\n });\n\n return (\n <Container\n ref={ref}\n className={className}\n data-testid='DevtoolsApp-container'\n >\n <Provider store={connectedStore}>\n <DevPanelContainer>\n <Size size={storeSizeInBytes} />\n <Icon\n name='clearAll'\n onClick={() => props.clearRequests()}\n />\n <Icon name='download' onClick={props.downloadState} />\n </DevPanelContainer>\n </Provider>\n </Container>\n );\n}\n\nexport default DevtoolsApp;\n","export const download = (filename: string, json: Json) => {\n const data = JSON.stringify(json, null, 4);\n\n const blob = new Blob([data], { type: 'text/csv' });\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob) {\n // @ts-ignore\n window.navigator.msSaveBlob(blob, filename);\n } else {\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = filename;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n }\n};\n","import { useState, useEffect } from 'react';\nimport { debounce } from 'shared-base';\n\ntype Callback = () => void;\n\ninterface ReduxStore {\n getState: () => Json;\n subscribe: (callback: Callback) => void;\n}\n\nexport const useStoreSize = (store: ReduxStore) => {\n const [storeSize, setStoreSize] = useState<number>();\n\n const calculateSize = debounce(() => {\n const state = store.getState();\n const size = JSON.stringify(state).length;\n setStoreSize(size);\n }, 500);\n\n useEffect(() => {\n store.subscribe(() => {\n calculateSize();\n });\n }, [store]);\n\n return storeSize;\n};\n","import React from 'react';\nimport DevtoolsApp from '../components/DevtoolsApp/DevtoolsApp';\nimport { clearCompletedRequests, clearFailedRequests } from 'redux-connected';\nimport { getMinutes, resetStartOfTime } from '../utils/date';\nimport { download } from '../utils/download';\nimport { useStoreSize } from '../hooks/useStoreSize';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsAppContainer(props: DevtoolsAppProps) {\n const { connectedStore, isDarkMode } = props;\n const storeSizeInBytes = useStoreSize(connectedStore);\n\n function clearRequests() {\n connectedStore.dispatch(clearCompletedRequests());\n connectedStore.dispatch(clearFailedRequests());\n // also resets time\n resetStartOfTime();\n }\n\n function downloadState() {\n const state = connectedStore.getState();\n const minutes = getMinutes();\n const filename = `state_${minutes}.json`;\n download(filename, state);\n }\n\n return (\n <DevtoolsApp\n connectedStore={connectedStore}\n clearRequests={clearRequests}\n downloadState={downloadState}\n storeSizeInBytes={storeSizeInBytes}\n isDarkMode={isDarkMode}\n />\n );\n}\n\nexport default DevtoolsAppContainer;\n"],"names":["Container","_a","timestamp","List","DevMenu"],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ (function(f,E){typeof exports=="object"&&typeof module!="undefined"?E(exports,require("react"),require("styled-components"),require("react-redux"),require("classnames"),require("reselect"),require("redux-connected"),require("bytes"),require("react-window"),require("shared-base")):typeof define=="function"&&define.amd?define(["exports","react","styled-components","react-redux","classnames","reselect","redux-connected","bytes","react-window","shared-base"],E):(f=typeof globalThis!="undefined"?globalThis:f||self,E(f.ReduxConnectedDevtools={},f.react,f.styledComponents,f.reactRedux,f.classnames,f.reselect,f.reduxConnected,f.bytes,f.reactWindow,f.sharedBase))})(this,function(f,E,J,m,Q,d,c,V,U,W){"use strict";function P(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var n=P(E),a=P(J),k=P(Q),C=P(V);const K={close:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}))},clearAll:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z"}))},download:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"}))}},X=a.default.div`
2
+ margin: 0 3px;
3
+ color: ${e=>{var t;return(t=e.color)!=null?t:"inherit"}};
4
+ cursor: pointer;
5
+
6
+ &:hover {
7
+ color: gold;
8
+ }
9
+ `;function D(e){const{name:t,size:l=20,color:r}=e,o=K[t];return n.default.createElement(X,{className:"Icon-container","data-testid":"Icon-container",color:r,onClick:e.onClick},n.default.createElement(o,{size:l}))}const Y=a.default.div`
10
+ flex: 1;
11
+ background-color: #223;
12
+ z-index: 3;
13
+ color: #eee;
14
+ display: flex;
15
+ flex-direction: column;
16
+ min-width: 880px;
17
+ min-height: 880px;
18
+ `,Z=a.default.div`
19
+ width: 190px;
20
+ ${e=>e.theme.borderRight("1px solid rgba(255, 255, 255, 0.2)")}
21
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
22
+ `,ee=a.default.div`
23
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
24
+ `,te=a.default.div`
25
+ font-size: 13px;
26
+ padding: 5px 10px;
27
+ color: rgba(255, 255, 255, 0.5);
28
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
29
+ background-color: rgba(0, 0, 0, 0.1);
30
+ `,ne=a.default.div`
31
+ display: flex;
32
+ flex-direction: row;
33
+ align-items: center;
34
+ padding: 6px 10px;
35
+ font-size: 14px;
36
+ color: rgba(255, 255, 255, 0.89);
37
+ background-color: transparent;
38
+
39
+ &.selected {
40
+ color: gold;
41
+ background-color: rgba(255, 255, 255, 0.05);
42
+ }
43
+
44
+ &:hover {
45
+ background-color: rgba(255, 255, 255, 0.1);
46
+ cursor: pointer;
47
+ }
48
+ `,le=a.default.div`
49
+ flex: 1;
50
+ `,q=a.default.div`
51
+ background-color: rgba(0, 0, 80, 0.3);
52
+ padding: 0 4px;
53
+ font-size: 12px;
54
+ border-radius: 7px;
55
+ border: 1px solid #334;
56
+ color: cyan;
57
+ `,re=a.default(q)`
58
+ color: #555;
59
+ `;function oe(e){const{groups:t,items:l,selectedId:r,badges:o,badgesTotal:i}=e;function s(u){const{title:S,id:I}=u,ft=I===r,R=o[I],$=i[I];return n.default.createElement(ne,{key:u.id,className:k.default({selected:ft}),onClick:()=>e.onClick(u)},n.default.createElement(le,null,S),$>0&&$!==R&&n.default.createElement(re,null,$),R>0&&n.default.createElement(q,null,R))}function h(u){return u.map(S=>s(S))}function y(u){const S=l.filter(I=>I.group===u);return n.default.createElement(ee,{key:u},n.default.createElement(te,null,u),h(S))}function x(){return t.map(u=>y(u))}return n.default.createElement(Z,{className:"DevMenu-container","data-testid":"DevMenu-container"},x())}const L=[{id:"lifecycleReceived",title:"1. Received",group:"lifecycle",componentId:"LifecycleReceived"},{id:"lifecycleInQueue",title:"2. In queue",group:"lifecycle",componentId:"LifecycleInQueue"},{id:"lifecyclePendingApi",title:"3. Pending API",group:"lifecycle",componentId:"LifecyclePendingApi"},{id:"lifecyclePostAction",title:"4. Post action",group:"lifecycle",componentId:"LifecyclePostAction"},{id:"lifecycleGeneralError",title:"e1. General errors",group:"errors",componentId:"LifecycleGeneralError"},{id:"lifecycleApiError",title:"e2. API errors",group:"errors",componentId:"LifecycleApiError"},{id:"lifecycleFailed",title:"e3. Failed requests (after retries)",group:"errors",componentId:"LifecycleFailed"},{id:"endpointStatus",title:"Endpoint status",group:"settings & stats",componentId:"EndpointStatus"},{id:"settingsGlobal",title:"Global settings",group:"settings & stats",componentId:"GlobalSettings"},{id:"settingsEndpoints",title:"Endpoints configs",group:"settings & stats",componentId:"EndpointConfigs"},{id:"statsGlobal",title:"Global stats",group:"settings & stats",componentId:"GlobalStats"}],ae=(()=>{const e=[];return L.forEach(t=>{e.includes(t.group)||e.push(t.group)}),e})(),g=d.createSelector(c.connectedSelectors.$requests,e=>e.map(t=>{var i;const{items:l}=t,r=(i=l[l.length-1])!=null?i:{},o=l.map((s,h)=>{var u;const x=((u=l[h+1])!=null?u:s).timestamp-s.timestamp;return{...s,delta:x}});return{...t,items:o,lastPointTimestamp:r.timestamp,lastPointStatus:r.status}}).sort((t,l)=>t.lastPointTimestamp===l.lastPointTimestamp?0:t.lastPointTimestamp>l.lastPointTimestamp?-1:1)),ce=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.RECEIVED})),N=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.RECEIVED)})),ie=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.IN_QUEUE})),z=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.IN_QUEUE)})),se=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.PENDING_API_RESPONSE})),T=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.PENDING_API_RESPONSE)})),ue=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.POST_ACTION})),G=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.POST_ACTION)})),de=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.GENERAL_ERROR})),_=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.GENERAL_ERROR)})),fe=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.API_ERROR})),A=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.FAILED)})),O=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.API_ERROR)})),me=d.createSelector(ce,ie,de,se,fe,A,ue,(e,t,l,r,o,i,s)=>({lifecycleReceived:e.length,lifecycleInQueue:t.length,lifecycleGeneralError:l.length,lifecyclePendingApi:r.length,lifecycleApiError:o.length,lifecycleFailed:i.length,lifecyclePostAction:s.length})),pe=d.createSelector(N,z,_,T,O,A,G,(e,t,l,r,o,i,s)=>({lifecycleReceived:e.length,lifecycleInQueue:t.length,lifecycleGeneralError:l.length,lifecyclePendingApi:r.length,lifecycleApiError:o.length,lifecycleFailed:i.length,lifecyclePostAction:s.length}));function ge(e){const t=m.useSelector(me),l=m.useSelector(pe);return n.default.createElement(oe,{groups:ae,items:L,badges:t,badgesTotal:l,selectedId:e.selectedId,onClick:e.onClick})}const Ee=a.default.div`
60
+ flex: 1;
61
+ color: #eee;
62
+ background-color: #232332;
63
+ display: flex;
64
+ flex-direction: row;
65
+ `,he=a.default.div`
66
+ flex: 1;
67
+ background-color: rgba(0, 0, 0, 0.15);
68
+ display: flex;
69
+ flex-direction: column;
70
+ `,ye=a.default.div`
71
+ position: absolute;
72
+ bottom: 5px;
73
+ ${e=>e.theme.left("10px")}
74
+ display: flex;
75
+ flex-direction: row;
76
+ align-items: center;
77
+ `,M=a.default.div`
78
+ flex: 1;
79
+ display: flex;
80
+ flex-direction: column;
81
+ `,ve=a.default.div`
82
+ flex: 1;
83
+ border-top: 1px solid #333;
84
+ max-height: 380px;
85
+ overflow-y: scroll;
86
+
87
+ &::-webkit-scrollbar {
88
+ width: 8px;
89
+ }
90
+
91
+ /* Track */
92
+ &::-webkit-scrollbar-track {
93
+ background: #333;
94
+ }
95
+
96
+ /* Handle */
97
+ &::-webkit-scrollbar-thumb {
98
+ background: #555;
99
+ }
100
+
101
+ /* Handle on hover */
102
+ &::-webkit-scrollbar-thumb:hover {
103
+ background: #666;
104
+ }
105
+ `,F=()=>new Date().getTime();let H=F();const be=()=>{H=F()},Se=()=>new Date().getMinutes(),we=a.default.div`
106
+ display: flex;
107
+ flex-direction: row;
108
+ align-items: flex-start;
109
+ font-family: monospace;
110
+ color: #99a;
111
+ `,xe=a.default.div`
112
+ font-size: 24px;
113
+ `,Ie=a.default.div`
114
+ font-size: 12px;
115
+ `;function B(e){const{value:t}=e,l=(t-H)/1e3,r=Math.floor(l),o=(l-r).toFixed(3).split(".").pop();return n.default.createElement(we,{className:"Time-container","data-testid":"Time-container"},n.default.createElement(xe,null,r),n.default.createElement(Ie,null,o))}const Pe=a.default.div`
116
+ flex: 1;
117
+ display: flex;
118
+ flex-direction: row;
119
+ align-items: center;
120
+ padding: 10px 20px;
121
+
122
+ &:nth-child(2n-1) {
123
+ background-color: rgba(0, 0, 0, 0.2);
124
+ }
125
+
126
+ &:hover {
127
+ background-color: rgba(0, 0, 0, 0.3);
128
+ cursor: pointer;
129
+ }
130
+ `,ke=a.default.div`
131
+ color: #aaa;
132
+ `,Le=a.default.div`
133
+ background-color: #000;
134
+ padding: 3px 7px;
135
+ font-size: 13px;
136
+ font-weight: bold;
137
+ color: purple;
138
+ border-radius: 5px;
139
+ ${e=>e.theme.marginLeft("10px")}
140
+ `,Ae=a.default.div`
141
+ font-size: 13px;
142
+ width: 60px;
143
+ font-weight: bold;
144
+ color: olive;
145
+ ${e=>e.theme.marginRight("10px")}
146
+ text-align: center;
147
+ font-family: monospace;
148
+ `,Re=a.default.div`
149
+ flex: 1;
150
+ `,$e={[c.LifecycleStatus.RECEIVED]:"Received",[c.LifecycleStatus.POST_ACTION_OPTIMISTIC]:"Post action (optimistic)",[c.LifecycleStatus.IN_QUEUE]:"In queue",[c.LifecycleStatus.GENERAL_ERROR]:"General error",[c.LifecycleStatus.PENDING_API_RESPONSE]:"Pending API",[c.LifecycleStatus.API_ERROR]:"API error",[c.LifecycleStatus.POST_ACTION]:"Post action",[c.LifecycleStatus.FAILED]:"Failed"};function Ce(e){const{point:t}=e,{status:l,timestamp:r,data:o,delta:i=""}=t;function s(){console.log(o)}function h(){return o?n.default.createElement(Le,null,"D"):null}function y(){return i?n.default.createElement(Ae,null,"+",i.toLocaleString()):null}return n.default.createElement(Pe,{className:"JourneyRow-container","data-testid":"JourneyRow-container",onClick:s},n.default.createElement(ke,null,$e[l]),h(),n.default.createElement(Re,null),y(),n.default.createElement(B,{value:r}))}function De(e){const{item:t}=e;function l(o,i){return n.default.createElement(Ce,{key:i,point:o})}function r(){return t.items.map((o,i)=>l(o,i))}return n.default.createElement(ve,{className:"RequestJourney-container","data-testid":"RequestJourney-container"},r())}const qe=a.default.div`
151
+ flex: 1;
152
+ padding: 20px;
153
+ `,Ne=a.default.table``,v=a.default.tr``,p=a.default.td`
154
+ color: goldenrod;
155
+
156
+ &:first-child {
157
+ color: #778;
158
+ text-align: right;
159
+ ${e=>e.theme.paddingRight("10px")}
160
+ }
161
+ `,ze=a.default.div`
162
+ flex: 1;
163
+ max-height: 850px;
164
+ overflow: auto;
165
+ padding: 0 25px;
166
+ max-width: ${e=>e.width?e.width+"px":"680px"};
167
+ color: #ccc;
168
+ line-height: 26px;
169
+
170
+ &::-webkit-scrollbar {
171
+ width: 8px;
172
+ height: 7px;
173
+ }
174
+
175
+ /* Track */
176
+ &::-webkit-scrollbar-track {
177
+ background: #333;
178
+ }
179
+
180
+ /* Handle */
181
+ &::-webkit-scrollbar-thumb {
182
+ background: #555;
183
+ }
184
+
185
+ /* Handle on hover */
186
+ &::-webkit-scrollbar-thumb:hover {
187
+ background: #666;
188
+ }
189
+ `;function w(e){const{json:t,width:l}=e;return n.default.createElement(ze,{className:"JsonViewer-container","data-testid":"JsonViewer-container",width:l},n.default.createElement("pre",null,JSON.stringify(t,null,4)))}function Te(e){const{item:t}=e;return n.default.createElement(qe,{className:"RequestDetails-container","data-testid":"RequestDetails-container"},n.default.createElement(Ne,null,n.default.createElement("tbody",null,n.default.createElement(v,null,n.default.createElement(p,null,"sequence"),n.default.createElement(p,null,t.sequence)),n.default.createElement(v,null,n.default.createElement(p,null,"id"),n.default.createElement(p,null,t.shortId)),n.default.createElement(v,null,n.default.createElement(p,null,"apiVerb"),n.default.createElement(p,null,t.argsApiVerb)),n.default.createElement(v,null,n.default.createElement(p,null,"connection"),n.default.createElement(p,null,t.argsConnectionType)),n.default.createElement(v,null,n.default.createElement(p,null,"duration"),n.default.createElement(p,null,t.apiDuration)),n.default.createElement(v,null,n.default.createElement(p,null,"nodeName"),n.default.createElement(p,null,t.argsNodeName)),n.default.createElement(v,null,n.default.createElement(p,null,"responseSize"),n.default.createElement(p,null,t.apiResponseSize&&C.default(t.apiResponseSize))))),n.default.createElement(w,{width:290,json:t.originalAction}))}function Ge(e){const{item:t}=e;return t?n.default.createElement(M,{className:"DevInspector-container","data-testid":"DevInspector-container"},n.default.createElement(Te,{item:t}),n.default.createElement(De,{item:t})):n.default.createElement(M,{className:"DevInspector-container","data-testid":"DevInspector-container"})}const _e=a.default.div`
190
+ flex: 1;
191
+
192
+ .list {
193
+ &::-webkit-scrollbar {
194
+ width: 8px;
195
+ }
196
+
197
+ /* Track */
198
+ &::-webkit-scrollbar-track {
199
+ background: #333;
200
+ }
201
+
202
+ /* Handle */
203
+ &::-webkit-scrollbar-thumb {
204
+ background: #555;
205
+ }
206
+
207
+ /* Handle on hover */
208
+ &::-webkit-scrollbar-thumb:hover {
209
+ background: #666;
210
+ }
211
+ }
212
+ `,Oe=a.default.div`
213
+ color: #456;
214
+ margin: 30px;
215
+ font-size: 17px;
216
+ text-align: center;
217
+ text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);
218
+ `;function Me(e){const{row:t,items:l,selectedRow:r}=e,o=h=>{const{index:y,style:x}=h,u=l[y],S=k.default({selected:u.id===(r==null?void 0:r.id)});return n.default.createElement(t,{onClick:e.onClick,className:S,index:y,style:x,item:u})};function i(){return n.default.createElement(Oe,null,"Empty list")}function s(){return l.length===0?i():n.default.createElement(U.FixedSizeList,{height:850,itemCount:l.length,itemSize:68,width:350,className:"list"},o)}return n.default.createElement(_e,{className:"DevList-container","data-testid":"DevList-container"},s())}const Fe=a.default.div`
219
+ flex: 1;
220
+ display: flex;
221
+ flex-direction: row;
222
+ align-items: center;
223
+ padding: 10px;
224
+ max-width: 90%;
225
+ background-color: ${e=>e.index%2===1?"rgba(0, 0, 0, 0.2)":"transparent"};
226
+
227
+ &:hover {
228
+ background-color: rgba(0, 0, 0, 0.7);
229
+ cursor: pointer;
230
+ }
231
+ `,j=a.default.div`
232
+ &:first-child {
233
+ flex: 1;
234
+ }
235
+ `,He=a.default.div`
236
+ color: goldenrod;
237
+ font-size: 16px;
238
+ `,Be=a.default.div`
239
+ color: brown;
240
+ `;function je(e){var h;const{index:t,style:l,item:r,className:o}=e,{sequence:i,createdTS:s}=r;return n.default.createElement(Fe,{className:`DevListRow-container ${o}`,"data-testid":"DevListRow-container",style:l,index:t,onClick:()=>e.onClick(r)},n.default.createElement(j,null,n.default.createElement(He,null,i),n.default.createElement(Be,null,(h=r.originalAction)==null?void 0:h.type)),n.default.createElement(j,null,n.default.createElement(B,{value:s})))}const Je=a.default.div`
241
+ flex: 1;
242
+ display: flex;
243
+ `;function b(e){const{requests:t}=e,[l,r]=E.useState();function o(i){r(i)}return n.default.createElement(Je,{className:"Lifecycle-container","data-testid":"Lifecycle-container"},n.default.createElement(Me,{items:t,row:je,onClick:o,selectedRow:l}),n.default.createElement(Ge,{item:l}))}function Qe(){const e=m.useSelector(N);return n.default.createElement(b,{requests:e})}function Ve(){const e=m.useSelector(c.connectedSelectors.$apiGlobalStatsRaw);return n.default.createElement(w,{json:e})}function Ue(){const e=m.useSelector(c.connectedSelectors.$endpointsConfigRaw);return n.default.createElement(w,{json:e})}function We(){const e=m.useSelector(c.connectedSelectors.$apiGlobalSettingsRaw);return n.default.createElement(w,{json:e})}function Ke(){const e=m.useSelector(c.connectedSelectors.$endpointsStateRaw);return n.default.createElement(w,{json:e})}function Xe(){const e=m.useSelector(z);return n.default.createElement(b,{requests:e})}function Ye(){const e=m.useSelector(_);return n.default.createElement(b,{requests:e})}function Ze(){const e=m.useSelector(T);return n.default.createElement(b,{requests:e})}function et(){const e=m.useSelector(O);return n.default.createElement(b,{requests:e})}function tt(){const e=m.useSelector(G);return n.default.createElement(b,{requests:e})}function nt(){const e=m.useSelector(A);return n.default.createElement(b,{requests:e})}const lt={LifecycleReceived:Qe,LifecycleInQueue:Xe,LifecycleGeneralError:Ye,LifecyclePendingApi:Ze,LifecycleApiError:et,LifecycleFailed:nt,LifecyclePostAction:tt,GlobalSettings:We,GlobalStats:Ve,EndpointConfigs:Ue,EndpointStatus:Ke};function rt(e){const[t,l]=E.useState(L[0]);function r(){const o=lt[t.componentId];return n.default.createElement(o,{key:t.id})}return n.default.createElement(Ee,{className:"DevPanel-container","data-testid":"DevPanel-container"},n.default.createElement(ge,{selectedId:t.id,onClick:o=>l(o)}),n.default.createElement(ye,null,e.children),n.default.createElement(he,null,r()))}function ot(e){return n.default.createElement(rt,null,e.children)}const at=a.default.div`
244
+ color: olive;
245
+ margin: 0 5px;
246
+ `;function ct(e){const{size:t=0}=e,l=E.useMemo(()=>C.default(t),[t]);return n.default.createElement(at,{className:"Size-container","data-testid":"Size-container"},t?l:"-")}function it(e){const{connectedStore:t,storeSizeInBytes:l,isDarkMode:r}=e,o=E.useRef(null),i=k.default("DevtoolsApp-container",{darkMode:r});return n.default.createElement(Y,{ref:o,className:i,"data-testid":"DevtoolsApp-container"},n.default.createElement(m.Provider,{store:t},n.default.createElement(ot,null,n.default.createElement(ct,{size:l}),n.default.createElement(D,{name:"clearAll",onClick:()=>e.clearRequests()}),n.default.createElement(D,{name:"download",onClick:e.downloadState}))))}const st=(e,t)=>{const l=JSON.stringify(t,null,4),r=new Blob([l],{type:"text/csv"});if(window.navigator.msSaveOrOpenBlob)window.navigator.msSaveBlob(r,e);else{const o=window.document.createElement("a");o.href=window.URL.createObjectURL(r),o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o)}},ut=e=>{const[t,l]=E.useState(),r=W.debounce(()=>{const o=e.getState(),i=JSON.stringify(o).length;l(i)},500);return E.useEffect(()=>{e.subscribe(()=>{r()})},[e]),t};function dt(e){const{connectedStore:t,isDarkMode:l}=e,r=ut(t);function o(){t.dispatch(c.clearCompletedRequests()),t.dispatch(c.clearFailedRequests()),be()}function i(){const s=t.getState(),y=`state_${Se()}.json`;st(y,s)}return n.default.createElement(it,{connectedStore:t,clearRequests:o,downloadState:i,storeSizeInBytes:r,isDarkMode:l})}f.DevtoolsApp=dt,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
247
+ //# sourceMappingURL=redux-connected-devtools.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redux-connected-devtools.umd.js","sources":["../src/components/Icon/AllIcons.tsx","../src/components/Icon/Icon.style.tsx","../src/components/Icon/Icon.tsx","../src/components/DevtoolsApp/DevtoolsApp.style.tsx","../src/components/DevMenu/DevMenu.style.tsx","../src/components/DevMenu/DevMenu.tsx","../src/data/devRoutes.ts","../src/store/selectors.ts","../src/containers/DevMenuContainer.tsx","../src/components/DevPanel/DevPanel.style.tsx","../src/components/DevInspector/DevInspector.style.tsx","../src/components/RequestJourney/RequestJourney.style.tsx","../src/utils/date.ts","../src/components/Time/Time.style.tsx","../src/components/Time/Time.tsx","../src/components/JourneyRow/JourneyRow.style.tsx","../src/components/JourneyRow/JourneyRow.tsx","../src/components/RequestJourney/RequestJourney.tsx","../src/components/RequestDetails/RequestDetails.style.tsx","../src/components/JsonViewer/JsonViewer.style.tsx","../src/components/JsonViewer/JsonViewer.tsx","../src/components/RequestDetails/RequestDetails.tsx","../src/components/DevInspector/DevInspector.tsx","../src/components/DevList/DevList.style.tsx","../src/components/DevList/DevList.tsx","../src/components/RequestRow/RequestRow.style.tsx","../src/components/RequestRow/RequestRow.tsx","../src/components/Lifecycle/Lifecycle.style.tsx","../src/components/Lifecycle/Lifecycle.tsx","../src/containers/LifecycleReceivedContainer.tsx","../src/containers/GlobalStatsContainer.tsx","../src/containers/EndpointConfigsContainer.tsx","../src/containers/GlobalSettingsContainer.tsx","../src/containers/EndpointStatusContainer.tsx","../src/containers/LifecycleInQueueContainer.tsx","../src/containers/LifecycleGeneralErrorContainer.tsx","../src/containers/LifecyclePendingApiContainer.tsx","../src/containers/LifecycleApiErrorContainer.tsx","../src/containers/LifecyclePostActionContainer.tsx","../src/containers/LifecycleFailedContainer.tsx","../src/data/devComponents.tsx","../src/components/DevPanel/DevPanel.tsx","../src/containers/DevPanelContainer.tsx","../src/components/Size/Size.style.tsx","../src/components/Size/Size.tsx","../src/components/DevtoolsApp/DevtoolsApp.tsx","../src/utils/download.ts","../src/hooks/useStoreSize.ts","../src/containers/DevtoolsAppContainer.tsx"],"sourcesContent":["import React from 'react';\n\nexport type IconName = 'download' | 'close' | 'clearAll';\n\ntype IconProps = {\n size?: number;\n};\n\nconst Download = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z' />\n </svg>\n );\n};\n\nconst Close = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z' />\n </svg>\n );\n};\n\nconst ClearAll = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z' />\n </svg>\n );\n};\n\ntype Icons = Record<IconName, React.FC<IconProps>>;\n\nexport const allIcons: Icons = {\n close: Close,\n clearAll: ClearAll,\n download: Download,\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ color?: string }>`\n margin: 0 3px;\n color: ${(props) => props.color ?? 'inherit'};\n cursor: pointer;\n\n &:hover {\n color: gold;\n }\n`;\n","import React from 'react';\nimport { allIcons, IconName } from './AllIcons';\nimport { Container } from './Icon.style';\n\nexport type IconProps = {\n name: IconName;\n color?: string;\n size?: number;\n onClick?: () => void;\n};\n\nexport function Icon(props: IconProps) {\n const { name, size = 20, color } = props;\n const Cmp = allIcons[name];\n\n return (\n <Container\n className='Icon-container'\n data-testid='Icon-container'\n color={color}\n onClick={props.onClick}\n >\n <Cmp size={size} />\n </Container>\n );\n}\n\nexport default Icon;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n background-color: #223;\n z-index: 3;\n color: #eee;\n display: flex;\n flex-direction: column;\n min-width: 880px;\n min-height: 880px;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n width: 190px;\n ${(props) => props.theme.borderRight('1px solid rgba(255, 255, 255, 0.2)')}\n box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n`;\n\nexport const MenuGroup = styled.div`\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n`;\n\nexport const MenuGroupTitle = styled.div`\n font-size: 13px;\n padding: 5px 10px;\n color: rgba(255, 255, 255, 0.5);\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n background-color: rgba(0, 0, 0, 0.1);\n`;\n\nexport const MenuItem = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 6px 10px;\n font-size: 14px;\n color: rgba(255, 255, 255, 0.89);\n background-color: transparent;\n\n &.selected {\n color: gold;\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n }\n`;\n\nexport const Title = styled.div`\n flex: 1;\n`;\n\nexport const Badge = styled.div`\n background-color: rgba(0, 0, 80, 0.3);\n padding: 0 4px;\n font-size: 12px;\n border-radius: 7px;\n border: 1px solid #334;\n color: cyan;\n`;\n\nexport const BadgeTotal = styled(Badge)`\n color: #555;\n`;\n","import React from 'react';\nimport { IDevRoute } from '../../data/devRoutes';\nimport {\n Container,\n MenuGroup,\n MenuGroupTitle,\n MenuItem,\n Title,\n Badge,\n BadgeTotal,\n} from './DevMenu.style';\nimport classnames from 'classnames';\n\nexport type DevMenuProps = {\n groups: string[];\n items: IDevRoute[];\n onClick: (route: IDevRoute) => void;\n selectedId: string;\n badges: Record<string, number>;\n badgesTotal: Record<string, number>;\n};\n\nexport function DevMenu(props: DevMenuProps) {\n const { groups, items, selectedId, badges, badgesTotal } = props;\n\n function renderItem(item: IDevRoute) {\n const { title, id } = item;\n const selected = id === selectedId;\n\n const badge = badges[id];\n const badgeTotal = badgesTotal[id];\n\n return (\n <MenuItem\n key={item.id}\n className={classnames({ selected })}\n onClick={() => props.onClick(item)}\n >\n <Title>{title}</Title>\n {badgeTotal > 0 && badgeTotal !== badge && (\n <BadgeTotal>{badgeTotal}</BadgeTotal>\n )}\n {badge > 0 && <Badge>{badge}</Badge>}\n </MenuItem>\n );\n }\n\n function renderItems(groupItems: IDevRoute[]) {\n return groupItems.map((item: IDevRoute) => renderItem(item));\n }\n\n function renderGroup(group: string) {\n const groupItems = items.filter((item) => item.group === group);\n\n return (\n <MenuGroup key={group}>\n <MenuGroupTitle>{group}</MenuGroupTitle>\n {renderItems(groupItems)}\n </MenuGroup>\n );\n }\n\n function renderGroups() {\n return groups.map((group: string) => renderGroup(group));\n }\n\n return (\n <Container\n className='DevMenu-container'\n data-testid='DevMenu-container'\n >\n {renderGroups()}\n </Container>\n );\n}\n\nexport default DevMenu;\n","export type IDevRoute = {\n id: string;\n title: string;\n group: string;\n componentId: string;\n};\n\nexport const devRoutes: IDevRoute[] = [\n {\n id: 'lifecycleReceived',\n title: '1. Received',\n group: 'lifecycle',\n componentId: 'LifecycleReceived',\n },\n {\n id: 'lifecycleInQueue',\n title: '2. In queue',\n group: 'lifecycle',\n componentId: 'LifecycleInQueue',\n },\n\n {\n id: 'lifecyclePendingApi',\n title: '3. Pending API',\n group: 'lifecycle',\n componentId: 'LifecyclePendingApi',\n },\n {\n id: 'lifecyclePostAction',\n title: '4. Post action',\n group: 'lifecycle',\n componentId: 'LifecyclePostAction',\n },\n {\n id: 'lifecycleGeneralError',\n title: 'e1. General errors',\n group: 'errors',\n componentId: 'LifecycleGeneralError',\n },\n {\n id: 'lifecycleApiError',\n title: 'e2. API errors',\n group: 'errors',\n componentId: 'LifecycleApiError',\n },\n {\n id: 'lifecycleFailed',\n title: 'e3. Failed requests (after retries)',\n group: 'errors',\n componentId: 'LifecycleFailed',\n },\n {\n id: 'endpointStatus',\n title: 'Endpoint status',\n group: 'settings & stats',\n componentId: 'EndpointStatus',\n },\n {\n id: 'settingsGlobal',\n title: 'Global settings',\n group: 'settings & stats',\n componentId: 'GlobalSettings',\n },\n {\n id: 'settingsEndpoints',\n title: 'Endpoints configs',\n group: 'settings & stats',\n componentId: 'EndpointConfigs',\n },\n {\n id: 'statsGlobal',\n title: 'Global stats',\n group: 'settings & stats',\n componentId: 'GlobalStats',\n },\n];\n\nconst getGroups = (): string[] => {\n const output: string[] = [];\n\n devRoutes.forEach((group) => {\n if (!output.includes(group.group)) {\n output.push(group.group);\n }\n });\n\n return output;\n};\n\nexport const devGroups: string[] = getGroups();\n","import { createSelector } from 'reselect';\nimport { connectedSelectors, LifecycleStatus } from 'redux-connected';\n\nexport const $requests = createSelector(\n connectedSelectors.$requests,\n (requests) => {\n return requests\n .map((request) => {\n const { items } = request;\n\n const lastPoint = items[items.length - 1] ?? {};\n\n const journeyWithDelta = items.map((point, index) => {\n const nextPoint = items[index + 1] ?? point;\n const delta = nextPoint.timestamp - point.timestamp;\n\n return {\n ...point,\n delta,\n };\n });\n\n return {\n ...request,\n items: journeyWithDelta,\n lastPointTimestamp: lastPoint.timestamp,\n lastPointStatus: lastPoint.status,\n };\n })\n .sort((a: any, b: any) => {\n if (a.lastPointTimestamp === b.lastPointTimestamp) {\n return 0;\n }\n\n return a.lastPointTimestamp > b.lastPointTimestamp ? -1 : 1;\n });\n }\n);\n\n// 1\nexport const $requestsReceived = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.RECEIVED;\n });\n});\n\nexport const $requestsReceivedPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.RECEIVED);\n });\n});\n\n// 2\nexport const $requestsInQueue = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.IN_QUEUE;\n });\n});\n\nexport const $requestsInQueuePast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n return items.find((point) => point.status === LifecycleStatus.IN_QUEUE);\n });\n});\n\n// 3\nexport const $requestsPendingApi = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return (\n lastPoint &&\n lastPoint.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\nexport const $requestsPendingApiPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\n// 4\nexport const $requestsPostAction = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.POST_ACTION;\n });\n});\n\nexport const $requestsPostActionPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.POST_ACTION\n );\n });\n});\n\n// e1\nexport const $requestsGeneralError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.GENERAL_ERROR;\n });\n});\n\nexport const $requestsGeneralErrorPast = createSelector(\n $requests,\n (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.GENERAL_ERROR\n );\n });\n }\n);\n\n// e2\nexport const $requestsApiError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.API_ERROR;\n });\n});\n\n// e3\nexport const $requestsFailed = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.FAILED);\n });\n});\n\nexport const $requestsApiErrorPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.API_ERROR\n );\n });\n});\n\nexport const $menuBadges = createSelector(\n $requestsReceived,\n $requestsInQueue,\n $requestsGeneralError,\n $requestsPendingApi,\n $requestsApiError,\n $requestsFailed,\n $requestsPostAction,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n\nexport const $menuBadgesTotal = createSelector(\n $requestsReceivedPast,\n $requestsInQueuePast,\n $requestsGeneralErrorPast,\n $requestsPendingApiPast,\n $requestsApiErrorPast,\n $requestsFailed,\n $requestsPostActionPast,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport DevMenu from '../components/DevMenu/DevMenu';\nimport { devGroups, devRoutes, IDevRoute } from '../data/devRoutes';\nimport { $menuBadges, $menuBadgesTotal } from '../store/selectors';\n\ntype DevPanelProps = {\n selectedId: string;\n onClick: (route: IDevRoute) => void;\n};\n\nexport function DevMenuContainer(props: DevPanelProps) {\n const badges = useSelector($menuBadges);\n const badgesTotal = useSelector($menuBadgesTotal);\n\n return (\n <DevMenu\n groups={devGroups}\n items={devRoutes}\n badges={badges}\n badgesTotal={badgesTotal}\n selectedId={props.selectedId}\n onClick={props.onClick}\n />\n );\n}\n\nexport default DevMenuContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n color: #eee;\n background-color: #232332;\n display: flex;\n flex-direction: row;\n`;\n\nexport const Content = styled.div`\n flex: 1;\n background-color: rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n`;\n\nexport const Actions = styled.div`\n position: absolute;\n bottom: 5px;\n ${(props) => props.theme.left('10px')}\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n border-top: 1px solid #333;\n max-height: 380px;\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","export const timestamp = () => new Date().getTime();\n\nexport let startOfTime = timestamp();\n\nexport const resetStartOfTime = () => {\n startOfTime = timestamp();\n};\n\nexport const getMinutes = () => {\n return new Date().getMinutes();\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n font-family: monospace;\n color: #99a;\n`;\n\nexport const Full = styled.div`\n font-size: 24px;\n`;\n\nexport const Fraction = styled.div`\n font-size: 12px;\n`;\n","import React from 'react';\nimport { startOfTime } from '../../utils/date';\nimport { Container, Full, Fraction } from './Time.style';\n\nexport type TimeProps = {\n value: number;\n};\n\nexport function Time(props: TimeProps) {\n const { value } = props;\n\n const relativeValue = (value - startOfTime) / 1000;\n\n const full = Math.floor(relativeValue);\n const fraction = (relativeValue - full).toFixed(3).split('.').pop();\n\n return (\n <Container className='Time-container' data-testid='Time-container'>\n <Full>{full}</Full>\n <Fraction>{fraction}</Fraction>\n </Container>\n );\n}\n\nexport default Time;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px 20px;\n\n &:nth-child(2n-1) {\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: pointer;\n }\n`;\n\nexport const Status = styled.div`\n color: #aaa;\n`;\n\nexport const DataIcon = styled.div`\n background-color: #000;\n padding: 3px 7px;\n font-size: 13px;\n font-weight: bold;\n color: purple;\n border-radius: 5px;\n ${(props) => props.theme.marginLeft('10px')}\n`;\n\nexport const Delta = styled.div`\n font-size: 13px;\n width: 60px;\n font-weight: bold;\n color: olive;\n ${(props) => props.theme.marginRight('10px')}\n text-align: center;\n font-family: monospace;\n`;\n\nexport const Flex = styled.div`\n flex: 1;\n`;\n","import React from 'react';\nimport Time from '../Time/Time';\nimport { Container, Status, DataIcon, Delta, Flex } from './JourneyRow.style';\nimport { JourneyPoint, LifecycleStatus } from 'redux-connected';\n\nexport type JourneyRowProps = {\n point: JourneyPoint;\n};\n\nconst statusMap: Record<LifecycleStatus, string> = {\n [LifecycleStatus.RECEIVED]: 'Received',\n [LifecycleStatus.POST_ACTION_OPTIMISTIC]: 'Post action (optimistic)',\n [LifecycleStatus.IN_QUEUE]: 'In queue',\n [LifecycleStatus.GENERAL_ERROR]: 'General error',\n [LifecycleStatus.PENDING_API_RESPONSE]: 'Pending API',\n [LifecycleStatus.API_ERROR]: 'API error',\n [LifecycleStatus.POST_ACTION]: 'Post action',\n [LifecycleStatus.FAILED]: 'Failed',\n};\n\nexport function JourneyRow(props: JourneyRowProps) {\n const { point } = props;\n const { status, timestamp, data, delta = '' } = point;\n\n function printPoint() {\n console.log(data);\n }\n\n function renderDataIcon() {\n if (!data) {\n return null;\n }\n\n return <DataIcon>D</DataIcon>;\n }\n\n function renderDelta() {\n if (!delta) {\n return null;\n }\n\n return <Delta>+{delta.toLocaleString()}</Delta>;\n }\n\n return (\n <Container\n className='JourneyRow-container'\n data-testid='JourneyRow-container'\n onClick={printPoint}\n >\n <Status>{statusMap[status]}</Status>\n {renderDataIcon()}\n <Flex />\n {renderDelta()}\n <Time value={timestamp} />\n </Container>\n );\n}\n\nexport default JourneyRow;\n","import React from 'react';\nimport { Container } from './RequestJourney.style';\nimport { ApiRequest, JourneyPoint } from 'redux-connected';\nimport JourneyRow from '../JourneyRow/JourneyRow';\n\nexport type RequestJourneyProps = {\n item: ApiRequest;\n};\n\nexport function RequestJourney(props: RequestJourneyProps) {\n const { item } = props;\n\n function renderItem(point: JourneyPoint, index: number) {\n return <JourneyRow key={index} point={point} />;\n }\n\n function renderItems() {\n return item.items.map((point: JourneyPoint, index: number) =>\n renderItem(point, index)\n );\n }\n\n return (\n <Container\n className='RequestJourney-container'\n data-testid='RequestJourney-container'\n >\n {renderItems()}\n </Container>\n );\n}\n\nexport default RequestJourney;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n padding: 20px;\n`;\n\nexport const Table = styled.table``;\n\nexport const Tr = styled.tr``;\n\nexport const Td = styled.td`\n color: goldenrod;\n\n &:first-child {\n color: #778;\n text-align: right;\n ${(props) => props.theme.paddingRight('10px')}\n }\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ width?: number }>`\n flex: 1;\n max-height: 850px;\n overflow: auto;\n padding: 0 25px;\n max-width: ${(props) => (props.width ? props.width + 'px' : '680px')};\n color: #ccc;\n line-height: 26px;\n\n &::-webkit-scrollbar {\n width: 8px;\n height: 7px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","import React from 'react';\nimport { Container } from './JsonViewer.style';\n\nexport type JsonViewerProps = {\n json: Json | undefined;\n width?: number;\n};\n\nexport function JsonViewer(props: JsonViewerProps) {\n const { json, width } = props;\n\n return (\n <Container\n className='JsonViewer-container'\n data-testid='JsonViewer-container'\n width={width}\n >\n <pre>{JSON.stringify(json, null, 4)}</pre>\n </Container>\n );\n}\n\nexport default JsonViewer;\n","import React from 'react';\nimport { Container, Table, Tr, Td } from './RequestDetails.style';\nimport { ApiRequest } from 'redux-connected';\nimport JsonViewer from '../JsonViewer/JsonViewer';\nimport bytes from 'bytes';\n\nexport type RequestDetailsProps = {\n item: ApiRequest;\n};\n\nexport function RequestDetails(props: RequestDetailsProps) {\n const { item } = props;\n\n return (\n <Container\n className='RequestDetails-container'\n data-testid='RequestDetails-container'\n >\n <Table>\n <tbody>\n <Tr>\n <Td>sequence</Td>\n <Td>{item.sequence}</Td>\n </Tr>\n <Tr>\n <Td>id</Td>\n <Td>{item.shortId}</Td>\n </Tr>\n <Tr>\n <Td>apiVerb</Td>\n <Td>{item.argsApiVerb}</Td>\n </Tr>\n <Tr>\n <Td>connection</Td>\n <Td>{item.argsConnectionType}</Td>\n </Tr>\n <Tr>\n <Td>duration</Td>\n <Td>{item.apiDuration}</Td>\n </Tr>\n <Tr>\n <Td>nodeName</Td>\n <Td>{item.argsNodeName}</Td>\n </Tr>\n <Tr>\n <Td>responseSize</Td>\n <Td>\n {item.apiResponseSize &&\n bytes(item.apiResponseSize)}\n </Td>\n </Tr>\n </tbody>\n </Table>\n\n <JsonViewer width={290} json={item.originalAction} />\n </Container>\n );\n}\n\nexport default RequestDetails;\n","import React from 'react';\nimport { Container } from './DevInspector.style';\nimport { ApiRequest } from 'redux-connected';\nimport RequestJourney from '../RequestJourney/RequestJourney';\nimport RequestDetails from '../RequestDetails/RequestDetails';\n\nexport type DevInspectorProps = {\n item?: ApiRequest;\n};\n\nexport function DevInspector(props: DevInspectorProps) {\n const { item } = props;\n\n if (!item) {\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n ></Container>\n );\n }\n\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n >\n <RequestDetails item={item} />\n <RequestJourney item={item} />\n </Container>\n );\n}\n\nexport default DevInspector;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n\n .list {\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n }\n`;\n\nexport const Empty = styled.div`\n color: #456;\n margin: 30px;\n font-size: 17px;\n text-align: center;\n text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);\n`;\n","import React from 'react';\nimport { Container, Empty } from './DevList.style';\nimport { FixedSizeList as List } from 'react-window';\nimport classnames from 'classnames';\n\nexport type DevListProps = {\n items: Json[];\n row: React.FC<any>;\n selectedRow: any;\n onClick: (item: any) => void;\n};\n\nexport function DevList(props: DevListProps) {\n const { row: Cmp, items, selectedRow } = props;\n\n const Item = (rowInfo: any) => {\n const { index, style } = rowInfo;\n\n const item = items[index];\n const className = classnames({ selected: item.id === selectedRow?.id });\n\n return (\n <Cmp\n onClick={props.onClick}\n className={className}\n index={index}\n style={style}\n item={item}\n />\n );\n };\n\n function renderEmpty() {\n return <Empty>Empty list</Empty>;\n }\n\n function renderList() {\n if (items.length === 0) {\n return renderEmpty();\n }\n\n return (\n <List\n height={850}\n itemCount={items.length}\n itemSize={68}\n width={350}\n className='list'\n >\n {Item}\n </List>\n );\n }\n\n return (\n <Container\n className='DevList-container'\n data-testid='DevList-container'\n >\n {renderList()}\n </Container>\n );\n}\n\nexport default DevList;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ index: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px;\n max-width: 90%;\n background-color: ${(props) =>\n props.index % 2 === 1 ? 'rgba(0, 0, 0, 0.2)' : 'transparent'};\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n }\n`;\n\nexport const Col = styled.div`\n &:first-child {\n flex: 1;\n }\n`;\n\nexport const Id = styled.div`\n color: goldenrod;\n font-size: 16px;\n`;\n\nexport const Type = styled.div`\n color: brown;\n`;\n","import React from 'react';\nimport { Container, Col, Id, Type } from './RequestRow.style';\nimport Time from '../Time/Time';\nimport { ApiRequest } from 'redux-connected';\n\nexport type RequestRowProps = {\n style: Json;\n item: ApiRequest;\n index: number;\n className?: string;\n onClick: (item: ApiRequest) => void;\n};\n\nexport function RequestRow(props: RequestRowProps) {\n const { index, style, item, className } = props;\n const { sequence, createdTS } = item;\n\n return (\n <Container\n className={`DevListRow-container ${className}`}\n data-testid='DevListRow-container'\n style={style}\n index={index}\n onClick={() => props.onClick(item)}\n >\n <Col>\n <Id>{sequence}</Id>\n <Type>{item.originalAction?.type}</Type>\n </Col>\n <Col>\n <Time value={createdTS} />\n </Col>\n </Container>\n );\n}\n\nexport default RequestRow;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n`;\n","import DevInspector from '../DevInspector/DevInspector';\nimport DevList from '../DevList/DevList';\nimport React, { useState } from 'react';\nimport RequestRow from '../RequestRow/RequestRow';\nimport { ApiRequest } from 'redux-connected';\nimport { Container } from './Lifecycle.style';\n\nexport type LifecycleProps = {\n requests: ApiRequest[];\n};\n\nexport function Lifecycle(props: LifecycleProps) {\n const { requests } = props;\n const [item, setItem] = useState<ApiRequest>();\n\n function onClick(newItem: ApiRequest) {\n setItem(newItem);\n }\n\n return (\n <Container\n className='Lifecycle-container'\n data-testid='Lifecycle-container'\n >\n <DevList\n items={requests}\n row={RequestRow}\n onClick={onClick}\n selectedRow={item}\n />\n <DevInspector item={item} />\n </Container>\n );\n}\n\nexport default Lifecycle;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsReceivedPast } from '../store/selectors';\n\nexport function LifecycleReceivedContainer() {\n const requests = useSelector($requestsReceivedPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleReceivedContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalStatsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalStatsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalStatsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointConfigsContainer() {\n const json = useSelector(connectedSelectors.$endpointsConfigRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointConfigsContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalSettingsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalSettingsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalSettingsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointStatusContainer() {\n const json = useSelector(connectedSelectors.$endpointsStateRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointStatusContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsInQueuePast } from '../store/selectors';\n\nexport function LifecycleInQueueContainer() {\n const requests = useSelector($requestsInQueuePast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleInQueueContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsGeneralErrorPast } from '../store/selectors';\n\nexport function LifecycleGeneralErrorContainer() {\n const requests = useSelector($requestsGeneralErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleGeneralErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPendingApiPast } from '../store/selectors';\n\nexport function LifecyclePendingApiContainer() {\n const requests = useSelector($requestsPendingApiPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePendingApiContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsApiErrorPast } from '../store/selectors';\n\nexport function LifecycleApiErrorContainer() {\n const requests = useSelector($requestsApiErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleApiErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPostActionPast } from '../store/selectors';\n\nexport function LifecyclePostActionContainer() {\n const requests = useSelector($requestsPostActionPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePostActionContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsFailed } from '../store/selectors';\n\nexport function LifecycleFailedContainer() {\n const requests = useSelector($requestsFailed);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleFailedContainer;\n","import LifecycleReceivedContainer from '../containers/LifecycleReceivedContainer';\nimport GlobalStatsContainer from '../containers/GlobalStatsContainer';\nimport EndpointConfigsContainer from '../containers/EndpointConfigsContainer';\nimport GlobalSettingsContainer from '../containers/GlobalSettingsContainer';\nimport EndpointStatusContainer from '../containers/EndpointStatusContainer';\nimport LifecycleInQueueContainer from '../containers/LifecycleInQueueContainer';\nimport LifecycleGeneralErrorContainer from '../containers/LifecycleGeneralErrorContainer';\nimport LifecyclePendingApiContainer from '../containers/LifecyclePendingApiContainer';\nimport LifecycleApiErrorContainer from '../containers/LifecycleApiErrorContainer';\nimport LifecyclePostActionContainer from '../containers/LifecyclePostActionContainer';\nimport LifecycleFailedContainer from '../containers/LifecycleFailedContainer';\n\ntype DevComponents = Record<string, React.FC<any>>;\n\nexport const devComponents: DevComponents = {\n LifecycleReceived: LifecycleReceivedContainer,\n LifecycleInQueue: LifecycleInQueueContainer,\n LifecycleGeneralError: LifecycleGeneralErrorContainer,\n LifecyclePendingApi: LifecyclePendingApiContainer,\n LifecycleApiError: LifecycleApiErrorContainer,\n LifecycleFailed: LifecycleFailedContainer,\n LifecyclePostAction: LifecyclePostActionContainer,\n GlobalSettings: GlobalSettingsContainer,\n GlobalStats: GlobalStatsContainer,\n EndpointConfigs: EndpointConfigsContainer,\n EndpointStatus: EndpointStatusContainer,\n};\n","import DevMenu from '../../containers/DevMenuContainer';\nimport React, { useState } from 'react';\nimport { Actions, Container, Content } from './DevPanel.style';\nimport { devComponents } from '../../data/devComponents';\nimport { devRoutes, IDevRoute } from '../../data/devRoutes';\n\nexport type DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanel(props: DevPanelProps) {\n const [route, setRoute] = useState<IDevRoute>(devRoutes[0]);\n\n function renderRoute() {\n const Cmp = devComponents[route.componentId];\n return <Cmp key={route.id} />;\n }\n\n return (\n <Container\n className='DevPanel-container'\n data-testid='DevPanel-container'\n >\n <DevMenu\n selectedId={route.id}\n onClick={(item: IDevRoute) => setRoute(item)}\n />\n <Actions>{props.children}</Actions>\n <Content>{renderRoute()}</Content>\n </Container>\n );\n}\n\n/*\n for the chrome extension devtools panel\n TODO: find another way to encapsulate this\n\nlet bgConnection;\n\nfunction init(id: string) {\n bgConnection = chrome.runtime?.connect({\n name: id,\n });\n\n if (bgConnection) {\n bgConnection.onMessage.addListener((message: Json) => {\n console.log('message ->', message);\n });\n }\n}\n\nif (chrome) {\n const tabId = String(chrome.devtools?.inspectedWindow.tabId ?? '');\n init(tabId);\n}\n*/\n\nexport default DevPanel;\n","import React from 'react';\nimport DevPanel from '../components/DevPanel/DevPanel';\n\ntype DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanelContainer(props: DevPanelProps) {\n return <DevPanel>{props.children}</DevPanel>;\n}\n\nexport default DevPanelContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n color: olive;\n margin: 0 5px;\n`;\n","import React from 'react';\nimport { Container } from './Size.style';\nimport bytes from 'bytes';\nimport { useMemo } from 'react';\n\nexport type SizeProps = {\n size?: number;\n};\n\nexport function Size(props: SizeProps) {\n const { size = 0 } = props;\n const sizeText = useMemo(() => bytes(size), [size]);\n\n return (\n <Container className='Size-container' data-testid='Size-container'>\n {!size ? '-' : sizeText}\n </Container>\n );\n}\n\nexport default Size;\n","import Icon from '../Icon/Icon';\nimport React, { useRef } from 'react';\nimport { Container } from './DevtoolsApp.style';\nimport { DevPanelContainer } from '../../containers/DevPanelContainer';\nimport { Provider } from 'react-redux';\nimport Size from '../Size/Size';\nimport classnames from 'classnames';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n clearRequests: () => void;\n downloadState: () => void;\n storeSizeInBytes?: number;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsApp(props: DevtoolsAppProps) {\n const { connectedStore, storeSizeInBytes, isDarkMode } = props;\n const ref = useRef(null);\n\n const className = classnames('DevtoolsApp-container', {\n darkMode: isDarkMode,\n });\n\n return (\n <Container\n ref={ref}\n className={className}\n data-testid='DevtoolsApp-container'\n >\n <Provider store={connectedStore}>\n <DevPanelContainer>\n <Size size={storeSizeInBytes} />\n <Icon\n name='clearAll'\n onClick={() => props.clearRequests()}\n />\n <Icon name='download' onClick={props.downloadState} />\n </DevPanelContainer>\n </Provider>\n </Container>\n );\n}\n\nexport default DevtoolsApp;\n","export const download = (filename: string, json: Json) => {\n const data = JSON.stringify(json, null, 4);\n\n const blob = new Blob([data], { type: 'text/csv' });\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob) {\n // @ts-ignore\n window.navigator.msSaveBlob(blob, filename);\n } else {\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = filename;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n }\n};\n","import { useState, useEffect } from 'react';\nimport { debounce } from 'shared-base';\n\ntype Callback = () => void;\n\ninterface ReduxStore {\n getState: () => Json;\n subscribe: (callback: Callback) => void;\n}\n\nexport const useStoreSize = (store: ReduxStore) => {\n const [storeSize, setStoreSize] = useState<number>();\n\n const calculateSize = debounce(() => {\n const state = store.getState();\n const size = JSON.stringify(state).length;\n setStoreSize(size);\n }, 500);\n\n useEffect(() => {\n store.subscribe(() => {\n calculateSize();\n });\n }, [store]);\n\n return storeSize;\n};\n","import React from 'react';\nimport DevtoolsApp from '../components/DevtoolsApp/DevtoolsApp';\nimport { clearCompletedRequests, clearFailedRequests } from 'redux-connected';\nimport { getMinutes, resetStartOfTime } from '../utils/date';\nimport { download } from '../utils/download';\nimport { useStoreSize } from '../hooks/useStoreSize';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsAppContainer(props: DevtoolsAppProps) {\n const { connectedStore, isDarkMode } = props;\n const storeSizeInBytes = useStoreSize(connectedStore);\n\n function clearRequests() {\n connectedStore.dispatch(clearCompletedRequests());\n connectedStore.dispatch(clearFailedRequests());\n // also resets time\n resetStartOfTime();\n }\n\n function downloadState() {\n const state = connectedStore.getState();\n const minutes = getMinutes();\n const filename = `state_${minutes}.json`;\n download(filename, state);\n }\n\n return (\n <DevtoolsApp\n connectedStore={connectedStore}\n clearRequests={clearRequests}\n downloadState={downloadState}\n storeSizeInBytes={storeSizeInBytes}\n isDarkMode={isDarkMode}\n />\n );\n}\n\nexport default DevtoolsAppContainer;\n"],"names":["allIcons","props","size","React","Container","styled","_a","Icon","name","color","Cmp","MenuGroup","MenuGroupTitle","MenuItem","Title","Badge","BadgeTotal","DevMenu","groups","items","selectedId","badges","badgesTotal","renderItem","item","title","id","selected","badge","badgeTotal","classnames","renderItems","groupItems","renderGroup","group","renderGroups","devRoutes","devGroups","output","$requests","createSelector","connectedSelectors","requests","request","lastPoint","journeyWithDelta","point","index","delta","a","b","$requestsReceived","LifecycleStatus","$requestsReceivedPast","$requestsInQueue","$requestsInQueuePast","$requestsPendingApi","$requestsPendingApiPast","$requestsPostAction","$requestsPostActionPast","$requestsGeneralError","$requestsGeneralErrorPast","$requestsApiError","$requestsFailed","$requestsApiErrorPast","$menuBadges","requestsReceived","requestsInQueue","requestsGeneralError","requestsPendingApi","requestsApiError","requestsFailed","requestsPostAction","$menuBadgesTotal","DevMenuContainer","useSelector","Content","Actions","timestamp","startOfTime","resetStartOfTime","getMinutes","Full","Fraction","Time","value","relativeValue","full","fraction","Status","DataIcon","Delta","Flex","statusMap","JourneyRow","status","data","printPoint","renderDataIcon","renderDelta","RequestJourney","Table","Tr","Td","JsonViewer","json","width","RequestDetails","bytes","DevInspector","Empty","DevList","selectedRow","Item","rowInfo","style","className","renderEmpty","renderList","List","Col","Id","Type","RequestRow","sequence","createdTS","Lifecycle","setItem","useState","onClick","newItem","LifecycleReceivedContainer","GlobalStatsContainer","EndpointConfigsContainer","GlobalSettingsContainer","EndpointStatusContainer","LifecycleInQueueContainer","LifecycleGeneralErrorContainer","LifecyclePendingApiContainer","LifecycleApiErrorContainer","LifecyclePostActionContainer","LifecycleFailedContainer","devComponents","DevPanel","route","setRoute","renderRoute","DevPanelContainer","Size","sizeText","useMemo","DevtoolsApp","connectedStore","storeSizeInBytes","isDarkMode","ref","useRef","Provider","download","filename","blob","elem","useStoreSize","store","storeSize","setStoreSize","calculateSize","debounce","state","useEffect","DevtoolsAppContainer","clearRequests","clearCompletedRequests","clearFailedRequests","downloadState"],"mappings":"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"}