tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

MessageListItem.js (3609B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 const {
      8  Component,
      9  createFactory,
     10 } = require("resource://devtools/client/shared/vendor/react.mjs");
     11 const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js");
     12 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs");
     13 
     14 loader.lazyGetter(this, "ColumnData", function () {
     15  return createFactory(
     16    require("resource://devtools/client/netmonitor/src/components/messages/ColumnData.js")
     17  );
     18 });
     19 loader.lazyGetter(this, "ColumnEventName", function () {
     20  return createFactory(
     21    require("resource://devtools/client/netmonitor/src/components/messages/ColumnEventName.js")
     22  );
     23 });
     24 loader.lazyGetter(this, "ColumnFinBit", function () {
     25  return createFactory(
     26    require("resource://devtools/client/netmonitor/src/components/messages/ColumnFinBit.js")
     27  );
     28 });
     29 loader.lazyGetter(this, "ColumnLastEventId", function () {
     30  return createFactory(
     31    require("resource://devtools/client/netmonitor/src/components/messages/ColumnLastEventId.js")
     32  );
     33 });
     34 loader.lazyGetter(this, "ColumnMaskBit", function () {
     35  return createFactory(
     36    require("resource://devtools/client/netmonitor/src/components/messages/ColumnMaskBit.js")
     37  );
     38 });
     39 loader.lazyGetter(this, "ColumnOpCode", function () {
     40  return createFactory(
     41    require("resource://devtools/client/netmonitor/src/components/messages/ColumnOpCode.js")
     42  );
     43 });
     44 loader.lazyGetter(this, "ColumnRetry", function () {
     45  return createFactory(
     46    require("resource://devtools/client/netmonitor/src/components/messages/ColumnRetry.js")
     47  );
     48 });
     49 loader.lazyGetter(this, "ColumnSize", function () {
     50  return createFactory(
     51    require("resource://devtools/client/netmonitor/src/components/messages/ColumnSize.js")
     52  );
     53 });
     54 loader.lazyGetter(this, "ColumnTime", function () {
     55  return createFactory(
     56    require("resource://devtools/client/netmonitor/src/components/messages/ColumnTime.js")
     57  );
     58 });
     59 
     60 const COLUMN_COMPONENT_MAP = {
     61  data: ColumnData,
     62  eventName: ColumnEventName,
     63  finBit: ColumnFinBit,
     64  lastEventId: ColumnLastEventId,
     65  maskBit: ColumnMaskBit,
     66  opCode: ColumnOpCode,
     67  retry: ColumnRetry,
     68  size: ColumnSize,
     69  time: ColumnTime,
     70 };
     71 
     72 /**
     73 * Renders one row in the list.
     74 */
     75 class MessageListItem extends Component {
     76  static get propTypes() {
     77    return {
     78      item: PropTypes.object.isRequired,
     79      index: PropTypes.number.isRequired,
     80      isSelected: PropTypes.bool.isRequired,
     81      onMouseDown: PropTypes.func.isRequired,
     82      onContextMenu: PropTypes.func.isRequired,
     83      connector: PropTypes.object.isRequired,
     84      visibleColumns: PropTypes.array.isRequired,
     85    };
     86  }
     87 
     88  render() {
     89    const {
     90      item,
     91      index,
     92      isSelected,
     93      onMouseDown,
     94      onContextMenu,
     95      connector,
     96      visibleColumns,
     97    } = this.props;
     98 
     99    const classList = [
    100      "message-list-item",
    101      index % 2 ? "odd" : "even",
    102      item.type,
    103    ];
    104    if (isSelected) {
    105      classList.push("selected");
    106    }
    107 
    108    return dom.tr(
    109      {
    110        className: classList.join(" "),
    111        tabIndex: 0,
    112        onMouseDown,
    113        onContextMenu,
    114      },
    115      visibleColumns.map(name => {
    116        const ColumnComponent = COLUMN_COMPONENT_MAP[name];
    117        return ColumnComponent({
    118          key: `message-list-column-${name}-${index}`,
    119          connector,
    120          item,
    121        });
    122      })
    123    );
    124  }
    125 }
    126 
    127 module.exports = MessageListItem;