Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3387 | 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/Close';

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>
  );
}