From 5ce4fa1f445c3851ddfb24eb16e5dc6925c00499 Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Sat, 10 Dec 2016 16:33:49 -0300 Subject: [PATCH] Ivan - Add API call to add staff modal [skip ci] --- .../app/admin/panel/staff/add-staff-modal.js | 57 ++++++++++++++++++- client/src/data/fixtures/staff-fixtures.js | 13 ++++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/client/src/app/admin/panel/staff/add-staff-modal.js b/client/src/app/admin/panel/staff/add-staff-modal.js index 80d7fb65..defd85bd 100644 --- a/client/src/app/admin/panel/staff/add-staff-modal.js +++ b/client/src/app/admin/panel/staff/add-staff-modal.js @@ -1,20 +1,33 @@ import React from 'react'; +import _ from 'lodash'; import i18n from 'lib-app/i18n'; +import API from 'lib-app/api-call'; import SessionStore from 'lib-app/session-store'; 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 Button from 'core-components/button'; class AddStaffModal extends React.Component { + static contextTypes = { + closeModal: React.PropTypes.func + }; + + state = { + loading: false, + errors: {}, + error: null + }; + render() { return (
-
+ this.setState({errors})} loading={this.state.loading}>
@@ -37,17 +50,55 @@ class AddStaffModal extends React.Component { {i18n('SAVE')} +
); } getDepartments() { - return SessionStore.getDepartments().map((department) => department.name); + return SessionStore.getDepartments().map(department => department.name); } onSubmit(form) { - console.log(form); + let departments = _.filter(SessionStore.getDepartments(), (department, index) => { + return _.includes(form.departments, index); + }).map(department => department.id); + + this.setState({loading: true}); + + API.call({ + path: '/staff/add', + data: { + name: form.name, + email: form.email, + password: form.password, + level: form.level + 1, + department: JSON.stringify(departments) + } + }).then(this.context.closeModal).catch((result) => { + this.setState({ + loading: false, + error: result.message + }); + }); + } + + onCancelClick(event) { + event.preventDefault(); + this.context.closeModal(); + } + + getErrors() { + let errors = _.extend({}, this.state.errors); + + if (this.state.error === 'ALREADY_A_STAFF') { + errors.email = i18n('EMAIL_EXISTS'); + } + + return errors; } } diff --git a/client/src/data/fixtures/staff-fixtures.js b/client/src/data/fixtures/staff-fixtures.js index 73bbd707..b0180b7b 100644 --- a/client/src/data/fixtures/staff-fixtures.js +++ b/client/src/data/fixtures/staff-fixtures.js @@ -629,6 +629,17 @@ module.exports = [ ] }; } - + }, + { + path: '/staff/add', + time: 100, + response: function () { + return { + status: 'success', + data: { + staffId: 5 + } + }; + } } ]; \ No newline at end of file