insomnia/app/ui/components/modals/request-render-error-modal.js
Gregory Schier 2cdd4761c8 Remaining V5 Features (#122)
* Add digest auth and response timeline

* Some css fixes

* Fixed Button

* More auth methods, fixed URL regex, and fix gzip

* Get rid of negotiate auth

* Fix proxy

* Fixed GA tracking

* Some very small changes and fixes

* Fix content type names

* Even better auth switching and timeline syntax

* Some auth tweaks

* CSS tweaks

* Reworked toasts

* Fixed timer rounding quirk

* Request settings and render errors

* Fixed tests

* Vertical dragging and stuff

* Remove beta
2017-03-28 15:45:23 -07:00

100 lines
2.6 KiB
JavaScript

import React, {PureComponent} from 'react';
import autobind from 'autobind-decorator';
import jq from 'jsonpath';
import RequestSettingsModal from '../modals/request-settings-modal';
import Modal from '../base/modal';
import ModalBody from '../base/modal-body';
import ModalHeader from '../base/modal-header';
import {showModal} from './index';
import Link from '../base/link';
@autobind
class RequestRenderErrorModal extends PureComponent {
constructor (props) {
super(props);
this.state = {
error: null
};
}
_setModalRef (n) {
this.modal = n;
}
_handleShowRequestSettings () {
this.hide();
showModal(RequestSettingsModal, this.state.request);
}
show ({request, error}) {
this.modal.show();
this.setState({request, error});
}
hide () {
this.modal.hide();
}
renderModalBody (request, error) {
const fullPath = `Request.${error.path}`;
const result = jq.query(request, `$.${error.path}`);
const template = (result && result.length) ? result[0] : null;
const locationLabel = template.includes('\n')
? `line ${error.location.line} of`
: null;
return (
<div className="pad">
<div className="notice warning">
<p>
Failed to render <strong>{fullPath}</strong> prior to sending
</p>
<div className="pad-top-sm">
{error.path.match(/^body/) ? (
<button className="btn btn--clicky margin-right-sm"
onClick={this._handleShowRequestSettings}>
Adjust Render Settings
</button>
) : null}
<Link button
href="https://insomnia.rest/documentation/templating/"
className="btn btn--clicky">
Templating Documentation <i className="fa fa-external-link"/>
</Link>
</div>
</div>
<p>
<strong>Render error</strong>
<code className="block selectable">{error.message}</code>
</p>
<p>
<strong>Caused by the following field</strong>
<code className="block">
{locationLabel} {fullPath}
</code>
</p>
</div>
)
;
}
render () {
const {request, error} = this.state;
return (
<Modal ref={this._setModalRef} freshState>
<ModalHeader>Failed to Render Request</ModalHeader>
<ModalBody>
{(request && error) ? this.renderModalBody(request, error) : null}
</ModalBody>
</Modal>
);
}
}
RequestRenderErrorModal.propTypes = {};
export default RequestRenderErrorModal;