@imposium-hub/components 1.55.0 → 1.57.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 (108) hide show
  1. package/dist/cjs/components/font-picker/FontPicker.d.ts +44 -0
  2. package/dist/cjs/components/font-picker/FontPicker.js +182 -0
  3. package/dist/cjs/components/font-picker/FontPicker.js.map +1 -0
  4. package/dist/cjs/components/font-picker/font-manager/FontManager.d.ts +26 -0
  5. package/dist/cjs/components/font-picker/font-manager/FontManager.js +209 -0
  6. package/dist/cjs/components/font-picker/font-manager/FontManager.js.map +1 -0
  7. package/dist/cjs/components/font-picker/font-manager/constants.d.ts +4 -0
  8. package/dist/cjs/components/font-picker/font-manager/constants.js +8 -0
  9. package/dist/cjs/components/font-picker/font-manager/constants.js.map +1 -0
  10. package/dist/cjs/components/font-picker/font-manager/fontStyle.d.ts +1 -0
  11. package/dist/cjs/components/font-picker/font-manager/fontStyle.js +61 -0
  12. package/dist/cjs/components/font-picker/font-manager/fontStyle.js.map +1 -0
  13. package/dist/cjs/components/font-picker/font-manager/types.d.ts +25 -0
  14. package/dist/cjs/components/font-picker/font-manager/types.js +12 -0
  15. package/dist/cjs/components/font-picker/font-manager/types.js.map +1 -0
  16. package/dist/cjs/components/font-picker/font-manager/utils.d.ts +3 -0
  17. package/dist/cjs/components/font-picker/font-manager/utils.js +42 -0
  18. package/dist/cjs/components/font-picker/font-manager/utils.js.map +1 -0
  19. package/dist/cjs/components/publish-wizard/EmailWorkflow.d.ts +2 -0
  20. package/dist/cjs/components/publish-wizard/EmailWorkflow.js +491 -0
  21. package/dist/cjs/components/publish-wizard/EmailWorkflow.js.map +1 -0
  22. package/dist/cjs/components/publish-wizard/copy.d.ts +186 -0
  23. package/dist/cjs/components/publish-wizard/copy.js +199 -0
  24. package/dist/cjs/components/publish-wizard/copy.js.map +1 -0
  25. package/dist/cjs/components/story-previewer/StoryPreviewer.js +120 -9
  26. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  27. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
  28. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js +670 -0
  29. package/dist/cjs/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
  30. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
  31. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js +553 -0
  32. package/dist/cjs/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
  33. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
  34. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js +650 -0
  35. package/dist/cjs/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
  36. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
  37. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js +639 -0
  38. package/dist/cjs/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +1 -0
  39. package/dist/cjs/constants/copy.d.ts +2 -0
  40. package/dist/cjs/constants/copy.js +6 -2
  41. package/dist/cjs/constants/copy.js.map +1 -1
  42. package/dist/cjs/index.d.ts +2 -1
  43. package/dist/cjs/index.js +3 -1
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/redux/actions/asset-list.js +5 -2
  46. package/dist/cjs/redux/actions/asset-list.js.map +1 -1
  47. package/dist/esm/components/font-picker/FontPicker.d.ts +44 -0
  48. package/dist/esm/components/font-picker/FontPicker.js +134 -0
  49. package/dist/esm/components/font-picker/FontPicker.js.map +1 -0
  50. package/dist/esm/components/font-picker/font-manager/FontManager.d.ts +26 -0
  51. package/dist/esm/components/font-picker/font-manager/FontManager.js +105 -0
  52. package/dist/esm/components/font-picker/font-manager/FontManager.js.map +1 -0
  53. package/dist/esm/components/font-picker/font-manager/constants.d.ts +4 -0
  54. package/dist/esm/components/font-picker/font-manager/constants.js +5 -0
  55. package/dist/esm/components/font-picker/font-manager/constants.js.map +1 -0
  56. package/dist/esm/components/font-picker/font-manager/fontStyle.d.ts +1 -0
  57. package/dist/esm/components/font-picker/font-manager/fontStyle.js +65 -0
  58. package/dist/esm/components/font-picker/font-manager/fontStyle.js.map +1 -0
  59. package/dist/esm/components/font-picker/font-manager/types.d.ts +25 -0
  60. package/dist/esm/components/font-picker/font-manager/types.js +9 -0
  61. package/dist/esm/components/font-picker/font-manager/types.js.map +1 -0
  62. package/dist/esm/components/font-picker/font-manager/utils.d.ts +3 -0
  63. package/dist/esm/components/font-picker/font-manager/utils.js +36 -0
  64. package/dist/esm/components/font-picker/font-manager/utils.js.map +1 -0
  65. package/dist/esm/components/publish-wizard/EmailWorkflow.d.ts +2 -0
  66. package/dist/esm/components/publish-wizard/EmailWorkflow.js +398 -0
  67. package/dist/esm/components/publish-wizard/EmailWorkflow.js.map +1 -0
  68. package/dist/esm/components/publish-wizard/copy.d.ts +186 -0
  69. package/dist/esm/components/publish-wizard/copy.js +196 -0
  70. package/dist/esm/components/publish-wizard/copy.js.map +1 -0
  71. package/dist/esm/components/story-previewer/StoryPreviewer.js +72 -10
  72. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  73. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.d.ts +2 -0
  74. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js +554 -0
  75. package/dist/esm/components/story-previewer/StoryPreviewer_BACKUP_64741.js.map +1 -0
  76. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.d.ts +2 -0
  77. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js +489 -0
  78. package/dist/esm/components/story-previewer/StoryPreviewer_BASE_64741.js.map +1 -0
  79. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.d.ts +2 -0
  80. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js +537 -0
  81. package/dist/esm/components/story-previewer/StoryPreviewer_LOCAL_64741.js.map +1 -0
  82. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.d.ts +2 -0
  83. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js +526 -0
  84. package/dist/esm/components/story-previewer/StoryPreviewer_REMOTE_64741.js.map +1 -0
  85. package/dist/esm/constants/copy.d.ts +2 -0
  86. package/dist/esm/constants/copy.js +5 -1
  87. package/dist/esm/constants/copy.js.map +1 -1
  88. package/dist/esm/index.d.ts +2 -1
  89. package/dist/esm/index.js +2 -1
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/redux/actions/asset-list.js +5 -2
  92. package/dist/esm/redux/actions/asset-list.js.map +1 -1
  93. package/dist/styles.css +111 -0
  94. package/dist/styles.less +137 -0
  95. package/less/components/font-picker.less +131 -0
  96. package/less/components/story-previewer.less +5 -0
  97. package/less/entry.less +2 -1
  98. package/package.json +1 -1
  99. package/src/components/font-picker/FontPicker.tsx +222 -0
  100. package/src/components/font-picker/font-manager/FontManager.ts +138 -0
  101. package/src/components/font-picker/font-manager/constants.ts +7 -0
  102. package/src/components/font-picker/font-manager/fontStyle.ts +78 -0
  103. package/src/components/font-picker/font-manager/types.ts +83 -0
  104. package/src/components/font-picker/font-manager/utils.ts +36 -0
  105. package/src/components/story-previewer/StoryPreviewer.tsx +117 -24
  106. package/src/constants/copy.ts +6 -1
  107. package/src/index.ts +3 -1
  108. package/src/redux/actions/asset-list.ts +5 -3
@@ -0,0 +1,65 @@
1
+ import { FONT_BASE_URL, FONT_FACE_REGEX } from './constants';
2
+ import { get, getMatches } from './utils';
3
+ export const createFontStyleSheets = (defaultFonts, uniqueFonts, availableFonts) => {
4
+ defaultFonts.map((font) => {
5
+ const fonts = uniqueFonts.find((f) => f.family === font.family);
6
+ const fontId = font.name.toLowerCase().split(' ').join('-');
7
+ // non Google Font style
8
+ if (fonts?.file) {
9
+ fillFontStyleSheets(fontId, font);
10
+ }
11
+ // google font style
12
+ if (fonts?.files) {
13
+ const fontURL = new URL(FONT_BASE_URL);
14
+ fontURL.searchParams.append('family', `${font.family}:wght@${font.weight}`);
15
+ fontURL.searchParams.append('text', font.name);
16
+ fontURL.searchParams.append('font-display', 'swap');
17
+ get(fontURL.href)
18
+ .then((res) => {
19
+ const rule = getMatches(FONT_FACE_REGEX, res);
20
+ const updateFont = rule[rule.length - 1].replace(font.family, font.name);
21
+ fillFontStyleSheets(fontId, updateFont, font.name);
22
+ })
23
+ .catch((e) => console.error(e));
24
+ }
25
+ });
26
+ // custom font style
27
+ if (availableFonts) {
28
+ availableFonts.map((font) => {
29
+ const fontId = font.name.toLowerCase();
30
+ fillFontStyleSheets(fontId, font);
31
+ });
32
+ }
33
+ };
34
+ const fillFontStyleSheets = (fontId, font, fontName) => {
35
+ let stylesheetNode = document.getElementById(`font-${fontId}`);
36
+ const { weight, file, url, name, family } = font;
37
+ const fontFamily = name !== family ? name : family;
38
+ const fontWeight = weight ? `font-weight: ${weight};` : '';
39
+ const fontUrl = file ? `fonts/${file}` : `${url}`;
40
+ if (stylesheetNode === null) {
41
+ stylesheetNode = stylesheetNode;
42
+ stylesheetNode = document.createElement('style');
43
+ if (stylesheetNode !== null) {
44
+ stylesheetNode.id = `font-${fontId}`;
45
+ stylesheetNode.setAttribute('data-is-preview', 'true');
46
+ // non-google and custom fonts style
47
+ if (fontFamily && fontFamily && fontUrl) {
48
+ stylesheetNode.textContent = `
49
+ @font-face {
50
+ font-family: ${fontFamily};
51
+ ${fontWeight}
52
+ src: url(${fontUrl});
53
+ }`;
54
+ }
55
+ if (fontName) {
56
+ stylesheetNode.textContent = `
57
+ @font-face {
58
+ ${font.replace(`'${fontName}'`, fontName)}
59
+ }`;
60
+ }
61
+ document.head.appendChild(stylesheetNode);
62
+ }
63
+ }
64
+ };
65
+ //# sourceMappingURL=fontStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fontStyle.js","sourceRoot":"","sources":["../../../../../src/components/font-picker/font-manager/fontStyle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare type Category = 'sans-serif' | 'serif' | 'display' | 'handwriting' | 'monospace';
2
+ export declare type Script = 'arabic' | 'bengali' | 'chinese-simplified' | 'chinese-traditional' | 'cyrillic' | 'cyrillic-ext' | 'devanagari' | 'greek' | 'greek-ext' | 'gujarati' | 'gurmukhi' | 'hebrew' | 'japanese' | 'kannada' | 'khmer' | 'korean' | 'latin' | 'latin-ext' | 'malayalam' | 'myanmar' | 'oriya' | 'sinhala' | 'tamil' | '​telugu' | 'thai' | 'vietnamese';
3
+ export declare type SortOption = 'alphabet' | 'popularity';
4
+ export declare type Variant = '100' | '100italic' | '200' | '200italic' | '300' | '300italic' | 'regular' | 'italic' | '500' | '500italic' | '600' | '600italic' | '700' | '700italic' | '800' | '800italic' | '900' | '900italic';
5
+ export interface Font {
6
+ family: string;
7
+ id: string;
8
+ category: Category;
9
+ scripts: Script[];
10
+ variants: Variant[];
11
+ kind?: string;
12
+ version?: string;
13
+ lastModified?: string;
14
+ files?: Record<Variant, string>;
15
+ }
16
+ export declare type FontList = Map<string, Font>;
17
+ export interface Options {
18
+ families: string[];
19
+ categories: Category[];
20
+ scripts: Script[];
21
+ variants: Variant[];
22
+ filter: (font: Font) => boolean;
23
+ limit: number;
24
+ }
25
+ export declare const OPTIONS_DEFAULTS: Options;
@@ -0,0 +1,9 @@
1
+ export const OPTIONS_DEFAULTS = {
2
+ families: [],
3
+ categories: [],
4
+ scripts: ['latin'],
5
+ variants: ['regular'],
6
+ filter: () => true,
7
+ limit: 50
8
+ };
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/components/font-picker/font-manager/types.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACrC,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,OAAO,EAAE,CAAC,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;IAClB,KAAK,EAAE,EAAE;CACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const getFontId: (fontFamily: string) => string;
2
+ export declare const get: (url: string) => Promise<string>;
3
+ export declare const getMatches: (regex: RegExp, str: string) => string[];
@@ -0,0 +1,36 @@
1
+ export const getFontId = (fontFamily) => {
2
+ return fontFamily.replace(/\s+/g, '-').toLowerCase();
3
+ };
4
+ export const get = (url) => {
5
+ return new Promise((resolve, reject) => {
6
+ const request = new XMLHttpRequest();
7
+ request.overrideMimeType('application/json');
8
+ request.open('GET', url, true);
9
+ request.onreadystatechange = () => {
10
+ // Request has completed
11
+ if (request.readyState === 4) {
12
+ if (request.status !== 200) {
13
+ // On error
14
+ reject(new Error(`Response has status code ${request.status}`));
15
+ }
16
+ else {
17
+ // On success
18
+ resolve(request.responseText);
19
+ }
20
+ }
21
+ };
22
+ request.send();
23
+ });
24
+ };
25
+ export const getMatches = (regex, str) => {
26
+ const matches = [];
27
+ let match;
28
+ do {
29
+ match = regex.exec(str);
30
+ if (match) {
31
+ matches.push(match[1]);
32
+ }
33
+ } while (match);
34
+ return matches;
35
+ };
36
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/font-picker/font-manager/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAU,EAAE;IACpD,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAmB,EAAE;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;QACzC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,kBAAkB,GAAG,GAAS,EAAE;YACpC,wBAAwB;YACxB,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;gBAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;oBACxB,WAAW;oBACX,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;iBACnE;qBAAM;oBACH,aAAa;oBACb,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;iBACjC;aACJ;QACL,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAW,EAAY,EAAE;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,CAAC;IACV,GAAG;QACC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,EAAE;YACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1B;KACJ,QAAQ,KAAK,EAAE;IAChB,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,398 @@
1
+ import * as React from 'react';
2
+ import HRule from '../../h-rule/HRule';
3
+ import Spinner from '../../spinner/Spinner';
4
+ import * as copy from '../../../constants/copy';
5
+ import { BigButton } from '../PublishWizard';
6
+ import { ExportToCsv } from 'export-to-csv';
7
+ import { ICON_DOWNLOAD, ICON_UPLOAD } from '../../../constants/icons';
8
+ import moment from 'moment';
9
+ import { bindActionCreators } from 'redux';
10
+ import { connect } from 'react-redux';
11
+ import SelectField from '../../select-field/SelectField';
12
+ import { updateAssociation, getBatch, setPage } from '../../../redux/actions/active-batch';
13
+ import TextField from '../../text-field/TextField';
14
+ class EmailWorkflow extends React.PureComponent {
15
+ hiddenFileInputRef;
16
+ static PROGRESS_MAX_VALUE = 100;
17
+ static CSV_EXPORT_CONFIG = {
18
+ fieldSeparator: ',',
19
+ quoteStrings: '"',
20
+ decimalSeparator: '.',
21
+ showLabels: false,
22
+ showTitle: false,
23
+ useTextFile: false,
24
+ useBom: false,
25
+ useKeysAsHeaders: true
26
+ };
27
+ constructor(props) {
28
+ super(props);
29
+ this.state = {
30
+ uploadComplete: false,
31
+ uploading: false,
32
+ downloading: false,
33
+ selectedBatchId: '',
34
+ renderedBatch: false,
35
+ inventory: [],
36
+ inventoryKeys: [],
37
+ missingColumns: '',
38
+ isMissing: false,
39
+ creativeManagerOverrides: {
40
+ creativeId: '',
41
+ versionListId: '',
42
+ creativeLibraryId: '',
43
+ }
44
+ };
45
+ this.hiddenFileInputRef = React.createRef();
46
+ }
47
+ componentDidMount() {
48
+ this.getInventory();
49
+ }
50
+ componentDidUpdate() {
51
+ const { activeBatch: { data: { columns } }, batchJobs: { missing } } = this.props;
52
+ if (missing.length >= 0 && columns) {
53
+ const varArray = this.getVarArray();
54
+ const colArray = this.getColArray();
55
+ this.checkOnNext(varArray, colArray);
56
+ }
57
+ }
58
+ getVarArray() {
59
+ const { variables } = this.props;
60
+ return Object.keys(variables).map((key) => {
61
+ const opt = { ...variables[key] };
62
+ return opt;
63
+ });
64
+ }
65
+ getColArray() {
66
+ const { activeBatch: { data: { columns } } } = this.props;
67
+ return Object.keys(columns).map((i) => {
68
+ return columns[i];
69
+ });
70
+ }
71
+ checkOnNext(varArray, colArray) {
72
+ let required = 0;
73
+ let filled = 0;
74
+ for (const v of varArray) {
75
+ if (!v.optional) {
76
+ required++;
77
+ colArray.findIndex((c) => {
78
+ if (c.type === 'UGC' && c.detail === v.id) {
79
+ filled++;
80
+ }
81
+ });
82
+ this.props.onNext(filled === required);
83
+ }
84
+ }
85
+ }
86
+ getInventory() {
87
+ const { acts } = this.props.story;
88
+ const actsKeys = Object.keys(acts);
89
+ let inventory = {};
90
+ actsKeys.forEach((actKey) => {
91
+ inventory = { ...inventory, ...acts[actKey].inventory };
92
+ });
93
+ const inventoryKeys = Object.keys(inventory).sort();
94
+ this.setState({ inventory });
95
+ this.setState({ inventoryKeys });
96
+ }
97
+ downloadSampleCsv() {
98
+ const { name } = this.props.story;
99
+ const { inventory, inventoryKeys } = this.state;
100
+ const maskConfig = inventoryKeys.map((currKey) => ({
101
+ id: currKey,
102
+ name: inventory[currKey].name,
103
+ show: true
104
+ }));
105
+ const emptyRow = maskConfig
106
+ .map((m) => m.id)
107
+ .reduce((prevState, currId) => ({ ...prevState, [currId]: '' }), {});
108
+ const filename = `${alphaNumeric(name)}-batch-template`;
109
+ const exporter = new ExportToCsv({
110
+ ...EmailWorkflow.CSV_EXPORT_CONFIG,
111
+ filename
112
+ });
113
+ exporter.generateCsv([emptyRow]);
114
+ }
115
+ selectCsv = () => {
116
+ if (this.hiddenFileInputRef.current) {
117
+ this.hiddenFileInputRef.current.click();
118
+ }
119
+ };
120
+ getBatchName() {
121
+ const { story: { name }, compositionName } = this.props;
122
+ const date = Date.now();
123
+ const dateStr = moment(date).format('MMDDYY-HHmm');
124
+ const batchName = `${alphaNumeric(name)}-${alphaNumeric(compositionName)}-${dateStr}`;
125
+ return batchName;
126
+ }
127
+ doUploadCsv = (uploadEvt) => {
128
+ uploadEvt.persist();
129
+ const { handleError } = this.props;
130
+ this.setState({
131
+ uploading: true,
132
+ renderedBatch: false
133
+ });
134
+ this.props
135
+ .createFreshBatch(this.getBatchName())
136
+ .then((res) => {
137
+ const { id, name, story_id } = res;
138
+ this.setState({ selectedBatchId: id });
139
+ this.importBatch({ story_id, id, name, uploadEvt });
140
+ })
141
+ .catch((e) => {
142
+ handleError(e);
143
+ this.setState({ uploadComplete: false, uploading: false });
144
+ throw e;
145
+ });
146
+ };
147
+ getBatch = () => {
148
+ const { api } = this.props;
149
+ this.props.setPage(1);
150
+ this.props.getBatch(api);
151
+ };
152
+ proceedWithExport() {
153
+ const { renderBatch, activeBatch: { data: { id, name } } } = this.props;
154
+ renderBatch(id, name)
155
+ .then(() => {
156
+ this.setState({ renderedBatch: true });
157
+ })
158
+ .catch((e) => {
159
+ this.props.handleError(copy.publish.renderBatchFailed);
160
+ this.setState({ renderedBatch: false });
161
+ throw e;
162
+ });
163
+ }
164
+ importBatch({ story_id, id, name, uploadEvt }) {
165
+ const { accessKey, compositionId, isExport, onError } = this.props;
166
+ this.props
167
+ .importBatchFromCsv(story_id, id, name, uploadEvt.target.files[0], accessKey, compositionId, !isExport, isExport)
168
+ .then(() => {
169
+ if (this.props.batchJobs.missing.length > 0) {
170
+ onError();
171
+ }
172
+ this.setState({ uploadComplete: true, uploading: false });
173
+ this.getBatch();
174
+ if (isExport && Object.keys(this.props.batchJobs.missing).length === 0) {
175
+ this.renderBatch({ id, name });
176
+ }
177
+ })
178
+ .catch((e) => {
179
+ this.setState({ uploadComplete: false, uploading: false });
180
+ throw e;
181
+ });
182
+ }
183
+ renderBatch({ id, name }) {
184
+ this.props
185
+ .renderBatch(id, name)
186
+ .then(() => {
187
+ this.setState({ renderedBatch: true });
188
+ })
189
+ .catch((e) => {
190
+ this.props.handleError(copy.publish.renderBatchFailed);
191
+ this.setState({ renderedBatch: false });
192
+ throw e;
193
+ });
194
+ }
195
+ downloadCsv() {
196
+ this.setState({
197
+ downloading: true
198
+ }, () => {
199
+ const { status, handleError } = this.props;
200
+ const { selectedBatchId } = this.state;
201
+ if (status === copy.header.publishing) {
202
+ handleError(copy.publish.downloadError);
203
+ return;
204
+ }
205
+ this.props.getBatchExport(selectedBatchId).then(() => {
206
+ this.props.onDone();
207
+ this.setState({
208
+ downloading: false
209
+ });
210
+ });
211
+ });
212
+ }
213
+ renderLabel() {
214
+ const { isExport, batchJobs } = this.props;
215
+ const { renderedBatch, selectedBatchId, uploading, uploadComplete } = this.state;
216
+ if (isExport &&
217
+ uploadComplete &&
218
+ !renderedBatch &&
219
+ Object.keys(this.props.batchJobs.missing).length === 0) {
220
+ return (React.createElement("div", { className: 'progress-bar' },
221
+ React.createElement("progress", { max: EmailWorkflow.PROGRESS_MAX_VALUE, value: batchJobs.renders[selectedBatchId] })));
222
+ }
223
+ if (uploading) {
224
+ const uploadingCopy = isExport
225
+ ? copy.publish.importingData
226
+ : copy.publish.creatingLinks;
227
+ return (React.createElement("span", null,
228
+ React.createElement(Spinner, null),
229
+ "\u00A0",
230
+ uploadingCopy));
231
+ }
232
+ return (React.createElement("span", null,
233
+ ICON_UPLOAD,
234
+ "\u00A0",
235
+ copy.publish.uploadCsv));
236
+ }
237
+ onAssociationChange(colIndex, e) {
238
+ const { activeBatch: { data: { columns } } } = this.props;
239
+ // Change the previous association back to static
240
+ const previousColumn = columns.findIndex((col) => {
241
+ return col.detail === e;
242
+ });
243
+ if (previousColumn !== -1) {
244
+ this.props.updateAssociation(this.props.api, previousColumn, 'Static', null);
245
+ }
246
+ // Set the new association
247
+ this.props.updateAssociation(this.props.api, parseInt(colIndex, 10), 'UGC', e);
248
+ }
249
+ renderColumnMap() {
250
+ const { activeBatch: { data: { columns } }, batchJobs: { missing }, error } = this.props;
251
+ if (missing.length > 0 && columns && error) {
252
+ const varArray = this.getVarArray();
253
+ const colArray = this.getColArray();
254
+ const colOpts = colArray
255
+ .filter((c) => {
256
+ if (c.from_import === 0) {
257
+ return false;
258
+ }
259
+ return true;
260
+ })
261
+ .map((c, i) => {
262
+ const opt = {
263
+ value: i,
264
+ label: c.name
265
+ };
266
+ const alignedColIdx = varArray.findIndex((v) => {
267
+ return c.detail === v.id;
268
+ });
269
+ if (alignedColIdx !== -1) {
270
+ opt.disabled = true;
271
+ }
272
+ return opt;
273
+ });
274
+ // add an empty option to the columns
275
+ colOpts.unshift('');
276
+ const missingColumn = Object.keys(missing).map((m) => missing[m]);
277
+ const showMissing = missingColumn.join();
278
+ if (colOpts.length < varArray.length) {
279
+ return (React.createElement(React.Fragment, null,
280
+ React.createElement("h2", null, copy.publish.titleMissingColumns),
281
+ React.createElement(HRule, null),
282
+ React.createElement("p", { className: 'missingColumns' }, `${copy.publish.csvMissingColumns} ${showMissing}`)));
283
+ }
284
+ else {
285
+ return (React.createElement("div", { className: 'align-columns' },
286
+ React.createElement("h2", { className: 'match-columns' }, `${copy.publish.csvMatchColumns}`),
287
+ React.createElement(HRule, null),
288
+ React.createElement("table", null,
289
+ React.createElement("thead", null,
290
+ React.createElement("tr", null,
291
+ React.createElement("th", null, "Variable"),
292
+ React.createElement("th", null, "CSV Column"))),
293
+ React.createElement("tbody", null, varArray.map((v, i) => {
294
+ const selectedCol = colArray.findIndex((c) => {
295
+ return c.detail === v.id;
296
+ });
297
+ const selectedVal = selectedCol !== undefined && selectedCol !== null
298
+ ? selectedCol
299
+ : '';
300
+ const rClass = !v.optional ? 'required' : '';
301
+ return (React.createElement("tr", { key: `var-${v.id}`, className: `${rClass}` },
302
+ React.createElement("td", { className: 'variable' },
303
+ React.createElement("p", null,
304
+ v.name,
305
+ ' ',
306
+ !v.optional ? (React.createElement("span", { style: { color: 'red' } }, " * ")) : null)),
307
+ React.createElement("td", null,
308
+ React.createElement(SelectField, { options: colOpts, value: selectedVal, onChange: (c) => this.onAssociationChange(c, v.id) }))));
309
+ })))));
310
+ }
311
+ }
312
+ }
313
+ render() {
314
+ const { uploadComplete, uploading, downloading, renderedBatch, selectedBatchId, creativeManagerOverrides } = this.state;
315
+ const { isExport, batchJobs: { missing, renders }, isCrM } = this.props;
316
+ const emailOptions = [
317
+ {
318
+ label: (React.createElement("span", null,
319
+ ICON_DOWNLOAD,
320
+ "\u00A0",
321
+ copy.publish.downloadSampleCsvLink)),
322
+ onClick: () => this.downloadSampleCsv(),
323
+ key: 'download-sample'
324
+ },
325
+ {
326
+ label: this.renderLabel(),
327
+ onClick: () => this.selectCsv(),
328
+ key: 'upload',
329
+ disabled: isExport ? uploadComplete || uploading : uploading
330
+ }
331
+ ];
332
+ const downloadCsvLabel = downloading ? (React.createElement("span", null,
333
+ React.createElement(Spinner, null),
334
+ "\u00A0",
335
+ copy.publish.exporting)) : (React.createElement("span", null,
336
+ ICON_DOWNLOAD,
337
+ "\u00A0",
338
+ copy.publish.btnDownload));
339
+ const reRenderLabel = (React.createElement("div", { className: 'progress-bar' },
340
+ React.createElement("progress", { max: EmailWorkflow.PROGRESS_MAX_VALUE, value: renders[selectedBatchId] })));
341
+ const downloadCSVDiv = (React.createElement("div", null,
342
+ React.createElement("h2", null, uploadComplete ? copy.publish.downloadLink : copy.publish.generatingLink),
343
+ React.createElement(HRule, null),
344
+ React.createElement("p", null, uploadComplete ? copy.publish.downloadDesc : copy.publish.generatingLinkDesc),
345
+ isExport && uploadComplete && !renderedBatch ? (React.createElement(BigButton, { label: reRenderLabel, disabled: isExport })) : (React.createElement(BigButton, { label: downloadCsvLabel, disabled: downloading, onClick: () => this.downloadCsv() }))));
346
+ const downloadCSV = (React.createElement(React.Fragment, null,
347
+ this.props.error ? (this.props.next ? downloadCSVDiv : '') : downloadCSVDiv,
348
+ this.renderColumnMap()));
349
+ const uploadCSV = (React.createElement("div", null,
350
+ React.createElement("h2", null, copy.publish.emailTitle),
351
+ React.createElement(HRule, null),
352
+ React.createElement("p", null, copy.publish.emailDesc),
353
+ React.createElement("input", { type: 'file', style: { display: 'none' }, accept: 'text/csv', ref: this.hiddenFileInputRef, onChange: this.doUploadCsv }),
354
+ isCrM && React.createElement(CrMOptions, { options: creativeManagerOverrides, onChange: (c) => this.setState({ creativeManagerOverrides: c }) }),
355
+ React.createElement("div", { className: 'link-wrapper' }, emailOptions?.map((option, index) => {
356
+ return (React.createElement(BigButton, { label: React.createElement("span", null, option.label), onClick: option.onClick, disabled: option?.disabled, key: option.key }));
357
+ }))));
358
+ return (isExport && Object.keys(missing).length === 0 ? renderedBatch : uploadComplete)
359
+ ? downloadCSV
360
+ : uploadCSV;
361
+ }
362
+ }
363
+ const alphaNumeric = (str) => {
364
+ return str.replace(/\W/g, '');
365
+ };
366
+ const mapDispatchToProps = (dispatch) => {
367
+ return bindActionCreators({
368
+ updateAssociation,
369
+ getBatch,
370
+ setPage
371
+ }, dispatch);
372
+ };
373
+ const mapStateToProps = (state) => {
374
+ return {
375
+ activeBatch: state.activeBatch,
376
+ batchesList: state.batchesList
377
+ };
378
+ };
379
+ const CrMOptions = ({ options, onChange }) => {
380
+ const onInputChange = (key, val) => {
381
+ const newOpts = { ...options };
382
+ newOpts[key] = val;
383
+ onChange(newOpts);
384
+ };
385
+ return React.createElement(React.Fragment, null,
386
+ React.createElement(HRule, null),
387
+ React.createElement("br", null),
388
+ React.createElement("h2", null, "Creative Manager Placement Variables"),
389
+ React.createElement("p", null, "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"),
390
+ React.createElement("br", null),
391
+ React.createElement(TextField, { width: '33%', labelPosition: 'top', label: 'Creative Library ID', value: options.creativeLibraryId, onChange: (v) => onInputChange('creativeLibraryId', v) }),
392
+ React.createElement(TextField, { width: '33%', labelPosition: 'top', label: 'Creative ID', value: options.creativeId, onChange: (v) => onInputChange('creativeId', v) }),
393
+ React.createElement(TextField, { width: '33%', labelPosition: 'top', label: 'Version List ID', value: options.versionListId, onChange: (v) => onInputChange('versionListId', v) }),
394
+ React.createElement("br", null),
395
+ React.createElement(HRule, null));
396
+ };
397
+ export default connect(mapStateToProps, mapDispatchToProps, null, { withRef: true })(EmailWorkflow);
398
+ //# sourceMappingURL=EmailWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailWorkflow.js","sourceRoot":"","sources":["../../../../src/components/publish-wizard/EmailWorkflow.tsx"],"names":[],"mappings":"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"}