@capillarytech/creatives-library 7.12.1 → 7.12.5

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 (57) hide show
  1. package/index.js +6 -0
  2. package/package.json +1 -1
  3. package/routes.js +7 -2
  4. package/services/api.js +8 -2
  5. package/v2Components/CapImageUpload/index.js +24 -11
  6. package/v2Components/CapImageUpload/index.scss +12 -27
  7. package/v2Components/CapImageUpload/messages.js +10 -5
  8. package/v2Components/TemplatePreview/_templatePreview.scss +13 -0
  9. package/v2Components/TemplatePreview/index.js +39 -1
  10. package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +33 -1
  11. package/v2Components/TemplatePreview/tests/index.test.js +7 -7
  12. package/v2Containers/App/constants.js +2 -1
  13. package/v2Containers/Assets/images/addCreativesIllustration.svg +30 -0
  14. package/v2Containers/Cap/messages.js +20 -1
  15. package/v2Containers/CreativesContainer/SlideBoxContent.js +57 -11
  16. package/v2Containers/CreativesContainer/SlideBoxHeader.js +5 -2
  17. package/v2Containers/CreativesContainer/constants.js +1 -0
  18. package/v2Containers/CreativesContainer/messages.js +4 -0
  19. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +24 -4
  20. package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +23 -4
  21. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +147 -2
  22. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +99 -1
  23. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +71 -0
  24. package/v2Containers/CreativesContainer/tests/index.test.js +21 -9
  25. package/v2Containers/Facebook/Advertisement/index.js +4 -2
  26. package/v2Containers/Rcs/actions.js +57 -0
  27. package/v2Containers/Rcs/constants.js +51 -0
  28. package/v2Containers/Rcs/index.js +1064 -0
  29. package/v2Containers/Rcs/index.scss +72 -0
  30. package/v2Containers/Rcs/messages.js +122 -0
  31. package/v2Containers/Rcs/reducer.js +107 -0
  32. package/v2Containers/Rcs/sagas.js +141 -0
  33. package/v2Containers/Rcs/selectors.js +8 -0
  34. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +145080 -0
  35. package/v2Containers/Rcs/tests/index.test.js +226 -0
  36. package/v2Containers/Rcs/tests/mockData.js +169 -0
  37. package/v2Containers/Rcs/utils.js +40 -0
  38. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -4
  39. package/v2Containers/Templates/_templates.scss +9 -1
  40. package/v2Containers/Templates/actions.js +2 -1
  41. package/v2Containers/Templates/constants.js +1 -0
  42. package/v2Containers/Templates/index.js +235 -174
  43. package/v2Containers/Templates/messages.js +20 -0
  44. package/v2Containers/Templates/reducer.js +2 -0
  45. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +520 -80
  46. package/v2Containers/TemplatesV2/index.js +2 -1
  47. package/v2Containers/TemplatesV2/messages.js +4 -0
  48. package/v2Containers/Whatsapp/constants.js +287 -0
  49. package/v2Containers/Whatsapp/index.js +39 -25
  50. package/v2Containers/Whatsapp/index.scss +3 -2
  51. package/v2Containers/Whatsapp/messages.js +284 -13
  52. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35583 -1700
  53. package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +32 -26
  54. package/v2Containers/Whatsapp/tests/index.test.js +13 -0
  55. package/v2Containers/Whatsapp/tests/utils.test.js +15 -8
  56. package/v2Containers/mockdata.js +1190 -2181
  57. package/v2Components/CallTaskPreview/tests/__snapshots__/index.test.js.snap +0 -30
@@ -28,7 +28,7 @@ import FTP from '../FTP';
28
28
  import Gallery from '../Assets/Gallery';
29
29
  import withStyles from '../../hoc/withStyles';
30
30
  import styles, { CapTabStyle } from './TemplatesV2.style';
31
- import { CREATIVES_UI_VIEW, LOYALTY, WHATSAPP } from '../App/constants';
31
+ import { CREATIVES_UI_VIEW, LOYALTY, WHATSAPP, RCS } from '../App/constants';
32
32
  import AccessForbidden from '../../v2Components/AccessForbidden';
33
33
  import { getObjFromQueryParams } from '../../utils/v2common';
34
34
 
@@ -54,6 +54,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
54
54
 
55
55
  const defaultPanes = {
56
56
  sms: {content: <></>, tab: intl.formatMessage(messages.sms), key: 'sms'},
57
+ rcs: { content: <></>, tab: intl.formatMessage(messages.rcs), key: RCS },
57
58
  email: {content: <></>, tab: intl.formatMessage(messages.email), key: 'email'},
58
59
  weChat: {content: <></>, tab: intl.formatMessage(messages.wechat), key: 'wechat'},
59
60
  //'wechat': {content: this.getTemplatesComponent('wechat'), tab: 'Wechat', key: 'wechat'},
@@ -58,6 +58,10 @@ export default defineMessages({
58
58
  id: 'creatives.containersV2.TemplatesV2.whatsapp',
59
59
  defaultMessage: 'WhatsApp',
60
60
  },
61
+ rcs: {
62
+ id: 'creatives.containersV2.TemplatesV2.rcs',
63
+ defaultMessage: 'RCS',
64
+ },
61
65
  gallery: {
62
66
  id: 'creatives.containersV2.TemplatesV2.gallery',
63
67
  defaultMessage: 'Gallery',
@@ -129,3 +129,290 @@ export const WHATSAPP_MEDIA_TYPES = {
129
129
  IMAGE: 'IMAGE',
130
130
  VIDEO: 'VIDEO',
131
131
  };
132
+
133
+ export const LANGUAGE_OPTIONS = [
134
+ {
135
+ value: 'af',
136
+ label: <FormattedMessage {...messages.afrikaans} />,
137
+ },
138
+ {
139
+ value: 'sq',
140
+ label: <FormattedMessage {...messages.albanian} />,
141
+ },
142
+ {
143
+ value: 'ar',
144
+ label: <FormattedMessage {...messages.arabic} />,
145
+ },
146
+ {
147
+ value: 'az',
148
+ label: <FormattedMessage {...messages.azerbaijani} />,
149
+ },
150
+ {
151
+ value: 'bn',
152
+ label: <FormattedMessage {...messages.bengali} />,
153
+ },
154
+ {
155
+ value: 'bg',
156
+ label: <FormattedMessage {...messages.bulgarian} />,
157
+ },
158
+ {
159
+ value: 'ca',
160
+ label: <FormattedMessage {...messages.catalan} />,
161
+ },
162
+ {
163
+ value: 'zh_CN',
164
+ label: <FormattedMessage {...messages.chineseCHN} />,
165
+ },
166
+ {
167
+ value: 'zh_HK',
168
+ label: <FormattedMessage {...messages.chineseHKG} />,
169
+ },
170
+ {
171
+ value: 'zh_TW',
172
+ label: <FormattedMessage {...messages.chineseTAI} />,
173
+ },
174
+ {
175
+ value: 'hr',
176
+ label: <FormattedMessage {...messages.croatian} />,
177
+ },
178
+ {
179
+ value: 'cs',
180
+ label: <FormattedMessage {...messages.czech} />,
181
+ },
182
+ {
183
+ value: 'da',
184
+ label: <FormattedMessage {...messages.danish} />,
185
+ },
186
+ {
187
+ value: 'nl',
188
+ label: <FormattedMessage {...messages.dutch} />,
189
+ },
190
+ {
191
+ value: 'en',
192
+ label: <FormattedMessage {...messages.english} />,
193
+ },
194
+ {
195
+ value: 'en_GB',
196
+ label: <FormattedMessage {...messages.englishUK} />,
197
+ },
198
+ {
199
+ value: 'en_US',
200
+ label: <FormattedMessage {...messages.englishUS} />,
201
+ },
202
+ {
203
+ value: 'et',
204
+ label: <FormattedMessage {...messages.estonian} />,
205
+ },
206
+ {
207
+ value: 'fil',
208
+ label: <FormattedMessage {...messages.filipino} />,
209
+ },
210
+ {
211
+ value: 'fi',
212
+ label: <FormattedMessage {...messages.finnish} />,
213
+ },
214
+ {
215
+ value: 'fr',
216
+ label: <FormattedMessage {...messages.french} />,
217
+ },
218
+ {
219
+ value: 'ka',
220
+ label: <FormattedMessage {...messages.georgian} />,
221
+ },
222
+ {
223
+ value: 'de',
224
+ label: <FormattedMessage {...messages.german} />,
225
+ },
226
+ {
227
+ value: 'el',
228
+ label: <FormattedMessage {...messages.greek} />,
229
+ },
230
+ {
231
+ value: 'gu',
232
+ label: <FormattedMessage {...messages.gujarati} />,
233
+ },
234
+ {
235
+ value: 'ha',
236
+ label: <FormattedMessage {...messages.hausa} />,
237
+ },
238
+ {
239
+ value: 'he',
240
+ label: <FormattedMessage {...messages.hebrew} />,
241
+ },
242
+ {
243
+ value: 'hi',
244
+ label: <FormattedMessage {...messages.hindi} />,
245
+ },
246
+ {
247
+ value: 'hu',
248
+ label: <FormattedMessage {...messages.hungarian} />,
249
+ },
250
+ {
251
+ value: 'id',
252
+ label: <FormattedMessage {...messages.indonesian} />,
253
+ },
254
+ {
255
+ value: 'ga',
256
+ label: <FormattedMessage {...messages.irish} />,
257
+ },
258
+ {
259
+ value: 'it',
260
+ label: <FormattedMessage {...messages.italian} />,
261
+ },
262
+ {
263
+ value: 'ja',
264
+ label: <FormattedMessage {...messages.japanese} />,
265
+ },
266
+ {
267
+ value: 'kn',
268
+ label: <FormattedMessage {...messages.kannada} />,
269
+ },
270
+ {
271
+ value: 'kk',
272
+ label: <FormattedMessage {...messages.kazakh} />,
273
+ },
274
+ {
275
+ value: 'rw_RW',
276
+ label: <FormattedMessage {...messages.kinyarwanda} />,
277
+ },
278
+ {
279
+ value: 'ko',
280
+ label: <FormattedMessage {...messages.korean} />,
281
+ },
282
+ {
283
+ value: 'ky_KG',
284
+ label: <FormattedMessage {...messages.kyrgyz} />,
285
+ },
286
+ {
287
+ value: 'lo',
288
+ label: <FormattedMessage {...messages.lao} />,
289
+ },
290
+ {
291
+ value: 'lv',
292
+ label: <FormattedMessage {...messages.latvian} />,
293
+ },
294
+ {
295
+ value: 'lt',
296
+ label: <FormattedMessage {...messages.lithuanian} />,
297
+ },
298
+ {
299
+ value: 'mk',
300
+ label: <FormattedMessage {...messages.macedonian} />,
301
+ },
302
+ {
303
+ value: 'ms',
304
+ label: <FormattedMessage {...messages.malay} />,
305
+ },
306
+ {
307
+ value: 'ml',
308
+ label: <FormattedMessage {...messages.malayalam} />,
309
+ },
310
+ {
311
+ value: 'mr',
312
+ label: <FormattedMessage {...messages.marathi} />,
313
+ },
314
+ {
315
+ value: 'nb',
316
+ label: <FormattedMessage {...messages.norwegian} />,
317
+ },
318
+ {
319
+ value: 'fa',
320
+ label: <FormattedMessage {...messages.persian} />,
321
+ },
322
+ {
323
+ value: 'pl',
324
+ label: <FormattedMessage {...messages.polish} />,
325
+ },
326
+ {
327
+ value: 'pt_BR',
328
+ label: <FormattedMessage {...messages.portugueseBR} />,
329
+ },
330
+ {
331
+ value: 'pt_PT',
332
+ label: <FormattedMessage {...messages.portuguesePOR} />,
333
+ },
334
+ {
335
+ value: 'pa',
336
+ label: <FormattedMessage {...messages.punjabi} />,
337
+ },
338
+ {
339
+ value: 'ro',
340
+ label: <FormattedMessage {...messages.romanian} />,
341
+ },
342
+ {
343
+ value: 'ru',
344
+ label: <FormattedMessage {...messages.russian} />,
345
+ },
346
+ {
347
+ value: 'sr',
348
+ label: <FormattedMessage {...messages.serbian} />,
349
+ },
350
+ {
351
+ value: 'sk',
352
+ label: <FormattedMessage {...messages.slovak} />,
353
+ },
354
+ {
355
+ value: 'sl',
356
+ label: <FormattedMessage {...messages.slovenian} />,
357
+ },
358
+ {
359
+ value: 'es',
360
+ label: <FormattedMessage {...messages.spanish} />,
361
+ },
362
+ {
363
+ value: 'es_AR',
364
+ label: <FormattedMessage {...messages.spanishARG} />,
365
+ },
366
+ {
367
+ value: 'es_ES',
368
+ label: <FormattedMessage {...messages.spanishSPA} />,
369
+ },
370
+ {
371
+ value: 'es_MX',
372
+ label: <FormattedMessage {...messages.spanishMEX} />,
373
+ },
374
+ {
375
+ value: 'sw',
376
+ label: <FormattedMessage {...messages.swahili} />,
377
+ },
378
+ {
379
+ value: 'sv',
380
+ label: <FormattedMessage {...messages.swedish} />,
381
+ },
382
+ {
383
+ value: 'ta',
384
+ label: <FormattedMessage {...messages.tamil} />,
385
+ },
386
+ {
387
+ value: 'te',
388
+ label: <FormattedMessage {...messages.telugu} />,
389
+ },
390
+ {
391
+ value: 'th',
392
+ label: <FormattedMessage {...messages.thai} />,
393
+ },
394
+ {
395
+ value: 'tr',
396
+ label: <FormattedMessage {...messages.turkish} />,
397
+ },
398
+ {
399
+ value: 'uk',
400
+ label: <FormattedMessage {...messages.ukrainian} />,
401
+ },
402
+ {
403
+ value: 'ur',
404
+ label: <FormattedMessage {...messages.urdu} />,
405
+ },
406
+ {
407
+ value: 'uz',
408
+ label: <FormattedMessage {...messages.uzbek} />,
409
+ },
410
+ {
411
+ value: 'vi',
412
+ label: <FormattedMessage {...messages.vietnamese} />,
413
+ },
414
+ {
415
+ value: 'zu',
416
+ label: <FormattedMessage {...messages.zulu} />,
417
+ },
418
+ ];
@@ -41,6 +41,7 @@ import {
41
41
  TEMPLATE_MESSAGE_MAX_LENGTH,
42
42
  WHATSAPP,
43
43
  CATEGORY_OPTIONS,
44
+ LANGUAGE_OPTIONS,
44
45
  WHATSAPP_STATUSES,
45
46
  TAG,
46
47
  EMBEDDED,
@@ -89,6 +90,9 @@ export const Whatsapp = (props) => {
89
90
  const [templateCategory, setTemplateCategory] = useState(
90
91
  formatMessage(messages.select),
91
92
  );
93
+ const [templateLanguage, setTemplateLanguage] = useState(
94
+ formatMessage(messages.select),
95
+ );
92
96
  const [templateMessage, setTemplateMessage] = useState('');
93
97
  const [templateMessageError, setTemplateMessageError] = useState(false);
94
98
  const [addedVarCount, setAddedVarCount] = useState(0);
@@ -172,10 +176,12 @@ export const Whatsapp = (props) => {
172
176
  category = '',
173
177
  status = WHATSAPP_STATUSES.unsubmitted,
174
178
  rejection_reason = null,
179
+ languages = [],
175
180
  } = editContent;
176
181
  setTemplateCategory(category);
177
182
  setTemplateStatus(status);
178
183
  setTemplateRejectionReason(rejection_reason);
184
+ setTemplateLanguage(languages[0]?.language);
179
185
  computeTempMsgArray();
180
186
  }
181
187
  }, [editData.templateDetails || templateData]);
@@ -427,7 +433,9 @@ export const Whatsapp = (props) => {
427
433
  //regex to accept only lowercase alphanumeric characters and underscores
428
434
  const templateNameRegex = /^[a-z0-9_]+$/;
429
435
  if (value === '') {
430
- errorMessage = formatMessage(messages.emptyTemplateNameErrorMessage);
436
+ errorMessage = formatMessage(
437
+ globalMessages.emptyTemplateNameErrorMessage,
438
+ );
431
439
  } else if (!templateNameRegex.test(value)) {
432
440
  errorMessage = formatMessage(messages.templateNameRegexErrorMessage);
433
441
  }
@@ -438,6 +446,10 @@ export const Whatsapp = (props) => {
438
446
  setTemplateCategory(value);
439
447
  };
440
448
 
449
+ const onTemplateLanguageChange = (value) => {
450
+ setTemplateLanguage(value);
451
+ };
452
+
441
453
  const onAddVar = () => {
442
454
  const validVarArr = templateMessage.match(validVarRegex) || [];
443
455
  const tempMsg = `${templateMessage}{{${validVarArr.length + 1}}}`;
@@ -501,18 +513,14 @@ export const Whatsapp = (props) => {
501
513
  return errorMessage;
502
514
  };
503
515
 
504
- const getPayloadContent = () => (
505
- (isEditFlow && !isFullMode)
506
- ? `${updatedSmsEditor.join('')}\n${formatMessage(
507
- messages.templateMessageUnsubscribeText,
508
- )}`
509
- : `${templateMessage}\n${formatMessage(
510
- messages.modifiedUnsubscribeText,
511
- {
512
- value: `{{${addedVarCount + 1}}}`,
513
- },
514
- )}`
515
- );
516
+ const getPayloadContent = () =>
517
+ isEditFlow && !isFullMode
518
+ ? `${updatedSmsEditor.join('')}\n${formatMessage(
519
+ messages.templateMessageUnsubscribeText,
520
+ )}`
521
+ : `${templateMessage}\n${formatMessage(messages.modifiedUnsubscribeText, {
522
+ value: `{{${addedVarCount + 1}}}`,
523
+ })}`;
516
524
 
517
525
  const createPayload = () => ({
518
526
  name: templateName,
@@ -523,7 +531,7 @@ export const Whatsapp = (props) => {
523
531
  category: templateCategory,
524
532
  languages: [
525
533
  {
526
- language: 'en',
534
+ language: templateLanguage,
527
535
  content: getPayloadContent(),
528
536
  },
529
537
  ],
@@ -588,8 +596,12 @@ export const Whatsapp = (props) => {
588
596
  if (templateName.trim() === '' || templateNameError) {
589
597
  return true;
590
598
  }
591
- //if template category is not selected
592
- if (templateCategory === 'Select') {
599
+ //if template category or language is not selected
600
+ if (
601
+ [templateCategory, templateLanguage].includes(
602
+ formatMessage(messages.select),
603
+ )
604
+ ) {
593
605
  return true;
594
606
  }
595
607
  //if template message is not entered
@@ -622,7 +634,7 @@ export const Whatsapp = (props) => {
622
634
  }
623
635
  />
624
636
  <CapInput
625
- id={`whatsapp_template_name_input`}
637
+ id="whatsapp_template_name_input"
626
638
  onChange={onTemplateNameChange}
627
639
  errorMessage={templateNameError}
628
640
  placeholder={formatMessage(globalMessages.templateNamePlaceholder)}
@@ -633,18 +645,18 @@ export const Whatsapp = (props) => {
633
645
  {/* template category */}
634
646
  {renderLabel('templateCategoryLabel')}
635
647
  <CapSelect
636
- id={'select-whatsapp-category'}
648
+ id="select-whatsapp-category"
637
649
  options={templateCategoryOptions || []}
638
650
  onChange={onTemplateCategoryChange}
639
651
  value={templateCategory}
640
652
  />
641
653
  {/* template language */}
642
654
  {renderLabel('messageLanguageLabel')}
643
- <CapInput
644
- id={`whatsapp_template_language_input`}
645
- defaultValue={'English'}
646
- size="default"
647
- disabled
655
+ <CapSelect
656
+ id="select-whatsapp-language"
657
+ options={LANGUAGE_OPTIONS || []}
658
+ onChange={onTemplateLanguageChange}
659
+ value={templateLanguage}
648
660
  />
649
661
  {/* template mdeia type */}
650
662
  {renderLabel('mediaLabel')}
@@ -680,7 +692,9 @@ export const Whatsapp = (props) => {
680
692
  type="flat"
681
693
  isAddBtn
682
694
  onClick={onAddVar}
683
- disabled={(addedVarCount >= 19 || templateMessageError) && templateMessage}
695
+ disabled={
696
+ (addedVarCount >= 19 || templateMessageError) && templateMessage
697
+ }
684
698
  >
685
699
  {formatMessage(messages.addVar)}
686
700
  </CapButton>
@@ -883,7 +897,7 @@ export const Whatsapp = (props) => {
883
897
  suffix={
884
898
  templateStatus === WHATSAPP_STATUSES.approved && (
885
899
  <TagList
886
- label={formatMessage(messages.addLabels)}
900
+ label={formatMessage(globalMessages.addLabels)}
887
901
  onTagSelect={onTagSelect}
888
902
  location={location}
889
903
  tags={tags || []}
@@ -1,4 +1,4 @@
1
- @import "~@capillarytech/cap-ui-library/styles/_variables";
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
2
 
3
3
  .cap-whatsapp-creatives {
4
4
  .whatsapp-render-heading {
@@ -52,7 +52,8 @@
52
52
  margin-right: $CAP_SPACE_16;
53
53
  width: 95%;
54
54
  }
55
- #select-whatsapp-category {
55
+ #select-whatsapp-category,
56
+ #select-whatsapp-language {
56
57
  width: 100%;
57
58
  }
58
59