putradnata

Edit Referral

Apr 11th, 2023
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 8.86 KB | Source Code | 0 0
  1. /* eslint-disable no-prototype-builtins */
  2. import { useEffect } from 'react'
  3. import { useState } from 'react'
  4. import { useNavigate, useParams } from 'react-router-dom'
  5. import { Field, Formik, Form, ErrorMessage } from 'formik'
  6. import _, { uniqueId } from 'lodash'
  7. import DashboardCard from '../../../components/dashboard/Card'
  8. import CustomCard from '../../../components/dashboard/CustomCard'
  9. import DashboardLayout from '../../../components/layout/Dashboard'
  10. import { PrivateAPI } from '../../../helpers/Connector'
  11.  
  12. import DashboardLoadingSpinner from '../../../components/dashboard/Loader'
  13. import EditRatesForm from './components/EditRatesForm'
  14.  
  15. export default function AdminEditVendorReferrals() {
  16.   const { id } = useParams()
  17.   const [validation, setValidation] = useState([])
  18.  
  19.   const [loading, setLoading] = useState(false)
  20.  
  21.   const [data, setData] = useState({
  22.     vendor: {},
  23.     ref_rate: []
  24.   })
  25.   const [packages, setPackages] = useState([])
  26.  
  27.   const initialValues = {
  28.     vendor:
  29.       data?.vendor?.vendor?.name_institution +
  30.       ' - ' +
  31.       data?.vendor?.vendor?.pic_name,
  32.     referral_code: data.vendor.referral_code,
  33.     ref_rate: _.mapValues(_.groupBy(data?.ref_rate, 'id_package'), (group) => {
  34.       return _.map(group, (item) => {
  35.         return _.omit(item, 'id_package')
  36.       })
  37.     })
  38.   }
  39.  
  40.   const SubmitHandler = (values) => {
  41.     console.log({ values })
  42.   }
  43.  
  44.   const getVendorDetail = async () => {
  45.     try {
  46.       const response = await PrivateAPI.get(`/admin/vendor/referral/${id}`)
  47.  
  48.       return response
  49.     } catch (error) {
  50.       return error
  51.     }
  52.   }
  53.  
  54.   const getPackages = async () => {
  55.     try {
  56.       const response = await PrivateAPI.get(
  57.         `/admin/package?q=&type=MEMBERSHIP&page=&per_page=`
  58.       )
  59.  
  60.       return response
  61.     } catch (error) {
  62.       return error
  63.     }
  64.   }
  65.  
  66.   const addRates = (rate) => {
  67.     let rates = [rate]
  68.     let _rates = [...rates]
  69.     _rates.push({
  70.       rate_indicator: '',
  71.       discount_rate: '',
  72.       comission_rate: ''
  73.     })
  74.   }
  75.  
  76.   useEffect(() => {
  77.     let subscribe = true
  78.  
  79.     const fetchData = async () => {
  80.       try {
  81.         setLoading(true)
  82.  
  83.         const vendor = await getVendorDetail()
  84.         const pkgs = await getPackages()
  85.  
  86.         let arr = []
  87.  
  88.         vendor.data.ref_rate.map((v) => {
  89.           arr.push({
  90.             id_package: v.pivot.id_package,
  91.             rate_indicator: v.pivot.rate_indicator,
  92.             discount_rate: v.pivot.discount_rate,
  93.             comission_rate: v.pivot.comission_rate
  94.           })
  95.         })
  96.  
  97.         if (subscribe) {
  98.           setData({
  99.             vendor: vendor.data,
  100.             ref_rate: arr
  101.           })
  102.  
  103.           setPackages(pkgs.data.data)
  104.         }
  105.       } catch (error) {
  106.         return error
  107.       } finally {
  108.         setLoading(false)
  109.       }
  110.     }
  111.  
  112.     fetchData()
  113.  
  114.     return () => {
  115.       subscribe = false
  116.     }
  117.   }, [])
  118.  
  119.   return (
  120.     <>
  121.       <DashboardLayout title="Update Referrals">
  122.         <section className="row">
  123.           <div className="col-md-12">
  124.             {loading ? (
  125.               <DashboardLoadingSpinner />
  126.             ) : (
  127.               <DashboardCard>
  128.                 {validation.message && (
  129.                   <div className="alert alert-danger">{validation.message}</div>
  130.                 )}
  131.                 <Formik
  132.                   initialValues={initialValues}
  133.                   enableReinitialize
  134.                   onSubmit={SubmitHandler}
  135.                 >
  136.                   {({ values }) => (
  137.                     <Form className="form">
  138.                       <div className="form-body">
  139.                         <fieldset className="fieldset">
  140.                           <legend className="legend">Vendor Details:</legend>
  141.                           <div className="row">
  142.                             <div className="col-md-2">
  143.                               <label>Vendor</label>
  144.                             </div>
  145.                             <div className="col-md-10 form-group">
  146.                               <Field
  147.                                 className="form-control"
  148.                                 name="vendor"
  149.                                 readOnly
  150.                                 disabled
  151.                               />
  152.                             </div>
  153.  
  154.                             <div className="col-md-2">
  155.                               <label>Referral Code</label>
  156.                             </div>
  157.                             <div className="col-md-10 form-group">
  158.                               <Field
  159.                                 className="form-control"
  160.                                 name="referral_code"
  161.                                 readOnly
  162.                                 disabled
  163.                               />
  164.                             </div>
  165.                           </div>
  166.                         </fieldset>
  167.  
  168.                         <fieldset className="fieldset">
  169.                           <legend className="legend">Package Rates</legend>
  170.                           <div className="package-container">
  171.                             {packages.map((pkg, index) => (
  172.                               <CustomCard key={pkg.id} title={pkg.package_name}>
  173.                                 {values.ref_rate.hasOwnProperty(pkg.id)
  174.                                   ? values.ref_rate[pkg.id].map((r, idx) => (
  175.                                       <EditRatesForm
  176.                                         key={uniqueId(`ref-rate-${index}-`)}
  177.                                       >
  178.                                         <div className="row">
  179.                                           <div className="col-md-12">
  180.                                             <button
  181.                                               type="button"
  182.                                               className="btn btn-primary"
  183.                                               onClick={() => addRates(r)}
  184.                                             >
  185.                                               Add
  186.                                             </button>
  187.                                           </div>
  188.                                           <div className="col-md-12 form-group">
  189.                                             <label>Rate Indicator</label>
  190.                                             <Field
  191.                                               className="form-control"
  192.                                               name={`ref_rate[${pkg.id}][${idx}].rate_indicator`}
  193.                                               disabled
  194.                                               readOnly
  195.                                             />
  196.                                           </div>
  197.  
  198.                                           <div className="col-md-12 form-group">
  199.                                             <label>Discount Rate</label>
  200.                                             <Field
  201.                                               className="form-control"
  202.                                               name={`ref_rate[${pkg.id}][${idx}].discount_rate`}
  203.                                             />
  204.                                           </div>
  205.  
  206.                                           <div className="col-md-12 form-group">
  207.                                             <label>Commission Rate</label>
  208.                                             <Field
  209.                                               className="form-control"
  210.                                               name={`ref_rate[${pkg.id}][${idx}].comission_rate`}
  211.                                             />
  212.                                           </div>
  213.  
  214.                                           <div className="col-md-12 form-group">
  215.                                             <hr
  216.                                               style={{ border: 'solid 1px' }}
  217.                                             />
  218.                                           </div>
  219.                                         </div>
  220.                                       </EditRatesForm>
  221.                                     ))
  222.                                   : 'not match'}
  223.                               </CustomCard>
  224.                             ))}
  225.                           </div>
  226.                         </fieldset>
  227.  
  228.                         <div className="col-sm-12 d-flex justify-content-end mt-3">
  229.                           <button
  230.                             type="submit"
  231.                             className="btn btn-primary me-1 mb-1"
  232.                           >
  233.                             Submit
  234.                           </button>
  235.                         </div>
  236.                       </div>
  237.                     </Form>
  238.                   )}
  239.                 </Formik>
  240.               </DashboardCard>
  241.             )}
  242.           </div>
  243.         </section>
  244.       </DashboardLayout>
  245.     </>
  246.   )
  247. }
  248.  
Advertisement
Add Comment
Please, Sign In to add comment