openreplay/frontend/app/components/Session/Layout/ToolPanel/StackEvents.js
2023-07-03 14:21:25 +02:00

72 lines
2.3 KiB
JavaScript

import React from 'react';
import { connect } from 'react-redux';
import { useState } from 'react';
import { NoContent, Tabs } from 'UI';
import { hideHint } from 'Duck/components/player';
import { typeList } from 'Types/session/stackEvent';
import * as PanelLayout from './PanelLayout';
import UserEvent from 'Components/Session_/StackEvents/UserEvent';
import Autoscroll from 'Components/Session_/Autoscroll';
const ALL = 'ALL';
const TABS = [ ALL, ...typeList ].map(tab =>({ text: tab, key: tab }));
function StackEvents({
stackEvents,
hintIsHidden,
hideHint,
}) {
const [ activeTab, setTab ] = useState(ALL);
const tabs = TABS.filter(({ key }) => key === ALL || stackEvents.some(({ source }) => key === source)); // Do it once for all when we show them all
const filteredStackEvents = stackEvents
.filter(({ source }) => activeTab === ALL || activeTab === source);
return (
<>
<PanelLayout.Header>
<Tabs
className="uppercase"
tabs={ tabs }
active={ activeTab }
onClick={ setTab }
border={ false }
/>
</PanelLayout.Header>
<PanelLayout.Body>
<NoContent
title="Nothing to display yet"
subtext={ !hintIsHidden
?
<>
<a className="underline color-teal" href="https://docs.openreplay.com/integrations" target="_blank">Integrations</a>
{' and '}
<a className="underline color-teal" href="https://docs.openreplay.com/api#event" target="_blank">Events</a>
{ ' make debugging easier. Sync your backend logs and custom events with session replay.' }
<br/><br/>
<button className="color-teal" onClick={() => hideHint("stack")}>Got It!</button>
</>
: null
}
size="small"
show={ filteredStackEvents.length === 0 }
>
<Autoscroll>
{ filteredStackEvents.map(userEvent => (
<UserEvent key={ userEvent.key } userEvent={ userEvent }/>
))}
</Autoscroll>
</NoContent>
</PanelLayout.Body>
</>
);
}
export default connect(state => ({
hintIsHidden: state.getIn(['components', 'player', 'hiddenHints', 'stack']) ||
!state.getIn([ 'site', 'list' ]).some(s => s.stackIntegrations),
}), {
hideHint
})(StackEvents);