@imposium-hub/components 2.9.0-14 → 2.9.0-2

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 (205) hide show
  1. package/dist/cjs/Util.js +0 -6
  2. package/dist/cjs/Util.js.map +1 -1
  3. package/dist/cjs/components/app-wrapper/AppWrapper.js +0 -5
  4. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  5. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js +1 -1
  6. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
  7. package/dist/cjs/components/assets/AssetsTableNameFilter.js +1 -1
  8. package/dist/cjs/components/assets/AssetsTableNameFilter.js.map +1 -1
  9. package/dist/cjs/components/assets/AssetsTablePreviewCell.d.ts +0 -1
  10. package/dist/cjs/components/assets/AssetsTablePreviewCell.js +4 -7
  11. package/dist/cjs/components/assets/AssetsTablePreviewCell.js.map +1 -1
  12. package/dist/cjs/components/assets/AssetsTableTagsFilter.js +1 -1
  13. package/dist/cjs/components/assets/AssetsTableTagsFilter.js.map +1 -1
  14. package/dist/cjs/components/assets/AssetsUploadMenu.js +2 -4
  15. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  16. package/dist/cjs/components/auth-gate/AuthGate.d.ts +2 -0
  17. package/dist/cjs/components/auth-gate/AuthGate.js +105 -0
  18. package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -0
  19. package/dist/cjs/components/confirm-modal/ConfirmModal.js +2 -3
  20. package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
  21. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +0 -1
  22. package/dist/cjs/components/field-wrapper/FieldWrapper.js +8 -10
  23. package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
  24. package/dist/cjs/components/header/Header.js +7 -10
  25. package/dist/cjs/components/header/Header.js.map +1 -1
  26. package/dist/cjs/components/number-field/NumberField.d.ts +0 -1
  27. package/dist/cjs/components/number-field/NumberField.js +2 -5
  28. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  29. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +28 -61
  30. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  31. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +0 -1
  32. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +12 -34
  33. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
  34. package/dist/cjs/components/slider-field/SliderField.d.ts +0 -2
  35. package/dist/cjs/components/slider-field/SliderField.js +8 -17
  36. package/dist/cjs/components/slider-field/SliderField.js.map +1 -1
  37. package/dist/cjs/components/story-previewer/StoryPreviewer.js +3 -17
  38. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  39. package/dist/cjs/components/tabs/Tabs.js +1 -2
  40. package/dist/cjs/components/tabs/Tabs.js.map +1 -1
  41. package/dist/cjs/components/text-field/TextField.d.ts +0 -1
  42. package/dist/cjs/components/text-field/TextField.js +2 -2
  43. package/dist/cjs/components/text-field/TextField.js.map +1 -1
  44. package/dist/cjs/constants/copy.d.ts +1 -5
  45. package/dist/cjs/constants/copy.js +2 -6
  46. package/dist/cjs/constants/copy.js.map +1 -1
  47. package/dist/cjs/constants/icons.d.ts +0 -2
  48. package/dist/cjs/constants/icons.js +1 -3
  49. package/dist/cjs/constants/icons.js.map +1 -1
  50. package/dist/cjs/constants/publish.d.ts +0 -3
  51. package/dist/cjs/constants/publish.js +3 -5
  52. package/dist/cjs/constants/publish.js.map +1 -1
  53. package/dist/cjs/index.d.ts +1 -1
  54. package/dist/cjs/index.js +2 -2
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/redux/actions/asset-uploads.d.ts +1 -1
  57. package/dist/cjs/redux/actions/asset-uploads.js +119 -169
  58. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  59. package/dist/cjs/redux/actions/auth.d.ts +9 -0
  60. package/dist/cjs/redux/actions/auth.js +30 -0
  61. package/dist/cjs/redux/actions/auth.js.map +1 -0
  62. package/dist/cjs/redux/actions/publish.js +3 -11
  63. package/dist/cjs/redux/actions/publish.js.map +1 -1
  64. package/dist/cjs/redux/reducers/asset-uploads.js +1 -2
  65. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  66. package/dist/cjs/redux/reducers/auth.d.ts +3 -0
  67. package/dist/cjs/redux/reducers/auth.js +67 -0
  68. package/dist/cjs/redux/reducers/auth.js.map +1 -0
  69. package/dist/cjs/services/API.d.ts +10 -5
  70. package/dist/cjs/services/API.js +105 -36
  71. package/dist/cjs/services/API.js.map +1 -1
  72. package/dist/cjs/services/Auth0.d.ts +18 -0
  73. package/dist/cjs/services/Auth0.js +102 -0
  74. package/dist/cjs/services/Auth0.js.map +1 -0
  75. package/dist/cjs/services/Session.d.ts +26 -0
  76. package/dist/cjs/services/Session.js +155 -0
  77. package/dist/cjs/services/Session.js.map +1 -0
  78. package/dist/cjs/utils/modal.d.ts +0 -1
  79. package/dist/cjs/utils/modal.js +2 -3
  80. package/dist/cjs/utils/modal.js.map +1 -1
  81. package/dist/esm/Util.js +0 -6
  82. package/dist/esm/Util.js.map +1 -1
  83. package/dist/esm/components/app-wrapper/AppWrapper.js +0 -5
  84. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  85. package/dist/esm/components/assets/AssetsTableAssetIdFilter.js +1 -1
  86. package/dist/esm/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
  87. package/dist/esm/components/assets/AssetsTableNameFilter.js +1 -1
  88. package/dist/esm/components/assets/AssetsTableNameFilter.js.map +1 -1
  89. package/dist/esm/components/assets/AssetsTablePreviewCell.d.ts +0 -1
  90. package/dist/esm/components/assets/AssetsTablePreviewCell.js +5 -8
  91. package/dist/esm/components/assets/AssetsTablePreviewCell.js.map +1 -1
  92. package/dist/esm/components/assets/AssetsTableTagsFilter.js +1 -1
  93. package/dist/esm/components/assets/AssetsTableTagsFilter.js.map +1 -1
  94. package/dist/esm/components/assets/AssetsUploadMenu.js +3 -5
  95. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  96. package/dist/esm/components/auth-gate/AuthGate.d.ts +2 -0
  97. package/dist/esm/components/auth-gate/AuthGate.js +59 -0
  98. package/dist/esm/components/auth-gate/AuthGate.js.map +1 -0
  99. package/dist/esm/components/confirm-modal/ConfirmModal.js +2 -3
  100. package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
  101. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +0 -1
  102. package/dist/esm/components/field-wrapper/FieldWrapper.js +8 -10
  103. package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
  104. package/dist/esm/components/header/Header.js +5 -8
  105. package/dist/esm/components/header/Header.js.map +1 -1
  106. package/dist/esm/components/number-field/NumberField.d.ts +0 -1
  107. package/dist/esm/components/number-field/NumberField.js +2 -5
  108. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  109. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +19 -52
  110. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  111. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +0 -1
  112. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +12 -31
  113. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
  114. package/dist/esm/components/slider-field/SliderField.d.ts +0 -2
  115. package/dist/esm/components/slider-field/SliderField.js +8 -17
  116. package/dist/esm/components/slider-field/SliderField.js.map +1 -1
  117. package/dist/esm/components/story-previewer/StoryPreviewer.js +4 -13
  118. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  119. package/dist/esm/components/tabs/Tabs.js +1 -2
  120. package/dist/esm/components/tabs/Tabs.js.map +1 -1
  121. package/dist/esm/components/text-field/TextField.d.ts +0 -1
  122. package/dist/esm/components/text-field/TextField.js +2 -2
  123. package/dist/esm/components/text-field/TextField.js.map +1 -1
  124. package/dist/esm/constants/copy.d.ts +1 -5
  125. package/dist/esm/constants/copy.js +2 -6
  126. package/dist/esm/constants/copy.js.map +1 -1
  127. package/dist/esm/constants/icons.d.ts +0 -2
  128. package/dist/esm/constants/icons.js +1 -3
  129. package/dist/esm/constants/icons.js.map +1 -1
  130. package/dist/esm/constants/publish.d.ts +0 -3
  131. package/dist/esm/constants/publish.js +2 -4
  132. package/dist/esm/constants/publish.js.map +1 -1
  133. package/dist/esm/index.d.ts +1 -1
  134. package/dist/esm/index.js +1 -1
  135. package/dist/esm/index.js.map +1 -1
  136. package/dist/esm/redux/actions/asset-uploads.d.ts +1 -1
  137. package/dist/esm/redux/actions/asset-uploads.js +115 -165
  138. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  139. package/dist/esm/redux/actions/auth.d.ts +9 -0
  140. package/dist/esm/redux/actions/auth.js +25 -0
  141. package/dist/esm/redux/actions/auth.js.map +1 -0
  142. package/dist/esm/redux/actions/publish.js +3 -11
  143. package/dist/esm/redux/actions/publish.js.map +1 -1
  144. package/dist/esm/redux/reducers/asset-uploads.js +1 -2
  145. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  146. package/dist/esm/redux/reducers/auth.d.ts +3 -0
  147. package/dist/esm/redux/reducers/auth.js +27 -0
  148. package/dist/esm/redux/reducers/auth.js.map +1 -0
  149. package/dist/esm/services/API.d.ts +10 -5
  150. package/dist/esm/services/API.js +50 -16
  151. package/dist/esm/services/API.js.map +1 -1
  152. package/dist/esm/services/Auth0.d.ts +18 -0
  153. package/dist/esm/services/Auth0.js +68 -0
  154. package/dist/esm/services/Auth0.js.map +1 -0
  155. package/dist/esm/services/Session.d.ts +26 -0
  156. package/dist/esm/services/Session.js +107 -0
  157. package/dist/esm/services/Session.js.map +1 -0
  158. package/dist/esm/utils/modal.d.ts +0 -1
  159. package/dist/esm/utils/modal.js +1 -2
  160. package/dist/esm/utils/modal.js.map +1 -1
  161. package/dist/styles.css +6 -101
  162. package/dist/styles.less +58 -91
  163. package/less/components/assets.less +39 -5
  164. package/less/components/button-menu.less +0 -1
  165. package/less/components/button.less +19 -57
  166. package/less/components/form-field.less +0 -27
  167. package/less/components/story-previewer.less +1 -1
  168. package/package.json +5 -5
  169. package/src/Util.ts +0 -9
  170. package/src/components/app-wrapper/AppWrapper.tsx +0 -6
  171. package/src/components/assets/AssetsTableAssetIdFilter.tsx +0 -1
  172. package/src/components/assets/AssetsTableNameFilter.tsx +0 -1
  173. package/src/components/assets/AssetsTablePreviewCell.tsx +14 -10
  174. package/src/components/assets/AssetsTableTagsFilter.tsx +0 -1
  175. package/src/components/assets/AssetsUploadMenu.tsx +11 -20
  176. package/src/components/confirm-modal/ConfirmModal.tsx +2 -3
  177. package/src/components/field-wrapper/FieldWrapper.tsx +12 -16
  178. package/src/components/header/Header.tsx +5 -8
  179. package/src/components/number-field/NumberField.tsx +2 -6
  180. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +26 -77
  181. package/src/components/slider-field/SliderField.tsx +22 -44
  182. package/src/components/story-previewer/StoryPreviewer.tsx +8 -24
  183. package/src/components/tabs/Tabs.tsx +1 -2
  184. package/src/components/text-field/TextField.tsx +2 -5
  185. package/src/constants/copy.ts +2 -6
  186. package/src/constants/icons.tsx +1 -10
  187. package/src/constants/publish.ts +2 -7
  188. package/src/index.ts +1 -1
  189. package/src/redux/actions/asset-uploads.ts +162 -193
  190. package/src/redux/actions/publish.ts +3 -11
  191. package/src/redux/reducers/asset-uploads.ts +1 -2
  192. package/src/services/API.ts +82 -24
  193. package/src/utils/modal.ts +1 -3
  194. package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +0 -8
  195. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +0 -122
  196. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +0 -1
  197. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +0 -8
  198. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +0 -104
  199. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +0 -1
  200. package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +0 -8
  201. package/dist/esm/components/edit-guide-modal/EditGuideModal.js +0 -65
  202. package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +0 -1
  203. package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +0 -8
  204. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +0 -72
  205. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +0 -1
@@ -95,8 +95,7 @@ class Tabs extends React.PureComponent<ITabsProps, ITabsState> {
95
95
  const content = React.cloneElement(option.content, {
96
96
  active,
97
97
  width,
98
- height,
99
- key: option.key
98
+ height
100
99
  });
101
100
 
102
101
  contentArray.push(content);
@@ -46,7 +46,6 @@ interface ITextFieldProps {
46
46
  labelWidth?: string | number;
47
47
  className?: string;
48
48
  maxLength?: number;
49
- header?: boolean;
50
49
  }
51
50
 
52
51
  interface ITextFieldState {
@@ -488,8 +487,7 @@ class TextField extends React.PureComponent<ITextFieldProps, ITextFieldState> {
488
487
  }
489
488
 
490
489
  public render() {
491
- const { label, width, tooltip, info, labelPosition, labelWidth, className, header } =
492
- this.props;
490
+ const { label, width, tooltip, info, labelPosition, labelWidth, className } = this.props;
493
491
  return (
494
492
  <FieldWrapper
495
493
  customClass={`text-field ${className}`}
@@ -499,8 +497,7 @@ class TextField extends React.PureComponent<ITextFieldProps, ITextFieldState> {
499
497
  info={info}
500
498
  labelPosition={labelPosition}
501
499
  labelWidth={labelWidth}
502
- width={width}
503
- header={header}>
500
+ width={width}>
504
501
  {this.renderInput()}
505
502
  </FieldWrapper>
506
503
  );
@@ -28,11 +28,7 @@ export const assets = {
28
28
  assignToProjectInfo:
29
29
  'If selected, any assets uploaded will be available to use with all projects on the current organization.',
30
30
  uploadButton: 'Upload',
31
- cancelButton: 'Cancel',
32
- title: `An asset named "[name]" already exists in this project. Do you want to replace it with the one you're uploading?`,
33
- keepBoth: 'Keep Both',
34
- replace: 'Replace',
35
- applyAll: 'Apply To All'
31
+ cancelButton: 'Cancel'
36
32
  },
37
33
  tags: {
38
34
  add: 'Add new tag',
@@ -127,7 +123,6 @@ export const compositions = {
127
123
  };
128
124
 
129
125
  export const publish = {
130
- uploadAsAssets: 'Upload as Assets',
131
126
  noVariablesError:
132
127
  'No variables found on the project. Cannot proceed with publishing to Creative Manager until at least one variable is added to the project.',
133
128
  publishInProgress: 'Publish to Creative Manager in progress',
@@ -135,6 +130,7 @@ export const publish = {
135
130
  btnCrM: 'Creative Manager',
136
131
  creativeLibraryId: 'Creative Library ID',
137
132
  creativeId: 'Creative ID',
133
+ email: 'Notification Email',
138
134
  missingFields: 'Please provide the missing fields and try again!',
139
135
  crmPlacement: 'Creative Manager Placement Variables',
140
136
  crmData: `If your CSV batch data doesn't contain the required Creative Manager placement variables, or you would like to override them, enter the values below before you upload the batch data.`,
@@ -73,12 +73,7 @@ import {
73
73
  } from '@fortawesome/pro-light-svg-icons';
74
74
  import { faCircleSmall } from '@fortawesome/pro-solid-svg-icons/faCircleSmall';
75
75
  import { faClapperboardPlay } from '@fortawesome/pro-solid-svg-icons/faClapperboardPlay';
76
- import {
77
- faCloudArrowUp,
78
- faFileCirclePlus,
79
- faFilePen,
80
- faFilters
81
- } from '@fortawesome/pro-solid-svg-icons';
76
+ import { faCloudArrowUp, faFilters } from '@fortawesome/pro-solid-svg-icons';
82
77
  import { faCircleExclamation } from '@fortawesome/free-solid-svg-icons';
83
78
 
84
79
  export const ICON_VIDEO = <FontAwesomeIcon icon={faVideo} />;
@@ -228,7 +223,3 @@ export const ICON_UP_RIGHT_FROM_SQUARE = <FontAwesomeIcon icon={faUpRightFromSqu
228
223
  export const ICON_FILE_UPLOAD = <FontAwesomeIcon icon={faCloudArrowUp} />;
229
224
 
230
225
  export const ICON_FILE_ERROR = <FontAwesomeIcon icon={faCircleExclamation} />;
231
-
232
- export const ICON_FILE_ADD = <FontAwesomeIcon icon={faFileCirclePlus} />;
233
-
234
- export const ICON_FILE_REPLACE = <FontAwesomeIcon icon={faFilePen} />;
@@ -14,16 +14,11 @@ export const CRM_PLACEMENT_OPTIONS = [
14
14
  }
15
15
  ];
16
16
 
17
- export const ASSET_NAME_VAR = 'asset-name';
18
-
19
17
  export const CRM_PLACEMENT_VARS = [
20
18
  'creative_library_id',
21
19
  'creative_id',
22
20
  'version-name',
23
21
  'version-id',
24
- 'clickTag1'
22
+ 'clickTag1',
23
+ 'notificiaton_email'
25
24
  ];
26
-
27
- export const ADSTUDIO_POST_RENDER_ACTION = 'crm-adstudio';
28
-
29
- export const ASSETS_POST_RENDER_ACTION = 'crm-asset';
package/src/index.ts CHANGED
@@ -154,6 +154,7 @@ 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';
157
158
  import AssetsTableAssetIdCell from './components/assets/AssetsTableAssetIdCell';
158
159
  import { resetStoryFilter, updateStoryFilter } from './redux/actions/story-filter';
159
160
  import storyFilter from './redux/reducers/story-filter';
@@ -162,7 +163,6 @@ import { AppWrapper } from './components/app-wrapper/AppWrapper';
162
163
  import { pushRoute, replaceRoute } from './utils/routing';
163
164
  import { ProjectDropdown } from './components/header/ProjectDropdown';
164
165
  import { openConfirmModal } from './utils/modal';
165
- import { ConfirmModal, IConfirmModalProps } from './components/confirm-modal/ConfirmModal';
166
166
 
167
167
  export {
168
168
  ProjectDropdown,
@@ -4,7 +4,6 @@ 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',
8
7
  UPDATE_UPLOAD: 'assetUploads/UPDATE_UPLOAD',
9
8
  UPDATE_PERCENT_UPLOADED: 'assetUploads/UPDATE_PERCENT_UPLOADED',
10
9
  ADD_UPLOAD_ASSET_ID: 'assetUploads/ADD_UPLOAD_ASSET_ID',
@@ -17,35 +16,6 @@ const POLL_INTERVAL: number = 5000;
17
16
  let uploadFiles: File[] = [];
18
17
  let setBindToOverlay;
19
18
 
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
-
49
19
  export const uploadAssets = (
50
20
  api: IImposiumAPI,
51
21
  files: File[],
@@ -54,14 +24,17 @@ export const uploadAssets = (
54
24
  return (dispatch, getStore) => {
55
25
  const {
56
26
  assetUploads: { uploads },
57
- editor,
58
- editor: { showUploadsMenu, showUploadsDropdown }
27
+ editor: {
28
+ showUploadsMenu,
29
+ showUploadsDropdown,
30
+ assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
31
+ }
59
32
  } = getStore();
60
33
 
61
34
  uploadFiles.push(...files);
62
35
  setBindToOverlay = bindToOverlay;
63
36
 
64
- files.map((file: any) => {
37
+ files.map((file: File) => {
65
38
  const uploadsWithSameName: any[] = uploads.filter((u: any) =>
66
39
  u.filename.includes(file.name)
67
40
  );
@@ -70,7 +43,22 @@ export const uploadAssets = (
70
43
  ? `${file.name} (${uploadsWithSameName.length})`
71
44
  : file.name;
72
45
 
73
- const uploadMeta: any = getUploadMeta(filename, file, editor);
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 };
74
62
 
75
63
  dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
76
64
  });
@@ -83,13 +71,38 @@ export const uploadAssets = (
83
71
 
84
72
  export const updateUploadTags = (): any => {
85
73
  return (dispatch, getStore) => {
86
- const { editor } = getStore();
74
+ const {
75
+ editor: {
76
+ assetUploads: { tagByFileName, tagByDelimiter, delimiter, tagManually, manualTags }
77
+ }
78
+ } = getStore();
87
79
  const uploadMetaArray = [];
88
80
 
89
81
  if (uploadFiles.length > 0) {
90
- uploadFiles.map((file: any) => {
82
+ uploadFiles.map((file: File) => {
91
83
  const filename: string = file.name;
92
- const uploadMeta: any = getUploadMeta(filename, file, editor);
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 };
93
106
 
94
107
  uploadMetaArray.push(uploadMeta);
95
108
  });
@@ -108,10 +121,16 @@ export const uploadingAsset = (api: IImposiumAPI): any => {
108
121
  const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
109
122
  const {
110
123
  project: { storyId },
111
- editor,
112
124
  editor: {
113
125
  fromCrM,
114
- assetUploads: { assignToStory }
126
+ assetUploads: {
127
+ assignToStory,
128
+ tagByFileName,
129
+ tagByDelimiter,
130
+ delimiter,
131
+ tagManually,
132
+ manualTags
133
+ }
115
134
  },
116
135
  assetUploads: { uploads }
117
136
  } = getStore();
@@ -123,9 +142,27 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
123
142
  const sId = (assignToStory || fromCrM) && storyId ? storyId : null;
124
143
 
125
144
  if (uploadFiles.length > 0) {
126
- const uploadBlobs: any[] = uploadFiles.map((file: any) => {
145
+ const uploadBlobs: any[] = uploadFiles.map((file: File) => {
127
146
  const filename: string = file.name;
128
147
 
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
+
129
166
  const onUploadProgress = (progress: any): void => {
130
167
  dispatch({
131
168
  type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
@@ -135,12 +172,10 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
135
172
  });
136
173
  };
137
174
 
138
- const uploadMeta: any = getUploadMeta(filename, file, editor);
175
+ const uploadMeta: any = { filename, percent: 0, tags };
139
176
 
140
177
  uploadMetaArray.push(uploadMeta);
141
178
 
142
- const { tags } = uploadMeta;
143
-
144
179
  return { file, tags, filename, onUploadProgress };
145
180
  });
146
181
 
@@ -154,155 +189,79 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
154
189
  const isUploading =
155
190
  uploads.find((f) => f.filename === uploadBlobs[activeIndex].filename)?.percent > 0;
156
191
  if (!isUploading) {
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);
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);
178
226
  }
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
- };
194
227
  };
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);
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);
213
242
  }
243
+ return jobIdExists;
244
+ });
245
+ if (ongoingJobs.length > 0) {
246
+ pollAssetJobs(api, ongoingJobs, processingTimeout);
214
247
  }
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);
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];
244
257
  dispatch({
245
- type: assetUploadsActions.ADD_UPLOAD_ASSET_ID,
246
- assetId: result[0].id,
247
- filename
258
+ type: assetUploadsActions.ERROR,
259
+ filename: uploadBlobs[activeIndex].filename,
260
+ errorMsg
248
261
  });
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
- }
262
+ doAssetTableHydration(api, storyId);
263
+ }
264
+ });
306
265
  }
307
266
  };
308
267
 
@@ -315,39 +274,49 @@ const uploadAssetHandler = (api: IImposiumAPI, dispatch, getStore) => {
315
274
 
316
275
  export const replaceAsset = (
317
276
  api: IImposiumAPI,
277
+ assetId: any,
318
278
  files: File[],
319
279
  storyId: string,
320
- assetId?: any,
321
280
  bindToOverlay?: (f: any) => any
322
281
  ): any => {
323
- return (dispatch) => {
282
+ return (dispatch, getStore) => {
324
283
  return new Promise<void>((resolve) => {
284
+ const {
285
+ assetUploads: { uploads }
286
+ } = getStore();
325
287
  let currentQueue: number = 0;
326
288
  let ongoingJobs: any[] = [];
327
289
  const filesLength = files.length > 5 ? 4 : files.length - 1;
328
290
 
329
291
  const replacedFileBlobs: any[] = files.map((file: File) => {
330
- const uploadMeta: any = { filename: file.name, percent: 0 };
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 };
331
301
 
332
302
  const onUploadProgress = (progress: any): void => {
333
303
  dispatch({
334
304
  type: assetUploadsActions.UPDATE_PERCENT_UPLOADED,
335
305
  percent: Math.floor((progress.loaded * 100) / progress.total),
336
- filename: file.name
306
+ filename
337
307
  });
338
308
  };
339
309
 
340
310
  dispatch({ type: assetUploadsActions.ADD_UPLOAD, uploadMeta });
341
311
 
342
- return { file, filename: file.name, onUploadProgress };
312
+ return { file, filename, onUploadProgress };
343
313
  });
344
314
 
345
315
  const createPromise = (activeIndex: number) => {
346
316
  const queueLength: number = replacedFileBlobs.length;
347
317
  const processingTimeout: number = -1;
348
- const id = assetId ? assetId : replacedFileBlobs[activeIndex].file.assetId;
349
318
  api.replaceAsset(
350
- id,
319
+ assetId,
351
320
  replacedFileBlobs[activeIndex].file,
352
321
  replacedFileBlobs[activeIndex].onUploadProgress,
353
322
  replacedFileBlobs[activeIndex].filename
@@ -17,7 +17,7 @@ export const getStoryPublishStatus = (api: IImposiumAPI, storyId: string): any =
17
17
  }
18
18
 
19
19
  dispatch({ type: publish.UPDATE_PUBLISH_STATUS, data: resStatus });
20
-
20
+ resolve(resStatus);
21
21
  if (resStatus.publishing) {
22
22
  const jobId = resStatus.job_id;
23
23
  api.pollJob(jobId)
@@ -38,14 +38,12 @@ export const getStoryPublishStatus = (api: IImposiumAPI, storyId: string): any =
38
38
  reject(copy.header.publishPollError);
39
39
  }
40
40
  });
41
- } else {
42
- resolve(resStatus);
43
41
  }
44
42
  }
45
43
  })
46
44
  .catch((e) => {
47
45
  // 404 = no published version = using working copy
48
- if (e?.response?.status !== 404 && e.error !== 'missing_refresh_token') {
46
+ if (e?.response?.status !== 404) {
49
47
  console.error(e);
50
48
  reject(copy.header.publishPollError);
51
49
  }
@@ -79,15 +77,9 @@ export const publishVersion = (api: IImposiumAPI, storyId: string) => {
79
77
  return new Promise((resolve, reject) => {
80
78
  api.runPublish(storyId, '')
81
79
  .then((d) => {
82
- dispatch(getStoryPublishStatus(api, storyId))
83
- .then()
84
- .catch((error) => {
85
- dispatch({ type: publish.CLEAR_PUBLISH_STATUS });
86
- reject(error);
87
- });
80
+ return dispatch(getStoryPublishStatus(api, storyId));
88
81
  })
89
82
  .catch((e) => {
90
- dispatch({ type: publish.CLEAR_PUBLISH_STATUS });
91
83
  if (e) {
92
84
  reject(e);
93
85
  } else {
@@ -1,8 +1,7 @@
1
1
  import assetUploadsActions from '../actions/asset-uploads';
2
2
 
3
3
  const initialState: any = {
4
- uploads: [],
5
- applyAll: false
4
+ uploads: []
6
5
  };
7
6
 
8
7
  const assetUploads = (state = initialState, action): any => {