@imposium-hub/components 2.2.44-1 → 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 (196) hide show
  1. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  2. package/dist/cjs/components/anchor-field/AnchorField.d.ts +1 -1
  3. package/dist/cjs/components/assets/AssetsTableGlobalCell.d.ts +6 -0
  4. package/dist/cjs/components/assets/AssetsTableGlobalCell.js +33 -0
  5. package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -0
  6. package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -1
  7. package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
  8. package/dist/cjs/components/assets/AssetsTablePreviewCell.d.ts +1 -1
  9. package/dist/cjs/components/assets/AssetsTableRateCell.js +9 -3
  10. package/dist/cjs/components/assets/AssetsTableRateCell.js.map +1 -1
  11. package/dist/cjs/components/assets/AssetsUploadMenu.js +162 -33
  12. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  13. package/dist/cjs/components/assets/FontAssetPreview.d.ts +1 -1
  14. package/dist/cjs/components/button/Button.d.ts +1 -1
  15. package/dist/cjs/components/button/Button.stories.d.ts +6 -5
  16. package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +2 -1
  17. package/dist/cjs/components/button-menu/ButtonMenu.d.ts +2 -2
  18. package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +2 -1
  19. package/dist/cjs/components/button-menu/ButtonMenuItem.d.ts +1 -1
  20. package/dist/cjs/components/card/Card.stories.d.ts +2 -1
  21. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
  22. package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +2 -1
  23. package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
  24. package/dist/cjs/components/color-field/ColorField.js +2 -2
  25. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  26. package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +2 -1
  27. package/dist/cjs/components/compositions/TextLayer.d.ts +1 -1
  28. package/dist/cjs/components/context-menu/AnimateComponent.d.ts +2 -1
  29. package/dist/cjs/components/context-menu/ContextMenu.d.ts +2 -1
  30. package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +2 -1
  31. package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +2 -1
  32. package/dist/cjs/components/context-menu/SubMenu.d.ts +2 -1
  33. package/dist/cjs/components/controlled-list/ControlledList.d.ts +2 -2
  34. package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +2 -1
  35. package/dist/cjs/components/data-table/DataTable.js +2 -2
  36. package/dist/cjs/components/data-table/DataTable.js.map +1 -1
  37. package/dist/cjs/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -3
  38. package/dist/cjs/components/dropdown/Dropdown.d.ts +1 -1
  39. package/dist/cjs/components/dropdown/dropdown.stories.d.ts +1 -1
  40. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +2 -2
  41. package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +2 -1
  42. package/dist/cjs/components/font-picker/FontPicker.d.ts +1 -1
  43. package/dist/cjs/components/h-rule/HRule.d.ts +2 -1
  44. package/dist/cjs/components/h-rule/HRule.stories.d.ts +3 -2
  45. package/dist/cjs/components/list-field/ListField.d.ts +1 -1
  46. package/dist/cjs/components/list-field/ListField.stories.d.ts +2 -1
  47. package/dist/cjs/components/log-viewer/LogViewer.d.ts +1 -1
  48. package/dist/cjs/components/media-variable-field/MediaVariableField.d.ts +1 -1
  49. package/dist/cjs/components/modal/Modal.d.ts +1 -1
  50. package/dist/cjs/components/modal/Modal.stories.d.ts +2 -1
  51. package/dist/cjs/components/number-field/NumberField.d.ts +1 -1
  52. package/dist/cjs/components/number-field/NumberField.stories.d.ts +2 -1
  53. package/dist/cjs/components/players/AudioPlayer.d.ts +1 -1
  54. package/dist/cjs/components/players/AudioPreview.d.ts +1 -1
  55. package/dist/cjs/components/players/ImagePlayer.d.ts +1 -1
  56. package/dist/cjs/components/players/ImagePreview.d.ts +1 -1
  57. package/dist/cjs/components/players/ImageSequencePlayer.d.ts +1 -1
  58. package/dist/cjs/components/players/TemplatePlayer.d.ts +1 -1
  59. package/dist/cjs/components/players/VideoPreview.d.ts +1 -1
  60. package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +3 -3
  61. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  62. package/dist/cjs/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  63. package/dist/cjs/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  64. package/dist/cjs/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  65. package/dist/cjs/components/section/Section.d.ts +2 -1
  66. package/dist/cjs/components/section/Section.stories.d.ts +3 -2
  67. package/dist/cjs/components/select-field/SelectField.d.ts +1 -1
  68. package/dist/cjs/components/select-field/SelectField.stories.d.ts +2 -1
  69. package/dist/cjs/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -1
  70. package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
  71. package/dist/cjs/components/slider-field/SliderField.stories.d.ts +2 -1
  72. package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
  73. package/dist/cjs/components/tabs/Tabs.stories.d.ts +1 -1
  74. package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
  75. package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +2 -1
  76. package/dist/cjs/components/text-field/TextField.d.ts +1 -1
  77. package/dist/cjs/components/text-field/TextField.stories.d.ts +2 -1
  78. package/dist/cjs/constants/copy.d.ts +1 -0
  79. package/dist/cjs/constants/copy.js +4 -3
  80. package/dist/cjs/constants/copy.js.map +1 -1
  81. package/dist/cjs/constants/icons.d.ts +71 -70
  82. package/dist/cjs/index.d.ts +3 -2
  83. package/dist/cjs/index.js +3 -2
  84. package/dist/cjs/index.js.map +1 -1
  85. package/dist/cjs/redux/actions/asset-uploads.d.ts +5 -10
  86. package/dist/cjs/redux/actions/asset-uploads.js +258 -177
  87. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  88. package/dist/cjs/redux/reducers/asset-uploads.js +10 -24
  89. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  90. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  91. package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
  92. package/dist/esm/components/assets/AssetsTableGlobalCell.d.ts +6 -0
  93. package/dist/esm/components/assets/AssetsTableGlobalCell.js +8 -0
  94. package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -0
  95. package/dist/esm/components/assets/AssetsTableNameCell.js +2 -1
  96. package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
  97. package/dist/esm/components/assets/AssetsTablePreviewCell.d.ts +1 -1
  98. package/dist/esm/components/assets/AssetsTableRateCell.js +9 -3
  99. package/dist/esm/components/assets/AssetsTableRateCell.js.map +1 -1
  100. package/dist/esm/components/assets/AssetsUploadMenu.js +144 -33
  101. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  102. package/dist/esm/components/assets/FontAssetPreview.d.ts +1 -1
  103. package/dist/esm/components/button/Button.d.ts +1 -1
  104. package/dist/esm/components/button/Button.stories.d.ts +6 -5
  105. package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +2 -1
  106. package/dist/esm/components/button-menu/ButtonMenu.d.ts +2 -2
  107. package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +2 -1
  108. package/dist/esm/components/button-menu/ButtonMenuItem.d.ts +1 -1
  109. package/dist/esm/components/card/Card.stories.d.ts +2 -1
  110. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
  111. package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +2 -1
  112. package/dist/esm/components/color-field/ColorField.d.ts +1 -1
  113. package/dist/esm/components/color-field/ColorField.js +2 -2
  114. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  115. package/dist/esm/components/color-field/ColorFiled.stories.d.ts +2 -1
  116. package/dist/esm/components/compositions/TextLayer.d.ts +1 -1
  117. package/dist/esm/components/context-menu/AnimateComponent.d.ts +2 -1
  118. package/dist/esm/components/context-menu/ContextMenu.d.ts +2 -1
  119. package/dist/esm/components/context-menu/ContextMenuItem.d.ts +2 -1
  120. package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +2 -1
  121. package/dist/esm/components/context-menu/SubMenu.d.ts +2 -1
  122. package/dist/esm/components/controlled-list/ControlledList.d.ts +2 -2
  123. package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +2 -1
  124. package/dist/esm/components/data-table/DataTable.js +2 -2
  125. package/dist/esm/components/data-table/DataTable.js.map +1 -1
  126. package/dist/esm/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -3
  127. package/dist/esm/components/dropdown/Dropdown.d.ts +1 -1
  128. package/dist/esm/components/dropdown/dropdown.stories.d.ts +1 -1
  129. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +2 -2
  130. package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +2 -1
  131. package/dist/esm/components/font-picker/FontPicker.d.ts +1 -1
  132. package/dist/esm/components/h-rule/HRule.d.ts +2 -1
  133. package/dist/esm/components/h-rule/HRule.stories.d.ts +3 -2
  134. package/dist/esm/components/list-field/ListField.d.ts +1 -1
  135. package/dist/esm/components/list-field/ListField.stories.d.ts +2 -1
  136. package/dist/esm/components/log-viewer/LogViewer.d.ts +1 -1
  137. package/dist/esm/components/media-variable-field/MediaVariableField.d.ts +1 -1
  138. package/dist/esm/components/modal/Modal.d.ts +1 -1
  139. package/dist/esm/components/modal/Modal.stories.d.ts +2 -1
  140. package/dist/esm/components/number-field/NumberField.d.ts +1 -1
  141. package/dist/esm/components/number-field/NumberField.stories.d.ts +2 -1
  142. package/dist/esm/components/players/AudioPlayer.d.ts +1 -1
  143. package/dist/esm/components/players/AudioPreview.d.ts +1 -1
  144. package/dist/esm/components/players/ImagePlayer.d.ts +1 -1
  145. package/dist/esm/components/players/ImagePreview.d.ts +1 -1
  146. package/dist/esm/components/players/ImageSequencePlayer.d.ts +1 -1
  147. package/dist/esm/components/players/TemplatePlayer.d.ts +1 -1
  148. package/dist/esm/components/players/VideoPreview.d.ts +1 -1
  149. package/dist/esm/components/publish-wizard/PublishWizard.d.ts +3 -3
  150. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  151. package/dist/esm/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  152. package/dist/esm/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  153. package/dist/esm/components/publish-wizard/publish/WebpageHosted.d.ts +2 -2
  154. package/dist/esm/components/section/Section.d.ts +2 -1
  155. package/dist/esm/components/section/Section.stories.d.ts +3 -2
  156. package/dist/esm/components/select-field/SelectField.d.ts +1 -1
  157. package/dist/esm/components/select-field/SelectField.stories.d.ts +2 -1
  158. package/dist/esm/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -1
  159. package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
  160. package/dist/esm/components/slider-field/SliderField.stories.d.ts +2 -1
  161. package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
  162. package/dist/esm/components/tabs/Tabs.stories.d.ts +1 -1
  163. package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
  164. package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +2 -1
  165. package/dist/esm/components/text-field/TextField.d.ts +1 -1
  166. package/dist/esm/components/text-field/TextField.stories.d.ts +2 -1
  167. package/dist/esm/constants/copy.d.ts +1 -0
  168. package/dist/esm/constants/copy.js +4 -3
  169. package/dist/esm/constants/copy.js.map +1 -1
  170. package/dist/esm/constants/icons.d.ts +71 -70
  171. package/dist/esm/index.d.ts +3 -2
  172. package/dist/esm/index.js +3 -2
  173. package/dist/esm/index.js.map +1 -1
  174. package/dist/esm/redux/actions/asset-uploads.d.ts +5 -10
  175. package/dist/esm/redux/actions/asset-uploads.js +221 -162
  176. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  177. package/dist/esm/redux/reducers/asset-uploads.js +15 -47
  178. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  179. package/dist/esm/utils/assets.d.ts +1 -0
  180. package/dist/styles.css +90 -2
  181. package/dist/styles.less +172 -73
  182. package/less/components/assets.less +154 -63
  183. package/less/components/data-table.less +17 -11
  184. package/less/components/story-previewer.less +1 -0
  185. package/package.json +4 -4
  186. package/src/components/assets/AssetsTableGlobalCell.tsx +15 -0
  187. package/src/components/assets/AssetsTableNameCell.tsx +2 -1
  188. package/src/components/assets/AssetsTableRateCell.tsx +11 -4
  189. package/src/components/assets/AssetsUploadMenu.tsx +282 -97
  190. package/src/components/color-field/ColorField.tsx +2 -2
  191. package/src/components/data-table/DataTable.tsx +2 -2
  192. package/src/components/publish-wizard/PublishWizard.tsx +0 -1
  193. package/src/constants/copy.ts +4 -3
  194. package/src/index.ts +3 -7
  195. package/src/redux/actions/asset-uploads.ts +301 -200
  196. package/src/redux/reducers/asset-uploads.ts +17 -47
@@ -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
+ const 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,95 @@ 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
+ 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]);
151
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
+ };
152
215
  };
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);
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);
167
234
  }
168
- return jobIdExists;
169
- });
170
- if (ongoingJobs.length > 0) {
171
- pollAssetJobs(api, ongoingJobs, processingTimeout);
172
235
  }
173
- }
174
- })
175
- .catch((e: Error[]) => {
176
- if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
177
- currentQueue = currentQueue + 1;
178
- createPromise(currentQueue);
179
- }
180
- });
236
+ })
237
+ .catch((e: Error[]) => {
238
+ if (axios.isCancel(e) && currentQueue !== queueLength - 1) {
239
+ currentQueue = currentQueue + 1;
240
+ createPromise(currentQueue);
241
+ }
242
+ });
243
+ }
181
244
  };
245
+
182
246
  for (let i = 0; i <= filesLength; i++) {
183
247
  createPromise(i);
184
248
  currentQueue = i;
185
249
  }
186
- };
250
+ }
187
251
  };
188
252
 
189
253
  export const replaceAsset = (
@@ -193,95 +257,103 @@ export const replaceAsset = (
193
257
  storyId: string
194
258
  ): any => {
195
259
  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;
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;
267
+
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;
276
+
277
+ const uploadMeta: any = { filename, percent: 0 };
278
+
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
+ };
286
+
287
+ dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
288
+
289
+ return { file, filename, onUploadProgress };
290
+ });
202
291
 
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;
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
+ };
316
+ };
211
317
 
212
- const uploadMeta: any = { filename, percent: 0 };
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);
339
+ }
340
+ }
213
341
 
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
- });
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
+ });
220
350
  };
221
351
 
222
- dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
223
-
224
- return { file, filename, onUploadProgress };
352
+ for (let i = 0; i <= filesLength; i++) {
353
+ createPromise(i);
354
+ currentQueue = i;
355
+ }
225
356
  });
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
357
  };
286
358
  };
287
359
 
@@ -322,9 +394,17 @@ const pollAssetJobs = (api, ongoingJobs: any[], timeout: number): void => {
322
394
  }, POLL_INTERVAL);
323
395
  };
324
396
 
325
- export const cancelAssetUpload = (fileName: string, api: IImposiumAPI): any => {
397
+ export const cancelAssetUpload = (fileName: string, api: IImposiumAPI, assetId: string): any => {
326
398
  return (dispatch) => {
399
+ uploadFiles.filter((f) => {
400
+ return f.name !== fileName;
401
+ });
327
402
  api.cancelUploadAssets(fileName);
403
+ if (assetId) {
404
+ api.deleteAsset(assetId)
405
+ .then()
406
+ .catch((e) => console.error(e));
407
+ }
328
408
  dispatch({
329
409
  type: assetUploadsActions.REMOVE_UPLOAD,
330
410
  filename: fileName
@@ -332,4 +412,25 @@ export const cancelAssetUpload = (fileName: string, api: IImposiumAPI): any => {
332
412
  };
333
413
  };
334
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
+
335
436
  export default assetUploadsActions;
@@ -1,63 +1,20 @@
1
1
  import assetUploadsActions from '../actions/asset-uploads';
2
2
 
3
3
  const initialState: any = {
4
- tagByDelimiter: true,
5
- delimiter: '_',
6
- tagManually: false,
7
- manualTags: [],
8
- tagByFileName: false,
9
- assignToStory: true,
10
4
  uploads: []
11
5
  };
12
6
 
13
7
  const assetUploads = (state = initialState, action): any => {
14
8
  switch (action.type) {
15
- case assetUploadsActions.TOGGLE_TAG_BY_FILENAME:
16
- return {
17
- ...state,
18
- tagByFileName: action.toggle
19
- };
20
- case assetUploadsActions.TOGGLE_TAG_BY_DELIMITER:
21
- return {
22
- ...state,
23
- tagByDelimiter: action.toggle
24
- };
25
- case assetUploadsActions.SET_DELIMITER:
26
- return {
27
- ...state,
28
- delimiter: action.delimiter
29
- };
30
- case assetUploadsActions.TOGGLE_MANUAL_TAGGING:
31
- return {
32
- ...state,
33
- tagManually: action.toggle
34
- };
35
- case assetUploadsActions.ADD_MANUAL_TAG:
36
- const newManualTags = [...state.manualTags];
37
- newManualTags.push(action.tag);
38
- return {
39
- ...state,
40
- manualTags: newManualTags
41
- };
42
- case assetUploadsActions.DELETE_MANUAL_TAG:
43
- return {
44
- ...state,
45
- manualTags: state.manualTags.filter((t: string) => t !== action.tag)
46
- };
47
- case assetUploadsActions.DELETE_MANUAL_TAGS:
48
- return {
49
- ...state,
50
- manualTags: []
51
- };
52
- case assetUploadsActions.TOGGLE_ASSIGN_TO_STORY:
9
+ case assetUploadsActions.ADD_UPLOAD:
53
10
  return {
54
11
  ...state,
55
- assignToStory: action.toggle
12
+ uploads: [...state.uploads, action.uploadMeta]
56
13
  };
57
- case assetUploadsActions.ADD_UPLOAD:
14
+ case assetUploadsActions.UPDATE_UPLOAD:
58
15
  return {
59
16
  ...state,
60
- uploads: [...state.uploads, action.uploadMeta]
17
+ uploads: action.uploadMetaArray
61
18
  };
62
19
  case assetUploadsActions.UPDATE_PERCENT_UPLOADED:
63
20
  const newUploads = state.uploads.map((u: any) => {
@@ -72,6 +29,19 @@ const assetUploads = (state = initialState, action): any => {
72
29
  ...state,
73
30
  uploads: newUploads
74
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
+ };
75
45
  case assetUploadsActions.REMOVE_UPLOAD:
76
46
  return {
77
47
  ...state,