diff --git a/frontend/app/components/Session/Tabs/tabs.css b/frontend/app/components/Session/Tabs/tabs.css index 0cf1cc320..b5b266b12 100644 --- a/frontend/app/components/Session/Tabs/tabs.css +++ b/frontend/app/components/Session/Tabs/tabs.css @@ -1,6 +1,6 @@ .tabs { display: flex; - justify-content: flex-start; + justify-content: space-around; align-items: center; &.bordered { border-bottom: solid thin $gray-light; @@ -9,6 +9,8 @@ .tab { padding: 14px 15px; + text-align: center; + flex: 1; cursor: pointer; transition: all 0.2s; color: $gray-darkest; diff --git a/frontend/app/components/Session_/EventsBlock/UserCard/UserCard.js b/frontend/app/components/Session_/EventsBlock/UserCard/UserCard.js index d4745d3c2..35a6e35c3 100644 --- a/frontend/app/components/Session_/EventsBlock/UserCard/UserCard.js +++ b/frontend/app/components/Session_/EventsBlock/UserCard/UserCard.js @@ -74,6 +74,8 @@ function UserCard({ · - More + + More + diff --git a/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx b/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx index 445d65b80..106a90522 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx +++ b/frontend/app/components/Session_/PageInsightsPanel/PageInsightsPanel.tsx @@ -74,11 +74,11 @@ function PageInsightsPanel({ />
{ setActiveTab(''); }} - className="ml-auto flex items-center justify-center bg-white cursor-pointer" - > - -
+ onClick={() => { 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 e4bf89995..723c2fd1f 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css +++ b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorCard/SelectorCard.module.css @@ -2,7 +2,7 @@ padding: 10px; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.2); border-radius: 3px; - background-color: white; + background-color: $gray-lightest; margin-bottom: 15px; & .top { @@ -40,5 +40,5 @@ } .active { - background-color: #f9ffff; -} \ No newline at end of file + background-color: $light-blue-bg; +} diff --git a/frontend/app/components/Session_/Player/Controls/ControlButton.js b/frontend/app/components/Session_/Player/Controls/ControlButton.js index 21c14082a..5321aa45c 100644 --- a/frontend/app/components/Session_/Player/Controls/ControlButton.js +++ b/frontend/app/components/Session_/Player/Controls/ControlButton.js @@ -18,7 +18,7 @@ const ControlButton = ({ noIcon, }) => ( ); diff --git a/frontend/app/components/Session_/Player/Controls/Controls.js b/frontend/app/components/Session_/Player/Controls/Controls.js index 06d7e1064..8a00df915 100644 --- a/frontend/app/components/Session_/Player/Controls/Controls.js +++ b/frontend/app/components/Session_/Player/Controls/Controls.js @@ -1,13 +1,15 @@ import React from 'react'; import cn from 'classnames'; import { connect } from 'react-redux'; -import { +import { connectPlayer, STORAGE_TYPES, selectStorageType, selectStorageListNow, } from 'Player/store'; import LiveTag from 'Shared/LiveTag'; + +import { Icon } from 'UI'; import { toggleInspectorMode } from 'Player'; import { fullscreenOn, @@ -22,7 +24,6 @@ import { GRAPHQL, FETCH, EXCEPTIONS, - LONGTASKS, INSPECTOR, } from 'Duck/components/player'; import { ReduxTime } from './Time'; @@ -30,6 +31,7 @@ import Timeline from './Timeline'; import ControlButton from './ControlButton'; import styles from './controls.module.css'; +import { Tooltip } from 'react-tippy'; function getStorageIconName(type) { @@ -96,7 +98,7 @@ function getStorageName(type) { showExceptions: state.exceptionsList.length > 0, showLongtasks: state.longtasksList.length > 0, })) -@connect((state, props) => { +@connect((state, props) => { const permissions = state.getIn([ 'user', 'account', 'permissions' ]) || []; const isEnterprise = state.getIn([ 'user', 'account', 'edition' ]) === 'ee'; return { @@ -131,9 +133,9 @@ export default class Controls extends React.Component { nextProps.live !== this.props.live || nextProps.livePlay !== this.props.livePlay || nextProps.playing !== this.props.playing || - nextProps.completed !== this.props.completed || - nextProps.skip !== this.props.skip || - nextProps.skipToIssue !== this.props.skipToIssue || + nextProps.completed !== this.props.completed || + nextProps.skip !== this.props.skip || + nextProps.skipToIssue !== this.props.skipToIssue || nextProps.speed !== this.props.speed || nextProps.disabled !== this.props.disabled || nextProps.fullscreenDisabled !== this.props.fullscreenDisabled || @@ -149,7 +151,7 @@ export default class Controls extends React.Component { nextProps.storageCount !== this.props.storageCount || nextProps.storageType !== this.props.storageType || nextProps.showStorage !== this.props.showStorage || - nextProps.showProfiler !== this.props.showProfiler || + nextProps.showProfiler !== this.props.showProfiler || nextProps.showGraphql !== this.props.showGraphql || nextProps.showFetch !== this.props.showFetch || nextProps.fetchCount !== this.props.fetchCount || @@ -162,14 +164,19 @@ export default class Controls extends React.Component { } onKeyDown = (e) => { + console.log(e.key, e.target) if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) { return; } - if (this.props.inspectorMode) return; + if (this.props.inspectorMode) { + if (e.key === 'Esc' || e.key === 'Escape') { + toggleInspectorMode(); + } + }; // if (e.key === ' ') { // document.activeElement.blur(); // this.props.togglePlay(); - // } + // } if (e.key === 'Esc' || e.key === 'Escape') { this.props.fullscreenOff(); } @@ -204,34 +211,46 @@ export default class Controls extends React.Component { let label; let icon; if (completed) { - icon = 'redo'; + icon = 'arrow-clockwise'; + label = 'Replay this session' } else if (playing) { - icon = 'play-fill-new'; - } else { icon = 'pause-fill'; + label = 'Pause'; + } else { + icon = 'play-fill-new'; + label = 'Pause'; + label = 'Play' } return ( -
- -
+
+ +
+ ) } - controlIcon = (icon, size, action, isBackwards, additionalClasses) => -
+
render() { - const { + const { bottomBlock, toggleBottomBlock, live, @@ -239,7 +258,6 @@ export default class Controls extends React.Component { skip, speed, disabled, - fullscreenDisabled, logCount, logRedCount, resourceRedCount, @@ -256,11 +274,9 @@ export default class Controls extends React.Component { showFetch, fetchCount, graphqlCount, - showLongtasks, exceptionsCount, showExceptions, - fullscreen, - skipToIssue, + fullscreen, inspectorMode, closedLive, } = this.props; @@ -285,23 +301,41 @@ export default class Controls extends React.Component { )}
- {this.controlIcon("skip-forward-fill", 18, this.backTenSeconds, true, 'hover:bg-active-blue-border')} + + {this.controlIcon("skip-forward-fill", 18, this.backTenSeconds, true, 'hover:bg-active-blue-border color-main h-full')} +
10s
- {this.controlIcon("skip-forward-fill", 18, this.forthTenSeconds, false, 'hover:bg-active-blue-border')} + + {this.controlIcon("skip-forward-fill", 18, this.forthTenSeconds, false, 'hover:bg-active-blue-border color-main h-full')} +
{!live &&
- - + + +
diff --git a/frontend/app/components/Session_/Player/Controls/controlButton.module.css b/frontend/app/components/Session_/Player/Controls/controlButton.module.css index bd394c4d9..a8f7459c4 100644 --- a/frontend/app/components/Session_/Player/Controls/controlButton.module.css +++ b/frontend/app/components/Session_/Player/Controls/controlButton.module.css @@ -4,12 +4,14 @@ flex-direction: column; align-items: center; justify-content: center; - padding: 5px 10px; + padding: 10px 5px; cursor: pointer; + border-top: 0px; + border-left: 0px; + border-right: 0px; min-width: 60px; position: relative; - border-radius: 3px; - &.active, &:hover { + &:hover { background-color: $gray-lightest; transition: all 0.2s; } @@ -19,7 +21,7 @@ height: 6px; border-radius: 3px; background-color: red; - bottom: 0px; + bottom: 2px; right: 0px; position: absolute; } @@ -44,7 +46,6 @@ & .label { /* padding-top: 5px; */ font-size: 10px; - color: $gray-darkest; height: 16px; } diff --git a/frontend/app/components/Session_/Player/Controls/controls.module.css b/frontend/app/components/Session_/Player/Controls/controls.module.css index 565905506..1598ddf26 100644 --- a/frontend/app/components/Session_/Player/Controls/controls.module.css +++ b/frontend/app/components/Session_/Player/Controls/controls.module.css @@ -64,6 +64,9 @@ background-color: $gray-lightest; transition: all 0.2s; } + &.active { + background: repeating-linear-gradient( 125deg, #efefef, #efefef 3px, #ddd 3px, #efefef 5px ); + } } .divider { diff --git a/frontend/app/components/Session_/Player/Controls/timeline.module.css b/frontend/app/components/Session_/Player/Controls/timeline.module.css index 6b649e6ef..1180b6849 100644 --- a/frontend/app/components/Session_/Player/Controls/timeline.module.css +++ b/frontend/app/components/Session_/Player/Controls/timeline.module.css @@ -38,7 +38,7 @@ top: 3px; height: 10px; bottom: 0; - background-color: $gray-light; + background: repeating-linear-gradient( 125deg, #efefef, #efefef 3px, #ddd 3px, #efefef 5px ); pointer-events: none; z-index: 2; } @@ -49,6 +49,7 @@ width: 2px; height: 10px; background: $main; + z-index: 3; pointer-events: none; /* top: 0; */ /* bottom: 0; */ diff --git a/frontend/app/components/Session_/PlayerBlockHeader.js b/frontend/app/components/Session_/PlayerBlockHeader.js index 11d63458f..252df59d5 100644 --- a/frontend/app/components/Session_/PlayerBlockHeader.js +++ b/frontend/app/components/Session_/PlayerBlockHeader.js @@ -104,9 +104,8 @@ export default class PlayerBlockHeader extends React.PureComponent { const TABS = [ this.props.tabs.EVENTS, this.props.tabs.HEATMAPS ].map(tab => ({ text: tab, key: tab })); return (
-
- - +
+
-
+
diff --git a/frontend/app/svg/icons/arrow-clockwise.svg b/frontend/app/svg/icons/arrow-clockwise.svg new file mode 100644 index 000000000..dd97aa56f --- /dev/null +++ b/frontend/app/svg/icons/arrow-clockwise.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/app/theme/colors.js b/frontend/app/theme/colors.js index 29e740634..342a35757 100644 --- a/frontend/app/theme/colors.js +++ b/frontend/app/theme/colors.js @@ -31,7 +31,7 @@ module.exports = { "bg-blue": "#e3e6ff", "active-blue-border": "#D0D4F2", pink: "#ffb9b9", - + "light-blue-bg": "#E5F7F7", white: "#fff", borderColor: {