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