Advertisement
Guest User

components/Product/CreateProduct/index.js

a guest
Feb 20th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useEffect } from 'react';
  2. import Container from '@material-ui/core/Container';
  3. import { makeStyles } from '@material-ui/core/styles';
  4. import Stepper from '@material-ui/core/Stepper';
  5. import Step from '@material-ui/core/Step';
  6. import StepLabel from '@material-ui/core/StepLabel';
  7. import Button from '@material-ui/core/Button';
  8. import Typography from '@material-ui/core/Typography';
  9. import { withSnackbar } from 'notistack';
  10. import PropTypes from 'prop-types';
  11. import { ProductProvider } from './ProductContext';
  12. import SelectItems from './SelectItems';
  13. import Form from './Form';
  14.  
  15. import defaultImage from 'assets/img/image_placeholder.jpg';
  16. import defaultAvatar from 'assets/img/placeholder.jpg';
  17.  
  18. const useStyles = makeStyles(theme => ({
  19.   root: {
  20.     width: '100%'
  21.   },
  22.   backButton: {
  23.     marginRight: theme.spacing(1)
  24.   },
  25.   instructions: {
  26.     marginTop: theme.spacing(1),
  27.     marginBottom: theme.spacing(1)
  28.   }
  29. }));
  30.  
  31. function getSteps() {
  32.   return ['Informações do produto', 'Customize o produto'];
  33. }
  34.  
  35. function getStepContent(stepIndex) {
  36.   switch (stepIndex) {
  37.     case 0:
  38.       return <Form />;
  39.     case 1:
  40.       return <SelectItems />;
  41.     default:
  42.       return 'Unknown stepIndex';
  43.   }
  44. }
  45.  
  46. // eslint-disable-next-line no-unused-vars
  47. const CreateProductPage = props => {
  48.   // eslint-disable-next-line no-unused-vars
  49.   const [avatar, setAvatar] = useState(null);
  50.   const [imageFile, setImageFile] = useState(null);
  51.   const [imagePreviewUrl, setImagePreviewUrl] = useState(null);
  52.   const [imageNotChanged, setImageChange] = useState(true);
  53.   const [imageRemoved, setImageRemoved] = useState(false);
  54.   const [items, setItems] = useState([]);
  55.  
  56.   const state = {
  57.     items,
  58.     avatar,
  59.     imageFile,
  60.     imagePreviewUrl,
  61.     imageNotChanged,
  62.     imageRemoved
  63.   };
  64.  
  65.   const [activeStep, setActiveStep] = useState(0);
  66.   const steps = getSteps();
  67.   const classes = useStyles();
  68.  
  69.   const handleNext = () => {
  70.     setActiveStep(prevActiveStep => prevActiveStep + 1);
  71.   };
  72.  
  73.   const handleBack = () => {
  74.     setActiveStep(prevActiveStep => prevActiveStep - 1);
  75.   };
  76.  
  77.   const handleReset = () => {
  78.     setActiveStep(0);
  79.   };
  80.  
  81.   useEffect(() => {
  82.     const previewImage = avatar ? defaultAvatar : defaultImage;
  83.     setImagePreviewUrl(previewImage);
  84.   }, []);
  85.  
  86.   const handleImageChange = imageFile => {
  87.     setImageChange(true);
  88.     setImageRemoved(false);
  89.     setImageFile(imageFile);
  90.   };
  91.  
  92.   const handleRemove = () => {
  93.     setImageFile(null);
  94.     setImagePreviewUrl(defaultImage);
  95.     setImageChange(false);
  96.     setImageRemoved(true);
  97.   };
  98.  
  99.   return (
  100.     <>
  101.       <Container maxWidth="xl">
  102.         <div className={classes.root}>
  103.           <Stepper activeStep={activeStep} alternativeLabel>
  104.             {steps.map(label => (
  105.               <Step key={label}>
  106.                 <StepLabel>{label}</StepLabel>
  107.               </Step>
  108.             ))}
  109.           </Stepper>
  110.  
  111.           <div>
  112.             {activeStep === steps.length ? (
  113.               <div>
  114.                 <Typography className={classes.instructions}>
  115.                   All steps completed
  116.                 </Typography>
  117.                 <Button onClick={handleReset}>Reset</Button>
  118.               </div>
  119.             ) : (
  120.               <div>
  121.                 <Typography className={classes.instructions}>
  122.                   <ProductProvider
  123.                     value={{
  124.                       ...state,
  125.                       handleImageChange,
  126.                       handleRemove,
  127.                       setImagePreviewUrl,
  128.                       setItems
  129.                     }}
  130.                   >
  131.                     {getStepContent(activeStep)}
  132.                   </ProductProvider>
  133.                 </Typography>
  134.                 <div>
  135.                   <Button
  136.                     disabled={activeStep === 0}
  137.                     onClick={handleBack}
  138.                     className={classes.backButton}
  139.                   >
  140.                     Back
  141.                   </Button>
  142.                   <Button
  143.                     variant="contained"
  144.                     color="primary"
  145.                     onClick={handleNext}
  146.                   >
  147.                     {activeStep === steps.length - 1 ? 'Finish' : 'Next'}
  148.                   </Button>
  149.                 </div>
  150.               </div>
  151.             )}
  152.           </div>
  153.         </div>
  154.       </Container>
  155.     </>
  156.   );
  157. };
  158.  
  159. CreateProductPage.propTypes = {
  160.   enqueueSnackbar: PropTypes.func.isRequired
  161. };
  162.  
  163. export default withSnackbar(CreateProductPage);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement