@imposium-hub/components 1.58.7 → 1.59.0
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/publish-wizard/EmailWorkflow.d.ts +2 -0
- package/dist/cjs/components/publish-wizard/EmailWorkflow.js +491 -0
- package/dist/cjs/components/publish-wizard/EmailWorkflow.js.map +1 -0
- package/dist/cjs/components/publish-wizard/PublishWizard.js +14 -4
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/publish-wizard/copy.d.ts +186 -0
- package/dist/cjs/components/publish-wizard/copy.js +199 -0
- package/dist/cjs/components/publish-wizard/copy.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +103 -25
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +2 -2
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js +670 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js +553 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js +650 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js +639 -0
- package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +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/assets_BACKUP_14924.d.ts +20 -0
- package/dist/cjs/constants/assets_BACKUP_14924.js +30 -0
- package/dist/cjs/constants/assets_BACKUP_14924.js.map +1 -0
- package/dist/cjs/constants/assets_BASE_14924.d.ts +21 -0
- package/dist/cjs/constants/assets_BASE_14924.js +32 -0
- package/dist/cjs/constants/assets_BASE_14924.js.map +1 -0
- package/dist/cjs/constants/assets_LOCAL_14924.d.ts +20 -0
- package/dist/cjs/constants/assets_LOCAL_14924.js +30 -0
- package/dist/cjs/constants/assets_LOCAL_14924.js.map +1 -0
- package/dist/cjs/constants/assets_REMOTE_14924.d.ts +21 -0
- package/dist/cjs/constants/assets_REMOTE_14924.js +32 -0
- package/dist/cjs/constants/assets_REMOTE_14924.js.map +1 -0
- package/dist/cjs/constants/copy.d.ts +9 -0
- package/dist/cjs/constants/copy.js +12 -3
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/publish.d.ts +9 -0
- package/dist/cjs/constants/publish.js +26 -0
- package/dist/cjs/constants/publish.js.map +1 -0
- package/dist/cjs/services/API.d.ts +2 -2
- package/dist/cjs/services/API.js +11 -4
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/esm/components/publish-wizard/EmailWorkflow.d.ts +2 -0
- package/dist/esm/components/publish-wizard/EmailWorkflow.js +398 -0
- package/dist/esm/components/publish-wizard/EmailWorkflow.js.map +1 -0
- package/dist/esm/components/publish-wizard/PublishWizard.js +15 -5
- package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/esm/components/publish-wizard/copy.d.ts +186 -0
- package/dist/esm/components/publish-wizard/copy.js +196 -0
- package/dist/esm/components/publish-wizard/copy.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +90 -23
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js +554 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js +489 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js +537 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js +526 -0
- package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +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/assets_BACKUP_14924.d.ts +20 -0
- package/dist/esm/constants/assets_BACKUP_14924.js +26 -0
- package/dist/esm/constants/assets_BACKUP_14924.js.map +1 -0
- package/dist/esm/constants/assets_BASE_14924.d.ts +21 -0
- package/dist/esm/constants/assets_BASE_14924.js +28 -0
- package/dist/esm/constants/assets_BASE_14924.js.map +1 -0
- package/dist/esm/constants/assets_LOCAL_14924.d.ts +20 -0
- package/dist/esm/constants/assets_LOCAL_14924.js +26 -0
- package/dist/esm/constants/assets_LOCAL_14924.js.map +1 -0
- package/dist/esm/constants/assets_REMOTE_14924.d.ts +21 -0
- package/dist/esm/constants/assets_REMOTE_14924.js +28 -0
- package/dist/esm/constants/assets_REMOTE_14924.js.map +1 -0
- package/dist/esm/constants/copy.d.ts +9 -0
- package/dist/esm/constants/copy.js +12 -3
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/publish.d.ts +9 -0
- package/dist/esm/constants/publish.js +23 -0
- package/dist/esm/constants/publish.js.map +1 -0
- package/dist/esm/services/API.d.ts +2 -2
- package/dist/esm/services/API.js +11 -4
- package/dist/esm/services/API.js.map +1 -1
- package/dist/styles.css +8 -0
- package/dist/styles.less +9 -0
- package/less/components/publish-wizard.less +9 -0
- package/package.json +1 -1
- package/src/components/publish-wizard/PublishWizard.tsx +21 -7
- package/src/components/publish-wizard/publish/EmailWorkflow.tsx +182 -48
- package/src/components/story-previewer/StoryPreviewer.tsx +2 -2
- package/src/components/text-field/TextField.tsx +2 -2
- package/src/constants/copy.ts +14 -3
- package/src/constants/publish.ts +24 -0
- package/src/services/API.ts +16 -5
|
@@ -11,6 +11,8 @@ import { bindActionCreators } from 'redux';
|
|
|
11
11
|
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
|
+
import TextField from '../../text-field/TextField';
|
|
15
|
+
import { CRM_PLACEMENT_VARS } from '../../../constants/publish';
|
|
14
16
|
|
|
15
17
|
interface IEmailWorkflowProps {
|
|
16
18
|
story: any;
|
|
@@ -26,15 +28,16 @@ interface IEmailWorkflowProps {
|
|
|
26
28
|
accessKey: string,
|
|
27
29
|
compId: string,
|
|
28
30
|
embed: boolean,
|
|
29
|
-
addMedia: boolean
|
|
31
|
+
addMedia: boolean,
|
|
32
|
+
overrides?: any
|
|
30
33
|
) => any;
|
|
31
|
-
renderBatch: (batchId: string,
|
|
34
|
+
renderBatch: (batchId: string, postRenderActions?: any) => any;
|
|
32
35
|
status: string;
|
|
33
36
|
accessKey: string;
|
|
34
37
|
compositionId: string;
|
|
35
38
|
compositionName: string;
|
|
36
39
|
onDone: () => void;
|
|
37
|
-
onError: () => void;
|
|
40
|
+
onError: (error) => void;
|
|
38
41
|
error: boolean;
|
|
39
42
|
api: IImposiumAPI;
|
|
40
43
|
handleError: (e) => any;
|
|
@@ -52,6 +55,14 @@ interface IEmailWorkflowProps {
|
|
|
52
55
|
setPage: (page: number) => any;
|
|
53
56
|
onNext: (val: boolean) => void;
|
|
54
57
|
next: boolean;
|
|
58
|
+
isCrM: boolean;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface CrMOverrides {
|
|
62
|
+
creative_id: string;
|
|
63
|
+
creative_library_id: string;
|
|
64
|
+
notification_email: string;
|
|
65
|
+
placement_type: string;
|
|
55
66
|
}
|
|
56
67
|
|
|
57
68
|
interface IEmailWorkflowState {
|
|
@@ -63,7 +74,8 @@ interface IEmailWorkflowState {
|
|
|
63
74
|
inventory: any[];
|
|
64
75
|
inventoryKeys: string[];
|
|
65
76
|
missingColumns: string;
|
|
66
|
-
|
|
77
|
+
batchError: string;
|
|
78
|
+
creativeManagerOverrides: CrMOverrides;
|
|
67
79
|
}
|
|
68
80
|
|
|
69
81
|
class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkflowState> {
|
|
@@ -93,7 +105,13 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
93
105
|
inventory: [],
|
|
94
106
|
inventoryKeys: [],
|
|
95
107
|
missingColumns: '',
|
|
96
|
-
|
|
108
|
+
batchError: '',
|
|
109
|
+
creativeManagerOverrides: {
|
|
110
|
+
creative_id: '',
|
|
111
|
+
creative_library_id: '',
|
|
112
|
+
notification_email: '',
|
|
113
|
+
placement_type: 'crm-adstudio'
|
|
114
|
+
}
|
|
97
115
|
};
|
|
98
116
|
|
|
99
117
|
this.hiddenFileInputRef = React.createRef();
|
|
@@ -175,6 +193,7 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
175
193
|
|
|
176
194
|
public downloadSampleCsv() {
|
|
177
195
|
const { name } = this.props.story;
|
|
196
|
+
const { isCrM } = this.props;
|
|
178
197
|
const { inventory, inventoryKeys } = this.state;
|
|
179
198
|
|
|
180
199
|
const maskConfig: any[] = inventoryKeys.map((currKey: string) => ({
|
|
@@ -183,6 +202,16 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
183
202
|
show: true
|
|
184
203
|
}));
|
|
185
204
|
|
|
205
|
+
if (isCrM) {
|
|
206
|
+
for (const id of CRM_PLACEMENT_VARS) {
|
|
207
|
+
maskConfig.push({
|
|
208
|
+
id,
|
|
209
|
+
name: id,
|
|
210
|
+
show: true
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
186
215
|
const emptyRow: any = maskConfig
|
|
187
216
|
.map((m: any) => m.id)
|
|
188
217
|
.reduce((prevState: any, currId: string) => ({ ...prevState, [currId]: '' }), {});
|
|
@@ -242,24 +271,17 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
242
271
|
|
|
243
272
|
public proceedWithExport() {
|
|
244
273
|
const {
|
|
245
|
-
renderBatch,
|
|
246
274
|
activeBatch: {
|
|
247
|
-
data: { id
|
|
275
|
+
data: { id }
|
|
248
276
|
}
|
|
249
277
|
} = this.props;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
this.setState({ renderedBatch: true });
|
|
253
|
-
})
|
|
254
|
-
.catch((e) => {
|
|
255
|
-
this.props.handleError(copy.publish.renderBatchFailed);
|
|
256
|
-
this.setState({ renderedBatch: false });
|
|
257
|
-
throw e;
|
|
258
|
-
});
|
|
278
|
+
|
|
279
|
+
this.renderBatch({ id });
|
|
259
280
|
}
|
|
260
281
|
|
|
261
282
|
private importBatch({ story_id, id, name, uploadEvt }) {
|
|
262
283
|
const { accessKey, compositionId, isExport, onError } = this.props;
|
|
284
|
+
onError(false); // reset the parent error
|
|
263
285
|
this.props
|
|
264
286
|
.importBatchFromCsv(
|
|
265
287
|
story_id,
|
|
@@ -271,16 +293,16 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
271
293
|
!isExport,
|
|
272
294
|
isExport
|
|
273
295
|
)
|
|
274
|
-
.then(() => {
|
|
296
|
+
.then((e) => {
|
|
275
297
|
if (this.props.batchJobs.missing.length > 0) {
|
|
276
|
-
onError();
|
|
298
|
+
onError(true); // set the error to true
|
|
277
299
|
}
|
|
278
300
|
|
|
279
301
|
this.setState({ uploadComplete: true, uploading: false });
|
|
280
302
|
this.getBatch();
|
|
281
303
|
|
|
282
304
|
if (isExport && Object.keys(this.props.batchJobs.missing).length === 0) {
|
|
283
|
-
this.renderBatch({ id
|
|
305
|
+
this.renderBatch({ id });
|
|
284
306
|
}
|
|
285
307
|
})
|
|
286
308
|
.catch((e) => {
|
|
@@ -289,15 +311,49 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
289
311
|
});
|
|
290
312
|
}
|
|
291
313
|
|
|
292
|
-
private
|
|
314
|
+
private getPostRenderActions() {
|
|
315
|
+
const CrMUploadAction = { data: {} };
|
|
316
|
+
const {
|
|
317
|
+
creativeManagerOverrides: {
|
|
318
|
+
placement_type,
|
|
319
|
+
creative_id,
|
|
320
|
+
creative_library_id,
|
|
321
|
+
notification_email
|
|
322
|
+
}
|
|
323
|
+
} = this.state;
|
|
324
|
+
|
|
325
|
+
CrMUploadAction['type'] = placement_type;
|
|
326
|
+
if (creative_id) {
|
|
327
|
+
CrMUploadAction.data['creative_id'] = creative_id;
|
|
328
|
+
}
|
|
329
|
+
if (creative_library_id) {
|
|
330
|
+
CrMUploadAction.data['creative_library_id'] = creative_library_id;
|
|
331
|
+
}
|
|
332
|
+
if (notification_email) {
|
|
333
|
+
CrMUploadAction.data['notification_email'] = notification_email;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
return [CrMUploadAction];
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
private renderBatch({ id }) {
|
|
340
|
+
const { isCrM } = this.props;
|
|
341
|
+
const postRenderActions = isCrM ? this.getPostRenderActions() : null;
|
|
342
|
+
this.setState({ batchError: null });
|
|
293
343
|
this.props
|
|
294
|
-
.renderBatch(id,
|
|
344
|
+
.renderBatch(id, postRenderActions)
|
|
295
345
|
.then(() => {
|
|
296
|
-
this.setState({ renderedBatch: true });
|
|
346
|
+
this.setState({ renderedBatch: true, batchError: '' });
|
|
297
347
|
})
|
|
298
348
|
.catch((e) => {
|
|
299
349
|
this.props.handleError(copy.publish.renderBatchFailed);
|
|
300
|
-
this.setState({
|
|
350
|
+
this.setState({
|
|
351
|
+
renderedBatch: false,
|
|
352
|
+
batchError: e.response.data.error,
|
|
353
|
+
uploadComplete: false,
|
|
354
|
+
uploading: false,
|
|
355
|
+
downloading: false
|
|
356
|
+
});
|
|
301
357
|
throw e;
|
|
302
358
|
});
|
|
303
359
|
}
|
|
@@ -489,11 +545,19 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
489
545
|
}
|
|
490
546
|
|
|
491
547
|
public render() {
|
|
492
|
-
const {
|
|
493
|
-
|
|
548
|
+
const {
|
|
549
|
+
uploadComplete,
|
|
550
|
+
uploading,
|
|
551
|
+
downloading,
|
|
552
|
+
renderedBatch,
|
|
553
|
+
selectedBatchId,
|
|
554
|
+
batchError,
|
|
555
|
+
creativeManagerOverrides
|
|
556
|
+
} = this.state;
|
|
494
557
|
const {
|
|
495
558
|
isExport,
|
|
496
|
-
batchJobs: { missing, renders }
|
|
559
|
+
batchJobs: { missing, renders },
|
|
560
|
+
isCrM
|
|
497
561
|
} = this.props;
|
|
498
562
|
|
|
499
563
|
const emailOptions = [
|
|
@@ -533,28 +597,41 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
533
597
|
</div>
|
|
534
598
|
);
|
|
535
599
|
|
|
536
|
-
const downloadCSVDiv =
|
|
537
|
-
|
|
538
|
-
<
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
{
|
|
542
|
-
</
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
<
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
<
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
600
|
+
const downloadCSVDiv =
|
|
601
|
+
isCrM && uploadComplete && renderedBatch ? (
|
|
602
|
+
<div>
|
|
603
|
+
<h2>{copy.publish.renderComplete}</h2>
|
|
604
|
+
<HRule />
|
|
605
|
+
<p>{copy.publish.goToCrM}</p>
|
|
606
|
+
</div>
|
|
607
|
+
) : (
|
|
608
|
+
<div>
|
|
609
|
+
<h2>
|
|
610
|
+
{uploadComplete && renderedBatch
|
|
611
|
+
? copy.publish.downloadLink
|
|
612
|
+
: copy.publish.generatingLink}
|
|
613
|
+
</h2>
|
|
614
|
+
<HRule />
|
|
615
|
+
<p>
|
|
616
|
+
{uploadComplete && renderedBatch
|
|
617
|
+
? copy.publish.downloadDesc
|
|
618
|
+
: copy.publish.generatingLinkDesc}
|
|
619
|
+
</p>
|
|
620
|
+
|
|
621
|
+
{isExport && uploadComplete && !renderedBatch ? (
|
|
622
|
+
<BigButton
|
|
623
|
+
label={reRenderLabel}
|
|
624
|
+
disabled={isExport}
|
|
625
|
+
/>
|
|
626
|
+
) : (
|
|
627
|
+
<BigButton
|
|
628
|
+
label={downloadCsvLabel}
|
|
629
|
+
disabled={downloading}
|
|
630
|
+
onClick={() => this.downloadCsv()}
|
|
631
|
+
/>
|
|
632
|
+
)}
|
|
633
|
+
</div>
|
|
634
|
+
);
|
|
558
635
|
|
|
559
636
|
const downloadCSV = (
|
|
560
637
|
<>
|
|
@@ -575,6 +652,13 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
575
652
|
ref={this.hiddenFileInputRef}
|
|
576
653
|
onChange={this.doUploadCsv}
|
|
577
654
|
/>
|
|
655
|
+
{isCrM && (
|
|
656
|
+
<CrMOptions
|
|
657
|
+
options={creativeManagerOverrides}
|
|
658
|
+
errorCopy={batchError}
|
|
659
|
+
onChange={(c) => this.setState({ creativeManagerOverrides: c })}
|
|
660
|
+
/>
|
|
661
|
+
)}
|
|
578
662
|
<div className='link-wrapper'>
|
|
579
663
|
{emailOptions?.map((option, index) => {
|
|
580
664
|
return (
|
|
@@ -617,4 +701,54 @@ const mapStateToProps = (state): any => {
|
|
|
617
701
|
batchesList: state.batchesList
|
|
618
702
|
};
|
|
619
703
|
};
|
|
704
|
+
|
|
705
|
+
const CrMOptions = ({ options, onChange, errorCopy = '' }) => {
|
|
706
|
+
const onInputChange = (key, val) => {
|
|
707
|
+
const newOpts = { ...options };
|
|
708
|
+
newOpts[key] = val;
|
|
709
|
+
onChange(newOpts);
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
const e = errorCopy ? (
|
|
713
|
+
<div className='batch-error'>
|
|
714
|
+
<p>Error: {errorCopy}</p>
|
|
715
|
+
<p>{copy.publish.missingFields}</p>
|
|
716
|
+
</div>
|
|
717
|
+
) : null;
|
|
718
|
+
|
|
719
|
+
return (
|
|
720
|
+
<>
|
|
721
|
+
<HRule />
|
|
722
|
+
<br />
|
|
723
|
+
<h2>{copy.publish.crmPlacement}</h2>
|
|
724
|
+
<p>{copy.publish.crmData}</p>
|
|
725
|
+
{e}
|
|
726
|
+
<br />
|
|
727
|
+
<TextField
|
|
728
|
+
width={'33%'}
|
|
729
|
+
labelPosition='top'
|
|
730
|
+
label={copy.publish.creativeLibraryId}
|
|
731
|
+
value={options.creative_library_id}
|
|
732
|
+
onChange={(v) => onInputChange('creative_library_id', v)}
|
|
733
|
+
/>
|
|
734
|
+
<TextField
|
|
735
|
+
width={'33%'}
|
|
736
|
+
labelPosition='top'
|
|
737
|
+
label={copy.publish.creativeId}
|
|
738
|
+
value={options.creative_id}
|
|
739
|
+
onChange={(v) => onInputChange('creative_id', v)}
|
|
740
|
+
/>
|
|
741
|
+
<TextField
|
|
742
|
+
width={'33%'}
|
|
743
|
+
labelPosition='top'
|
|
744
|
+
label={copy.publish.email}
|
|
745
|
+
value={options.notification_email}
|
|
746
|
+
onChange={(v) => onInputChange('notification_email', v)}
|
|
747
|
+
/>
|
|
748
|
+
<br />
|
|
749
|
+
<HRule />
|
|
750
|
+
</>
|
|
751
|
+
);
|
|
752
|
+
};
|
|
753
|
+
|
|
620
754
|
export default connect(mapStateToProps, mapDispatchToProps, null, { withRef: true })(EmailWorkflow);
|
|
@@ -768,8 +768,8 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
768
768
|
tooltip='Download Preview'
|
|
769
769
|
style='subtle'
|
|
770
770
|
onClick={() => {
|
|
771
|
-
this.download(url, fileName).catch((
|
|
772
|
-
alert(`${ERROR.download.replace('[error]',
|
|
771
|
+
this.download(url, fileName).catch((e) =>
|
|
772
|
+
alert(`${ERROR.download.replace('[error]', e)}`)
|
|
773
773
|
);
|
|
774
774
|
}}>
|
|
775
775
|
{ICON_DOWNLOAD}
|
|
@@ -106,10 +106,10 @@ class TextField extends React.PureComponent<ITextFieldProps, ITextFieldState> {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
public componentDidUpdate = (prevProps, prevState): void => {
|
|
109
|
-
const { controlled, submittable, value } = this.props;
|
|
109
|
+
const { controlled, submittable, value, suggestions } = this.props;
|
|
110
110
|
const { editing, internalValue } = this.state;
|
|
111
111
|
|
|
112
|
-
if (submittable) {
|
|
112
|
+
if (submittable && suggestions) {
|
|
113
113
|
this.textAreaRef.onkeydown = (e) => {
|
|
114
114
|
if (e.key === 'Enter') {
|
|
115
115
|
this.props.doSubmit(internalValue);
|
package/src/constants/copy.ts
CHANGED
|
@@ -105,9 +105,18 @@ export const compositions = {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
export const publish = {
|
|
108
|
+
creativeLibraryId: 'Creative Library ID',
|
|
109
|
+
creativeId: 'Creative ID',
|
|
110
|
+
email: 'Notification Email',
|
|
111
|
+
missingFields: 'Please provide the missing fields and try again!',
|
|
112
|
+
crmPlacement: 'Creative Manager Placement Variables',
|
|
113
|
+
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.`,
|
|
108
114
|
accessKey: 'Access Key',
|
|
109
115
|
tooltipAccessKey: 'API access key to use for this video distribution.',
|
|
110
116
|
publishTitle: 'Publish & Deliver',
|
|
117
|
+
goToCrM:
|
|
118
|
+
'Your videos have finished rendering. They will appear in Creative Manager momentarily.',
|
|
119
|
+
renderComplete: 'Render Complete!',
|
|
111
120
|
|
|
112
121
|
// publish
|
|
113
122
|
publishStepTitle: 'STEP 1: Publish your Project',
|
|
@@ -135,9 +144,9 @@ export const publish = {
|
|
|
135
144
|
emailDesc:
|
|
136
145
|
'You can download a sample CSV with fields to populate as a starting point. Or you can upload one that already has the data in it.',
|
|
137
146
|
downloadSampleCsvLink: 'Download Sample CSV',
|
|
138
|
-
uploadCsv: 'Upload Your CSV
|
|
147
|
+
uploadCsv: 'Upload Your CSV',
|
|
139
148
|
generatingLink: 'STEP 4: Generating embed links',
|
|
140
|
-
downloadLink: 'STEP 5: Download Your
|
|
149
|
+
downloadLink: 'STEP 5: Download Your CSV file',
|
|
141
150
|
btnDownload: 'Download CSV',
|
|
142
151
|
generatingLinkDesc:
|
|
143
152
|
'Please wait while we generate the link for your users. This may take few minutes.',
|
|
@@ -169,7 +178,9 @@ export const publish = {
|
|
|
169
178
|
btnAPI: 'API integration',
|
|
170
179
|
|
|
171
180
|
// export
|
|
172
|
-
btnExport: 'Export',
|
|
181
|
+
btnExport: 'Export as Files',
|
|
182
|
+
|
|
183
|
+
btnCRM: 'Flashtalking Creative Manager',
|
|
173
184
|
|
|
174
185
|
// global
|
|
175
186
|
btnPublish: 'Publish',
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const CRM_PLACEMENT_TYPES = {
|
|
2
|
+
AD_STUDIO: 'crm-adstudio',
|
|
3
|
+
VIDEO_BUILDER: 'crm-videobuilder'
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const CRM_PLACEMENT_OPTIONS = [
|
|
7
|
+
{
|
|
8
|
+
value: CRM_PLACEMENT_TYPES.AD_STUDIO,
|
|
9
|
+
label: 'AdStudio'
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
value: CRM_PLACEMENT_TYPES.VIDEO_BUILDER,
|
|
13
|
+
label: 'Video Builder'
|
|
14
|
+
}
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
export const CRM_PLACEMENT_VARS = [
|
|
18
|
+
'creative_library_id',
|
|
19
|
+
'creative_id',
|
|
20
|
+
'version-name',
|
|
21
|
+
'version-id',
|
|
22
|
+
'clickTag1',
|
|
23
|
+
'notificiaton_email'
|
|
24
|
+
];
|
package/src/services/API.ts
CHANGED
|
@@ -73,7 +73,7 @@ export interface IImposiumAPI {
|
|
|
73
73
|
duplicateBatch(batchId: string);
|
|
74
74
|
downloadBatchExport(batchId: string, exportId: number);
|
|
75
75
|
deleteBatch(batchId: string);
|
|
76
|
-
invokeBatchRenderJob(batchId: string);
|
|
76
|
+
invokeBatchRenderJob(batchId: string, postRenderActions?: any);
|
|
77
77
|
cancelBatchRenderJob(batchId: string);
|
|
78
78
|
getJob(jobId: string);
|
|
79
79
|
pollJob(jobId: string);
|
|
@@ -660,6 +660,8 @@ export default class API {
|
|
|
660
660
|
formData.append('include_email_embed', 'true');
|
|
661
661
|
formData.append('composition_id', compId);
|
|
662
662
|
formData.append('access_key', accessKey);
|
|
663
|
+
} else if (compId) {
|
|
664
|
+
formData.append('composition_id', compId);
|
|
663
665
|
}
|
|
664
666
|
|
|
665
667
|
if (addMedia) {
|
|
@@ -1119,13 +1121,22 @@ export default class API {
|
|
|
1119
1121
|
});
|
|
1120
1122
|
};
|
|
1121
1123
|
|
|
1122
|
-
public invokeBatchRenderJob = (
|
|
1124
|
+
public invokeBatchRenderJob = (
|
|
1125
|
+
batchId: string,
|
|
1126
|
+
postRenderActions?: any
|
|
1127
|
+
): Promise<any | Error> => {
|
|
1128
|
+
const data = {
|
|
1129
|
+
batch_id: batchId
|
|
1130
|
+
};
|
|
1131
|
+
|
|
1132
|
+
if (postRenderActions) {
|
|
1133
|
+
data['post_render_actions'] = postRenderActions;
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1123
1136
|
return this.doRequest({
|
|
1124
1137
|
method: 'POST',
|
|
1125
1138
|
url: '/job/render-batch',
|
|
1126
|
-
data
|
|
1127
|
-
batch_id: batchId
|
|
1128
|
-
}
|
|
1139
|
+
data
|
|
1129
1140
|
});
|
|
1130
1141
|
};
|
|
1131
1142
|
|