From c0100a427756c46f308951826827ca78e263a450 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 26 Nov 2025 16:24:58 -0800 Subject: [PATCH] Improve upload progress on android due to null asset IDs. --- redux/photos/photos.reducer.js | 10 +++++----- redux/photos/photos.sagas.js | 7 ++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/redux/photos/photos.reducer.js b/redux/photos/photos.reducer.js index 9efb44e..78fbb0c 100644 --- a/redux/photos/photos.reducer.js +++ b/redux/photos/photos.reducer.js @@ -32,14 +32,14 @@ const photosReducer = (state = INITIAL_STATE, action) => { case PhotosActionTypes.MEDIA_UPLOAD_PROGRESS_UPDATE_ONE: return { ...state, - progress: { ...state.progress, [action.payload.assetId]: { ...state.progress[action.payload.assetId], ...action.payload } } + progress: { ...state.progress, [action.payload.assetId || action.payload.fileName]: { ...state.progress[action.payload.assetId || action.payload.fileName], ...action.payload } } }; case PhotosActionTypes.MEDIA_UPLOAD_SUCCESS_ONE: - const { [action.payload.assetId]: _, ...remainingTasks } = state.cancelTasks; + const { [action.payload.assetId || action.payload.fileName]: _, ...remainingTasks } = state.cancelTasks; return { ...state, - progress: { ...state.progress, [action.payload.assetId]: { ...state.progress[action.payload.assetId], progress: 1, status: 'completed', endTime: new Date() } }, + progress: { ...state.progress, [action.payload.assetId || action.payload.fileName]: { ...state.progress[action.payload.assetId || action.payload.fileName], progress: 1, status: 'completed', endTime: new Date() } }, cancelTasks: remainingTasks }; case PhotosActionTypes.MEDIA_UPLOAD_PROGRESS_UPDATE_BULK: @@ -69,11 +69,11 @@ const photosReducer = (state = INITIAL_STATE, action) => { ...state, cancelTasks: { ...state.cancelTasks, - [action.payload.assetId]: action.payload.cancelTask, + [action.payload.assetId || action.payload.fileName]: action.payload.cancelTask, }, }; case PhotosActionTypes.REMOVE_UPLOAD_CANCEL_TASK: - const { [action.payload.assetId]: _2, ...remainingTasks2 } = state.cancelTasks; //2 added for scoped variable conflict. + const { [action.payload.assetId || action.payload.fileName]: _2, ...remainingTasks2 } = state.cancelTasks; //2 added for scoped variable conflict. return { ...state, cancelTasks: remainingTasks2, diff --git a/redux/photos/photos.sagas.js b/redux/photos/photos.sagas.js index f8f5f11..8beecf6 100644 --- a/redux/photos/photos.sagas.js +++ b/redux/photos/photos.sagas.js @@ -85,7 +85,12 @@ export function* openImagePickerAction({ payload: jobid }) { exif: true, }); if (!(result.canceled)) { - yield put(mediaUploadStart({ photos: result.assets, jobid, progress: _.keyBy(result.assets, 'assetId') })); + yield put(mediaUploadStart({ + photos: result.assets, jobid, progress: _.keyBy(result.assets, (item) => { + // If item.id is null or undefined, use a fallback string like 'no_id' + return item.assetId === null || item.assetId === undefined || item.assetId === "" ? item.fileName : item.assetId; + }) + })); } } catch (error) { console.log("Saga Error: open Picker", error);