/* 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 . */ import React, { Component } from "react"; import PropTypes from "prop-types"; import InlinePreviewRow from "./InlinePreviewRow"; import { connect } from "../../utils/connect"; import { getSelectedFrame, getCurrentThread, getInlinePreviews, } from "../../selectors"; function hasPreviews(previews) { return !!previews && !!Object.keys(previews).length; } class InlinePreviews extends Component { static get propTypes() { return { editor: PropTypes.object.isRequired, previews: PropTypes.object, selectedFrame: PropTypes.object.isRequired, selectedSource: PropTypes.object.isRequired, }; } shouldComponentUpdate({ previews }) { return hasPreviews(previews); } render() { const { editor, selectedFrame, selectedSource, previews } = this.props; // Render only if currently open file is the one where debugger is paused if ( !selectedFrame || selectedFrame.location.sourceId !== selectedSource.id || !hasPreviews(previews) ) { return null; } const previewsObj = previews; let inlinePreviewRows; editor.codeMirror.operation(() => { inlinePreviewRows = Object.keys(previewsObj).map(line => { const lineNum = parseInt(line, 10); return ( ); }); }); return
{inlinePreviewRows}
; } } const mapStateToProps = state => { const thread = getCurrentThread(state); const selectedFrame = getSelectedFrame(state, thread); if (!selectedFrame) { return { selectedFrame: null, previews: null, }; } return { selectedFrame, previews: getInlinePreviews(state, thread, selectedFrame.id), }; }; export default connect(mapStateToProps)(InlinePreviews);