Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3386 stevensc 1
import React, { useEffect, useRef, useState } from 'react'
3358 stevensc 2
import { useDispatch } from 'react-redux'
3368 stevensc 3
import { Backdrop, IconButton } from '@mui/material'
4
import { Close } from '@mui/icons-material'
3358 stevensc 5
 
6
import { useHabitsUrls } from '@hooks'
7
import { useDailyLogCategories } from './use-daily-log-categories'
8
import { savePreferences } from '@services/habits/daily-log'
9
import { addNotification } from '@store/notification/notification.actions'
10
 
11
import Widget from '@components/UI/Widget'
12
import DailyLogForm from './daily-log-form'
3367 stevensc 13
import DailyMediaContent from './daily-media-content'
3358 stevensc 14
 
15
export default function DailyLog() {
16
  const [show, setShow] = useState(false)
17
  const [dailyMediaContent, setDailyMediaContent] = useState(null)
3386 stevensc 18
  const mediaRef = useRef(null)
3358 stevensc 19
  const dispatch = useDispatch()
20
 
21
  const { selectEmoji, categories } = useDailyLogCategories()
22
  const { links } = useHabitsUrls()
23
 
24
  const allCategoriesSelected =
25
    categories.length && categories.every((cat) => cat.selected)
26
 
27
  const saveDailyLog = async (log) => {
28
    try {
29
      const mediaResponse = await savePreferences(
30
        links.link_aspect_daily_log,
31
        log
32
      )
3368 stevensc 33
 
34
      mediaResponse.link ? setDailyMediaContent(mediaResponse) : setShow(false)
3358 stevensc 35
    } catch (error) {
36
      dispatch(addNotification({ style: 'danger', msg: error.message }))
37
    }
38
  }
39
 
40
  useEffect(() => {
41
    if (!allCategoriesSelected) setShow(true)
42
  }, [allCategoriesSelected])
43
 
3386 stevensc 44
  useEffect(() => {
3387 stevensc 45
    if (!show && !mediaRef.current?.paused) setDailyMediaContent(null)
3386 stevensc 46
  }, [show, mediaRef.current, setDailyMediaContent])
47
 
3358 stevensc 48
  return (
49
    <Backdrop sx={{ color: '#fff', zIndex: 1250 }} open={show}>
50
      <Widget styles={{ maxWidth: '800px' }}>
3368 stevensc 51
        <Widget.Header
52
          renderAction={() =>
53
            dailyMediaContent ? (
54
              <IconButton onClick={() => setShow(false)}>
55
                <Close />
56
              </IconButton>
57
            ) : null
58
          }
59
        />
3358 stevensc 60
        <Widget.Body>
61
          {dailyMediaContent ? (
3368 stevensc 62
            <DailyMediaContent
63
              type={dailyMediaContent.type}
64
              mediaUrl={dailyMediaContent.link}
3386 stevensc 65
              ref={mediaRef}
3368 stevensc 66
            />
3358 stevensc 67
          ) : (
68
            <DailyLogForm
69
              categories={categories}
70
              onSelect={selectEmoji}
71
              onSubmit={saveDailyLog}
72
            />
73
          )}
74
        </Widget.Body>
75
      </Widget>
76
    </Backdrop>
77
  )
78
}