import React from "react" import PropTypes from "prop-types" import { List } from "immutable" export default class Errors extends React.Component { static propTypes = { editorActions: PropTypes.object, errSelectors: PropTypes.object.isRequired, layoutSelectors: PropTypes.object.isRequired, layoutActions: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, } render() { let { editorActions, errSelectors, layoutSelectors, layoutActions, getComponent } = this.props const Collapse = getComponent("Collapse") if(editorActions && editorActions.jumpToLine) { var jumpToLine = editorActions.jumpToLine } let errors = errSelectors.allErrors() // all thrown errors, plus error-level everything else let allErrorsToDisplay = errors.filter(err => err.get("type") === "thrown" ? true :err.get("level") === "error") if(!allErrorsToDisplay || allErrorsToDisplay.count() < 1) { return null } let isVisible = layoutSelectors.isShown(["errorPane"], true) let toggleVisibility = () => layoutActions.show(["errorPane"], !isVisible) let sortedJSErrors = allErrorsToDisplay.sortBy(err => err.get("line")) return (
        

Errors

{ sortedJSErrors.map((err, i) => { let type = err.get("type") if(type === "thrown" || type === "auth") { return } if(type === "spec") { return } }) }
) } } const ThrownErrorItem = ( { error, jumpToLine } ) => { if(!error) { return null } let errorLine = error.get("line") return (
{ !error ? null :

{ (error.get("source") && error.get("level")) ? toTitleCase(error.get("source")) + " " + error.get("level") : "" } { error.get("path") ? at {error.get("path")}: null }

{ error.get("message") }
{ errorLine && jumpToLine ? Jump to line { errorLine } : null }
}
) } const SpecErrorItem = ( { error, jumpToLine = null } ) => { let locationMessage = null if(error.get("path")) { if(List.isList(error.get("path"))) { locationMessage = at { error.get("path").join(".") } } else { locationMessage = at { error.get("path") } } } else if(error.get("line") && !jumpToLine) { locationMessage = on line { error.get("line") } } return (
{ !error ? null :

{ toTitleCase(error.get("source")) + " " + error.get("level") } { locationMessage }

{ error.get("message") }
{ jumpToLine ? ( Jump to line { error.get("line") } ) : null }
}
) } function toTitleCase(str) { return (str || "") .split(" ") .map(substr => substr[0].toUpperCase() + substr.slice(1)) .join(" ") } ThrownErrorItem.propTypes = { error: PropTypes.object.isRequired, jumpToLine: PropTypes.func } SpecErrorItem.propTypes = { error: PropTypes.object.isRequired, jumpToLine: PropTypes.func }