{allowThumbnailUpload &&
}
- {showThumbnail && !thumbnailError ? (
+ {showThumbnail && !thumbnailError && pageLoadStatus === RequestStatus.SUCCESSFUL ? (
VideoThumbnail({ ...props, handleAddThumbnail, videoImageSettings });
+ const thumbnailPreview = (props) => VideoThumbnail({
+ ...props,
+ pageLoadStatus: loadingStatus,
+ handleAddThumbnail,
+ videoImageSettings,
+ });
const infoModalSidebar = (video, activeTab, setActiveTab) => (
VideoInfoModalSidebar({ video, activeTab, setActiveTab })
);
@@ -128,7 +133,7 @@ const VideosPage = ({
id: 'activeStatus',
Header: 'Active',
accessor: 'activeStatus',
- Cell: ({ row }) => ActiveColumn({ row }),
+ Cell: ({ row }) => ActiveColumn({ row, pageLoadStatus: loadingStatus }),
Filter: CheckboxFilter,
filter: 'exactTextCase',
filterChoices: [
@@ -147,7 +152,7 @@ const VideosPage = ({
};
const processingStatusColumn = {
id: 'status',
- Header: '',
+ Header: 'Status',
accessor: 'status',
Cell: ({ row }) => StatusColumn({ row }),
Filter: CheckboxFilter,
diff --git a/src/files-and-videos/videos-page/data/api.js b/src/files-and-videos/videos-page/data/api.js
index 58bae471f..a7137679f 100644
--- a/src/files-and-videos/videos-page/data/api.js
+++ b/src/files-and-videos/videos-page/data/api.js
@@ -31,6 +31,21 @@ export async function getVideos(courseId) {
};
}
+export async function getAllUsagePaths({ courseId, videos, updateModel }) {
+ const apiPromises = videos.map(video => getAuthenticatedHttpClient()
+ .get(`${getVideosUrl(courseId)}/${video.id}/usage`, { videoId: video.id }));
+ const results = await Promise.allSettled(apiPromises);
+ results.forEach(result => {
+ const data = camelCaseObject(result.value.data);
+ const { videoId } = result.value.config;
+ if (data) {
+ updateModel(data, videoId);
+ } else {
+ updateModel({ usageLocation: [] }, videoId);
+ }
+ });
+}
+
/**
* Fetches the course custom pages for provided course
* @param {string} courseId
diff --git a/src/files-and-videos/videos-page/data/thunks.js b/src/files-and-videos/videos-page/data/thunks.js
index 3066e4025..570f18270 100644
--- a/src/files-and-videos/videos-page/data/thunks.js
+++ b/src/files-and-videos/videos-page/data/thunks.js
@@ -21,6 +21,7 @@ import {
deleteTranscriptPreferences,
setTranscriptCredentials,
setTranscriptPreferences,
+ getAllUsagePaths,
} from './api';
import {
setVideoIds,
@@ -37,8 +38,7 @@ import {
import { updateFileValues } from './utils';
-async function fetchUsageLocation(videoId, dispatch, courseId, isLast) {
- const { usageLocations } = await getVideoUsagePaths({ videoId, courseId });
+function updateUsageLocation(videoId, dispatch, usageLocations) {
const activeStatus = usageLocations?.length > 0 ? 'active' : 'inactive';
dispatch(updateModel({
@@ -49,9 +49,6 @@ async function fetchUsageLocation(videoId, dispatch, courseId, isLast) {
activeStatus,
},
}));
- if (isLast) {
- dispatch(updateLoadingStatus({ courseId, status: RequestStatus.SUCCESSFUL }));
- }
}
export function fetchVideos(courseId) {
@@ -72,10 +69,13 @@ export function fetchVideos(courseId) {
dispatch(setVideoIds({
videoIds: parsedVideos.map(video => video.id),
}));
- parsedVideos.forEach(async (video, indx) => {
- const isLast = parsedVideos.length - 1 === indx;
- fetchUsageLocation(video.id, dispatch, courseId, isLast);
+ dispatch(updateLoadingStatus({ courseId, status: RequestStatus.PARTIAL }));
+ await getAllUsagePaths({
+ courseId,
+ videos: parsedVideos,
+ updateModel: (apiData, videoId) => updateUsageLocation(videoId, dispatch, apiData.usageLocations),
});
+ dispatch(updateLoadingStatus({ courseId, status: RequestStatus.SUCCESSFUL }));
}
} catch (error) {
if (error.response && error.response.status === 403) {
diff --git a/src/files-and-videos/videos-page/data/utils.js b/src/files-and-videos/videos-page/data/utils.js
index 4fcd247c8..149c2bfc6 100644
--- a/src/files-and-videos/videos-page/data/utils.js
+++ b/src/files-and-videos/videos-page/data/utils.js
@@ -7,8 +7,6 @@ import {
MAX_WIDTH,
MIN_HEIGHT,
MIN_WIDTH,
- VIDEO_PROCESSING_STATUSES,
- VIDEO_SUCCESS_STATUSES,
} from './constants';
ensureConfig([
@@ -23,7 +21,6 @@ export const updateFileValues = (files, isNewFile) => {
clientVideoId,
created,
courseVideoImageUrl,
- status,
transcripts,
} = file;
@@ -42,13 +39,6 @@ export const updateFileValues = (files, isNewFile) => {
}
const transcriptStatus = transcripts?.length > 0 ? 'transcribed' : 'notTranscribed';
- let uploadStatus = status;
- if (VIDEO_SUCCESS_STATUSES.includes(status)) {
- uploadStatus = 'Success';
- } else if (VIDEO_PROCESSING_STATUSES.includes(status)) {
- uploadStatus = 'Processing';
- }
-
updatedFiles.push({
...file,
displayName: clientVideoId,
@@ -56,7 +46,6 @@ export const updateFileValues = (files, isNewFile) => {
wrapperType,
dateAdded: created.toString(),
usageLocations: isNewFile ? [] : null,
- status: uploadStatus,
thumbnail,
transcriptStatus,
activeStatus: 'inactive',