Advertisement
Shell_Casing

complex-shit

Mar 20th, 2021
1,097
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useContext, useEffect, useState } from 'react';
  2. import { useDispatch } from "react-redux";
  3. import Container from '@material-ui/core/Container';
  4. import Button from '@material-ui/core/Button';
  5. import IconButton from '@material-ui/core/IconButton';
  6. import RemoveIcon from '@material-ui/icons/Remove';
  7. import AddIcon from '@material-ui/icons/Add';
  8. import { useStyles } from "./create-table/dynamic-create-table/styles";
  9. import { HiveContext } from "../../../context/hive";
  10. import validateInputField from "../../../utils/validate-input-field";
  11. import { setAlertAction } from "../../../store/actions/alertsActions";
  12. import classes from "../hbase/hbase.module.css";
  13.  
  14. export const DropPartitionEnhanced = () => {
  15.  
  16.     const styles = useStyles();
  17.  
  18.     const dispatch = useDispatch();
  19.  
  20.     const operators = [ '=', '<', '>', '<=', '>=' ];
  21.  
  22.     const caseTypes = ['operator', 'range'];
  23.  
  24.     const [color, setColor] = useState('secondary');
  25.  
  26.     const {
  27.         caseType,
  28.         operator,
  29.         setCaseType,
  30.         setOperator,
  31.         endIsChecked,
  32.         startIsChecked,
  33.         setEndIsChecked,
  34.         setStartIsChecked,
  35.         setPartitionColsName
  36.     } = useContext(HiveContext);
  37.  
  38.     const [inputFields, setInputFields] = useState([
  39.         { name: '', value: '' },
  40.     ]);
  41.  
  42.     const handleSubmit = (e) => {
  43.         e.preventDefault();
  44.         setColor('primary');
  45.         setPartitionColsName([...inputFields]);
  46.     };
  47.  
  48.     const handleChangeInput = (index, event) => {
  49.         const values = [...inputFields];
  50.         values[index][event.target.name] = event.target.value;
  51.         if(!validateInputField(event.target.value)) {
  52.             dispatch(setAlertAction('error', 'Inappropriate input value!', 5000));
  53.             return false;
  54.         } else {
  55.             setInputFields(values);
  56.         }
  57.     };
  58.  
  59.     const handleAddFields = () => {
  60.         setInputFields([...inputFields, { name: '', value: '', case: '', operator }]);
  61.     };
  62.  
  63.     const handleRemoveFields = (index) => {
  64.         const values  = [...inputFields];
  65.         values.splice(index, 1);
  66.         setInputFields(values);
  67.     };
  68.  
  69.     const casesRadioDots = (
  70.         <div className={`mt-5`}>
  71.             <label className={`${classes.label}`}>
  72.                 <span className="text-gray-500">Case type</span>
  73.             </label>
  74.             <div className={`${classes.flexInlineRadios} `}>
  75.                 {
  76.                     caseTypes.map(thingy => (
  77.                         <label className={`${classes.label}`}>
  78.                             <input type="radio" name="casesRadioDots" value={thingy} onChange={ event => setCaseType(event.target.value) } />
  79.                             <p className={'ml-0.5'}>{ thingy }</p>
  80.                         </label>
  81.                     ))
  82.                 }
  83.             </div>
  84.         </div>
  85.     );
  86.  
  87.     const operatorsDropdown = (
  88.         <div className={`${classes.formContainer} my-5`}>
  89.  
  90.             <div className={`${classes.topRowInputs}`}>
  91.  
  92.                 <div className={`${classes.formGroup} mt-5 w-25`}>
  93.  
  94.                     <select value={ operator }
  95.                             onChange={ event => setOperator(event.target.value) }
  96.                             className="py-8"
  97.                     >
  98.                         <option value="">Operator</option>
  99.                         {
  100.                             operators.map((value, index) => (
  101.                                 <option key={ index } value={value?.toLowerCase()}>{ value }</option>
  102.                             ))
  103.                         }
  104.                     </select>
  105.                 </div>
  106.             </div>
  107.         </div>
  108.     );
  109.  
  110.     useEffect(() => setCaseType('operator'), []);
  111.  
  112.     return (
  113.         <Container>
  114.             <form onSubmit={handleSubmit}>
  115.  
  116.                 { inputFields.map((inputField, index) => {
  117.  
  118.                         return (
  119.                             <div >
  120.  
  121.                                 {
  122.                                     caseType === 'operator' && (
  123.                                         <div>
  124.                                             { casesRadioDots }
  125.  
  126.                                             <input
  127.                                                 name="name"
  128.                                                 placeholder="name"
  129.                                                 value={inputField.name}
  130.                                                 onChange={ event => handleChangeInput(index, event) }
  131.                                             />
  132.  
  133.                                             { operatorsDropdown }
  134.  
  135.                                             <input
  136.                                                 name="value"
  137.                                                 placeholder="value"
  138.                                                 value={inputField.value}
  139.                                                 onChange={event => handleChangeInput(index, event)}
  140.                                             />
  141.                                         </div>
  142.                                     )
  143.                                 }
  144.                                 {
  145.                                     caseType === 'range' && (
  146.                                         <div>
  147.                                             { casesRadioDots }
  148.                                             <div>
  149.                                                 <input
  150.                                                     name="name"
  151.                                                     placeholder="name"
  152.                                                     value={inputField.name}
  153.                                                     onChange={ event => handleChangeInput(index, event) }
  154.                                                 />
  155.                                                 <input type="checkbox"
  156.                                                        checked={ startIsChecked }
  157.                                                        onChange={ event => setStartIsChecked(event.target.checked) }
  158.                                                        className={`mr-2`}
  159.                                                 />
  160.                                             </div>
  161.  
  162.                                             <div>
  163.                                                 <input
  164.                                                     name="value"
  165.                                                     placeholder="value"
  166.                                                     value={inputField.value}
  167.                                                     onChange={ event => handleChangeInput(index, event) }
  168.                                                 />
  169.                                                 <input type="checkbox"
  170.                                                        checked={ endIsChecked }
  171.                                                        onChange={ event => setEndIsChecked(event.target.checked) }
  172.                                                        className={`mr-2`}
  173.                                                 />
  174.                                             </div>
  175.  
  176.                                         </div>
  177.                                     )
  178.                                 }
  179.                                 <IconButton onClick={() => handleRemoveFields(index)} >
  180.                                     <RemoveIcon color="primary" />
  181.                                 </IconButton>
  182.                                 <IconButton onClick={() => handleAddFields()} >
  183.                                     <AddIcon color="secondary" />
  184.                                 </IconButton>
  185.                             </div>
  186.                         )
  187.                 })  }
  188.                 <Button
  189.                     type="submit"
  190.                     onClick={handleSubmit}
  191.                     className={styles.button}
  192.                     variant="contained"
  193.                     color={ color }
  194.                 >
  195.                     CONFIRM PARTITION_COL INPUTS
  196.                 </Button>
  197.             </form>
  198.         </Container>
  199.     );
  200.  
  201. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement