Advertisement
ahmadandika

Untitled

Sep 2nd, 2019
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* eslint-disable array-callback-return */
  2. /* eslint-disable no-restricted-syntax */
  3. /* eslint-disable guard-for-in */
  4. import React, { lazy, Suspense } from 'react';
  5. import { Field, reduxForm, change } from 'redux-form';
  6. import { connect } from 'react-redux';
  7. import moment from 'moment';
  8. import { Translate } from 'react-localize-redux';
  9. import { renderField, required, checkField } from '../../../components/Field';
  10. import ButtonLoader from '../../../components/ButtonLoader';
  11. import {
  12.   createData,
  13.   updateData,
  14.   detailData
  15. } from '../../../actions/news.action';
  16. import PageLoader from '../../../components/PageLoader';
  17. import ButtonCancel from '../../../components/ButtonCancel';
  18. import { titleForm } from '../../../helpers/propHelper';
  19. import FieldDropzone from '../../../components/dropzone/FieldDropzone';
  20. import FieldDropzoneMultiple from '../../../components/dropzone/FieldDropzoneMultiple';
  21. import ExpertiseField from '../../../components/checkbox/ExpertiseField';
  22. // import TinyMce from '../../../components/wysiwyg/TinyMce';
  23.  
  24. const FieldTinyMce = lazy(() =>
  25.   import('../../../components/wysiwyg/FieldTinyMce')
  26. );
  27.  
  28. class NewsForm extends React.Component {
  29.   constructor(props) {
  30.     super(props);
  31.     this.state = {
  32.       deleteImageIds: []
  33.     };
  34.     this.onSubmit = this.onSubmit.bind(this);
  35.   }
  36.  
  37.   componentDidMount() {
  38.     const { match, detailData } = this.props;
  39.     const isEdit = match.params.id !== undefined;
  40.     if (isEdit) {
  41.       const ids = match.params.id;
  42.       detailData(ids);
  43.     }
  44.   }
  45.  
  46.   componentWillReceiveProps(nextProps) {
  47.     const { data, dispatch, match } = this.props;
  48.     const isEdit = match.params.id !== undefined;
  49.     if (isEdit) {
  50.       const initInput = ['title', 'content', 'cover_image'];
  51.       if (data.dataDetail !== nextProps.data.dataDetail) {
  52.         initInput.map(data => {
  53.           dispatch(change('newsForm', data, nextProps.data.dataDetail[data]));
  54.         });
  55.  
  56.         if (nextProps.data.dataDetail.expertises) {
  57.           const arr = [];
  58.           nextProps.data.dataDetail.expertises.map(data => {
  59.             arr.push(data.id);
  60.           });
  61.           dispatch(change('newsForm', 'expertises', arr));
  62.         }
  63.  
  64.         if (nextProps.data.dataDetail.images) {
  65.           const arrImg = [];
  66.           nextProps.data.dataDetail.images.map(data => {
  67.             arrImg.push({
  68.               preview: data.images,
  69.               id: data.id,
  70.               name: `${moment(data.created_at.date).unix()}${data.id}`
  71.             });
  72.           });
  73.           dispatch(change('newsForm', 'images', arrImg));
  74.         }
  75.       }
  76.     }
  77.   }
  78.  
  79.   onSubmit(value) {
  80.     const { createData, updateData, match } = this.props;
  81.     const { deleteImageIds } = this.state;
  82.     const isEdit = match.params.id !== undefined;
  83.     const formData = new FormData();
  84.     const formImage = ['cover_image'];
  85.     const formArray = ['expertises', 'images'];
  86.     for (const key in value) {
  87.       if (formImage.includes(key)) {
  88.         if (typeof value.cover_image === 'object') {
  89.           formData.append(
  90.             'cover_image',
  91.             value.cover_image,
  92.             `_${Date.now()}${value.cover_image.name}`
  93.           );
  94.         }
  95.       } else if (formArray.includes(key)) {
  96.         if (key === 'expertises') {
  97.           value[key].map(val => {
  98.             formData.append('expertises[]', val);
  99.           });
  100.         }
  101.         if (key === 'images') {
  102.           value[key].map(val => {
  103.             formData.append('images[]', val);
  104.           });
  105.         }
  106.       } else {
  107.         formData.append(key, value[key]);
  108.       }
  109.     }
  110.  
  111.     // formData.append('publish', value.publish ? 1 : 0);
  112.     if (isEdit) {
  113.       if (deleteImageIds.length > 0) {
  114.         deleteImageIds.map(val => {
  115.           formData.append('delete_image_id[]', val);
  116.         });
  117.       }
  118.  
  119.       updateData(formData, match.params.id);
  120.     } else {
  121.       createData(formData);
  122.     }
  123.   }
  124.  
  125.   onDelete = deleteImageId => {
  126.     if (deleteImageId) {
  127.       this.setState(state => {
  128.         const deleteImageIds = [...state.deleteImageIds, deleteImageId];
  129.         return {
  130.           deleteImageIds
  131.         };
  132.       });
  133.     }
  134.   };
  135.  
  136.   render() {
  137.     const { handleSubmit, data, current, match } = this.props;
  138.     const isEdit = match.params.id !== undefined;
  139.     const title = titleForm(this.props);
  140.  
  141.     return (
  142.       <div className="card-body">
  143.         <div className="row mb-3">
  144.           <div className="col-md-6">
  145.             <h2 className="card-title font-weight-bold mb-0 text-uppercase">
  146.               {title}
  147.             </h2>
  148.           </div>
  149.         </div>
  150.         {data.isLoadingDetail ? (
  151.           <PageLoader />
  152.         ) : (
  153.           current && (
  154.             <form
  155.               className="forms-sample"
  156.               onSubmit={handleSubmit(this.onSubmit)}
  157.             >
  158.               <Translate>
  159.                 {({ translate }) => (
  160.                   <div className="row">
  161.                     <div className="col-md-6">
  162.                       <Field
  163.                         name="title"
  164.                         requiredStar
  165.                         type="text"
  166.                         component={renderField}
  167.                         label={translate('title')}
  168.                         id="inputTitle"
  169.                         placeholder={translate('enter_title')}
  170.                         validate={[required]}
  171.                       />
  172.                       <Suspense fallback="">
  173.                         <FieldTinyMce />
  174.                       </Suspense>
  175.                       {isEdit ? (
  176.                         <Field
  177.                           name="cover_image"
  178.                           type="text"
  179.                           label={translate('cover_image')}
  180.                           component={FieldDropzone}
  181.                         />
  182.                       ) : (
  183.                         <Field
  184.                           name="cover_image"
  185.                           type="text"
  186.                           requiredStar
  187.                           label={translate('cover_image')}
  188.                           component={FieldDropzone}
  189.                           validate={[required]}
  190.                         />
  191.                       )}
  192.                     </div>
  193.                     <div className="col-md-6">
  194.                       <ExpertiseField companyId={current.company.id} />
  195.                       <Field
  196.                         name="images"
  197.                         type="text"
  198.                         onDelete={this.onDelete}
  199.                         label={translate('slider_image')}
  200.                         component={FieldDropzoneMultiple}
  201.                       />
  202.                       {/* {!isEdit && (
  203.                     <Field
  204.                       name="publish"
  205.                       type="checkbox"
  206.                       component={checkField}
  207.                       label="Publish"
  208.                       id="inputPublish"
  209.                     />
  210.                   )} */}
  211.                     </div>
  212.                     <div className="col-md-12">
  213.                       <div className="d-flex">
  214.                         <ButtonCancel />
  215.                         <ButtonLoader
  216.                           type="submit"
  217.                           className="btn btn-primary mr-2"
  218.                           loader={data.isLoading}
  219.                         >
  220.                           <Translate id="submit" />
  221.                         </ButtonLoader>
  222.                       </div>
  223.                     </div>
  224.                   </div>
  225.                 )}
  226.               </Translate>
  227.             </form>
  228.           )
  229.         )}
  230.       </div>
  231.     );
  232.   }
  233. }
  234.  
  235. const mapStateToProps = state => ({
  236.   data: state.news,
  237.   current: state.user.current
  238. });
  239.  
  240. export default reduxForm({
  241.   form: 'newsForm' // a unique identifier for this form
  242. })(
  243.   connect(
  244.     mapStateToProps,
  245.     { createData, updateData, detailData }
  246.   )(NewsForm)
  247. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement