Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useEffect, useRef, useState } from 'react'
import { useDispatch } from 'react-redux'
import { Backdrop, IconButton } from '@mui/material'
import { Close } from '@mui/icons-material'

import { useHabitsUrls } from '@hooks'
import { useDailyLogCategories } from './use-daily-log-categories'
import { savePreferences } from '@services/habits/daily-log'
import { addNotification } from '@store/notification/notification.actions'

import Widget from '@components/UI/Widget'
import DailyLogForm from './daily-log-form'
import DailyMediaContent from './daily-media-content'

export default function DailyLog() {
  const [show, setShow] = useState(false)
  const [dailyMediaContent, setDailyMediaContent] = useState(null)
  const mediaRef = useRef(null)
  const dispatch = useDispatch()

  const { selectEmoji, categories } = useDailyLogCategories()
  const { links } = useHabitsUrls()

  const allCategoriesSelected =
    categories.length && categories.every((cat) => cat.selected)

  const saveDailyLog = async (log) => {
    try {
      const mediaResponse = await savePreferences(
        links.link_aspect_daily_log,
        log
      )

      mediaResponse.link ? setDailyMediaContent(mediaResponse) : setShow(false)
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }))
    }
  }

  useEffect(() => {
    if (!allCategoriesSelected) setShow(true)
  }, [allCategoriesSelected])

  useEffect(() => {
    if (!show && !mediaRef.current?.paused) setDailyMediaContent(null)
  }, [show, mediaRef.current, setDailyMediaContent])

  return (
    <Backdrop sx={{ color: '#fff', zIndex: 1250 }} open={show}>
      <Widget styles={{ maxWidth: '800px' }}>
        <Widget.Header
          renderAction={() =>
            dailyMediaContent ? (
              <IconButton onClick={() => setShow(false)}>
                <Close />
              </IconButton>
            ) : null
          }
        />
        <Widget.Body>
          {dailyMediaContent ? (
            <DailyMediaContent
              type={dailyMediaContent.type}
              mediaUrl={dailyMediaContent.link}
              ref={mediaRef}
            />
          ) : (
            <DailyLogForm
              categories={categories}
              onSelect={selectEmoji}
              onSubmit={saveDailyLog}
            />
          )}
        </Widget.Body>
      </Widget>
    </Backdrop>
  )
}