Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3719 | | Comparar con el anterior | Ultima modificación | Ver Log |

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