Proyectos de Subversion LeadersLinked - SPA

Rev

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

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