@capillarytech/creatives-library 8.0.159 → 8.0.160

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 (308) hide show
  1. package/components/BreadCrumbs/index.js +65 -0
  2. package/components/BreadCrumbs/messages.js +13 -0
  3. package/components/CapTagList/index.js +235 -0
  4. package/components/CapTagList/messages.js +45 -0
  5. package/components/Card/_customCard.scss +40 -0
  6. package/components/Card/index.js +78 -0
  7. package/components/Card/tests/__snapshots__/index.test.js.snap +22 -0
  8. package/components/Card/tests/index.test.js +20 -0
  9. package/components/CardGrid/index.js +71 -0
  10. package/components/Ckeditor/index.js +238 -0
  11. package/components/Ckeditor/messages.js +13 -0
  12. package/components/Ckeditor/style.scss +3 -0
  13. package/components/Component/index.js +29 -0
  14. package/components/CustomPopOver/index.js +81 -0
  15. package/components/CustomPopOver/messages.js +17 -0
  16. package/components/DateFilter/index.js +349 -0
  17. package/components/DateFilter/messages.js +57 -0
  18. package/components/DateRange/index.js +114 -0
  19. package/components/DateRange/messages.js +25 -0
  20. package/components/Edmeditor/index.js +65 -0
  21. package/components/Edmeditor/messages.js +13 -0
  22. package/components/EmailPreview/_emailPreview.scss +119 -0
  23. package/components/EmailPreview/assets/images/iPad.svg +10 -0
  24. package/components/EmailPreview/assets/images/mobile.png +0 -0
  25. package/components/EmailPreview/index.js +107 -0
  26. package/components/EmailPreview/messages.js +33 -0
  27. package/components/Footer/index.js +27 -0
  28. package/components/Footer/messages.js +13 -0
  29. package/components/FormBuilder/_formBuilder.scss +83 -0
  30. package/components/FormBuilder/index.js +3279 -0
  31. package/components/FormBuilder/messages.js +61 -0
  32. package/components/Header/index.js +44 -0
  33. package/components/Header/messages.js +29 -0
  34. package/components/ImagePreview/_imagePreview.scss +63 -0
  35. package/components/ImagePreview/index.js +52 -0
  36. package/components/ImagePreview/messages.js +17 -0
  37. package/components/PageHeader/_pageHeader.scss +22 -0
  38. package/components/PageHeader/index.js +37 -0
  39. package/components/PageHeader/messages.js +13 -0
  40. package/components/Pagination/_pagination.scss +5 -0
  41. package/components/Pagination/index.js +49 -0
  42. package/components/PreviewSideBar/_previewsidebar.scss +28 -0
  43. package/components/PreviewSideBar/index.js +152 -0
  44. package/components/PreviewSideBar/messages.js +41 -0
  45. package/components/Sidebar/_sidebar.scss +115 -0
  46. package/components/Sidebar/index.js +214 -0
  47. package/components/Sidebar/messages.js +21 -0
  48. package/components/SlideBox/_slideBox.scss +63 -0
  49. package/components/SlideBox/index.js +47 -0
  50. package/components/SlideBox/tests/index.test.js +103 -0
  51. package/components/SmsEditor/index.js +55 -0
  52. package/components/SmsTest/index.js +117 -0
  53. package/components/SmsTest/messages.js +21 -0
  54. package/components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +42 -0
  55. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +141 -0
  56. package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +21 -0
  57. package/components/TemplatePreview/_templatePreview.scss +642 -0
  58. package/components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
  59. package/components/TemplatePreview/assets/images/androidPushMessage.svg +45 -0
  60. package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
  61. package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
  62. package/components/TemplatePreview/assets/images/iPhonePushMessage.svg +135 -0
  63. package/components/TemplatePreview/assets/images/mobile.svg +24 -0
  64. package/components/TemplatePreview/assets/images/sms-body.png +0 -0
  65. package/components/TemplatePreview/assets/images/sms-icon.png +0 -0
  66. package/components/TemplatePreview/assets/images/sms_mobile.png +0 -0
  67. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
  68. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
  69. package/components/TemplatePreview/assets/images/user-icon.svg +19 -0
  70. package/components/TemplatePreview/assets/images/wechat-mobile.svg +78 -0
  71. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
  72. package/components/TemplatePreview/index.js +617 -0
  73. package/components/TemplatePreview/messages.js +78 -0
  74. package/components/Toastr/index.js +60 -0
  75. package/components/Toastr/messages.js +13 -0
  76. package/components/ToastrMessage/index.js +113 -0
  77. package/components/ToastrMessage/messages.js +17 -0
  78. package/components/TopBar/_topbar.scss +46 -0
  79. package/components/TopBar/assets/images/capillary_logo.png +0 -0
  80. package/components/TopBar/assets/images/old_capillary_logo.png +0 -0
  81. package/components/TopBar/index.js +113 -0
  82. package/components/TopBar/messages.js +29 -0
  83. package/containers/App/actions.js +7 -0
  84. package/containers/App/constants.js +114 -0
  85. package/containers/App/index.js +52 -0
  86. package/containers/App/reducer.js +19 -0
  87. package/containers/App/sagas.js +31 -0
  88. package/containers/App/selectors.js +25 -0
  89. package/containers/App/test/saga.test.js +11 -0
  90. package/containers/Assets/Gallery/_gallery.scss +126 -0
  91. package/containers/Assets/Gallery/actions.js +37 -0
  92. package/containers/Assets/Gallery/constants.js +23 -0
  93. package/containers/Assets/Gallery/index.js +473 -0
  94. package/containers/Assets/Gallery/messages.js +93 -0
  95. package/containers/Assets/Gallery/reducer.js +81 -0
  96. package/containers/Assets/Gallery/sagas.js +80 -0
  97. package/containers/Assets/Gallery/selectors.js +25 -0
  98. package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +9 -0
  99. package/containers/Assets/Gallery/tests/actions.test.js +25 -0
  100. package/containers/Assets/Gallery/tests/reducer.test.js +96 -0
  101. package/containers/Assets/Gallery/tests/saga.test.js +157 -0
  102. package/containers/Cap/actions.js +66 -0
  103. package/containers/Cap/constants.js +25 -0
  104. package/containers/Cap/index.js +402 -0
  105. package/containers/Cap/messages.js +75 -0
  106. package/containers/Cap/reducer.js +113 -0
  107. package/containers/Cap/sagas.js +159 -0
  108. package/containers/Cap/selectors.js +75 -0
  109. package/containers/Cap/tests/__snapshots__/index.test.js.snap +2270 -0
  110. package/containers/Cap/tests/index.test.js +22 -0
  111. package/containers/Cap/tests/saga.test.js +284 -0
  112. package/containers/Dashboard/actions.js +15 -0
  113. package/containers/Dashboard/constants.js +7 -0
  114. package/containers/Dashboard/index.js +76 -0
  115. package/containers/Dashboard/messages.js +13 -0
  116. package/containers/Dashboard/reducer.js +21 -0
  117. package/containers/Dashboard/sagas.js +17 -0
  118. package/containers/Dashboard/selectors.js +25 -0
  119. package/containers/Dashboard/test/saga.test.js +9 -0
  120. package/containers/Ebill/_ebill.scss +5 -0
  121. package/containers/Ebill/actions.js +43 -0
  122. package/containers/Ebill/constants.js +20 -0
  123. package/containers/Ebill/index.js +1278 -0
  124. package/containers/Ebill/messages.js +77 -0
  125. package/containers/Ebill/reducer.js +72 -0
  126. package/containers/Ebill/sagas.js +74 -0
  127. package/containers/Ebill/selectors.js +25 -0
  128. package/containers/Ebill/test/saga.test.js +11 -0
  129. package/containers/Email/_email.scss +141 -0
  130. package/containers/Email/actions.js +81 -0
  131. package/containers/Email/constants.js +36 -0
  132. package/containers/Email/index.js +3325 -0
  133. package/containers/Email/messages.js +289 -0
  134. package/containers/Email/reducer.js +142 -0
  135. package/containers/Email/sagas.js +135 -0
  136. package/containers/Email/selectors.js +31 -0
  137. package/containers/Email/test/saga.test.js +671 -0
  138. package/containers/LanguageProvider/actions.js +17 -0
  139. package/containers/LanguageProvider/constants.js +8 -0
  140. package/containers/LanguageProvider/index.js +80 -0
  141. package/containers/LanguageProvider/reducer.js +30 -0
  142. package/containers/LanguageProvider/selectors.js +20 -0
  143. package/containers/LanguageProvider/tests/actions.test.js +19 -0
  144. package/containers/LanguageProvider/tests/index.test.js +78 -0
  145. package/containers/LanguageProvider/tests/reducer.test.js +20 -0
  146. package/containers/LanguageProvider/tests/selectors.test.js +15 -0
  147. package/containers/Line/Create/_lineCreate.scss +54 -0
  148. package/containers/Line/Create/actions.js +90 -0
  149. package/containers/Line/Create/constants.js +39 -0
  150. package/containers/Line/Create/index.js +836 -0
  151. package/containers/Line/Create/messages.js +189 -0
  152. package/containers/Line/Create/reducer.js +99 -0
  153. package/containers/Line/Create/sagas.js +121 -0
  154. package/containers/Line/Create/selectors.js +36 -0
  155. package/containers/Line/Create/tests/saga.test.js +202 -0
  156. package/containers/Line/Edit/_lineEdit.scss +35 -0
  157. package/containers/Line/Edit/actions.js +79 -0
  158. package/containers/Line/Edit/constants.js +27 -0
  159. package/containers/Line/Edit/index.js +1050 -0
  160. package/containers/Line/Edit/messages.js +177 -0
  161. package/containers/Line/Edit/reducer.js +83 -0
  162. package/containers/Line/Edit/sagas.js +80 -0
  163. package/containers/Line/Edit/selectors.js +29 -0
  164. package/containers/Line/Edit/test/saga.test.js +160 -0
  165. package/containers/Login/assets/images/capillary_logo.png +0 -0
  166. package/containers/Login/components/LoginForm/index.js +62 -0
  167. package/containers/Login/components/LoginForm/messages.js +33 -0
  168. package/containers/Login/index.js +130 -0
  169. package/containers/Login/messages.js +25 -0
  170. package/containers/Login/selectors.js +25 -0
  171. package/containers/MobilePush/Create/_mobilePushCreate.scss +39 -0
  172. package/containers/MobilePush/Create/actions.js +46 -0
  173. package/containers/MobilePush/Create/constants.js +23 -0
  174. package/containers/MobilePush/Create/index.js +2303 -0
  175. package/containers/MobilePush/Create/messages.js +269 -0
  176. package/containers/MobilePush/Create/reducer.js +70 -0
  177. package/containers/MobilePush/Create/sagas.js +74 -0
  178. package/containers/MobilePush/Create/selectors.js +28 -0
  179. package/containers/MobilePush/Create/test/saga.test.js +19 -0
  180. package/containers/MobilePush/Edit/_mobilePushCreate.scss +39 -0
  181. package/containers/MobilePush/Edit/actions.js +91 -0
  182. package/containers/MobilePush/Edit/constants.js +35 -0
  183. package/containers/MobilePush/Edit/index.js +2601 -0
  184. package/containers/MobilePush/Edit/messages.js +266 -0
  185. package/containers/MobilePush/Edit/reducer.js +112 -0
  186. package/containers/MobilePush/Edit/sagas.js +126 -0
  187. package/containers/MobilePush/Edit/selectors.js +29 -0
  188. package/containers/MobilePush/Edit/tests/saga.test.js +255 -0
  189. package/containers/NotFoundPage/index.js +25 -0
  190. package/containers/NotFoundPage/messages.js +13 -0
  191. package/containers/NotFoundPage/tests/index.test.js +17 -0
  192. package/containers/Sms/Create/_smsCreate.scss +42 -0
  193. package/containers/Sms/Create/actions.js +27 -0
  194. package/containers/Sms/Create/constants.js +16 -0
  195. package/containers/Sms/Create/index.js +1488 -0
  196. package/containers/Sms/Create/messages.js +109 -0
  197. package/containers/Sms/Create/reducer.js +41 -0
  198. package/containers/Sms/Create/sagas.js +40 -0
  199. package/containers/Sms/Create/selectors.js +28 -0
  200. package/containers/Sms/Create/test/saga.test.js +11 -0
  201. package/containers/Sms/Edit/actions.js +40 -0
  202. package/containers/Sms/Edit/constants.js +17 -0
  203. package/containers/Sms/Edit/index.js +1472 -0
  204. package/containers/Sms/Edit/messages.js +105 -0
  205. package/containers/Sms/Edit/reducer.js +50 -0
  206. package/containers/Sms/Edit/sagas.js +60 -0
  207. package/containers/Sms/Edit/selectors.js +32 -0
  208. package/containers/Sms/Edit/test/saga.test.js +13 -0
  209. package/containers/TagList/_tagList.scss +8 -0
  210. package/containers/TagList/actions.js +15 -0
  211. package/containers/TagList/constants.js +32 -0
  212. package/containers/TagList/index.js +236 -0
  213. package/containers/TagList/messages.js +13 -0
  214. package/containers/TagList/reducer.js +23 -0
  215. package/containers/TagList/sagas.js +11 -0
  216. package/containers/TagList/selectors.js +25 -0
  217. package/containers/Templates/_templates.scss +333 -0
  218. package/containers/Templates/actions.js +103 -0
  219. package/containers/Templates/constants.js +60 -0
  220. package/containers/Templates/index.js +1756 -0
  221. package/containers/Templates/messages.js +337 -0
  222. package/containers/Templates/reducer.js +142 -0
  223. package/containers/Templates/sagas.js +163 -0
  224. package/containers/Templates/selectors.js +28 -0
  225. package/containers/Templates/test/saga.test.js +241 -0
  226. package/containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
  227. package/containers/WeChat/MapTemplates/actions.js +52 -0
  228. package/containers/WeChat/MapTemplates/constants.js +28 -0
  229. package/containers/WeChat/MapTemplates/index.js +1610 -0
  230. package/containers/WeChat/MapTemplates/messages.js +157 -0
  231. package/containers/WeChat/MapTemplates/reducer.js +74 -0
  232. package/containers/WeChat/MapTemplates/sagas.js +84 -0
  233. package/containers/WeChat/MapTemplates/selectors.js +25 -0
  234. package/containers/WeChat/MapTemplates/test/saga.test.js +155 -0
  235. package/containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
  236. package/containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
  237. package/containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
  238. package/containers/WeChat/RichmediaTemplates/Create/index.js +1071 -0
  239. package/containers/WeChat/RichmediaTemplates/Create/messages.js +165 -0
  240. package/containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
  241. package/containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
  242. package/containers/WeChat/RichmediaTemplates/Create/sagas.js +51 -0
  243. package/containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
  244. package/containers/WeChat/RichmediaTemplates/Create/test/saga.test.js +13 -0
  245. package/containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
  246. package/containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
  247. package/containers/WeChat/RichmediaTemplates/Edit/index.js +136 -0
  248. package/containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
  249. package/containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
  250. package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +36 -0
  251. package/containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
  252. package/containers/WeChat/RichmediaTemplates/Edit/test/saga.test.js +12 -0
  253. package/containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
  254. package/containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
  255. package/containers/WeChat/RichmediaTemplates/View/index.js +47 -0
  256. package/containers/WeChat/RichmediaTemplates/View/messages.js +21 -0
  257. package/containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
  258. package/containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
  259. package/containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
  260. package/index.js +2 -4
  261. package/package.json +1 -1
  262. package/routes.js +202 -136
  263. package/services/getSchema.js +1 -1
  264. package/services/localStorageApi.js +0 -1
  265. package/tests/i18n.test.js +1 -1
  266. package/utils/asyncInjectors.js +78 -0
  267. package/utils/authWrapper.js +1 -1
  268. package/utils/callNativeEvent.js +16 -0
  269. package/utils/checkStore.js +21 -0
  270. package/utils/common.js +2 -2
  271. package/utils/customAuthWrapper.js +62 -0
  272. package/utils/customConnectedAuthWrapper.js +26 -0
  273. package/utils/tagValidations.js +1 -1
  274. package/utils/tests/authWrapper.test.js +1 -1
  275. package/utils/tests/checkStore.test.js +1 -1
  276. package/utils/tests/customAuth.test.js +1 -1
  277. package/utils/transformerUtils.js +1 -1
  278. package/v2Components/CapTagList/index.js +14 -9
  279. package/v2Components/Carousel/style.scss +1 -1
  280. package/v2Components/CustomerSearchSection/index.js +83 -79
  281. package/v2Components/EmailMobilePreview/index.js +2 -2
  282. package/v2Components/EmailPreview/_emailPreview.scss +1 -0
  283. package/v2Components/EmailPreviewV2/_emailPreviewV2.scss +1 -0
  284. package/v2Components/FormBuilder/index.js +80 -55
  285. package/v2Components/TemplatePreview/index.js +1 -2
  286. package/v2Components/TestAndPreviewSlidebox/PreviewSection.js +1 -1
  287. package/v2Components/TestAndPreviewSlidebox/SendTestMessage.js +1 -1
  288. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +2 -1
  289. package/v2Components/TestAndPreviewSlidebox/index.js +231 -22
  290. package/v2Components/TestAndPreviewSlidebox/tests/PreviewSection.test.js +1 -1
  291. package/v2Containers/Cap/tests/saga.test.js +1 -1
  292. package/v2Containers/CreativesContainer/SlideBoxContent.js +9 -3
  293. package/v2Containers/CreativesContainer/index.js +22 -15
  294. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +599 -1
  295. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +1941 -0
  296. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +5 -0
  297. package/v2Containers/Email/index.js +116 -32
  298. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +3 -0
  299. package/v2Containers/EmailWrapper/index.js +6 -0
  300. package/v2Containers/FTP/index.js +1 -1
  301. package/v2Containers/Line/Container/Text/index.js +1 -1
  302. package/v2Containers/Sms/Create/index.js +1 -1
  303. package/v2Containers/Sms/Edit/index.js +1 -1
  304. package/v2Containers/TagList/index.js +1 -1
  305. package/v2Containers/TagList/utils.js +1 -1
  306. package/v2Containers/Templates/index.js +1 -1
  307. package/v2Containers/Templates/sagas.js +1 -1
  308. package/constants/unified.js +0 -189
@@ -30,8 +30,15 @@ import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
30
30
  import { createStructuredSelector } from 'reselect';
31
31
  import messages from './messages';
32
32
  import { makeSelectLoyaltyPromotionDisplay } from '../../v2Containers/Cap/selectors';
33
- import { CARD_RELATED_TAGS, HOSPITALITY_RELATED_TAGS, CUSTOMER_BARCODE_TAG, GET_TRANSLATION_MAPPED ,JAPANESE_HELP_TEXT, TAG_TRANSLATION_DOC} from '../../constants/unified';
33
+ import { CARD_RELATED_TAGS, HOSPITALITY_RELATED_TAGS, CUSTOMER_BARCODE_TAG } from '../../containers/App/constants';
34
34
  import { hasCardBasedScope, hasCustomerBarcodeFeatureEnabled, hasHospitalityBasedScope } from '../../utils/common';
35
+
36
+ import {
37
+ GET_TRANSLATION_MAPPED,
38
+ JAPANESE_HELP_TEXT,
39
+ TAG_TRANSLATION_DOC,
40
+ STRING,
41
+ } from "../../containers/TagList/constants";
35
42
  import { EMAIL, JP_LOCALE_HIDE_FEATURE, LOYALTY } from '../../v2Containers/App/constants';
36
43
  import { hidingDateTagsForJpLocale } from '../../v2Containers/TagList/utils';
37
44
 
@@ -125,10 +132,9 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
125
132
  getSearchedExpandedKeys(tags, value = '') {
126
133
  let list = [];
127
134
  _.forEach(tags, (val = {}, key) => {
128
- const tagName =
129
- typeof val?.name === 'string'
130
- ? _.toLower(_.get(val, "name", ""))
131
- : _.toLower(_.get(val, "name.props.defaultMessage", ""));
135
+ const tagName = typeof val?.name === STRING
136
+ ? _.toLower(_.get(val, "name", ""))
137
+ : _.toLower(_.get(val, "name.props.defaultMessage", ""));
132
138
  const tagNameWithoutUnderscore = tagName.replace(/_/g, " ");
133
139
  const searchStringLower = _.toLower(value);
134
140
  if (_.has(val, "subtags")) {
@@ -261,10 +267,9 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
261
267
  supportedTagsString += `${supportedTag} ,`;
262
268
  });
263
269
  supportedTagsString = supportedTagsString.replace(/,\s*$/, "");
264
- const tagName =
265
- typeof val?.name === 'string'
266
- ? _.toLower(_.get(val, "name", ""))
267
- : _.toLower(_.get(val, "name.props.defaultMessage", ""));
270
+ const tagName = typeof val?.name === STRING
271
+ ? _.toLower(_.get(val, "name", ""))
272
+ : _.toLower(_.get(val, "name.props.defaultMessage", ""));
268
273
  const tagNameWithoutUnderscore = tagName.replace(/_/g, " ");
269
274
  const searchStringLower = _.toLower(searchString);
270
275
  const tagContainsSearchedString = searchStringLower
@@ -26,7 +26,7 @@
26
26
  text-align: center;
27
27
  width: 120px !important;
28
28
  border-radius: 12px;
29
- background-color: $CAP_G09;
29
+ background-color: $CAP_G09,
30
30
  }
31
31
 
32
32
  .ant-carousel .slick-slide {
@@ -69,7 +69,9 @@ const CustomerSearchSection = ({
69
69
  if (value?.trim()) {
70
70
  debouncedSearch(value.trim());
71
71
  } else {
72
- onClearSearch();
72
+ if (onClearSearch && typeof onClearSearch === 'function') {
73
+ onClearSearch();
74
+ }
73
75
  setShowDropdown(false);
74
76
  }
75
77
  },
@@ -182,86 +184,88 @@ const CustomerSearchSection = ({
182
184
 
183
185
  return (
184
186
  <CapRow className="customer-search-section">
185
- <CapRow className="search-container" ref={searchContainerRef}>
186
- {selectedCustomer ? (
187
- <SelectedCustomerView
188
- customer={selectedCustomer}
189
- onClear={onClear}
190
- showIdentifiers={showIdentifiers}
191
- />
192
- ) : (
193
- <SearchInput
194
- value={customerSearchValue}
195
- onChange={handleSearchChange}
196
- isLoading={isSearchingCustomer}
197
- error={searchError}
198
- disabled={disabled}
199
- placeholder={formatMessage(messages.searchPlaceholder)}
200
- />
201
- )}
202
- {showDropdown && !selectedCustomer && (
203
- <CapRow className="search-dropdown-container">
204
- <CapRow type="flex" justify="center" align="middle">
205
- {(processedSearchData?.length === 0 && customerSearchValue != null && !isSearchingCustomer) && (
206
- <CapCard className="validation-card">
207
- <CapHeading type="h6">
208
- {formatMessage(messages.noCustomersFound)}
209
- </CapHeading>
210
- </CapCard>
211
- )}
212
- {(isSearchingCustomer) && (
213
- <CapCard className="validation-card">
214
- <CapRow className="spin-card-align">
215
- <CapSpin />
216
- </CapRow>
217
- </CapCard>
218
- )}
219
- </CapRow>
220
- <CapRow type="flex" justify="center" align="middle">
221
- {processedSearchData?.length > 0 && (
222
- <CapCard className="search-result-card scroll-bar">
223
- {
224
- <CapRow className="identifier-row">
225
- {processedSearchData?.map((d) => (
226
- <>
227
- <CapLink
228
- key={d?.customerId}
229
- className="search-results-height link-result"
230
- title={(
231
- <>
232
- <CapRow type="flex" align="middle" gutter={16}>
233
- <CapColumn data-testid="namingIcon">
234
- <CapRow className="customer-common-profile">{getNamingIcon(d?.name)}</CapRow>
235
- </CapColumn>
236
- <CapColumn>
237
- <CapRow type="flex" gutter={12}>
238
- <CapColumn data-testid="searchResultName">
239
- <CapHeading className="search-text" type="h4">
240
- {d?.name}
241
- </CapHeading>
242
- </CapColumn>
243
- </CapRow>
244
- {(
245
- <CapRow type="flex">
246
- {showIdentifiers(d?.identifiers)}
247
- </CapRow>
248
- )}
249
- </CapColumn>
250
- </CapRow>
251
- </>
252
- )}
253
- onClick={() => handleCustomerSelectItem(d)}
254
- />
255
- </>
256
- ))}
187
+ <div ref={searchContainerRef}>
188
+ <CapRow className="search-container">
189
+ {selectedCustomer ? (
190
+ <SelectedCustomerView
191
+ customer={selectedCustomer}
192
+ onClear={onClear}
193
+ showIdentifiers={showIdentifiers}
194
+ />
195
+ ) : (
196
+ <SearchInput
197
+ value={customerSearchValue}
198
+ onChange={handleSearchChange}
199
+ isLoading={isSearchingCustomer}
200
+ error={searchError}
201
+ disabled={disabled}
202
+ placeholder={formatMessage(messages.searchPlaceholder)}
203
+ />
204
+ )}
205
+ {showDropdown && !selectedCustomer && (
206
+ <CapRow className="search-dropdown-container">
207
+ <CapRow type="flex" justify="center" align="middle">
208
+ {(processedSearchData?.length === 0 && customerSearchValue != null && !isSearchingCustomer) && (
209
+ <CapCard className="validation-card">
210
+ <CapHeading type="h6">
211
+ {formatMessage(messages.noCustomersFound)}
212
+ </CapHeading>
213
+ </CapCard>
214
+ )}
215
+ {(isSearchingCustomer) && (
216
+ <CapCard className="validation-card">
217
+ <CapRow className="spin-card-align">
218
+ <CapSpin />
257
219
  </CapRow>
258
- }
259
- </CapCard>
260
- )}
220
+ </CapCard>
221
+ )}
222
+ </CapRow>
223
+ <CapRow type="flex" justify="center" align="middle">
224
+ {processedSearchData?.length > 0 && (
225
+ <CapCard className="search-result-card scroll-bar">
226
+ {
227
+ <CapRow className="identifier-row">
228
+ {processedSearchData?.map((d) => (
229
+ <>
230
+ <CapLink
231
+ key={d?.customerId}
232
+ className="search-results-height link-result"
233
+ title={(
234
+ <>
235
+ <CapRow type="flex" align="middle" gutter={16}>
236
+ <CapColumn data-testid="namingIcon">
237
+ <CapRow className="customer-common-profile">{getNamingIcon(d?.name)}</CapRow>
238
+ </CapColumn>
239
+ <CapColumn>
240
+ <CapRow type="flex" gutter={12}>
241
+ <CapColumn data-testid="searchResultName">
242
+ <CapHeading className="search-text" type="h4">
243
+ {d?.name}
244
+ </CapHeading>
245
+ </CapColumn>
246
+ </CapRow>
247
+ {(
248
+ <CapRow type="flex">
249
+ {showIdentifiers(d?.identifiers)}
250
+ </CapRow>
251
+ )}
252
+ </CapColumn>
253
+ </CapRow>
254
+ </>
255
+ )}
256
+ onClick={() => handleCustomerSelectItem(d)}
257
+ />
258
+ </>
259
+ ))}
260
+ </CapRow>
261
+ }
262
+ </CapCard>
263
+ )}
264
+ </CapRow>
261
265
  </CapRow>
262
- </CapRow>
263
- )}
264
- </CapRow>
266
+ )}
267
+ </CapRow>
268
+ </div>
265
269
  </CapRow>
266
270
  );
267
271
  };
@@ -19,8 +19,8 @@ import messages from '../EmailPreviewV2/messages';
19
19
  import './index.scss';
20
20
  import mobileBody from '../../assets/DeviceForEmail.png';
21
21
  import { iframePreviewAdjustWidth, removeLinksFromHtmlContent } from './../../utils/common';
22
- import {selectTemplateContent} from '../../v2Containers/Templates/selectors';
23
- import * as templateActions from '../../v2Containers/Templates/actions';
22
+ import {selectTemplateContent} from '../../containers/Templates/selectors';
23
+ import * as templateActions from '../../containers/Templates/actions';
24
24
 
25
25
  const deviceAspectRatio = {
26
26
  mobile: {
@@ -79,6 +79,7 @@
79
79
  }
80
80
  .email-subject-desktop {
81
81
  text-align: left;
82
+ margin-left: 6%;
82
83
  margin-bottom: 8px;
83
84
  }
84
85
  .tablet-message-container-v2 {
@@ -65,6 +65,7 @@ $classPrefix: email-preview-v2;
65
65
  }
66
66
  .email-subject-desktop {
67
67
  text-align: left;
68
+ margin-left: 6%;
68
69
  margin-bottom: 8px;
69
70
  }
70
71
  .tablet-message-container {
@@ -54,9 +54,9 @@ import { SMS, MOBILE_PUSH, LINE, ENABLE_AI_SUGGESTIONS,AI_CONTENT_BOT_DISABLED,
54
54
  import globalMessages from '../../v2Containers/Cap/messages';
55
55
  import { convert } from 'html-to-text';
56
56
  import { OUTBOUND } from './constants';
57
- import { GET_TRANSLATION_MAPPED } from '../../constants/unified';
57
+ import { GET_TRANSLATION_MAPPED } from '../../containers/TagList/constants';
58
58
  import moment from 'moment';
59
- import { CUSTOMER_BARCODE_TAG , COPY_OF, ENTRY_TRIGGER_TAG_REGEX} from '../../constants/unified';
59
+ import { CUSTOMER_BARCODE_TAG , COPY_OF, ENTRY_TRIGGER_TAG_REGEX} from '../../containers/App/constants';
60
60
  import { REQUEST } from '../../v2Containers/Cap/constants'
61
61
  import { hasLiquidSupportFeature, isEmailUnsubscribeTagMandatory } from '../../utils/common';
62
62
  import { isUrl } from '../../v2Containers/Line/Container/Wrapper/utils';
@@ -235,9 +235,15 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
235
235
  ( !this.state.usingTabContainer || (this.state.usingTabContainer && nextProps.tabKey !== ''))
236
236
  && !_.isEqual(nextProps.formData, this.state.formData) &&
237
237
  !_.isEqual(nextProps.formData, this.props.formData)) {
238
- this.setState({formData: nextProps.formData, tabKey: nextProps.tabKey}, () => {
239
- this.validateForm();
240
- });
238
+ // Don't run validation if we're in Test & Preview mode
239
+ if (!nextProps.isTestAndPreviewMode) {
240
+ this.setState({formData: nextProps.formData, tabKey: nextProps.tabKey}, () => {
241
+ this.validateForm();
242
+ });
243
+ } else {
244
+ // Just update formData without validation
245
+ this.setState({formData: nextProps.formData, tabKey: nextProps.tabKey});
246
+ }
241
247
  //this.resetTabKeys(nextProps.formData, nextProps.tabCount);
242
248
  } else if ((_.isEmpty(this.props.formData) || !this.props.formData) && _.isEmpty(this.state.formData)) {
243
249
  this.initialiseForm(nextProps.schema, true);
@@ -265,10 +271,16 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
265
271
  this.resetTabKeys(nextProps.formData, nextProps.tabCount, false, true);
266
272
  }
267
273
  if (type === 'embedded' || ( this.props.schema.channel && this.props.schema.channel.toUpperCase() === 'EMAIL')) {
268
- this.validateForm();
274
+ // Don't run validation if we're in Test & Preview mode
275
+ if (!nextProps.isTestAndPreviewMode) {
276
+ this.validateForm();
277
+ }
269
278
  }
270
279
  if ((this.props.schema && this.props.schema.channel && this.props.schema.channel.toUpperCase() === 'MOBILEPUSH')) {
271
- this.validateForm();
280
+ // Don't run validation if we're in Test & Preview mode
281
+ if (!nextProps.isTestAndPreviewMode) {
282
+ this.validateForm();
283
+ }
272
284
  }
273
285
  });
274
286
  }
@@ -286,7 +298,10 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
286
298
  }
287
299
 
288
300
  this.initialiseForm(nextProps.schema, false, resetTabKeys);
289
- this.validateForm();
301
+ // Don't run validation if we're in Test & Preview mode
302
+ if (!nextProps.isTestAndPreviewMode) {
303
+ this.validateForm();
304
+ }
290
305
  }
291
306
  });
292
307
  }
@@ -299,10 +314,16 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
299
314
  }
300
315
 
301
316
  if (!_.isEmpty(nextProps.injectedTags) && !_.isEqual(nextProps.injectedTags, this.props.injectedTags)) {
302
- this.validateForm(nextProps.tags, nextProps.injectedTags);
317
+ // Don't run validation if we're in Test & Preview mode
318
+ if (!nextProps.isTestAndPreviewMode) {
319
+ this.validateForm(nextProps.tags, nextProps.injectedTags);
320
+ }
303
321
  }
304
322
  if (!_.isEmpty(nextProps.tags) && !_.isEqual(nextProps.tags, this.props.tags)) {
305
- this.validateForm(nextProps.tags, nextProps.injectedTags);
323
+ // Don't run validation if we're in Test & Preview mode
324
+ if (!nextProps.isTestAndPreviewMode) {
325
+ this.validateForm(nextProps.tags, nextProps.injectedTags);
326
+ }
306
327
  }
307
328
  if (!_.isEqual(nextProps.showModal, this.props.showModal)) {
308
329
  this.setState({showModal: nextProps.showModal});
@@ -3917,55 +3938,59 @@ FormBuilder.defaultProps = {
3917
3938
  userLocale: localStorage.getItem('jlocale') || 'en',
3918
3939
  showLiquidErrorInFooter: () => {},
3919
3940
  metaDataStatus: "",
3941
+ isTestAndPreviewMode: false, // Default to false to maintain existing behavior
3920
3942
  };
3921
3943
 
3922
3944
  FormBuilder.propTypes = {
3923
3945
  schema: PropTypes.object.isRequired,
3924
- onSubmit: PropTypes.func,
3925
- formData: PropTypes.object,
3926
- onChange: PropTypes.func,
3927
- isEdit: PropTypes.bool,
3928
- usingTabContainer: PropTypes.bool,
3929
- parent: PropTypes.object,
3930
- iframeParent: PropTypes.object,
3931
- location: PropTypes.object,
3932
- tags: PropTypes.array,
3933
- injectedTags: PropTypes.object,
3934
- onFormValidityChange: PropTypes.func,
3935
- checkValidation: PropTypes.bool,
3936
- onContextChange: PropTypes.func,
3937
- tabCount: PropTypes.number,
3938
- isSchemaChanged: PropTypes.bool,
3939
- modal: PropTypes.object,
3940
- isNewVersionFlow: PropTypes.bool,
3941
- baseLanguage: PropTypes.string,
3942
- supportedLanguages: PropTypes.array,
3943
- router: PropTypes.object,
3944
- currentTab: PropTypes.number,
3945
- showModal: PropTypes.bool,
3946
- handleCancelModal: PropTypes.func,
3947
- cmsTemplates: PropTypes.array,
3948
- getCmsTemplatesInProgress: PropTypes.bool,
3949
- showEdmEmailTemplates: PropTypes.bool,
3950
- toggleEdmEmailTemplateSelection: PropTypes.func,
3951
- handleEdmDefaultTemplateSelection: PropTypes.func,
3952
- userLocale: PropTypes.string,
3953
- setModalContent: PropTypes.func,
3954
- addLanguageType: PropTypes.string,
3955
- getValidationData: PropTypes.func,
3956
- startValidation: PropTypes.bool,
3957
- // saveForm: PropTypes.bool,
3958
- stopValidation: PropTypes.func,
3959
- handleDelete: PropTypes.func,
3960
- intl: intlShape.isRequired,
3961
- selectedOfferDetails: PropTypes.array,
3962
- setDrawerVisibility: PropTypes.bool,
3963
- capDrawerContent: PropTypes.array,
3964
- isFullMode: PropTypes.bool,
3965
- currentOrgDetails: PropTypes.object,
3966
- liquidExtractionInProgress: PropTypes.bool,
3967
- showLiquidErrorInFooter: PropTypes.func,
3968
- channel: PropTypes.string,
3946
+ onSubmit: PropTypes.func.isRequired,
3947
+ onChange: PropTypes.func.isRequired,
3948
+ currentTab: PropTypes.number.isRequired,
3949
+ parent: PropTypes.object.isRequired,
3950
+ formData: PropTypes.object.isRequired,
3951
+ location: PropTypes.object.isRequired,
3952
+ tabKey: PropTypes.string.isRequired,
3953
+ tags: PropTypes.array.isRequired,
3954
+ tagModule: PropTypes.string.isRequired,
3955
+ injectedTags: PropTypes.object.isRequired,
3956
+ onFormValidityChange: PropTypes.func.isRequired,
3957
+ handleCancelModal: PropTypes.func.isRequired,
3958
+ usingTabContainer: PropTypes.bool.isRequired,
3959
+ checkValidation: PropTypes.bool.isRequired,
3960
+ onContextChange: PropTypes.func.isRequired,
3961
+ tabCount: PropTypes.number.isRequired,
3962
+ isNewVersionFlow: PropTypes.bool.isRequired,
3963
+ modal: PropTypes.object.isRequired,
3964
+ showModal: PropTypes.bool.isRequired,
3965
+ isEdit: PropTypes.bool.isRequired,
3966
+ iframeParent: PropTypes.object.isRequired,
3967
+ router: PropTypes.object.isRequired,
3968
+ baseLanguage: PropTypes.string.isRequired,
3969
+ supportedLanguages: PropTypes.array.isRequired,
3970
+ isSchemaChanged: PropTypes.bool.isRequired,
3971
+ cmsTemplates: PropTypes.array.isRequired,
3972
+ getCmsTemplatesInProgress: PropTypes.bool.isRequired,
3973
+ showEdmEmailTemplates: PropTypes.bool.isRequired,
3974
+ toggleEdmEmailTemplateSelection: PropTypes.func.isRequired,
3975
+ handleEdmDefaultTemplateSelection: PropTypes.func.isRequired,
3976
+ setModalContent: PropTypes.func.isRequired,
3977
+ addLanguageType: PropTypes.string.isRequired,
3978
+ startValidation: PropTypes.bool.isRequired,
3979
+ getValidationData: PropTypes.func.isRequired,
3980
+ saveForm: PropTypes.bool.isRequired,
3981
+ stopValidation: PropTypes.func.isRequired,
3982
+ selectedOfferDetails: PropTypes.object.isRequired,
3983
+ saveBeeInstance: PropTypes.func.isRequired,
3984
+ saveBeeData: PropTypes.func.isRequired,
3985
+ uuid: PropTypes.string.isRequired,
3986
+ type: PropTypes.string.isRequired,
3987
+ isEmailLoading: PropTypes.bool.isRequired,
3988
+ moduleType: PropTypes.string.isRequired,
3989
+ showLiquidErrorInFooter: PropTypes.bool.isRequired,
3990
+ eventContextTags: PropTypes.array.isRequired,
3991
+ forwardedTags: PropTypes.object.isRequired,
3992
+ isLoyaltyModule: PropTypes.bool.isRequired,
3993
+ isTestAndPreviewMode: PropTypes.bool, // Add new prop type
3969
3994
  };
3970
3995
 
3971
3996
  const mapStateToProps = createStructuredSelector({
@@ -32,11 +32,10 @@ import {
32
32
  RCS,
33
33
  ZALO,
34
34
  INAPP,
35
- VIBER,
36
- FACEBOOK,
37
35
  MOBILE_PUSH
38
36
  } from '../../v2Containers/CreativesContainer/constants';
39
37
  import Carousel from '../Carousel';
38
+ import { VIBER, FACEBOOK } from '../../v2Containers/App/constants';
40
39
  import whatsappMobileAndroid from './assets/images/whatsapp_mobile_android.svg';
41
40
  import inAppMobileAndroidModal from './assets/images/inapp_mobile_android_modal.svg';
42
41
  import inAppMobileAndroidTop from './assets/images/inapp_mobile_android_top.svg';
@@ -15,7 +15,7 @@ const PreviewSection = ({
15
15
  formatMessage,
16
16
  PreviewChrome,
17
17
  }) => (
18
- <CapRow className="preview-section panel-section">
18
+ <CapRow className="test-and-preview-section panel-section">
19
19
  <PreviewChrome
20
20
  device={previewDevice}
21
21
  onDeviceChange={setPreviewDevice}
@@ -43,7 +43,7 @@ const SendTestMessage = ({
43
43
  multiple
44
44
  placeholder={formatMessage(messages.testCustomersPlaceholder)}
45
45
  />
46
- <CapButton onClick={handleSendTestMessage} disabled={isEmpty(selectedTestEntities) || isEmpty(formData['template-subject']) || isSendingTestMessage}>
46
+ <CapButton onClick={handleSendTestMessage} disabled={isEmpty(selectedTestEntities) || (isEmpty(formData['template-subject']) && isEmpty(formData[0]?.['template-subject'])) || isSendingTestMessage}>
47
47
  <FormattedMessage {...messages.sendTestButton} />
48
48
  </CapButton>
49
49
  </CapRow>),
@@ -28,6 +28,7 @@
28
28
  }
29
29
 
30
30
  .test-preview-container {
31
+ margin-left: 2%;
31
32
  height: 100%;
32
33
  display: flex;
33
34
  flex-direction: column;
@@ -329,7 +330,7 @@
329
330
  }
330
331
  }
331
332
 
332
- .preview-section {
333
+ .test-and-preview-section {
333
334
  .section-title {
334
335
  margin-bottom: $CAP_SPACE_16;
335
336
  color: #333;