@imposium-hub/components 2.3.5 → 2.3.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 (142) hide show
  1. package/dist/cjs/components/assets/AssetField.js +2 -2
  2. package/dist/cjs/components/assets/AssetField.js.map +1 -1
  3. package/dist/cjs/components/assets/AssetsTableGlobalCell.js +1 -1
  4. package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -1
  5. package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -1
  6. package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
  7. package/dist/cjs/components/assets/AssetsTableRateCell.js.map +1 -1
  8. package/dist/cjs/components/assets/AssetsUploadMenu.js +157 -33
  9. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  10. package/dist/cjs/components/color-field/ColorField.js +2 -2
  11. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  12. package/dist/cjs/components/data-table/DataTable.js +2 -2
  13. package/dist/cjs/components/data-table/DataTable.js.map +1 -1
  14. package/dist/cjs/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
  15. package/dist/cjs/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
  16. package/dist/cjs/components/publish-wizard/PublishWizard.js +4 -0
  17. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  18. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +28 -5
  19. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  20. package/dist/cjs/components/story-previewer/StoryPreviewer.js +7 -2
  21. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  22. package/dist/cjs/constants/copy.d.ts +1 -0
  23. package/dist/cjs/constants/copy.js +4 -3
  24. package/dist/cjs/constants/copy.js.map +1 -1
  25. package/dist/cjs/index.d.ts +3 -2
  26. package/dist/cjs/index.js +3 -2
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/redux/actions/asset-uploads.d.ts +5 -10
  29. package/dist/cjs/redux/actions/asset-uploads.js +262 -182
  30. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  31. package/dist/cjs/redux/reducers/asset-uploads.js +8 -24
  32. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  33. package/dist/esm/components/assets/AssetField.js +2 -2
  34. package/dist/esm/components/assets/AssetField.js.map +1 -1
  35. package/dist/esm/components/assets/AssetsTableGlobalCell.js +1 -1
  36. package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -1
  37. package/dist/esm/components/assets/AssetsTableNameCell.js +2 -1
  38. package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
  39. package/dist/esm/components/assets/AssetsTableRateCell.js.map +1 -1
  40. package/dist/esm/components/assets/AssetsUploadMenu.js +138 -33
  41. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  42. package/dist/esm/components/color-field/ColorField.js +2 -2
  43. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  44. package/dist/esm/components/data-table/DataTable.js +2 -2
  45. package/dist/esm/components/data-table/DataTable.js.map +1 -1
  46. package/dist/esm/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
  47. package/dist/esm/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
  48. package/dist/esm/components/publish-wizard/PublishWizard.js +4 -0
  49. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  50. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +28 -5
  51. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  52. package/dist/esm/components/story-previewer/StoryPreviewer.js +7 -2
  53. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  54. package/dist/esm/constants/copy.d.ts +1 -0
  55. package/dist/esm/constants/copy.js +4 -3
  56. package/dist/esm/constants/copy.js.map +1 -1
  57. package/dist/esm/index.d.ts +3 -2
  58. package/dist/esm/index.js +3 -2
  59. package/dist/esm/index.js.map +1 -1
  60. package/dist/esm/redux/actions/asset-uploads.d.ts +5 -10
  61. package/dist/esm/redux/actions/asset-uploads.js +224 -167
  62. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  63. package/dist/esm/redux/reducers/asset-uploads.js +11 -48
  64. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  65. package/dist/styles.css +146 -2
  66. package/dist/styles.less +274 -73
  67. package/less/components/assets.less +237 -63
  68. package/less/components/data-table.less +17 -11
  69. package/less/components/publish-wizard.less +20 -0
  70. package/less/components/story-previewer.less +1 -0
  71. package/package.json +5 -5
  72. package/src/components/assets/AssetField.tsx +3 -8
  73. package/src/components/assets/AssetsTableGlobalCell.tsx +15 -0
  74. package/src/components/assets/AssetsTableNameCell.tsx +2 -1
  75. package/src/components/assets/AssetsTableRateCell.tsx +0 -1
  76. package/src/components/assets/AssetsUploadMenu.tsx +275 -97
  77. package/src/components/color-field/ColorField.tsx +2 -2
  78. package/src/components/data-table/DataTable.tsx +2 -2
  79. package/src/components/publish-wizard/PublishWizard.tsx +15 -8
  80. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +42 -10
  81. package/src/components/story-previewer/StoryPreviewer.tsx +10 -6
  82. package/src/constants/copy.ts +4 -3
  83. package/src/index.ts +3 -7
  84. package/src/redux/actions/asset-uploads.ts +305 -205
  85. package/src/redux/reducers/asset-uploads.ts +13 -48
  86. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  87. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -243
  88. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  89. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  90. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +0 -255
  91. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  92. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  93. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -243
  94. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  95. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  96. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -251
  97. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  98. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  99. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +0 -91
  100. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  101. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +0 -33
  102. package/dist/cjs/components/header/Header_BACKUP_73021.js +0 -393
  103. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +0 -1
  104. package/dist/cjs/components/header/Header_BASE_73021.d.ts +0 -29
  105. package/dist/cjs/components/header/Header_BASE_73021.js +0 -376
  106. package/dist/cjs/components/header/Header_BASE_73021.js.map +0 -1
  107. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +0 -33
  108. package/dist/cjs/components/header/Header_LOCAL_73021.js +0 -382
  109. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +0 -1
  110. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +0 -30
  111. package/dist/cjs/components/header/Header_REMOTE_73021.js +0 -386
  112. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +0 -1
  113. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  114. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -194
  115. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  116. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  117. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +0 -208
  118. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  119. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  120. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -194
  121. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  122. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  123. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -204
  124. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  125. package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  126. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +0 -35
  127. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  128. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +0 -33
  129. package/dist/esm/components/header/Header_BACKUP_73021.js +0 -336
  130. package/dist/esm/components/header/Header_BACKUP_73021.js.map +0 -1
  131. package/dist/esm/components/header/Header_BASE_73021.d.ts +0 -29
  132. package/dist/esm/components/header/Header_BASE_73021.js +0 -322
  133. package/dist/esm/components/header/Header_BASE_73021.js.map +0 -1
  134. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +0 -33
  135. package/dist/esm/components/header/Header_LOCAL_73021.js +0 -328
  136. package/dist/esm/components/header/Header_LOCAL_73021.js.map +0 -1
  137. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +0 -30
  138. package/dist/esm/components/header/Header_REMOTE_73021.js +0 -329
  139. package/dist/esm/components/header/Header_REMOTE_73021.js.map +0 -1
  140. /package/dist/cjs/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
  141. /package/dist/esm/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
  142. /package/src/components/dropdown/{dropdown.stories.tsx → Dropdown.stories.tsx} +0 -0
@@ -1,6 +1,7 @@
1
1
  export const assets = {
2
2
  tooltipFilter: 'Filter by Asset type',
3
3
  previewNotAvailable: 'Preview Not Available for this Asset Type',
4
+ dropAsset: 'Drop file(s) here.',
4
5
  iconTypes: {
5
6
  filter: 'Filter By Type',
6
7
  lut: 'LUT',
@@ -17,15 +18,15 @@ export const assets = {
17
18
  after_effects: 'After Effects'
18
19
  },
19
20
  uploads: {
20
- noUploads: 'There are currently no assets uploading...',
21
+ noUploads: 'No files selected, drag and drop files here to begin.',
21
22
  preparePhase: 'Preparing asset...',
22
23
  autoTagFilname: 'Tag by file name',
23
24
  autoTagDelimiter: 'Tag by Delimiter',
24
25
  delimiterOptions: 'Delimiter Options',
25
26
  manualTagging: 'Tag Manually',
26
- assignToProjectInput: 'Assign to Project',
27
+ assignToProjectInput: 'Make Global',
27
28
  assignToProjectInfo:
28
- 'If selected, any assets uploaded will only be available to use with the currently selected project.',
29
+ 'If selected, any assets uploaded will be available to use with all projects on the current organization.',
29
30
  uploadButton: 'Upload',
30
31
  cancelButton: 'Cancel'
31
32
  },
package/src/index.ts CHANGED
@@ -46,6 +46,7 @@ import AssetsTableTagsFilter from './components/assets/AssetsTableTagsFilter';
46
46
  import AssetsTableTagsPivot from './components/assets/AssetsTableTagsPivot';
47
47
  import AssetsTableComplexTagCell from './components/assets/AssetsTableComplexTagCell';
48
48
  import AssetsTableTypeCell from './components/assets/AssetsTableTypeCell';
49
+ import AssetsTableGlobalCell from './components/assets/AssetsTableGlobalCell';
49
50
  import AssetsTableStatusCell from './components/assets/AssetsTableStatusCell';
50
51
  import AssetsTableTypeFilter from './components/assets/AssetsTableTypeFilter';
51
52
  import AssetsTypeIcon from './components/assets/AssetsTypeIcon';
@@ -103,12 +104,7 @@ import {
103
104
  updateAssetStory
104
105
  } from './redux/actions/asset-list';
105
106
  import { getAssetTagList, addAssetTagToList } from './redux/actions/asset-tags';
106
- import {
107
- cancelAssetUpload,
108
- toggleTagFileName,
109
- uploadAssets,
110
- replaceAsset
111
- } from './redux/actions/asset-uploads';
107
+ import { cancelAssetUpload, uploadAssets, replaceAsset } from './redux/actions/asset-uploads';
112
108
  import { selectAsset, deselectAsset, resetSelection } from './redux/actions/selected-assets';
113
109
  import assetFilters from './redux/reducers/asset-filters';
114
110
  import assetList from './redux/reducers/asset-list';
@@ -217,6 +213,7 @@ export {
217
213
  AssetsTableSelectCell,
218
214
  AssetsTableTypeFilter,
219
215
  AssetsTableTypeCell,
216
+ AssetsTableGlobalCell,
220
217
  AssetsTableStatusCell,
221
218
  AssetsTableNameFilter,
222
219
  AssetsTableNameCell,
@@ -252,7 +249,6 @@ export {
252
249
  updateAssetName,
253
250
  updateAssetData,
254
251
  doAssetTableHydration,
255
- toggleTagFileName,
256
252
  uploadAssets,
257
253
  replaceAsset,
258
254
  selectAsset,
@@ -3,84 +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
 
22
- export const toggleTagFileName = (toggle: boolean): any => ({
23
- type: assetUploadsActions.TOGGLE_TAG_BY_FILENAME,
24
- toggle
25
- });
26
-
27
- export const toggleAssignToStory = (toggle: boolean): any => ({
28
- type: assetUploadsActions.TOGGLE_ASSIGN_TO_STORY,
29
- toggle
30
- });
31
-
32
- export const toggleTagDelimiter = (toggle: boolean): any => ({
33
- type: assetUploadsActions.TOGGLE_TAG_BY_DELIMITER,
34
- toggle
35
- });
36
-
37
- export const setDelimiter = (delimiter: string): any => ({
38
- type: assetUploadsActions.SET_DELIMITER,
39
- delimiter
40
- });
41
-
42
- export const toggleManualTagging = (toggle: boolean): any => ({
43
- type: assetUploadsActions.TOGGLE_MANUAL_TAGGING,
44
- toggle
45
- });
46
-
47
- export const addManualTag = (tag: string): any => ({
48
- type: assetUploadsActions.ADD_MANUAL_TAG,
49
- tag
50
- });
51
-
52
- export const deleteManualTag = (tag: string): any => ({
53
- type: assetUploadsActions.DELETE_MANUAL_TAG,
54
- tag
55
- });
56
-
57
- export const deleteManualTags = (): any => ({
58
- type: assetUploadsActions.DELETE_MANUAL_TAGS
59
- });
15
+ let uploadFiles: File[] = [];
16
+ let setBindToOverlay;
60
17
 
61
18
  export const uploadAssets = (
62
19
  api: IImposiumAPI,
63
20
  files: File[],
64
- storyId: string,
65
21
  bindToOverlay?: (f: any) => any
66
22
  ): any => {
67
23
  return (dispatch, getStore) => {
68
24
  const {
69
- assetUploads: {
70
- uploads,
71
- assignToStory,
72
- tagByFileName,
73
- tagByDelimiter,
74
- delimiter,
75
- tagManually,
76
- manualTags
25
+ assetUploads: { uploads },
26
+ editor: {
27
+ showUploadsMenu,
28
+ assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
77
29
  }
78
30
  } = getStore();
79
- let currentQueue: number = 0;
80
- let ongoingJobs: any[] = [];
81
- const filesLength = files.length > 5 ? 4 : files.length - 1;
82
31
 
83
- const uploadBlobs: any[] = files.map((file: File) => {
32
+ uploadFiles.push(...files);
33
+ setBindToOverlay = bindToOverlay;
34
+
35
+ files.map((file: File) => {
84
36
  const uploadsWithSameName: any[] = uploads.filter((u: any) =>
85
37
  u.filename.includes(file.name)
86
38
  );
@@ -92,11 +44,11 @@ export const uploadAssets = (
92
44
  let tags = [];
93
45
 
94
46
  if (tagByFileName) {
95
- tags = tags.concat(file.name.substr(0, file.name.lastIndexOf('.')));
47
+ tags = tags.concat(file.name.slice(0, file.name.lastIndexOf('.')));
96
48
  }
97
49
 
98
50
  if (tagByDelimiter) {
99
- const tag = file.name.substr(0, file.name.lastIndexOf('.')).split(delimiter);
51
+ const tag = file.name.slice(0, file.name.lastIndexOf('.')).split(delimiter);
100
52
  tags = [...new Set([...tags, ...tag])];
101
53
  }
102
54
 
@@ -104,7 +56,100 @@ export const uploadAssets = (
104
56
  tags = [...new Set([...tags, ...manualTags])];
105
57
  }
106
58
 
107
- 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
+ }
108
153
 
109
154
  const onUploadProgress = (progress: any): void => {
110
155
  dispatch({
@@ -114,76 +159,96 @@ export const uploadAssets = (
114
159
  });
115
160
  };
116
161
 
117
- dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
162
+ const uploadMeta: any = { filename, percent: 0, tags };
163
+
164
+ uploadMetaArray.push(uploadMeta);
118
165
 
119
166
  return { file, tags, filename, onUploadProgress };
120
167
  });
121
168
 
169
+ dispatch({ type: assetUploadsActions.UPDATE_UPLOAD, uploadMetaArray });
170
+
171
+ const filesLength = uploadFiles.length > 5 ? 4 : uploadFiles.length - 1;
172
+
122
173
  const createPromise = (activeIndex: number) => {
123
174
  const queueLength: number = uploadBlobs.length;
124
175
  const sId = assignToStory && storyId ? storyId : null;
125
176
  const processingTimeout: number = -1;
126
- api.uploadAsset(
127
- sId,
128
- uploadBlobs[activeIndex].tags,
129
- uploadBlobs[activeIndex].file,
130
- uploadBlobs[activeIndex].onUploadProgress,
131
- uploadBlobs[activeIndex].filename
132
- )
133
- .then((result) => {
134
- const currentOngoingJobs = () => {
135
- if (bindToOverlay) {
136
- bindToOverlay(result[0]);
137
- }
138
- return {
139
- footageId: result[0].id,
140
- jobId: result[0].job_id,
141
- filename: uploadBlobs[activeIndex].filename,
142
- onProcessed: () => {
143
- const fileName = ongoingJobs.filter(
144
- (job: any) => job.jobId === result[0].job_id
145
- )[0].filename;
146
- dispatch({
147
- type: assetUploadsActions.REMOVE_UPLOAD,
148
- filename: fileName
149
- });
150
- 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
+ uploadFiles = uploadFiles.filter((f) => f.name !== filename);
192
+ dispatch({
193
+ type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
194
+ assetId: result[0].id,
195
+ filename
196
+ });
197
+ const currentOngoingJobs = () => {
198
+ if (setBindToOverlay) {
199
+ setBindToOverlay(result[0]);
151
200
  }
201
+ return {
202
+ footageId: result[0].id,
203
+ jobId: result[0].job_id,
204
+ filename: uploadBlobs[activeIndex].filename,
205
+ onProcessed: () => {
206
+ const fileName = ongoingJobs.filter(
207
+ (job: any) => job.jobId === result[0].job_id
208
+ )[0].filename;
209
+ dispatch({
210
+ type: assetUploadsActions.REMOVE_UPLOAD,
211
+ filename: fileName
212
+ });
213
+ doAssetTableHydration(api, storyId);
214
+ }
215
+ };
152
216
  };
153
- };
154
- ongoingJobs.push(currentOngoingJobs());
155
- if (currentQueue !== queueLength - 1) {
156
- currentQueue = currentQueue + 1;
157
- createPromise(currentQueue);
158
- } else {
159
- ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
160
- const jobIdExists: boolean = typeof j.jobId === 'string';
161
- if (!jobIdExists) {
162
- dispatch({
163
- type: assetUploadsActions.REMOVE_UPLOAD,
164
- filename: j.filename
165
- });
166
- doAssetTableHydration(api, storyId);
217
+ ongoingJobs.push(currentOngoingJobs());
218
+ if (currentQueue !== queueLength - 1) {
219
+ currentQueue = currentQueue + 1;
220
+ createPromise(currentQueue);
221
+ } else {
222
+ ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
223
+ const jobIdExists: boolean = typeof j.jobId === 'string';
224
+ if (!jobIdExists) {
225
+ dispatch({
226
+ type: assetUploadsActions.REMOVE_UPLOAD,
227
+ filename: j.filename
228
+ });
229
+ doAssetTableHydration(api, storyId);
230
+ }
231
+ return jobIdExists;
232
+ });
233
+ if (ongoingJobs.length > 0) {
234
+ pollAssetJobs(api, ongoingJobs, processingTimeout);
167
235
  }
168
- return jobIdExists;
169
- });
170
- if (ongoingJobs.length > 0) {
171
- pollAssetJobs(api, ongoingJobs, processingTimeout);
172
236
  }
173
- }
174
- })
175
- .catch((e: Error[]) => {
176
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
177
- currentQueue = currentQueue + 1;
178
- createPromise(currentQueue);
179
- }
180
- });
237
+ })
238
+ .catch((e: Error[]) => {
239
+ if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
240
+ currentQueue = currentQueue + 1;
241
+ createPromise(currentQueue);
242
+ }
243
+ });
244
+ }
181
245
  };
246
+
182
247
  for (let i = 0; i <= filesLength; i++) {
183
248
  createPromise(i);
184
249
  currentQueue = i;
185
250
  }
186
- };
251
+ }
187
252
  };
188
253
 
189
254
  export const replaceAsset = (
@@ -193,95 +258,103 @@ export const replaceAsset = (
193
258
  storyId: string
194
259
  ): any => {
195
260
  return (dispatch, getStore) => {
196
- const {
197
- assetUploads: { uploads }
198
- } = getStore();
199
- let currentQueue: number = 0;
200
- let ongoingJobs: any[] = [];
201
- const filesLength = files.length > 5 ? 4 : files.length - 1;
261
+ return new Promise<void>((resolve) => {
262
+ const {
263
+ assetUploads: { uploads }
264
+ } = getStore();
265
+ let currentQueue: number = 0;
266
+ let ongoingJobs: any[] = [];
267
+ const filesLength = files.length > 5 ? 4 : files.length - 1;
268
+
269
+ const replacedFileBlobs: any[] = files.map((file: File) => {
270
+ const uploadsWithSameName: any[] = uploads.filter((u: any) =>
271
+ u.filename.includes(file.name)
272
+ );
273
+ const filename: string =
274
+ uploadsWithSameName.length > 0
275
+ ? `${file.name} (${uploadsWithSameName.length})`
276
+ : file.name;
277
+
278
+ const uploadMeta: any = { filename, percent: 0 };
279
+
280
+ const onUploadProgress = (progress: any): void => {
281
+ dispatch({
282
+ type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
283
+ percent: Math.floor((progress.loaded * 100) / progress.total),
284
+ filename
285
+ });
286
+ };
287
+
288
+ dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
289
+
290
+ return { file, filename, onUploadProgress };
291
+ });
202
292
 
203
- const uploadBlobs: any[] = files.map((file: File) => {
204
- const uploadsWithSameName: any[] = uploads.filter((u: any) =>
205
- u.filename.includes(file.name)
206
- );
207
- const filename: string =
208
- uploadsWithSameName.length > 0
209
- ? `${file.name} (${uploadsWithSameName.length})`
210
- : file.name;
293
+ const createPromise = (activeIndex: number) => {
294
+ const queueLength: number = replacedFileBlobs.length;
295
+ const processingTimeout: number = -1;
296
+ api.replaceAsset(
297
+ assetId,
298
+ replacedFileBlobs[activeIndex].file,
299
+ replacedFileBlobs[activeIndex].onUploadProgress,
300
+ replacedFileBlobs[activeIndex].filename
301
+ )
302
+ .then((result) => {
303
+ const currentOngoingJobs = () => {
304
+ return {
305
+ filename: replacedFileBlobs[activeIndex].filename,
306
+ onProcessed: () => {
307
+ const fileName = ongoingJobs.filter(
308
+ (job: any) => job.jobId === result[0].job_id
309
+ )[0].filename;
310
+ dispatch({
311
+ type: assetUploadsActions.REMOVE_UPLOAD,
312
+ filename: fileName
313
+ });
314
+ doAssetTableHydration(api, storyId);
315
+ }
316
+ };
317
+ };
211
318
 
212
- const uploadMeta: any = { filename, percent: 0 };
319
+ ongoingJobs.push(currentOngoingJobs());
320
+
321
+ if (currentQueue !== queueLength - 1) {
322
+ currentQueue = currentQueue + 1;
323
+ createPromise(currentQueue);
324
+ } else {
325
+ ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
326
+ const jobIdExists: boolean = typeof j.jobId === 'string';
327
+
328
+ if (!jobIdExists) {
329
+ dispatch({
330
+ type: assetUploadsActions.REMOVE_UPLOAD,
331
+ filename: j.filename
332
+ });
333
+ doAssetTableHydration(api, storyId);
334
+ }
335
+ return jobIdExists;
336
+ });
337
+
338
+ if (ongoingJobs.length > 0) {
339
+ pollAssetJobs(api, ongoingJobs, processingTimeout);
340
+ }
341
+ }
213
342
 
214
- const onUploadProgress = (progress: any): void => {
215
- dispatch({
216
- type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
217
- percent: Math.floor((progress.loaded * 100) / progress.total),
218
- filename
219
- });
343
+ resolve(result);
344
+ })
345
+ .catch((e: Error[]) => {
346
+ if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
347
+ currentQueue = currentQueue + 1;
348
+ createPromise(currentQueue);
349
+ }
350
+ });
220
351
  };
221
352
 
222
- dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
223
-
224
- return { file, filename, onUploadProgress };
353
+ for (let i = 0; i <= filesLength; i++) {
354
+ createPromise(i);
355
+ currentQueue = i;
356
+ }
225
357
  });
226
-
227
- const createPromise = (activeIndex: number) => {
228
- const queueLength: number = uploadBlobs.length;
229
- const processingTimeout: number = -1;
230
- api.replaceAsset(
231
- assetId,
232
- uploadBlobs[activeIndex].file,
233
- uploadBlobs[activeIndex].onUploadProgress,
234
- uploadBlobs[activeIndex].filename
235
- )
236
- .then((result) => {
237
- const currentOngoingJobs = () => {
238
- return {
239
- filename: uploadBlobs[activeIndex].filename,
240
- onProcessed: () => {
241
- const fileName = ongoingJobs.filter(
242
- (job: any) => job.jobId === result[0].job_id
243
- )[0].filename;
244
- dispatch({
245
- type: assetUploadsActions.REMOVE_UPLOAD,
246
- filename: fileName
247
- });
248
- doAssetTableHydration(api, storyId);
249
- }
250
- };
251
- };
252
- ongoingJobs.push(currentOngoingJobs());
253
- if (currentQueue !== queueLength - 1) {
254
- currentQueue = currentQueue + 1;
255
- createPromise(currentQueue);
256
- } else {
257
- ongoingJobs = ongoingJobs.filter((j: any, i: number) => {
258
- const jobIdExists: boolean = typeof j.jobId === 'string';
259
- if (!jobIdExists) {
260
- dispatch({
261
- type: assetUploadsActions.REMOVE_UPLOAD,
262
- filename: j.filename
263
- });
264
- doAssetTableHydration(api, storyId);
265
- }
266
- return jobIdExists;
267
- });
268
- if (ongoingJobs.length > 0) {
269
- pollAssetJobs(api, ongoingJobs, processingTimeout);
270
- }
271
- }
272
- })
273
- .catch((e: Error[]) => {
274
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
275
- currentQueue = currentQueue + 1;
276
- createPromise(currentQueue);
277
- }
278
- });
279
- };
280
-
281
- for (let i = 0; i <= filesLength; i++) {
282
- createPromise(i);
283
- currentQueue = i;
284
- }
285
358
  };
286
359
  };
287
360
 
@@ -322,13 +395,40 @@ const pollAssetJobs = (api, ongoingJobs: any[], timeout: number): void => {
322
395
  }, POLL_INTERVAL);
323
396
  };
324
397
 
325
- export const cancelAssetUpload = (fileName: string, api: IImposiumAPI): any => {
398
+ const removeUploadHander = (fileName: string, api: IImposiumAPI, dispatch): any => {
399
+ uploadFiles = uploadFiles.filter((f) => f.name !== fileName);
400
+ api.cancelUploadAssets(fileName);
401
+ dispatch({
402
+ type: assetUploadsActions.REMOVE_UPLOAD,
403
+ filename: fileName
404
+ });
405
+ };
406
+
407
+ export const cancelAssetUpload = (fileName: string, api: IImposiumAPI, assetId: string): any => {
326
408
  return (dispatch) => {
327
- api.cancelUploadAssets(fileName);
328
- dispatch({
329
- type: assetUploadsActions.REMOVE_UPLOAD,
330
- filename: fileName
331
- });
409
+ if (assetId) {
410
+ api.deleteAsset(assetId)
411
+ .then()
412
+ .catch((e) => console.error(e));
413
+ }
414
+ removeUploadHander(fileName, api, dispatch);
415
+ };
416
+ };
417
+
418
+ export const cancelNonUploadedAssets = (api: IImposiumAPI): any => {
419
+ return (dispatch, getStore) => {
420
+ const {
421
+ assetUploads: { uploads }
422
+ } = getStore();
423
+
424
+ if (uploads.length > 0) {
425
+ for (const file of uploads) {
426
+ const upload = uploads.find((f) => f.filename === file.filename);
427
+ if (upload.percent === 0) {
428
+ removeUploadHander(file.filename, api, dispatch);
429
+ }
430
+ }
431
+ }
332
432
  };
333
433
  };
334
434