@capillarytech/creatives-library 7.17.93 → 7.17.95

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 (53) hide show
  1. package/containers/Ebill/index.js +1 -0
  2. package/containers/MobilePush/Edit/index.js +1 -0
  3. package/index.js +6 -0
  4. package/package.json +1 -1
  5. package/routes.js +5 -0
  6. package/v2Components/CapDeviceContent/index.js +311 -0
  7. package/v2Components/CapDeviceContent/index.scss +115 -0
  8. package/v2Components/CapDeviceContent/messages.js +94 -0
  9. package/v2Components/CapDeviceContent/tests/index.test.js +85 -0
  10. package/v2Components/CapImageUpload/index.js +11 -4
  11. package/v2Components/CapImageUpload/messages.js +6 -2
  12. package/v2Components/CapInAppCTA/constants.js +25 -0
  13. package/v2Components/CapInAppCTA/index.js +280 -0
  14. package/v2Components/CapInAppCTA/index.scss +93 -0
  15. package/v2Components/CapInAppCTA/messages.js +85 -0
  16. package/v2Components/FormBuilder/index.js +3 -4
  17. package/v2Components/MobilePushPreviewV2/index.js +78 -23
  18. package/v2Components/TemplatePreview/_templatePreview.scss +449 -0
  19. package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_bottom.svg +11 -0
  20. package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_full.svg +11 -0
  21. package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_modal.svg +11 -0
  22. package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_top.svg +11 -0
  23. package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_bottom.svg +6 -0
  24. package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_full.svg +18 -0
  25. package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_modal.svg +7 -0
  26. package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_top.svg +13 -0
  27. package/v2Components/TemplatePreview/index.js +660 -375
  28. package/v2Components/TemplatePreview/messages.js +4 -0
  29. package/v2Containers/App/constants.js +1 -0
  30. package/v2Containers/CreativesContainer/SlideBoxContent.js +43 -0
  31. package/v2Containers/CreativesContainer/SlideBoxHeader.js +4 -1
  32. package/v2Containers/CreativesContainer/constants.js +1 -0
  33. package/v2Containers/CreativesContainer/index.js +42 -19
  34. package/v2Containers/CreativesContainer/messages.js +4 -0
  35. package/v2Containers/InApp/actions.js +64 -0
  36. package/v2Containers/InApp/constants.js +125 -0
  37. package/v2Containers/InApp/index.js +762 -0
  38. package/v2Containers/InApp/index.scss +48 -0
  39. package/v2Containers/InApp/messages.js +99 -0
  40. package/v2Containers/InApp/reducer.js +109 -0
  41. package/v2Containers/InApp/sagas.js +143 -0
  42. package/v2Containers/InApp/selectors.js +12 -0
  43. package/v2Containers/InApp/tests/action.test.js +53 -0
  44. package/v2Containers/InApp/tests/index.test.js +142 -0
  45. package/v2Containers/InApp/tests/mockData.js +898 -0
  46. package/v2Containers/InApp/tests/reducer.test.js +177 -0
  47. package/v2Containers/InApp/tests/sagas.test.js +391 -0
  48. package/v2Containers/MobilePush/Edit/index.js +3 -1
  49. package/v2Containers/Templates/_templates.scss +14 -0
  50. package/v2Containers/Templates/index.js +86 -32
  51. package/v2Containers/Templates/messages.js +20 -0
  52. package/v2Containers/TemplatesV2/index.js +2 -1
  53. package/v2Containers/TemplatesV2/messages.js +4 -0
@@ -20,7 +20,7 @@ import { injectIntl, FormattedMessage, intlShape} from 'react-intl';
20
20
  import { isEmpty, get } from 'lodash';
21
21
  import './index.scss';
22
22
  import Gallery from '../../v2Containers/Assets/Gallery';
23
- import { FACEBOOK, RCS, WHATSAPP } from "../../v2Containers/CreativesContainer/constants";
23
+ import { FACEBOOK, INAPP, RCS, WHATSAPP } from "../../v2Containers/CreativesContainer/constants";
24
24
 
25
25
  import messages from './messages';
26
26
  function CapImageUpload(props) {
@@ -245,14 +245,14 @@ function CapImageUpload(props) {
245
245
  {channel === WHATSAPP && (
246
246
  <>
247
247
  <CapHeadingSpan type="label2">
248
- <FormattedMessage {...messages.whatsappImageSize} />
248
+ <FormattedMessage {...messages.maxImageSize} />
249
249
  </CapHeadingSpan>
250
250
  <CapHeadingSpan type="label2">
251
251
  <FormattedMessage {...messages.whatsappAspectRatio} />
252
252
  </CapHeadingSpan>
253
253
  </>
254
254
  )}
255
- {channel !== WHATSAPP && (
255
+ {![WHATSAPP, INAPP].includes(channel) && (
256
256
  <CapHeadingSpan type="label2" className="image-dimension">
257
257
  <FormattedMessage {...messages.imageDimenstionDescription} values={{ width: imgWidth, height: imgHeight }} />
258
258
  </CapHeadingSpan>
@@ -267,8 +267,15 @@ function CapImageUpload(props) {
267
267
  <FormattedMessage {...messages.imageSize} />
268
268
  </CapHeadingSpan>
269
269
  )}
270
+ {
271
+ channel === INAPP && (
272
+ <CapHeadingSpan type="label2" className="image-size">
273
+ <FormattedMessage {...messages.maxImageSize} />
274
+ </CapHeadingSpan>
275
+ )
276
+ }
270
277
  <CapHeadingSpan type="label2" className="image-format">
271
- <FormattedMessage {...messages.format} />
278
+ {channel === INAPP ? <FormattedMessage {...messages.format2} /> : <FormattedMessage {...messages.format} />}
272
279
  </CapHeadingSpan>
273
280
  </div>
274
281
  </div>
@@ -2,8 +2,8 @@ import { defineMessages } from 'react-intl';
2
2
  const scope = `creatives.componentsV2.CapImageUpload`;
3
3
 
4
4
  export default defineMessages({
5
- whatsappImageSize: {
6
- id: `${scope}.whatsappImageSize`,
5
+ maxImageSize: {
6
+ id: `${scope}.maxImageSize`,
7
7
  defaultMessage: 'Size upto: 5MB',
8
8
  },
9
9
  whatsappAspectRatio: {
@@ -42,6 +42,10 @@ export default defineMessages({
42
42
  id: `${scope}.format`,
43
43
  defaultMessage: 'Format: JPEG, JPG, PNG',
44
44
  },
45
+ format2: {
46
+ id: `${scope}.format2`,
47
+ defaultMessage: 'Format: png, jpg, jpeg',
48
+ },
45
49
  imageErrorDesc: {
46
50
  id: `${scope}.imageErrorDesc`,
47
51
  defaultMessage:
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { FormattedMessage } from 'react-intl';
3
+ import messages from './messages';
4
+
5
+ export const DEEP_LINK = 'DEEP_LINK';
6
+ export const EXTERNAL_LINK = 'EXTERNAL_LINK';
7
+ export const WEBSITE = 'WEBSITE';
8
+
9
+ export const CTA_OPTIONS = [
10
+ {
11
+ key: DEEP_LINK,
12
+ value: DEEP_LINK,
13
+ label: <FormattedMessage {...messages.ctaLinkTypeDeep} />,
14
+ tooltipLabel: <FormattedMessage {...messages.ctaOptionDisabledTooltipDeepLink} />,
15
+ },
16
+ {
17
+ key: EXTERNAL_LINK,
18
+ value: EXTERNAL_LINK,
19
+ label: <FormattedMessage {...messages.ctaLinkTypeExternal} />,
20
+ tooltipLabel: <FormattedMessage {...messages.ctaOptionDisabledTooltipExternalLink} />,
21
+ },
22
+ ];
23
+
24
+ export const BTN_MAX_LENGTH = 20;
25
+ export const URL_MAX_LENGTH = 2000;
@@ -0,0 +1,280 @@
1
+ import React, { useState } from "react";
2
+ import { injectIntl } from "react-intl";
3
+ import "react-phone-input-2/lib/style.css";
4
+ import cloneDeep from "lodash/cloneDeep";
5
+ import CapHeading from "@capillarytech/cap-ui-library/CapHeading";
6
+ import CapColumn from "@capillarytech/cap-ui-library/CapColumn";
7
+ import CapInput from "@capillarytech/cap-ui-library/CapInput";
8
+ import CapButton from "@capillarytech/cap-ui-library/CapButton";
9
+ import CapRow from "@capillarytech/cap-ui-library/CapRow";
10
+ import CapLabel from "@capillarytech/cap-ui-library/CapLabel";
11
+ import CapIcon from "@capillarytech/cap-ui-library/CapIcon";
12
+ import CapTooltip from "@capillarytech/cap-ui-library/CapTooltip";
13
+ import CapTooltipWithInfo from "@capillarytech/cap-ui-library/CapTooltipWithInfo";
14
+ import CapSelect from "@capillarytech/cap-ui-library/CapSelect";
15
+ import CapTag from '@capillarytech/cap-ui-library/CapTag';
16
+ import { CAP_SPACE_04 } from "@capillarytech/cap-ui-library/styled/variables";
17
+ import globalMessages from "../../v2Containers/Cap/messages";
18
+ import inAppMsg from "../../v2Containers/InApp/messages";
19
+ import messages from "./messages";
20
+ import './index.scss';
21
+ import {
22
+ isUrl,
23
+ isValidText,
24
+ } from "../../v2Containers/Line/Container/Wrapper/utils";
25
+ import {
26
+ BTN_MAX_LENGTH,
27
+ DEEP_LINK,
28
+ EXTERNAL_LINK,
29
+ CTA_OPTIONS,
30
+ URL_MAX_LENGTH,
31
+ } from "./constants";
32
+
33
+ export const CapInAppCTA = (props) => {
34
+ const {
35
+ intl,
36
+ ctaData = [],
37
+ updateHandler,
38
+ deleteHandler,
39
+ isEditFlow,
40
+ deepLink,
41
+ } = props;
42
+ const { formatMessage } = intl;
43
+
44
+ const [urlError, setUrlError] = useState(false);
45
+ const [buttonError, setButtonError] = useState(false);
46
+ const [ctaDeepLinkValue, setCtaDeepLinkValue] = useState(ctaData[0]?.url || "");
47
+ const selectedDeepLink = deepLink?.find(link => link?.value === ctaData[0]?.url);
48
+
49
+ const updateHelper = (type, value, index) => {
50
+ let clonedCta = cloneDeep(ctaData[index]);
51
+ clonedCta = {
52
+ ...clonedCta,
53
+ [type]: value,
54
+ };
55
+ updateHandler(clonedCta, index);
56
+ };
57
+
58
+ const renderLength = (len, max) => (
59
+ <CapHeading
60
+ type="label1"
61
+ className="inapp-render-btn-length"
62
+ >
63
+ {formatMessage(inAppMsg.templateMessageLength, {
64
+ currentLength: len,
65
+ maxLength: max,
66
+ })}
67
+ </CapHeading>
68
+ );
69
+
70
+
71
+ const onButtonTextChange = ({ target }) => {
72
+ const { value, id } = target;
73
+ let errorMessage = "";
74
+ if (!isValidText(value)) {
75
+ errorMessage = formatMessage(messages.ctaButtonErrorMessage);
76
+ }
77
+ setButtonError(errorMessage);
78
+ updateHelper("text", value, id);
79
+ };
80
+
81
+ const onUrlTypeChange = (value, index) => {
82
+ updateHelper('urlType', value, index);
83
+ };
84
+
85
+ const onUrlChange = ({ target }) => {
86
+ const { value} = target;
87
+ let errorMessage = false;
88
+ if (!isUrl(value)) {
89
+ errorMessage = formatMessage(messages.ctaWebsiteUrlErrorMessage);
90
+ }
91
+ setUrlError(errorMessage);
92
+ updateHelper('url', value, 0); // 0 is an index
93
+ };
94
+
95
+ const onDeepLinkSelect = (value) => {
96
+ setCtaDeepLinkValue(value);
97
+ let errorMessage = false;
98
+ if (!isUrl(value)) {
99
+ errorMessage = formatMessage(messages.ctaWebsiteUrlErrorMessage);
100
+ }
101
+ setUrlError(errorMessage);
102
+ updateHelper('url', value, 0); // 0 is an index
103
+ };
104
+
105
+ const ctaSaveDisabled = (index) => {
106
+ const { urlType, text, url } = ctaData[index] || {};
107
+ if (text === "" || buttonError) {
108
+ return true;
109
+ } else if (urlType === DEEP_LINK && (ctaDeepLinkValue === "" || urlError)) {
110
+ return true;
111
+ } else if (urlType === EXTERNAL_LINK && (url === "" || urlError)) {
112
+ return true;
113
+ }
114
+ };
115
+
116
+ const isSavedCta = (index, saved) => {
117
+ updateHelper("isSaved", saved, index);
118
+ };
119
+
120
+ const renderedContent = () => {
121
+ const renderArray = [];
122
+ ctaData?.forEach((cta) => {
123
+ const { index, text, url, urlType, isSaved } = cta || {};
124
+ //this is to display buttons after they are saved, in both create and edit mode.
125
+ if (isSaved) {
126
+ renderArray.push(
127
+ <CapRow
128
+ className="cap-inapp-saved-cta"
129
+ align="middle"
130
+ type="flex"
131
+ >
132
+ <CapRow className="inapp-cta-row">
133
+ <CapColumn>
134
+ <CapIcon size="s" type={'launch'} />
135
+ </CapColumn>
136
+ <CapColumn>
137
+ <CapLabel type="label2" className="inapp-saved-cta-button-text">
138
+ {text}
139
+ </CapLabel>
140
+ </CapColumn>
141
+ </CapRow>
142
+ <CapColumn >
143
+ {urlType === DEEP_LINK ?
144
+ <CapTag className="cta-type-label">{formatMessage(messages.urlDeepLink)}</CapTag>
145
+ : <CapTag className="cta-type-label">{formatMessage(messages.urlExternalLink)}</CapTag>}
146
+ </CapColumn>
147
+ <CapColumn>
148
+ {urlType === DEEP_LINK ? selectedDeepLink?.label : ''}
149
+ </CapColumn>
150
+ {(
151
+ <CapRow className="cta-action-grp">
152
+ <CapColumn
153
+ className="inapp-saved-cta-edit-icon"
154
+ onClick={() => isSavedCta(index, false)}
155
+ >
156
+ <CapIcon size="s" type="edit" className="cta-action" />
157
+ </CapColumn>
158
+ <CapColumn onClick={() => deleteHandler(index)} className="cta-del-icon">
159
+ <CapIcon size="s" type="delete" className="cta-action" ariaLabel="delete-cta-icon" />
160
+ </CapColumn>
161
+ </CapRow>
162
+ )}
163
+ </CapRow>
164
+ );
165
+ } else {
166
+ //this is to display buttons before they are saved, only in create mode.
167
+ renderArray.push(
168
+ <CapRow
169
+ className="cap-inapp-cta"
170
+ id={`cap-inapp-cta-${index}`}
171
+ >
172
+ <CapRow className="inapp-cta-buttons">
173
+ <CapColumn span={12} >
174
+ {/* Type of link */}
175
+ <CapHeading type="h4" className="cta-label">
176
+ {formatMessage(messages.ctaType)}
177
+ </CapHeading>
178
+ <CapSelect
179
+ id="inapp-cta-type"
180
+ options={CTA_OPTIONS || []}
181
+ onChange={(value) => onUrlTypeChange(value, index)}
182
+ value={urlType}
183
+ />
184
+ </CapColumn>
185
+ <CapColumn span={12}>
186
+ {/* Button text */}
187
+ <CapHeading type="h4" className="cta-label">
188
+ {formatMessage(messages.ctaButtonText)}
189
+ <CapTooltipWithInfo
190
+ infoIconProps={{
191
+ style: { marginLeft: CAP_SPACE_04 },
192
+ }}
193
+ autoAdjustOverflow
194
+ placement="right"
195
+ title={formatMessage(messages.ctaButtonTextTooltip)}
196
+ />
197
+ </CapHeading>
198
+ <CapInput
199
+ id={index}
200
+ className="inapp-cta-button-text"
201
+ onChange={onButtonTextChange}
202
+ placeholder={formatMessage(messages.ctaButtonTextPlaceholder)}
203
+ value={text}
204
+ size="large"
205
+ maxLength={BTN_MAX_LENGTH}
206
+ errorMessage={buttonError}
207
+ />
208
+ {renderLength(text.length, BTN_MAX_LENGTH)}
209
+ </CapColumn>
210
+ </CapRow>
211
+ {urlType === DEEP_LINK && (
212
+ <>
213
+ <CapHeading type="h4">
214
+ {formatMessage(messages.urlDeepLink)}
215
+ </CapHeading>
216
+ <CapSelect
217
+ id="inapp-deep-link-type"
218
+ placeholder={formatMessage(messages.ctaDeepLinkOptionsPlaceholder)}
219
+ options={deepLink || []}
220
+ onChange={onDeepLinkSelect}
221
+ value={ctaDeepLinkValue}
222
+ />
223
+ </>
224
+
225
+ )}
226
+ {urlType === EXTERNAL_LINK && (
227
+ <>
228
+ <CapHeading type="h4">
229
+ {formatMessage(messages.urlExternalLink)}
230
+ </CapHeading>
231
+ <CapInput
232
+ id="inapp-cta-external-link"
233
+ className="inapp-cta-external-link"
234
+ onChange={onUrlChange}
235
+ placeholder={formatMessage(messages.ctaExternalLinkPlaceholder)}
236
+ value={url}
237
+ size="large"
238
+ maxLength={URL_MAX_LENGTH}
239
+ errorMessage={urlError}
240
+ />
241
+ </>
242
+ )}
243
+ <CapRow className="inapp-cta-save-delete-btn">
244
+ <CapTooltip
245
+ title={
246
+ ctaSaveDisabled(index)
247
+ ? formatMessage(messages.ctaSaveDisabled)
248
+ : ""
249
+ }
250
+ placement={"bottom"}
251
+ >
252
+ <div className="button-disabled-tooltip-wrapper">
253
+ <CapButton
254
+ onClick={() => isSavedCta(index, true)}
255
+ disabled={ctaSaveDisabled(index)}
256
+ className="inapp-cta-save-btn"
257
+ >
258
+ {formatMessage(globalMessages.save)}
259
+ </CapButton>
260
+ </div>
261
+ </CapTooltip>
262
+ <CapButton
263
+ onClick={() => deleteHandler(index)}
264
+ className="inapp-cta-delete-btn"
265
+ type="secondary"
266
+ >
267
+ {formatMessage(globalMessages.delete)}
268
+ </CapButton>
269
+ </CapRow>
270
+ </CapRow>
271
+ );
272
+ }
273
+ });
274
+ return renderArray;
275
+ };
276
+
277
+ return renderedContent();
278
+ };
279
+
280
+ export default injectIntl(CapInAppCTA);
@@ -0,0 +1,93 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
+
3
+ .cap-inapp-cta {
4
+ margin-top: $CAP_SPACE_16;
5
+ margin-left: 1.6rem;
6
+ padding: $CAP_SPACE_16 $CAP_SPACE_24;
7
+ border: 1px solid $CAP_G06;
8
+ border-radius: $CAP_SPACE_04;
9
+
10
+ .inapp-cta-buttons {
11
+ margin-top: $CAP_SPACE_12;
12
+
13
+ #inapp-cta-type {
14
+ width: 95%;
15
+ }
16
+
17
+ .inapp-cta-button-text {
18
+ width: 95%;
19
+ }
20
+
21
+ .inapp-render-btn-length {
22
+ margin-top: $CAP_SPACE_12;
23
+ width: 90%;
24
+ margin-left: 52%;
25
+ margin-bottom: $CAP_SPACE_12;
26
+ }
27
+ }
28
+
29
+ #inapp-deep-link-type {
30
+ width: 100%;
31
+ margin-top: $CAP_SPACE_12;
32
+ }
33
+
34
+ .inapp-cta-external-link {
35
+ margin-top: $CAP_SPACE_12;
36
+ }
37
+
38
+ .inapp-cta-save-delete-btn {
39
+ margin-top: $CAP_SPACE_16;
40
+
41
+ .inapp-cta-save-btn {
42
+ margin-right: $CAP_SPACE_04;
43
+ }
44
+ .inapp-cta-delete-btn {
45
+ margin-left: $CAP_SPACE_04;
46
+ }
47
+ }
48
+
49
+ }
50
+
51
+ .cap-inapp-saved-cta {
52
+ border: solid 1px $CAP_G06;
53
+ margin-left: $CAP_SPACE_20;
54
+ display: flex;
55
+ justify-content: space-between;
56
+ padding: $CAP_SPACE_08 $CAP_SPACE_12;
57
+ border-radius: $CAP_SPACE_04;
58
+ margin-top: $CAP_SPACE_12;
59
+ height: $CAP_SPACE_40;
60
+
61
+ .inapp-saved-cta-button-text {
62
+ font-weight: 500;
63
+ padding-left: '15px'
64
+ }
65
+
66
+ .inapp-saved-cta-edit-icon {
67
+ margin-left: 4.286rem;
68
+ }
69
+ }
70
+ .cta-label {
71
+ margin-bottom: $CAP_SPACE_08;
72
+ }
73
+ .cta-type-label {
74
+ border-radius: 1rem;
75
+ background-color: $CAP_G08;
76
+ width: $CAP_SPACE_80;
77
+ height: $CAP_SPACE_24 !important;
78
+ align-items: center;
79
+ justify-content: center;
80
+ }
81
+ .cta-action {
82
+ cursor: pointer;
83
+ }
84
+ .inapp-cta-row {
85
+ display: flex;
86
+ align-items: center;
87
+ }
88
+ .cta-action-grp {
89
+ display: flex;
90
+ }
91
+ .cta-del-icon {
92
+ padding-left: 1rem;
93
+ }
@@ -0,0 +1,85 @@
1
+ import { defineMessages } from 'react-intl';
2
+ const prefix = `creatives.componentsV2.CapInAppCTA`;
3
+ export default defineMessages({
4
+ ctaType: {
5
+ id: `${prefix}.ctaType`,
6
+ defaultMessage: 'Type of link',
7
+ },
8
+ urlDeepLink: {
9
+ id: `${prefix}.urlDeepLink`,
10
+ defaultMessage: 'Deep link',
11
+ },
12
+ urlExternalLink: {
13
+ id: `${prefix}.urlExternalLink`,
14
+ defaultMessage: 'External link',
15
+ },
16
+ ctaButtonText: {
17
+ id: `${prefix}.ctaButtonText`,
18
+ defaultMessage: 'Button text',
19
+ },
20
+ ctaDeepLinkOptionsPlaceholder: {
21
+ id: `${prefix}.ctaDeepLinkOptionsPlaceholder`,
22
+ defaultMessage: 'Select deep link',
23
+ },
24
+ ctaExternalLinkPlaceholder: {
25
+ id: `${prefix}.ctaExternalLinkPlaceholder`,
26
+ defaultMessage: 'Enter the external link',
27
+ },
28
+ ctaButtonTextPlaceholder: {
29
+ id: `${prefix}.ctaButtonTextPlaceholder`,
30
+ defaultMessage: 'Enter button text',
31
+ },
32
+ ctaWebsiteType: {
33
+ id: `${prefix}.ctaWebsiteType`,
34
+ defaultMessage: 'URL Type',
35
+ },
36
+ ctaLinkTypeDeep: {
37
+ id: `${prefix}.ctaLinkTypeDeep`,
38
+ defaultMessage: 'Deep link',
39
+ },
40
+ ctaLinkTypeExternal: {
41
+ id: `${prefix}.ctaLinkTypeExternal`,
42
+ defaultMessage: 'External link',
43
+ },
44
+ ctaWebsiteUrl: {
45
+ id: `${prefix}.ctaWebsiteUrl`,
46
+ defaultMessage: 'Website URL',
47
+ },
48
+ ctaStaticPlaceholder: {
49
+ id: `${prefix}.ctaStaticPlaceholder`,
50
+ defaultMessage: 'Enter website URL',
51
+ },
52
+ ctaWebsiteUrlErrorMessage: {
53
+ id: `${prefix}.ctaWebsiteUrlErrorMessage`,
54
+ defaultMessage: 'URL is not valid',
55
+ },
56
+ ctaButtonErrorMessage: {
57
+ id: `${prefix}.ctaButtonErrorMessage`,
58
+ defaultMessage: "Newlines, Emojis, or Special characters are not allowed",
59
+ },
60
+ ctaSaveDisabled: {
61
+ id: `${prefix}.ctaSaveDisabled`,
62
+ defaultMessage: 'Please complete the above fields to enable button',
63
+ },
64
+ ctaButtonTextTooltip: {
65
+ id: `${prefix}.ctaButtonTextTooltip`,
66
+ defaultMessage:
67
+ 'Use this to name the button. We would recommend not to use special characters for the button text.',
68
+ },
69
+ ctaOptionDisabledTooltipDeepLink: {
70
+ id: `${prefix}.ctaOptionDisabledTooltipDeepLink`,
71
+ defaultMessage: 'A page within the mobile app',
72
+ },
73
+ ctaOptionDisabledTooltipExternalLink: {
74
+ id: `${prefix}.ctaOptionDisabledTooltipExternalLink`,
75
+ defaultMessage: 'An external web page',
76
+ },
77
+ staticUrlWithVarErrorMessage: {
78
+ id: `${prefix}.staticUrlWithVarErrorMessage`,
79
+ defaultMessage: 'Button with url type as static cannot contain variables',
80
+ },
81
+ useTwoBracketsOnly: {
82
+ id: `${prefix}.useTwoBracketsOnly`,
83
+ defaultMessage: 'Use two brackets on each side to declare a variable',
84
+ },
85
+ });
@@ -214,10 +214,9 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
214
214
  this.setState({usingTabContainer: true});
215
215
  }
216
216
  }
217
- //In Context of MPUSH currentTab represents whether its Android or IOS tab , 1 for Android and 2 for IOS
218
- if (nextProps.currentTab && _.get(this.props, 'schema.channel') === MOBILE_PUSH) {
219
- this.setState({currentTab: nextProps.currentTab});
220
- }
217
+ // if (nextProps.currentTab) {
218
+ // this.setState({currentTab: nextProps.currentTab});
219
+ // }
221
220
  } else if (!_.isEmpty(nextProps.formData) &&
222
221
  ( !this.state.usingTabContainer || (this.state.usingTabContainer && nextProps.tabKey !== ''))
223
222
  && !_.isEqual(nextProps.formData, this.state.formData) &&