Skip to content
Snippets Groups Projects
useForm.tsx 1.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Q, QueryDefinition, useQuery } from 'cozy-client'
    import { QueryOptions } from 'cozy-client/types/types'
    import { FORM_DOCTYPE } from 'doctypes'
    import { SgeStep } from 'enums'
    import { AccountGRDFData, SgeStore } from 'models'
    
    export type QueryParams = (arg?: any) => {
      definition: QueryDefinition
      options: QueryOptions
    }
    
    interface FormData {
      firstName: string
      lastName: string
    
      pdl: string
      pce: string
      zipCode: string
      city: string
      address: string
    }
    
    const getFormData: QueryParams = () => ({
      definition: Q(FORM_DOCTYPE),
      options: { as: 'form' },
    })
    
    /** Returns the form data from the form doctype */
    export const useFormData = () => {
      const { definition, options } = getFormData()
      // eslint-disable-next-line prefer-const
      let { data, lastError, fetchStatus } = useQuery(definition, options)
    
      if (data === null) {
        data = []
      }
    
      const formData = data as [FormData]
    
      return {
        formData: formData[0],
        isFetching: fetchStatus === 'loading',
        lastError,
      }
    }
    
    export const createInitialSgeState = (formData?: FormData): SgeStore => ({
      address: formData?.address ?? '',
      lastName: formData?.lastName ?? '',
      firstName: formData?.firstName ?? '',
      pdl: formData?.pdl ? parseInt(formData.pdl) : null,
      zipCode: formData?.zipCode ? parseInt(formData.zipCode) : null,
      city: formData?.city ?? '',
      currentStep: SgeStep.Address,
      dataConsent: false,
      pdlConfirm: false,
      shouldLaunchAccount: false,
    })
    
    export const createInitialGrdfState = (
      formData?: FormData
    ): AccountGRDFData => ({
      lastname: formData?.lastName ?? '',
      firstname: formData?.firstName ?? '',
    
      email: formData?.email ?? '',
    
      pce: formData?.pce ?? '',
      postalCode: formData?.zipCode ?? '',
    })