diff --git a/ui-common/src/components/EntryDetailed/EntryViewer/AutoRepresentation.tsx b/ui-common/src/components/EntryDetailed/EntryViewer/AutoRepresentation.tsx index 8249d9609..4295b5fa5 100644 --- a/ui-common/src/components/EntryDetailed/EntryViewer/AutoRepresentation.tsx +++ b/ui-common/src/components/EntryDetailed/EntryViewer/AutoRepresentation.tsx @@ -6,6 +6,7 @@ import { ReactComponent as ReplayIcon } from './replay.svg'; import styles from './EntryViewer.module.sass'; import { Tabs } from "../../UI"; import replayRequestModalOpenAtom from "../../../recoil/replayRequestModalOpen"; +import entryDetailedConfigAtom, { EntryDetailedConfig } from "../../../recoil/entryDetailedConfig"; const enabledProtocolsForReplay = ["http"] @@ -16,10 +17,11 @@ export enum TabsEnum { export const AutoRepresentation: React.FC = ({ representation, color, openedTab = TabsEnum.Request, isDisplayReplay = false }) => { const entryData = useRecoilValue(entryDataAtom) + const { isReplayEnabled } = useRecoilValue(entryDetailedConfigAtom) const setIsOpenRequestModal = useSetRecoilState(replayRequestModalOpenAtom) const isReplayDisplayed = useCallback(() => { - return enabledProtocolsForReplay.find(x => x === entryData.protocol.name) && isDisplayReplay - }, [entryData.protocol.name, isDisplayReplay]) + return enabledProtocolsForReplay.find(x => x === entryData.protocol.name) && isDisplayReplay && isReplayEnabled + }, [entryData.protocol.name, isDisplayReplay, isReplayEnabled]) const { request, response } = JSON.parse(representation); @@ -31,12 +33,10 @@ export const AutoRepresentation: React.FC = ({ representation, color, opene }] if (response) { - arr.push( - { - tab: 'Response', - badge: null - } - ); + arr.push({ + tab: 'Response', + badge: null + }); } return arr diff --git a/ui-common/src/components/TrafficViewer/TrafficViewer.tsx b/ui-common/src/components/TrafficViewer/TrafficViewer.tsx index 56b299cee..bece03614 100644 --- a/ui-common/src/components/TrafficViewer/TrafficViewer.tsx +++ b/ui-common/src/components/TrafficViewer/TrafficViewer.tsx @@ -22,6 +22,7 @@ import leftOffTopAtom from "../../recoil/leftOffTop"; import { DEFAULT_LEFTOFF, DEFAULT_FETCH, DEFAULT_FETCH_TIMEOUT_MS } from '../../hooks/useWS'; import ReplayRequestModalContainer from "../modals/ReplayRequestModal/ReplayRequestModal"; import replayRequestModalOpenAtom from "../../recoil/replayRequestModalOpen"; +import entryDetailedConfigAtom, { EntryDetailedConfig } from "../../recoil/entryDetailedConfig"; const useLayoutStyles = makeStyles(() => ({ details: { @@ -51,18 +52,22 @@ interface TrafficViewerProps { webSocketUrl: string, shouldCloseWebSocket: boolean, setShouldCloseWebSocket: (flag: boolean) => void, - isDemoBannerView: boolean + isDemoBannerView: boolean, + entryDetailedConfig: EntryDetailedConfig } export const TrafficViewer: React.FC = ({ - trafficViewerApiProp, - actionButtons, isShowStatusBar, webSocketUrl, - shouldCloseWebSocket, setShouldCloseWebSocket, isDemoBannerView - }) => { + trafficViewerApiProp, + webSocketUrl, + actionButtons, + isShowStatusBar, isDemoBannerView, + shouldCloseWebSocket, setShouldCloseWebSocket, + entryDetailedConfig }) => { const classes = useLayoutStyles(); const setEntries = useSetRecoilState(entriesAtom); const setFocusedEntryId = useSetRecoilState(focusedEntryIdAtom); + const setEntryDetailedConfigAtom = useSetRecoilState(entryDetailedConfigAtom) const query = useRecoilValue(queryAtom); const setTrafficViewerApiState = useSetRecoilState(trafficViewerApiAtom as RecoilState) const [tappingStatus, setTappingStatus] = useRecoilState(tappingStatusAtom); @@ -183,6 +188,10 @@ export const TrafficViewer: React.FC = ({ }; }, []); + useEffect(() => { + setEntryDetailedConfigAtom(entryDetailedConfig) + }, [entryDetailedConfig, setEntryDetailedConfigAtom]) + const getConnectionIndicator = () => { switch (wsReadyState) { case WebSocket.OPEN: @@ -258,7 +267,7 @@ export const TrafficViewer: React.FC = ({
- +
} @@ -266,25 +275,19 @@ export const TrafficViewer: React.FC = ({ }; const MemorizedTrafficViewer = React.memo(TrafficViewer) -const TrafficViewerContainer: React.FC = ({ - trafficViewerApiProp, - actionButtons, isShowStatusBar = true, - webSocketUrl, shouldCloseWebSocket, setShouldCloseWebSocket, isDemoBannerView - }) => { +const TrafficViewerContainer: React.FC = (props) => { return - + + position="bottom-right" + autoClose={5000} + hideProgressBar={false} + newestOnTop={false} + closeOnClick + rtl={false} + pauseOnFocusLoss + draggable + pauseOnHover /> } diff --git a/ui-common/src/recoil/entryDetailedConfig/atom.ts b/ui-common/src/recoil/entryDetailedConfig/atom.ts new file mode 100644 index 000000000..ff64880e0 --- /dev/null +++ b/ui-common/src/recoil/entryDetailedConfig/atom.ts @@ -0,0 +1,12 @@ +import { atom } from "recoil"; + +const entryDetailedConfigAtom = atom({ + key: "entryDetailedConfigAtom", + default: null +}); + +export type EntryDetailedConfig = { + isReplayEnabled: boolean +} + +export default entryDetailedConfigAtom; diff --git a/ui-common/src/recoil/entryDetailedConfig/index.ts b/ui-common/src/recoil/entryDetailedConfig/index.ts new file mode 100644 index 000000000..bf3acb4ae --- /dev/null +++ b/ui-common/src/recoil/entryDetailedConfig/index.ts @@ -0,0 +1,3 @@ +import atom from "./atom" +export type { EntryDetailedConfig } from "./atom" +export default atom diff --git a/ui/src/components/Pages/TrafficPage/TrafficPage.tsx b/ui/src/components/Pages/TrafficPage/TrafficPage.tsx index f8f7108de..0c2717708 100644 --- a/ui/src/components/Pages/TrafficPage/TrafficPage.tsx +++ b/ui/src/components/Pages/TrafficPage/TrafficPage.tsx @@ -12,6 +12,7 @@ import serviceMap from "../../assets/serviceMap.svg"; import services from "../../assets/services.svg"; import trafficStatsIcon from "../../assets/trafficStats.svg"; import trafficStatsModalOpenAtom from "../../../recoil/trafficStatsModalOpen"; +import { REPLAY_ENABLED } from "../../../consts"; const api = Api.getInstance(); @@ -40,39 +41,41 @@ export const TrafficPage: React.FC = () => { }, 500); const actionButtons =
- {window["isOasEnabled"] && } - {window["isServiceMapEnabled"] && } + {window["isOasEnabled"] && } + {window["isServiceMapEnabled"] && } -
+ return ( <> + trafficViewerApiProp={trafficViewerApi} actionButtons={actionButtons} isShowStatusBar={!(openOasModal || serviceMapModalOpen || trafficStatsModalOpen)} isDemoBannerView={false} entryDetailedConfig={{ + isReplayEnabled: REPLAY_ENABLED + }} /> ); }; diff --git a/ui/src/consts.ts b/ui/src/consts.ts index 4ee1b66e3..e3ddf61ac 100644 --- a/ui/src/consts.ts +++ b/ui/src/consts.ts @@ -1,2 +1,3 @@ export const adminUsername = "admin"; export const TOAST_CONTAINER_ID = "Community"; +export const REPLAY_ENABLED = true;