Example #1
0
 async function init() {
   const { results: modalVids, loadMoreButton: loadMoreShown } =
     modalType === 'change'
       ? await loadUploads({ type: 'video', limit: 18 })
       : await loadPlaylistVideos({
           playlistId,
           limit: 18
         });
   playlistVideoObjects.current = objectify(modalVids);
   if (modalType === 'change') {
     const { results } = await loadPlaylistVideos({
       playlistId,
       targetVideos: modalVids
     });
     initialSelectedVideos.current = results.map(video => video.id);
   } else {
     initialSelectedVideos.current = modalVids.map(video => video.id);
   }
   setModalVideos(modalVids.map(video => video.id));
   setSelectedVideos(initialSelectedVideos.current);
   setLoadMoreButton(loadMoreShown);
   setIsLoading(false);
 }
Example #2
0
  async function handleLoadMoreVideos() {
    setLoadingMore(true);
    if (!mainTabActive) {
      const {
        results: loadedVideos,
        loadMoreButton: removeVidsLoadMoreButton
      } = await loadPlaylistVideos({
        playlistId,
        limit: 18,
        shownVideos: loadedOrSearchedVideos.map(
          videoId => playlistVideoObjects.current[videoId]
        )
      });
      playlistVideoObjects.current = {
        ...playlistVideoObjects.current,
        ...objectify(loadedVideos)
      };
      for (let video of loadedVideos) {
        initialSelectedVideos.current = initialSelectedVideos.current
          .filter(videoId => videoId !== video.id)
          .concat(video.id);
        if (
          selectedVideos.indexOf(video.id) === -1 &&
          !removedVideoIds[video.id]
        ) {
          setSelectedVideos(selectedVideos => selectedVideos.concat(video.id));
        }
      }
      setLoadedOrSearchedVideos(loadedOrSearchedVideos =>
        loadedOrSearchedVideos.concat(
          loadedVideos
            .map(video => video.id)
            .filter(videoId => loadedOrSearchedVideos.indexOf(videoId) === -1)
        )
      );
      setRemoveVideosLoadMoreButton(removeVidsLoadMoreButton);
      setLoadingMore(false);
      return;
    }

    if (!stringIsEmpty(searchText)) {
      const {
        results: loadedVideos,
        loadMoreButton: searchContentLoadMoreButton
      } = await searchContent({
        filter: 'video',
        searchText,
        shownResults: searchedVideos.map(
          videoId => playlistVideoObjects.current[videoId]
        )
      });
      const { results: playlistVideos } = await loadPlaylistVideos({
        playlistId,
        targetVideos: loadedVideos
      });
      playlistVideoObjects.current = {
        ...playlistVideoObjects.current,
        ...objectify(loadedVideos)
      };
      setSearchedVideos(searchedVideos =>
        searchedVideos.concat(loadedVideos.map(video => video.id))
      );
      setSelectedVideos(selectedVideos =>
        selectedVideos.concat(
          playlistVideos
            .map(video => video.id)
            .filter(
              videoId =>
                selectedVideos.indexOf(videoId) === -1 &&
                !removedVideoIds[videoId]
            )
        )
      );
      setLoadingMore(false);
      setSearchLoadMoreButton(searchContentLoadMoreButton);
      return;
    }

    if (modalType === 'change') {
      const {
        results: loadedVideos,
        loadMoreButton: changeLoadMoreButton
      } = await loadUploads({
        type: 'video',
        limit: 18,
        contentId: modalVideos[modalVideos.length - 1]
      });
      const { results: playlistVideos } = await loadPlaylistVideos({
        playlistId,
        targetVideos: loadedVideos
      });
      playlistVideoObjects.current = {
        ...playlistVideoObjects.current,
        ...objectify(loadedVideos)
      };
      setModalVideos(
        modalVideos.concat(
          loadedVideos
            .map(video => video.id)
            .filter(videoId => modalVideos.indexOf(videoId) === -1)
        )
      );
      setSelectedVideos(selectedVideos =>
        selectedVideos.concat(
          playlistVideos
            .map(video => video.id)
            .filter(
              videoId =>
                selectedVideos.indexOf(videoId) === -1 &&
                !removedVideoIds[videoId]
            )
        )
      );
      setLoadingMore(false);
      setLoadMoreButton(changeLoadMoreButton);
      return;
    }

    const {
      results: loadedVideos,
      loadMoreButton: reorderLoadMoreButton
    } = await loadPlaylistVideos({
      playlistId,
      shownVideos: modalVideos.map(
        videoId => playlistVideoObjects.current[videoId]
      ),
      limit: 18
    });
    playlistVideoObjects.current = {
      ...playlistVideoObjects.current,
      ...objectify(loadedVideos)
    };
    for (let video of loadedVideos) {
      initialSelectedVideos.current = initialSelectedVideos.current
        .filter(videoId => videoId !== video.id)
        .concat(video.id);
      if (!removedVideoIds[video.id]) {
        setSelectedVideos(selectedVideos =>
          selectedVideos
            .filter(videoId => videoId !== video.id)
            .concat(video.id)
        );
      }
    }
    setModalVideos(
      modalVideos.concat(
        loadedVideos
          .map(video => video.id)
          .filter(videoId => modalVideos.indexOf(videoId) === -1)
      )
    );
    setLoadingMore(false);
    setLoadMoreButton(reorderLoadMoreButton);
  }