Ivan - Add check ticket page [skip ci]
This commit is contained in:
parent
4119509cc4
commit
ec18363058
|
@ -66,8 +66,8 @@ export default (
|
||||||
<Route path='maintenance' component={MainMaintenancePage}/>
|
<Route path='maintenance' component={MainMaintenancePage}/>
|
||||||
|
|
||||||
<Route path='create-ticket' component={DashboardCreateTicketPage}/>
|
<Route path='create-ticket' component={DashboardCreateTicketPage}/>
|
||||||
<Route path='check-ticket' component={MainCheckTicketPage}/>
|
<Route path='check-ticket(/:ticketNumber/:email)' component={MainCheckTicketPage}/>
|
||||||
<Route path='ticket/:ticketNumber/:email' component={DashboardTicketPage}/>
|
<Route path='ticket/:email/:ticketNumber' component={DashboardTicketPage}/>
|
||||||
<Route path='articles' component={DashboardListArticlesPage}/>
|
<Route path='articles' component={DashboardListArticlesPage}/>
|
||||||
|
|
||||||
<Route path='dashboard' component={DashboardLayout}>
|
<Route path='dashboard' component={DashboardLayout}>
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React from 'react';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import ReCAPTCHA from 'react-google-recaptcha';
|
import ReCAPTCHA from 'react-google-recaptcha';
|
||||||
import { browserHistory } from 'react-router';
|
import { browserHistory } from 'react-router';
|
||||||
import RichTextEditor from 'react-rte-browserify';
|
import RichTextEditor from 'react-rte-browserify';
|
||||||
|
|
||||||
import i18n from 'lib-app/i18n';
|
import i18n from 'lib-app/i18n';
|
||||||
import API from 'lib-app/api-call';
|
import API from 'lib-app/api-call';
|
||||||
|
@ -123,11 +123,11 @@ class CreateTicketForm extends React.Component {
|
||||||
captcha: captcha && captcha.getValue(),
|
captcha: captcha && captcha.getValue(),
|
||||||
departmentId: SessionStore.getDepartments()[formState.departmentIndex].id
|
departmentId: SessionStore.getDepartments()[formState.departmentIndex].id
|
||||||
})
|
})
|
||||||
}).then(this.onTicketSuccess.bind(this)).catch(this.onTicketFail.bind(this));
|
}).then(this.onTicketSuccess.bind(this, formState.email)).catch(this.onTicketFail.bind(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onTicketSuccess() {
|
onTicketSuccess(email, result) {
|
||||||
this.setState({
|
this.setState({
|
||||||
loading: false,
|
loading: false,
|
||||||
message: 'success'
|
message: 'success'
|
||||||
|
@ -136,6 +136,8 @@ class CreateTicketForm extends React.Component {
|
||||||
if(this.props.userLogged) {
|
if(this.props.userLogged) {
|
||||||
store.dispatch(SessionActions.getUserData());
|
store.dispatch(SessionActions.getUserData());
|
||||||
setTimeout(() => {browserHistory.push('/dashboard')}, 2000);
|
setTimeout(() => {browserHistory.push('/dashboard')}, 2000);
|
||||||
|
} else {
|
||||||
|
setTimeout(() => {browserHistory.push('/check-ticket/' + email + '/' + result.data.ticketNumber)}, 2000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,94 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { browserHistory } from 'react-router';
|
||||||
|
|
||||||
|
import i18n from 'lib-app/i18n';
|
||||||
|
import API from 'lib-app/api-call';
|
||||||
|
import SessionStore from 'lib-app/session-store';
|
||||||
|
|
||||||
|
import Widget from 'core-components/widget';
|
||||||
|
import Header from 'core-components/header';
|
||||||
|
import Form from 'core-components/form';
|
||||||
|
import FormField from 'core-components/form-field';
|
||||||
|
import SubmitButton from 'core-components/submit-button';
|
||||||
|
import Captcha from 'app/main/captcha';
|
||||||
|
|
||||||
class MainCheckTicketPage extends React.Component {
|
class MainCheckTicketPage extends React.Component {
|
||||||
|
|
||||||
|
state = {
|
||||||
|
loading: false,
|
||||||
|
form: {
|
||||||
|
email: this.props.params.email || '',
|
||||||
|
ticketNumber: this.props.params.ticketNumber || ''
|
||||||
|
},
|
||||||
|
errors: {}
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="main-check-ticket-page">
|
<div className="main-check-ticket-page">
|
||||||
|
<Widget>
|
||||||
|
<Header title={i18n('CHECK_TICKET')} description={i18n('CHECK_TICKET_DESCRIPTION')} />
|
||||||
|
<Form {...this.getFormProps()}>
|
||||||
|
<div className="main-check-ticket-page__inputs">
|
||||||
|
<div className="main-check-ticket-page__input">
|
||||||
|
<FormField name="email" label={i18n('EMAIL')} validation="EMAIL" required fieldProps={{size: 'large'}}/>
|
||||||
|
</div>
|
||||||
|
<div className="main-check-ticket-page__input">
|
||||||
|
<FormField name="ticketNumber" label={i18n('TICKET_NUMBER')} validation="DEFAULT" required fieldProps={{size: 'large'}}/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="main-check-ticket-page__captcha">
|
||||||
|
<Captcha ref="captcha"/>
|
||||||
|
</div>
|
||||||
|
<SubmitButton>{i18n('CHECK_TICKET')}</SubmitButton>
|
||||||
|
</Form>
|
||||||
|
</Widget>
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getFormProps() {
|
||||||
|
return {
|
||||||
|
className: 'main-check-ticket-page__form',
|
||||||
|
loading: this.state.loading,
|
||||||
|
values: this.state.form,
|
||||||
|
errors: this.state.errors,
|
||||||
|
onChange: (form) => this.setState({form}),
|
||||||
|
onValidateErrors: (errors) => this.setState({errors}),
|
||||||
|
onSubmit: this.onFormSubmit.bind(this)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
onFormSubmit(form) {
|
||||||
|
const captcha = this.refs.captcha.getWrappedInstance();
|
||||||
|
|
||||||
|
if (!captcha.getValue()) {
|
||||||
|
captcha.focus();
|
||||||
|
} else {
|
||||||
|
this.setState({
|
||||||
|
loading: true
|
||||||
|
});
|
||||||
|
|
||||||
|
API.call({
|
||||||
|
path: '/ticket/get',
|
||||||
|
data: {
|
||||||
|
captcha: captcha && captcha.getValue(),
|
||||||
|
ticketNumber: form.ticketNumber,
|
||||||
|
email: form.email
|
||||||
|
}
|
||||||
|
}).then(this.onTicketGetSuccess.bind(this)).catch(() => this.setState({
|
||||||
|
loading: false,
|
||||||
|
errors: {
|
||||||
|
email: i18n('INVALID_EMAIL_OR_TICKET_NUMBER'),
|
||||||
|
ticketNumber: i18n('INVALID_EMAIL_OR_TICKET_NUMBER')
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onTicketGetSuccess(result) {
|
||||||
|
SessionStore.setItem('token', result.data.token);
|
||||||
|
setTimeout(() => {browserHistory.push('/view-ticket/' + this.state.form.email + '/' + this.state.form.ticketNumber)}, 2000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
.main-check-ticket-page {
|
||||||
|
padding: 0 15px;
|
||||||
|
|
||||||
|
&__form {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 790px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__inputs {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__input {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__captcha {
|
||||||
|
margin: 20px auto 20px;
|
||||||
|
height: 78px;
|
||||||
|
width: 304px;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue