@imposium-hub/components 2.9.0-5 → 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.
Files changed (176) hide show
  1. package/dist/cjs/components/app-wrapper/AppWrapper.js +3 -1
  2. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  3. package/dist/cjs/components/assets/AssetsUploadMenu.js +2 -1
  4. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  5. package/dist/cjs/components/confirm-modal/ConfirmModal.js +3 -2
  6. package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
  7. package/dist/cjs/components/number-field/NumberField.js +2 -2
  8. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  9. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
  10. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +192 -0
  11. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
  12. package/dist/cjs/constants/copy.d.ts +4 -0
  13. package/dist/cjs/constants/copy.js +5 -1
  14. package/dist/cjs/constants/copy.js.map +1 -1
  15. package/dist/cjs/constants/icons.d.ts +2 -0
  16. package/dist/cjs/constants/icons.js +3 -1
  17. package/dist/cjs/constants/icons.js.map +1 -1
  18. package/dist/cjs/index.d.ts +3 -3
  19. package/dist/cjs/index.js +6 -5
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/redux/actions/asset-uploads.d.ts +1 -1
  22. package/dist/cjs/redux/actions/asset-uploads.js +169 -119
  23. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  24. package/dist/cjs/redux/reducers/asset-uploads.js +2 -1
  25. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  26. package/dist/cjs/utils/modal.d.ts +4 -0
  27. package/dist/cjs/utils/modal.js +11 -2
  28. package/dist/cjs/utils/modal.js.map +1 -1
  29. package/dist/esm/components/app-wrapper/AppWrapper.js +3 -1
  30. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  31. package/dist/esm/components/assets/AssetsUploadMenu.js +3 -2
  32. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  33. package/dist/esm/components/confirm-modal/ConfirmModal.js +3 -2
  34. package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
  35. package/dist/esm/components/number-field/NumberField.js +2 -2
  36. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  37. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
  38. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +133 -0
  39. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
  40. package/dist/esm/constants/copy.d.ts +4 -0
  41. package/dist/esm/constants/copy.js +5 -1
  42. package/dist/esm/constants/copy.js.map +1 -1
  43. package/dist/esm/constants/icons.d.ts +2 -0
  44. package/dist/esm/constants/icons.js +3 -1
  45. package/dist/esm/constants/icons.js.map +1 -1
  46. package/dist/esm/index.d.ts +3 -3
  47. package/dist/esm/index.js +3 -3
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/redux/actions/asset-uploads.d.ts +1 -1
  50. package/dist/esm/redux/actions/asset-uploads.js +165 -115
  51. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  52. package/dist/esm/redux/reducers/asset-uploads.js +2 -1
  53. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  54. package/dist/esm/utils/modal.d.ts +4 -0
  55. package/dist/esm/utils/modal.js +9 -1
  56. package/dist/esm/utils/modal.js.map +1 -1
  57. package/dist/styles.css +49 -6
  58. package/dist/styles.less +64 -58
  59. package/less/components/assets.less +5 -39
  60. package/less/components/button-menu.less +1 -0
  61. package/less/components/button.less +57 -19
  62. package/less/components/story-previewer.less +1 -1
  63. package/package.json +1 -1
  64. package/src/components/app-wrapper/AppWrapper.tsx +2 -0
  65. package/src/components/assets/AssetsUploadMenu.tsx +17 -10
  66. package/src/components/confirm-modal/ConfirmModal.tsx +3 -2
  67. package/src/components/number-field/NumberField.tsx +2 -2
  68. package/src/components/replace-files-modal/ReplaceFilesModal.tsx +209 -0
  69. package/src/constants/copy.ts +5 -1
  70. package/src/constants/icons.tsx +10 -1
  71. package/src/index.ts +3 -2
  72. package/src/redux/actions/asset-uploads.ts +193 -162
  73. package/src/redux/reducers/asset-uploads.ts +2 -1
  74. package/src/utils/modal.ts +13 -1
  75. package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +0 -26
  76. package/dist/cjs/components/app-wrapper/AppWrapperV2.js +0 -266
  77. package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +0 -1
  78. package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +0 -19
  79. package/dist/cjs/components/app-wrapper/AppWrapperV3.js +0 -195
  80. package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +0 -1
  81. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  82. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -243
  83. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  84. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  85. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +0 -255
  86. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  87. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  88. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -243
  89. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  90. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  91. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -251
  92. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  93. package/dist/cjs/components/auth-gate/AuthGate.d.ts +0 -2
  94. package/dist/cjs/components/auth-gate/AuthGate.js +0 -105
  95. package/dist/cjs/components/auth-gate/AuthGate.js.map +0 -1
  96. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  97. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +0 -91
  98. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  99. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +0 -33
  100. package/dist/cjs/components/header/Header_BACKUP_73021.js +0 -393
  101. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +0 -1
  102. package/dist/cjs/components/header/Header_BASE_73021.d.ts +0 -29
  103. package/dist/cjs/components/header/Header_BASE_73021.js +0 -376
  104. package/dist/cjs/components/header/Header_BASE_73021.js.map +0 -1
  105. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +0 -33
  106. package/dist/cjs/components/header/Header_LOCAL_73021.js +0 -382
  107. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +0 -1
  108. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +0 -30
  109. package/dist/cjs/components/header/Header_REMOTE_73021.js +0 -386
  110. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +0 -1
  111. package/dist/cjs/components/header/StoryDropdown.d.ts +0 -6
  112. package/dist/cjs/components/header/StoryDropdown.js +0 -111
  113. package/dist/cjs/components/header/StoryDropdown.js.map +0 -1
  114. package/dist/cjs/redux/actions/auth.d.ts +0 -9
  115. package/dist/cjs/redux/actions/auth.js +0 -30
  116. package/dist/cjs/redux/actions/auth.js.map +0 -1
  117. package/dist/cjs/redux/reducers/auth.d.ts +0 -3
  118. package/dist/cjs/redux/reducers/auth.js +0 -67
  119. package/dist/cjs/redux/reducers/auth.js.map +0 -1
  120. package/dist/cjs/services/Auth0.d.ts +0 -18
  121. package/dist/cjs/services/Auth0.js +0 -102
  122. package/dist/cjs/services/Auth0.js.map +0 -1
  123. package/dist/cjs/services/Session.d.ts +0 -26
  124. package/dist/cjs/services/Session.js +0 -155
  125. package/dist/cjs/services/Session.js.map +0 -1
  126. package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +0 -26
  127. package/dist/esm/components/app-wrapper/AppWrapperV2.js +0 -142
  128. package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +0 -1
  129. package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +0 -19
  130. package/dist/esm/components/app-wrapper/AppWrapperV3.js +0 -88
  131. package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +0 -1
  132. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  133. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -194
  134. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  135. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  136. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +0 -208
  137. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  138. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  139. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -194
  140. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  141. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  142. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -204
  143. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  144. package/dist/esm/components/auth-gate/AuthGate.d.ts +0 -2
  145. package/dist/esm/components/auth-gate/AuthGate.js +0 -59
  146. package/dist/esm/components/auth-gate/AuthGate.js.map +0 -1
  147. package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  148. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +0 -35
  149. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  150. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +0 -33
  151. package/dist/esm/components/header/Header_BACKUP_73021.js +0 -336
  152. package/dist/esm/components/header/Header_BACKUP_73021.js.map +0 -1
  153. package/dist/esm/components/header/Header_BASE_73021.d.ts +0 -29
  154. package/dist/esm/components/header/Header_BASE_73021.js +0 -322
  155. package/dist/esm/components/header/Header_BASE_73021.js.map +0 -1
  156. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +0 -33
  157. package/dist/esm/components/header/Header_LOCAL_73021.js +0 -328
  158. package/dist/esm/components/header/Header_LOCAL_73021.js.map +0 -1
  159. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +0 -30
  160. package/dist/esm/components/header/Header_REMOTE_73021.js +0 -329
  161. package/dist/esm/components/header/Header_REMOTE_73021.js.map +0 -1
  162. package/dist/esm/components/header/StoryDropdown.d.ts +0 -6
  163. package/dist/esm/components/header/StoryDropdown.js +0 -82
  164. package/dist/esm/components/header/StoryDropdown.js.map +0 -1
  165. package/dist/esm/redux/actions/auth.d.ts +0 -9
  166. package/dist/esm/redux/actions/auth.js +0 -25
  167. package/dist/esm/redux/actions/auth.js.map +0 -1
  168. package/dist/esm/redux/reducers/auth.d.ts +0 -3
  169. package/dist/esm/redux/reducers/auth.js +0 -27
  170. package/dist/esm/redux/reducers/auth.js.map +0 -1
  171. package/dist/esm/services/Auth0.d.ts +0 -18
  172. package/dist/esm/services/Auth0.js +0 -68
  173. package/dist/esm/services/Auth0.js.map +0 -1
  174. package/dist/esm/services/Session.d.ts +0 -26
  175. package/dist/esm/services/Session.js +0 -107
  176. package/dist/esm/services/Session.js.map +0 -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
- showUploadsMenu,
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: 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
- let tags = [];
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: 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: 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 = { filename, percent: 0, tags };
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
- api.uploadAsset(
193
- sId,
194
- uploadBlobs[activeIndex].tags,
195
- uploadBlobs[activeIndex].file,
196
- uploadBlobs[activeIndex].onUploadProgress,
197
- uploadBlobs[activeIndex].filename
198
- )
199
- .then((result) => {
200
- const filename = uploadBlobs.find((b) =>
201
- b.filename.includes(result[0].name)
202
- ).filename;
203
- uploadFiles = uploadFiles.filter((f) => f.name !== filename);
204
- dispatch({
205
- type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
206
- assetId: result[0].id,
207
- filename
208
- });
209
- const currentOngoingJobs = () => {
210
- if (setBindToOverlay) {
211
- setBindToOverlay(result[0]);
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
- ongoingJobs.push(currentOngoingJobs());
230
- if (currentQueue !== queueLength - 1) {
231
- currentQueue = currentQueue + 1;
232
- createPromise(currentQueue);
233
- } else {
234
- ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
235
- const jobIdExists: boolean = typeof j.jobId === 'string';
236
- if (!jobIdExists) {
237
- dispatch({
238
- type: assetUploadsActions.REMOVE_UPLOAD,
239
- filename: j.filename
240
- });
241
- doAssetTableHydration(api, storyId);
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
- .catch((e: Error[]) => {
251
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
252
- currentQueue = currentQueue + 1;
253
- createPromise(currentQueue);
254
- } else {
255
- const error: any = { ...e };
256
- const errorMsg = error.response.data.error.split(':')[0];
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.ERROR,
259
- filename: uploadBlobs[activeIndex].filename,
260
- errorMsg
245
+ type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
246
+ assetId: result[0].id,
247
+ filename
261
248
  });
262
- doAssetTableHydration(api, storyId);
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, getStore) => {
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 uploadsWithSameName: any[] = uploads.filter((u: any) =>
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
- assetId,
350
+ id,
320
351
  replacedFileBlobs[activeIndex].file,
321
352
  replacedFileBlobs[activeIndex].onUploadProgress,
322
353
  replacedFileBlobs[activeIndex].filename
@@ -1,7 +1,8 @@
1
1
  import assetUploadsActions from '../actions/asset-uploads';
2
2
 
3
3
  const initialState: any = {
4
- uploads: []
4
+ uploads: [],
5
+ applyAll: false
5
6
  };
6
7
 
7
8
  const assetUploads = (state = initialState, action): any => {
@@ -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('openconfirmmodal', {
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
 
@@ -1,26 +0,0 @@
1
- import * as React from 'react';
2
- import { IImposiumAPI } from '../../services/API';
3
- export interface IAppWrapperProps {
4
- auth0: any;
5
- auth0Code: string;
6
- baseUrl: string;
7
- api: IImposiumAPI;
8
- children: React.ReactChildren;
9
- organizationId: string;
10
- serviceId: number;
11
- access: any;
12
- setAccessData(accessData: any): any;
13
- onAuthenticated: (activeOrgId: string, activeStoryId: string) => any;
14
- onStoryChange(storyId: string): any;
15
- onOrganizationChange(orgId: string, storyId: string): any;
16
- storyId?: string;
17
- CrMLink?: string;
18
- hideStoryPicker?: boolean;
19
- hideDocs?: boolean;
20
- hideOrgPicker?: boolean;
21
- }
22
- export interface IAppWrapperState {
23
- blockRender: boolean;
24
- }
25
- declare const _default: React.ComponentType<Omit<import("@auth0/auth0-react").WithAuth0Props, "auth0">>;
26
- export default _default;