redux-connected-devtools 0.0.13 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/.env +2 -0
  2. package/.prettierrc.js +10 -0
  3. package/.vscode/settings.json +12 -0
  4. package/.vscode/tasks.json +33 -0
  5. package/LICENSE +21 -0
  6. package/README.md +5 -0
  7. package/index.html +58 -0
  8. package/jest.config.js +8 -0
  9. package/package.json +47 -62
  10. package/public/devtools.html +8 -0
  11. package/public/icon.png +0 -0
  12. package/public/manifest.json +29 -0
  13. package/public/options.html +12 -0
  14. package/public/panel.html +39 -0
  15. package/public/popup.html +12 -0
  16. package/src/__tests__/sum.ts +9 -0
  17. package/src/background.ts +49 -0
  18. package/src/components/DevInspector/DevInspector.scss +2 -0
  19. package/src/components/DevInspector/DevInspector.style.tsx +8 -0
  20. package/src/components/DevInspector/DevInspector.tsx +34 -0
  21. package/src/components/DevList/DevList.scss +2 -0
  22. package/src/components/DevList/DevList.style.tsx +34 -0
  23. package/src/components/DevList/DevList.tsx +62 -0
  24. package/src/components/DevMenu/DevMenu.scss +2 -0
  25. package/src/components/DevMenu/DevMenu.style.tsx +53 -0
  26. package/src/components/DevMenu/DevMenu.tsx +76 -0
  27. package/src/components/DevPanel/DevPanel.scss +2 -0
  28. package/src/components/DevPanel/DevPanel.style.tsx +16 -0
  29. package/src/components/DevPanel/DevPanel.tsx +51 -0
  30. package/src/components/JourneyRow/JourneyRow.scss +2 -0
  31. package/src/components/JourneyRow/JourneyRow.style.tsx +46 -0
  32. package/src/components/JourneyRow/JourneyRow.tsx +58 -0
  33. package/src/components/JsonViewer/JsonViewer.scss +2 -0
  34. package/src/components/JsonViewer/JsonViewer.style.tsx +31 -0
  35. package/src/components/JsonViewer/JsonViewer.tsx +24 -0
  36. package/src/components/Lifecycle/Lifecycle.scss +2 -0
  37. package/src/components/Lifecycle/Lifecycle.style.tsx +6 -0
  38. package/src/components/Lifecycle/Lifecycle.tsx +31 -0
  39. package/src/components/LogsViewer/LogsViewer.scss +2 -0
  40. package/src/components/LogsViewer/LogsViewer.style.tsx +5 -0
  41. package/src/components/LogsViewer/LogsViewer.tsx +14 -0
  42. package/src/components/RequestDetails/RequestDetails.scss +2 -0
  43. package/src/components/RequestDetails/RequestDetails.style.tsx +20 -0
  44. package/src/components/RequestDetails/RequestDetails.tsx +60 -0
  45. package/src/components/RequestJourney/RequestJourney.scss +2 -0
  46. package/src/components/RequestJourney/RequestJourney.style.tsx +6 -0
  47. package/src/components/RequestJourney/RequestJourney.tsx +33 -0
  48. package/src/components/RequestRow/RequestRow.scss +2 -0
  49. package/src/components/RequestRow/RequestRow.style.tsx +31 -0
  50. package/src/components/RequestRow/RequestRow.tsx +37 -0
  51. package/src/components/Time/Time.scss +2 -0
  52. package/src/components/Time/Time.style.tsx +17 -0
  53. package/src/components/Time/Time.tsx +25 -0
  54. package/src/containers/DevMenuContainer.tsx +28 -0
  55. package/src/containers/DevPanelContainer.tsx +10 -0
  56. package/src/containers/EndpointConfigsContainer.tsx +12 -0
  57. package/src/containers/EndpointStatusContainer.tsx +12 -0
  58. package/src/containers/GlobalSettingsContainer.tsx +12 -0
  59. package/src/containers/GlobalStatsContainer.tsx +12 -0
  60. package/src/containers/LifecycleApiErrorContainer.tsx +11 -0
  61. package/src/containers/LifecycleGeneralErrorContainer.tsx +11 -0
  62. package/src/containers/LifecycleInQueueContainer.tsx +11 -0
  63. package/src/containers/LifecyclePendingApiContainer.tsx +11 -0
  64. package/src/containers/LifecyclePostActionContainer.tsx +11 -0
  65. package/src/containers/LifecycleReceivedContainer.tsx +11 -0
  66. package/src/content_script.ts +19 -0
  67. package/src/data/devComponents.tsx +25 -0
  68. package/src/data/devRoutes.ts +83 -0
  69. package/src/devtools.tsx +29 -0
  70. package/src/index.ts +1 -0
  71. package/src/injected_script.ts +9 -0
  72. package/src/options.tsx +77 -0
  73. package/src/panel.tsx +30 -0
  74. package/src/popup.tsx +63 -0
  75. package/src/store/initialState.ts +42 -0
  76. package/src/store/selectors.ts +205 -0
  77. package/src/sum.ts +3 -0
  78. package/src/types.ts +1 -0
  79. package/src/utils/date.ts +3 -0
  80. package/tsconfig.json +24 -0
  81. package/vite.config.ts +45 -0
  82. package/webpack/webpack.common.js +46 -0
  83. package/webpack/webpack.dev.js +7 -0
  84. package/webpack/webpack.prod.js +6 -0
  85. package/esm/components/Config/Config.d.ts +0 -6
  86. package/esm/components/Config/Config.js +0 -15
  87. package/esm/components/DevTools/DevTools.d.ts +0 -4
  88. package/esm/components/DevTools/DevTools.js +0 -19
  89. package/esm/components/Dispatcher/Dispatcher.d.ts +0 -8
  90. package/esm/components/Dispatcher/Dispatcher.js +0 -62
  91. package/esm/components/GlobalSettings/GlobalSettings.d.ts +0 -6
  92. package/esm/components/GlobalSettings/GlobalSettings.js +0 -16
  93. package/esm/components/Group/Group.d.ts +0 -9
  94. package/esm/components/Group/Group.js +0 -14
  95. package/esm/components/Json/Json.d.ts +0 -7
  96. package/esm/components/Json/Json.js +0 -9
  97. package/esm/components/Logs/Logs.d.ts +0 -6
  98. package/esm/components/Logs/Logs.js +0 -49
  99. package/esm/components/Monitor/Monitor.d.ts +0 -6
  100. package/esm/components/Monitor/Monitor.js +0 -52
  101. package/esm/components/OverlayManager/OverlayManager.d.ts +0 -6
  102. package/esm/components/OverlayManager/OverlayManager.js +0 -17
  103. package/esm/components/Panel/Panel.d.ts +0 -14
  104. package/esm/components/Panel/Panel.js +0 -46
  105. package/esm/components/Preview/Preview.d.ts +0 -19
  106. package/esm/components/Preview/Preview.js +0 -58
  107. package/esm/components/Redux/Redux.d.ts +0 -6
  108. package/esm/components/Redux/Redux.js +0 -72
  109. package/esm/components/ReduxSettings/ReduxSettings.d.ts +0 -9
  110. package/esm/components/ReduxSettings/ReduxSettings.js +0 -60
  111. package/esm/components/Requests/Requests.d.ts +0 -6
  112. package/esm/components/Requests/Requests.js +0 -61
  113. package/esm/components/Status/Status.d.ts +0 -6
  114. package/esm/components/Status/Status.js +0 -16
  115. package/esm/components/TaskManager/TaskManager.d.ts +0 -9
  116. package/esm/components/TaskManager/TaskManager.js +0 -22
  117. package/esm/components/Toggle/Toggle.d.ts +0 -9
  118. package/esm/components/Toggle/Toggle.js +0 -8
  119. package/esm/components/VirtualList/VirtualList.d.ts +0 -19
  120. package/esm/components/VirtualList/VirtualList.js +0 -30
  121. package/esm/components/Visual/Visual.d.ts +0 -6
  122. package/esm/components/Visual/Visual.js +0 -38
  123. package/esm/components/prefix.d.ts +0 -2
  124. package/esm/components/prefix.js +0 -2
  125. package/esm/data/boxSizes.d.ts +0 -2
  126. package/esm/data/boxSizes.js +0 -10
  127. package/esm/data/dispatcherActions.d.ts +0 -5
  128. package/esm/data/dispatcherActions.js +0 -35
  129. package/esm/data/panels.d.ts +0 -2
  130. package/esm/data/panels.js +0 -74
  131. package/esm/data/panelsArrangements.d.ts +0 -19
  132. package/esm/data/panelsArrangements.js +0 -19
  133. package/esm/data/reduxFilterOptions.d.ts +0 -20
  134. package/esm/data/reduxFilterOptions.js +0 -223
  135. package/esm/data/widgets.d.ts +0 -2
  136. package/esm/data/widgets.js +0 -85
  137. package/esm/hooks/index.d.ts +0 -7
  138. package/esm/hooks/index.js +0 -7
  139. package/esm/hooks/misc/hookState.d.ts +0 -8
  140. package/esm/hooks/misc/hookState.js +0 -6
  141. package/esm/hooks/misc/util.d.ts +0 -5
  142. package/esm/hooks/misc/util.js +0 -21
  143. package/esm/hooks/useBoolean.d.ts +0 -3
  144. package/esm/hooks/useBoolean.js +0 -3
  145. package/esm/hooks/useClickAway.d.ts +0 -3
  146. package/esm/hooks/useClickAway.js +0 -27
  147. package/esm/hooks/useEvent.d.ts +0 -13
  148. package/esm/hooks/useEvent.js +0 -35
  149. package/esm/hooks/useKey.d.ts +0 -12
  150. package/esm/hooks/useKey.js +0 -29
  151. package/esm/hooks/useList.d.ts +0 -57
  152. package/esm/hooks/useList.js +0 -74
  153. package/esm/hooks/useLocalstorage.d.ts +0 -10
  154. package/esm/hooks/useLocalstorage.js +0 -75
  155. package/esm/hooks/usePanels.d.ts +0 -10
  156. package/esm/hooks/usePanels.js +0 -43
  157. package/esm/hooks/useSetState.d.ts +0 -2
  158. package/esm/hooks/useSetState.js +0 -10
  159. package/esm/hooks/useToggle.d.ts +0 -2
  160. package/esm/hooks/useToggle.js +0 -6
  161. package/esm/hooks/useUpdate.d.ts +0 -1
  162. package/esm/hooks/useUpdate.js +0 -6
  163. package/esm/index.d.ts +0 -3
  164. package/esm/index.js +0 -3
  165. package/esm/selectors/selectors.d.ts +0 -21
  166. package/esm/selectors/selectors.js +0 -20
  167. package/esm/theme/devtoolsTheme.d.ts +0 -2
  168. package/esm/theme/devtoolsTheme.js +0 -95
  169. package/esm/utils/filter.d.ts +0 -3
  170. package/esm/utils/filter.js +0 -25
  171. package/esm/utils/localStorage.d.ts +0 -2
  172. package/esm/utils/localStorage.js +0 -21
  173. package/lib/components/Colors copy.css +0 -3
  174. package/lib/components/Colors copy.css.map +0 -1
  175. package/lib/components/Colors.css +0 -3
  176. package/lib/components/Colors.css.map +0 -1
  177. package/lib/components/ColorsDark.css +0 -3
  178. package/lib/components/ColorsDark.css.map +0 -1
  179. package/lib/components/Config/Config.css +0 -15
  180. package/lib/components/Config/Config.css.map +0 -1
  181. package/lib/components/Config/Config.d.ts +0 -6
  182. package/lib/components/Config/Config.js +0 -20
  183. package/lib/components/DevTools/DevTools.css +0 -3
  184. package/lib/components/DevTools/DevTools.css.map +0 -1
  185. package/lib/components/DevTools/DevTools.d.ts +0 -4
  186. package/lib/components/DevTools/DevTools.js +0 -24
  187. package/lib/components/Dispatcher/Dispatcher.css +0 -15
  188. package/lib/components/Dispatcher/Dispatcher.css.map +0 -1
  189. package/lib/components/Dispatcher/Dispatcher.d.ts +0 -8
  190. package/lib/components/Dispatcher/Dispatcher.js +0 -66
  191. package/lib/components/GlobalSettings/GlobalSettings.css +0 -3
  192. package/lib/components/GlobalSettings/GlobalSettings.css.map +0 -1
  193. package/lib/components/GlobalSettings/GlobalSettings.d.ts +0 -6
  194. package/lib/components/GlobalSettings/GlobalSettings.js +0 -21
  195. package/lib/components/Group/Group.css +0 -41
  196. package/lib/components/Group/Group.css.map +0 -1
  197. package/lib/components/Group/Group.d.ts +0 -9
  198. package/lib/components/Group/Group.js +0 -19
  199. package/lib/components/Json/Json.css +0 -3
  200. package/lib/components/Json/Json.css.map +0 -1
  201. package/lib/components/Json/Json.d.ts +0 -7
  202. package/lib/components/Json/Json.js +0 -14
  203. package/lib/components/Logs/Logs.css +0 -3
  204. package/lib/components/Logs/Logs.css.map +0 -1
  205. package/lib/components/Logs/Logs.d.ts +0 -6
  206. package/lib/components/Logs/Logs.js +0 -54
  207. package/lib/components/Monitor/Monitor.css +0 -3
  208. package/lib/components/Monitor/Monitor.css.map +0 -1
  209. package/lib/components/Monitor/Monitor.d.ts +0 -6
  210. package/lib/components/Monitor/Monitor.js +0 -57
  211. package/lib/components/OverlayManager/OverlayManager.css +0 -72
  212. package/lib/components/OverlayManager/OverlayManager.css.map +0 -1
  213. package/lib/components/OverlayManager/OverlayManager.d.ts +0 -6
  214. package/lib/components/OverlayManager/OverlayManager.js +0 -22
  215. package/lib/components/Panel/Panel.css +0 -35
  216. package/lib/components/Panel/Panel.css.map +0 -1
  217. package/lib/components/Panel/Panel.d.ts +0 -14
  218. package/lib/components/Panel/Panel.js +0 -51
  219. package/lib/components/Prefix copy.css +0 -3
  220. package/lib/components/Prefix copy.css.map +0 -1
  221. package/lib/components/Prefix.css +0 -3
  222. package/lib/components/Prefix.css.map +0 -1
  223. package/lib/components/Preview/Preview.css +0 -29
  224. package/lib/components/Preview/Preview.css.map +0 -1
  225. package/lib/components/Preview/Preview.d.ts +0 -19
  226. package/lib/components/Preview/Preview.js +0 -64
  227. package/lib/components/Reading.css +0 -107
  228. package/lib/components/Reading.css.map +0 -1
  229. package/lib/components/Redux/Redux.css +0 -86
  230. package/lib/components/Redux/Redux.css.map +0 -1
  231. package/lib/components/Redux/Redux.d.ts +0 -6
  232. package/lib/components/Redux/Redux.js +0 -77
  233. package/lib/components/ReduxSettings/ReduxSettings.css +0 -10
  234. package/lib/components/ReduxSettings/ReduxSettings.css.map +0 -1
  235. package/lib/components/ReduxSettings/ReduxSettings.d.ts +0 -9
  236. package/lib/components/ReduxSettings/ReduxSettings.js +0 -64
  237. package/lib/components/Requests/Requests.css +0 -8
  238. package/lib/components/Requests/Requests.css.map +0 -1
  239. package/lib/components/Requests/Requests.d.ts +0 -6
  240. package/lib/components/Requests/Requests.js +0 -66
  241. package/lib/components/Status/Status.css +0 -15
  242. package/lib/components/Status/Status.css.map +0 -1
  243. package/lib/components/Status/Status.d.ts +0 -6
  244. package/lib/components/Status/Status.js +0 -21
  245. package/lib/components/TaskManager/TaskManager.css +0 -9
  246. package/lib/components/TaskManager/TaskManager.css.map +0 -1
  247. package/lib/components/TaskManager/TaskManager.d.ts +0 -9
  248. package/lib/components/TaskManager/TaskManager.js +0 -28
  249. package/lib/components/Toggle/Toggle.css +0 -3
  250. package/lib/components/Toggle/Toggle.css.map +0 -1
  251. package/lib/components/Toggle/Toggle.d.ts +0 -9
  252. package/lib/components/Toggle/Toggle.js +0 -13
  253. package/lib/components/Variables.css +0 -3
  254. package/lib/components/Variables.css.map +0 -1
  255. package/lib/components/VirtualList/VirtualList.css +0 -13
  256. package/lib/components/VirtualList/VirtualList.css.map +0 -1
  257. package/lib/components/VirtualList/VirtualList.d.ts +0 -19
  258. package/lib/components/VirtualList/VirtualList.js +0 -35
  259. package/lib/components/Visual/Visual.css +0 -56
  260. package/lib/components/Visual/Visual.css.map +0 -1
  261. package/lib/components/Visual/Visual.d.ts +0 -6
  262. package/lib/components/Visual/Visual.js +0 -43
  263. package/lib/components/prefix.d.ts +0 -2
  264. package/lib/components/prefix.js +0 -5
  265. package/lib/data/boxSizes.d.ts +0 -2
  266. package/lib/data/boxSizes.js +0 -13
  267. package/lib/data/dispatcherActions.d.ts +0 -5
  268. package/lib/data/dispatcherActions.js +0 -38
  269. package/lib/data/panels.d.ts +0 -2
  270. package/lib/data/panels.js +0 -77
  271. package/lib/data/panelsArrangements.d.ts +0 -19
  272. package/lib/data/panelsArrangements.js +0 -22
  273. package/lib/data/reduxFilterOptions.d.ts +0 -20
  274. package/lib/data/reduxFilterOptions.js +0 -227
  275. package/lib/data/widgets.d.ts +0 -2
  276. package/lib/data/widgets.js +0 -89
  277. package/lib/hooks/index.d.ts +0 -7
  278. package/lib/hooks/index.js +0 -17
  279. package/lib/hooks/misc/hookState.d.ts +0 -8
  280. package/lib/hooks/misc/hookState.js +0 -10
  281. package/lib/hooks/misc/util.d.ts +0 -5
  282. package/lib/hooks/misc/util.js +0 -27
  283. package/lib/hooks/useBoolean.d.ts +0 -3
  284. package/lib/hooks/useBoolean.js +0 -7
  285. package/lib/hooks/useClickAway.d.ts +0 -3
  286. package/lib/hooks/useClickAway.js +0 -31
  287. package/lib/hooks/useEvent.d.ts +0 -13
  288. package/lib/hooks/useEvent.js +0 -37
  289. package/lib/hooks/useKey.d.ts +0 -12
  290. package/lib/hooks/useKey.js +0 -34
  291. package/lib/hooks/useList.d.ts +0 -57
  292. package/lib/hooks/useList.js +0 -79
  293. package/lib/hooks/useLocalstorage.d.ts +0 -10
  294. package/lib/hooks/useLocalstorage.js +0 -79
  295. package/lib/hooks/usePanels.d.ts +0 -10
  296. package/lib/hooks/usePanels.js +0 -47
  297. package/lib/hooks/useSetState.d.ts +0 -2
  298. package/lib/hooks/useSetState.js +0 -14
  299. package/lib/hooks/useToggle.d.ts +0 -2
  300. package/lib/hooks/useToggle.js +0 -10
  301. package/lib/hooks/useUpdate.d.ts +0 -1
  302. package/lib/hooks/useUpdate.js +0 -9
  303. package/lib/index.css +0 -488
  304. package/lib/index.css.map +0 -1
  305. package/lib/index.d.ts +0 -3
  306. package/lib/index.js +0 -9
  307. package/lib/selectors/selectors.d.ts +0 -21
  308. package/lib/selectors/selectors.js +0 -24
  309. package/lib/theme/devtoolsTheme.d.ts +0 -2
  310. package/lib/theme/devtoolsTheme.js +0 -97
  311. package/lib/utils/filter.d.ts +0 -3
  312. package/lib/utils/filter.js +0 -29
  313. package/lib/utils/localStorage.d.ts +0 -2
  314. package/lib/utils/localStorage.js +0 -26
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import DevPanel from '../components/DevPanel/DevPanel';
3
+
4
+ type DevPanelProps = {};
5
+
6
+ export function DevPanelContainer(_props: DevPanelProps) {
7
+ return <DevPanel />;
8
+ }
9
+
10
+ export default DevPanelContainer;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import JsonViewer from '../components/JsonViewer/JsonViewer';
3
+ import { connectedSelectors } from 'redux-connected';
4
+ import { useSelector } from 'react-redux';
5
+
6
+ export function EndpointConfigsContainer() {
7
+ const json = useSelector(connectedSelectors.$endpointsConfigRaw);
8
+
9
+ return <JsonViewer json={json} />;
10
+ }
11
+
12
+ export default EndpointConfigsContainer;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import JsonViewer from '../components/JsonViewer/JsonViewer';
3
+ import { connectedSelectors } from 'redux-connected';
4
+ import { useSelector } from 'react-redux';
5
+
6
+ export function EndpointStatusContainer() {
7
+ const json = useSelector(connectedSelectors.$endpointsStateRaw);
8
+
9
+ return <JsonViewer json={json} />;
10
+ }
11
+
12
+ export default EndpointStatusContainer;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import JsonViewer from '../components/JsonViewer/JsonViewer';
4
+ import { connectedSelectors } from 'redux-connected';
5
+
6
+ export function GlobalSettingsContainer() {
7
+ const json = useSelector(connectedSelectors.$apiGlobalSettingsRaw);
8
+
9
+ return <JsonViewer json={json} />;
10
+ }
11
+
12
+ export default GlobalSettingsContainer;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import JsonViewer from '../components/JsonViewer/JsonViewer';
4
+ import { connectedSelectors } from 'redux-connected';
5
+
6
+ export function GlobalStatsContainer() {
7
+ const json = useSelector(connectedSelectors.$apiGlobalStatsRaw);
8
+
9
+ return <JsonViewer json={json} />;
10
+ }
11
+
12
+ export default GlobalStatsContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsApiErrorPast } from '../store/selectors';
5
+
6
+ export function LifecycleApiErrorContainer() {
7
+ const requests = useSelector($requestsApiErrorPast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecycleApiErrorContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsGeneralErrorPast } from '../store/selectors';
5
+
6
+ export function LifecycleGeneralErrorContainer() {
7
+ const requests = useSelector($requestsGeneralErrorPast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecycleGeneralErrorContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsInQueuePast } from '../store/selectors';
5
+
6
+ export function LifecycleInQueueContainer() {
7
+ const requests = useSelector($requestsInQueuePast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecycleInQueueContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsPendingApiPast } from '../store/selectors';
5
+
6
+ export function LifecyclePendingApiContainer() {
7
+ const requests = useSelector($requestsPendingApiPast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecyclePendingApiContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsPostActionPast } from '../store/selectors';
5
+
6
+ export function LifecyclePostActionContainer() {
7
+ const requests = useSelector($requestsPostActionPast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecyclePostActionContainer;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import Lifecycle from '../components/Lifecycle/Lifecycle';
4
+ import { $requestsReceivedPast } from '../store/selectors';
5
+
6
+ export function LifecycleReceivedContainer() {
7
+ const requests = useSelector($requestsReceivedPast);
8
+ return <Lifecycle requests={requests} />;
9
+ }
10
+
11
+ export default LifecycleReceivedContainer;
@@ -0,0 +1,19 @@
1
+ window.addEventListener('message', function (event) {
2
+ // Only accept messages from the same frame
3
+ if (event.source !== window) {
4
+ return;
5
+ }
6
+
7
+ const message = event.data as any;
8
+
9
+ // Only accept messages that we know are ours
10
+ if (
11
+ typeof message !== 'object' ||
12
+ message === null ||
13
+ message.source !== 'devtools-page'
14
+ ) {
15
+ return;
16
+ }
17
+
18
+ chrome.runtime.sendMessage(message);
19
+ });
@@ -0,0 +1,25 @@
1
+ import LifecycleReceivedContainer from '../containers/LifecycleReceivedContainer';
2
+ import GlobalStatsContainer from '../containers/GlobalStatsContainer';
3
+ import EndpointConfigsContainer from '../containers/EndpointConfigsContainer';
4
+ import GlobalSettingsContainer from '../containers/GlobalSettingsContainer';
5
+ import EndpointStatusContainer from '../containers/EndpointStatusContainer';
6
+ import LifecycleInQueueContainer from '../containers/LifecycleInQueueContainer';
7
+ import LifecycleGeneralErrorContainer from '../containers/LifecycleGeneralErrorContainer';
8
+ import LifecyclePendingApiContainer from '../containers/LifecyclePendingApiContainer';
9
+ import LifecycleApiErrorContainer from '../containers/LifecycleApiErrorContainer';
10
+ import LifecyclePostActionContainer from '../containers/LifecyclePostActionContainer';
11
+
12
+ type DevComponents = Record<string, React.FC<any>>;
13
+
14
+ export const devComponents: DevComponents = {
15
+ LifecycleReceived: LifecycleReceivedContainer,
16
+ LifecycleInQueue: LifecycleInQueueContainer,
17
+ LifecycleGeneralError: LifecycleGeneralErrorContainer,
18
+ LifecyclePendingApi: LifecyclePendingApiContainer,
19
+ LifecycleApiError: LifecycleApiErrorContainer,
20
+ LifecyclePostAction: LifecyclePostActionContainer,
21
+ GlobalSettings: GlobalSettingsContainer,
22
+ GlobalStats: GlobalStatsContainer,
23
+ EndpointConfigs: EndpointConfigsContainer,
24
+ EndpointStatus: EndpointStatusContainer,
25
+ };
@@ -0,0 +1,83 @@
1
+ export type IDevRoute = {
2
+ id: string;
3
+ title: string;
4
+ group: string;
5
+ componentId: string;
6
+ };
7
+
8
+ export const devRoutes: IDevRoute[] = [
9
+ {
10
+ id: 'lifecycleReceived',
11
+ title: '1. Received',
12
+ group: 'lifecycle',
13
+ componentId: 'LifecycleReceived',
14
+ },
15
+ {
16
+ id: 'lifecycleInQueue',
17
+ title: '2. In queue',
18
+ group: 'lifecycle',
19
+ componentId: 'LifecycleInQueue',
20
+ },
21
+ {
22
+ id: 'lifecycleGeneralError',
23
+ title: '3. General error',
24
+ group: 'lifecycle',
25
+ componentId: 'LifecycleGeneralError',
26
+ },
27
+ {
28
+ id: 'lifecyclePendingApi',
29
+ title: '4. Pending API',
30
+ group: 'lifecycle',
31
+ componentId: 'LifecyclePendingApi',
32
+ },
33
+ {
34
+ id: 'lifecycleApiError',
35
+ title: '5. API error',
36
+ group: 'lifecycle',
37
+ componentId: 'LifecycleApiError',
38
+ },
39
+ {
40
+ id: 'lifecyclePostAction',
41
+ title: '6. Post action',
42
+ group: 'lifecycle',
43
+ componentId: 'LifecyclePostAction',
44
+ },
45
+ {
46
+ id: 'endpointStatus',
47
+ title: 'Endpoint status',
48
+ group: 'state',
49
+ componentId: 'EndpointStatus',
50
+ },
51
+ {
52
+ id: 'settingsGlobal',
53
+ title: 'Global settings',
54
+ group: 'settings & stats',
55
+ componentId: 'GlobalSettings',
56
+ },
57
+ {
58
+ id: 'settingsEndpoints',
59
+ title: 'Endpoints configs',
60
+ group: 'settings & stats',
61
+ componentId: 'EndpointConfigs',
62
+ },
63
+ {
64
+ id: 'statsGlobal',
65
+ title: 'Global stats',
66
+ group: 'settings & stats',
67
+ componentId: 'GlobalStats',
68
+ },
69
+ ];
70
+
71
+ const getGroups = (): string[] => {
72
+ const output: string[] = [];
73
+
74
+ devRoutes.forEach((group) => {
75
+ if (!output.includes(group.group)) {
76
+ output.push(group.group);
77
+ }
78
+ });
79
+
80
+ return output;
81
+ };
82
+
83
+ export const devGroups: string[] = getGroups();
@@ -0,0 +1,29 @@
1
+ // devtools.js
2
+ const backgroundPageConnection = chrome.runtime.connect({
3
+ name: 'devtools-page',
4
+ });
5
+
6
+ let panel: any;
7
+
8
+ chrome.devtools.panels.create(
9
+ 'Redux connected',
10
+ '',
11
+ 'panel.html',
12
+ function (_panel) {
13
+ panel = _panel;
14
+
15
+ backgroundPageConnection.postMessage({
16
+ name: 'init',
17
+ tabId: chrome.devtools.inspectedWindow.tabId,
18
+ });
19
+
20
+ backgroundPageConnection.postMessage({
21
+ tabId: chrome.devtools.inspectedWindow.tabId,
22
+ scriptToInject: 'injected_script.js',
23
+ });
24
+
25
+ backgroundPageConnection.onMessage.addListener(function (message: any) {
26
+ // Handle responses from the background page, if any
27
+ });
28
+ }
29
+ );
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { DevPanelContainer } from './containers/DevPanelContainer';
@@ -0,0 +1,9 @@
1
+ // injected-script.js
2
+
3
+ window.postMessage(
4
+ {
5
+ greeting: 'hello there!',
6
+ source: 'devtools-page',
7
+ },
8
+ '*'
9
+ );
@@ -0,0 +1,77 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+
4
+ const Options = () => {
5
+ const [color, setColor] = useState<string>('');
6
+ const [status, setStatus] = useState<string>('');
7
+ const [like, setLike] = useState<boolean>(false);
8
+
9
+ useEffect(() => {
10
+ // Restores select box and checkbox state using the preferences
11
+ // stored in chrome.storage.
12
+ chrome.storage.sync.get(
13
+ {
14
+ favoriteColor: 'red',
15
+ likesColor: true,
16
+ },
17
+ (items) => {
18
+ setColor(items.favoriteColor);
19
+ setLike(items.likesColor);
20
+ }
21
+ );
22
+ }, []);
23
+
24
+ const saveOptions = () => {
25
+ // Saves options to chrome.storage.sync.
26
+ chrome.storage.sync.set(
27
+ {
28
+ favoriteColor: color,
29
+ likesColor: like,
30
+ },
31
+ () => {
32
+ // Update status to let user know options were saved.
33
+ setStatus('Options saved.');
34
+ const id = setTimeout(() => {
35
+ setStatus('');
36
+ }, 1000);
37
+ return () => clearTimeout(id);
38
+ }
39
+ );
40
+ };
41
+
42
+ return (
43
+ <>
44
+ <div>
45
+ Favorite color:{' '}
46
+ <select
47
+ value={color}
48
+ onChange={(event) => setColor(event.target.value)}
49
+ >
50
+ <option value='red'>red</option>
51
+ <option value='green'>green</option>
52
+ <option value='blue'>blue</option>
53
+ <option value='yellow'>yellow</option>
54
+ </select>
55
+ </div>
56
+ <div>
57
+ <label>
58
+ <input
59
+ type='checkbox'
60
+ checked={like}
61
+ onChange={(event) => setLike(event.target.checked)}
62
+ />
63
+ I like colors.
64
+ </label>
65
+ </div>
66
+ <div>{status}</div>
67
+ <button onClick={saveOptions}>Save</button>
68
+ </>
69
+ );
70
+ };
71
+
72
+ ReactDOM.render(
73
+ <React.StrictMode>
74
+ <Options />
75
+ </React.StrictMode>,
76
+ document.getElementById('root')
77
+ );
package/src/panel.tsx ADDED
@@ -0,0 +1,30 @@
1
+ import DevPanel from './containers/DevPanelContainer';
2
+ import React from 'react';
3
+ import ReactDOM from 'react-dom';
4
+ import { Provider } from 'react-redux';
5
+ import { store } from './store/initialState';
6
+
7
+ ReactDOM.render(
8
+ <React.StrictMode>
9
+ <Provider store={store}>
10
+ <DevPanel />
11
+ </Provider>
12
+ </React.StrictMode>,
13
+ document.getElementById('root')
14
+ );
15
+
16
+ chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
17
+ if (sender.origin?.indexOf('http://localhost') === 0) {
18
+ const store = (window as any).store;
19
+
20
+ switch (request.type) {
21
+ case 'CONNECTED_STATE':
22
+ break;
23
+ case 'CONNECTED_ACTION':
24
+ const { payload } = request;
25
+ const { action } = payload;
26
+ store.dispatch(action);
27
+ break;
28
+ }
29
+ }
30
+ });
package/src/popup.tsx ADDED
@@ -0,0 +1,63 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+
4
+ const Popup = () => {
5
+ const [count, setCount] = useState(0);
6
+ const [currentURL, setCurrentURL] = useState<string>();
7
+
8
+ useEffect(() => {
9
+ chrome.action.setBadgeText({ text: count.toString() });
10
+ }, [count]);
11
+
12
+ useEffect(() => {
13
+ chrome.tabs.query(
14
+ { active: true, currentWindow: true },
15
+ function (tabs) {
16
+ setCurrentURL(tabs[0].url);
17
+ }
18
+ );
19
+ }, []);
20
+
21
+ const changeBackground = () => {
22
+ chrome.tabs.query(
23
+ { active: true, currentWindow: true },
24
+ function (tabs) {
25
+ const tab = tabs[0];
26
+ if (tab.id) {
27
+ chrome.tabs.sendMessage(
28
+ tab.id,
29
+ {
30
+ color: '#555555',
31
+ },
32
+ (msg) => {
33
+ console.log('result message:', msg);
34
+ }
35
+ );
36
+ }
37
+ }
38
+ );
39
+ };
40
+
41
+ return (
42
+ <>
43
+ <ul style={{ minWidth: '700px' }}>
44
+ <li>Current URL: {currentURL}</li>
45
+ <li>Current Time: {new Date().toLocaleTimeString()}</li>
46
+ </ul>
47
+ <button
48
+ onClick={() => setCount(count + 1)}
49
+ style={{ marginRight: '5px' }}
50
+ >
51
+ count up
52
+ </button>
53
+ <button onClick={changeBackground}>change background</button>
54
+ </>
55
+ );
56
+ };
57
+
58
+ ReactDOM.render(
59
+ <React.StrictMode>
60
+ <Popup />
61
+ </React.StrictMode>,
62
+ document.getElementById('root')
63
+ );
@@ -0,0 +1,42 @@
1
+ import {
2
+ generateConnectedStoreEmpty,
3
+ IReduxConnectedConfig,
4
+ ConnectionType,
5
+ RetryStrategy,
6
+ } from 'redux-connected';
7
+
8
+ type IAppState = {
9
+ name: string;
10
+ email: string;
11
+ };
12
+
13
+ export type MyStore = {
14
+ appState: IAppState;
15
+ };
16
+
17
+ export const initialState: MyStore = {
18
+ appState: {
19
+ name: 'User2',
20
+ email: 'user@example.com',
21
+ },
22
+ };
23
+
24
+ const config: IReduxConnectedConfig = {
25
+ defaultEndpointsConfig: {
26
+ id: 'default',
27
+ connectionType: ConnectionType.REST,
28
+ retryStrategy: RetryStrategy.X2_TIMES,
29
+ },
30
+ endpointsConfigOverrides: {
31
+ appState: {
32
+ connectionType: ConnectionType.NONE,
33
+ },
34
+ logs: {
35
+ connectionType: ConnectionType.NONE,
36
+ },
37
+ },
38
+ adapters: {},
39
+ };
40
+
41
+ export const store = generateConnectedStoreEmpty(initialState, config);
42
+ (window as any).store = store;