@imposium-hub/components 2.9.0-4 → 2.9.0-6
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.
- package/dist/cjs/components/app-wrapper/AppWrapper.js +3 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +2 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/confirm-modal/ConfirmModal.js +3 -2
- package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/cjs/components/number-field/NumberField.js +2 -2
- package/dist/cjs/components/number-field/NumberField.js.map +1 -1
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +3 -2
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +4 -0
- package/dist/cjs/constants/copy.js +5 -1
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/icons.d.ts +2 -0
- package/dist/cjs/constants/icons.js +3 -1
- package/dist/cjs/constants/icons.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +6 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.d.ts +1 -1
- package/dist/cjs/redux/actions/asset-uploads.js +169 -119
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/redux/actions/publish.js +10 -2
- package/dist/cjs/redux/actions/publish.js.map +1 -1
- package/dist/cjs/redux/reducers/asset-uploads.js +2 -1
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/cjs/utils/modal.d.ts +4 -0
- package/dist/cjs/utils/modal.js +11 -2
- package/dist/cjs/utils/modal.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js +3 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +3 -2
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/confirm-modal/ConfirmModal.js +3 -2
- package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/esm/components/number-field/NumberField.js +2 -2
- package/dist/esm/components/number-field/NumberField.js.map +1 -1
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +3 -2
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +4 -0
- package/dist/esm/constants/copy.js +5 -1
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/icons.d.ts +2 -0
- package/dist/esm/constants/icons.js +3 -1
- package/dist/esm/constants/icons.js.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.d.ts +1 -1
- package/dist/esm/redux/actions/asset-uploads.js +165 -115
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/redux/actions/publish.js +10 -2
- package/dist/esm/redux/actions/publish.js.map +1 -1
- package/dist/esm/redux/reducers/asset-uploads.js +2 -1
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/esm/utils/modal.d.ts +4 -0
- package/dist/esm/utils/modal.js +9 -1
- package/dist/esm/utils/modal.js.map +1 -1
- package/dist/styles.css +49 -6
- package/dist/styles.less +64 -58
- package/less/components/assets.less +5 -39
- package/less/components/button-menu.less +1 -0
- package/less/components/button.less +57 -19
- package/less/components/story-previewer.less +1 -1
- package/package.json +1 -1
- package/src/components/app-wrapper/AppWrapper.tsx +2 -0
- package/src/components/assets/AssetsUploadMenu.tsx +17 -10
- package/src/components/confirm-modal/ConfirmModal.tsx +3 -2
- package/src/components/number-field/NumberField.tsx +2 -2
- package/src/components/replace-files-modal/ReplaceFilesModal.tsx +209 -0
- package/src/constants/copy.ts +5 -1
- package/src/constants/icons.tsx +10 -1
- package/src/index.ts +3 -2
- package/src/redux/actions/asset-uploads.ts +193 -162
- package/src/redux/actions/publish.ts +10 -2
- package/src/redux/reducers/asset-uploads.ts +2 -1
- package/src/utils/modal.ts +13 -1
package/src/index.ts
CHANGED
|
@@ -154,7 +154,6 @@ import ContextMenuItem from './components/context-menu/ContextMenuItem';
|
|
|
154
154
|
import ContextMenuTrigger from './components/context-menu/ContextMenuTrigger';
|
|
155
155
|
import CopyPropIdButton from './components/copy-prop-id-button/CopyPropIdButton';
|
|
156
156
|
import Submenu from './components/context-menu/SubMenu';
|
|
157
|
-
import { ConfirmModal, IConfirmModalProps } from './components/confirm-modal/ConfirmModal';
|
|
158
157
|
import AssetsTableAssetIdCell from './components/assets/AssetsTableAssetIdCell';
|
|
159
158
|
import { resetStoryFilter, updateStoryFilter } from './redux/actions/story-filter';
|
|
160
159
|
import storyFilter from './redux/reducers/story-filter';
|
|
@@ -163,7 +162,8 @@ import { AppWrapper } from './components/app-wrapper/AppWrapper';
|
|
|
163
162
|
import { pushRoute, replaceRoute } from './utils/routing';
|
|
164
163
|
import { ProjectDropdown } from './components/header/ProjectDropdown';
|
|
165
164
|
import { EditGuideModal, IEditGuideModalProps } from './components/edit-guide-modal/EditGuideModal';
|
|
166
|
-
import { openConfirmModal } from './utils/modal';
|
|
165
|
+
import { openConfirmModal, openReplaceFilesModal } from './utils/modal';
|
|
166
|
+
import { ConfirmModal, IConfirmModalProps } from './components/confirm-modal/ConfirmModal';
|
|
167
167
|
|
|
168
168
|
export {
|
|
169
169
|
ProjectDropdown,
|
|
@@ -260,6 +260,7 @@ export {
|
|
|
260
260
|
updateAssetData,
|
|
261
261
|
doAssetTableHydration,
|
|
262
262
|
uploadAssets,
|
|
263
|
+
openReplaceFilesModal,
|
|
263
264
|
replaceAsset,
|
|
264
265
|
selectAsset,
|
|
265
266
|
deselectAsset,
|
|
@@ -4,6 +4,7 @@ import axios from 'axios';
|
|
|
4
4
|
|
|
5
5
|
const assetUploadsActions: any = {
|
|
6
6
|
ADD_UPLOAD: 'assetUploads/ADD_UPLOAD',
|
|
7
|
+
UPDATE_APPLY_ALL: 'assetUploads/UPDATE_APPY_ALL',
|
|
7
8
|
UPDATE_UPLOAD: 'assetUploads/UPDATE_UPLOAD',
|
|
8
9
|
UPDATE_PERCENT_UPLOADED: 'assetUploads/UPDATE_PERCENT_UPLOADED',
|
|
9
10
|
ADD_UPLOAD_ASSET_ID: 'assetUploads/ADD_UPLOAD_ASSET_ID',
|
|
@@ -16,6 +17,35 @@ const POLL_INTERVAL: number = 5000;
|
|
|
16
17
|
let uploadFiles: File[] = [];
|
|
17
18
|
let setBindToOverlay;
|
|
18
19
|
|
|
20
|
+
const getUploadMeta = (filename, file, editor) => {
|
|
21
|
+
const {
|
|
22
|
+
assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
|
|
23
|
+
} = editor;
|
|
24
|
+
|
|
25
|
+
let tags = [];
|
|
26
|
+
let assetId;
|
|
27
|
+
|
|
28
|
+
const name = file.name.slice(0, file.name.lastIndexOf('.'));
|
|
29
|
+
|
|
30
|
+
if (file.assetId) {
|
|
31
|
+
assetId = file.assetId;
|
|
32
|
+
} else {
|
|
33
|
+
if (tagByFileName) {
|
|
34
|
+
tags = tags.concat(name);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (tagByDelimiter) {
|
|
38
|
+
const tag = name.split(delimiter);
|
|
39
|
+
tags = [...new Set([...tags, ...tag])];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (tagManually) {
|
|
43
|
+
tags = [...new Set([...tags, ...manualTags])];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { filename, percent: 0, tags, assetId };
|
|
47
|
+
};
|
|
48
|
+
|
|
19
49
|
export const uploadAssets = (
|
|
20
50
|
api: IImposiumAPI,
|
|
21
51
|
files: File[],
|
|
@@ -24,17 +54,14 @@ export const uploadAssets = (
|
|
|
24
54
|
return (dispatch, getStore) => {
|
|
25
55
|
const {
|
|
26
56
|
assetUploads: { uploads },
|
|
27
|
-
editor
|
|
28
|
-
|
|
29
|
-
showUploadsDropdown,
|
|
30
|
-
assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
|
|
31
|
-
}
|
|
57
|
+
editor,
|
|
58
|
+
editor: { showUploadsMenu, showUploadsDropdown }
|
|
32
59
|
} = getStore();
|
|
33
60
|
|
|
34
61
|
uploadFiles.push(...files);
|
|
35
62
|
setBindToOverlay = bindToOverlay;
|
|
36
63
|
|
|
37
|
-
files.map((file:
|
|
64
|
+
files.map((file: any) => {
|
|
38
65
|
const uploadsWithSameName: any[] = uploads.filter((u: any) =>
|
|
39
66
|
u.filename.includes(file.name)
|
|
40
67
|
);
|
|
@@ -43,22 +70,7 @@ export const uploadAssets = (
|
|
|
43
70
|
? `${file.name} (${uploadsWithSameName.length})`
|
|
44
71
|
: file.name;
|
|
45
72
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (tagByFileName) {
|
|
49
|
-
tags = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (tagByDelimiter) {
|
|
53
|
-
const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
|
|
54
|
-
tags = [...new Set([...tags, ...tag])];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (tagManually) {
|
|
58
|
-
tags = [...new Set([...tags, ...manualTags])];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const uploadMeta: any = { filename, percent: 0, tags };
|
|
73
|
+
const uploadMeta: any = getUploadMeta(filename, file, editor);
|
|
62
74
|
|
|
63
75
|
dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
|
|
64
76
|
});
|
|
@@ -71,38 +83,13 @@ export const uploadAssets = (
|
|
|
71
83
|
|
|
72
84
|
export const updateUploadTags = (): any => {
|
|
73
85
|
return (dispatch, getStore) => {
|
|
74
|
-
const {
|
|
75
|
-
editor: {
|
|
76
|
-
assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
|
|
77
|
-
}
|
|
78
|
-
} = getStore();
|
|
86
|
+
const { editor } = getStore();
|
|
79
87
|
const uploadMetaArray = [];
|
|
80
88
|
|
|
81
89
|
if (uploadFiles.length > 0) {
|
|
82
|
-
uploadFiles.map((file:
|
|
90
|
+
uploadFiles.map((file: any) => {
|
|
83
91
|
const filename: string = file.name;
|
|
84
|
-
|
|
85
|
-
let tags = [];
|
|
86
|
-
|
|
87
|
-
if (tagByFileName) {
|
|
88
|
-
const tagsByFileName = tags.concat(
|
|
89
|
-
file.name.slice(0, file.name.lastIndexOf('.'))
|
|
90
|
-
);
|
|
91
|
-
const trimmedTags = tagsByFileName.map((str) => str.trim());
|
|
92
|
-
tags = [...new Set([...tags, ...trimmedTags])];
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (tagByDelimiter) {
|
|
96
|
-
const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
|
|
97
|
-
const trimmedTags = tag.map((str) => str.trim());
|
|
98
|
-
tags = [...new Set([...tags, ...trimmedTags])];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (tagManually) {
|
|
102
|
-
tags = [...new Set([...tags, ...manualTags])];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const uploadMeta: any = { filename, percent: 0, tags };
|
|
92
|
+
const uploadMeta: any = getUploadMeta(filename, file, editor);
|
|
106
93
|
|
|
107
94
|
uploadMetaArray.push(uploadMeta);
|
|
108
95
|
});
|
|
@@ -121,16 +108,10 @@ export const uploadingAsset = (api: IImposiumAPI): any => {
|
|
|
121
108
|
const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
|
|
122
109
|
const {
|
|
123
110
|
project: { storyId },
|
|
111
|
+
editor,
|
|
124
112
|
editor: {
|
|
125
113
|
fromCrM,
|
|
126
|
-
assetUploads: {
|
|
127
|
-
assignToStory,
|
|
128
|
-
tagByFileName,
|
|
129
|
-
tagByDelimiter,
|
|
130
|
-
delimiter,
|
|
131
|
-
tagManually,
|
|
132
|
-
manualTags
|
|
133
|
-
}
|
|
114
|
+
assetUploads: { assignToStory }
|
|
134
115
|
},
|
|
135
116
|
assetUploads: { uploads }
|
|
136
117
|
} = getStore();
|
|
@@ -142,27 +123,9 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
|
|
|
142
123
|
const sId = (assignToStory || fromCrM) && storyId ? storyId : null;
|
|
143
124
|
|
|
144
125
|
if (uploadFiles.length > 0) {
|
|
145
|
-
const uploadBlobs: any[] = uploadFiles.map((file:
|
|
126
|
+
const uploadBlobs: any[] = uploadFiles.map((file: any) => {
|
|
146
127
|
const filename: string = file.name;
|
|
147
128
|
|
|
148
|
-
let tags = [];
|
|
149
|
-
|
|
150
|
-
if (tagByFileName) {
|
|
151
|
-
const tagsByFileName = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
|
|
152
|
-
const trimmedTags = tagsByFileName.map((str) => str.trim());
|
|
153
|
-
tags = [...new Set([...tags, ...trimmedTags])];
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (tagByDelimiter) {
|
|
157
|
-
const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
|
|
158
|
-
const trimmedTags = tag.map((str) => str.trim());
|
|
159
|
-
tags = [...new Set([...tags, ...trimmedTags])];
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
if (tagManually) {
|
|
163
|
-
tags = [...new Set([...tags, ...manualTags])];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
129
|
const onUploadProgress = (progress: any): void => {
|
|
167
130
|
dispatch({
|
|
168
131
|
type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
|
|
@@ -172,10 +135,12 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
|
|
|
172
135
|
});
|
|
173
136
|
};
|
|
174
137
|
|
|
175
|
-
const uploadMeta: any =
|
|
138
|
+
const uploadMeta: any = getUploadMeta(filename, file, editor);
|
|
176
139
|
|
|
177
140
|
uploadMetaArray.push(uploadMeta);
|
|
178
141
|
|
|
142
|
+
const { tags } = uploadMeta;
|
|
143
|
+
|
|
179
144
|
return { file, tags, filename, onUploadProgress };
|
|
180
145
|
});
|
|
181
146
|
|
|
@@ -189,79 +154,155 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
|
|
|
189
154
|
const isUploading =
|
|
190
155
|
uploads.find((f) => f.filename === uploadBlobs[activeIndex].filename)?.percent > 0;
|
|
191
156
|
if (!isUploading) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
setBindToOverlay
|
|
212
|
-
|
|
213
|
-
return {
|
|
214
|
-
footageId: result[0].id,
|
|
215
|
-
jobId: result[0].job_id,
|
|
216
|
-
filename: uploadBlobs[activeIndex].filename,
|
|
217
|
-
onProcessed: () => {
|
|
218
|
-
const fileName = ongoingJobs.filter(
|
|
219
|
-
(job: any) => job.jobId === result[0].job_id
|
|
220
|
-
)[0].filename;
|
|
221
|
-
dispatch({
|
|
222
|
-
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
223
|
-
filename: fileName
|
|
224
|
-
});
|
|
225
|
-
doAssetTableHydration(api, storyId);
|
|
157
|
+
if (uploadBlobs[activeIndex].file.assetId) {
|
|
158
|
+
api.replaceAsset(
|
|
159
|
+
uploadBlobs[activeIndex].file.assetId,
|
|
160
|
+
uploadBlobs[activeIndex].file,
|
|
161
|
+
uploadBlobs[activeIndex].onUploadProgress,
|
|
162
|
+
uploadBlobs[activeIndex].filename
|
|
163
|
+
)
|
|
164
|
+
.then((result) => {
|
|
165
|
+
const filename = uploadBlobs.find((b) =>
|
|
166
|
+
b.filename.includes(result.name)
|
|
167
|
+
).filename;
|
|
168
|
+
|
|
169
|
+
uploadFiles = uploadFiles.filter((f) => f.name !== filename);
|
|
170
|
+
dispatch({
|
|
171
|
+
type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
|
|
172
|
+
assetId: result.id,
|
|
173
|
+
filename
|
|
174
|
+
});
|
|
175
|
+
const currentOngoingJobs = () => {
|
|
176
|
+
if (setBindToOverlay) {
|
|
177
|
+
setBindToOverlay(result);
|
|
226
178
|
}
|
|
179
|
+
return {
|
|
180
|
+
footageId: result.id,
|
|
181
|
+
jobId: result.job_id,
|
|
182
|
+
filename: uploadBlobs[activeIndex].filename,
|
|
183
|
+
onProcessed: () => {
|
|
184
|
+
const fileName = ongoingJobs.filter(
|
|
185
|
+
(job: any) => job.jobId === result.job_id
|
|
186
|
+
)[0].filename;
|
|
187
|
+
dispatch({
|
|
188
|
+
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
189
|
+
filename: fileName
|
|
190
|
+
});
|
|
191
|
+
doAssetTableHydration(api, storyId);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
227
194
|
};
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
195
|
+
ongoingJobs.push(currentOngoingJobs());
|
|
196
|
+
if (currentQueue !== queueLength - 1) {
|
|
197
|
+
currentQueue = currentQueue + 1;
|
|
198
|
+
createPromise(currentQueue);
|
|
199
|
+
} else {
|
|
200
|
+
ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
|
|
201
|
+
const jobIdExists: boolean = typeof j.jobId === 'string';
|
|
202
|
+
if (!jobIdExists) {
|
|
203
|
+
dispatch({
|
|
204
|
+
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
205
|
+
filename: j.filename
|
|
206
|
+
});
|
|
207
|
+
doAssetTableHydration(api, storyId);
|
|
208
|
+
}
|
|
209
|
+
return jobIdExists;
|
|
210
|
+
});
|
|
211
|
+
if (ongoingJobs.length > 0) {
|
|
212
|
+
pollAssetJobs(api, ongoingJobs, processingTimeout);
|
|
242
213
|
}
|
|
243
|
-
return jobIdExists;
|
|
244
|
-
});
|
|
245
|
-
if (ongoingJobs.length > 0) {
|
|
246
|
-
pollAssetJobs(api, ongoingJobs, processingTimeout);
|
|
247
214
|
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
215
|
+
})
|
|
216
|
+
.catch((e: Error[]) => {
|
|
217
|
+
if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
|
|
218
|
+
currentQueue = currentQueue + 1;
|
|
219
|
+
createPromise(currentQueue);
|
|
220
|
+
} else {
|
|
221
|
+
const error: any = { ...e };
|
|
222
|
+
const errorMsg = error.response.data.error.split(':')[0];
|
|
223
|
+
dispatch({
|
|
224
|
+
type: assetUploadsActions.ERROR,
|
|
225
|
+
filename: uploadBlobs[activeIndex].filename,
|
|
226
|
+
errorMsg
|
|
227
|
+
});
|
|
228
|
+
doAssetTableHydration(api, storyId);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
} else {
|
|
232
|
+
api.uploadAsset(
|
|
233
|
+
sId,
|
|
234
|
+
uploadBlobs[activeIndex].tags,
|
|
235
|
+
uploadBlobs[activeIndex].file,
|
|
236
|
+
uploadBlobs[activeIndex].onUploadProgress,
|
|
237
|
+
uploadBlobs[activeIndex].filename
|
|
238
|
+
)
|
|
239
|
+
.then((result) => {
|
|
240
|
+
const filename = uploadBlobs.find((b) =>
|
|
241
|
+
b.filename.includes(result[0].name)
|
|
242
|
+
).filename;
|
|
243
|
+
uploadFiles = uploadFiles.filter((f) => f.name !== filename);
|
|
257
244
|
dispatch({
|
|
258
|
-
type: assetUploadsActions.
|
|
259
|
-
|
|
260
|
-
|
|
245
|
+
type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
|
|
246
|
+
assetId: result[0].id,
|
|
247
|
+
filename
|
|
261
248
|
});
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
249
|
+
const currentOngoingJobs = () => {
|
|
250
|
+
if (setBindToOverlay) {
|
|
251
|
+
setBindToOverlay(result[0]);
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
footageId: result[0].id,
|
|
255
|
+
jobId: result[0].job_id,
|
|
256
|
+
filename: uploadBlobs[activeIndex].filename,
|
|
257
|
+
onProcessed: () => {
|
|
258
|
+
const fileName = ongoingJobs.filter(
|
|
259
|
+
(job: any) => job.jobId === result[0].job_id
|
|
260
|
+
)[0].filename;
|
|
261
|
+
dispatch({
|
|
262
|
+
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
263
|
+
filename: fileName
|
|
264
|
+
});
|
|
265
|
+
doAssetTableHydration(api, storyId);
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
ongoingJobs.push(currentOngoingJobs());
|
|
270
|
+
if (currentQueue !== queueLength - 1) {
|
|
271
|
+
currentQueue = currentQueue + 1;
|
|
272
|
+
createPromise(currentQueue);
|
|
273
|
+
} else {
|
|
274
|
+
ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
|
|
275
|
+
const jobIdExists: boolean = typeof j.jobId === 'string';
|
|
276
|
+
if (!jobIdExists) {
|
|
277
|
+
dispatch({
|
|
278
|
+
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
279
|
+
filename: j.filename
|
|
280
|
+
});
|
|
281
|
+
doAssetTableHydration(api, storyId);
|
|
282
|
+
}
|
|
283
|
+
return jobIdExists;
|
|
284
|
+
});
|
|
285
|
+
if (ongoingJobs.length > 0) {
|
|
286
|
+
pollAssetJobs(api, ongoingJobs, processingTimeout);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
})
|
|
290
|
+
.catch((e: Error[]) => {
|
|
291
|
+
if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
|
|
292
|
+
currentQueue = currentQueue + 1;
|
|
293
|
+
createPromise(currentQueue);
|
|
294
|
+
} else {
|
|
295
|
+
const error: any = { ...e };
|
|
296
|
+
const errorMsg = error.response.data.error.split(':')[0];
|
|
297
|
+
dispatch({
|
|
298
|
+
type: assetUploadsActions.ERROR,
|
|
299
|
+
filename: uploadBlobs[activeIndex].filename,
|
|
300
|
+
errorMsg
|
|
301
|
+
});
|
|
302
|
+
doAssetTableHydration(api, storyId);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
}
|
|
265
306
|
}
|
|
266
307
|
};
|
|
267
308
|
|
|
@@ -274,49 +315,39 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
|
|
|
274
315
|
|
|
275
316
|
export const replaceAsset = (
|
|
276
317
|
api: IImposiumAPI,
|
|
277
|
-
assetId: any,
|
|
278
318
|
files: File[],
|
|
279
319
|
storyId: string,
|
|
320
|
+
assetId?: any,
|
|
280
321
|
bindToOverlay?: (f: any) => any
|
|
281
322
|
): any => {
|
|
282
|
-
return (dispatch
|
|
323
|
+
return (dispatch) => {
|
|
283
324
|
return new Promise<void>((resolve) => {
|
|
284
|
-
const {
|
|
285
|
-
assetUploads: { uploads }
|
|
286
|
-
} = getStore();
|
|
287
325
|
let currentQueue: number = 0;
|
|
288
326
|
let ongoingJobs: any[] = [];
|
|
289
327
|
const filesLength = files.length > 5 ? 4 : files.length - 1;
|
|
290
328
|
|
|
291
329
|
const replacedFileBlobs: any[] = files.map((file: File) => {
|
|
292
|
-
const
|
|
293
|
-
u.filename.includes(file.name)
|
|
294
|
-
);
|
|
295
|
-
const filename: string =
|
|
296
|
-
uploadsWithSameName.length > 0
|
|
297
|
-
? `${file.name} (${uploadsWithSameName.length})`
|
|
298
|
-
: file.name;
|
|
299
|
-
|
|
300
|
-
const uploadMeta: any = { filename, percent: 0 };
|
|
330
|
+
const uploadMeta: any = { filename: file.name, percent: 0 };
|
|
301
331
|
|
|
302
332
|
const onUploadProgress = (progress: any): void => {
|
|
303
333
|
dispatch({
|
|
304
334
|
type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
|
|
305
335
|
percent: Math.floor((progress.loaded * 100) / progress.total),
|
|
306
|
-
filename
|
|
336
|
+
filename: file.name
|
|
307
337
|
});
|
|
308
338
|
};
|
|
309
339
|
|
|
310
340
|
dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
|
|
311
341
|
|
|
312
|
-
return { file, filename, onUploadProgress };
|
|
342
|
+
return { file, filename: file.name, onUploadProgress };
|
|
313
343
|
});
|
|
314
344
|
|
|
315
345
|
const createPromise = (activeIndex: number) => {
|
|
316
346
|
const queueLength: number = replacedFileBlobs.length;
|
|
317
347
|
const processingTimeout: number = -1;
|
|
348
|
+
const id = assetId ? assetId : replacedFileBlobs[activeIndex].file.assetId;
|
|
318
349
|
api.replaceAsset(
|
|
319
|
-
|
|
350
|
+
id,
|
|
320
351
|
replacedFileBlobs[activeIndex].file,
|
|
321
352
|
replacedFileBlobs[activeIndex].onUploadProgress,
|
|
322
353
|
replacedFileBlobs[activeIndex].filename
|
|
@@ -17,7 +17,7 @@ export const getStoryPublishStatus = (api: IImposiumAPI, storyId: string): any =
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
dispatch({ type: publish.UPDATE_PUBLISH_STATUS, data: resStatus });
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
if (resStatus.publishing) {
|
|
22
22
|
const jobId = resStatus.job_id;
|
|
23
23
|
api.pollJob(jobId)
|
|
@@ -38,6 +38,8 @@ export const getStoryPublishStatus = (api: IImposiumAPI, storyId: string): any =
|
|
|
38
38
|
reject(copy.header.publishPollError);
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
+
} else {
|
|
42
|
+
resolve(resStatus);
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
})
|
|
@@ -77,9 +79,15 @@ export const publishVersion = (api: IImposiumAPI, storyId: string) => {
|
|
|
77
79
|
return new Promise((resolve, reject) => {
|
|
78
80
|
api.runPublish(storyId, '')
|
|
79
81
|
.then((d) => {
|
|
80
|
-
|
|
82
|
+
dispatch(getStoryPublishStatus(api, storyId))
|
|
83
|
+
.then()
|
|
84
|
+
.catch((error) => {
|
|
85
|
+
dispatch({ type: publish.CLEAR_PUBLISH_STATUS });
|
|
86
|
+
reject(error);
|
|
87
|
+
});
|
|
81
88
|
})
|
|
82
89
|
.catch((e) => {
|
|
90
|
+
dispatch({ type: publish.CLEAR_PUBLISH_STATUS });
|
|
83
91
|
if (e) {
|
|
84
92
|
reject(e);
|
|
85
93
|
} else {
|
package/src/utils/modal.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { IConfirmModalProps } from '../components/confirm-modal/ConfirmModal';
|
|
2
|
+
import { IReplaceFilesModalProps } from '../components/replace-files-modal/ReplaceFilesModal';
|
|
3
|
+
|
|
4
|
+
export const replaceFilesModalEvent = 'openreplacefilesmodal';
|
|
5
|
+
export const confirmModalEvent = 'openconfirmmodal';
|
|
2
6
|
|
|
3
7
|
export const openConfirmModal = (detail: IConfirmModalProps) => {
|
|
4
|
-
const event = new CustomEvent(
|
|
8
|
+
const event = new CustomEvent(confirmModalEvent, {
|
|
9
|
+
detail
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
window.dispatchEvent(event);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const openReplaceFilesModal = (detail: IReplaceFilesModalProps) => {
|
|
16
|
+
const event = new CustomEvent(replaceFilesModalEvent, {
|
|
5
17
|
detail
|
|
6
18
|
});
|
|
7
19
|
|