@imposium-hub/components 2.9.0-1 → 2.9.0-11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/app-wrapper/AppWrapper.js +10 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js +266 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js +195 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js +1 -1
- package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableNameFilter.js +1 -1
- package/dist/cjs/components/assets/AssetsTableNameFilter.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableTagsFilter.js +1 -1
- package/dist/cjs/components/assets/AssetsTableTagsFilter.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +4 -2
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/confirm-modal/ConfirmModal.js +3 -2
- package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +122 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +104 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +91 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +1 -0
- package/dist/cjs/components/field-wrapper/FieldWrapper.js +10 -8
- package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
- package/dist/cjs/components/header/Header.js +9 -6
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
- package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
- package/dist/cjs/components/header/StoryDropdown.js +111 -0
- package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
- package/dist/cjs/components/number-field/NumberField.d.ts +1 -0
- package/dist/cjs/components/number-field/NumberField.js +5 -2
- package/dist/cjs/components/number-field/NumberField.js.map +1 -1
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +61 -28
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +1 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +34 -12
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
- package/dist/cjs/components/slider-field/SliderField.d.ts +2 -0
- package/dist/cjs/components/slider-field/SliderField.js +17 -8
- package/dist/cjs/components/slider-field/SliderField.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +17 -3
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/components/tabs/Tabs.js +2 -1
- package/dist/cjs/components/tabs/Tabs.js.map +1 -1
- package/dist/cjs/components/text-field/TextField.d.ts +1 -0
- package/dist/cjs/components/text-field/TextField.js +2 -2
- package/dist/cjs/components/text-field/TextField.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +5 -1
- package/dist/cjs/constants/copy.js +6 -2
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/icons.d.ts +2 -0
- package/dist/cjs/constants/icons.js +3 -1
- package/dist/cjs/constants/icons.js.map +1 -1
- package/dist/cjs/constants/publish.d.ts +3 -0
- package/dist/cjs/constants/publish.js +5 -3
- package/dist/cjs/constants/publish.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +8 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.d.ts +1 -1
- package/dist/cjs/redux/actions/asset-uploads.js +169 -119
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/redux/actions/publish.js +10 -2
- package/dist/cjs/redux/actions/publish.js.map +1 -1
- package/dist/cjs/redux/reducers/asset-uploads.js +2 -1
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/cjs/services/API.d.ts +3 -8
- package/dist/cjs/services/API.js +29 -101
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/cjs/utils/modal.d.ts +4 -0
- package/dist/cjs/utils/modal.js +11 -2
- package/dist/cjs/utils/modal.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js +10 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js +142 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js +88 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableAssetIdFilter.js +1 -1
- package/dist/esm/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableNameFilter.js +1 -1
- package/dist/esm/components/assets/AssetsTableNameFilter.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableTagsFilter.js +1 -1
- package/dist/esm/components/assets/AssetsTableTagsFilter.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +5 -3
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/confirm-modal/ConfirmModal.js +3 -2
- package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js +65 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +72 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +35 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +1 -0
- package/dist/esm/components/field-wrapper/FieldWrapper.js +10 -8
- package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
- package/dist/esm/components/header/Header.js +7 -4
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/esm/components/header/Header_BASE_73021.js +322 -0
- package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
- package/dist/esm/components/header/StoryDropdown.js +82 -0
- package/dist/esm/components/header/StoryDropdown.js.map +1 -0
- package/dist/esm/components/number-field/NumberField.d.ts +1 -0
- package/dist/esm/components/number-field/NumberField.js +5 -2
- package/dist/esm/components/number-field/NumberField.js.map +1 -1
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +52 -19
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +1 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +31 -12
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
- package/dist/esm/components/slider-field/SliderField.d.ts +2 -0
- package/dist/esm/components/slider-field/SliderField.js +17 -8
- package/dist/esm/components/slider-field/SliderField.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js +13 -4
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/esm/components/tabs/Tabs.js +2 -1
- package/dist/esm/components/tabs/Tabs.js.map +1 -1
- package/dist/esm/components/text-field/TextField.d.ts +1 -0
- package/dist/esm/components/text-field/TextField.js +2 -2
- package/dist/esm/components/text-field/TextField.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +5 -1
- package/dist/esm/constants/copy.js +6 -2
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/icons.d.ts +2 -0
- package/dist/esm/constants/icons.js +3 -1
- package/dist/esm/constants/icons.js.map +1 -1
- package/dist/esm/constants/publish.d.ts +3 -0
- package/dist/esm/constants/publish.js +4 -2
- package/dist/esm/constants/publish.js.map +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.d.ts +1 -1
- package/dist/esm/redux/actions/asset-uploads.js +165 -115
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/redux/actions/publish.js +10 -2
- package/dist/esm/redux/actions/publish.js.map +1 -1
- package/dist/esm/redux/reducers/asset-uploads.js +2 -1
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/esm/services/API.d.ts +3 -8
- package/dist/esm/services/API.js +9 -46
- package/dist/esm/services/API.js.map +1 -1
- package/dist/esm/utils/modal.d.ts +4 -0
- package/dist/esm/utils/modal.js +9 -1
- package/dist/esm/utils/modal.js.map +1 -1
- package/dist/styles.css +101 -6
- package/dist/styles.less +91 -58
- package/less/components/assets.less +5 -39
- package/less/components/button-menu.less +1 -0
- package/less/components/button.less +57 -19
- package/less/components/form-field.less +27 -0
- package/less/components/story-previewer.less +1 -1
- package/package.json +5 -5
- package/src/components/app-wrapper/AppWrapper.tsx +10 -0
- package/src/components/assets/AssetsTableAssetIdFilter.tsx +1 -0
- package/src/components/assets/AssetsTableNameFilter.tsx +1 -0
- package/src/components/assets/AssetsTableTagsFilter.tsx +1 -0
- package/src/components/assets/AssetsUploadMenu.tsx +20 -11
- package/src/components/confirm-modal/ConfirmModal.tsx +3 -2
- package/src/components/edit-guide-modal/EditGuideModal.tsx +110 -0
- package/src/components/field-wrapper/FieldWrapper.tsx +16 -12
- package/src/components/header/Header.tsx +7 -4
- package/src/components/number-field/NumberField.tsx +6 -2
- package/src/components/publish-wizard/publish/EmailWorkflow.tsx +77 -26
- package/src/components/replace-files-modal/ReplaceFilesModal.tsx +217 -0
- package/src/components/slider-field/SliderField.tsx +44 -22
- package/src/components/story-previewer/StoryPreviewer.tsx +24 -8
- package/src/components/tabs/Tabs.tsx +2 -1
- package/src/components/text-field/TextField.tsx +5 -2
- package/src/constants/copy.ts +6 -2
- package/src/constants/icons.tsx +10 -1
- package/src/constants/publish.ts +7 -2
- package/src/index.ts +6 -2
- package/src/redux/actions/asset-uploads.ts +193 -162
- package/src/redux/actions/publish.ts +10 -2
- package/src/redux/reducers/asset-uploads.ts +2 -1
- package/src/services/API.ts +13 -76
- package/src/utils/modal.ts +13 -1
|
@@ -12,7 +12,13 @@ import { connect } from 'react-redux';
|
|
|
12
12
|
import SelectField from '../../select-field/SelectField';
|
|
13
13
|
import { updateAssociation, getBatch, setPage } from '../../../redux/actions/active-batch';
|
|
14
14
|
import TextField from '../../text-field/TextField';
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
ADSTUDIO_POST_RENDER_ACTION,
|
|
17
|
+
ASSET_NAME_VAR,
|
|
18
|
+
ASSETS_POST_RENDER_ACTION,
|
|
19
|
+
CRM_PLACEMENT_VARS
|
|
20
|
+
} from '../../../constants/publish';
|
|
21
|
+
import CheckboxField from '../../checkbox-field/CheckboxField';
|
|
16
22
|
|
|
17
23
|
interface IEmailWorkflowProps {
|
|
18
24
|
story: any;
|
|
@@ -69,12 +75,12 @@ interface IEmailWorkflowProps {
|
|
|
69
75
|
onNext: (val: boolean) => void;
|
|
70
76
|
next: boolean;
|
|
71
77
|
isCrM: boolean;
|
|
78
|
+
isCrMAsset?: boolean;
|
|
72
79
|
}
|
|
73
80
|
|
|
74
81
|
interface CrMOverrides {
|
|
75
82
|
creative_id: string;
|
|
76
83
|
creative_library_id: string;
|
|
77
|
-
notification_email: string;
|
|
78
84
|
placement_type: string;
|
|
79
85
|
}
|
|
80
86
|
|
|
@@ -124,7 +130,6 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
124
130
|
creativeManagerOverrides: {
|
|
125
131
|
creative_id: '',
|
|
126
132
|
creative_library_id: '',
|
|
127
|
-
notification_email: '',
|
|
128
133
|
placement_type: 'crm-adstudio'
|
|
129
134
|
},
|
|
130
135
|
waitingForPublish: false,
|
|
@@ -266,6 +271,8 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
266
271
|
const { name } = this.props.story;
|
|
267
272
|
const { isCrM } = this.props;
|
|
268
273
|
const { inventory, inventoryKeys } = this.state;
|
|
274
|
+
const uploadAsAssets =
|
|
275
|
+
this.state.creativeManagerOverrides.placement_type === ASSETS_POST_RENDER_ACTION;
|
|
269
276
|
|
|
270
277
|
const maskConfig: any[] = inventoryKeys.map((currKey: string) => {
|
|
271
278
|
let value = '';
|
|
@@ -288,12 +295,27 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
288
295
|
});
|
|
289
296
|
|
|
290
297
|
if (isCrM) {
|
|
291
|
-
|
|
292
|
-
maskConfig.push(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
298
|
+
if (uploadAsAssets) {
|
|
299
|
+
maskConfig.push(
|
|
300
|
+
{
|
|
301
|
+
id: ASSET_NAME_VAR,
|
|
302
|
+
name: ASSET_NAME_VAR,
|
|
303
|
+
show: true
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
id: 'creative_library_id',
|
|
307
|
+
name: 'creative_library_id',
|
|
308
|
+
show: true
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
} else {
|
|
312
|
+
for (const id of CRM_PLACEMENT_VARS) {
|
|
313
|
+
maskConfig.push({
|
|
314
|
+
id,
|
|
315
|
+
name: id,
|
|
316
|
+
show: true
|
|
317
|
+
});
|
|
318
|
+
}
|
|
297
319
|
}
|
|
298
320
|
}
|
|
299
321
|
|
|
@@ -436,12 +458,7 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
436
458
|
private getPostRenderActions() {
|
|
437
459
|
const CrMUploadAction = { data: {} };
|
|
438
460
|
const {
|
|
439
|
-
creativeManagerOverrides: {
|
|
440
|
-
placement_type,
|
|
441
|
-
creative_id,
|
|
442
|
-
creative_library_id,
|
|
443
|
-
notification_email
|
|
444
|
-
}
|
|
461
|
+
creativeManagerOverrides: { placement_type, creative_id, creative_library_id }
|
|
445
462
|
} = this.state;
|
|
446
463
|
|
|
447
464
|
CrMUploadAction['type'] = placement_type;
|
|
@@ -451,9 +468,6 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
451
468
|
if (creative_library_id) {
|
|
452
469
|
CrMUploadAction.data['creative_library_id'] = creative_library_id;
|
|
453
470
|
}
|
|
454
|
-
if (notification_email) {
|
|
455
|
-
CrMUploadAction.data['notification_email'] = notification_email;
|
|
456
|
-
}
|
|
457
471
|
|
|
458
472
|
return [CrMUploadAction];
|
|
459
473
|
}
|
|
@@ -715,7 +729,9 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
715
729
|
};
|
|
716
730
|
|
|
717
731
|
if (!publishDataset) {
|
|
718
|
-
|
|
732
|
+
if (!batchError) {
|
|
733
|
+
emailOptions.push(downloadSampleCsv);
|
|
734
|
+
}
|
|
719
735
|
emailOptions.push(selectCsv);
|
|
720
736
|
} else {
|
|
721
737
|
emailOptions.push(uploadDataset);
|
|
@@ -779,7 +795,7 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
779
795
|
|
|
780
796
|
const downloadCSV = (
|
|
781
797
|
<>
|
|
782
|
-
{
|
|
798
|
+
{downloadCSVDiv}
|
|
783
799
|
{this.renderColumnMap()}
|
|
784
800
|
</>
|
|
785
801
|
);
|
|
@@ -855,6 +871,13 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
855
871
|
/>
|
|
856
872
|
);
|
|
857
873
|
})}
|
|
874
|
+
{batchError && (
|
|
875
|
+
<BigButton
|
|
876
|
+
label={downloadCsvLabel}
|
|
877
|
+
disabled={downloading}
|
|
878
|
+
onClick={() => this.downloadCsv()}
|
|
879
|
+
/>
|
|
880
|
+
)}
|
|
858
881
|
</div>
|
|
859
882
|
</div>
|
|
860
883
|
);
|
|
@@ -911,10 +934,8 @@ const CrMOptions: React.FC<ICrMOptionsProps> = ({ options, onChange, errorCopy =
|
|
|
911
934
|
</div>
|
|
912
935
|
) : null;
|
|
913
936
|
|
|
914
|
-
|
|
937
|
+
const standardInterface = (
|
|
915
938
|
<>
|
|
916
|
-
<HRule />
|
|
917
|
-
<br />
|
|
918
939
|
<h2>{copy.publish.crmPlacement}</h2>
|
|
919
940
|
<p>{copy.publish.crmData}</p>
|
|
920
941
|
{e}
|
|
@@ -933,14 +954,44 @@ const CrMOptions: React.FC<ICrMOptionsProps> = ({ options, onChange, errorCopy =
|
|
|
933
954
|
value={options.creative_id}
|
|
934
955
|
onChange={(v) => onInputChange('creative_id', v)}
|
|
935
956
|
/>
|
|
957
|
+
</>
|
|
958
|
+
);
|
|
959
|
+
|
|
960
|
+
const assetInterface = (
|
|
961
|
+
<>
|
|
962
|
+
<h2>{copy.publish.crmPlacement}</h2>
|
|
963
|
+
<p>{copy.publish.crmData}</p>
|
|
964
|
+
{e}
|
|
965
|
+
<br />
|
|
936
966
|
<TextField
|
|
937
967
|
width={'33%'}
|
|
938
968
|
labelPosition='top'
|
|
939
|
-
label={copy.publish.
|
|
940
|
-
value={options.
|
|
941
|
-
onChange={(v) => onInputChange('
|
|
969
|
+
label={copy.publish.creativeLibraryId}
|
|
970
|
+
value={options.creative_library_id}
|
|
971
|
+
onChange={(v) => onInputChange('creative_library_id', v)}
|
|
942
972
|
/>
|
|
973
|
+
</>
|
|
974
|
+
);
|
|
975
|
+
return (
|
|
976
|
+
<>
|
|
977
|
+
<HRule />
|
|
943
978
|
<br />
|
|
979
|
+
{options['placement_type'] === ASSETS_POST_RENDER_ACTION
|
|
980
|
+
? assetInterface
|
|
981
|
+
: standardInterface}
|
|
982
|
+
<br />
|
|
983
|
+
<HRule />
|
|
984
|
+
<CheckboxField
|
|
985
|
+
value={options['placement_type'] === ASSETS_POST_RENDER_ACTION ? true : false}
|
|
986
|
+
label={copy.publish.uploadAsAssets}
|
|
987
|
+
onChange={(v) => {
|
|
988
|
+
if (v === false) {
|
|
989
|
+
onInputChange('placement_type', ADSTUDIO_POST_RENDER_ACTION);
|
|
990
|
+
} else {
|
|
991
|
+
onInputChange('placement_type', ASSETS_POST_RENDER_ACTION);
|
|
992
|
+
}
|
|
993
|
+
}}
|
|
994
|
+
/>
|
|
944
995
|
<HRule />
|
|
945
996
|
</>
|
|
946
997
|
);
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import Modal from '../modal/Modal';
|
|
4
|
+
import Button from '../button/Button';
|
|
5
|
+
import CheckboxField from '../checkbox-field/CheckboxField';
|
|
6
|
+
import Section from '../section/Section';
|
|
7
|
+
import { assets as copy } from '../../constants/copy';
|
|
8
|
+
import { replaceFilesModalEvent } from '../../utils/modal';
|
|
9
|
+
|
|
10
|
+
export interface IReplaceFilesModalProps {
|
|
11
|
+
onUpload: (f) => any;
|
|
12
|
+
onInstantUpload: (f) => any;
|
|
13
|
+
onApplyToAll: (e) => any;
|
|
14
|
+
onClose: () => void;
|
|
15
|
+
applyToAll: boolean;
|
|
16
|
+
existedAssets: any[];
|
|
17
|
+
existedAssetIds: any[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const ReplaceFilesModal = () => {
|
|
21
|
+
const [props, setProps] = useState<IReplaceFilesModalProps>(null);
|
|
22
|
+
const [isOpen, setIsOpen] = useState<boolean>(false);
|
|
23
|
+
const [applyToAll, setApplyToAll] = useState<boolean>();
|
|
24
|
+
const [height, setHeight] = useState(200);
|
|
25
|
+
const [index, setIndex] = useState<number>(0);
|
|
26
|
+
|
|
27
|
+
const replaceFileModalRef = useRef(null);
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (replaceFileModalRef.current) {
|
|
31
|
+
const {
|
|
32
|
+
current: { clientHeight }
|
|
33
|
+
} = replaceFileModalRef;
|
|
34
|
+
setHeight(clientHeight + 40);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const onOpen = (event) => {
|
|
39
|
+
setProps({
|
|
40
|
+
...event.detail
|
|
41
|
+
});
|
|
42
|
+
setIsOpen(true);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const onClose = () => {
|
|
46
|
+
props.onClose();
|
|
47
|
+
setIsOpen(false);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const onReplaceHandler = (curApplyToAll, curIndex, file, assetId) => {
|
|
51
|
+
const newIndex = curIndex + 1;
|
|
52
|
+
|
|
53
|
+
if (curApplyToAll && curIndex === 0) {
|
|
54
|
+
const updatedAssets = props.existedAssets.map((asset, i) => {
|
|
55
|
+
const updatefile = asset;
|
|
56
|
+
updatefile['assetId'] = props.existedAssetIds[i];
|
|
57
|
+
return updatefile;
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
props.onInstantUpload(updatedAssets);
|
|
61
|
+
setIndex(0);
|
|
62
|
+
setIsOpen(false);
|
|
63
|
+
} else if (curApplyToAll) {
|
|
64
|
+
const updatedAssets = [];
|
|
65
|
+
|
|
66
|
+
for (let i = 0; i < props.existedAssets.length; i++) {
|
|
67
|
+
const updateFile =
|
|
68
|
+
curIndex === 0
|
|
69
|
+
? props.existedAssets[i]
|
|
70
|
+
: [
|
|
71
|
+
...props.existedAssets.slice(0, curIndex - 1),
|
|
72
|
+
...props.existedAssets.slice(curIndex)
|
|
73
|
+
][i];
|
|
74
|
+
|
|
75
|
+
if (updateFile) {
|
|
76
|
+
updateFile['assetId'] =
|
|
77
|
+
curIndex === 0
|
|
78
|
+
? props.existedAssetIds[i]
|
|
79
|
+
: [
|
|
80
|
+
...props.existedAssetIds.slice(0, curIndex - 1),
|
|
81
|
+
...props.existedAssetIds.slice(curIndex)
|
|
82
|
+
][i];
|
|
83
|
+
updatedAssets.push(updateFile);
|
|
84
|
+
props.onInstantUpload(updatedAssets);
|
|
85
|
+
setIndex(0);
|
|
86
|
+
onClose();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
if (newIndex === props.existedAssets.length) {
|
|
91
|
+
setIndex(0);
|
|
92
|
+
onClose();
|
|
93
|
+
} else {
|
|
94
|
+
setIndex(newIndex);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const updateFile = file;
|
|
98
|
+
updateFile['assetId'] = assetId;
|
|
99
|
+
props.onUpload([updateFile]);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const onAsNewHandler = (curApplyToAll, curIndex, file) => {
|
|
104
|
+
const newIndex = curIndex + 1;
|
|
105
|
+
|
|
106
|
+
if (curApplyToAll) {
|
|
107
|
+
props.onUpload(
|
|
108
|
+
curIndex === 0 ? props.existedAssets : props.existedAssets.slice(curIndex)
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
setIndex(0);
|
|
112
|
+
onClose();
|
|
113
|
+
} else {
|
|
114
|
+
if (newIndex === props.existedAssets.length) {
|
|
115
|
+
setIndex(0);
|
|
116
|
+
onClose();
|
|
117
|
+
} else {
|
|
118
|
+
setIndex(newIndex);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
props.onUpload([file]);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const onApplyToAllHandler = (e) => {
|
|
126
|
+
setApplyToAll(e);
|
|
127
|
+
props.onApplyToAll(e);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const onReplace = useCallback(
|
|
131
|
+
(curApplyToAll, curIndex, file, assetId) =>
|
|
132
|
+
onReplaceHandler(curApplyToAll, curIndex, file, assetId),
|
|
133
|
+
[isOpen]
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
const onApplyToAll = useCallback((e) => onApplyToAllHandler(e), [isOpen]);
|
|
137
|
+
|
|
138
|
+
const onAsNew = useCallback(
|
|
139
|
+
(curApplyToAll, curIndex, file) => onAsNewHandler(curApplyToAll, curIndex, file),
|
|
140
|
+
[isOpen]
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
window.addEventListener(replaceFilesModalEvent, onOpen);
|
|
145
|
+
return () => {
|
|
146
|
+
window.removeEventListener(replaceFilesModalEvent, onOpen);
|
|
147
|
+
};
|
|
148
|
+
}, []);
|
|
149
|
+
|
|
150
|
+
const modal = () => {
|
|
151
|
+
if (isOpen) {
|
|
152
|
+
const file = props.existedAssets[index];
|
|
153
|
+
const assetId = props.existedAssetIds[index];
|
|
154
|
+
const name = file.name.slice(0, file.name.lastIndexOf('.'));
|
|
155
|
+
return (
|
|
156
|
+
<Modal
|
|
157
|
+
onRequestClose={onClose}
|
|
158
|
+
wrapperStyle={{
|
|
159
|
+
left: '0px',
|
|
160
|
+
width: '100%'
|
|
161
|
+
}}
|
|
162
|
+
style={{
|
|
163
|
+
width: '400px',
|
|
164
|
+
height: `${height}px`,
|
|
165
|
+
top: 'calc(50% - 150px)',
|
|
166
|
+
left: 'calc((100% - 400px) / 2)'
|
|
167
|
+
}}
|
|
168
|
+
isOpen={true}>
|
|
169
|
+
<Section>
|
|
170
|
+
<div
|
|
171
|
+
className='replace-files-modal'
|
|
172
|
+
ref={replaceFileModalRef}>
|
|
173
|
+
<p>{copy.uploads.title.replace('[name]', name)}</p>
|
|
174
|
+
<div className='replace-files-buttons'>
|
|
175
|
+
<div className='checkbox'>
|
|
176
|
+
<CheckboxField
|
|
177
|
+
label={copy.uploads.applyAll}
|
|
178
|
+
value={applyToAll}
|
|
179
|
+
onChange={onApplyToAll}
|
|
180
|
+
/>
|
|
181
|
+
</div>
|
|
182
|
+
<div className='buttons'>
|
|
183
|
+
<Button
|
|
184
|
+
onClick={() => onAsNew(applyToAll, index, file)}
|
|
185
|
+
size='large'
|
|
186
|
+
style='bold'
|
|
187
|
+
color='primary'>
|
|
188
|
+
{copy.uploads.keepBoth}
|
|
189
|
+
</Button>
|
|
190
|
+
<Button
|
|
191
|
+
onClick={() => onReplace(applyToAll, index, file, assetId)}
|
|
192
|
+
size='large'
|
|
193
|
+
style='bold'
|
|
194
|
+
color='primary'>
|
|
195
|
+
{copy.uploads.replace}
|
|
196
|
+
</Button>
|
|
197
|
+
<Button
|
|
198
|
+
onClick={onClose}
|
|
199
|
+
size='large'
|
|
200
|
+
style='bold'
|
|
201
|
+
color='default'>
|
|
202
|
+
{copy.uploads.cancelButton}
|
|
203
|
+
</Button>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</Section>
|
|
208
|
+
</Modal>
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const PortalContextComponent = () =>
|
|
214
|
+
ReactDOM.createPortal(modal(), document.querySelector('#react-root'));
|
|
215
|
+
|
|
216
|
+
return <PortalContextComponent />;
|
|
217
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import FieldWrapper from '../field-wrapper/FieldWrapper';
|
|
3
3
|
import { IToolTipConfig } from '../Tooltip';
|
|
4
|
+
import { ICON_CHECK } from '../../constants/icons';
|
|
4
5
|
|
|
5
6
|
interface ISliderFieldProps {
|
|
6
7
|
label?: any;
|
|
@@ -15,6 +16,7 @@ interface ISliderFieldProps {
|
|
|
15
16
|
info?: string;
|
|
16
17
|
labelPosition?: string;
|
|
17
18
|
labelWidth?: string | number;
|
|
19
|
+
enabledToggle?: boolean;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
interface ISliderFieldState {
|
|
@@ -69,6 +71,14 @@ class SliderField extends React.PureComponent<ISliderFieldProps, ISliderFieldSta
|
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
74
|
+
private toggle() {
|
|
75
|
+
if (this.props.value !== undefined && this.props.value !== null) {
|
|
76
|
+
this.props.onChange(null);
|
|
77
|
+
} else {
|
|
78
|
+
this.props.onChange(this.props.defaultValue);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
72
82
|
public render() {
|
|
73
83
|
const {
|
|
74
84
|
label,
|
|
@@ -81,16 +91,15 @@ class SliderField extends React.PureComponent<ISliderFieldProps, ISliderFieldSta
|
|
|
81
91
|
tooltip,
|
|
82
92
|
info,
|
|
83
93
|
labelPosition,
|
|
84
|
-
labelWidth
|
|
94
|
+
labelWidth,
|
|
95
|
+
enabledToggle
|
|
85
96
|
} = this.props;
|
|
86
97
|
const { tempValue } = this.state;
|
|
98
|
+
const valueSet = value !== null && value !== undefined;
|
|
99
|
+
const val = tempValue !== null ? tempValue : !valueSet ? defaultValue : value;
|
|
87
100
|
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
? tempValue
|
|
91
|
-
: value === null || value === undefined
|
|
92
|
-
? defaultValue
|
|
93
|
-
: value;
|
|
101
|
+
const showInputs = (enabledToggle && valueSet) || !enabledToggle;
|
|
102
|
+
const icon = valueSet ? ICON_CHECK : null;
|
|
94
103
|
|
|
95
104
|
return (
|
|
96
105
|
<FieldWrapper
|
|
@@ -101,21 +110,34 @@ class SliderField extends React.PureComponent<ISliderFieldProps, ISliderFieldSta
|
|
|
101
110
|
labelPosition={labelPosition}
|
|
102
111
|
labelWidth={labelWidth}
|
|
103
112
|
width={width}>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
113
|
+
{enabledToggle && (
|
|
114
|
+
<div
|
|
115
|
+
className='checkbox'
|
|
116
|
+
onClick={(e) => this.toggle()}>
|
|
117
|
+
{icon}
|
|
118
|
+
</div>
|
|
119
|
+
)}
|
|
120
|
+
|
|
121
|
+
{showInputs && (
|
|
122
|
+
<input
|
|
123
|
+
className={enabledToggle ? 'toggle' : ''}
|
|
124
|
+
onChange={(e) => this.rangeInputChange(e)}
|
|
125
|
+
type='range'
|
|
126
|
+
min={min}
|
|
127
|
+
max={max}
|
|
128
|
+
value={val}
|
|
129
|
+
step={step}
|
|
130
|
+
/>
|
|
131
|
+
)}
|
|
132
|
+
|
|
133
|
+
{showInputs && (
|
|
134
|
+
<input
|
|
135
|
+
className='val'
|
|
136
|
+
onChange={(e) => this.numberInputChange(e)}
|
|
137
|
+
type='number'
|
|
138
|
+
value={val}
|
|
139
|
+
/>
|
|
140
|
+
)}
|
|
119
141
|
</FieldWrapper>
|
|
120
142
|
);
|
|
121
143
|
}
|
|
@@ -48,6 +48,7 @@ interface IStoryPreviewerProps {
|
|
|
48
48
|
compositionOptions?: any[];
|
|
49
49
|
editor: any;
|
|
50
50
|
updateEditorConfig(c): void;
|
|
51
|
+
reRender: boolean;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
interface IStoryPreviewerState {
|
|
@@ -199,7 +200,15 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
199
200
|
if (!prevProps.editor?.autoRender && this.props.editor?.autoRender) {
|
|
200
201
|
this.props.updateEditorConfig({ autoRender: false });
|
|
201
202
|
this.evtHandlers.gotExperience = null;
|
|
202
|
-
this.props.api.cancelExperiencePolling().then(() =>
|
|
203
|
+
this.props.api.cancelExperiencePolling().then(() => {
|
|
204
|
+
if (this.props.editor?.reRender) {
|
|
205
|
+
this.setState({ compositionOverride: null }, () =>
|
|
206
|
+
this.createExperience(this.props.compositionId)
|
|
207
|
+
);
|
|
208
|
+
} else {
|
|
209
|
+
this.createExperience();
|
|
210
|
+
}
|
|
211
|
+
});
|
|
203
212
|
}
|
|
204
213
|
|
|
205
214
|
if (
|
|
@@ -502,11 +511,17 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
502
511
|
onExperenceLoaded(resVideo);
|
|
503
512
|
}
|
|
504
513
|
|
|
505
|
-
this.setState(
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
514
|
+
this.setState(
|
|
515
|
+
{
|
|
516
|
+
rendering: false,
|
|
517
|
+
activeOutput: this.getFirstOutput(resVideo),
|
|
518
|
+
experience: resVideo
|
|
519
|
+
},
|
|
520
|
+
() =>
|
|
521
|
+
this.props.updateEditorConfig({
|
|
522
|
+
reRender: false
|
|
523
|
+
})
|
|
524
|
+
);
|
|
510
525
|
};
|
|
511
526
|
|
|
512
527
|
api.getExperience(experienceId, true)
|
|
@@ -609,12 +624,12 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
609
624
|
);
|
|
610
625
|
}
|
|
611
626
|
|
|
612
|
-
private createExperience() {
|
|
627
|
+
private createExperience(compositionId?) {
|
|
613
628
|
const { storyId, onNotification, onError, api, onExperienceCreated, useWorkingCopy } =
|
|
614
629
|
this.props;
|
|
615
630
|
|
|
616
631
|
const fastRender = this.props.editor?.fastRender || false;
|
|
617
|
-
const compId = this.getCompId();
|
|
632
|
+
const compId = compositionId ? compositionId : this.getCompId();
|
|
618
633
|
|
|
619
634
|
this.resetState(false, () => {
|
|
620
635
|
this.setState(
|
|
@@ -879,6 +894,7 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
879
894
|
const { storyId } = this.props;
|
|
880
895
|
const renderCopy = experience ? copy.btnReRender : copy.btnRender;
|
|
881
896
|
const compId = this.getCompId();
|
|
897
|
+
|
|
882
898
|
const btnRender = !rendering ? (
|
|
883
899
|
<Button
|
|
884
900
|
disabled={!compId}
|
|
@@ -46,6 +46,7 @@ interface ITextFieldProps {
|
|
|
46
46
|
labelWidth?: string | number;
|
|
47
47
|
className?: string;
|
|
48
48
|
maxLength?: number;
|
|
49
|
+
header?: boolean;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
interface ITextFieldState {
|
|
@@ -487,7 +488,8 @@ class TextField extends React.PureComponent<ITextFieldProps, ITextFieldState> {
|
|
|
487
488
|
}
|
|
488
489
|
|
|
489
490
|
public render() {
|
|
490
|
-
const { label, width, tooltip, info, labelPosition, labelWidth, className } =
|
|
491
|
+
const { label, width, tooltip, info, labelPosition, labelWidth, className, header } =
|
|
492
|
+
this.props;
|
|
491
493
|
return (
|
|
492
494
|
<FieldWrapper
|
|
493
495
|
customClass={`text-field ${className}`}
|
|
@@ -497,7 +499,8 @@ class TextField extends React.PureComponent<ITextFieldProps, ITextFieldState> {
|
|
|
497
499
|
info={info}
|
|
498
500
|
labelPosition={labelPosition}
|
|
499
501
|
labelWidth={labelWidth}
|
|
500
|
-
width={width}
|
|
502
|
+
width={width}
|
|
503
|
+
header={header}>
|
|
501
504
|
{this.renderInput()}
|
|
502
505
|
</FieldWrapper>
|
|
503
506
|
);
|
package/src/constants/copy.ts
CHANGED
|
@@ -28,7 +28,11 @@ 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'
|
|
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'
|
|
32
36
|
},
|
|
33
37
|
tags: {
|
|
34
38
|
add: 'Add new tag',
|
|
@@ -123,6 +127,7 @@ export const compositions = {
|
|
|
123
127
|
};
|
|
124
128
|
|
|
125
129
|
export const publish = {
|
|
130
|
+
uploadAsAssets: 'Upload as Assets',
|
|
126
131
|
noVariablesError:
|
|
127
132
|
'No variables found on the project. Cannot proceed with publishing to Creative Manager until at least one variable is added to the project.',
|
|
128
133
|
publishInProgress: 'Publish to Creative Manager in progress',
|
|
@@ -130,7 +135,6 @@ export const publish = {
|
|
|
130
135
|
btnCrM: 'Creative Manager',
|
|
131
136
|
creativeLibraryId: 'Creative Library ID',
|
|
132
137
|
creativeId: 'Creative ID',
|
|
133
|
-
email: 'Notification Email',
|
|
134
138
|
missingFields: 'Please provide the missing fields and try again!',
|
|
135
139
|
crmPlacement: 'Creative Manager Placement Variables',
|
|
136
140
|
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.`,
|
package/src/constants/icons.tsx
CHANGED
|
@@ -73,7 +73,12 @@ 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 {
|
|
76
|
+
import {
|
|
77
|
+
faCloudArrowUp,
|
|
78
|
+
faFileCirclePlus,
|
|
79
|
+
faFilePen,
|
|
80
|
+
faFilters
|
|
81
|
+
} from '@fortawesome/pro-solid-svg-icons';
|
|
77
82
|
import { faCircleExclamation } from '@fortawesome/free-solid-svg-icons';
|
|
78
83
|
|
|
79
84
|
export const ICON_VIDEO = <FontAwesomeIcon icon={faVideo} />;
|
|
@@ -223,3 +228,7 @@ export const ICON_UP_RIGHT_FROM_SQUARE = <FontAwesomeIcon icon={faUpRightFromSqu
|
|
|
223
228
|
export const ICON_FILE_UPLOAD = <FontAwesomeIcon icon={faCloudArrowUp} />;
|
|
224
229
|
|
|
225
230
|
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} />;
|