@imposium-hub/components 2.2.44-2 → 2.2.44-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/cjs/components/assets/AssetsUploadMenu.js +132 -25
  2. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  3. package/dist/cjs/components/color-field/ColorField.js +2 -2
  4. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  5. package/dist/cjs/constants/copy.d.ts +1 -0
  6. package/dist/cjs/constants/copy.js +2 -1
  7. package/dist/cjs/constants/copy.js.map +1 -1
  8. package/dist/cjs/redux/actions/asset-uploads.d.ts +5 -2
  9. package/dist/cjs/redux/actions/asset-uploads.js +258 -138
  10. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  11. package/dist/cjs/redux/reducers/asset-uploads.js +10 -0
  12. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  13. package/dist/esm/components/assets/AssetsUploadMenu.js +125 -25
  14. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  15. package/dist/esm/components/color-field/ColorField.js +2 -2
  16. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  17. package/dist/esm/constants/copy.d.ts +1 -0
  18. package/dist/esm/constants/copy.js +2 -1
  19. package/dist/esm/constants/copy.js.map +1 -1
  20. package/dist/esm/redux/actions/asset-uploads.d.ts +5 -2
  21. package/dist/esm/redux/actions/asset-uploads.js +221 -131
  22. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  23. package/dist/esm/redux/reducers/asset-uploads.js +16 -0
  24. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  25. package/dist/styles.css +81 -2
  26. package/dist/styles.less +154 -62
  27. package/less/components/assets.less +154 -63
  28. package/package.json +4 -4
  29. package/src/components/assets/AssetsUploadMenu.tsx +251 -66
  30. package/src/components/color-field/ColorField.tsx +2 -2
  31. package/src/constants/copy.ts +2 -1
  32. package/src/redux/actions/asset-uploads.ts +299 -152
  33. package/src/redux/reducers/asset-uploads.ts +18 -0
@@ -3,38 +3,36 @@ import { doAssetTableHydration } from './asset-list';
3
3
  import axios from 'axios';
4
4
 
5
5
  const assetUploadsActions: any = {
6
- TOGGLE_AUTO_TAG: 'assetUploads/TOGGLE_AUTO_TAG',
7
- TOGGLE_TAG_BY_FILENAME: 'assetUploads/TOGGLE_TAG_BY_FILENAME',
8
- TOGGLE_TAG_BY_DELIMITER: 'assetUploads/TOGGLE_TAG_BY_DELIMITER',
9
- SET_DELIMITER: 'assetUploads/SET_DELIMITER',
10
- TOGGLE_MANUAL_TAGGING: 'assetUploads/TOGGLE_MANUAL_TAGGING',
11
- ADD_MANUAL_TAG: 'assetUploads/ADD_MANUAL_TAG',
12
- DELETE_MANUAL_TAG: 'assetUploads/DELETE_MANUAL_TAG',
13
- DELETE_MANUAL_TAGS: 'assetUploads/DELETE_MANUAL_TAGS',
14
- TOGGLE_ASSIGN_TO_STORY: 'assetUploads/TOGGLE_ASSIGN_TO_STORY',
15
6
  ADD_UPLOAD: 'assetUploads/ADD_UPLOAD',
7
+ UPDATE_UPLOAD: 'assetUploads/UPDATE_UPLOAD',
16
8
  UPDATE_PERCENT_UPLOADED: 'assetUploads/UPDATE_PERCENT_UPLOADED',
9
+ ADD_UPLOAD_ASSET_ID: 'assetUploads/ADD_UPLOAD_ASSET_ID',
17
10
  REMOVE_UPLOAD: 'assetUploads/REMOVE_UPLOAD'
18
11
  };
19
12
 
20
13
  const POLL_INTERVAL: number = 5000;
21
14
 
15
+ const uploadFiles: File[] = [];
16
+ let setBindToOverlay;
17
+
22
18
  export const uploadAssets = (
23
19
  api: IImposiumAPI,
24
20
  files: File[],
25
- storyId: string,
26
21
  bindToOverlay?: (f: any) => any
27
22
  ): any => {
28
23
  return (dispatch, getStore) => {
29
24
  const {
30
- assetUploads: { uploads, assignToStory, tagByFileName, tagManually, manualTags },
31
- editor: { tagByDelimiter, delimiter }
25
+ assetUploads: { uploads },
26
+ editor: {
27
+ showUploadsMenu,
28
+ assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
29
+ }
32
30
  } = getStore();
33
- let currentQueue: number = 0;
34
- let ongoingJobs: any[] = [];
35
- const filesLength = files.length > 5 ? 4 : files.length - 1;
36
31
 
37
- const uploadBlobs: any[] = files.map((file: File) => {
32
+ uploadFiles.push(...files);
33
+ setBindToOverlay = bindToOverlay;
34
+
35
+ files.map((file: File) => {
38
36
  const uploadsWithSameName: any[] = uploads.filter((u: any) =>
39
37
  u.filename.includes(file.name)
40
38
  );
@@ -46,11 +44,11 @@ export const uploadAssets = (
46
44
  let tags = [];
47
45
 
48
46
  if (tagByFileName) {
49
- tags = tags.concat(file.name.substr(0, file.name.lastIndexOf('.')));
47
+ tags = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
50
48
  }
51
49
 
52
50
  if (tagByDelimiter) {
53
- const tag = file.name.substr(0, file.name.lastIndexOf('.')).split(delimiter);
51
+ const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
54
52
  tags = [...new Set([...tags, ...tag])];
55
53
  }
56
54
 
@@ -58,7 +56,100 @@ export const uploadAssets = (
58
56
  tags = [...new Set([...tags, ...manualTags])];
59
57
  }
60
58
 
61
- const uploadMeta: any = { filename, percent: 0 };
59
+ const uploadMeta: any = { filename, percent: 0, tags };
60
+
61
+ dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
62
+ });
63
+
64
+ if (!showUploadsMenu) {
65
+ uploadAssetHandler(api, dispatch, getStore);
66
+ }
67
+ };
68
+ };
69
+
70
+ export const updateUploadTags = (): any => {
71
+ return (dispatch, getStore) => {
72
+ const {
73
+ editor: {
74
+ assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
75
+ }
76
+ } = getStore();
77
+ const uploadMetaArray = [];
78
+
79
+ if (uploadFiles) {
80
+ uploadFiles.map((file: File) => {
81
+ const filename: string = file.name;
82
+
83
+ let tags = [];
84
+
85
+ if (tagByFileName) {
86
+ tags = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
87
+ }
88
+
89
+ if (tagByDelimiter) {
90
+ const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
91
+ tags = [...new Set([...tags, ...tag])];
92
+ }
93
+
94
+ if (tagManually) {
95
+ tags = [...new Set([...tags, ...manualTags])];
96
+ }
97
+
98
+ const uploadMeta: any = { filename, percent: 0, tags };
99
+
100
+ uploadMetaArray.push(uploadMeta);
101
+ });
102
+
103
+ dispatch({ type: assetUploadsActions.UPDATE_UPLOAD, uploadMetaArray });
104
+ }
105
+ };
106
+ };
107
+
108
+ export const uploadingAsset = (api: IImposiumAPI): any => {
109
+ return (dispatch, getStore) => {
110
+ uploadAssetHandler(api, dispatch, getStore);
111
+ };
112
+ };
113
+
114
+ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
115
+ const {
116
+ project: { storyId },
117
+ editor: {
118
+ assetUploads: {
119
+ assignToStory,
120
+ tagByFileName,
121
+ tagByDelimiter,
122
+ delimiter,
123
+ tagManually,
124
+ manualTags
125
+ }
126
+ },
127
+ assetUploads: { uploads }
128
+ } = getStore();
129
+
130
+ let currentQueue: number = 0;
131
+ let ongoingJobs: any[] = [];
132
+
133
+ const uploadMetaArray = [];
134
+
135
+ if (uploadFiles) {
136
+ const uploadBlobs: any[] = uploadFiles.map((file: File) => {
137
+ const filename: string = file.name;
138
+
139
+ let tags = [];
140
+
141
+ if (tagByFileName) {
142
+ tags = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
143
+ }
144
+
145
+ if (tagByDelimiter) {
146
+ const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
147
+ tags = [...new Set([...tags, ...tag])];
148
+ }
149
+
150
+ if (tagManually) {
151
+ tags = [...new Set([...tags, ...manualTags])];
152
+ }
62
153
 
63
154
  const onUploadProgress = (progress: any): void => {
64
155
  dispatch({
@@ -68,76 +159,95 @@ export const uploadAssets = (
68
159
  });
69
160
  };
70
161
 
71
- dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
162
+ const uploadMeta: any = { filename, percent: 0, tags };
163
+
164
+ uploadMetaArray.push(uploadMeta);
72
165
 
73
166
  return { file, tags, filename, onUploadProgress };
74
167
  });
75
168
 
169
+ dispatch({ type: assetUploadsActions.UPDATE_UPLOAD, uploadMetaArray });
170
+
171
+ const filesLength = uploadFiles.length > 5 ? 4 : uploadFiles.length - 1;
172
+
76
173
  const createPromise = (activeIndex: number) => {
77
174
  const queueLength: number = uploadBlobs.length;
78
175
  const sId = assignToStory && storyId ? storyId : null;
79
176
  const processingTimeout: number = -1;
80
- api.uploadAsset(
81
- sId,
82
- uploadBlobs[activeIndex].tags,
83
- uploadBlobs[activeIndex].file,
84
- uploadBlobs[activeIndex].onUploadProgress,
85
- uploadBlobs[activeIndex].filename
86
- )
87
- .then((result) => {
88
- const currentOngoingJobs = () => {
89
- if (bindToOverlay) {
90
- bindToOverlay(result[0]);
91
- }
92
- return {
93
- footageId: result[0].id,
94
- jobId: result[0].job_id,
95
- filename: uploadBlobs[activeIndex].filename,
96
- onProcessed: () => {
97
- const fileName = ongoingJobs.filter(
98
- (job: any) => job.jobId === result[0].job_id
99
- )[0].filename;
100
- dispatch({
101
- type: assetUploadsActions.REMOVE_UPLOAD,
102
- filename: fileName
103
- });
104
- doAssetTableHydration(api, storyId);
177
+ const isUploading =
178
+ uploads.find((f) => f.filename === uploadBlobs[activeIndex].filename).percent > 0;
179
+ if (!isUploading) {
180
+ api.uploadAsset(
181
+ sId,
182
+ uploadBlobs[activeIndex].tags,
183
+ uploadBlobs[activeIndex].file,
184
+ uploadBlobs[activeIndex].onUploadProgress,
185
+ uploadBlobs[activeIndex].filename
186
+ )
187
+ .then((result) => {
188
+ const filename = uploadBlobs.find((b) =>
189
+ b.filename.includes(result[0].name)
190
+ ).filename;
191
+ dispatch({
192
+ type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
193
+ assetId: result[0].id,
194
+ filename
195
+ });
196
+ const currentOngoingJobs = () => {
197
+ if (setBindToOverlay) {
198
+ setBindToOverlay(result[0]);
105
199
  }
200
+ return {
201
+ footageId: result[0].id,
202
+ jobId: result[0].job_id,
203
+ filename: uploadBlobs[activeIndex].filename,
204
+ onProcessed: () => {
205
+ const fileName = ongoingJobs.filter(
206
+ (job: any) => job.jobId === result[0].job_id
207
+ )[0].filename;
208
+ dispatch({
209
+ type: assetUploadsActions.REMOVE_UPLOAD,
210
+ filename: fileName
211
+ });
212
+ doAssetTableHydration(api, storyId);
213
+ }
214
+ };
106
215
  };
107
- };
108
- ongoingJobs.push(currentOngoingJobs());
109
- if (currentQueue !== queueLength - 1) {
110
- currentQueue = currentQueue + 1;
111
- createPromise(currentQueue);
112
- } else {
113
- ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
114
- const jobIdExists: boolean = typeof j.jobId === 'string';
115
- if (!jobIdExists) {
116
- dispatch({
117
- type: assetUploadsActions.REMOVE_UPLOAD,
118
- filename: j.filename
119
- });
120
- doAssetTableHydration(api, storyId);
216
+ ongoingJobs.push(currentOngoingJobs());
217
+ if (currentQueue !== queueLength - 1) {
218
+ currentQueue = currentQueue + 1;
219
+ createPromise(currentQueue);
220
+ } else {
221
+ ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
222
+ const jobIdExists: boolean = typeof j.jobId === 'string';
223
+ if (!jobIdExists) {
224
+ dispatch({
225
+ type: assetUploadsActions.REMOVE_UPLOAD,
226
+ filename: j.filename
227
+ });
228
+ doAssetTableHydration(api, storyId);
229
+ }
230
+ return jobIdExists;
231
+ });
232
+ if (ongoingJobs.length > 0) {
233
+ pollAssetJobs(api, ongoingJobs, processingTimeout);
121
234
  }
122
- return jobIdExists;
123
- });
124
- if (ongoingJobs.length > 0) {
125
- pollAssetJobs(api, ongoingJobs, processingTimeout);
126
235
  }
127
- }
128
- })
129
- .catch((e: Error[]) => {
130
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
131
- currentQueue = currentQueue + 1;
132
- createPromise(currentQueue);
133
- }
134
- });
236
+ })
237
+ .catch((e: Error[]) => {
238
+ if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
239
+ currentQueue = currentQueue + 1;
240
+ createPromise(currentQueue);
241
+ }
242
+ });
243
+ }
135
244
  };
245
+
136
246
  for (let i = 0; i <= filesLength; i++) {
137
247
  createPromise(i);
138
248
  currentQueue = i;
139
249
  }
140
- };
250
+ }
141
251
  };
142
252
 
143
253
  export const replaceAsset = (
@@ -147,95 +257,103 @@ export const replaceAsset = (
147
257
  storyId: string
148
258
  ): any => {
149
259
  return (dispatch, getStore) => {
150
- const {
151
- assetUploads: { uploads }
152
- } = getStore();
153
- let currentQueue: number = 0;
154
- let ongoingJobs: any[] = [];
155
- const filesLength = files.length > 5 ? 4 : files.length - 1;
260
+ return new Promise<void>((resolve) => {
261
+ const {
262
+ assetUploads: { uploads }
263
+ } = getStore();
264
+ let currentQueue: number = 0;
265
+ let ongoingJobs: any[] = [];
266
+ const filesLength = files.length > 5 ? 4 : files.length - 1;
156
267
 
157
- const uploadBlobs: any[] = files.map((file: File) => {
158
- const uploadsWithSameName: any[] = uploads.filter((u: any) =>
159
- u.filename.includes(file.name)
160
- );
161
- const filename: string =
162
- uploadsWithSameName.length > 0
163
- ? `${file.name} (${uploadsWithSameName.length})`
164
- : file.name;
268
+ const replacedFileBlobs: any[] = files.map((file: File) => {
269
+ const uploadsWithSameName: any[] = uploads.filter((u: any) =>
270
+ u.filename.includes(file.name)
271
+ );
272
+ const filename: string =
273
+ uploadsWithSameName.length > 0
274
+ ? `${file.name} (${uploadsWithSameName.length})`
275
+ : file.name;
165
276
 
166
- const uploadMeta: any = { filename, percent: 0 };
277
+ const uploadMeta: any = { filename, percent: 0 };
167
278
 
168
- const onUploadProgress = (progress: any): void => {
169
- dispatch({
170
- type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
171
- percent: Math.floor((progress.loaded * 100) / progress.total),
172
- filename
173
- });
174
- };
279
+ const onUploadProgress = (progress: any): void => {
280
+ dispatch({
281
+ type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
282
+ percent: Math.floor((progress.loaded * 100) / progress.total),
283
+ filename
284
+ });
285
+ };
175
286
 
176
- dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
287
+ dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
177
288
 
178
- return { file, filename, onUploadProgress };
179
- });
289
+ return { file, filename, onUploadProgress };
290
+ });
180
291
 
181
- const createPromise = (activeIndex: number) => {
182
- const queueLength: number = uploadBlobs.length;
183
- const processingTimeout: number = -1;
184
- api.replaceAsset(
185
- assetId,
186
- uploadBlobs[activeIndex].file,
187
- uploadBlobs[activeIndex].onUploadProgress,
188
- uploadBlobs[activeIndex].filename
189
- )
190
- .then((result) => {
191
- const currentOngoingJobs = () => {
192
- return {
193
- filename: uploadBlobs[activeIndex].filename,
194
- onProcessed: () => {
195
- const fileName = ongoingJobs.filter(
196
- (job: any) => job.jobId === result[0].job_id
197
- )[0].filename;
198
- dispatch({
199
- type: assetUploadsActions.REMOVE_UPLOAD,
200
- filename: fileName
201
- });
202
- doAssetTableHydration(api, storyId);
203
- }
292
+ const createPromise = (activeIndex: number) => {
293
+ const queueLength: number = replacedFileBlobs.length;
294
+ const processingTimeout: number = -1;
295
+ api.replaceAsset(
296
+ assetId,
297
+ replacedFileBlobs[activeIndex].file,
298
+ replacedFileBlobs[activeIndex].onUploadProgress,
299
+ replacedFileBlobs[activeIndex].filename
300
+ )
301
+ .then((result) => {
302
+ const currentOngoingJobs = () => {
303
+ return {
304
+ filename: replacedFileBlobs[activeIndex].filename,
305
+ onProcessed: () => {
306
+ const fileName = ongoingJobs.filter(
307
+ (job: any) => job.jobId === result[0].job_id
308
+ )[0].filename;
309
+ dispatch({
310
+ type: assetUploadsActions.REMOVE_UPLOAD,
311
+ filename: fileName
312
+ });
313
+ doAssetTableHydration(api, storyId);
314
+ }
315
+ };
204
316
  };
205
- };
206
- ongoingJobs.push(currentOngoingJobs());
207
- if (currentQueue !== queueLength - 1) {
208
- currentQueue = currentQueue + 1;
209
- createPromise(currentQueue);
210
- } else {
211
- ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
212
- const jobIdExists: boolean = typeof j.jobId === 'string';
213
- if (!jobIdExists) {
214
- dispatch({
215
- type: assetUploadsActions.REMOVE_UPLOAD,
216
- filename: j.filename
217
- });
218
- doAssetTableHydration(api, storyId);
317
+
318
+ ongoingJobs.push(currentOngoingJobs());
319
+
320
+ if (currentQueue !== queueLength - 1) {
321
+ currentQueue = currentQueue + 1;
322
+ createPromise(currentQueue);
323
+ } else {
324
+ ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
325
+ const jobIdExists: boolean = typeof j.jobId === 'string';
326
+
327
+ if (!jobIdExists) {
328
+ dispatch({
329
+ type: assetUploadsActions.REMOVE_UPLOAD,
330
+ filename: j.filename
331
+ });
332
+ doAssetTableHydration(api, storyId);
333
+ }
334
+ return jobIdExists;
335
+ });
336
+
337
+ if (ongoingJobs.length > 0) {
338
+ pollAssetJobs(api, ongoingJobs, processingTimeout);
219
339
  }
220
- return jobIdExists;
221
- });
222
- if (ongoingJobs.length > 0) {
223
- pollAssetJobs(api, ongoingJobs, processingTimeout);
224
340
  }
225
- }
226
- })
227
- .catch((e: Error[]) => {
228
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
229
- currentQueue = currentQueue + 1;
230
- createPromise(currentQueue);
231
- }
232
- });
233
- };
234
341
 
235
- for (let i = 0; i <= filesLength; i++) {
236
- createPromise(i);
237
- currentQueue = i;
238
- }
342
+ resolve(result);
343
+ })
344
+ .catch((e: Error[]) => {
345
+ if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
346
+ currentQueue = currentQueue + 1;
347
+ createPromise(currentQueue);
348
+ }
349
+ });
350
+ };
351
+
352
+ for (let i = 0; i <= filesLength; i++) {
353
+ createPromise(i);
354
+ currentQueue = i;
355
+ }
356
+ });
239
357
  };
240
358
  };
241
359
 
@@ -276,9 +394,17 @@ const pollAssetJobs = (api, ongoingJobs: any[], timeout: number): void => {
276
394
  }, POLL_INTERVAL);
277
395
  };
278
396
 
279
- export const cancelAssetUpload = (fileName: string, api: IImposiumAPI): any => {
397
+ export const cancelAssetUpload = (fileName: string, api: IImposiumAPI, assetId: string): any => {
280
398
  return (dispatch) => {
399
+ uploadFiles.filter((f) => {
400
+ return f.name !== fileName;
401
+ });
281
402
  api.cancelUploadAssets(fileName);
403
+ if (assetId) {
404
+ api.deleteAsset(assetId)
405
+ .then()
406
+ .catch((e) => console.error(e));
407
+ }
282
408
  dispatch({
283
409
  type: assetUploadsActions.REMOVE_UPLOAD,
284
410
  filename: fileName
@@ -286,4 +412,25 @@ export const cancelAssetUpload = (fileName: string, api: IImposiumAPI): any => {
286
412
  };
287
413
  };
288
414
 
415
+ export const cancelNonUploadedAssets = (api: IImposiumAPI): any => {
416
+ return (dispatch, getStore) => {
417
+ const {
418
+ assetUploads: { uploads }
419
+ } = getStore();
420
+
421
+ if (uploadFiles.length > 0) {
422
+ for (const file of uploadFiles) {
423
+ const percent = uploads.find((f) => f.filename === file.name).percent;
424
+ if (percent === 0) {
425
+ api.cancelUploadAssets(file.name);
426
+ dispatch({
427
+ type: assetUploadsActions.REMOVE_UPLOAD,
428
+ filename: file.name
429
+ });
430
+ }
431
+ }
432
+ }
433
+ };
434
+ };
435
+
289
436
  export default assetUploadsActions;
@@ -11,6 +11,11 @@ const assetUploads = (state = initialState, action): any => {
11
11
  ...state,
12
12
  uploads: [...state.uploads, action.uploadMeta]
13
13
  };
14
+ case assetUploadsActions.UPDATE_UPLOAD:
15
+ return {
16
+ ...state,
17
+ uploads: action.uploadMetaArray
18
+ };
14
19
  case assetUploadsActions.UPDATE_PERCENT_UPLOADED:
15
20
  const newUploads = state.uploads.map((u: any) => {
16
21
  if (u.filename === action.filename) {
@@ -24,6 +29,19 @@ const assetUploads = (state = initialState, action): any => {
24
29
  ...state,
25
30
  uploads: newUploads
26
31
  };
32
+ case assetUploadsActions.ADD_UPLOAD_ASSET_ID:
33
+ const updateUploads = state.uploads.map((u: any) => {
34
+ if (u.filename === action.filename) {
35
+ return { ...u, assetId: action.assetId };
36
+ }
37
+
38
+ return u;
39
+ });
40
+
41
+ return {
42
+ ...state,
43
+ uploads: updateUploads
44
+ };
27
45
  case assetUploadsActions.REMOVE_UPLOAD:
28
46
  return {
29
47
  ...state,