insomnia/packages/insomnia-app/app/ui/components/modals/request-render-error-modal.js
Gregory Schier 549ce23ce8
Merge All Repositories into Monorepo for easier maintenance (#629)
* All projects into monorepo

* Update CI

* More CI updates

* Extracted a bunch of things into packages

* Publish

 - insomnia-plugin-base64@1.0.1
 - insomnia-plugin-default-headers@1.0.2
 - insomnia-plugin-file@1.0.1
 - insomnia-plugin-hash@1.0.1
 - insomnia-plugin-now@1.0.1
 - insomnia-plugin-request@1.0.1
 - insomnia-plugin-response@1.0.1
 - insomnia-plugin-uuid@1.0.1
 - insomnia-cookies@0.0.2
 - insomnia-importers@1.5.2
 - insomnia-prettify@0.0.3
 - insomnia-url@0.0.2
 - insomnia-xpath@0.0.2

* A bunch of small fixes

* Improved build script

* Fixed

* Merge dangling files

* Usability refactor

* Handle duplicate plugin names
2017-11-26 20:45:40 +00: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, {request: this.state.request});
}
show ({request, error}) {
this.setState({request, error});
this.modal.show();
}
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 && 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>
)}
<Link button
href="https://support.insomnia.rest/article/40-template-tags"
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;