@capillarytech/creatives-library 8.0.92 → 8.0.94

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 (31) hide show
  1. package/containers/Templates/constants.js +7 -0
  2. package/containers/Templates/index.js +43 -24
  3. package/package.json +1 -1
  4. package/services/api.js +1 -7
  5. package/services/tests/api.test.js +1 -5
  6. package/v2Components/CapImageUpload/index.js +10 -13
  7. package/v2Components/CapVideoUpload/index.js +9 -12
  8. package/v2Components/CapWhatsappCTA/messages.js +0 -4
  9. package/v2Components/TemplatePreview/_templatePreview.scss +0 -20
  10. package/v2Components/TemplatePreview/index.js +105 -160
  11. package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +6 -6
  12. package/v2Containers/CreativesContainer/index.js +5 -92
  13. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +0 -1
  14. package/v2Containers/Templates/_templates.scss +0 -47
  15. package/v2Containers/Templates/index.js +5 -55
  16. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +156 -177
  17. package/v2Containers/Whatsapp/constants.js +1 -87
  18. package/v2Containers/Whatsapp/index.js +189 -707
  19. package/v2Containers/Whatsapp/index.scss +1 -52
  20. package/v2Containers/Whatsapp/messages.js +2 -38
  21. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +91371 -30860
  22. package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +0 -6
  23. package/v2Containers/Whatsapp/tests/utils.test.js +1 -80
  24. package/v2Containers/Whatsapp/utils.js +0 -34
  25. package/v2Containers/mockdata.js +0 -2
  26. package/v2Components/CapWhatsappCarouselButton/constant.js +0 -56
  27. package/v2Components/CapWhatsappCarouselButton/index.js +0 -446
  28. package/v2Components/CapWhatsappCarouselButton/index.scss +0 -39
  29. package/v2Components/CapWhatsappCarouselButton/tests/index.test.js +0 -237
  30. package/v2Components/TemplatePreview/assets/images/empty_image_preview.svg +0 -4
  31. package/v2Components/TemplatePreview/assets/images/empty_video_preview.svg +0 -4
@@ -1,237 +0,0 @@
1
- import React from 'react';
2
- import { injectIntl } from 'react-intl';
3
- import '@testing-library/jest-dom';
4
- import { render, screen, fireEvent } from '../../../utils/test-utils';
5
- import { CapWhatsappCarouselButton } from '../index';
6
- import {
7
- INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
8
- INITIAL_CAROUSEL_URL_DATA
9
- } from '../constant';
10
- import { HOST_TWILIO } from "../../../v2Containers/Whatsapp/constants";
11
-
12
- const setCarouselData = jest.fn();
13
-
14
- const initializeComponent = (
15
- carouselData = [],
16
- isEditFlow = false,
17
- hostName = HOST_TWILIO,
18
- carouselIndex = 0
19
- ) => {
20
- const Component = injectIntl(CapWhatsappCarouselButton);
21
- return render(
22
- <Component
23
- carouselData={carouselData}
24
- setCarouselData={setCarouselData}
25
- carouselIndex={carouselIndex}
26
- hostName={hostName}
27
- isEditFlow={isEditFlow}
28
- tags={[]}
29
- injectedTags={{}}
30
- selectedOfferDetails={[]}
31
- />,
32
- );
33
- };
34
-
35
- describe('CapWhatsappCarouselButton', () => {
36
- beforeEach(() => {
37
- jest.clearAllMocks();
38
- });
39
-
40
- it('renders initial phone number button type', () => {
41
- initializeComponent([{
42
- buttons: [INITIAL_CAROUSEL_PHONE_NUMBER_DATA]
43
- }]);
44
-
45
- expect(screen.getByText('Button type')).toBeInTheDocument();
46
- expect(screen.getByText('Button text')).toBeInTheDocument();
47
- expect(screen.getAllByText('Phone number')).toHaveLength(2);
48
- expect(screen.getByRole('button', { name: /save/i })).toBeDisabled();
49
- });
50
-
51
- it('handles button text change', () => {
52
- initializeComponent([{
53
- buttons: [INITIAL_CAROUSEL_PHONE_NUMBER_DATA]
54
- }]);
55
-
56
- const buttonTextInput = screen.getByPlaceholderText('Enter button text');
57
- fireEvent.change(buttonTextInput, { target: { value: 'Call now' } });
58
-
59
- expect(setCarouselData).toHaveBeenCalledWith([{
60
- buttons: [{
61
- ...INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
62
- text: 'Call now'
63
- }]
64
- }]);
65
- });
66
-
67
- it('handles phone number change', () => {
68
- initializeComponent([{
69
- buttons: [INITIAL_CAROUSEL_PHONE_NUMBER_DATA]
70
- }]);
71
-
72
- const phoneInput = screen.getByPlaceholderText('Enter phone number');
73
- fireEvent.change(phoneInput, { target: { value: '9112345678' } });
74
- expect(screen.getByText('Phone')).toBeInTheDocument();
75
- });
76
-
77
- it('handles URL type button with static URL', () => {
78
- initializeComponent([{
79
- buttons: [INITIAL_CAROUSEL_URL_DATA]
80
- }]);
81
-
82
- const urlInput = screen.getByPlaceholderText('Enter website URL');
83
- fireEvent.change(urlInput, {
84
- target: { value: 'https://www.example.com' }
85
- });
86
-
87
- expect(setCarouselData).toHaveBeenCalled();
88
- });
89
-
90
- it('handles URL type button with dynamic URL', () => {
91
- const urlData = {
92
- ...INITIAL_CAROUSEL_URL_DATA,
93
- urlType: 'DYNAMIC_URL'
94
- };
95
-
96
- initializeComponent([{
97
- buttons: [urlData]
98
- }]);
99
-
100
- const urlInput = screen.getByPlaceholderText('Enter URL, variable is added by default');
101
- fireEvent.change(urlInput, {
102
- target: { value: 'https://www.example.com/{{1}}' }
103
- });
104
-
105
- expect(setCarouselData).toHaveBeenCalled();
106
- });
107
-
108
- it('shows saved button state', () => {
109
- initializeComponent([{
110
- buttons: [{
111
- ...INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
112
- text: 'Call us',
113
- phone_number: '9112345678',
114
- isSaved: true
115
- }]
116
- }]);
117
-
118
- expect(screen.getByText('Call us')).toBeInTheDocument();
119
- expect(screen.getByText('9112345678')).toBeInTheDocument();
120
- });
121
-
122
- it('handles add button click', () => {
123
- initializeComponent([{
124
- buttons: [{
125
- ...INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
126
- text: 'Call us',
127
- phone_number: '9112345678',
128
- isSaved: true
129
- }]
130
- }]);
131
-
132
- const addButton = screen.getByRole('button', { name: /add button/i });
133
- fireEvent.click(addButton);
134
-
135
- expect(setCarouselData).toHaveBeenCalled();
136
- });
137
-
138
- it('handles delete button click', () => {
139
- initializeComponent([{
140
- buttons: [
141
- {
142
- ...INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
143
- text: 'Call us',
144
- phone_number: '9112345678',
145
- isSaved: true
146
- },
147
- {
148
- ...INITIAL_CAROUSEL_URL_DATA,
149
- text: 'Visit us',
150
- url: 'https://example.com',
151
- isSaved: true
152
- }
153
- ]
154
- }]);
155
-
156
- const deleteButton = screen.getAllByRole('button', {
157
- class: 'ant-btn cap-button-v2 flat-btn whatsapp-carousel-delete-icon-btn ant-btn-flat'
158
- });
159
- fireEvent.click(deleteButton[0]);
160
-
161
- expect(setCarouselData).toHaveBeenCalledTimes(1);
162
- });
163
-
164
- // Additional test case for delete button disabled state
165
- it('delete button should be disabled when only one button exists', () => {
166
- initializeComponent([{
167
- buttons: [
168
- {
169
- ...INITIAL_CAROUSEL_PHONE_NUMBER_DATA,
170
- text: 'Call us',
171
- phone_number: '9112345678',
172
- isSaved: true
173
- }
174
- ]
175
- }]);
176
-
177
- const deleteButton = screen.getAllByRole('button', {
178
- class: 'ant-btn cap-button-v2 flat-btn whatsapp-carousel-delete-icon-btn ant-btn-flat'
179
- });
180
-
181
- expect(deleteButton[0]).toBeDisabled();
182
- });
183
-
184
- it('handles edit mode', () => {
185
- initializeComponent([{
186
- buttons: [{
187
- ...INITIAL_CAROUSEL_URL_DATA,
188
- text: 'Visit us',
189
- url: 'https://example.com/{{1}}',
190
- urlType: 'DYNAMIC_URL',
191
- isSaved: true,
192
- isEditFlow: true,
193
- }]
194
- }]);
195
-
196
- expect(screen.getByText('Visit us')).toBeInTheDocument();
197
- expect(screen.getByText('https://example.com/{{1}}')).toBeInTheDocument();
198
- });
199
-
200
- it('validates invalid button text', () => {
201
- initializeComponent([{
202
- buttons: [INITIAL_CAROUSEL_PHONE_NUMBER_DATA]
203
- }]);
204
-
205
- const buttonTextInput = screen.getByPlaceholderText('Enter button text');
206
- fireEvent.change(buttonTextInput, { target: { value: '!@#$' } });
207
-
208
- expect(setCarouselData).toHaveBeenCalledWith(expect.arrayContaining([
209
- expect.objectContaining({
210
- buttons: expect.arrayContaining([
211
- expect.objectContaining({
212
- textError: expect.any(String)
213
- })
214
- ])
215
- })
216
- ]));
217
- });
218
-
219
- it('validates invalid URL', () => {
220
- initializeComponent([{
221
- buttons: [INITIAL_CAROUSEL_URL_DATA]
222
- }]);
223
-
224
- const urlInput = screen.getByPlaceholderText('Enter website URL');
225
- fireEvent.change(urlInput, { target: { value: 'invalid-url' } });
226
-
227
- expect(setCarouselData).toHaveBeenCalledWith(expect.arrayContaining([
228
- expect.objectContaining({
229
- buttons: expect.arrayContaining([
230
- expect.objectContaining({
231
- urlError: expect.any(String)
232
- })
233
- ])
234
- })
235
- ]));
236
- });
237
- });
@@ -1,4 +0,0 @@
1
- <svg width="258" height="140" viewBox="0 0 258 140" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="258" height="140" rx="4" fill="#F4F5F7"/>
3
- <path d="M122 79C121.45 79 120.979 78.8042 120.588 78.4125C120.196 78.0208 120 77.55 120 77V63C120 62.45 120.196 61.9792 120.588 61.5875C120.979 61.1958 121.45 61 122 61H136C136.55 61 137.021 61.1958 137.413 61.5875C137.804 61.9792 138 62.45 138 63V77C138 77.55 137.804 78.0208 137.413 78.4125C137.021 78.8042 136.55 79 136 79H122ZM122 77H136V63H122V77ZM124 75H134C134.2 75 134.35 74.9083 134.45 74.725C134.55 74.5417 134.533 74.3667 134.4 74.2L131.65 70.525C131.55 70.3917 131.417 70.325 131.25 70.325C131.083 70.325 130.95 70.3917 130.85 70.525L128.25 74L126.4 71.525C126.3 71.3917 126.167 71.325 126 71.325C125.833 71.325 125.7 71.3917 125.6 71.525L123.6 74.2C123.467 74.3667 123.45 74.5417 123.55 74.725C123.65 74.9083 123.8 75 124 75Z" fill="#5E6C84"/>
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg width="258" height="140" viewBox="0 0 258 140" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="258" height="140" rx="4" fill="#F4F5F7"/>
3
- <path d="M123.025 74H130.975C131.192 74 131.346 73.9083 131.438 73.725C131.529 73.5417 131.508 73.3667 131.375 73.2L128.95 70.025C128.9 69.9583 128.842 69.9083 128.775 69.875C128.708 69.8417 128.633 69.825 128.55 69.825C128.467 69.825 128.392 69.8417 128.325 69.875C128.258 69.9083 128.2 69.9583 128.15 70.025L126.65 71.975C126.6 72.0417 126.542 72.0917 126.475 72.125C126.408 72.1583 126.333 72.175 126.25 72.175C126.167 72.175 126.092 72.1583 126.025 72.125C125.958 72.0917 125.9 72.0417 125.85 71.975L125.1 71C125.05 70.9333 124.992 70.8875 124.925 70.8625C124.858 70.8375 124.783 70.825 124.7 70.825C124.617 70.825 124.542 70.8375 124.475 70.8625C124.408 70.8875 124.35 70.9333 124.3 71L122.625 73.2C122.492 73.3667 122.471 73.5417 122.562 73.725C122.654 73.9083 122.808 74 123.025 74ZM121 78C120.45 78 119.979 77.8042 119.588 77.4125C119.196 77.0208 119 76.55 119 76V64C119 63.45 119.196 62.9792 119.588 62.5875C119.979 62.1958 120.45 62 121 62H133C133.55 62 134.021 62.1958 134.413 62.5875C134.804 62.9792 135 63.45 135 64V68.5L138.15 65.35C138.317 65.1833 138.5 65.1417 138.7 65.225C138.9 65.3083 139 65.4667 139 65.7V74.3C139 74.5333 138.9 74.6917 138.7 74.775C138.5 74.8583 138.317 74.8167 138.15 74.65L135 71.5V76C135 76.55 134.804 77.0208 134.413 77.4125C134.021 77.8042 133.55 78 133 78H121ZM121 76H133V64H121V76Z" fill="#5E6C84"/>
4
- </svg>