RequestListColumnPath.js (2432B)
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.js"); 10 const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 11 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.js"); 12 const { 13 connect, 14 } = require("resource://devtools/client/shared/vendor/react-redux.js"); 15 const { 16 getUrlToolTip, 17 propertiesEqual, 18 } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); 19 const { truncateString } = require("resource://devtools/shared/string.js"); 20 const { 21 MAX_UI_STRING_LENGTH, 22 } = require("resource://devtools/client/netmonitor/src/constants.js"); 23 const { 24 getOverriddenUrl, 25 } = require("resource://devtools/client/netmonitor/src/selectors/index.js"); 26 27 const UPDATED_FILE_PROPS = ["urlDetails", "waitingTime"]; 28 29 class RequestListColumnPath extends Component { 30 static get propTypes() { 31 return { 32 item: PropTypes.object.isRequired, 33 onWaterfallMouseDown: PropTypes.func, 34 isOverridden: PropTypes.bool.isRequired, 35 overriddenUrl: PropTypes.string, 36 }; 37 } 38 39 shouldComponentUpdate(nextProps) { 40 return ( 41 !propertiesEqual(UPDATED_FILE_PROPS, this.props.item, nextProps.item) || 42 nextProps.overriddenUrl !== this.props.overriddenUrl 43 ); 44 } 45 46 render() { 47 const { 48 item: { urlDetails }, 49 isOverridden, 50 overriddenUrl, 51 } = this.props; 52 const requestedPath = urlDetails.path; 53 const pathToolTip = getUrlToolTip(urlDetails); 54 55 // Build extra content for the title if the request is overridden. 56 const overrideTitle = isOverridden ? ` → ${overriddenUrl}` : ""; 57 58 return dom.td( 59 { 60 className: "requests-list-column requests-list-path", 61 title: 62 truncateString(pathToolTip, MAX_UI_STRING_LENGTH) + overrideTitle, 63 }, 64 dom.div({}, truncateString(requestedPath, MAX_UI_STRING_LENGTH)) 65 ); 66 } 67 } 68 69 module.exports = connect( 70 (state, props) => { 71 const overriddenUrl = getOverriddenUrl(state, props.item.urlDetails?.url); 72 return { 73 isOverridden: !!overriddenUrl, 74 overriddenUrl, 75 }; 76 }, 77 {}, 78 undefined, 79 { storeKey: "toolbox-store" } 80 )(RequestListColumnPath);