@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.
- package/config/app.js +6 -0
- package/containers/App/constants.js +1 -0
- package/index.html +3 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/services/api.js +94 -1
- package/services/tests/api.test.js +191 -0
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +8 -3
- package/tests/integration/TemplateCreation/api-response.js +5 -0
- package/tests/integration/TemplateCreation/msw-handler.js +42 -63
- package/utils/common.js +7 -0
- package/utils/commonUtils.js +2 -6
- package/utils/createPayload.js +272 -0
- package/utils/tests/createPayload.test.js +761 -0
- package/v2Components/CapImageUpload/index.js +59 -46
- package/v2Components/CapInAppCTA/index.js +1 -0
- package/v2Components/CapMpushCTA/constants.js +25 -0
- package/v2Components/CapMpushCTA/index.js +332 -0
- package/v2Components/CapMpushCTA/index.scss +95 -0
- package/v2Components/CapMpushCTA/messages.js +89 -0
- package/v2Components/CapTagList/index.js +177 -120
- package/v2Components/CapVideoUpload/constants.js +3 -0
- package/v2Components/CapVideoUpload/index.js +167 -110
- package/v2Components/CapVideoUpload/messages.js +16 -0
- package/v2Components/Carousel/index.js +15 -13
- package/v2Components/CustomerSearchSection/_customerSearch.scss +309 -0
- package/v2Components/CustomerSearchSection/constants.js +5 -0
- package/v2Components/CustomerSearchSection/index.js +367 -0
- package/v2Components/CustomerSearchSection/messages.js +20 -0
- package/v2Components/CustomerSearchSection/tests/utils.test.js +334 -0
- package/v2Components/CustomerSearchSection/utils.js +49 -0
- package/v2Components/ErrorInfoNote/style.scss +1 -0
- package/v2Components/MobilePushPreviewV2/index.js +37 -5
- package/v2Components/TemplatePreview/_templatePreview.scss +114 -72
- package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +29 -0
- package/v2Components/TemplatePreview/assets/images/android.svg +9 -0
- package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +26 -0
- package/v2Components/TemplatePreview/assets/images/ios.svg +9 -0
- package/v2Components/TemplatePreview/index.js +178 -50
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/CustomValuesEditor.js +169 -0
- package/v2Components/TestAndPreviewSlidebox/LeftPanelContent.js +95 -0
- package/v2Components/TestAndPreviewSlidebox/PreviewSection.js +69 -0
- package/v2Components/TestAndPreviewSlidebox/SendTestMessage.js +68 -0
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +543 -0
- package/v2Components/TestAndPreviewSlidebox/actions.js +67 -0
- package/v2Components/TestAndPreviewSlidebox/constants.js +67 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +592 -0
- package/v2Components/TestAndPreviewSlidebox/messages.js +147 -0
- package/v2Components/TestAndPreviewSlidebox/reducer.js +233 -0
- package/v2Components/TestAndPreviewSlidebox/sagas.js +258 -0
- package/v2Components/TestAndPreviewSlidebox/selectors.js +142 -0
- package/v2Components/TestAndPreviewSlidebox/tests/CustomValuesEditor.test.js +425 -0
- package/v2Components/TestAndPreviewSlidebox/tests/LeftPanelContent.test.js +400 -0
- package/v2Components/TestAndPreviewSlidebox/tests/SendTestMessage.test.js +448 -0
- package/v2Components/TestAndPreviewSlidebox/tests/actions.test.js +80 -0
- package/v2Components/TestAndPreviewSlidebox/tests/reducer.test.js +367 -0
- package/v2Components/TestAndPreviewSlidebox/tests/saga.rtl.test.js +192 -0
- package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +652 -0
- package/v2Components/TestAndPreviewSlidebox/tests/selector.test.js +182 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +22 -10
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +23 -2
- package/v2Containers/CreativesContainer/index.js +216 -136
- package/v2Containers/CreativesContainer/messages.js +4 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +21 -0
- package/v2Containers/Email/index.js +27 -2
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +10 -0
- package/v2Containers/EmailWrapper/index.js +6 -0
- package/v2Containers/InApp/constants.js +1 -0
- package/v2Containers/InApp/index.js +13 -13
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
- package/v2Containers/MobilePush/Create/index.js +1 -0
- package/v2Containers/MobilePush/commonMethods.js +7 -14
- package/v2Containers/MobilePushNew/actions.js +116 -0
- package/v2Containers/MobilePushNew/components/CtaButtons.js +170 -0
- package/v2Containers/MobilePushNew/components/MediaUploaders.js +754 -0
- package/v2Containers/MobilePushNew/components/PlatformContentFields.js +279 -0
- package/v2Containers/MobilePushNew/components/index.js +5 -0
- package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +779 -0
- package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +2114 -0
- package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +343 -0
- package/v2Containers/MobilePushNew/constants.js +115 -0
- package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +1299 -0
- package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +1223 -0
- package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +246 -0
- package/v2Containers/MobilePushNew/hooks/useUpload.js +726 -0
- package/v2Containers/MobilePushNew/index.js +2280 -0
- package/v2Containers/MobilePushNew/index.scss +308 -0
- package/v2Containers/MobilePushNew/messages.js +226 -0
- package/v2Containers/MobilePushNew/reducer.js +160 -0
- package/v2Containers/MobilePushNew/sagas.js +198 -0
- package/v2Containers/MobilePushNew/selectors.js +55 -0
- package/v2Containers/MobilePushNew/tests/reducer.test.js +741 -0
- package/v2Containers/MobilePushNew/tests/sagas.test.js +863 -0
- package/v2Containers/MobilePushNew/tests/selectors.test.js +425 -0
- package/v2Containers/MobilePushNew/tests/utils.test.js +322 -0
- package/v2Containers/MobilePushNew/utils.js +33 -0
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +23 -5
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
- package/v2Containers/TagList/index.js +56 -10
- package/v2Containers/Templates/_templates.scss +101 -1
- package/v2Containers/Templates/index.js +147 -35
- package/v2Containers/Templates/messages.js +8 -0
- package/v2Containers/Templates/sagas.js +2 -0
- package/v2Containers/Whatsapp/constants.js +1 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -0
- 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);
|