@capillarytech/creatives-library 7.10.39 → 7.10.41

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 (38) hide show
  1. package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +0 -2
  2. package/containers/Email/index.js +2 -3
  3. package/index.js +6 -0
  4. package/package.json +1 -1
  5. package/routes.js +5 -0
  6. package/services/api.js +6 -1
  7. package/v2Components/TemplatePreview/_templatePreview.scss +7 -0
  8. package/v2Components/TemplatePreview/assets/images/whatsapp_mobile_android.svg +2041 -0
  9. package/v2Components/TemplatePreview/index.js +57 -3
  10. package/v2Components/TemplatePreview/messages.js +8 -0
  11. package/v2Containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +0 -2
  12. package/v2Containers/Assets/images/whatsappIllustration.png +0 -0
  13. package/v2Containers/CreativesContainer/SlideBoxContent.js +31 -2
  14. package/v2Containers/CreativesContainer/SlideBoxHeader.js +31 -3
  15. package/v2Containers/CreativesContainer/constants.js +1 -0
  16. package/v2Containers/CreativesContainer/messages.js +4 -0
  17. package/v2Containers/Email/index.js +1 -3
  18. package/v2Containers/Line/Container/index.js +1 -1
  19. package/v2Containers/Templates/_templates.scss +43 -0
  20. package/v2Containers/Templates/actions.js +18 -10
  21. package/v2Containers/Templates/constants.js +3 -1
  22. package/v2Containers/Templates/index.js +296 -44
  23. package/v2Containers/Templates/messages.js +32 -0
  24. package/v2Containers/Templates/reducer.js +3 -1
  25. package/v2Containers/TemplatesV2/index.js +2 -0
  26. package/v2Containers/TemplatesV2/messages.js +4 -0
  27. package/v2Containers/Whatsapp/actions.js +34 -0
  28. package/v2Containers/Whatsapp/constants.js +125 -0
  29. package/v2Containers/Whatsapp/index.js +831 -0
  30. package/v2Containers/Whatsapp/index.scss +56 -0
  31. package/v2Containers/Whatsapp/messages.js +221 -0
  32. package/v2Containers/Whatsapp/reducer.js +54 -0
  33. package/v2Containers/Whatsapp/sagas.js +77 -0
  34. package/v2Containers/Whatsapp/selectors.js +12 -0
  35. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +120831 -0
  36. package/v2Containers/Whatsapp/tests/index.test.js +132 -0
  37. package/v2Containers/Whatsapp/tests/mockData.js +10 -0
  38. package/v2Containers/Whatsapp/utils.js +106 -0
@@ -94,6 +94,10 @@ export default defineMessages({
94
94
  id: `${scope}.editButton`,
95
95
  defaultMessage: "Edit",
96
96
  },
97
+ "whatsappOverview": {
98
+ id: `${scope}.whatsappOverview`,
99
+ defaultMessage: "Overview",
100
+ },
97
101
  "duplicateButton": {
98
102
  id: `${scope}.duplicateButton`,
99
103
  defaultMessage: "Duplicate",
@@ -130,6 +134,10 @@ export default defineMessages({
130
134
  id: `${scope}.noAccountsPresentLine`,
131
135
  defaultMessage: "Line accounts are not setup for your brand",
132
136
  },
137
+ "noAccountsPresentWhatsapp": {
138
+ id: `${scope}.noAccountsPresentWhatsapp`,
139
+ defaultMessage: "Whatsapp accounts are not setup for your brand",
140
+ },
133
141
  "noTemplatesMessage": {
134
142
  id: `${scope}.noTemplatesMessage`,
135
143
  defaultMessage: "No templates available",
@@ -306,6 +314,10 @@ export default defineMessages({
306
314
  id: `${scope}.newEmailTemplate`,
307
315
  defaultMessage: 'New email {template}',
308
316
  },
317
+ "newWhatsappTemplate": {
318
+ id: `${scope}.newWhatsappTemplate`,
319
+ defaultMessage: 'Add new Whatsapp {template}',
320
+ },
309
321
  "newNotificationTemplate": {
310
322
  id: `${scope}.newNotificationTemplate`,
311
323
  defaultMessage: 'New notification {template}',
@@ -318,6 +330,14 @@ export default defineMessages({
318
330
  id: `${scope}.emailTitleIllustartion`,
319
331
  defaultMessage: 'Create an email {template}',
320
332
  },
333
+ "whatsappTitleIllustration": {
334
+ id: `${scope}.whatsappTitleIllustration`,
335
+ defaultMessage: 'Add a new Whatsapp creative {template}',
336
+ },
337
+ "whatsappDescIllustration": {
338
+ id: `${scope}.whatsappDescIllustration`,
339
+ defaultMessage: 'These templates can be reused when creating a\nnew message content.',
340
+ },
321
341
  "smsTitleIllustartion": {
322
342
  id: `${scope}.smsTitleIllustartion`,
323
343
  defaultMessage: 'Create an SMS {template}',
@@ -346,6 +366,10 @@ export default defineMessages({
346
366
  id: `${scope}.lineAccount`,
347
367
  defaultMessage: 'Line account',
348
368
  },
369
+ "whatsappAccount": {
370
+ id: `${scope}.whatsappAccount`,
371
+ defaultMessage: 'Whatsapp account',
372
+ },
349
373
  "all": {
350
374
  id: `${scope}.all`,
351
375
  defaultMessage: 'All',
@@ -390,4 +414,12 @@ export default defineMessages({
390
414
  id: `${scope}.uploadTemplate`,
391
415
  defaultMessage: 'Upload template',
392
416
  },
417
+ "clearAll": {
418
+ id: `${scope}.clearAll`,
419
+ defaultMessage: 'Clear all',
420
+ },
421
+ "whatsappMaxTemplates": {
422
+ id: `${scope}.whatsappMaxTemplates`,
423
+ defaultMessage: 'WhatsApp allows {maxCount} approved templates. To accommodate new approved templates either delete the existing one or reach out to Capillary POC to increase the limit.',
424
+ },
393
425
  });
@@ -82,9 +82,11 @@ function templatesReducer(state = initialState, action) {
82
82
  return state
83
83
  .set('selectedWeChatAccount', fromJS(action.weChatAccount));
84
84
  case types.SET_LINE_ACCOUNT:
85
- return state.set('selectedLineAccount', fromJS(action.lineAccount));
85
+ return state.set('selectedLineAccount', fromJS(action.account));
86
86
  case types.SET_VIBER_ACCOUNT:
87
87
  return state.set('selectedViberAccount', fromJS(action.viberAccount));
88
+ case types.SET_WHATSAPP_ACCOUNT:
89
+ return state.set('selectedWhatsappAccount', fromJS(action.account));
88
90
  case types.SET_FACEBOOK_ACCOUNT:
89
91
  return state.set('selectedFacebookAccount', fromJS(action.faceBookAccount));
90
92
  case types.RESET_ACCOUNT:
@@ -23,6 +23,7 @@ import Templates from '../Templates';
23
23
  import CallTask from '../CallTask';
24
24
  import Facebook from '../Facebook';
25
25
  import Viber from '../Viber';
26
+ import Whatsapp from '../Whatsapp';
26
27
  import Line from '../Line/Container';
27
28
  import FTP from '../FTP';
28
29
  import Gallery from '../Assets/Gallery';
@@ -60,6 +61,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
60
61
  line: {content: <></>, tab: intl.formatMessage(messages.line), key: 'line'},
61
62
  viber: {content: <></>, tab: intl.formatMessage(messages.viber), key: 'viber'},
62
63
  facebook: {content: <div></div>, tab: intl.formatMessage(messages.facebook), key: 'facebook'},
64
+ whatsapp: { content: <></>, tab: intl.formatMessage(messages.whatsapp), key: 'whatsapp' },
63
65
  };
64
66
  let filteredPanes = Object.keys(defaultPanes)
65
67
  .filter((key) => !channelsToHide.includes(key)).reduce((obj = [], key) => {
@@ -54,6 +54,10 @@ export default defineMessages({
54
54
  id: 'creatives.containersV2.TemplatesV2.viber',
55
55
  defaultMessage: 'Viber',
56
56
  },
57
+ whatsapp: {
58
+ id: 'creatives.containersV2.TemplatesV2.whatsapp',
59
+ defaultMessage: 'WhatsApp',
60
+ },
57
61
  gallery: {
58
62
  id: 'creatives.containersV2.TemplatesV2.gallery',
59
63
  defaultMessage: 'Gallery',
@@ -0,0 +1,34 @@
1
+ import {
2
+ TEMPLATE_CREATE_REQUEST,
3
+ CLEAR_CREATE_RESPONSE_REQUEST,
4
+ GET_TEMPLATE_DETAILS_REQUEST,
5
+ RESET_EDIT_TEMPLATE,
6
+ WHATSAPP,
7
+ } from './constants';
8
+
9
+ export function createWhatsappTemplate(payload, callback) {
10
+ return {
11
+ type: TEMPLATE_CREATE_REQUEST,
12
+ payload,
13
+ callback,
14
+ };
15
+ }
16
+ export function clearCreateResponse() {
17
+ return {
18
+ type: CLEAR_CREATE_RESPONSE_REQUEST,
19
+ };
20
+ }
21
+ // FOR EDIT
22
+ export function getTemplateDetails(id, callback) {
23
+ return {
24
+ type: GET_TEMPLATE_DETAILS_REQUEST,
25
+ id,
26
+ channel: WHATSAPP,
27
+ callback,
28
+ };
29
+ }
30
+ export function resetEditTemplate() {
31
+ return {
32
+ type: RESET_EDIT_TEMPLATE,
33
+ };
34
+ }
@@ -0,0 +1,125 @@
1
+ import React from 'react';
2
+ import { FormattedMessage } from 'react-intl';
3
+ import messages from './messages';
4
+ import {
5
+ CAP_ORANGE,
6
+ CAP_PURPLE02,
7
+ CAP_PURPLE03,
8
+ CAP_ORANGE01,
9
+ CAP_GREEN01,
10
+ CAP_GREEN02,
11
+ } from '@capillarytech/cap-ui-library/styled/variables';
12
+
13
+ export const UNSUBSCRIBE_TEXT_LENGTH = 36;
14
+ export const TEMPLATE_MESSAGE_MAX_LENGTH = 1024;
15
+ export const WHATSAPP = 'WHATSAPP';
16
+
17
+ export const TEMPLATE_CREATE_REQUEST =
18
+ 'app/v2Containers/Whatsapp/TEMPLATE_CREATE_REQUEST';
19
+ export const TEMPLATE_CREATE_SUCCESS =
20
+ 'app/v2Containers/Whatsapp/TEMPLATE_CREATE_SUCCESS';
21
+ export const TEMPLATE_CREATE_FAILURE =
22
+ 'app/v2Containers/Whatsapp/TEMPLATE_CREATE_FAILURE';
23
+ export const CLEAR_CREATE_RESPONSE_REQUEST =
24
+ 'app/v2Containers/Whatsapp/CLEAR_CREATE_RESPONSE_REQUEST';
25
+ // FOR EDIT
26
+ export const GET_TEMPLATE_DETAILS_REQUEST =
27
+ 'app/v2Containers/Whatsapp/Edit/GET_TEMPLATE_DETAILS_REQUEST';
28
+ export const GET_TEMPLATE_DETAILS_SUCCESS =
29
+ 'app/v2Containers/Whatsapp/Edit/GET_TEMPLATE_DETAILS_SUCCESS';
30
+ export const GET_TEMPLATE_DETAILS_FAILURE =
31
+ 'app/v2Containers/Whatsapp/Edit/GET_TEMPLATE_DETAILS_FAILURE';
32
+ export const RESET_EDIT_TEMPLATE =
33
+ 'app/v2Containers/Whatsapp/Edit//RESET_EDIT_TEMPLATE';
34
+
35
+ export const STATUS = 'status';
36
+ export const CATEGORY = 'category';
37
+ const tooltip = 'Tooltip';
38
+
39
+ export const WHATSAPP_CATEGORIES = {
40
+ alertUpdate: 'ALERT_UPDATE',
41
+ accountUpdate: 'ACCOUNT_UPDATE',
42
+ appointmentUpdate: 'APPOINTMENT_UPDATE',
43
+ paymentUpdate: 'PAYMENT_UPDATE',
44
+ reservationUpdate: 'RESERVATION_UPDATE',
45
+ };
46
+
47
+ export const CATEGORY_OPTIONS = [
48
+ {
49
+ key: 'alertUpdate',
50
+ value: WHATSAPP_CATEGORIES.alertUpdate,
51
+ label: <FormattedMessage {...messages.alertUpdate} />,
52
+ tooltipLabel: <FormattedMessage {...messages[`alertUpdate${tooltip}`]} />,
53
+ tagColor: CAP_PURPLE03,
54
+ tagTextColor: CAP_PURPLE02,
55
+ },
56
+ {
57
+ key: 'accountUpdate',
58
+ label: <FormattedMessage {...messages.accountUpdate} />,
59
+ tooltipLabel: <FormattedMessage {...messages[`accountUpdate${tooltip}`]} />,
60
+ value: WHATSAPP_CATEGORIES.accountUpdate,
61
+ tagColor: CAP_ORANGE01,
62
+ tagTextColor: CAP_ORANGE,
63
+ },
64
+ {
65
+ key: 'appointmentUpdate',
66
+ value: WHATSAPP_CATEGORIES.appointmentUpdate,
67
+ label: <FormattedMessage {...messages.appointmentUpdate} />,
68
+ tooltipLabel: (
69
+ <FormattedMessage {...messages[`appointmentUpdate${tooltip}`]} />
70
+ ),
71
+ tagColor: CAP_GREEN02,
72
+ tagTextColor: CAP_GREEN01,
73
+ },
74
+ {
75
+ key: 'paymentUpdate',
76
+ value: WHATSAPP_CATEGORIES.paymentUpdate,
77
+ label: <FormattedMessage {...messages.paymentUpdate} />,
78
+ tooltipLabel: <FormattedMessage {...messages[`paymentUpdate${tooltip}`]} />,
79
+ tagColor: CAP_ORANGE01,
80
+ tagTextColor: CAP_ORANGE,
81
+ },
82
+ {
83
+ key: 'reservationUpdate',
84
+ value: WHATSAPP_CATEGORIES.reservationUpdate,
85
+ label: <FormattedMessage {...messages.reservationUpdate} />,
86
+ tooltipLabel: (
87
+ <FormattedMessage {...messages[`reservationUpdate${tooltip}`]} />
88
+ ),
89
+ tagColor: CAP_ORANGE01,
90
+ tagTextColor: CAP_ORANGE,
91
+ },
92
+ ];
93
+
94
+ export const WHATSAPP_STATUSES = {
95
+ awaitingApproval: 'awaitingApproval',
96
+ approved: 'approved',
97
+ rejected: 'rejected',
98
+ pending: 'pending',
99
+ unsubmitted: 'unsubmitted',
100
+ };
101
+
102
+ export const STATUS_OPTIONS = [
103
+ {
104
+ key: 'awaitingApproval',
105
+ value: WHATSAPP_STATUSES.awaitingApproval,
106
+ label: <FormattedMessage {...messages.awaitingApproval} />,
107
+ },
108
+ {
109
+ key: 'approved',
110
+ value: WHATSAPP_STATUSES.approved,
111
+ label: <FormattedMessage {...messages.approved} />,
112
+ },
113
+ {
114
+ key: 'rejected',
115
+ value: WHATSAPP_STATUSES.rejected,
116
+ label: <FormattedMessage {...messages.rejected} />,
117
+ },
118
+ ];
119
+
120
+ export const TAG = 'TAG';
121
+ export const EMBEDDED = 'embedded';
122
+ export const DEFAULT = 'default';
123
+ export const FULL = 'full';
124
+ export const ALL = 'all';
125
+ export const LIBRARY = 'library';