Playlist

Widok playlisty, umożliwia zmianę tekstów przy pomocy nawigacji na dole widoku lub za pomocą gestu przesuwania.

Playlist.js
import React, { useEffect, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { ViewWrapper } from 'components/atoms/ViewWrapper/ViewWrapper';
import { ContentContext } from 'providers/ContentProvider';
import { Wrapper, TextTitle, Text, StyledCategory } from './Playlist.styles';
import { usePinching } from 'hooks/usePinching';
import { PlaylistContext } from 'providers/PlaylistProvider';
import { getAnimationProps } from 'helpers/getAnimationProps';
import { useSwipe } from 'hooks/useSwipe';
import PlaylistNavigation from 'components/molecules/PlaylistNavigation/PlaylistNavigation';
import Navigation from 'components/organisms/Navigation/Navigation';

const createContent = (content) => {
  return { __html: content };
};

const Playlist = () => {
  const { getPlaylistCategory, fontSize } = useContext(ContentContext);
  const { pinchingStart, pinchingMove, pinchingEnd } = usePinching();
  const { swipeStart, swipeMove, swipeEnd } = useSwipe();
  const { initial, animate, trasition, exit } = getAnimationProps();
  const { playlist, currentSongIndex, animation, setCurrentSongIndex } =
    useContext(PlaylistContext);
  const navigate = useNavigate();

  useEffect(() => {
    if (!playlist.length) navigate('/');
    setCurrentSongIndex(0);
    // eslint-disable-next-line
  }, [playlist]);

  return (
    <>
      {playlist.length ? (
        <ViewWrapper
          initial={initial}
          animate={animate}
          transition={trasition}
          exit={exit}
        >
          <Navigation type={'Teksty teraz'} noSearchLink={true} />
          <StyledCategory animationName={animation}>
            <p>
              {getPlaylistCategory(
                playlist[currentSongIndex].type,
                playlist[currentSongIndex].category_id
              )}
            </p>
          </StyledCategory>
          <Wrapper
            fontSize={fontSize}
            onTouchStart={(e) => {
              pinchingStart(e);
              swipeStart(e);
            }}
            onTouchMove={(e) => {
              pinchingMove(e);
              swipeMove(e);
            }}
            onTouchEnd={(e) => {
              pinchingEnd(e);
              swipeEnd(e);
            }}
          >
            <TextTitle animationName={animation}>
              {playlist[currentSongIndex].name}
            </TextTitle>
            <Text
              animationName={animation}
              dangerouslySetInnerHTML={createContent(playlist[currentSongIndex].content)}
            />
          </Wrapper>
          <PlaylistNavigation />
        </ViewWrapper>
      ) : null}
    </>
  );
};

export default Playlist;

Last updated