diff --git a/frontend/app/components/Dashboard/components/DashboardList/NewDashModal/Examples/Count.tsx b/frontend/app/components/Dashboard/components/DashboardList/NewDashModal/Examples/Count.tsx index 044824ab0..6dd084040 100644 --- a/frontend/app/components/Dashboard/components/DashboardList/NewDashModal/Examples/Count.tsx +++ b/frontend/app/components/Dashboard/components/DashboardList/NewDashModal/Examples/Count.tsx @@ -9,7 +9,6 @@ import { import React from 'react'; import ExCard from './ExCard'; -import { size } from '@floating-ui/react-dom-interactions'; const TYPES = { Frustrations: 'frustrations', diff --git a/frontend/app/components/Dashboard/components/Funnels/FunnelIssuesSort/FunnelIssuesSort.tsx b/frontend/app/components/Dashboard/components/Funnels/FunnelIssuesSort/FunnelIssuesSort.tsx index 580f6a4e7..eae83c842 100644 --- a/frontend/app/components/Dashboard/components/Funnels/FunnelIssuesSort/FunnelIssuesSort.tsx +++ b/frontend/app/components/Dashboard/components/Funnels/FunnelIssuesSort/FunnelIssuesSort.tsx @@ -1,6 +1,5 @@ import { useStore } from 'App/mstore'; import React from 'react'; -// import Select from 'Shared/Select'; import { Select } from 'antd'; const sortOptions = [ diff --git a/frontend/app/components/Session/Player/ReplayPlayer/PlayerBlockHeader.tsx b/frontend/app/components/Session/Player/ReplayPlayer/PlayerBlockHeader.tsx index d7f3a861c..03ccfcfda 100644 --- a/frontend/app/components/Session/Player/ReplayPlayer/PlayerBlockHeader.tsx +++ b/frontend/app/components/Session/Player/ReplayPlayer/PlayerBlockHeader.tsx @@ -105,7 +105,7 @@ function PlayerBlockHeader(props: any) { )} -
+
-
-
Traces
- {tabs.length && tab ? ( -
- +
+
+
Traces
+ {tabs.length && tab ? ( +
+ +
+ ) : null}
- ) : null} -
- - + + Current Tab + ), + value: 'current', disabled: true}, + ]} + defaultValue="all" + size="small" + className="rounded-full font-medium" /> -
+ + + } + /> +
+ +
diff --git a/frontend/app/components/Session/Player/SharedComponents/BackendLogs/StatusMessages.tsx b/frontend/app/components/Session/Player/SharedComponents/BackendLogs/StatusMessages.tsx index ae44651d2..1f22dc589 100644 --- a/frontend/app/components/Session/Player/SharedComponents/BackendLogs/StatusMessages.tsx +++ b/frontend/app/components/Session/Player/SharedComponents/BackendLogs/StatusMessages.tsx @@ -12,7 +12,7 @@ export function LoadingFetch({ provider }: { provider: string }) { 'w-full h-full flex items-center justify-center flex-col gap-2' } > - +
Fetching logs from {provider}...
); @@ -33,16 +33,23 @@ export function FailedFetch({ 'w-full h-full flex flex-col items-center justify-center gap-2' } > - -
+ +
+ Failed to fetch logs from {provider}. -
+
+ +
+ +
-
-
history.push(intPath)}> + + +
+
); } diff --git a/frontend/app/components/Session/Player/TagWatch/TagWatch.tsx b/frontend/app/components/Session/Player/TagWatch/TagWatch.tsx index 5cca54ee5..75781a672 100644 --- a/frontend/app/components/Session/Player/TagWatch/TagWatch.tsx +++ b/frontend/app/components/Session/Player/TagWatch/TagWatch.tsx @@ -2,14 +2,51 @@ import { useStore } from 'App/mstore'; import SaveModal from 'Components/Session/Player/TagWatch/SaveModal'; import React from 'react'; import { PlayerContext } from 'Components/Session/playerContext'; -import { Button, Input } from 'antd'; -import { CopyButton } from 'UI'; -import { SearchOutlined, ZoomInOutlined } from '@ant-design/icons'; +import { Button, Input, Tooltip } from 'antd'; +import { CopyOutlined } from '@ant-design/icons'; +import { ZoomInOutlined } from '@ant-design/icons'; import { observer } from 'mobx-react-lite'; import { useModal } from 'App/components/Modal'; import { toast } from 'react-toastify'; -import { FilterKey } from "App/types/filter/filterType"; -import { addOptionsToFilter } from "App/types/filter/newFilter"; +import { FilterKey } from 'App/types/filter/filterType'; +import { addOptionsToFilter } from 'App/types/filter/newFilter'; + +interface CopyableTextAreaProps { + selector: string; + setSelector: (value: string) => void; +} + +const CopyableTextArea: React.FC = ({ selector, setSelector }) => { + const handleCopy = () => { + navigator.clipboard.writeText(selector); + }; + + return ( +
+ setSelector(e.target.value)} + className="rounded-lg font-mono text-sm placeholder:font-sans placeholder:text-base placeholder:text-gray-400" + rows={4} + style={{ paddingRight: '40px' }} + placeholder='Enter selector to tag elements. E.g. .btn-primary' + /> + +
+ ); +}; function TagWatch() { const { tagWatchStore, searchStore } = useStore(); @@ -50,7 +87,7 @@ function TagWatch() { ignoreClickRage: ignoreClRage, ignoreDeadClick: ignoreDeadCl, }); - const tags = await tagWatchStore.getTags() + const tags = await tagWatchStore.getTags(); if (tags) { addOptionsToFilter( FilterKey.TAGGED_ELEMENT, @@ -58,42 +95,41 @@ function TagWatch() { ); searchStore.refreshFilterOptions(); } - // @ts-ignore toast.success('Tag created'); setSelector(''); - return tag + return tag; } catch { - // @ts-ignore toast.error('Failed to create tag'); } }; + const openSaveModal = () => { if (selector === '') { return; } showModal(, { right: true, width: 400 }); }; + return ( -
-
-
Element Selector
- +
+
+

Select elements in the session play area to tag by class selector and filter sessions to verify their rendering.

+
- setSelector(e.target.value)} /> + + + -
- Create and filter sessions by ‘watch elements’ to determine if they rendered or not. -
); } -export default observer(TagWatch); +export default observer(TagWatch); \ No newline at end of file diff --git a/frontend/app/components/Session/RightBlock.tsx b/frontend/app/components/Session/RightBlock.tsx index a09003d3c..e0e63fddf 100644 --- a/frontend/app/components/Session/RightBlock.tsx +++ b/frontend/app/components/Session/RightBlock.tsx @@ -18,7 +18,7 @@ function RightBlock({ switch (activeTab) { case 'EVENTS': return ( -
+
); diff --git a/frontend/app/components/Session/Tabs/Tabs.tsx b/frontend/app/components/Session/Tabs/Tabs.tsx index bbf3d5b34..65b95fd42 100644 --- a/frontend/app/components/Session/Tabs/Tabs.tsx +++ b/frontend/app/components/Session/Tabs/Tabs.tsx @@ -22,6 +22,8 @@ const Tabs = ({ tabs, active, onClick, border = true, className }: Props) => { return (
), value: key, - disabled: disabled, + disabled: disabled, }))} />
diff --git a/frontend/app/components/Session_/EventsBlock/Event.tsx b/frontend/app/components/Session_/EventsBlock/Event.tsx index 8d212e578..227a97369 100644 --- a/frontend/app/components/Session_/EventsBlock/Event.tsx +++ b/frontend/app/components/Session_/EventsBlock/Event.tsx @@ -159,7 +159,7 @@ const Event: React.FC = ({ >
{event.type && iconName ? ( @@ -169,20 +169,18 @@ const Event: React.FC = ({ )}
-
+
- + {title} {body && !isLocation && ( )} @@ -202,8 +200,7 @@ const Event: React.FC = ({ {isLocation && (
diff --git a/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js b/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js index ff91d7198..9ae5f7808 100644 --- a/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js +++ b/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js @@ -8,6 +8,7 @@ import { Icon, TextEllipsis } from 'UI'; import Event from './Event'; import NoteEvent from './NoteEvent'; import stl from './eventGroupWrapper.module.css'; +import cn from 'classnames' function EventGroupWrapper(props) { const { userStore } = useStore(); @@ -132,7 +133,7 @@ function EventGroupWrapper(props) { {isFirst && isLocation && event.referrer && (
- Referrer: {safeRef} + Referrer: {safeRef}
)} diff --git a/frontend/app/components/Session_/EventsBlock/EventSearch/EventSearch.js b/frontend/app/components/Session_/EventsBlock/EventSearch/EventSearch.js index 4f7061501..26841c990 100644 --- a/frontend/app/components/Session_/EventsBlock/EventSearch/EventSearch.js +++ b/frontend/app/components/Session_/EventsBlock/EventSearch/EventSearch.js @@ -1,11 +1,12 @@ import React from 'react'; -import { Input, Button } from 'UI'; +import {Input, Button, Tooltip} from 'antd'; +import {CloseOutlined, SearchOutlined} from '@ant-design/icons'; import { PlayerContext } from 'App/components/Session/playerContext'; function EventSearch(props) { const { player } = React.useContext(PlayerContext); - const { onChange, value, header, setActiveTab } = props; + const { onChange, value, header, setActiveTab, eventsText } = props; const toggleEvents = () => player.toggleEvents(); @@ -16,25 +17,25 @@ function EventSearch(props) { } /> -
diff --git a/frontend/app/components/Session_/EventsBlock/EventsBlock.tsx b/frontend/app/components/Session_/EventsBlock/EventsBlock.tsx index e322e48fb..1b555bb6c 100644 --- a/frontend/app/components/Session_/EventsBlock/EventsBlock.tsx +++ b/frontend/app/components/Session_/EventsBlock/EventsBlock.tsx @@ -196,7 +196,7 @@ function EventsBlock(props: IProps) { return ( <> -
+
{uxtestingStore.isUxt() ? (
) : null} -
+
-
{eventsText}
{isSpot ? null : ( -
- - +
+ +
)} @@ -366,7 +367,7 @@ function PanelComponent({ style={{ height: '60px', minHeight: 'unset', padding: 0 }} title={
- + Select a debug option to visualize on timeline.
} diff --git a/frontend/app/components/Session_/OverviewPanel/components/EventRow/EventRow.tsx b/frontend/app/components/Session_/OverviewPanel/components/EventRow/EventRow.tsx index 25309a8fb..54fd28db2 100644 --- a/frontend/app/components/Session_/OverviewPanel/components/EventRow/EventRow.tsx +++ b/frontend/app/components/Session_/OverviewPanel/components/EventRow/EventRow.tsx @@ -1,7 +1,9 @@ import React from 'react'; import cn from 'classnames'; import { getTimelinePosition } from 'App/utils'; -import { Icon, Tooltip } from 'UI'; +import { Icon } from 'UI'; +import { InfoCircleOutlined} from '@ant-design/icons' +import {Tooltip} from 'antd'; import PerformanceGraph from '../PerformanceGraph'; interface Props { list?: any[]; @@ -92,17 +94,20 @@ const EventRow = React.memo((props: Props) => { >
{title}
- {message ? : null} + + + +
{isGraph ? ( @@ -124,7 +129,7 @@ const EventRow = React.memo((props: Props) => { ); }) ) : ( -
+
None captured.
)} @@ -134,11 +139,3 @@ const EventRow = React.memo((props: Props) => { }); export default EventRow; - -function RowInfo({ message }: any) { - return ( - - - - ); -} diff --git a/frontend/app/components/Session_/OverviewPanel/components/FeatureSelection/FeatureSelection.tsx b/frontend/app/components/Session_/OverviewPanel/components/FeatureSelection/FeatureSelection.tsx index f36bccbc8..019a1e3fc 100644 --- a/frontend/app/components/Session_/OverviewPanel/components/FeatureSelection/FeatureSelection.tsx +++ b/frontend/app/components/Session_/OverviewPanel/components/FeatureSelection/FeatureSelection.tsx @@ -1,6 +1,8 @@ import React from 'react'; -import { Popover, Checkbox } from 'antd'; +import { Popover, Checkbox, Button } from 'antd'; +import {EyeInvisibleOutlined} from '@ant-design/icons'; import { Icon } from 'UI' +import Funnel from '@/types/funnel'; const NETWORK = 'NETWORK'; const ERRORS = 'ERRORS'; @@ -59,7 +61,7 @@ function FeatureSelection(props: Props) { +
toggleAllFeatures()} @@ -81,10 +83,9 @@ function FeatureSelection(props: Props) {
} > -
- -
X-Ray Events
-
+ ); diff --git a/frontend/app/components/Session_/OverviewPanel/components/PerformanceGraph/PerformanceGraph.tsx b/frontend/app/components/Session_/OverviewPanel/components/PerformanceGraph/PerformanceGraph.tsx index c3c2218ab..61b7db42d 100644 --- a/frontend/app/components/Session_/OverviewPanel/components/PerformanceGraph/PerformanceGraph.tsx +++ b/frontend/app/components/Session_/OverviewPanel/components/PerformanceGraph/PerformanceGraph.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { AreaChart, Area, ResponsiveContainer } from 'recharts'; +import {InfoCircleOutlined} from '@ant-design/icons' interface Props { list: any; @@ -57,10 +58,11 @@ const PerformanceGraph = React.memo((props: Props) => { {disabled ? (
-
Disabled for "All Tabs" View
+
+ Multi-tab performance overview is not available.
) : null} diff --git a/frontend/app/components/Session_/OverviewPanel/components/TimelinePointer/Dots.tsx b/frontend/app/components/Session_/OverviewPanel/components/TimelinePointer/Dots.tsx index a2c38b447..25606086d 100644 --- a/frontend/app/components/Session_/OverviewPanel/components/TimelinePointer/Dots.tsx +++ b/frontend/app/components/Session_/OverviewPanel/components/TimelinePointer/Dots.tsx @@ -71,7 +71,7 @@ export function FrustrationElement({ item, createEventClickHandler }: CommonProp const elData = getFrustration(item); return ( {elData.name} diff --git a/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx b/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx index b1c00b62b..644c5dbbb 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx +++ b/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx @@ -1,12 +1,14 @@ import React, { useEffect, useState } from 'react'; -import { Loader, Icon } from 'UI'; +import { Loader } from 'UI'; +import {Button, Tooltip} from 'antd'; +import {CloseOutlined} from '@ant-design/icons'; import { observer } from 'mobx-react-lite'; import { useStore } from 'App/mstore'; import SelectorsList from './components/SelectorsList/SelectorsList'; import { PlayerContext } from 'App/components/Session/playerContext'; import { compareJsonObjects } from 'App/utils'; -import Select from 'Shared/Select'; +import {Select, Form} from 'antd'; const JUMP_OFFSET = 1000; interface Props { @@ -58,34 +60,29 @@ function PageInsightsPanel({ setActiveTab }: Props) { }; return ( -
-
-
- Clicks -
-
{ - setActiveTab(''); - }} - className="ml-auto flex items-center justify-center bg-white cursor-pointer" - > - -
-
-
-
In Page
- + + +
diff --git a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css index 723c2fd1f..f7b7ee406 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css +++ b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css @@ -1,7 +1,5 @@ .wrapper { - padding: 10px; - box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.2); - border-radius: 3px; + padding: 1rem; background-color: $gray-lightest; margin-bottom: 15px; @@ -18,8 +16,6 @@ border-radius: 10px; background-color: $tealx; flex-shrink: 0; - border: solid thin white; - box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); display: flex; align-items: center; justify-content: center; diff --git a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.tsx b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.tsx index 5d6e5da2a..72eeca631 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.tsx +++ b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.tsx @@ -17,20 +17,20 @@ export default function SelectorCard({ index = 1, target, showContent }: Props) return ( // @ts-ignore TODO for Alex -
activeTarget(index)}> +
activeTarget(index)}>
{/* @ts-ignore */}
{index + 1}
-
{target.selector}
+
{target.selector}
{showContent && (
- {target.count} Clicks - {target.percent}% + {target.count} Click{target.count > 1 ? 's' : ''} - {target.percent}%
-
TOTAL CLICKS
+
TOTAL CLICKS
)}
diff --git a/frontend/app/components/Session_/Performance/Performance.tsx b/frontend/app/components/Session_/Performance/Performance.tsx index 4227c234f..c80a26b6b 100644 --- a/frontend/app/components/Session_/Performance/Performance.tsx +++ b/frontend/app/components/Session_/Performance/Performance.tsx @@ -17,6 +17,7 @@ import { } from 'recharts'; import { durationFromMsFormatted } from 'App/date'; import { formatBytes } from 'App/utils'; +import {Tooltip as TooltipANT} from 'antd'; import stl from './performance.module.css'; @@ -458,17 +459,32 @@ function Performance() { return ( -
-
Performance
-
- +
+
+
Performance
- - + + +
+ +
+ + All Tabs + + ), value: 'all', disabled: true, }, + { label: 'Current Tab', value: 'current' }, + ]} + defaultValue="current" + size="small" + className="rounded-full font-medium" + />
diff --git a/frontend/app/components/Session_/Player/Controls/components/TimelineZoomButton.tsx b/frontend/app/components/Session_/Player/Controls/components/TimelineZoomButton.tsx index 5db0182c8..c4e8763a4 100644 --- a/frontend/app/components/Session_/Player/Controls/components/TimelineZoomButton.tsx +++ b/frontend/app/components/Session_/Player/Controls/components/TimelineZoomButton.tsx @@ -29,7 +29,7 @@ function TimelineZoomButton() { }, []) return ( - diff --git a/frontend/app/components/shared/DevTools/BottomBlock/InfoLine.js b/frontend/app/components/shared/DevTools/BottomBlock/InfoLine.js index 3059c70d3..c4f11d36d 100644 --- a/frontend/app/components/shared/DevTools/BottomBlock/InfoLine.js +++ b/frontend/app/components/shared/DevTools/BottomBlock/InfoLine.js @@ -3,15 +3,15 @@ import cn from 'classnames'; import cls from './infoLine.module.css'; const InfoLine = ({ children }) => ( -
+
{ children }
) const Point = ({ label = '', value = '', display=true, color, dotColor }) => display - ?
+ ?
{ dotColor != null &&
} - { `${label}` } { value } + { `${label}` } { value }
: null; diff --git a/frontend/app/components/shared/DevTools/ConsolePanel/ConsolePanel.tsx b/frontend/app/components/shared/DevTools/ConsolePanel/ConsolePanel.tsx index 193c7556f..b9f12c81c 100644 --- a/frontend/app/components/shared/DevTools/ConsolePanel/ConsolePanel.tsx +++ b/frontend/app/components/shared/DevTools/ConsolePanel/ConsolePanel.tsx @@ -1,7 +1,9 @@ import React, { useEffect, useRef, useState, useMemo } from 'react'; import { LogLevel, ILog } from 'Player'; import BottomBlock from '../BottomBlock'; -import { Tabs, Input, Icon, NoContent } from 'UI'; +import { Tabs, Icon, NoContent } from 'UI'; +import {Input} from 'antd'; +import {SearchOutlined, InfoCircleOutlined} from '@ant-design/icons'; import cn from 'classnames'; import ConsoleRow from '../ConsoleRow'; import { PlayerContext } from 'App/components/Session/playerContext'; @@ -195,13 +197,13 @@ function ConsolePanel({
} />
{/* @ts-ignore */} @@ -210,8 +212,8 @@ function ConsolePanel({ - +
+ No Data
} diff --git a/frontend/app/components/shared/DevTools/ConsolePanel/MobileConsolePanel.tsx b/frontend/app/components/shared/DevTools/ConsolePanel/MobileConsolePanel.tsx index 83de3bb6b..f2424b0ae 100644 --- a/frontend/app/components/shared/DevTools/ConsolePanel/MobileConsolePanel.tsx +++ b/frontend/app/components/shared/DevTools/ConsolePanel/MobileConsolePanel.tsx @@ -12,6 +12,7 @@ import ErrorDetailsModal from 'App/components/Dashboard/components/Errors/ErrorD import { useModal } from 'App/components/Modal'; import useAutoscroll, { getLastItemTime } from '../useAutoscroll'; import { useRegExListFilterMemo, useTabListFilterMemo } from '../useListFilter'; +import {InfoCircleOutlined} from '@ant-design/icons' const ALL = 'ALL'; const INFO = 'INFO'; @@ -139,20 +140,20 @@ function MobileConsolePanel() {
} /> - +
+ No Data
} diff --git a/frontend/app/components/shared/DevTools/ConsoleRow/ConsoleRow.tsx b/frontend/app/components/shared/DevTools/ConsoleRow/ConsoleRow.tsx index 9581dd87f..7a8914fc9 100644 --- a/frontend/app/components/shared/DevTools/ConsoleRow/ConsoleRow.tsx +++ b/frontend/app/components/shared/DevTools/ConsoleRow/ConsoleRow.tsx @@ -50,7 +50,7 @@ function ConsoleRow(props: Props) {
(!!log.errorId ? props.onClick?.() : toggleExpand()) : undefined} > {logSource !== -1 && } - +
diff --git a/frontend/app/components/shared/DevTools/JumpButton/JumpButton.tsx b/frontend/app/components/shared/DevTools/JumpButton/JumpButton.tsx index adfb7c979..2b1a703f1 100644 --- a/frontend/app/components/shared/DevTools/JumpButton/JumpButton.tsx +++ b/frontend/app/components/shared/DevTools/JumpButton/JumpButton.tsx @@ -1,6 +1,8 @@ import React from 'react'; -import { Icon, Tooltip } from 'UI'; -import { shortDurationFromMs } from "App/date"; +import { Tooltip } from 'UI'; +import { CaretRightOutlined } from '@ant-design/icons'; +import { Button } from 'antd'; +import { shortDurationFromMs } from 'App/date'; interface Props { onClick: any; @@ -12,19 +14,24 @@ function JumpButton(props: Props) { return (
-
{ e.stopPropagation(); props.onClick(); }} + icon={} > - - JUMP -
- {props.time ?
- {shortDurationFromMs(props.time)} -
: null} + JUMP + + {props.time ? ( +
+ {shortDurationFromMs(props.time)} +
+ ) : null}
); diff --git a/frontend/app/components/shared/DevTools/NetworkPanel/NetworkPanel.tsx b/frontend/app/components/shared/DevTools/NetworkPanel/NetworkPanel.tsx index 8d15b713c..37d5590a0 100644 --- a/frontend/app/components/shared/DevTools/NetworkPanel/NetworkPanel.tsx +++ b/frontend/app/components/shared/DevTools/NetworkPanel/NetworkPanel.tsx @@ -1,7 +1,6 @@ import { ResourceType, Timed } from 'Player'; import MobilePlayer from 'Player/mobile/IOSPlayer'; import WebPlayer from 'Player/web/WebPlayer'; -import TabTag from "../TabTag"; import { observer } from 'mobx-react-lite'; import React, { useMemo, useState } from 'react'; @@ -13,14 +12,16 @@ import { import { formatMs } from 'App/date'; import { useStore } from 'App/mstore'; import { formatBytes } from 'App/utils'; -import { Icon, Input, NoContent, Tabs, Toggler, Tooltip } from 'UI'; +import { Icon, NoContent, Tabs } from 'UI'; +import { Tooltip, Input, Switch, Form } from 'antd'; +import { SearchOutlined, InfoCircleOutlined } from '@ant-design/icons'; import FetchDetailsModal from 'Shared/FetchDetailsModal'; -import { WsChannel } from "App/player/web/messages"; +import { WsChannel } from 'App/player/web/messages'; import BottomBlock from '../BottomBlock'; import InfoLine from '../BottomBlock/InfoLine'; -import TabSelector from "../TabSelector"; +import TabSelector from '../TabSelector'; import TimeTable from '../TimeTable'; import useAutoscroll, { getLastItemTime } from '../useAutoscroll'; import { useRegExListFilterMemo, useTabListFilterMemo } from '../useListFilter'; @@ -134,7 +135,7 @@ function renderStatus({ error?: string; }) { const displayedStatus = error ? ( - +
{cached ? ( - +
{displayedStatus} @@ -161,11 +162,7 @@ function renderStatus({ ); } -function NetworkPanelCont({ - panelHeight, -}: { - panelHeight: number; -}) { +function NetworkPanelCont({ panelHeight }: { panelHeight: number }) { const { player, store } = React.useContext(PlayerContext); const { sessionStore, uiPlayerStore } = useStore(); @@ -194,14 +191,27 @@ function NetworkPanelCont({ } else { const fetchList = tabValues.flatMap((tab) => tab.fetchList); const resourceList = tabValues.flatMap((tab) => tab.resourceList); - const fetchListNow = tabValues.flatMap((tab) => tab.fetchListNow).filter(Boolean); - const resourceListNow = tabValues.flatMap((tab) => tab.resourceListNow).filter(Boolean); + const fetchListNow = tabValues + .flatMap((tab) => tab.fetchListNow) + .filter(Boolean); + const resourceListNow = tabValues + .flatMap((tab) => tab.resourceListNow) + .filter(Boolean); const websocketList = tabValues.flatMap((tab) => tab.websocketList); - const websocketListNow = tabValues.flatMap((tab) => tab.websocketListNow).filter(Boolean); - return { fetchList, resourceList, fetchListNow, resourceListNow, websocketList, websocketListNow }; + const websocketListNow = tabValues + .flatMap((tab) => tab.websocketListNow) + .filter(Boolean); + return { + fetchList, + resourceList, + fetchListNow, + resourceListNow, + websocketList, + websocketListNow, + }; } }, [currentTab, tabStates, dataSource, tabValues]); - const getTabNum = (tab: string) => (tabsArr.findIndex((t) => t === tab) + 1); + const getTabNum = (tab: string) => tabsArr.findIndex((t) => t === tab) + 1; return ( { - const [selectedWsChannel, setSelectedWsChannel] = React.useState(null) + const [selectedWsChannel, setSelectedWsChannel] = React.useState< + WsChannel[] | null + >(null); const { showModal } = useModal(); const [showOnlyErrors, setShowOnlyErrors] = useState(false); @@ -487,10 +495,10 @@ export const NetworkPanelComp = observer( const showDetailsModal = (item: any) => { if (item.type === 'websocket') { const socketMsgList = websocketList.filter( - (ws) => ws.channelName === item.channelName - ); + (ws) => ws.channelName === item.channelName + ); - return setSelectedWsChannel(socketMsgList) + return setSelectedWsChannel(socketMsgList); } setIsDetailsModalActive(true); showModal( @@ -552,16 +560,23 @@ export const NetworkPanelComp = observer( dataKey: 'duration', render: renderDuration, }, - ] + ]; if (!showSingleTab) { - cols.unshift({ - label: 'Source', - width: 64, - render: (r: Record) =>
Tab {getTabNum?.(r.tabId) ?? 0}
, - }) + cols.unshift({ + label: 'Source', + width: 64, + render: (r: Record) => ( + +
+ {' '} + {getTabNum?.(r.tabId) ?? 0} +
+
+ ), + }); } - return cols - }, [showSingleTab]) + return cols; + }, [showSingleTab]); return ( } />
- setShowOnlyErrors(!showOnlyErrors)} - label="4xx-5xx Only" - /> + + +
- +
+ No Data
} @@ -675,7 +700,10 @@ export const NetworkPanelComp = observer( {tableCols} {selectedWsChannel ? ( - setSelectedWsChannel(null)} /> + setSelectedWsChannel(null)} + /> ) : null}
diff --git a/frontend/app/components/shared/DevTools/StackEventPanel/StackEventPanel.tsx b/frontend/app/components/shared/DevTools/StackEventPanel/StackEventPanel.tsx index 711504672..aaf662dd9 100644 --- a/frontend/app/components/shared/DevTools/StackEventPanel/StackEventPanel.tsx +++ b/frontend/app/components/shared/DevTools/StackEventPanel/StackEventPanel.tsx @@ -1,7 +1,9 @@ import { Timed } from 'Player'; import React, { useEffect, useMemo, useState } from 'react'; import { observer } from 'mobx-react-lite'; -import { Tabs, Input, NoContent, Icon } from 'UI'; +import { Tabs, NoContent, Icon } from 'UI'; +import {Input} from 'antd'; +import {SearchOutlined, InfoCircleOutlined} from '@ant-design/icons'; import { PlayerContext, MobilePlayerContext } from 'App/components/Session/playerContext'; import BottomBlock from '../BottomBlock'; import { useModal } from 'App/components/Modal'; @@ -10,7 +12,7 @@ import { typeList } from 'Types/session/stackEvent'; import StackEventRow from 'Shared/DevTools/StackEventRow'; import StackEventModal from '../StackEventModal'; -import { Segmented } from 'antd' +import { Segmented, Tooltip } from 'antd' import useAutoscroll, { getLastItemTime } from '../useAutoscroll'; import { useRegExListFilterMemo, useTabListFilterMemo } from '../useListFilter'; import { VList, VListHandle } from 'virtua'; @@ -177,23 +179,36 @@ const EventsPanel = observer(({ />
- + + Current Tab + ), + value: 'current', disabled: true}, + ]} + defaultValue="all" + size="small" + className="rounded-full font-medium" + /> } />
- +
+ No Data
} diff --git a/frontend/app/components/shared/DevTools/TabSelector.tsx b/frontend/app/components/shared/DevTools/TabSelector.tsx index 6711176c1..293faf117 100644 --- a/frontend/app/components/shared/DevTools/TabSelector.tsx +++ b/frontend/app/components/shared/DevTools/TabSelector.tsx @@ -15,7 +15,7 @@ function TabSelector() { uiPlayerStore.changeDataSource(value) } return ( - + ) } diff --git a/frontend/app/components/shared/DevTools/TabTag.tsx b/frontend/app/components/shared/DevTools/TabTag.tsx index a2e6f33b1..983a61f7d 100644 --- a/frontend/app/components/shared/DevTools/TabTag.tsx +++ b/frontend/app/components/shared/DevTools/TabTag.tsx @@ -1,10 +1,14 @@ -import React from 'react' +import React from 'react'; +import { Tooltip } from 'antd'; function TabTag({ tabNum }: { tabNum?: React.ReactNode }) { return ( -
+ + +
{tabNum}
+
) } diff --git a/frontend/app/components/shared/DevTools/TimeTable/TimeTable.tsx b/frontend/app/components/shared/DevTools/TimeTable/TimeTable.tsx index 90eabe26e..5961ba599 100644 --- a/frontend/app/components/shared/DevTools/TimeTable/TimeTable.tsx +++ b/frontend/app/components/shared/DevTools/TimeTable/TimeTable.tsx @@ -199,7 +199,7 @@ export default class TimeTable extends React.PureComponent { return (
{ {columns .filter((i: any) => !i.hidden) .map(({ dataKey, render, width, label }) => ( -
+
{render ? render(row) : row[dataKey || ''] || {'empty'}} diff --git a/frontend/app/components/shared/Insights/SankeyChart/NodeDropdown.tsx b/frontend/app/components/shared/Insights/SankeyChart/NodeDropdown.tsx index 0efb8fb4f..9149486e2 100644 --- a/frontend/app/components/shared/Insights/SankeyChart/NodeDropdown.tsx +++ b/frontend/app/components/shared/Insights/SankeyChart/NodeDropdown.tsx @@ -1,23 +1,11 @@ import React from 'react'; -// import Select from 'Shared/Select'; -import { Dropdown, MenuProps, Select, Space } from 'antd'; -import { DownOutlined, SmileOutlined } from '@ant-design/icons'; +import { MenuProps, Select } from 'antd'; interface Props { payload: any; } function NodeDropdown(props: Props) { - const items: MenuProps['items'] = [ - { - key: '1', - label: ( - - 1st menu item - - ) - } - ]; return (