redux-connected-devtools 0.0.15 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- package/.env +2 -0
- package/.prettierrc.js +10 -0
- package/.vscode/settings.json +12 -0
- package/.vscode/tasks.json +33 -0
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/index.html +58 -0
- package/jest.config.js +8 -0
- package/package.json +47 -66
- package/public/devtools.html +8 -0
- package/public/icon.png +0 -0
- package/public/manifest.json +29 -0
- package/public/options.html +12 -0
- package/public/panel.html +39 -0
- package/public/popup.html +12 -0
- package/src/__tests__/sum.ts +9 -0
- package/src/background.ts +49 -0
- package/src/components/DevInspector/DevInspector.scss +2 -0
- package/src/components/DevInspector/DevInspector.style.tsx +8 -0
- package/src/components/DevInspector/DevInspector.tsx +34 -0
- package/src/components/DevList/DevList.scss +2 -0
- package/src/components/DevList/DevList.style.tsx +34 -0
- package/src/components/DevList/DevList.tsx +62 -0
- package/src/components/DevMenu/DevMenu.scss +2 -0
- package/src/components/DevMenu/DevMenu.style.tsx +53 -0
- package/src/components/DevMenu/DevMenu.tsx +76 -0
- package/src/components/DevPanel/DevPanel.scss +2 -0
- package/src/components/DevPanel/DevPanel.style.tsx +16 -0
- package/src/components/DevPanel/DevPanel.tsx +51 -0
- package/src/components/JourneyRow/JourneyRow.scss +2 -0
- package/src/components/JourneyRow/JourneyRow.style.tsx +46 -0
- package/src/components/JourneyRow/JourneyRow.tsx +58 -0
- package/src/components/JsonViewer/JsonViewer.scss +2 -0
- package/src/components/JsonViewer/JsonViewer.style.tsx +31 -0
- package/src/components/JsonViewer/JsonViewer.tsx +24 -0
- package/src/components/Lifecycle/Lifecycle.scss +2 -0
- package/src/components/Lifecycle/Lifecycle.style.tsx +6 -0
- package/src/components/Lifecycle/Lifecycle.tsx +31 -0
- package/src/components/LogsViewer/LogsViewer.scss +2 -0
- package/src/components/LogsViewer/LogsViewer.style.tsx +5 -0
- package/src/components/LogsViewer/LogsViewer.tsx +14 -0
- package/src/components/RequestDetails/RequestDetails.scss +2 -0
- package/src/components/RequestDetails/RequestDetails.style.tsx +20 -0
- package/src/components/RequestDetails/RequestDetails.tsx +60 -0
- package/src/components/RequestJourney/RequestJourney.scss +2 -0
- package/src/components/RequestJourney/RequestJourney.style.tsx +6 -0
- package/src/components/RequestJourney/RequestJourney.tsx +33 -0
- package/src/components/RequestRow/RequestRow.scss +2 -0
- package/src/components/RequestRow/RequestRow.style.tsx +31 -0
- package/src/components/RequestRow/RequestRow.tsx +37 -0
- package/src/components/Time/Time.scss +2 -0
- package/src/components/Time/Time.style.tsx +17 -0
- package/src/components/Time/Time.tsx +25 -0
- package/src/containers/DevMenuContainer.tsx +28 -0
- package/src/containers/DevPanelContainer.tsx +10 -0
- package/src/containers/EndpointConfigsContainer.tsx +12 -0
- package/src/containers/EndpointStatusContainer.tsx +12 -0
- package/src/containers/GlobalSettingsContainer.tsx +12 -0
- package/src/containers/GlobalStatsContainer.tsx +12 -0
- package/src/containers/LifecycleApiErrorContainer.tsx +11 -0
- package/src/containers/LifecycleGeneralErrorContainer.tsx +11 -0
- package/src/containers/LifecycleInQueueContainer.tsx +11 -0
- package/src/containers/LifecyclePendingApiContainer.tsx +11 -0
- package/src/containers/LifecyclePostActionContainer.tsx +11 -0
- package/src/containers/LifecycleReceivedContainer.tsx +11 -0
- package/src/content_script.ts +19 -0
- package/src/data/devComponents.tsx +25 -0
- package/src/data/devRoutes.ts +83 -0
- package/src/devtools.tsx +29 -0
- package/src/index.ts +1 -0
- package/src/injected_script.ts +9 -0
- package/src/options.tsx +77 -0
- package/src/panel.tsx +30 -0
- package/src/popup.tsx +63 -0
- package/src/store/initialState.ts +42 -0
- package/src/store/selectors.ts +205 -0
- package/src/sum.ts +3 -0
- package/src/types.ts +1 -0
- package/src/utils/date.ts +3 -0
- package/tsconfig.json +24 -0
- package/vite.config.ts +45 -0
- package/webpack/webpack.common.js +46 -0
- package/webpack/webpack.dev.js +7 -0
- package/webpack/webpack.prod.js +6 -0
- package/esm/components/Config/Config.d.ts +0 -6
- package/esm/components/Config/Config.js +0 -15
- package/esm/components/DevTools/DevTools.d.ts +0 -4
- package/esm/components/DevTools/DevTools.js +0 -19
- package/esm/components/DevToolsLocal/DevToolsLocal.d.ts +0 -4
- package/esm/components/DevToolsLocal/DevToolsLocal.js +0 -12
- package/esm/components/Dispatcher/Dispatcher.d.ts +0 -8
- package/esm/components/Dispatcher/Dispatcher.js +0 -61
- package/esm/components/GlobalSettings/GlobalSettings.d.ts +0 -6
- package/esm/components/GlobalSettings/GlobalSettings.js +0 -16
- package/esm/components/Group/Group.d.ts +0 -9
- package/esm/components/Group/Group.js +0 -14
- package/esm/components/Json/Json.d.ts +0 -7
- package/esm/components/Json/Json.js +0 -9
- package/esm/components/Logs/Logs.d.ts +0 -6
- package/esm/components/Logs/Logs.js +0 -49
- package/esm/components/Monitor/Monitor.d.ts +0 -6
- package/esm/components/Monitor/Monitor.js +0 -54
- package/esm/components/OverlayManager/OverlayManager.d.ts +0 -6
- package/esm/components/OverlayManager/OverlayManager.js +0 -17
- package/esm/components/Panel/Panel.d.ts +0 -14
- package/esm/components/Panel/Panel.js +0 -46
- package/esm/components/Preview/Preview.d.ts +0 -18
- package/esm/components/Preview/Preview.js +0 -58
- package/esm/components/Redux/Redux.d.ts +0 -6
- package/esm/components/Redux/Redux.js +0 -72
- package/esm/components/ReduxSettings/ReduxSettings.d.ts +0 -9
- package/esm/components/ReduxSettings/ReduxSettings.js +0 -60
- package/esm/components/Requests/Requests.d.ts +0 -6
- package/esm/components/Requests/Requests.js +0 -61
- package/esm/components/Status/Status.d.ts +0 -6
- package/esm/components/Status/Status.js +0 -16
- package/esm/components/TaskManager/TaskManager.d.ts +0 -9
- package/esm/components/TaskManager/TaskManager.js +0 -22
- package/esm/components/Timeline/Timeline.d.ts +0 -6
- package/esm/components/Timeline/Timeline.js +0 -13
- package/esm/components/TimelineEvent/TimelineEvent.d.ts +0 -7
- package/esm/components/TimelineEvent/TimelineEvent.js +0 -13
- package/esm/components/TimelineHeader/TimelineHeader.d.ts +0 -4
- package/esm/components/TimelineHeader/TimelineHeader.js +0 -5
- package/esm/components/TimelineRow/TimelineRow.d.ts +0 -7
- package/esm/components/TimelineRow/TimelineRow.js +0 -13
- package/esm/components/TimelineRowHeader/TimelineRowHeader.d.ts +0 -7
- package/esm/components/TimelineRowHeader/TimelineRowHeader.js +0 -10
- package/esm/components/Toggle/Toggle.d.ts +0 -8
- package/esm/components/Toggle/Toggle.js +0 -8
- package/esm/components/VirtualList/VirtualList.d.ts +0 -19
- package/esm/components/VirtualList/VirtualList.js +0 -30
- package/esm/components/Visual/Visual.d.ts +0 -6
- package/esm/components/Visual/Visual.js +0 -38
- package/esm/components/prefix.d.ts +0 -2
- package/esm/components/prefix.js +0 -2
- package/esm/data/boxSizes.d.ts +0 -2
- package/esm/data/boxSizes.js +0 -10
- package/esm/data/dispatcherActions.d.ts +0 -5
- package/esm/data/dispatcherActions.js +0 -35
- package/esm/data/layoutDefault.d.ts +0 -2
- package/esm/data/layoutDefault.js +0 -46
- package/esm/data/panels.d.ts +0 -2
- package/esm/data/panels.js +0 -14
- package/esm/data/panelsArrangements.d.ts +0 -19
- package/esm/data/panelsArrangements.js +0 -19
- package/esm/data/panelsLocal.d.ts +0 -2
- package/esm/data/panelsLocal.js +0 -7
- package/esm/data/reduxFilterOptions.d.ts +0 -20
- package/esm/data/reduxFilterOptions.js +0 -223
- package/esm/data/widgets.d.ts +0 -2
- package/esm/data/widgets.js +0 -154
- package/esm/data/widgetsLocal.d.ts +0 -2
- package/esm/data/widgetsLocal.js +0 -19
- package/esm/hooks/index.d.ts +0 -7
- package/esm/hooks/index.js +0 -7
- package/esm/hooks/misc/hookState.d.ts +0 -8
- package/esm/hooks/misc/hookState.js +0 -6
- package/esm/hooks/misc/util.d.ts +0 -5
- package/esm/hooks/misc/util.js +0 -21
- package/esm/hooks/useBoolean.d.ts +0 -3
- package/esm/hooks/useBoolean.js +0 -3
- package/esm/hooks/useClickAway.d.ts +0 -3
- package/esm/hooks/useClickAway.js +0 -27
- package/esm/hooks/useEvent.d.ts +0 -13
- package/esm/hooks/useEvent.js +0 -35
- package/esm/hooks/useKey.d.ts +0 -12
- package/esm/hooks/useKey.js +0 -29
- package/esm/hooks/useList.d.ts +0 -57
- package/esm/hooks/useList.js +0 -74
- package/esm/hooks/useLocalstorage.d.ts +0 -10
- package/esm/hooks/useLocalstorage.js +0 -75
- package/esm/hooks/usePanels.d.ts +0 -10
- package/esm/hooks/usePanels.js +0 -45
- package/esm/hooks/useSetState.d.ts +0 -2
- package/esm/hooks/useSetState.js +0 -10
- package/esm/hooks/useToggle.d.ts +0 -2
- package/esm/hooks/useToggle.js +0 -6
- package/esm/hooks/useUpdate.d.ts +0 -1
- package/esm/hooks/useUpdate.js +0 -6
- package/esm/index.d.ts +0 -4
- package/esm/index.js +0 -4
- package/esm/selectors/selectors.d.ts +0 -21
- package/esm/selectors/selectors.js +0 -20
- package/esm/theme/devtoolsTheme.d.ts +0 -2
- package/esm/theme/devtoolsTheme.js +0 -95
- package/esm/types.d.ts +0 -21
- package/esm/types.js +0 -1
- package/esm/utils/filter.d.ts +0 -3
- package/esm/utils/filter.js +0 -25
- package/esm/utils/localStorage.d.ts +0 -2
- package/esm/utils/localStorage.js +0 -21
- package/esm/utils/sockets.d.ts +0 -7
- package/esm/utils/sockets.js +0 -27
- package/lib/components/Colors copy.css +0 -3
- package/lib/components/Colors copy.css.map +0 -1
- package/lib/components/Colors.css +0 -3
- package/lib/components/Colors.css.map +0 -1
- package/lib/components/ColorsDark.css +0 -3
- package/lib/components/ColorsDark.css.map +0 -1
- package/lib/components/Config/Config.css +0 -15
- package/lib/components/Config/Config.css.map +0 -1
- package/lib/components/Config/Config.d.ts +0 -6
- package/lib/components/Config/Config.js +0 -20
- package/lib/components/DevTools/DevTools.css +0 -11
- package/lib/components/DevTools/DevTools.css.map +0 -1
- package/lib/components/DevTools/DevTools.d.ts +0 -4
- package/lib/components/DevTools/DevTools.js +0 -24
- package/lib/components/DevToolsLocal/DevToolsLocal.css +0 -11
- package/lib/components/DevToolsLocal/DevToolsLocal.css.map +0 -1
- package/lib/components/DevToolsLocal/DevToolsLocal.d.ts +0 -4
- package/lib/components/DevToolsLocal/DevToolsLocal.js +0 -17
- package/lib/components/Dispatcher/Dispatcher.css +0 -15
- package/lib/components/Dispatcher/Dispatcher.css.map +0 -1
- package/lib/components/Dispatcher/Dispatcher.d.ts +0 -8
- package/lib/components/Dispatcher/Dispatcher.js +0 -65
- package/lib/components/GlobalSettings/GlobalSettings.css +0 -3
- package/lib/components/GlobalSettings/GlobalSettings.css.map +0 -1
- package/lib/components/GlobalSettings/GlobalSettings.d.ts +0 -6
- package/lib/components/GlobalSettings/GlobalSettings.js +0 -21
- package/lib/components/Group/Group.css +0 -41
- package/lib/components/Group/Group.css.map +0 -1
- package/lib/components/Group/Group.d.ts +0 -9
- package/lib/components/Group/Group.js +0 -19
- package/lib/components/Json/Json.css +0 -5
- package/lib/components/Json/Json.css.map +0 -1
- package/lib/components/Json/Json.d.ts +0 -7
- package/lib/components/Json/Json.js +0 -14
- package/lib/components/Logs/Logs.css +0 -5
- package/lib/components/Logs/Logs.css.map +0 -1
- package/lib/components/Logs/Logs.d.ts +0 -6
- package/lib/components/Logs/Logs.js +0 -54
- package/lib/components/Monitor/Monitor.css +0 -5
- package/lib/components/Monitor/Monitor.css.map +0 -1
- package/lib/components/Monitor/Monitor.d.ts +0 -6
- package/lib/components/Monitor/Monitor.js +0 -59
- package/lib/components/OverlayManager/OverlayManager.css +0 -72
- package/lib/components/OverlayManager/OverlayManager.css.map +0 -1
- package/lib/components/OverlayManager/OverlayManager.d.ts +0 -6
- package/lib/components/OverlayManager/OverlayManager.js +0 -22
- package/lib/components/Panel/Panel.css +0 -35
- package/lib/components/Panel/Panel.css.map +0 -1
- package/lib/components/Panel/Panel.d.ts +0 -14
- package/lib/components/Panel/Panel.js +0 -51
- package/lib/components/Prefix copy.css +0 -3
- package/lib/components/Prefix copy.css.map +0 -1
- package/lib/components/Prefix.css +0 -3
- package/lib/components/Prefix.css.map +0 -1
- package/lib/components/Preview/Preview.css +0 -29
- package/lib/components/Preview/Preview.css.map +0 -1
- package/lib/components/Preview/Preview.d.ts +0 -18
- package/lib/components/Preview/Preview.js +0 -64
- package/lib/components/Reading.css +0 -107
- package/lib/components/Reading.css.map +0 -1
- package/lib/components/Redux/Redux.css +0 -86
- package/lib/components/Redux/Redux.css.map +0 -1
- package/lib/components/Redux/Redux.d.ts +0 -6
- package/lib/components/Redux/Redux.js +0 -77
- package/lib/components/ReduxSettings/ReduxSettings.css +0 -10
- package/lib/components/ReduxSettings/ReduxSettings.css.map +0 -1
- package/lib/components/ReduxSettings/ReduxSettings.d.ts +0 -9
- package/lib/components/ReduxSettings/ReduxSettings.js +0 -64
- package/lib/components/Requests/Requests.css +0 -8
- package/lib/components/Requests/Requests.css.map +0 -1
- package/lib/components/Requests/Requests.d.ts +0 -6
- package/lib/components/Requests/Requests.js +0 -66
- package/lib/components/Status/Status.css +0 -15
- package/lib/components/Status/Status.css.map +0 -1
- package/lib/components/Status/Status.d.ts +0 -6
- package/lib/components/Status/Status.js +0 -21
- package/lib/components/TaskManager/TaskManager.css +0 -9
- package/lib/components/TaskManager/TaskManager.css.map +0 -1
- package/lib/components/TaskManager/TaskManager.d.ts +0 -9
- package/lib/components/TaskManager/TaskManager.js +0 -28
- package/lib/components/Timeline/Timeline.css +0 -5
- package/lib/components/Timeline/Timeline.css.map +0 -1
- package/lib/components/Timeline/Timeline.d.ts +0 -6
- package/lib/components/Timeline/Timeline.js +0 -18
- package/lib/components/TimelineEvent/TimelineEvent.css +0 -20
- package/lib/components/TimelineEvent/TimelineEvent.css.map +0 -1
- package/lib/components/TimelineEvent/TimelineEvent.d.ts +0 -7
- package/lib/components/TimelineEvent/TimelineEvent.js +0 -18
- package/lib/components/TimelineHeader/TimelineHeader.css +0 -6
- package/lib/components/TimelineHeader/TimelineHeader.css.map +0 -1
- package/lib/components/TimelineHeader/TimelineHeader.d.ts +0 -4
- package/lib/components/TimelineHeader/TimelineHeader.js +0 -10
- package/lib/components/TimelineRow/TimelineRow.css +0 -14
- package/lib/components/TimelineRow/TimelineRow.css.map +0 -1
- package/lib/components/TimelineRow/TimelineRow.d.ts +0 -7
- package/lib/components/TimelineRow/TimelineRow.js +0 -18
- package/lib/components/TimelineRowHeader/TimelineRowHeader.css +0 -45
- package/lib/components/TimelineRowHeader/TimelineRowHeader.css.map +0 -1
- package/lib/components/TimelineRowHeader/TimelineRowHeader.d.ts +0 -7
- package/lib/components/TimelineRowHeader/TimelineRowHeader.js +0 -15
- package/lib/components/Toggle/Toggle.css +0 -3
- package/lib/components/Toggle/Toggle.css.map +0 -1
- package/lib/components/Toggle/Toggle.d.ts +0 -8
- package/lib/components/Toggle/Toggle.js +0 -13
- package/lib/components/Variables.css +0 -3
- package/lib/components/Variables.css.map +0 -1
- package/lib/components/VirtualList/VirtualList.css +0 -13
- package/lib/components/VirtualList/VirtualList.css.map +0 -1
- package/lib/components/VirtualList/VirtualList.d.ts +0 -19
- package/lib/components/VirtualList/VirtualList.js +0 -35
- package/lib/components/Visual/Visual.css +0 -57
- package/lib/components/Visual/Visual.css.map +0 -1
- package/lib/components/Visual/Visual.d.ts +0 -6
- package/lib/components/Visual/Visual.js +0 -43
- package/lib/components/prefix.d.ts +0 -2
- package/lib/components/prefix.js +0 -5
- package/lib/data/boxSizes.d.ts +0 -2
- package/lib/data/boxSizes.js +0 -13
- package/lib/data/dispatcherActions.d.ts +0 -5
- package/lib/data/dispatcherActions.js +0 -38
- package/lib/data/layoutDefault.d.ts +0 -2
- package/lib/data/layoutDefault.js +0 -49
- package/lib/data/panels.d.ts +0 -2
- package/lib/data/panels.js +0 -17
- package/lib/data/panelsArrangements.d.ts +0 -19
- package/lib/data/panelsArrangements.js +0 -22
- package/lib/data/panelsLocal.d.ts +0 -2
- package/lib/data/panelsLocal.js +0 -10
- package/lib/data/reduxFilterOptions.d.ts +0 -20
- package/lib/data/reduxFilterOptions.js +0 -227
- package/lib/data/widgets.d.ts +0 -2
- package/lib/data/widgets.js +0 -157
- package/lib/data/widgetsLocal.d.ts +0 -2
- package/lib/data/widgetsLocal.js +0 -22
- package/lib/hooks/index.d.ts +0 -7
- package/lib/hooks/index.js +0 -17
- package/lib/hooks/misc/hookState.d.ts +0 -8
- package/lib/hooks/misc/hookState.js +0 -10
- package/lib/hooks/misc/util.d.ts +0 -5
- package/lib/hooks/misc/util.js +0 -27
- package/lib/hooks/useBoolean.d.ts +0 -3
- package/lib/hooks/useBoolean.js +0 -7
- package/lib/hooks/useClickAway.d.ts +0 -3
- package/lib/hooks/useClickAway.js +0 -31
- package/lib/hooks/useEvent.d.ts +0 -13
- package/lib/hooks/useEvent.js +0 -37
- package/lib/hooks/useKey.d.ts +0 -12
- package/lib/hooks/useKey.js +0 -34
- package/lib/hooks/useList.d.ts +0 -57
- package/lib/hooks/useList.js +0 -79
- package/lib/hooks/useLocalstorage.d.ts +0 -10
- package/lib/hooks/useLocalstorage.js +0 -79
- package/lib/hooks/usePanels.d.ts +0 -10
- package/lib/hooks/usePanels.js +0 -49
- package/lib/hooks/useSetState.d.ts +0 -2
- package/lib/hooks/useSetState.js +0 -14
- package/lib/hooks/useToggle.d.ts +0 -2
- package/lib/hooks/useToggle.js +0 -10
- package/lib/hooks/useUpdate.d.ts +0 -1
- package/lib/hooks/useUpdate.js +0 -9
- package/lib/index.css +0 -605
- package/lib/index.css.map +0 -1
- package/lib/index.d.ts +0 -4
- package/lib/index.js +0 -11
- package/lib/selectors/selectors.d.ts +0 -21
- package/lib/selectors/selectors.js +0 -24
- package/lib/theme/devtoolsTheme.d.ts +0 -2
- package/lib/theme/devtoolsTheme.js +0 -97
- package/lib/types.d.ts +0 -21
- package/lib/types.js +0 -2
- package/lib/utils/filter.d.ts +0 -3
- package/lib/utils/filter.js +0 -29
- package/lib/utils/localStorage.d.ts +0 -2
- package/lib/utils/localStorage.js +0 -26
- package/lib/utils/sockets.d.ts +0 -7
- package/lib/utils/sockets.js +0 -34
@@ -0,0 +1,76 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { IDevRoute } from '../../data/devRoutes';
|
3
|
+
import {
|
4
|
+
Container,
|
5
|
+
MenuGroup,
|
6
|
+
MenuGroupTitle,
|
7
|
+
MenuItem,
|
8
|
+
Title,
|
9
|
+
Badge,
|
10
|
+
BadgeTotal,
|
11
|
+
} from './DevMenu.style';
|
12
|
+
|
13
|
+
export type DevMenuProps = {
|
14
|
+
groups: string[];
|
15
|
+
items: IDevRoute[];
|
16
|
+
onClick: (route: IDevRoute) => void;
|
17
|
+
selectedId: string;
|
18
|
+
badges: Record<string, number>;
|
19
|
+
badgesTotal: Record<string, number>;
|
20
|
+
};
|
21
|
+
|
22
|
+
export function DevMenu(props: DevMenuProps) {
|
23
|
+
const { groups, items, selectedId, badges, badgesTotal } = props;
|
24
|
+
|
25
|
+
function renderItem(item: IDevRoute) {
|
26
|
+
const { title, id } = item;
|
27
|
+
const selected = id === selectedId;
|
28
|
+
|
29
|
+
const badge = badges[id];
|
30
|
+
const badgeTotal = badgesTotal[id];
|
31
|
+
|
32
|
+
return (
|
33
|
+
<MenuItem
|
34
|
+
selected={selected}
|
35
|
+
key={item.id}
|
36
|
+
onClick={() => props.onClick(item)}
|
37
|
+
>
|
38
|
+
<Title>{title}</Title>
|
39
|
+
{badgeTotal > 0 && badgeTotal !== badge && (
|
40
|
+
<BadgeTotal>{badgeTotal}</BadgeTotal>
|
41
|
+
)}
|
42
|
+
{badge > 0 && <Badge>{badge}</Badge>}
|
43
|
+
</MenuItem>
|
44
|
+
);
|
45
|
+
}
|
46
|
+
|
47
|
+
function renderItems(groupItems: IDevRoute[]) {
|
48
|
+
return groupItems.map((item: IDevRoute) => renderItem(item));
|
49
|
+
}
|
50
|
+
|
51
|
+
function renderGroup(group: string) {
|
52
|
+
const groupItems = items.filter((item) => item.group === group);
|
53
|
+
|
54
|
+
return (
|
55
|
+
<MenuGroup key={group}>
|
56
|
+
<MenuGroupTitle>{group}</MenuGroupTitle>
|
57
|
+
{renderItems(groupItems)}
|
58
|
+
</MenuGroup>
|
59
|
+
);
|
60
|
+
}
|
61
|
+
|
62
|
+
function renderGroups() {
|
63
|
+
return groups.map((group: string) => renderGroup(group));
|
64
|
+
}
|
65
|
+
|
66
|
+
return (
|
67
|
+
<Container
|
68
|
+
className='DevMenu-container'
|
69
|
+
data-testid='DevMenu-container'
|
70
|
+
>
|
71
|
+
{renderGroups()}
|
72
|
+
</Container>
|
73
|
+
);
|
74
|
+
}
|
75
|
+
|
76
|
+
export default DevMenu;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div`
|
4
|
+
flex: 1;
|
5
|
+
color: #eee;
|
6
|
+
background-color: #232332;
|
7
|
+
display: flex;
|
8
|
+
flex-direction: row;
|
9
|
+
`;
|
10
|
+
|
11
|
+
export const Content = styled.div`
|
12
|
+
flex: 1;
|
13
|
+
background-color: rgba(0, 0, 0, 0.15);
|
14
|
+
display: flex;
|
15
|
+
flex-direction: column;
|
16
|
+
`;
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import DevMenu from '../../containers/DevMenuContainer';
|
2
|
+
import React, { useState } from 'react';
|
3
|
+
import { Container, Content } from './DevPanel.style';
|
4
|
+
import { devComponents } from '../../data/devComponents';
|
5
|
+
import { devGroups, devRoutes, IDevRoute } from '../../data/devRoutes';
|
6
|
+
import { Json } from '../../types';
|
7
|
+
|
8
|
+
export type DevPanelProps = {};
|
9
|
+
|
10
|
+
export function DevPanel(props: DevPanelProps) {
|
11
|
+
const [route, setRoute] = useState<IDevRoute>(devRoutes[0]);
|
12
|
+
|
13
|
+
function renderRoute() {
|
14
|
+
const Cmp = devComponents[route.componentId];
|
15
|
+
return <Cmp key={route.id} />;
|
16
|
+
}
|
17
|
+
|
18
|
+
return (
|
19
|
+
<Container
|
20
|
+
className='DevPanel-container'
|
21
|
+
data-testid='DevPanel-container'
|
22
|
+
>
|
23
|
+
<DevMenu
|
24
|
+
selectedId={route.id}
|
25
|
+
onClick={(item: IDevRoute) => setRoute(item)}
|
26
|
+
/>
|
27
|
+
<Content>{renderRoute()}</Content>
|
28
|
+
</Container>
|
29
|
+
);
|
30
|
+
}
|
31
|
+
|
32
|
+
let bgConnection;
|
33
|
+
|
34
|
+
function init(id: string) {
|
35
|
+
bgConnection = chrome.runtime?.connect({
|
36
|
+
name: id,
|
37
|
+
});
|
38
|
+
|
39
|
+
if (bgConnection) {
|
40
|
+
bgConnection.onMessage.addListener((message: Json) => {
|
41
|
+
console.log('message ->', message);
|
42
|
+
});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
if (chrome) {
|
47
|
+
const tabId = String(chrome.devtools?.inspectedWindow.tabId || '');
|
48
|
+
init(tabId);
|
49
|
+
}
|
50
|
+
|
51
|
+
export default DevPanel;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div`
|
4
|
+
flex: 1;
|
5
|
+
display: flex;
|
6
|
+
flex-direction: row;
|
7
|
+
align-items: center;
|
8
|
+
padding: 10px 20px;
|
9
|
+
|
10
|
+
&:nth-child(2n-1) {
|
11
|
+
background-color: rgba(0, 0, 0, 0.2);
|
12
|
+
}
|
13
|
+
|
14
|
+
&:hover {
|
15
|
+
background-color: rgba(0, 0, 0, 0.3);
|
16
|
+
cursor: pointer;
|
17
|
+
}
|
18
|
+
`;
|
19
|
+
|
20
|
+
export const Status = styled.div`
|
21
|
+
color: #aaa;
|
22
|
+
`;
|
23
|
+
|
24
|
+
export const DataIcon = styled.div`
|
25
|
+
background-color: #000;
|
26
|
+
padding: 3px 7px;
|
27
|
+
font-size: 13px;
|
28
|
+
font-weight: bold;
|
29
|
+
color: purple;
|
30
|
+
border-radius: 5px;
|
31
|
+
margin-left: 10px;
|
32
|
+
`;
|
33
|
+
|
34
|
+
export const Delta = styled.div`
|
35
|
+
font-size: 13px;
|
36
|
+
width: 60px;
|
37
|
+
font-weight: bold;
|
38
|
+
color: olive;
|
39
|
+
margin-right: 10px;
|
40
|
+
text-align: center;
|
41
|
+
font-family: monospace;
|
42
|
+
`;
|
43
|
+
|
44
|
+
export const Flex = styled.div`
|
45
|
+
flex: 1;
|
46
|
+
`;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import Time from '../Time/Time';
|
3
|
+
import { Container, Status, DataIcon, Delta, Flex } from './JourneyRow.style';
|
4
|
+
import { JourneyPoint, LifecycleStatus } from 'redux-connected';
|
5
|
+
|
6
|
+
export type JourneyRowProps = {
|
7
|
+
point: JourneyPoint;
|
8
|
+
};
|
9
|
+
|
10
|
+
const statusMap: Record<LifecycleStatus, string> = {
|
11
|
+
[LifecycleStatus.RECEIVED]: 'Received',
|
12
|
+
[LifecycleStatus.IN_QUEUE]: 'In queue',
|
13
|
+
[LifecycleStatus.GENERAL_ERROR]: 'General error',
|
14
|
+
[LifecycleStatus.PENDING_API_RESPONSE]: 'Pending API',
|
15
|
+
[LifecycleStatus.API_ERROR]: 'API error',
|
16
|
+
[LifecycleStatus.POST_ACTION]: 'Post action',
|
17
|
+
};
|
18
|
+
|
19
|
+
export function JourneyRow(props: JourneyRowProps) {
|
20
|
+
const { point } = props;
|
21
|
+
const { status, timestamp, data, delta = '' } = point;
|
22
|
+
|
23
|
+
function printPoint() {
|
24
|
+
console.log(data);
|
25
|
+
}
|
26
|
+
|
27
|
+
function renderDataIcon() {
|
28
|
+
if (!data) {
|
29
|
+
return null;
|
30
|
+
}
|
31
|
+
|
32
|
+
return <DataIcon>D</DataIcon>;
|
33
|
+
}
|
34
|
+
|
35
|
+
function renderDelta() {
|
36
|
+
if (!delta) {
|
37
|
+
return null;
|
38
|
+
}
|
39
|
+
|
40
|
+
return <Delta>+{delta.toLocaleString()}</Delta>;
|
41
|
+
}
|
42
|
+
|
43
|
+
return (
|
44
|
+
<Container
|
45
|
+
className='JourneyRow-container'
|
46
|
+
data-testid='JourneyRow-container'
|
47
|
+
onClick={printPoint}
|
48
|
+
>
|
49
|
+
<Status>{statusMap[status]}</Status>
|
50
|
+
{renderDataIcon()}
|
51
|
+
<Flex />
|
52
|
+
{renderDelta()}
|
53
|
+
<Time value={timestamp} />
|
54
|
+
</Container>
|
55
|
+
);
|
56
|
+
}
|
57
|
+
|
58
|
+
export default JourneyRow;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div<{ width?: number }>`
|
4
|
+
flex: 1;
|
5
|
+
max-height: 850px;
|
6
|
+
overflow: auto;
|
7
|
+
padding: 0 25px;
|
8
|
+
max-width: ${(props) => (props.width ? props.width + 'px' : '680px')};
|
9
|
+
color: #ccc;
|
10
|
+
line-height: 26px;
|
11
|
+
|
12
|
+
&::-webkit-scrollbar {
|
13
|
+
width: 8px;
|
14
|
+
height: 7px;
|
15
|
+
}
|
16
|
+
|
17
|
+
/* Track */
|
18
|
+
&::-webkit-scrollbar-track {
|
19
|
+
background: #333;
|
20
|
+
}
|
21
|
+
|
22
|
+
/* Handle */
|
23
|
+
&::-webkit-scrollbar-thumb {
|
24
|
+
background: #555;
|
25
|
+
}
|
26
|
+
|
27
|
+
/* Handle on hover */
|
28
|
+
&::-webkit-scrollbar-thumb:hover {
|
29
|
+
background: #666;
|
30
|
+
}
|
31
|
+
`;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Json } from '../../types';
|
3
|
+
import { Container } from './JsonViewer.style';
|
4
|
+
|
5
|
+
export type JsonViewerProps = {
|
6
|
+
json: Json | undefined;
|
7
|
+
width?: number;
|
8
|
+
};
|
9
|
+
|
10
|
+
export function JsonViewer(props: JsonViewerProps) {
|
11
|
+
const { json, width } = props;
|
12
|
+
|
13
|
+
return (
|
14
|
+
<Container
|
15
|
+
className='JsonViewer-container'
|
16
|
+
data-testid='JsonViewer-container'
|
17
|
+
width={width}
|
18
|
+
>
|
19
|
+
<pre>{JSON.stringify(json, null, 4)}</pre>
|
20
|
+
</Container>
|
21
|
+
);
|
22
|
+
}
|
23
|
+
|
24
|
+
export default JsonViewer;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import DevInspector from '../DevInspector/DevInspector';
|
2
|
+
import DevList from '../DevList/DevList';
|
3
|
+
import React, { useState } from 'react';
|
4
|
+
import RequestRow from '../RequestRow/RequestRow';
|
5
|
+
import { ApiRequest } from 'redux-connected';
|
6
|
+
import { Container } from './Lifecycle.style';
|
7
|
+
|
8
|
+
export type LifecycleProps = {
|
9
|
+
requests: ApiRequest[];
|
10
|
+
};
|
11
|
+
|
12
|
+
export function Lifecycle(props: LifecycleProps) {
|
13
|
+
const { requests } = props;
|
14
|
+
const [item, setItem] = useState<ApiRequest>();
|
15
|
+
|
16
|
+
function onClick(newItem: ApiRequest) {
|
17
|
+
setItem(newItem);
|
18
|
+
}
|
19
|
+
|
20
|
+
return (
|
21
|
+
<Container
|
22
|
+
className='Lifecycle-container'
|
23
|
+
data-testid='Lifecycle-container'
|
24
|
+
>
|
25
|
+
<DevList items={requests} row={RequestRow} onClick={onClick} />
|
26
|
+
<DevInspector item={item} />
|
27
|
+
</Container>
|
28
|
+
);
|
29
|
+
}
|
30
|
+
|
31
|
+
export default Lifecycle;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Container } from './LogsViewer.style';
|
3
|
+
|
4
|
+
export type LogsViewerProps = {};
|
5
|
+
|
6
|
+
export function LogsViewer(_props: LogsViewerProps) {
|
7
|
+
return (
|
8
|
+
<Container className="LogsViewer-container" data-testid="LogsViewer-container">
|
9
|
+
LogsViewer
|
10
|
+
</Container>
|
11
|
+
);
|
12
|
+
}
|
13
|
+
|
14
|
+
export default LogsViewer;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div`
|
4
|
+
flex: 1;
|
5
|
+
padding: 20px;
|
6
|
+
`;
|
7
|
+
|
8
|
+
export const Table = styled.table``;
|
9
|
+
|
10
|
+
export const Tr = styled.tr``;
|
11
|
+
|
12
|
+
export const Td = styled.td`
|
13
|
+
color: goldenrod;
|
14
|
+
|
15
|
+
&:first-child {
|
16
|
+
color: #778;
|
17
|
+
text-align: right;
|
18
|
+
padding-right: 10px;
|
19
|
+
}
|
20
|
+
`;
|
@@ -0,0 +1,60 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Container, Table, Tr, Td } from './RequestDetails.style';
|
3
|
+
import { ApiRequest } from 'redux-connected';
|
4
|
+
import JsonViewer from '../JsonViewer/JsonViewer';
|
5
|
+
import bytes from 'bytes';
|
6
|
+
|
7
|
+
export type RequestDetailsProps = {
|
8
|
+
item: ApiRequest;
|
9
|
+
};
|
10
|
+
|
11
|
+
export function RequestDetails(props: RequestDetailsProps) {
|
12
|
+
const { item } = props;
|
13
|
+
|
14
|
+
return (
|
15
|
+
<Container
|
16
|
+
className='RequestDetails-container'
|
17
|
+
data-testid='RequestDetails-container'
|
18
|
+
>
|
19
|
+
<Table>
|
20
|
+
<tbody>
|
21
|
+
<Tr>
|
22
|
+
<Td>sequence</Td>
|
23
|
+
<Td>{item.sequence}</Td>
|
24
|
+
</Tr>
|
25
|
+
<Tr>
|
26
|
+
<Td>id</Td>
|
27
|
+
<Td>{item.shortId}</Td>
|
28
|
+
</Tr>
|
29
|
+
<Tr>
|
30
|
+
<Td>apiVerb</Td>
|
31
|
+
<Td>{item.argsApiVerb}</Td>
|
32
|
+
</Tr>
|
33
|
+
<Tr>
|
34
|
+
<Td>connection</Td>
|
35
|
+
<Td>{item.argsConnectionType}</Td>
|
36
|
+
</Tr>
|
37
|
+
<Tr>
|
38
|
+
<Td>duration</Td>
|
39
|
+
<Td>{item.apiDuration}</Td>
|
40
|
+
</Tr>
|
41
|
+
<Tr>
|
42
|
+
<Td>nodeName</Td>
|
43
|
+
<Td>{item.argsNodeName}</Td>
|
44
|
+
</Tr>
|
45
|
+
<Tr>
|
46
|
+
<Td>responseSize</Td>
|
47
|
+
<Td>
|
48
|
+
{item.apiResponseSize &&
|
49
|
+
bytes(item.apiResponseSize)}
|
50
|
+
</Td>
|
51
|
+
</Tr>
|
52
|
+
</tbody>
|
53
|
+
</Table>
|
54
|
+
|
55
|
+
<JsonViewer width={290} json={item.originalAction} />
|
56
|
+
</Container>
|
57
|
+
);
|
58
|
+
}
|
59
|
+
|
60
|
+
export default RequestDetails;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Container } from './RequestJourney.style';
|
3
|
+
import { ApiRequest, JourneyPoint } from 'redux-connected';
|
4
|
+
import JourneyRow from '../JourneyRow/JourneyRow';
|
5
|
+
|
6
|
+
export type RequestJourneyProps = {
|
7
|
+
item: ApiRequest;
|
8
|
+
};
|
9
|
+
|
10
|
+
export function RequestJourney(props: RequestJourneyProps) {
|
11
|
+
const { item } = props;
|
12
|
+
|
13
|
+
function renderItem(point: JourneyPoint, index: number) {
|
14
|
+
return <JourneyRow key={index} point={point} />;
|
15
|
+
}
|
16
|
+
|
17
|
+
function renderItems() {
|
18
|
+
return item.items.map((point: JourneyPoint, index: number) =>
|
19
|
+
renderItem(point, index)
|
20
|
+
);
|
21
|
+
}
|
22
|
+
|
23
|
+
return (
|
24
|
+
<Container
|
25
|
+
className='RequestJourney-container'
|
26
|
+
data-testid='RequestJourney-container'
|
27
|
+
>
|
28
|
+
{renderItems()}
|
29
|
+
</Container>
|
30
|
+
);
|
31
|
+
}
|
32
|
+
|
33
|
+
export default RequestJourney;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div<{ index: number }>`
|
4
|
+
flex: 1;
|
5
|
+
display: flex;
|
6
|
+
flex-direction: row;
|
7
|
+
align-items: center;
|
8
|
+
padding: 10px;
|
9
|
+
background-color: ${(props) =>
|
10
|
+
props.index % 2 === 1 ? 'rgba(0, 0, 0, 0.2)' : 'transparent'};
|
11
|
+
|
12
|
+
&:hover {
|
13
|
+
background-color: rgba(0, 0, 0, 0.7);
|
14
|
+
cursor: pointer;
|
15
|
+
}
|
16
|
+
`;
|
17
|
+
|
18
|
+
export const Col = styled.div`
|
19
|
+
&:first-child {
|
20
|
+
flex: 1;
|
21
|
+
}
|
22
|
+
`;
|
23
|
+
|
24
|
+
export const Id = styled.div`
|
25
|
+
color: goldenrod;
|
26
|
+
font-size: 16px;
|
27
|
+
`;
|
28
|
+
|
29
|
+
export const Type = styled.div`
|
30
|
+
color: brown;
|
31
|
+
`;
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Container, Col, Id, Type } from './RequestRow.style';
|
3
|
+
import Time from '../Time/Time';
|
4
|
+
import { Json } from '../../types';
|
5
|
+
import { ApiRequest } from 'redux-connected';
|
6
|
+
|
7
|
+
export type RequestRowProps = {
|
8
|
+
style: Json;
|
9
|
+
item: ApiRequest;
|
10
|
+
index: number;
|
11
|
+
onClick: (item: ApiRequest) => void;
|
12
|
+
};
|
13
|
+
|
14
|
+
export function RequestRow(props: RequestRowProps) {
|
15
|
+
const { index, style, item } = props;
|
16
|
+
const { sequence, createdTS } = item;
|
17
|
+
|
18
|
+
return (
|
19
|
+
<Container
|
20
|
+
className='DevListRow-container'
|
21
|
+
data-testid='DevListRow-container'
|
22
|
+
style={style}
|
23
|
+
index={index}
|
24
|
+
onClick={() => props.onClick(item)}
|
25
|
+
>
|
26
|
+
<Col>
|
27
|
+
<Id>{sequence}</Id>
|
28
|
+
<Type>{item.originalAction?.type}</Type>
|
29
|
+
</Col>
|
30
|
+
<Col>
|
31
|
+
<Time value={createdTS} />
|
32
|
+
</Col>
|
33
|
+
</Container>
|
34
|
+
);
|
35
|
+
}
|
36
|
+
|
37
|
+
export default RequestRow;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import styled from 'styled-components';
|
2
|
+
|
3
|
+
export const Container = styled.div`
|
4
|
+
color: yellowgreen;
|
5
|
+
display: flex;
|
6
|
+
flex-direction: row;
|
7
|
+
align-items: flex-start;
|
8
|
+
font-family: monospace;
|
9
|
+
`;
|
10
|
+
|
11
|
+
export const Full = styled.div`
|
12
|
+
font-size: 24px;
|
13
|
+
`;
|
14
|
+
|
15
|
+
export const Fraction = styled.div`
|
16
|
+
font-size: 12px;
|
17
|
+
`;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { startOfTime } from '../../utils/date';
|
3
|
+
import { Container, Full, Fraction } from './Time.style';
|
4
|
+
|
5
|
+
export type TimeProps = {
|
6
|
+
value: number;
|
7
|
+
};
|
8
|
+
|
9
|
+
export function Time(props: TimeProps) {
|
10
|
+
const { value } = props;
|
11
|
+
|
12
|
+
const relativeValue = (value - startOfTime) / 1000;
|
13
|
+
|
14
|
+
const full = Math.floor(relativeValue);
|
15
|
+
const fraction = (relativeValue - full).toFixed(3).split('.').pop();
|
16
|
+
|
17
|
+
return (
|
18
|
+
<Container className='Time-container' data-testid='Time-container'>
|
19
|
+
<Full>{full}</Full>
|
20
|
+
<Fraction>{fraction}</Fraction>
|
21
|
+
</Container>
|
22
|
+
);
|
23
|
+
}
|
24
|
+
|
25
|
+
export default Time;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useSelector } from 'react-redux';
|
3
|
+
import DevMenu from '../components/DevMenu/DevMenu';
|
4
|
+
import { devGroups, devRoutes, IDevRoute } from '../data/devRoutes';
|
5
|
+
import { $menuBadges, $menuBadgesTotal } from '../store/selectors';
|
6
|
+
|
7
|
+
type DevPanelProps = {
|
8
|
+
selectedId: string;
|
9
|
+
onClick: (route: IDevRoute) => void;
|
10
|
+
};
|
11
|
+
|
12
|
+
export function DevMenuContainer(props: DevPanelProps) {
|
13
|
+
const badges = useSelector($menuBadges);
|
14
|
+
const badgesTotal = useSelector($menuBadgesTotal);
|
15
|
+
|
16
|
+
return (
|
17
|
+
<DevMenu
|
18
|
+
groups={devGroups}
|
19
|
+
items={devRoutes}
|
20
|
+
badges={badges}
|
21
|
+
badgesTotal={badgesTotal}
|
22
|
+
selectedId={props.selectedId}
|
23
|
+
onClick={props.onClick}
|
24
|
+
/>
|
25
|
+
);
|
26
|
+
}
|
27
|
+
|
28
|
+
export default DevMenuContainer;
|