summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/components/summary-button.js
blob: 9465d3147b6c4abc869aa3d82c44d3a18c497b1d (plain)
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
/* 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/. */

/* globals NetMonitorView */

"use strict";

const {
  CONTENT_SIZE_DECIMALS,
  REQUEST_TIME_DECIMALS,
} = require("../constants");
const { DOM, PropTypes } = require("devtools/client/shared/vendor/react");
const { connect } = require("devtools/client/shared/vendor/react-redux");
const { PluralForm } = require("devtools/shared/plural-form");
const { L10N } = require("../l10n");
const { getSummary } = require("../selectors/index");

const { button, span } = DOM;

function SummaryButton({
  summary,
  triggerSummary,
}) {
  let { count, totalBytes, totalMillis } = summary;
  const text = (count === 0) ? L10N.getStr("networkMenu.empty") :
    PluralForm.get(count, L10N.getStr("networkMenu.summary"))
    .replace("#1", count)
    .replace("#2", L10N.numberWithDecimals(totalBytes / 1024,
      CONTENT_SIZE_DECIMALS))
    .replace("#3", L10N.numberWithDecimals(totalMillis / 1000,
      REQUEST_TIME_DECIMALS));

  return button({
    id: "requests-menu-network-summary-button",
    className: "devtools-button",
    title: count ? text : L10N.getStr("netmonitor.toolbar.perf"),
    onClick: triggerSummary,
  },
  span({ className: "summary-info-icon" }),
  span({ className: "summary-info-text" }, text));
}

SummaryButton.propTypes = {
  summary: PropTypes.object.isRequired,
};

module.exports = connect(
  (state) => ({
    summary: getSummary(state),
  }),
  (dispatch) => ({
    triggerSummary: () => {
      NetMonitorView.toggleFrontendMode();
    },
  })
)(SummaryButton);