diff --git a/assets/js/components/ApplyModal.jsx b/assets/js/components/ApplyModal.jsx index e061da2afeb1a456a3abbe9fa0878d925776b1bb..871614e13a76e76c62e2acb1e8164d605047fb6a 100644 --- a/assets/js/components/ApplyModal.jsx +++ b/assets/js/components/ApplyModal.jsx @@ -1,13 +1,14 @@ import React from 'react'; import { Icon, Modal, Button, TextArea, Form } from 'semantic-ui-react'; import ModalAlert from './../components/ModalAlert'; +import Server from './../lib/Server'; export default class ApplyModal extends React.Component { static propTypes = { data: React.PropTypes.object.isRequired, active: React.PropTypes.bool.isRequired, buttonTitle: React.PropTypes.string.isRequired, - apply: React.PropTypes.func.isRequired, + studentId: React.PropTypes.number.isRequired, }; constructor(props) { @@ -36,12 +37,15 @@ export default class ApplyModal extends React.Component { }); handleApply = () => { - this.load(); - this.props.apply(); + this.setState({ load: true }); + const requestData = { vacancy_id: this.props.data.id, cover_letter: this.state.coverLetter }; + Server.post(`/students/${this.props.studentId}/applied-vacancies/`, requestData).then(() => { + this.modalAlert.open('Pendaftaran Berhasil', 'Pendaftaran anda berhasil direkam. Harap menunggu kabar selanjutnya dari pihak yang terkait\n', this.handleClose); + this.setState({ status: 'registered' }); + }, () => this.modalAlert.open('Pendaftaran Gagal', 'Maaf pendaftaran yang anda lakukan gagal. Harap ulangi pendaftaran atau hubungi administrator\n', this.handleClose), + ); }; - load = () => this.setState({ load: true }); - render = () => ( <Modal trigger={<Button primary onClick={this.handleOpen} floated="right">{this.props.buttonTitle}</Button>} diff --git a/assets/js/components/ApproveModal.jsx b/assets/js/components/ApproveModal.jsx index b69799ee7e9ddb26fde083df8f89b947f260829b..f775e6c687f347c7b0db8309d92aca9b5e7a1c11 100644 --- a/assets/js/components/ApproveModal.jsx +++ b/assets/js/components/ApproveModal.jsx @@ -24,7 +24,7 @@ export default class ApproveModal extends React.Component { } handleOpen = () => this.setState({ modalOpen: true }); - handleClose = () => this.readApplication() && this.setState({ modalOpen: false }); + handleClose = () => { this.readApplication(); this.setState({ modalOpen: false }); } readApplication = () => { const data = { status: Applicant.APPLICATION_STATUS.READ }; diff --git a/assets/js/components/CompanyRegisterModal.jsx b/assets/js/components/CompanyRegisterModal.jsx index 7f1a6b2257a400819382b345c715775d5bb5541e..e2bd6aba6f4fea393dffa98e89d15278319f6286 100644 --- a/assets/js/components/CompanyRegisterModal.jsx +++ b/assets/js/components/CompanyRegisterModal.jsx @@ -11,6 +11,7 @@ export default class CompanyRegisterModal extends React.Component { super(props); /* istanbul ignore next */ this.handleChange = this.handleChange.bind(this); + this.handleFile = this.handleFile.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } @@ -18,6 +19,11 @@ export default class CompanyRegisterModal extends React.Component { this.setState({ [e.target.name]: e.target.value }); }; + handleFile = (e) => { + this.setState({ [e.target.name]: e.target.files[0] }); + console.log(e.target.files[0]); + }; + handlePassword = (e) => { if (e.target.name === 'password') this.passwordField = e.target; else @@ -34,7 +40,7 @@ export default class CompanyRegisterModal extends React.Component { handleSubmit = (e) => { e.preventDefault(); - + console.log(this.state); Server.submit('/register/', this.state).then((response) => { Storage.set('user-data', response); browserHistory.push('/home'); @@ -81,7 +87,7 @@ export default class CompanyRegisterModal extends React.Component { <Form.Field required> <label htmlFor="logo">Logo</label> <Input - onChange={this.handleChange} + onChange={this.handleFile} name="logo" icon={{ name: 'attach', circular: true, link: true }} placeholder="attach logo" diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index 6dc9576e5313262dc32bb3685b826f240b651745..830aafa1bd4348c8675e1f1ed85656a94c0d0b6c 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -65,22 +65,12 @@ export default class Vacancy extends React.Component { ); } - apply = () => { - const requestData = { vacancy_id: this.props.data.id, cover_letter: this.state.coverLetter }; - - Server.post(`/students/${this.props.studentId}/applied-vacancies/`, requestData).then(() => { - this.modalAlert.open('Pendaftaran Berhasil', 'Pendaftaran anda berhasil direkam. Harap menunggu kabar selanjutnya dari pihak yang terkait\n', this.handleClose); - this.setState({ status: 'registered' }); - }, () => this.modalAlert.open('Pendaftaran Gagal', 'Maaf pendaftaran yang anda lakukan gagal. Harap ulangi pendaftaran atau hubungi administrator\n', this.handleClose), - ); - }; - generateAction() { const applyModal = (<ApplyModal active={this.state.status === 'new'} - data={{ header: this.props.data.name, description: this.props.data.description }} + data={{ header: this.props.data.name, description: this.props.data.description, id: this.props.data.id }} buttonTitle="Detail" - apply={this.apply} + studentId={this.props.studentId} />); const cancelButton = <Button loading={this.state.deleteLoading} floated="right" color="red" onClick={this.openConfirmationModal}>Batal</Button>; diff --git a/assets/js/components/VacancyList.jsx b/assets/js/components/VacancyList.jsx index e7765ed3372d8beb43dacab61e7558851b22fda7..49e837bb3c64a46a6e16e99d78e3bdaf2978c1f5 100644 --- a/assets/js/components/VacancyList.jsx +++ b/assets/js/components/VacancyList.jsx @@ -1,11 +1,10 @@ import React from 'react'; -import { Item, Button, Grid } from 'semantic-ui-react'; +import { Item, Button, Grid, Loader } from 'semantic-ui-react'; import { Link } from 'react-router'; import Vacancy from './Vacancy'; import CompanyVacancy from './CompanyVacancy'; import Server from '../lib/Server'; import ModalAlert from '../components/ModalAlert'; -import Aplicant from './../components/Applicant'; export default class VacancyList extends React.Component { @@ -25,7 +24,7 @@ export default class VacancyList extends React.Component { constructor(props) { super(props); /* istanbul ignore next */ - this.state = { vacancies: [], bookmarkList: [], appliedList: [] }; + this.state = { vacancies: [], bookmarkList: [], appliedList: [], loading: true }; this.updateStatusList = this.updateStatusList.bind(this); this.generateVacancies = this.generateVacancies.bind(this); this.checkBookmark = this.checkBookmark.bind(this); @@ -34,7 +33,7 @@ export default class VacancyList extends React.Component { if (this.props.type === 'student') { this.updateStatusList(); } else Server.get(this.props.url, false).then((data) => { - this.setState({ vacancies: data }); + this.setState({ vacancies: data, loading: false }); }); } @@ -58,7 +57,7 @@ export default class VacancyList extends React.Component { }).then(() => Server.get(`/students/${this.props.userId}/applied-vacancies/`, false).then((data) => { this.setState({ appliedList: data }); })).then(() => Server.get(this.props.url, false).then((data) => { - this.setState({ vacancies: data }); + this.setState({ vacancies: data, loading: false }); })); } @@ -111,6 +110,7 @@ export default class VacancyList extends React.Component { render = () => ( <div> + <Loader active={this.state.loading} /> <ModalAlert ref={(modal) => { this.modalAlert = modal; }} /> <Grid container columns="eleven" doubling> { this.companyHeader() }