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;