@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.
Files changed (105) hide show
  1. package/dist/cjs/components/publish-wizard/EmailWorkflow.d.ts +2 -0
  2. package/dist/cjs/components/publish-wizard/EmailWorkflow.js +491 -0
  3. package/dist/cjs/components/publish-wizard/EmailWorkflow.js.map +1 -0
  4. package/dist/cjs/components/publish-wizard/PublishWizard.js +14 -4
  5. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  6. package/dist/cjs/components/publish-wizard/copy.d.ts +186 -0
  7. package/dist/cjs/components/publish-wizard/copy.js +199 -0
  8. package/dist/cjs/components/publish-wizard/copy.js.map +1 -0
  9. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +103 -25
  10. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  11. package/dist/cjs/components/story-previewer/StoryPreviewer.js +2 -2
  12. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  13. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
  14. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js +670 -0
  15. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
  16. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
  17. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js +553 -0
  18. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
  19. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
  20. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js +650 -0
  21. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
  22. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
  23. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js +639 -0
  24. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +1 -0
  25. package/dist/cjs/components/text-field/TextField.js +2 -2
  26. package/dist/cjs/components/text-field/TextField.js.map +1 -1
  27. package/dist/cjs/constants/assets_BACKUP_14924.d.ts +20 -0
  28. package/dist/cjs/constants/assets_BACKUP_14924.js +30 -0
  29. package/dist/cjs/constants/assets_BACKUP_14924.js.map +1 -0
  30. package/dist/cjs/constants/assets_BASE_14924.d.ts +21 -0
  31. package/dist/cjs/constants/assets_BASE_14924.js +32 -0
  32. package/dist/cjs/constants/assets_BASE_14924.js.map +1 -0
  33. package/dist/cjs/constants/assets_LOCAL_14924.d.ts +20 -0
  34. package/dist/cjs/constants/assets_LOCAL_14924.js +30 -0
  35. package/dist/cjs/constants/assets_LOCAL_14924.js.map +1 -0
  36. package/dist/cjs/constants/assets_REMOTE_14924.d.ts +21 -0
  37. package/dist/cjs/constants/assets_REMOTE_14924.js +32 -0
  38. package/dist/cjs/constants/assets_REMOTE_14924.js.map +1 -0
  39. package/dist/cjs/constants/copy.d.ts +9 -0
  40. package/dist/cjs/constants/copy.js +12 -3
  41. package/dist/cjs/constants/copy.js.map +1 -1
  42. package/dist/cjs/constants/publish.d.ts +9 -0
  43. package/dist/cjs/constants/publish.js +26 -0
  44. package/dist/cjs/constants/publish.js.map +1 -0
  45. package/dist/cjs/services/API.d.ts +2 -2
  46. package/dist/cjs/services/API.js +11 -4
  47. package/dist/cjs/services/API.js.map +1 -1
  48. package/dist/esm/components/publish-wizard/EmailWorkflow.d.ts +2 -0
  49. package/dist/esm/components/publish-wizard/EmailWorkflow.js +398 -0
  50. package/dist/esm/components/publish-wizard/EmailWorkflow.js.map +1 -0
  51. package/dist/esm/components/publish-wizard/PublishWizard.js +15 -5
  52. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  53. package/dist/esm/components/publish-wizard/copy.d.ts +186 -0
  54. package/dist/esm/components/publish-wizard/copy.js +196 -0
  55. package/dist/esm/components/publish-wizard/copy.js.map +1 -0
  56. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +90 -23
  57. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  58. package/dist/esm/components/story-previewer/StoryPreviewer.js +1 -1
  59. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  60. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
  61. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js +554 -0
  62. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
  63. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
  64. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js +489 -0
  65. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
  66. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
  67. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js +537 -0
  68. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
  69. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
  70. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js +526 -0
  71. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +1 -0
  72. package/dist/esm/components/text-field/TextField.js +2 -2
  73. package/dist/esm/components/text-field/TextField.js.map +1 -1
  74. package/dist/esm/constants/assets_BACKUP_14924.d.ts +20 -0
  75. package/dist/esm/constants/assets_BACKUP_14924.js +26 -0
  76. package/dist/esm/constants/assets_BACKUP_14924.js.map +1 -0
  77. package/dist/esm/constants/assets_BASE_14924.d.ts +21 -0
  78. package/dist/esm/constants/assets_BASE_14924.js +28 -0
  79. package/dist/esm/constants/assets_BASE_14924.js.map +1 -0
  80. package/dist/esm/constants/assets_LOCAL_14924.d.ts +20 -0
  81. package/dist/esm/constants/assets_LOCAL_14924.js +26 -0
  82. package/dist/esm/constants/assets_LOCAL_14924.js.map +1 -0
  83. package/dist/esm/constants/assets_REMOTE_14924.d.ts +21 -0
  84. package/dist/esm/constants/assets_REMOTE_14924.js +28 -0
  85. package/dist/esm/constants/assets_REMOTE_14924.js.map +1 -0
  86. package/dist/esm/constants/copy.d.ts +9 -0
  87. package/dist/esm/constants/copy.js +12 -3
  88. package/dist/esm/constants/copy.js.map +1 -1
  89. package/dist/esm/constants/publish.d.ts +9 -0
  90. package/dist/esm/constants/publish.js +23 -0
  91. package/dist/esm/constants/publish.js.map +1 -0
  92. package/dist/esm/services/API.d.ts +2 -2
  93. package/dist/esm/services/API.js +11 -4
  94. package/dist/esm/services/API.js.map +1 -1
  95. package/dist/styles.css +8 -0
  96. package/dist/styles.less +9 -0
  97. package/less/components/publish-wizard.less +9 -0
  98. package/package.json +1 -1
  99. package/src/components/publish-wizard/PublishWizard.tsx +21 -7
  100. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +182 -48
  101. package/src/components/story-previewer/StoryPreviewer.tsx +2 -2
  102. package/src/components/text-field/TextField.tsx +2 -2
  103. package/src/constants/copy.ts +14 -3
  104. package/src/constants/publish.ts +24 -0
  105. 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, batchName: string) => any;
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
- isMissing: boolean;
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
- isMissing: false
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, name }
275
+ data: { id }
248
276
  }
249
277
  } = this.props;
250
- renderBatch(id, name)
251
- .then(() => {
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, name });
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 renderBatch({ id, name }) {
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, name)
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({ renderedBatch: false });
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 { uploadComplete, uploading, downloading, renderedBatch, selectedBatchId } =
493
- this.state;
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
- <div>
538
- <h2>{uploadComplete ? copy.publish.downloadLink : copy.publish.generatingLink}</h2>
539
- <HRule />
540
- <p>
541
- {uploadComplete ? copy.publish.downloadDesc : copy.publish.generatingLinkDesc}
542
- </p>
543
-
544
- {isExport && uploadComplete && !renderedBatch ? (
545
- <BigButton
546
- label={reRenderLabel}
547
- disabled={isExport}
548
- />
549
- ) : (
550
- <BigButton
551
- label={downloadCsvLabel}
552
- disabled={downloading}
553
- onClick={() => this.downloadCsv()}
554
- />
555
- )}
556
- </div>
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((error) =>
772
- alert(`${ERROR.download.replace('[error]', 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);
@@ -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 UserList',
147
+ uploadCsv: 'Upload Your CSV',
139
148
  generatingLink: 'STEP 4: Generating embed links',
140
- downloadLink: 'STEP 5: Download Your Userlist CSV file',
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
+ ];
@@ -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 = (batchId: string): Promise<any | Error> => {
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