@capillarytech/creatives-library 8.0.125 → 8.0.127-alpha.0

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 (110) hide show
  1. package/config/app.js +6 -0
  2. package/containers/App/constants.js +1 -0
  3. package/index.html +3 -1
  4. package/initialReducer.js +2 -0
  5. package/package.json +1 -1
  6. package/services/api.js +94 -1
  7. package/services/tests/api.test.js +191 -0
  8. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +8 -3
  9. package/tests/integration/TemplateCreation/api-response.js +5 -0
  10. package/tests/integration/TemplateCreation/msw-handler.js +42 -63
  11. package/utils/common.js +7 -0
  12. package/utils/commonUtils.js +2 -6
  13. package/utils/createPayload.js +272 -0
  14. package/utils/tests/createPayload.test.js +761 -0
  15. package/v2Components/CapImageUpload/index.js +59 -46
  16. package/v2Components/CapInAppCTA/index.js +1 -0
  17. package/v2Components/CapMpushCTA/constants.js +25 -0
  18. package/v2Components/CapMpushCTA/index.js +332 -0
  19. package/v2Components/CapMpushCTA/index.scss +95 -0
  20. package/v2Components/CapMpushCTA/messages.js +89 -0
  21. package/v2Components/CapTagList/index.js +177 -120
  22. package/v2Components/CapVideoUpload/constants.js +3 -0
  23. package/v2Components/CapVideoUpload/index.js +167 -110
  24. package/v2Components/CapVideoUpload/messages.js +16 -0
  25. package/v2Components/Carousel/index.js +15 -13
  26. package/v2Components/CustomerSearchSection/_customerSearch.scss +309 -0
  27. package/v2Components/CustomerSearchSection/constants.js +5 -0
  28. package/v2Components/CustomerSearchSection/index.js +367 -0
  29. package/v2Components/CustomerSearchSection/messages.js +20 -0
  30. package/v2Components/CustomerSearchSection/tests/utils.test.js +334 -0
  31. package/v2Components/CustomerSearchSection/utils.js +49 -0
  32. package/v2Components/ErrorInfoNote/style.scss +1 -0
  33. package/v2Components/MobilePushPreviewV2/index.js +37 -5
  34. package/v2Components/TemplatePreview/_templatePreview.scss +114 -72
  35. package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +29 -0
  36. package/v2Components/TemplatePreview/assets/images/android.svg +9 -0
  37. package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +26 -0
  38. package/v2Components/TemplatePreview/assets/images/ios.svg +9 -0
  39. package/v2Components/TemplatePreview/index.js +178 -50
  40. package/v2Components/TemplatePreview/messages.js +4 -0
  41. package/v2Components/TestAndPreviewSlidebox/CustomValuesEditor.js +169 -0
  42. package/v2Components/TestAndPreviewSlidebox/LeftPanelContent.js +95 -0
  43. package/v2Components/TestAndPreviewSlidebox/PreviewSection.js +69 -0
  44. package/v2Components/TestAndPreviewSlidebox/SendTestMessage.js +68 -0
  45. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +543 -0
  46. package/v2Components/TestAndPreviewSlidebox/actions.js +67 -0
  47. package/v2Components/TestAndPreviewSlidebox/constants.js +67 -0
  48. package/v2Components/TestAndPreviewSlidebox/index.js +592 -0
  49. package/v2Components/TestAndPreviewSlidebox/messages.js +147 -0
  50. package/v2Components/TestAndPreviewSlidebox/reducer.js +233 -0
  51. package/v2Components/TestAndPreviewSlidebox/sagas.js +258 -0
  52. package/v2Components/TestAndPreviewSlidebox/selectors.js +142 -0
  53. package/v2Components/TestAndPreviewSlidebox/tests/CustomValuesEditor.test.js +425 -0
  54. package/v2Components/TestAndPreviewSlidebox/tests/LeftPanelContent.test.js +400 -0
  55. package/v2Components/TestAndPreviewSlidebox/tests/SendTestMessage.test.js +448 -0
  56. package/v2Components/TestAndPreviewSlidebox/tests/actions.test.js +80 -0
  57. package/v2Components/TestAndPreviewSlidebox/tests/reducer.test.js +367 -0
  58. package/v2Components/TestAndPreviewSlidebox/tests/saga.rtl.test.js +192 -0
  59. package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +652 -0
  60. package/v2Components/TestAndPreviewSlidebox/tests/selector.test.js +182 -0
  61. package/v2Containers/CreativesContainer/SlideBoxContent.js +22 -10
  62. package/v2Containers/CreativesContainer/SlideBoxFooter.js +23 -2
  63. package/v2Containers/CreativesContainer/index.js +216 -136
  64. package/v2Containers/CreativesContainer/messages.js +4 -0
  65. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +21 -0
  66. package/v2Containers/Email/index.js +27 -2
  67. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +10 -0
  68. package/v2Containers/EmailWrapper/index.js +6 -0
  69. package/v2Containers/InApp/constants.js +1 -0
  70. package/v2Containers/InApp/index.js +13 -13
  71. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  72. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  73. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  74. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  75. package/v2Containers/MobilePush/Create/index.js +1 -0
  76. package/v2Containers/MobilePush/commonMethods.js +7 -14
  77. package/v2Containers/MobilePushNew/actions.js +116 -0
  78. package/v2Containers/MobilePushNew/components/CtaButtons.js +170 -0
  79. package/v2Containers/MobilePushNew/components/MediaUploaders.js +754 -0
  80. package/v2Containers/MobilePushNew/components/PlatformContentFields.js +279 -0
  81. package/v2Containers/MobilePushNew/components/index.js +5 -0
  82. package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +779 -0
  83. package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +2114 -0
  84. package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +343 -0
  85. package/v2Containers/MobilePushNew/constants.js +115 -0
  86. package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +1299 -0
  87. package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +1223 -0
  88. package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +246 -0
  89. package/v2Containers/MobilePushNew/hooks/useUpload.js +726 -0
  90. package/v2Containers/MobilePushNew/index.js +2280 -0
  91. package/v2Containers/MobilePushNew/index.scss +308 -0
  92. package/v2Containers/MobilePushNew/messages.js +226 -0
  93. package/v2Containers/MobilePushNew/reducer.js +160 -0
  94. package/v2Containers/MobilePushNew/sagas.js +198 -0
  95. package/v2Containers/MobilePushNew/selectors.js +55 -0
  96. package/v2Containers/MobilePushNew/tests/reducer.test.js +741 -0
  97. package/v2Containers/MobilePushNew/tests/sagas.test.js +863 -0
  98. package/v2Containers/MobilePushNew/tests/selectors.test.js +425 -0
  99. package/v2Containers/MobilePushNew/tests/utils.test.js +322 -0
  100. package/v2Containers/MobilePushNew/utils.js +33 -0
  101. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +23 -5
  102. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  103. package/v2Containers/TagList/index.js +56 -10
  104. package/v2Containers/Templates/_templates.scss +101 -1
  105. package/v2Containers/Templates/index.js +147 -35
  106. package/v2Containers/Templates/messages.js +8 -0
  107. package/v2Containers/Templates/sagas.js +2 -0
  108. package/v2Containers/Whatsapp/constants.js +1 -0
  109. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -0
  110. package/v2Containers/Email/tests/index.test.js +0 -35
@@ -0,0 +1,170 @@
1
+ import React, { memo, useState } from "react";
2
+ import PropTypes from "prop-types";
3
+ import { FormattedMessage } from "react-intl";
4
+ import CapRow from "@capillarytech/cap-ui-library/CapRow";
5
+ import CapButton from "@capillarytech/cap-ui-library/CapButton";
6
+ import CapIcon from "@capillarytech/cap-ui-library/CapIcon";
7
+ import CapHeading from "@capillarytech/cap-ui-library/CapHeading";
8
+ import CapMpushCTA from "../../../v2Components/CapMpushCTA";
9
+ import { PRIMARY, SECONDARY, DEEP_LINK } from "../constants";
10
+ import messages from "../messages";
11
+
12
+ const CtaButtons = ({
13
+ primaryButton,
14
+ secondaryButton,
15
+ setPrimaryButton,
16
+ setSecondaryButton,
17
+ ctaData,
18
+ updateHandler,
19
+ deleteHandler,
20
+ deepLink,
21
+ }) => {
22
+ // Local state to control CTA form visibility
23
+ const [showPrimaryCTA, setShowPrimaryCTA] = useState(false);
24
+ const [showSecondaryCTA, setShowSecondaryCTA] = useState(false);
25
+
26
+ const handleAddPrimary = () => {
27
+ // Prevent multiple clicks if primary button is already being added or form is already showing
28
+ if (primaryButton && showPrimaryCTA) {
29
+ return;
30
+ }
31
+
32
+ // If ctaData is empty or doesn't have a primary button, initialize it
33
+ if (ctaData.length === 0 || !ctaData.find((cta) => cta.index === 0)) {
34
+ const newPrimaryButton = {
35
+ index: 0,
36
+ ctaType: PRIMARY,
37
+ text: "",
38
+ urlType: DEEP_LINK,
39
+ url: "",
40
+ isSaved: false,
41
+ };
42
+ updateHandler(newPrimaryButton, 0);
43
+ }
44
+
45
+ setPrimaryButton(true);
46
+ setShowPrimaryCTA(true);
47
+ };
48
+
49
+ const handleAddSecondary = () => {
50
+ // Prevent multiple clicks if secondary button is already being added or form is already showing
51
+ if (secondaryButton && showSecondaryCTA) {
52
+ return;
53
+ }
54
+
55
+ if (shouldShowSecondaryCTA) {
56
+ return;
57
+ }
58
+
59
+ // If ctaData doesn't have a secondary button, initialize it
60
+ if (ctaData.length < 2 || !ctaData.find((cta) => cta.index === 1)) {
61
+ const newSecondaryButton = {
62
+ index: 1,
63
+ ctaType: SECONDARY,
64
+ text: "",
65
+ urlType: DEEP_LINK,
66
+ url: "",
67
+ isSaved: false,
68
+ };
69
+ updateHandler(newSecondaryButton, 1);
70
+ }
71
+
72
+ setSecondaryButton(true);
73
+ setShowSecondaryCTA(true);
74
+ };
75
+
76
+ // Check if primary button exists (saved or being edited)
77
+ const primaryButtonExists = ctaData.length > 0 && ctaData[0]?.text;
78
+ const isPrimaryButtonSaved = primaryButtonExists && ctaData[0]?.isSaved;
79
+
80
+ // Check if secondary button exists (saved or being edited)
81
+ const secondaryButtonExists = ctaData.length > 1 && ctaData[1]?.text;
82
+ const isSecondaryButtonSaved = secondaryButtonExists && ctaData[1]?.isSaved;
83
+
84
+ // Show primary CTA if button is active and (form is showing OR button exists)
85
+ const shouldShowPrimaryCTA = primaryButton && (showPrimaryCTA || primaryButtonExists);
86
+
87
+ // Show secondary CTA if button is active and (form is showing OR button exists)
88
+ const shouldShowSecondaryCTA = secondaryButton && (showSecondaryCTA || secondaryButtonExists);
89
+
90
+ // Enhanced delete handler to hide forms when buttons are deleted
91
+ const handleDelete = (index) => {
92
+ if (index === 0) {
93
+ setShowPrimaryCTA(false);
94
+ setPrimaryButton(false);
95
+ } else if (index === 1) {
96
+ setShowSecondaryCTA(false);
97
+ setSecondaryButton(false);
98
+ }
99
+ deleteHandler(index);
100
+ };
101
+
102
+ return (
103
+ <>
104
+ <CapRow>
105
+ <CapHeading type="h4">
106
+ <FormattedMessage {...messages.buttons} />
107
+ </CapHeading>
108
+ {!isPrimaryButtonSaved && !shouldShowPrimaryCTA && (
109
+ <CapButton
110
+ type="flat"
111
+ id="add-primary-button"
112
+ onClick={handleAddPrimary}
113
+ >
114
+ <CapIcon type="plus" />
115
+ <CapHeading type="h5" id="add-primary-btn-heading">
116
+ <FormattedMessage {...messages.addPrimaryButton} />
117
+ </CapHeading>
118
+ </CapButton>
119
+ )}
120
+ </CapRow>
121
+ {shouldShowPrimaryCTA && (
122
+ <CapMpushCTA
123
+ ctaData={ctaData}
124
+ updateHandler={updateHandler}
125
+ deleteHandler={handleDelete}
126
+ deepLink={deepLink || []}
127
+ buttonType={PRIMARY}
128
+ />
129
+ )}
130
+ {isPrimaryButtonSaved && !isSecondaryButtonSaved && !shouldShowSecondaryCTA && (
131
+ <CapButton
132
+ type="flat"
133
+ id="add-secondary-button"
134
+ onClick={handleAddSecondary}
135
+ >
136
+ <CapIcon type="plus" />
137
+ <CapHeading type="h5" id="add-secondary-btn-heading">
138
+ <FormattedMessage {...messages.addSecondaryButton} />
139
+ </CapHeading>
140
+ </CapButton>
141
+ )}
142
+ {shouldShowSecondaryCTA && (
143
+ <CapMpushCTA
144
+ ctaData={ctaData}
145
+ updateHandler={updateHandler}
146
+ deleteHandler={handleDelete}
147
+ deepLink={deepLink || []}
148
+ buttonType={SECONDARY}
149
+ />
150
+ )}
151
+ </>
152
+ );
153
+ };
154
+
155
+ CtaButtons.propTypes = {
156
+ primaryButton: PropTypes.bool.isRequired,
157
+ secondaryButton: PropTypes.bool.isRequired,
158
+ setPrimaryButton: PropTypes.func.isRequired,
159
+ setSecondaryButton: PropTypes.func.isRequired,
160
+ ctaData: PropTypes.array.isRequired,
161
+ updateHandler: PropTypes.func.isRequired,
162
+ deleteHandler: PropTypes.func.isRequired,
163
+ deepLink: PropTypes.array,
164
+ };
165
+
166
+ CtaButtons.defaultProps = {
167
+ deepLink: [],
168
+ };
169
+
170
+ export default memo(CtaButtons);