@capillarytech/creatives-library 8.0.123 → 8.0.125-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 (67) hide show
  1. package/containers/App/constants.js +1 -0
  2. package/package.json +1 -1
  3. package/services/api.js +1 -1
  4. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +8 -3
  5. package/tests/integration/TemplateCreation/api-response.js +5 -0
  6. package/tests/integration/TemplateCreation/msw-handler.js +42 -63
  7. package/utils/common.js +7 -0
  8. package/utils/commonUtils.js +2 -6
  9. package/utils/createPayload.js +240 -0
  10. package/utils/tests/createPayload.test.js +761 -0
  11. package/v2Components/CapDeviceContent/index.js +1 -0
  12. package/v2Components/CapImageUpload/index.js +51 -45
  13. package/v2Components/CapInAppCTA/index.js +1 -0
  14. package/v2Components/CapMpushCTA/constants.js +25 -0
  15. package/v2Components/CapMpushCTA/index.js +332 -0
  16. package/v2Components/CapMpushCTA/index.scss +95 -0
  17. package/v2Components/CapMpushCTA/messages.js +89 -0
  18. package/v2Components/CapTagList/index.js +177 -120
  19. package/v2Components/CapVideoUpload/constants.js +3 -0
  20. package/v2Components/CapVideoUpload/index.js +167 -110
  21. package/v2Components/CapVideoUpload/messages.js +16 -0
  22. package/v2Components/Carousel/index.js +15 -13
  23. package/v2Components/ErrorInfoNote/style.scss +1 -0
  24. package/v2Components/MobilePushPreviewV2/index.js +37 -5
  25. package/v2Components/TemplatePreview/_templatePreview.scss +114 -72
  26. package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +29 -0
  27. package/v2Components/TemplatePreview/assets/images/android.svg +9 -0
  28. package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +26 -0
  29. package/v2Components/TemplatePreview/assets/images/ios.svg +9 -0
  30. package/v2Components/TemplatePreview/index.js +178 -50
  31. package/v2Components/TemplatePreview/messages.js +4 -0
  32. package/v2Containers/CreativesContainer/SlideBoxContent.js +7 -8
  33. package/v2Containers/CreativesContainer/index.js +194 -138
  34. package/v2Containers/InApp/constants.js +1 -1
  35. package/v2Containers/InApp/index.js +13 -13
  36. package/v2Containers/MobilePush/Create/index.js +1 -0
  37. package/v2Containers/MobilePushNew/actions.js +116 -0
  38. package/v2Containers/MobilePushNew/components/CtaButtons.js +170 -0
  39. package/v2Containers/MobilePushNew/components/MediaUploaders.js +686 -0
  40. package/v2Containers/MobilePushNew/components/PlatformContentFields.js +279 -0
  41. package/v2Containers/MobilePushNew/components/index.js +5 -0
  42. package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +779 -0
  43. package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +2114 -0
  44. package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +343 -0
  45. package/v2Containers/MobilePushNew/constants.js +115 -0
  46. package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +1299 -0
  47. package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +1223 -0
  48. package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +246 -0
  49. package/v2Containers/MobilePushNew/hooks/useUpload.js +709 -0
  50. package/v2Containers/MobilePushNew/index.js +1937 -0
  51. package/v2Containers/MobilePushNew/index.scss +308 -0
  52. package/v2Containers/MobilePushNew/messages.js +226 -0
  53. package/v2Containers/MobilePushNew/reducer.js +160 -0
  54. package/v2Containers/MobilePushNew/sagas.js +198 -0
  55. package/v2Containers/MobilePushNew/selectors.js +55 -0
  56. package/v2Containers/MobilePushNew/tests/reducer.test.js +741 -0
  57. package/v2Containers/MobilePushNew/tests/sagas.test.js +863 -0
  58. package/v2Containers/MobilePushNew/tests/selectors.test.js +425 -0
  59. package/v2Containers/MobilePushNew/tests/utils.test.js +322 -0
  60. package/v2Containers/MobilePushNew/utils.js +33 -0
  61. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +5 -5
  62. package/v2Containers/TagList/index.js +56 -10
  63. package/v2Containers/Templates/_templates.scss +101 -1
  64. package/v2Containers/Templates/index.js +147 -35
  65. package/v2Containers/Templates/messages.js +8 -0
  66. package/v2Containers/Templates/sagas.js +2 -0
  67. package/v2Containers/Whatsapp/constants.js +1 -0
@@ -0,0 +1,279 @@
1
+ import React, { useCallback } 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 CapInput from "@capillarytech/cap-ui-library/CapInput";
6
+ import CapColumn from "@capillarytech/cap-ui-library/CapColumn";
7
+ import CapHeading from "@capillarytech/cap-ui-library/CapHeading";
8
+ import CapError from "@capillarytech/cap-ui-library/CapError";
9
+ import CapDivider from "@capillarytech/cap-ui-library/CapDivider";
10
+ import CapSelect from "@capillarytech/cap-ui-library/CapSelect";
11
+ import CapCheckbox from "@capillarytech/cap-ui-library/CapCheckbox";
12
+ import CapLabel from "@capillarytech/cap-ui-library/CapLabel";
13
+ import CapInfoNote from "@capillarytech/cap-ui-library/CapInfoNote";
14
+ import TagList from "../../TagList";
15
+ import {
16
+ ANDROID,
17
+ IOS,
18
+ MEDIA_TYPES_OPTIONS,
19
+ LINK_TYPE_OPTIONS,
20
+ DEEP_LINK,
21
+ EXTERNAL_LINK,
22
+ } from "../constants";
23
+ import messages from "../messages";
24
+ import MediaUploaders from "./MediaUploaders";
25
+ import CtaButtons from "./CtaButtons";
26
+
27
+ const PlatformContentFields = ({
28
+ deviceType,
29
+ content,
30
+ errors,
31
+ handlers,
32
+ tagListProps,
33
+ mediaUploaderProps,
34
+ ctaButtonProps,
35
+ linkProps,
36
+ sameContent,
37
+ formatMessage,
38
+ }) => {
39
+ const { title: titleError, message: messageError } = errors;
40
+ const {
41
+ handleTitleChange,
42
+ handleMessageChange,
43
+ handleMediaTypeChange,
44
+ handleActionOnClickChange,
45
+ handleLinkTypeChange,
46
+ handleDeepLinkChange,
47
+ handleExternalLinkChange,
48
+ onTagSelect,
49
+ handleOnTagsContextChange,
50
+ } = handlers;
51
+
52
+ const { deepLink, deepLinkValue, externalLinkValue } = linkProps;
53
+
54
+ const onTitleChange = useCallback(
55
+ ({ target: { value } }) => {
56
+ handleTitleChange(deviceType, value);
57
+ },
58
+ [handleTitleChange, deviceType]
59
+ );
60
+
61
+ const onMessageChange = useCallback(
62
+ ({ target: { value } }) => {
63
+ handleMessageChange(deviceType, value);
64
+ },
65
+ [handleMessageChange, deviceType]
66
+ );
67
+
68
+ const onMediaTypeChange = useCallback(
69
+ (value) => {
70
+ handleMediaTypeChange(deviceType, value);
71
+ },
72
+ [handleMediaTypeChange, deviceType]
73
+ );
74
+
75
+ const onActionOnClickChange = useCallback(
76
+ (e) => handleActionOnClickChange(deviceType, e.target.checked),
77
+ [handleActionOnClickChange, deviceType]
78
+ );
79
+
80
+ const onLinkTypeChange = useCallback(
81
+ (value) => handleLinkTypeChange(deviceType, value),
82
+ [handleLinkTypeChange, deviceType]
83
+ );
84
+
85
+ const onDeepLinkChange = useCallback((value) => handleDeepLinkChange(value), [
86
+ handleDeepLinkChange,
87
+ ]);
88
+
89
+ const onExternalLinkChange = useCallback(
90
+ (e) => handleExternalLinkChange(e.target.value),
91
+ [handleExternalLinkChange]
92
+ );
93
+
94
+ const getTagList = useCallback(
95
+ (index) => (
96
+ <TagList
97
+ {...tagListProps}
98
+ onTagSelect={(value) => onTagSelect(value, index)}
99
+ onContextChange={handleOnTagsContextChange}
100
+ />
101
+ ),
102
+ [tagListProps, onTagSelect, handleOnTagsContextChange]
103
+ );
104
+
105
+ return (
106
+ <>
107
+ {sameContent && (
108
+ <CapInfoNote message={formatMessage(messages.sameContentNote)} />
109
+ )}
110
+ <CapRow className="content-fields">
111
+ <CapRow className="creatives-mpush-title">
112
+ <CapColumn className="mpush-title-main">
113
+ <CapHeading type="h4" className="mpush-title">
114
+ <FormattedMessage {...messages.title} />
115
+ </CapHeading>
116
+ {getTagList(0)}
117
+ </CapColumn>
118
+ <CapInput
119
+ id={`mobile-push-title-name-input-${deviceType}`}
120
+ onChange={onTitleChange}
121
+ placeholder={formatMessage(messages.titlePlaceholder)}
122
+ value={content.title}
123
+ size="default"
124
+ isRequired
125
+ errorMessage={
126
+ titleError && (
127
+ <CapError className="mobile-push-template-title-error">
128
+ {titleError}
129
+ </CapError>
130
+ )
131
+ }
132
+ />
133
+ </CapRow>
134
+
135
+ <CapRow className="creatives-mpush-message">
136
+ <CapColumn className="mpush-message-main">
137
+ <CapHeading type="h4" className="mpush-message">
138
+ <FormattedMessage {...messages.message} />
139
+ </CapHeading>
140
+ {getTagList(1)}
141
+ </CapColumn>
142
+ <CapInput
143
+ id={`mobile-push-message-name-input-${deviceType}`}
144
+ onChange={onMessageChange}
145
+ placeholder={formatMessage(messages.messagePlaceholder)}
146
+ value={content.message}
147
+ size="default"
148
+ isRequired
149
+ errorMessage={
150
+ messageError && (
151
+ <CapError className="mobile-push-template-message-error">
152
+ {messageError}
153
+ </CapError>
154
+ )
155
+ }
156
+ />
157
+ </CapRow>
158
+ <CapDivider />
159
+ <CapRow className="creatives-mpush-media">
160
+ <CapHeading type="h4" className="mpush-media-type">
161
+ <FormattedMessage {...messages.mediaType} />
162
+ </CapHeading>
163
+ <CapSelect.CapCustomSelect
164
+ width="100%"
165
+ className="margin-t-4"
166
+ options={MEDIA_TYPES_OPTIONS}
167
+ value={content.mediaType}
168
+ onChange={onMediaTypeChange}
169
+ />
170
+ <MediaUploaders
171
+ mediaType={content.mediaType}
172
+ {...mediaUploaderProps}
173
+ formatMessage={formatMessage}
174
+ />
175
+ </CapRow>
176
+ {content.mediaType !== "CAROUSEL" && (
177
+ <>
178
+ <CapDivider />
179
+ <CapRow className="creatives-mpush-actions">
180
+ <CapRow className="mpush-actions-main">
181
+ <CapHeading type="h4" className="mpush-actions">
182
+ <FormattedMessage {...messages.buttonsAndLinks} />
183
+ </CapHeading>
184
+ <CapLabel className="optional-text">
185
+ <FormattedMessage {...messages.optionalText} />
186
+ </CapLabel>
187
+ </CapRow>
188
+ <CapCheckbox
189
+ checked={content.actionOnClick}
190
+ onChange={onActionOnClickChange}
191
+ className="action-on-click-checkbox"
192
+ >
193
+ <FormattedMessage {...messages.actionOnClickBody} />
194
+ </CapCheckbox>
195
+ <CapRow>
196
+ <CapLabel className="action-description">
197
+ <FormattedMessage {...messages.actionDescription} />
198
+ </CapLabel>
199
+ </CapRow>
200
+ {content.actionOnClick && (
201
+ <CapRow style={{ display: "flex", justifyContent: "space-around" }}>
202
+ <CapColumn span={6}>
203
+ <CapHeading type="h4" className="buttons-heading">
204
+ <FormattedMessage {...messages.linkType} />
205
+ </CapHeading>
206
+ <CapSelect.CapCustomSelect
207
+ options={LINK_TYPE_OPTIONS}
208
+ value={content.linkType}
209
+ onChange={onLinkTypeChange}
210
+ key="mobile-push-link-type"
211
+ selectPlaceholder={formatMessage(messages.selectDeepLink)}
212
+ />
213
+ </CapColumn>
214
+ {content.linkType === DEEP_LINK && (
215
+ <CapColumn span={14}>
216
+ <CapHeading type="h4" className="buttons-heading">
217
+ {formatMessage(messages.deepLink)}
218
+ </CapHeading>
219
+ <CapSelect.CapCustomSelect
220
+ options={deepLink || []}
221
+ value={deepLinkValue}
222
+ onChange={onDeepLinkChange}
223
+ key="mobile-push-deep-link-type"
224
+ placeholder={formatMessage(messages.selectDeepLink)}
225
+ style={{ marginTop: "10px" }}
226
+ />
227
+ </CapColumn>
228
+ )}
229
+ {content.linkType === EXTERNAL_LINK && (
230
+ <CapColumn span={14}>
231
+ <CapHeading type="h4" className="buttons-heading">
232
+ {formatMessage(messages.externalLink)}
233
+ </CapHeading>
234
+ <CapInput
235
+ id="mobile-push-external-link-input"
236
+ onChange={onExternalLinkChange}
237
+ placeholder={formatMessage(messages.enterExternalLink)}
238
+ value={externalLinkValue}
239
+ size="default"
240
+ isRequired
241
+ errorMessage={
242
+ errors.externalLink && (
243
+ <CapError className="mobile-push-external-link-error">
244
+ {errors.externalLink}
245
+ </CapError>
246
+ )
247
+ }
248
+ />
249
+ </CapColumn>
250
+ )}
251
+ </CapRow>
252
+ )}
253
+ <CtaButtons {...ctaButtonProps} />
254
+ </CapRow>
255
+ </>
256
+ )}
257
+ </CapRow>
258
+ </>
259
+ );
260
+ };
261
+
262
+ PlatformContentFields.propTypes = {
263
+ deviceType: PropTypes.oneOf([ANDROID, IOS]).isRequired,
264
+ content: PropTypes.object.isRequired,
265
+ errors: PropTypes.shape({
266
+ title: PropTypes.string,
267
+ message: PropTypes.string,
268
+ externalLink: PropTypes.string,
269
+ }).isRequired,
270
+ handlers: PropTypes.object.isRequired,
271
+ tagListProps: PropTypes.object.isRequired,
272
+ mediaUploaderProps: PropTypes.object.isRequired,
273
+ ctaButtonProps: PropTypes.object.isRequired,
274
+ linkProps: PropTypes.object.isRequired,
275
+ sameContent: PropTypes.bool.isRequired,
276
+ formatMessage: PropTypes.func.isRequired,
277
+ };
278
+
279
+ export default PlatformContentFields;
@@ -0,0 +1,5 @@
1
+ import CtaButtons from './CtaButtons';
2
+ import MediaUploaders from './MediaUploaders';
3
+ import PlatformContentFields from './PlatformContentFields';
4
+
5
+ export { CtaButtons, MediaUploaders, PlatformContentFields };