summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/net/components/net-info-group.js
blob: d9794652e0a8ddfb43b7abc11ba4a5333a2173d7 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* 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/. */
"use strict";

const React = require("devtools/client/shared/vendor/react");
const NetInfoParams = React.createFactory(require("./net-info-params"));

// Shortcuts
const DOM = React.DOM;
const PropTypes = React.PropTypes;

/**
 * This template represents a group of data within a tab. For example,
 * Headers tab has two groups 'Request Headers' and 'Response Headers'
 * The Response tab can also have two groups 'Raw Data' and 'JSON'
 */
var NetInfoGroup = React.createClass({
  propTypes: {
    type: PropTypes.string.isRequired,
    name: PropTypes.string.isRequired,
    params: PropTypes.array,
    content: PropTypes.element,
    open: PropTypes.bool
  },

  displayName: "NetInfoGroup",

  getDefaultProps() {
    return {
      open: true,
    };
  },

  getInitialState() {
    return {
      open: this.props.open,
    };
  },

  onToggle(event) {
    this.setState({
      open: !this.state.open
    });
  },

  render() {
    let content = this.props.content;

    if (!content && this.props.params) {
      content = NetInfoParams({
        params: this.props.params
      });
    }

    let open = this.state.open;
    let className = open ? "opened" : "";

    return (
      DOM.div({className: "netInfoGroup" + " " + className + " " +
        this.props.type},
        DOM.span({
          className: "netInfoGroupTwisty",
          onClick: this.onToggle
        }),
        DOM.span({
          className: "netInfoGroupTitle",
          onClick: this.onToggle},
          this.props.name
        ),
        DOM.div({className: "netInfoGroupContent"},
          content
        )
      )
    );
  }
});

// Exports from this module
module.exports = NetInfoGroup;