RequestListColumnFile.js (3138B)
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 } = require("resource://devtools/client/shared/vendor/react.mjs"); 10 const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 11 const { 12 L10N, 13 } = require("resource://devtools/client/netmonitor/src/utils/l10n.js"); 14 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 15 const { 16 connect, 17 } = require("resource://devtools/client/shared/vendor/react-redux.js"); 18 const { 19 getUrlToolTip, 20 propertiesEqual, 21 } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); 22 const { 23 getFormattedTime, 24 } = require("resource://devtools/client/netmonitor/src/utils/format-utils.js"); 25 const { truncateString } = require("resource://devtools/shared/string.js"); 26 const { 27 MAX_UI_STRING_LENGTH, 28 } = require("resource://devtools/client/netmonitor/src/constants.js"); 29 const { 30 getOverriddenUrl, 31 } = require("resource://devtools/client/netmonitor/src/selectors/index.js"); 32 33 const UPDATED_FILE_PROPS = ["urlDetails", "waitingTime"]; 34 35 class RequestListColumnFile extends Component { 36 static get propTypes() { 37 return { 38 item: PropTypes.object.isRequired, 39 slowLimit: PropTypes.number, 40 onWaterfallMouseDown: PropTypes.func, 41 isOverridden: PropTypes.bool.isRequired, 42 overriddenUrl: PropTypes.string, 43 }; 44 } 45 46 shouldComponentUpdate(nextProps) { 47 return ( 48 !propertiesEqual(UPDATED_FILE_PROPS, this.props.item, nextProps.item) || 49 nextProps.overriddenUrl !== this.props.overriddenUrl 50 ); 51 } 52 53 render() { 54 const { 55 item: { urlDetails, waitingTime }, 56 isOverridden, 57 slowLimit, 58 onWaterfallMouseDown, 59 overriddenUrl, 60 } = this.props; 61 62 const requestedFile = urlDetails.baseNameWithQuery; 63 const fileToolTip = getUrlToolTip(urlDetails); 64 65 const isSlow = slowLimit > 0 && !!waitingTime && waitingTime > slowLimit; 66 67 // Build extra content for the title if the request is overridden. 68 const overrideTitle = isOverridden ? ` → ${overriddenUrl}` : ""; 69 70 return dom.td( 71 { 72 className: "requests-list-column requests-list-file", 73 title: 74 truncateString(fileToolTip, MAX_UI_STRING_LENGTH) + overrideTitle, 75 }, 76 dom.div({}, truncateString(requestedFile, MAX_UI_STRING_LENGTH)), 77 isSlow && 78 dom.div({ 79 title: L10N.getFormatStr( 80 "netmonitor.audits.slowIconTooltip", 81 getFormattedTime(waitingTime), 82 getFormattedTime(slowLimit) 83 ), 84 onMouseDown: onWaterfallMouseDown, 85 className: "requests-list-slow-button", 86 }) 87 ); 88 } 89 } 90 91 module.exports = connect( 92 (state, props) => { 93 const overriddenUrl = getOverriddenUrl(state, props.item.urlDetails?.url); 94 return { 95 isOverridden: !!overriddenUrl, 96 overriddenUrl, 97 }; 98 }, 99 {}, 100 undefined, 101 { storeKey: "toolbox-store" } 102 )(RequestListColumnFile);