|
@@ -0,0 +1,172 @@
|
|
|
+import React, { Component, Fragment } from "react";
|
|
|
+
|
|
|
+import "./adminPhotogalary.scss";
|
|
|
+import { form } from "../../state/photogalaryFormData";
|
|
|
+import Input from "../input/input";
|
|
|
+import Select from "../select/select";
|
|
|
+import Button from "../button/button";
|
|
|
+import Header from '../adminHeader/adminHeader';
|
|
|
+
|
|
|
+export default class PhotogalaryForm extends Component {
|
|
|
+
|
|
|
+ state = {
|
|
|
+ form,
|
|
|
+ validForm: false
|
|
|
+ }
|
|
|
+
|
|
|
+ validator = (rules, value) => {
|
|
|
+ const { requred, minL } = rules;
|
|
|
+
|
|
|
+ let valid = true;
|
|
|
+ if (requred) {
|
|
|
+ valid = value.trim() === "" && valid;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (minL) {
|
|
|
+ valid = value.trim().length < minL && valid;
|
|
|
+ }
|
|
|
+
|
|
|
+ return valid;
|
|
|
+ };
|
|
|
+
|
|
|
+ submit = e => {
|
|
|
+ e.preventDefault();
|
|
|
+
|
|
|
+ const values = Object.keys(this.state.form).reduce((prev, elem) => {
|
|
|
+ return { ...prev, [elem]: this.state.form[elem].value };
|
|
|
+ }, {});
|
|
|
+
|
|
|
+ this.props.submitHandler(values);
|
|
|
+ };
|
|
|
+
|
|
|
+ onChangeHandler = e => {
|
|
|
+ const { name, value, id } = e.target;
|
|
|
+
|
|
|
+ this.setState(prevState => {
|
|
|
+ const values = Object.keys(prevState.form).reduce((prev, elem) => {
|
|
|
+ if (elem === name) return prev.concat(value);
|
|
|
+ return prev.concat(prevState.form[elem].value);
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...prevState,
|
|
|
+ form: {
|
|
|
+ ...prevState.form,
|
|
|
+ [name]: {
|
|
|
+ ...prevState.form[name],
|
|
|
+ value,
|
|
|
+ touch: true,
|
|
|
+ // fail: this.validator(prevState.form[name].validation, value)
|
|
|
+ },
|
|
|
+ pictures: prevState.form.pictures.map(el => (el.id === +id ? { ...el, value } : el))
|
|
|
+ },
|
|
|
+ validForm: values.some(value => value)
|
|
|
+ };
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ addPicture = (e) => {
|
|
|
+ this.setState(prevState => ({
|
|
|
+ ...prevState,
|
|
|
+ form: {
|
|
|
+ ...prevState.form,
|
|
|
+ pictures: prevState.form.pictures.concat({
|
|
|
+ id: +Math.random()
|
|
|
+ .toString()
|
|
|
+ .substr(2, 100),
|
|
|
+ type: "input",
|
|
|
+ name: "pictures",
|
|
|
+ label: "Picture",
|
|
|
+ placeholder: 'Enter picture url',
|
|
|
+ value: ""
|
|
|
+ })
|
|
|
+ // ...prevState.form.pictures,
|
|
|
+ // value: prevState.form.pictures.value.concat(e.value)
|
|
|
+ // id: Math.random()
|
|
|
+ // .toString()
|
|
|
+ // .substr(2, 100),
|
|
|
+ // value: prevState.form.pictures.value.concat({
|
|
|
+ // id: Math.random()
|
|
|
+ // .toString()
|
|
|
+ // .substr(2, 100),
|
|
|
+ // url: ""
|
|
|
+ // )
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ };
|
|
|
+
|
|
|
+ render() {
|
|
|
+ const { form, validForm } = this.state;
|
|
|
+ console.log(this.state)
|
|
|
+
|
|
|
+ const { error } = this.props;
|
|
|
+ const disPictureAdd = form.pictures.every(el => el.value)
|
|
|
+ const disPictureRm = form.pictures.length === 1;
|
|
|
+
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ <Header />
|
|
|
+ <div className="photogalary-form">
|
|
|
+ <div className="photogalary-form__content">
|
|
|
+ <h2 className="photogalary-form__form-title">ADD EVENT PHOTOGALARY</h2>
|
|
|
+ <form onSubmit={this.submit} className="photogalary-form__photogalary-form">
|
|
|
+
|
|
|
+ <div className="photogalary-form__photogalary-form__selects">
|
|
|
+ {Object.keys(form.selects).map((input_name, index) => (
|
|
|
+ <Select
|
|
|
+ key={form.selects[input_name].id}
|
|
|
+ id={form.selects[input_name].id}
|
|
|
+ name={form.selects[input_name].name}
|
|
|
+ // value={form.selects[input_name].value}
|
|
|
+ fail={form.selects[input_name].fail}
|
|
|
+ touch={form.selects[input_name].touch}
|
|
|
+ label={form.selects[input_name].label}
|
|
|
+ placeholder={form.selects[input_name].placeholder}
|
|
|
+ onChange={this.onChangeHandler}
|
|
|
+ >
|
|
|
+ {form.selects[input_name].options.map(elem =>
|
|
|
+ <option key={elem} value={elem}> {elem} </option>)}
|
|
|
+
|
|
|
+ </Select>
|
|
|
+ )
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {form.pictures.map((el, i) => (
|
|
|
+ <div key={`${el.id}/${i}`}>
|
|
|
+
|
|
|
+ {console.log('elem', el)}
|
|
|
+ <Input
|
|
|
+ className = "photogalary-form__picture-input"
|
|
|
+ id={el.id}
|
|
|
+ name={el.name}
|
|
|
+ value={el.value}
|
|
|
+ label={el.label}
|
|
|
+ // key={form[input_name].id}
|
|
|
+ // id={form[input_name].id}
|
|
|
+ // name={form[input_name].name}
|
|
|
+ // value={el.url}
|
|
|
+ // fail={form[input_name].fail}
|
|
|
+ // touch={form[input_name].touch}
|
|
|
+ // label={form[input_name].label}
|
|
|
+ placeholder={el.placeholder}
|
|
|
+ onChange={this.onChangeHandler}
|
|
|
+ />
|
|
|
+
|
|
|
+ {/* {!disPictureRm && <Button text="-" onClick={rmHobby.bind(null, el.id)} />} */}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ <Button className="photogalary-form__picture-btn" text="Add Picture" onClick={this.addPicture} disabled={!disPictureAdd} />
|
|
|
+
|
|
|
+ {error && <p className="photogalary-form__error-photogalary-text">{error}</p>}
|
|
|
+ <div className="photogalary-form__control-box">
|
|
|
+ <Button disabled={!validForm} className="photogalary-form__submit-btn" type="submit" text="Add Photogalary" />
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|