Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3358 | Rev 3368 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useEffect } from 'react'
import { Controller, useForm } from 'react-hook-form'
import { Box, Typography } from '@mui/material'

import EmojiGroup from '@components/common/emoji-selector'

const EMOJI_PICKERS_POSITIONS = [
  { column: { xs: '1 / 3', md: '2 / 3' }, row: 'auto' },
  { column: { xs: '1 / 2', md: '2 / 3' }, row: '3 / 4' },
  { column: { xs: '2 / 3', md: '2 / 3' }, row: '3 / 4' }
]

export default function DailyLogForm({ categories, onSubmit, onSelect }) {
  const { control, watch, handleSubmit } = useForm()
  const formValues = watch()

  const submitHandler = handleSubmit(async (data) => onSubmit(data))

  useEffect(() => {
    const categoriesSelectedValues = Object.values(formValues)
    const areAllCategoriesSelected = categoriesSelectedValues.every(
      (val) => val !== undefined
    )

    if (categoriesSelectedValues.length && areAllCategoriesSelected) {
      submitHandler()
    }
  }, [formValues])

  return (
    <Box
      component='form'
      sx={{
        display: 'grid',
        gridTemplateColumns: { xs: 'repeat(2,1fr)', md: 'repeat(3,1fr)' },
        gridTemplateRows: 'repeat(3,1fr)',
        columnGap: '1rem',
        placeItems: 'center'
      }}
    >
      {categories?.map(({ uuid, name, emojis }, index) => (
        <Box
          key={uuid}
          sx={{
            gridColumn: EMOJI_PICKERS_POSITIONS[index].column,
            gridRow: EMOJI_PICKERS_POSITIONS[index].row
          }}
        >
          <Typography variant='h2' textAlign='center'>
            {name}
          </Typography>

          <Controller
            control={control}
            name={uuid}
            render={({ field: { onChange } }) => (
              <EmojiGroup>
                {emojis?.map(({ code, image }, index) => (
                  <EmojiGroup.Item
                    key={code}
                    image={image}
                    index={index}
                    onClick={(e) => {
                      e.stopPropagation()
                      onSelect(uuid, code)
                      onChange(code)
                    }}
                  />
                ))}
              </EmojiGroup>
            )}
          />
        </Box>
      ))}

      <Box
        sx={{
          gridColumn: { xs: '1 / 3', md: '2 / 3' },
          gridRow: '2 / 3'
        }}
      >
        <img
          src='/images/logo-app-02.png'
          alt='habits image'
          width={150}
          height={150}
        />
      </Box>
    </Box>
  )
}