@capillarytech/creatives-library 8.0.125-alpha.6 → 8.0.126

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/config/app.js +6 -0
  2. package/containers/App/constants.js +0 -1
  3. package/containers/Email/index.js +5 -5
  4. package/containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
  5. package/initialReducer.js +2 -0
  6. package/package.json +1 -1
  7. package/services/api.js +94 -1
  8. package/services/tests/api.test.js +191 -0
  9. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +3 -8
  10. package/tests/integration/TemplateCreation/api-response.js +0 -5
  11. package/tests/integration/TemplateCreation/msw-handler.js +63 -42
  12. package/utils/common.js +0 -7
  13. package/utils/commonUtils.js +6 -2
  14. package/v2Components/CapImageUpload/index.js +45 -51
  15. package/v2Components/CapInAppCTA/index.js +0 -1
  16. package/v2Components/CapTagList/index.js +120 -177
  17. package/v2Components/CapVideoUpload/constants.js +0 -3
  18. package/v2Components/CapVideoUpload/index.js +110 -167
  19. package/v2Components/CapVideoUpload/messages.js +0 -16
  20. package/v2Components/Carousel/index.js +13 -15
  21. package/v2Components/CustomerSearchSection/_customerSearch.scss +309 -0
  22. package/v2Components/CustomerSearchSection/constants.js +5 -0
  23. package/v2Components/CustomerSearchSection/index.js +362 -0
  24. package/v2Components/CustomerSearchSection/messages.js +20 -0
  25. package/v2Components/CustomerSearchSection/tests/utils.test.js +334 -0
  26. package/v2Components/CustomerSearchSection/utils.js +49 -0
  27. package/v2Components/ErrorInfoNote/style.scss +0 -1
  28. package/v2Components/MobilePushPreviewV2/index.js +5 -37
  29. package/v2Components/TemplatePreview/_templatePreview.scss +72 -114
  30. package/v2Components/TemplatePreview/index.js +50 -178
  31. package/v2Components/TemplatePreview/messages.js +0 -4
  32. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +543 -0
  33. package/v2Components/TestAndPreviewSlidebox/actions.js +67 -0
  34. package/v2Components/TestAndPreviewSlidebox/constants.js +67 -0
  35. package/v2Components/TestAndPreviewSlidebox/index.js +771 -0
  36. package/v2Components/TestAndPreviewSlidebox/messages.js +147 -0
  37. package/v2Components/TestAndPreviewSlidebox/reducer.js +233 -0
  38. package/v2Components/TestAndPreviewSlidebox/sagas.js +258 -0
  39. package/v2Components/TestAndPreviewSlidebox/selectors.js +142 -0
  40. package/v2Components/TestAndPreviewSlidebox/tests/actions.test.js +80 -0
  41. package/v2Components/TestAndPreviewSlidebox/tests/reducer.test.js +367 -0
  42. package/v2Components/TestAndPreviewSlidebox/tests/saga.rtl.test.js +192 -0
  43. package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +652 -0
  44. package/v2Components/TestAndPreviewSlidebox/tests/selector.test.js +182 -0
  45. package/v2Containers/CreativesContainer/SlideBoxContent.js +21 -9
  46. package/v2Containers/CreativesContainer/SlideBoxFooter.js +23 -2
  47. package/v2Containers/CreativesContainer/index.js +160 -195
  48. package/v2Containers/CreativesContainer/messages.js +4 -0
  49. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +21 -0
  50. package/v2Containers/Email/index.js +18 -6
  51. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +10 -0
  52. package/v2Containers/EmailWrapper/index.js +6 -0
  53. package/v2Containers/InApp/constants.js +0 -1
  54. package/v2Containers/InApp/index.js +13 -13
  55. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  56. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  57. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  58. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  59. package/v2Containers/MobilePush/Create/index.js +0 -1
  60. package/v2Containers/MobilePush/commonMethods.js +14 -7
  61. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +23 -5
  62. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  63. package/v2Containers/TagList/index.js +10 -56
  64. package/v2Containers/Templates/_templates.scss +1 -101
  65. package/v2Containers/Templates/index.js +35 -147
  66. package/v2Containers/Templates/messages.js +0 -8
  67. package/v2Containers/Templates/sagas.js +0 -2
  68. package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
  69. package/v2Containers/Whatsapp/constants.js +0 -1
  70. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -0
  71. package/utils/createPayload.js +0 -270
  72. package/utils/tests/createPayload.test.js +0 -761
  73. package/v2Components/CapMpushCTA/constants.js +0 -25
  74. package/v2Components/CapMpushCTA/index.js +0 -332
  75. package/v2Components/CapMpushCTA/index.scss +0 -95
  76. package/v2Components/CapMpushCTA/messages.js +0 -89
  77. package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +0 -29
  78. package/v2Components/TemplatePreview/assets/images/android.svg +0 -9
  79. package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +0 -26
  80. package/v2Components/TemplatePreview/assets/images/ios.svg +0 -9
  81. package/v2Containers/Email/tests/index.test.js +0 -35
  82. package/v2Containers/MobilePushNew/actions.js +0 -116
  83. package/v2Containers/MobilePushNew/components/CtaButtons.js +0 -170
  84. package/v2Containers/MobilePushNew/components/MediaUploaders.js +0 -686
  85. package/v2Containers/MobilePushNew/components/PlatformContentFields.js +0 -279
  86. package/v2Containers/MobilePushNew/components/index.js +0 -5
  87. package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +0 -779
  88. package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +0 -2114
  89. package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +0 -343
  90. package/v2Containers/MobilePushNew/constants.js +0 -115
  91. package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +0 -1299
  92. package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +0 -1223
  93. package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +0 -246
  94. package/v2Containers/MobilePushNew/hooks/useUpload.js +0 -709
  95. package/v2Containers/MobilePushNew/index.js +0 -2170
  96. package/v2Containers/MobilePushNew/index.scss +0 -308
  97. package/v2Containers/MobilePushNew/messages.js +0 -226
  98. package/v2Containers/MobilePushNew/reducer.js +0 -160
  99. package/v2Containers/MobilePushNew/sagas.js +0 -198
  100. package/v2Containers/MobilePushNew/selectors.js +0 -55
  101. package/v2Containers/MobilePushNew/tests/reducer.test.js +0 -741
  102. package/v2Containers/MobilePushNew/tests/sagas.test.js +0 -863
  103. package/v2Containers/MobilePushNew/tests/selectors.test.js +0 -425
  104. package/v2Containers/MobilePushNew/tests/utils.test.js +0 -322
  105. package/v2Containers/MobilePushNew/utils.js +0 -33
@@ -22,9 +22,7 @@ import { isEmpty, get } from 'lodash';
22
22
  import './index.scss';
23
23
  import Gallery from '../../v2Containers/Assets/Gallery';
24
24
  import { MAX_SUPPORTED_IMAGE_SIZE } from './constants';
25
- import {
26
- FACEBOOK, INAPP, RCS, WHATSAPP, VIBER,
27
- } from "../../v2Containers/CreativesContainer/constants";
25
+ import { FACEBOOK, INAPP, RCS, WHATSAPP, VIBER } from "../../v2Containers/CreativesContainer/constants";
28
26
 
29
27
  import messages from './messages';
30
28
  function CapImageUpload(props) {
@@ -50,14 +48,14 @@ function CapImageUpload(props) {
50
48
  } = props;
51
49
  const {
52
50
  formatMessage,
53
- } = intl || {};
51
+ } = intl || {};
54
52
 
55
53
 
56
54
  useEffect(() => {
57
55
  const imageDataObj = imageData[`uploadedAssetData${index}`];
58
56
  if (!isEmpty(imageDataObj)) {
59
- const { secure_file_path = '' } = get(imageDataObj, 'metaInfo', {});
60
- updateImageSrc(secure_file_path);
57
+ const { secure_file_path = '', karixFileHandle = '' } = get(imageDataObj, 'metaInfo', {});
58
+ updateImageSrc(secure_file_path, karixFileHandle);
61
59
  }
62
60
  }, [imageData[`uploadedAssetData${index}`]]);
63
61
 
@@ -67,7 +65,7 @@ function CapImageUpload(props) {
67
65
  const {CapHeadingSpan} = CapHeading;
68
66
  const ImageComponent = useCallback(
69
67
  () => (
70
- <>
68
+ <>
71
69
  {
72
70
  !isEmpty(imageSrc) ? (
73
71
  <div className={`image-container upload ${props.ifError ? 'error' : ''}`}>
@@ -76,10 +74,10 @@ function CapImageUpload(props) {
76
74
  )}
77
75
  </div>
78
76
  ) : null}
79
- </>
80
- ),
81
- [imageSrc],
82
- );
77
+ </>
78
+ ),
79
+ [imageSrc],
80
+ );
83
81
 
84
82
  const WithLabel = LabelHOC(ImageComponent);
85
83
 
@@ -149,13 +147,10 @@ function CapImageUpload(props) {
149
147
  const onReUpload = useCallback(() => {
150
148
  updateImageSrc('');
151
149
  updateOnReUpload();
152
- // Don't automatically trigger file dialog - let user choose between computer and gallery
153
150
  }, []);
154
151
 
155
152
  const onGalleryImageSelect = useCallback((imageTemplate) => {
156
- const {
157
- secure_file_path: image, width, height, file_size: size,
158
- } = get(imageTemplate, 'metaInfo', {});
153
+ const {secure_file_path: image, width, height, file_size: size} = get(imageTemplate, 'metaInfo', {});
159
154
  updateDrawerRequirement(false);
160
155
  if (!allowedExtensionsRegex.test(image) || height > imgHeight || width > imgWidth || size > imgSize ) {
161
156
  updateImageErrorMessage(formatMessage(messages.imageErrorDesc));
@@ -181,7 +176,7 @@ function CapImageUpload(props) {
181
176
  isFullMode={isFullMode}
182
177
  isLineAsset
183
178
  onGalleryImageSelect={onGalleryImageSelect}
184
- />
179
+ />
185
180
  </>
186
181
  );
187
182
  }, []);
@@ -199,35 +194,34 @@ function CapImageUpload(props) {
199
194
 
200
195
  const getImageSection = useCallback(() => {
201
196
  if (imageSrc === "") {
202
- return (
203
- <>
204
- <CapUploader.CapDragger
205
- customRequest={capUploaderCustomRequest}
206
- className="form-builder-dragger grey-background"
207
- showUploadList={!isImageError}
208
- >
209
- <CapHeading className="dragger-title" type="h7">
210
- <FormattedMessage {...messages.dragAndDrop} />
211
- </CapHeading>
212
- <CapHeading className="dragger-or" type="label6">
213
- <FormattedMessage {...messages.or} />
214
- </CapHeading>
215
- <CapButton className="dragger-button upload-image" type="secondary">
216
- <FormattedMessage {...messages.uploadComputer} />
197
+ return (<>
198
+ <CapUploader.CapDragger
199
+ customRequest={capUploaderCustomRequest}
200
+ className="form-builder-dragger grey-background"
201
+ showUploadList={!isImageError}
202
+ >
203
+ <CapHeading className="dragger-title" type="h7">
204
+ <FormattedMessage {...messages.dragAndDrop} />
205
+ </CapHeading>
206
+ <CapHeading className="dragger-or" type="label6">
207
+ <FormattedMessage {...messages.or} />
208
+ </CapHeading>
209
+ <CapButton className="dragger-button upload-image" type="secondary">
210
+ <FormattedMessage {...messages.uploadComputer} />
211
+ </CapButton>
212
+ {channel !== WHATSAPP && (
213
+ <CapButton
214
+ className="dragger-button gallery-select"
215
+ type="secondary"
216
+ onClick={onGalleryClick}
217
+ >
218
+ <FormattedMessage {...messages.uploadGallery} />
217
219
  </CapButton>
218
- {channel !== WHATSAPP && (
219
- <CapButton
220
- className="dragger-button gallery-select"
221
- type="secondary"
222
- onClick={onGalleryClick}
223
- >
224
- <FormattedMessage {...messages.uploadGallery} />
225
- </CapButton>
226
- )}
227
- </CapUploader.CapDragger>
228
- <CapError type="error" className="upload-image-error">
229
- {isImageError}
230
- </CapError>
220
+ )}
221
+ </CapUploader.CapDragger>
222
+ <CapError type="error" className="upload-image-error">
223
+ {isImageError}
224
+ </CapError>
231
225
  </>
232
226
  );
233
227
  }
@@ -248,26 +242,26 @@ function CapImageUpload(props) {
248
242
  return (
249
243
  <div style={style} className="cap-custom-image-upload">
250
244
  <WithLabel
251
- key="with-label"
245
+ key={`with-label`}
252
246
  ifError={!!isImageError}
253
247
 
254
- />
255
- <form encType="multipart/form-data" id="form" className={className}>
248
+ />
249
+ <form encType="multipart/form-data" id={`form`} className={className}>
256
250
  <input
257
- key="imgFile"
251
+ key={`imgFile`}
258
252
  style={{ display: 'none' }}
259
- id="imageFileName"
253
+ id="fileName"
260
254
  type="file"
261
255
  onChange={(e) => uploadImages(e, { files: e.target.files })}
262
256
  accept={supportedExtensions || "image/*"}
263
- />
257
+ />
264
258
  {getImageSection()}
265
259
  <CapDrawer
266
260
  content={getGalleryDrawerContent()}
267
261
  visible={isDrawerRequired}
268
262
  width={430}
269
263
  onClose={() => updateDrawerRequirement(false)}
270
- />
264
+ />
271
265
  </form>
272
266
  <div className="image-info-wrapper">
273
267
  {channel === WHATSAPP && (
@@ -38,7 +38,6 @@ export const CapInAppCTA = (props) => {
38
38
  deleteHandler,
39
39
  isEditFlow,
40
40
  deepLink,
41
- channel,
42
41
  } = props;
43
42
  const { formatMessage } = intl;
44
43
 
@@ -58,19 +58,14 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
58
58
  dynamicDateValue: '',
59
59
  showModal: false,
60
60
  translationLang: '',
61
- tagsList: [],
62
- selectedContext: 'Outbound',
63
- isLoadingLoyaltyTags: false,
64
- isLoadingContextChange: false,
61
+ tagsList: []
65
62
  };
66
63
  this.renderTags = this.renderTags.bind(this);
67
64
  this.getSearchedExpandedKeys = this.getSearchedExpandedKeys.bind(this);
68
65
  }
69
-
70
66
  getTranslationMappedLocale(locale) {
71
67
  return GET_TRANSLATION_MAPPED?.[locale];
72
68
  }
73
-
74
69
  componentDidMount() {
75
70
  const user = localStorage.getItem('user');
76
71
  let locale = 'en';
@@ -84,36 +79,17 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
84
79
  });
85
80
  }
86
81
 
87
- componentDidUpdate(prevProps, prevState) {
82
+ componentDidUpdate(prevProps, prevState){
88
83
  if (this.props.tags !== prevProps.tags || this.state.searchValue !== prevState.searchValue) {
89
- const temp = this.renderTags(this.props.tags, this.state.searchValue);
90
- this.setState({
91
- tagsList: temp,
92
- });
93
- }
94
-
95
- // Reset loading states when tags are received after context change
96
- if ((this.state.isLoadingLoyaltyTags || this.state.isLoadingContextChange)
97
- && this.props.tags !== prevProps.tags) {
84
+ let temp = this.renderTags(this.props.tags, this.state.searchValue);
98
85
  this.setState({
99
- isLoadingLoyaltyTags: false,
100
- isLoadingContextChange: false,
101
- });
102
- }
103
-
104
- // Backup: Reset loading states if props.loading changed from true to false
105
- // This handles cases where the API doesn't return different tags but injectedTags change
106
- if (prevProps.loading === true && this.props.loading === false
107
- && (this.state.isLoadingLoyaltyTags || this.state.isLoadingContextChange)) {
108
- this.setState({
109
- isLoadingLoyaltyTags: false,
110
- isLoadingContextChange: false,
86
+ tagsList: temp
111
87
  });
112
88
  }
113
89
  }
114
90
 
115
91
  onChange = (e) => {
116
- const {value} = e.target;
92
+ const value = e.target.value;
117
93
  let expandedKeys = this.getSearchedExpandedKeys(this.props.tags, value);
118
94
  if (value === '') {
119
95
  expandedKeys = [];
@@ -124,7 +100,6 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
124
100
  autoExpandParent: true,
125
101
  });
126
102
  };
127
-
128
103
  onExpand = (expandedKeys, info) => {
129
104
  this.handleOnExpand(info.node.props.eventKey);
130
105
  };
@@ -132,25 +107,26 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
132
107
  getSearchedExpandedKeys(tags, value = '') {
133
108
  let list = [];
134
109
  _.forEach(tags, (val = {}, key) => {
135
- const tagName = typeof val?.name === STRING
136
- ? _.toLower(_.get(val, "name", ""))
137
- : _.toLower(_.get(val, "name.props.defaultMessage", ""));
110
+ const tagName =
111
+ typeof val?.name === STRING
112
+ ? _.toLower(_.get(val, "name", ""))
113
+ : _.toLower(_.get(val, "name.props.defaultMessage", ""));
138
114
  const tagNameWithoutUnderscore = tagName.replace(/_/g, " ");
139
115
  const searchStringLower = _.toLower(value);
140
116
  if (_.has(val, "subtags")) {
141
117
  if (
142
- val?.name
143
- && (tagName.includes(searchStringLower)
144
- || tagNameWithoutUnderscore.includes(searchStringLower))
118
+ val?.name &&
119
+ (tagName.includes(searchStringLower) ||
120
+ tagNameWithoutUnderscore.includes(searchStringLower))
145
121
  ) {
146
122
  list.push(key);
147
123
  }
148
124
  const temp = this.getSearchedExpandedKeys(val?.subtags, value);
149
125
  list = list.concat(temp);
150
126
  } else if (
151
- val?.name
152
- && (tagName.includes(searchStringLower)
153
- || tagNameWithoutUnderscore.includes(searchStringLower))
127
+ val?.name &&
128
+ (tagName.includes(searchStringLower) ||
129
+ tagNameWithoutUnderscore.includes(searchStringLower))
154
130
  ) {
155
131
  list.push(key);
156
132
  }
@@ -159,21 +135,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
159
135
  }
160
136
 
161
137
  handleOnChange = (data) => {
162
- const { selectedContext } = this.state;
163
-
164
- // Only proceed if the context has actually changed
165
- if (selectedContext !== data) {
166
- // Set loading state for any context change
167
- this.setState({
168
- isLoadingContextChange: true,
169
- selectedContext: data,
170
- // Keep loyalty-specific loading for backward compatibility
171
- isLoadingLoyaltyTags: data === 'Loyalty',
172
- });
173
-
174
- // Call the parent's context change handler
175
- this.props.onContextChange(data);
176
- }
138
+ this.props.onContextChange(data);
177
139
  };
178
140
 
179
141
  handleDynamicDateChange = (data) => {
@@ -230,7 +192,6 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
230
192
  }
231
193
  this.setState({expandedKeys, autoExpandParent: false});
232
194
  };
233
-
234
195
  togglePopoverVisibility = (visible) => {
235
196
  this.setState({visible});
236
197
  };
@@ -239,11 +200,9 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
239
200
  this.setState({showModal: true, visible: false});
240
201
  };
241
202
 
242
- renderTags = (tags) => {
203
+ renderTags(tags) {
243
204
  const searchString = this.state.searchValue || '';
244
- const {
245
- disableRelatedTags, childTagsToDisable, parentTagstoDisable,
246
- } = this?.props?.disableTagsDetails;
205
+ const { disableRelatedTags, childTagsToDisable, parentTagstoDisable, showCardsRelatedTags } = this?.props?.disableTagsDetails;
247
206
  const { accessibleFeatures = [] } = this?.props?.currentOrgDetails || {};
248
207
  const hideDateTagsForJpLocale = accessibleFeatures.includes(JP_LOCALE_HIDE_FEATURE);
249
208
  const list = [];
@@ -267,14 +226,16 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
267
226
  supportedTagsString += `${supportedTag} ,`;
268
227
  });
269
228
  supportedTagsString = supportedTagsString.replace(/,\s*$/, "");
270
- const tagName = typeof val?.name === STRING
271
- ? _.toLower(_.get(val, "name", ""))
272
- : _.toLower(_.get(val, "name.props.defaultMessage", ""));
229
+ const tagName =
230
+ typeof val?.name === STRING
231
+ ? _.toLower(_.get(val, "name", ""))
232
+ : _.toLower(_.get(val, "name.props.defaultMessage", ""));
273
233
  const tagNameWithoutUnderscore = tagName.replace(/_/g, " ");
274
234
  const searchStringLower = _.toLower(searchString);
275
- const tagContainsSearchedString = searchStringLower
276
- && (tagName.includes(searchStringLower)
277
- || tagNameWithoutUnderscore.includes(searchStringLower));
235
+ const tagContainsSearchedString =
236
+ searchStringLower &&
237
+ (tagName.includes(searchStringLower) ||
238
+ tagNameWithoutUnderscore.includes(searchStringLower));
278
239
  if (_.has(val, 'subtags')) {
279
240
  const disabled = disableRelatedTags ? parentTagstoDisable.includes(key) : false;
280
241
  const temp = this.renderTags(val?.subtags);
@@ -325,8 +286,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
325
286
  : `${key}`
326
287
  }
327
288
  disabled={childDisabled}
328
- >
329
- </CapTreeNode>
289
+ ></CapTreeNode>
330
290
  );
331
291
  hidingDateTagsForJpLocale(
332
292
  hideDateTagsForJpLocale,
@@ -361,8 +321,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
361
321
  : `${key}`
362
322
  }
363
323
  disabled={childDisabled}
364
- >
365
- </CapTreeNode>
324
+ ></CapTreeNode>
366
325
  );
367
326
  hidingDateTagsForJpLocale(
368
327
  hideDateTagsForJpLocale,
@@ -375,23 +334,14 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
375
334
  });
376
335
  return list;
377
336
  }
378
-
379
337
  openTranslationLink = () => {
380
338
  window.open(TAG_TRANSLATION_DOC, '_blank');
381
339
  }
382
-
383
340
  render() {
384
- const {
385
- hidePopover = false, intl = {}, moduleFilterEnabled, label, modalProps, channel, fetchingSchemaError = false,
386
- } = this.props;
341
+ const { hidePopover = false, tags = {}, intl = {}, moduleFilterEnabled, label, modalProps, channel, fetchingSchemaError = false } = this.props;
342
+ const tg = tags;
387
343
  const {formatMessage} = intl;
388
- const {
389
- tagValue, expandedKeys, autoExpandParent, visible, translationLang, selectedContext, isLoadingLoyaltyTags, isLoadingContextChange,
390
- } = this.state;
391
-
392
- // Show loading spinner if general loading OR if specifically loading loyalty tags OR if context change is in progress
393
- const shouldShowLoading = this.props.loading || (selectedContext === 'Loyalty' && isLoadingLoyaltyTags) || isLoadingContextChange;
394
-
344
+ const { tagValue, expandedKeys, autoExpandParent, searchValue, visible, translationLang } = this.state;
395
345
  const options = [
396
346
  {
397
347
  value: "Outbound",
@@ -404,106 +354,99 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
404
354
  key: 'loyalty',
405
355
  },
406
356
  ];
407
- const contentSection = (
408
- <div>
409
- <CapSpin tip={formatMessage(messages.gettingTags)} spinning={shouldShowLoading}>
410
- <Search
411
- style={{ marginBottom: 8, width: '250px'}}
412
- placeholder={formatMessage(messages.search)}
413
- onChange={this.onChange} />
414
- {moduleFilterEnabled ? (
415
- <CapSelect
416
- getPopupContainer={(triggerNode) => triggerNode.parentNode}
417
- style={{
418
- width: '250px', marginBottom: '16px', minWidth: 'initial', display: 'inherit',
419
- }}
420
- onChange={this.handleOnChange}
421
- value={selectedContext}
422
- options={options}>
423
- </CapSelect>
424
- ) : ''}
425
- <CapTree
426
- styling={{height: '350px', overflow: 'auto'}}
427
- onSelect={this.handleOnSelect}
428
- selectedKeys={tagValue}
429
- expandedKeys={expandedKeys}
430
- autoExpandParent={autoExpandParent}
431
- onExpand={this.onExpand}
432
- >
433
- {/* {this.renderTags(tg, searchValue)} */}
434
- {this.state.tagsList}
435
- </CapTree>
436
- {translationLang === "ja-JP" && (
437
- <div className="tag-list-footer">
438
- <CapIcon
439
- type="help"
440
- size="s"
441
- />
442
- <CapLink>
443
- <CapButton id="translationtagfooter" type="flat" onClick={this.openTranslationLink}>
444
- <div className="tag-list-footer-icon">
445
- <div>{JAPANESE_HELP_TEXT}</div>
446
- <CapIcon
447
- type="open-in-new-light"
448
- size="s"
449
- svgProps={{ color: FONT_COLOR_05 }}
450
- />
451
- </div>
452
- </CapButton>
453
- </CapLink>
454
- </div>
455
- )}
357
+ const contentSection = (<div>
358
+ <CapSpin tip={formatMessage(messages.gettingTags)} spinning={this.props.loading}>
359
+ <Search
360
+ style={{ marginBottom: 8, width: '250px'}}
361
+ placeholder={formatMessage(messages.search)}
362
+ onChange={this.onChange} />
363
+ {moduleFilterEnabled ?
364
+ <CapSelect
365
+ getPopupContainer={(triggerNode) => triggerNode.parentNode}
366
+ style={{width: '250px', marginBottom: '16px', minWidth: 'initial', display: 'inherit'}}
367
+ onChange={this.props.onContextChange}
368
+ defaultValue={'Outbound'}
369
+ options={options}>
370
+ </CapSelect> : ''}
371
+ <CapTree
372
+ styling={{height: '350px', overflow: 'auto'}}
373
+ onSelect={this.handleOnSelect}
374
+ selectedKeys={tagValue}
375
+ expandedKeys={expandedKeys}
376
+ autoExpandParent={autoExpandParent}
377
+ onExpand={this.onExpand}
378
+ >
379
+ {/* {this.renderTags(tg, searchValue)} */}
380
+ {this.state.tagsList}
381
+ </CapTree>
382
+ {translationLang === "ja-JP" &&
383
+ <div className="tag-list-footer">
384
+ <CapIcon
385
+ type="help"
386
+ size="s"
387
+ />
388
+ <CapLink>
389
+ <CapButton id="translationtagfooter" type="flat" onClick={this.openTranslationLink} >
390
+ <div className="tag-list-footer-icon">
391
+ <div>{JAPANESE_HELP_TEXT}</div>
392
+ <CapIcon
393
+ type="open-in-new-light"
394
+ size="s"
395
+ svgProps={{ color: FONT_COLOR_05 }}
396
+ />
397
+ </div>
398
+ </CapButton>
399
+ </CapLink>
400
+ </div>
401
+ }
456
402
 
457
- </CapSpin>
458
- </div>
459
- );
403
+ </CapSpin>
404
+ </div>);
460
405
  return (
461
406
  <>
462
- {hidePopover ? (
463
- <CapModal
464
- visible={this.props.visibleTaglist}
465
- footer={[]}
466
- {...modalProps}
467
- >
468
- {contentSection}
469
- </CapModal>
470
- ) : (
471
- <CapPopover
472
- visible={fetchingSchemaError ? false : visible}
473
- onVisibleChange={this.togglePopoverVisibility}
474
- content={contentSection}
475
- trigger="click"
476
- placement={channel === EMAIL.toUpperCase() ? "leftTop" : "rightTop"}
407
+ {hidePopover ? <CapModal
408
+ visible={this.props.visibleTaglist}
409
+ footer={[]}
410
+ {...modalProps}
411
+ >
412
+ {contentSection}
413
+ </CapModal> :
414
+ <CapPopover
415
+ visible={fetchingSchemaError ? false : visible}
416
+ onVisibleChange={this.togglePopoverVisibility}
417
+ content={contentSection}
418
+ trigger="click"
419
+ placement={channel === EMAIL.toUpperCase() ? "leftTop" : "rightTop"}
420
+ >
421
+ <CapTooltip
422
+ title={
423
+ fetchingSchemaError && (
424
+ <CapRow className="tooltip-text-container">
425
+ <CapLabel className="tooltip-text1">
426
+ {formatMessage(messages.somethingWentWrong)}
427
+ </CapLabel>
428
+ <CapLabel className="tooltip-text2">
429
+ {formatMessage(messages.labelFetchErrorMsg)}
430
+ </CapLabel>
431
+ </CapRow>
432
+ )
433
+ }
434
+ placement="right"
477
435
  >
478
- <CapTooltip
479
- title={
480
- fetchingSchemaError && (
481
- <CapRow className="tooltip-text-container">
482
- <CapLabel className="tooltip-text1">
483
- {formatMessage(messages.somethingWentWrong)}
484
- </CapLabel>
485
- <CapLabel className="tooltip-text2">
486
- {formatMessage(messages.labelFetchErrorMsg)}
487
- </CapLabel>
488
- </CapRow>
489
- )
490
- }
491
- placement="right"
492
- >
493
- <CapRow className="tooltip-add-label-container">
494
- <CapButton
495
- disabled={
496
- this?.props?.disabled || fetchingSchemaError
497
- }
498
- isAddBtn
499
- type="flat"
500
- >
501
- {label || ""}
502
- </CapButton>
503
- </CapRow>
504
- </CapTooltip>
505
- </CapPopover>
506
- )}
436
+ <CapRow className="tooltip-add-label-container">
437
+ <CapButton
438
+ disabled={
439
+ this?.props?.disabled || fetchingSchemaError
440
+ }
441
+ isAddBtn
442
+ type="flat"
443
+ >
444
+ {label || ""}
445
+ </CapButton>
446
+ </CapRow>
447
+ </CapTooltip>
448
+ </CapPopover>
449
+ }
507
450
  <CapModal
508
451
  visible={this.state.showModal}
509
452
  title={this.props.intl.formatMessage(messages["Dynamic Days before Expiry"])}
@@ -1,10 +1,7 @@
1
1
  export const WHATSAPP = 'WHATSAPP';
2
2
  export const DEFAULT = 'DEFAULT';
3
- export const MOBILEPUSH = 'MOBILEPUSH';
4
3
  export const SUPPORTED_FILE_FORMATS = {
5
4
  VIBER: '3GP, MP4, MOV, M4V',
6
5
  DEFAULT: 'MP4',
7
- MOBILEPUSH: '3GP, MP4, MOV, M4V',
8
6
  };
9
7
  export const VIBER_MAX_DURATION = 600; // seconds
10
- export const MAX_DURATION = 600; // seconds for all channels