Skip to content
Snippets Groups Projects
PartnersInfo.tsx 5.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { useCallback, useContext, useEffect, useState } from 'react'
    import { IPartnersInfo } from '../../models/partnersInfo.model'
    import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'
    import './partnersInfo.scss'
    import { PartnersInfoService } from '../../services/partnersInfo.service'
    import { UserContext, UserContextProps } from '../../hooks/userContext'
    import Loader from '../Loader/Loader'
    import { CheckboxType } from '../../enum/checkboxType.enum'
    
    const PartnersInfo: React.FC = () => {
      const [refreshData, setRefreshData] = useState(false)
      const [isLoading, setIsLoading] = useState<boolean>(false)
      const [partnersInfo, setPartnersInfo] = useState<IPartnersInfo>({
        grdf_failure: false,
        enedis_failure: false,
        egl_failure: false,
        notification_activated: false,
      })
      const { user }: Partial<UserContextProps> = useContext(UserContext)
    
      const handleCheckboxChange = (value: boolean, type: CheckboxType): void => {
        switch (type) {
          case CheckboxType.GRDF:
            setPartnersInfo((prevPartnersInfo) => ({
              ...prevPartnersInfo,
              grdf_failure: value,
            }))
            break
          case CheckboxType.ENEDIS:
            setPartnersInfo((prevPartnersInfo) => ({
              ...prevPartnersInfo,
              enedis_failure: value,
            }))
            break
          case CheckboxType.EGL:
            setPartnersInfo((prevPartnersInfo) => ({
              ...prevPartnersInfo,
              egl_failure: value,
            }))
            break
          case CheckboxType.NOTIFICATION:
            setPartnersInfo((prevPartnersInfo) => ({
              ...prevPartnersInfo,
              notification_activated: value,
            }))
            break
          default:
            throw new Error('Unknown checkbox type')
        }
      }
    
      const handleCancel = useCallback(() => {
        setRefreshData(true)
      }, [setRefreshData])
    
      const resetFields = useCallback(() => {
        setPartnersInfo({
          grdf_failure: false,
          enedis_failure: false,
          egl_failure: false,
          notification_activated: false,
        })
      }, [setPartnersInfo])
    
      useEffect(() => {
        let subscribed = true
        resetFields()
        setIsLoading(true)
    
        async function getPartnersInfo() {
          if (user) {
            const partnersInfoService = new PartnersInfoService()
            const partnersInfoResp: IPartnersInfo | null =
              await partnersInfoService.getPartnersInfo()
            if (partnersInfoResp) {
              setPartnersInfo({
                grdf_failure: partnersInfoResp.grdf_failure,
                enedis_failure: partnersInfoResp.enedis_failure,
                egl_failure: partnersInfoResp.egl_failure,
                notification_activated: partnersInfoResp.notification_activated,
              })
            }
          }
          setIsLoading(false)
        }
        if (subscribed) {
          getPartnersInfo()
        }
        return () => {
          subscribed = false
          setRefreshData(false)
        }
      }, [user, refreshData, setPartnersInfo, resetFields])
    
      const handleSave = async (): Promise<void> => {
        if (user) {
          const partnersInfoService = new PartnersInfoService()
          await partnersInfoService.savePartnersInfo(partnersInfo, user.xsrftoken)
        }
      }
    
      return (
        <>
          {isLoading ? (
            <Loader />
          ) : (
            <div className="partnersInfo">
              <h2>État des services des partenaires</h2>
              <div>
    
                <p className="title">Affichage de la pop-up dans Ecolyo</p>
    
                <div className="switch_div">
                  Pop-up active
                  <input
                    type="checkbox"
                    id="switch_notification"
                    onChange={(event) => {
                      handleCheckboxChange(
                        event.currentTarget.checked,
                        CheckboxType.NOTIFICATION
                      )
                    }}
                    checked={partnersInfo.notification_activated}
                  />
                  <label htmlFor="switch_notification"></label>
                </div>
    
                <p className="title">Services concernés</p>
                <div className="switch_div">
                  Panne Enedis
                  <input
                    type="checkbox"
                    id="switch_enedis"
                    onChange={(event) => {
                      handleCheckboxChange(
                        event.currentTarget.checked,
                        CheckboxType.ENEDIS
                      )
                    }}
                    checked={partnersInfo.enedis_failure}
                  />
                  <label htmlFor="switch_enedis"></label>
                </div>
                <div className="switch_div">
                  Panne EGL
                  <input
                    type="checkbox"
                    id="switch_egl"
                    onChange={(event) => {
                      handleCheckboxChange(
                        event.currentTarget.checked,
                        CheckboxType.EGL
                      )
                    }}
                    checked={partnersInfo.egl_failure}
                  />
                  <label htmlFor="switch_egl"></label>
                </div>
                <div className="switch_div">
                  Panne GRDF
                  <input
                    type="checkbox"
                    id="switch_grdf"
                    onChange={(event) => {
                      handleCheckboxChange(
                        event.currentTarget.checked,
                        CheckboxType.GRDF
                      )
                    }}
                    checked={partnersInfo.grdf_failure}
                  />
                  <label htmlFor="switch_grdf"></label>
    
                </div>
                <div className="buttons">
                  <button className="btnCancel" onClick={handleCancel}>
                    Annuler
                  </button>
                  <button className="btnValid" onClick={handleSave}>
                    Sauvegarder
                  </button>
                </div>
              </div>
            </div>
          )}
        </>
      )
    }
    
    export default PartnersInfo