openreplay/frontend/app/components/hocs/withRequest.js
Shekar Siri 0c0dd30a73
Preferences - UI and API improvements (#654)
* fix(tracker): fix assist typings

* fix(tracker): fix assist typings

* change(ui) - preferences - removed old

* change(ui) - preferences - wip

* change(ui) - preferences - list

* change(ui) - right box mardings

* change(ui) - preferences - integration item paddings

* change(ui) - preferences - integration icons

* change(ui) - preferences - integration icons

* change(ui) - preferences - integration - check status

* change(ui) - preferences - integration - check status

* change(ui) - preferences - metadata - move the delete button inside the modal

* change(ui) - preferences - webhooks - modal and delete btn changes

* change(ui) - preferences - modalContext updates

* change(ui) - input field forward refs

* change(ui) - metadata - modal

* change(ui) - metadata - set deleting item to null

* change(ui) - integrations

* change(ui) - hoc withcopy

* change(ui) - projects

* change(ui) - users list modal

* change(ui) - projects remove border for the last

* change(ui) - integrations new api changes

* change(ui) - github and jira changes

* change(ui) - github and jira changes

Co-authored-by: sylenien <nikita@openreplay.com>
2022-08-04 12:21:25 +02:00

67 lines
2.4 KiB
JavaScript

import React from 'react';
import APIClient from 'App/api_client';
export default ({
initialData = null,
endpoint = '',
method = 'GET',
requestName = 'request',
loadingName = 'loading',
errorName = 'requestError',
dataName = 'data',
dataWrapper = (data) => data,
loadOnInitialize = false,
resetBeforeRequest = false, // Probably use handler?
}) =>
(BaseComponent) =>
class extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
data: typeof initialData === 'function' ? initialData(props) : initialData,
loading: loadOnInitialize,
error: false,
};
if (loadOnInitialize) {
this.request();
}
}
request = (params, edpParams) => {
this.setState({
loading: true,
error: false,
data: resetBeforeRequest ? (typeof initialData === 'function' ? initialData(this.props) : initialData) : this.state.data,
});
const edp = typeof endpoint === 'function' ? endpoint(this.props, edpParams) : endpoint;
return new APIClient()
[method.toLowerCase()](edp, params)
.then((response) => response.json())
.then(({ errors, data }) => {
if (errors) {
return this.setError();
}
this.setState({
data: dataWrapper(data, this.state.data),
loading: false,
});
})
.catch(this.setError);
};
setError = () =>
this.setState({
loading: false,
error: true,
});
render() {
const ownProps = {
[requestName]: this.request,
[loadingName]: this.state.loading,
[dataName]: this.state.data,
[errorName]: this.state.error,
};
return <BaseComponent {...this.props} {...ownProps} />;
}
};