diff --git a/frontend/app/api_client.js b/frontend/app/api_client.js index 33f7ffe66..0e4699359 100644 --- a/frontend/app/api_client.js +++ b/frontend/app/api_client.js @@ -26,6 +26,7 @@ const siteIdRequiredPaths = [ '/dashboards', '/metrics', '/unprocessed', + '/notes', // '/custom_metrics/sessions', ]; @@ -37,7 +38,7 @@ const noStoringFetchPathStarts = [ // null? export const clean = (obj, forbidenValues = [ undefined, '' ]) => { - const keys = Array.isArray(obj) + const keys = Array.isArray(obj) ? new Array(obj.length).fill().map((_, i) => i) : Object.keys(obj); const retObj = Array.isArray(obj) ? [] : {}; @@ -49,7 +50,7 @@ export const clean = (obj, forbidenValues = [ undefined, '' ]) => { retObj[key] = value; } }); - + return retObj; } @@ -70,7 +71,7 @@ export default class APIClient { this.siteId = siteId; } - fetch(path, params, options = { clean: true }) { + fetch(path, params, options = { clean: true }) { if (params !== undefined) { const cleanedParams = options.clean ? clean(params) : params; this.init.body = JSON.stringify(cleanedParams); diff --git a/frontend/app/components/Session/Layout/Player/TimeTracker.js b/frontend/app/components/Session/Layout/Player/TimeTracker.js index 731f414ac..d9927a921 100644 --- a/frontend/app/components/Session/Layout/Player/TimeTracker.js +++ b/frontend/app/components/Session/Layout/Player/TimeTracker.js @@ -1,22 +1,21 @@ import React from 'react'; import { observer } from 'mobx-react-lite'; -import { connectPlayer } from 'Player'; import cls from './timeTracker.module.css'; function TimeTracker({ player, scale }) { - return ( + return ( <>
> ); } -export default observer(TimeTracker); \ No newline at end of file +export default observer(TimeTracker); diff --git a/frontend/app/components/Session/WebPlayer.js b/frontend/app/components/Session/WebPlayer.js index b5b1f86af..6ef5bbba1 100644 --- a/frontend/app/components/Session/WebPlayer.js +++ b/frontend/app/components/Session/WebPlayer.js @@ -3,11 +3,11 @@ import { connect } from 'react-redux'; import { Loader } from 'UI'; import { toggleFullscreen, closeBottomBlock } from 'Duck/components/player'; import { fetchList } from 'Duck/integrations'; -import { PlayerProvider, connectPlayer, init as initPlayer, clean as cleanPlayer, Controls } from 'Player'; +import { PlayerProvider, injectNotes, connectPlayer, init as initPlayer, clean as cleanPlayer, Controls } from 'Player'; import cn from 'classnames'; import RightBlock from './RightBlock'; import withLocationHandlers from 'HOCs/withLocationHandlers'; - +import { useStore } from 'App/mstore' import PlayerBlockHeader from '../Session_/PlayerBlockHeader'; import PlayerBlock from '../Session_/PlayerBlock'; import styles from '../Session_/session.module.css'; @@ -62,6 +62,7 @@ function RightMenu({ live, tabs, activeTab, setActiveTab, fullscreen }) { function WebPlayer(props) { const { session, toggleFullscreen, closeBottomBlock, live, fullscreen, jwt, fetchList } = props; + const { notesStore } = useStore() const [activeTab, setActiveTab] = useState(''); @@ -69,6 +70,10 @@ function WebPlayer(props) { fetchList('issues'); initPlayer(session, jwt); + notesStore.fetchSessionNotes(session.sessionId).then(r => { + injectNotes(r) + }) + const jumptTime = props.query.get('jumpto'); if (jumptTime) { Controls.jump(parseInt(jumptTime)); diff --git a/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js b/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js index c68dac880..49694ca5f 100644 --- a/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js +++ b/frontend/app/components/Session_/EventsBlock/EventGroupWrapper.js @@ -6,10 +6,11 @@ import withToggle from 'HOCs/withToggle'; import { TYPES } from 'Types/session/event'; import Event from './Event' import stl from './eventGroupWrapper.module.css'; +import NoteEvent from './NoteEvent'; // TODO: incapsulate toggler in LocationEvent @withToggle("showLoadInfo", "toggleLoadInfo") -class EventGroupWrapper extends React.PureComponent { +class EventGroupWrapper extends React.Component { toggleLoadInfo = (e) => { e.stopPropagation(); @@ -42,6 +43,8 @@ class EventGroupWrapper extends React.PureComponent { showLoadInfo, isFirst, presentInSearch, + isNote, + filterOutNote, } = this.props; const isLocation = event.type === TYPES.LOCATION; @@ -64,7 +67,19 @@ class EventGroupWrapper extends React.PureComponent { } - { isLocation + {isNote ? ( +