/
index.js
77 lines (68 loc) · 2.27 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// @flow
import * as React from 'react';
import explicitConnect from 'firefox-profiler/utils/connect';
import { JsTracerChart } from './Chart';
import { JsTracerSettings } from './Settings';
import { JsTracerEmptyReasons } from './EmptyReasons';
import { getProfile } from 'firefox-profiler/selectors/profile';
import { selectedThreadSelectors } from 'firefox-profiler/selectors/per-thread';
import {
getShowJsTracerSummary,
getSelectedThreadsKey,
} from 'firefox-profiler/selectors/url-state';
import { updatePreviewSelection } from 'firefox-profiler/actions/profile-view';
import type {
Profile,
JsTracerTable,
ThreadsKey,
} from 'firefox-profiler/types';
import type { ConnectedProps } from 'firefox-profiler/utils/connect';
import './index.css';
type DispatchProps = {|
+updatePreviewSelection: typeof updatePreviewSelection,
|};
type StateProps = {|
+profile: Profile,
+threadsKey: ThreadsKey,
+jsTracerTable: JsTracerTable | null,
+showJsTracerSummary: boolean,
|};
type Props = ConnectedProps<{||}, StateProps, DispatchProps>;
class JsTracerImpl extends React.PureComponent<Props> {
render() {
const { profile, jsTracerTable, showJsTracerSummary, threadsKey } =
this.props;
return (
<div className="jsTracer">
{jsTracerTable === null || jsTracerTable.events.length === 0 ? (
<JsTracerEmptyReasons />
) : (
<>
<JsTracerSettings />
<JsTracerChart
profile={profile}
jsTracerTable={jsTracerTable}
showJsTracerSummary={showJsTracerSummary}
threadsKey={threadsKey}
/>
</>
)}
</div>
);
}
}
export const JsTracer = explicitConnect<{||}, StateProps, DispatchProps>({
mapStateToProps: (state) => {
return {
profile: getProfile(state),
threadsKey: getSelectedThreadsKey(state),
jsTracerTable: selectedThreadSelectors.getJsTracerTable(state),
showJsTracerSummary: getShowJsTracerSummary(state),
};
},
mapDispatchToProps: { updatePreviewSelection },
component: JsTracerImpl,
});