openreplay/frontend/app/components/Client/Sites/NewSiteForm.js
2021-09-07 18:43:34 +05:30

90 lines
No EOL
2.4 KiB
JavaScript

import { connect } from 'react-redux';
import { Input, Button, Label } from 'UI';
import { save, edit, update , fetchList } from 'Duck/site';
import { pushNewSite, setSiteId } from 'Duck/user';
import { withRouter } from 'react-router-dom';
import styles from './siteForm.css';
@connect(state => ({
site: state.getIn([ 'site', 'instance' ]),
sites: state.getIn([ 'site', 'list' ]),
siteList: state.getIn([ 'site', 'list' ]),
loading: state.getIn([ 'site', 'save', 'loading' ]),
}), {
save,
edit,
update,
pushNewSite,
fetchList,
setSiteId
})
@withRouter
export default class NewSiteForm extends React.PureComponent {
state = {
existsError: false,
}
onSubmit = e => {
e.preventDefault();
const { site, siteList, location: { pathname } } = this.props;
if (!site.exists() && siteList.some(({ name }) => name === site.name)) {
return this.setState({ existsError: true });
}
if (site.exists()) {
this.props.update(this.props.site, this.props.site.id).then(() => {
this.props.onClose(null)
this.props.fetchList();
})
} else {
this.props.save(this.props.site).then(() => {
const { sites } = this.props;
const site = sites.last();
this.props.pushNewSite(site)
if (!pathname.includes('/client')) {
this.props.setSiteId(site.id)
}
this.props.onClose(null, site)
});
}
}
edit = ({ target: { name, value } }) => {
this.setState({ existsError: false });
this.props.edit({ [ name ]: value });
}
render() {
const { site, loading } = this.props;
return (
<form className={ styles.formWrapper } onSubmit={ this.onSubmit }>
<div className={ styles.content }>
<div className={ styles.formGroup }>
<label>{ 'Name' }</label>
<Input
placeholder="Ex. openreplay"
name="name"
value={ site.name }
onChange={ this.edit }
className={ styles.input }
/>
</div>
<div className="mt-6">
<Button
primary
type="submit"
marginRight
loading={ loading }
content={site.exists() ? 'Update' : 'Add'}
/>
</div>
{ this.state.existsError &&
<div className={ styles.errorMessage }>
{ "Site exists already. Please choose another one." }
</div>
}
</div>
</form>
);
}
}