@capillarytech/creatives-library 7.18.0-beta.0 → 8.0.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/app.js +27 -54
- package/assets/Line_Preview_English.svg +24 -0
- package/assets/Line_Preview_Japanese.svg +24 -0
- package/components/CapTagList/index.js +2 -2
- package/components/CapTagList/messages.js +8 -0
- package/components/Ckeditor/index.js +4 -2
- package/components/Ckeditor/style.scss +3 -0
- package/components/FormBuilder/_formBuilder.scss +4 -16
- package/components/FormBuilder/index.js +4 -3
- package/components/FormBuilder/messages.js +4 -0
- package/components/Sidebar/index.js +4 -4
- package/config/path.js +1 -1
- package/containers/App/constants.js +95 -0
- package/containers/App/index.js +52 -0
- package/containers/App/sagas.js +8 -3
- package/containers/Assets/Gallery/index.js +17 -3
- package/containers/Assets/Gallery/messages.js +4 -0
- package/containers/Assets/Gallery/sagas.js +14 -14
- package/containers/Cap/index.js +84 -50
- package/containers/Cap/sagas.js +20 -12
- package/containers/Cap/selectors.js +13 -13
- package/containers/Cap/tests/__snapshots__/index.test.js.snap +1 -1
- package/containers/Cap/tests/saga.test.js +81 -1
- package/containers/Dashboard/index.js +34 -17
- package/containers/Dashboard/sagas.js +7 -1
- package/containers/Ebill/index.js +16 -3
- package/containers/Ebill/sagas.js +18 -11
- package/containers/Email/index.js +20 -3
- package/containers/Email/sagas.js +34 -23
- package/containers/LanguageProvider/index.js +49 -31
- package/containers/LanguageProvider/tests/index.test.js +5 -3
- package/containers/Line/Create/index.js +15 -2
- package/containers/Line/Create/sagas.js +26 -17
- package/containers/Line/Edit/sagas.js +12 -13
- package/containers/Login/index.js +36 -11
- package/containers/MobilePush/Create/index.js +17 -2
- package/containers/MobilePush/Create/sagas.js +18 -12
- package/containers/MobilePush/Edit/index.js +20 -3
- package/containers/MobilePush/Edit/sagas.js +30 -20
- package/containers/Sms/Create/index.js +15 -2
- package/containers/Sms/Create/sagas.js +8 -6
- package/containers/Sms/Edit/index.js +15 -3
- package/containers/Sms/Edit/sagas.js +14 -8
- package/containers/TagList/constants.js +23 -0
- package/containers/Templates/actions.js +0 -5
- package/containers/Templates/index.js +47 -14
- package/containers/Templates/sagas.js +20 -23
- package/containers/WeChat/MapTemplates/index.js +19 -2
- package/containers/WeChat/MapTemplates/sagas.js +17 -17
- package/containers/WeChat/RichmediaTemplates/Create/index.js +18 -2
- package/containers/WeChat/RichmediaTemplates/Create/sagas.js +11 -8
- package/containers/WeChat/RichmediaTemplates/Edit/index.js +21 -2
- package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +9 -5
- package/entry.js +2 -0
- package/global-styles.js +2 -2
- package/gtm/eventDefinitionsMap.js +1 -1
- package/helpers/intl-enzym-test-helpers.js +1 -1
- package/hoc/withReactRouterV3Compatibility.js +66 -0
- package/index.js +12 -0
- package/initialReducer.js +32 -0
- package/initialState.js +1 -0
- package/mfe-exposed-components.js +8 -0
- package/package.json +16 -11
- package/routes.js +206 -749
- package/services/api.js +62 -17
- package/services/tests/api.test.js +248 -1
- package/styles/components/navigation/_leftnav.scss +13 -0
- package/styles/containers/layout/_layoutPage.scss +14 -0
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +21 -16
- package/tests/store.test.js +5 -3
- package/translations/en.json +1 -9
- package/translations/ja-JP.json +0 -8
- package/translations/zh.json +0 -8
- package/utils/authWrapper.js +43 -17
- package/utils/cdnTransformation.js +73 -44
- package/utils/checkStore.js +21 -0
- package/utils/common.js +198 -8
- package/utils/commonUtils.js +17 -1
- package/utils/customAuthWrapper.js +62 -0
- package/utils/customConnectedAuthWrapper.js +26 -0
- package/utils/history.js +8 -0
- package/utils/injectReducer.js +2 -0
- package/utils/injectSaga.js +2 -0
- package/utils/tagValidations.js +2 -2
- package/utils/tests/cdnTransformation.test.js +6 -4
- package/utils/tests/common.mockdata.js +623 -0
- package/utils/tests/common.test.js +273 -0
- package/utils/tests/commonUtil.test.js +79 -0
- package/v2Components/CapDeviceContent/index.js +330 -0
- package/v2Components/CapDeviceContent/index.scss +115 -0
- package/v2Components/CapDeviceContent/messages.js +94 -0
- package/v2Components/CapDeviceContent/tests/index.test.js +89 -0
- package/v2Components/CapImageUpload/constants.js +6 -0
- package/v2Components/CapImageUpload/index.js +23 -15
- package/v2Components/CapImageUpload/index.scss +6 -0
- package/v2Components/CapImageUpload/messages.js +7 -7
- package/v2Components/CapInAppCTA/constants.js +25 -0
- package/v2Components/CapInAppCTA/index.js +279 -0
- package/v2Components/CapInAppCTA/index.scss +99 -0
- package/v2Components/CapInAppCTA/messages.js +85 -0
- package/v2Components/CapTagList/index.js +149 -26
- package/v2Components/CapTagList/messages.js +12 -0
- package/v2Components/CapTagList/style.scss +26 -0
- package/v2Components/CapVideoUpload/constants.js +6 -0
- package/v2Components/CapVideoUpload/index.js +48 -22
- package/v2Components/CapVideoUpload/index.scss +4 -2
- package/v2Components/CapVideoUpload/messages.js +10 -6
- package/v2Components/CapWhatsappQuickReply/index.js +255 -0
- package/v2Components/CapWhatsappQuickReply/index.scss +54 -0
- package/v2Components/CapWhatsappQuickReply/messages.js +32 -0
- package/v2Components/Ckeditor/index.js +56 -22
- package/v2Components/Ckeditor/style.scss +3 -0
- package/v2Components/Ckeditor/tests/index.test.js +44 -0
- package/v2Components/CmsTemplatesComponent/index.js +1 -0
- package/v2Components/CmsTemplatesComponent/messages.js +4 -0
- package/v2Components/EmailMobilePreview/index.js +4 -2
- package/v2Components/EmailPreviewV2/index.js +6 -4
- package/v2Components/EmailPreviewV2/tests/__snapshots__/index.test.js.snap +0 -3
- package/v2Components/FormBuilder/_formBuilder.scss +1 -0
- package/v2Components/FormBuilder/constants.js +1 -1
- package/v2Components/FormBuilder/index.js +111 -29
- package/v2Components/FormBuilder/messages.js +4 -0
- package/v2Components/FormBuilder/tests/index.test.js +5 -2
- package/v2Components/MobilePushPreviewV2/index.js +57 -22
- package/v2Components/NavigationBar/constants.js +1 -0
- package/v2Components/NavigationBar/index.js +84 -113
- package/v2Components/NavigationBar/messages.js +8 -0
- package/v2Components/NavigationBar/style.js +9 -0
- package/v2Components/NavigationBar/tests/index.test.js +32 -9
- package/v2Components/NavigationBar/tests/mockData.js +1 -0
- package/v2Components/NewCallTask/tests/index.test.js +5 -3
- package/v2Components/Pagination/index.js +2 -1
- package/v2Components/RenderRoute/RenderRoute.js +11 -0
- package/v2Components/RenderRoute/index.js +1 -0
- package/v2Components/TemplatePreview/_templatePreview.scss +535 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_bottom.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_full.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_modal.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_top.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_bottom.svg +6 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_full.svg +18 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_modal.svg +7 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_top.svg +13 -0
- package/v2Components/TemplatePreview/index.js +745 -362
- package/v2Components/TemplatePreview/messages.js +8 -0
- package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +47 -14
- package/v2Components/TemplatePreview/tests/index.test.js +9 -0
- package/v2Components/WhatsappStatusContainer/_whatsappStatusContainer.scss +8 -1
- package/v2Containers/App/constants.js +12 -6
- package/v2Containers/App/sagas.js +0 -1
- package/v2Containers/Assets/Gallery/index.js +1 -0
- package/v2Containers/Assets/Gallery/sagas.js +15 -14
- package/v2Containers/BeeEditor/index.js +3 -1
- package/v2Containers/BeeEditor/sagas.js +8 -5
- package/v2Containers/CallTask/sagas.js +7 -1
- package/v2Containers/Cap/actions.js +4 -0
- package/v2Containers/Cap/constants.js +20 -1
- package/v2Containers/Cap/index.js +116 -17
- package/v2Containers/Cap/messages.js +8 -0
- package/v2Containers/Cap/reducer.js +18 -3
- package/v2Containers/Cap/sagas.js +64 -9
- package/v2Containers/Cap/selectors.js +27 -13
- package/v2Containers/Cap/tests/Cap.test.js +164 -0
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +2 -1
- package/v2Containers/Cap/tests/actions.test.js +11 -0
- package/v2Containers/Cap/tests/reducer.test.js +59 -0
- package/v2Containers/Cap/tests/saga.test.js +181 -2
- package/v2Containers/Cap/tests/selectors.test.js +42 -18
- package/v2Containers/CapFacebookPreview/sagas.js +7 -5
- package/v2Containers/CreativesContainer/SlideBoxContent.js +86 -4
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +4 -3
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +30 -14
- package/v2Containers/CreativesContainer/constants.js +5 -0
- package/v2Containers/CreativesContainer/index.js +157 -38
- package/v2Containers/CreativesContainer/index.scss +12 -0
- package/v2Containers/CreativesContainer/messages.js +33 -1
- package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +11 -0
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +5 -2
- package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +7 -1
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +227 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +73 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +80 -0
- package/v2Containers/CreativesContainer/tests/index.test.js +16 -0
- package/v2Containers/Ebill/sagas.js +3 -10
- package/v2Containers/Email/index.js +38 -19
- package/v2Containers/Email/initialSchema.js +1 -1
- package/v2Containers/Email/sagas.js +22 -26
- package/v2Containers/EmailWrapper/index.js +18 -8
- package/v2Containers/FTP/index.js +2 -2
- package/v2Containers/FTP/sagas.js +3 -4
- package/v2Containers/Facebook/sagas.js +26 -17
- package/v2Containers/InApp/actions.js +64 -0
- package/v2Containers/InApp/constants.js +160 -0
- package/v2Containers/InApp/index.js +792 -0
- package/v2Containers/InApp/index.scss +50 -0
- package/v2Containers/InApp/messages.js +114 -0
- package/v2Containers/InApp/reducer.js +109 -0
- package/v2Containers/InApp/sagas.js +151 -0
- package/v2Containers/InApp/selectors.js +12 -0
- package/v2Containers/InApp/tests/action.test.js +53 -0
- package/v2Containers/InApp/tests/index.test.js +165 -0
- package/v2Containers/InApp/tests/mockData.js +898 -0
- package/v2Containers/InApp/tests/reducer.test.js +177 -0
- package/v2Containers/InApp/tests/sagas.test.js +391 -0
- package/v2Containers/InApp/utils.js +12 -0
- package/v2Containers/LanguageProvider/index.js +17 -5
- package/v2Containers/LanguageProvider/reducer.js +3 -2
- package/v2Containers/LanguageProvider/sagas.js +7 -8
- package/v2Containers/LanguageProvider/selectors.js +2 -1
- package/v2Containers/LanguageProvider/tests/index.test.js +5 -2
- package/v2Containers/LanguageProvider/tests/reducer.test.js +6 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +28 -16
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -2
- package/v2Containers/Line/Container/ImageCarousel/tests/content.test.js +5 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/index.test.js +5 -3
- package/v2Containers/Line/Container/ImageMap/index.js +1 -1
- package/v2Containers/Line/Container/Text/index.js +16 -1
- package/v2Containers/Line/Container/Video/index.js +2 -1
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +18134 -107
- package/v2Containers/Line/Container/Wrapper/tests/index.test.js +5 -3
- package/v2Containers/Line/Container/Wrapper/utils.js +1 -1
- package/v2Containers/Line/Container/index.js +4 -0
- package/v2Containers/Line/Container/sagas.js +30 -20
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +123 -81
- package/v2Containers/Line/Container/tests/index.test.js +5 -2
- package/v2Containers/Login/index.js +1 -2
- package/v2Containers/MobilePush/Create/index.js +40 -17
- package/v2Containers/MobilePush/Create/sagas.js +18 -12
- package/v2Containers/MobilePush/Edit/index.js +16 -7
- package/v2Containers/MobilePush/Edit/sagas.js +30 -20
- package/v2Containers/MobilepushWrapper/index.js +3 -0
- package/v2Containers/Rcs/sagas.js +14 -14
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +123 -87
- package/v2Containers/Rcs/tests/index.test.js +5 -3
- package/v2Containers/Sms/Create/sagas.js +10 -6
- package/v2Containers/Sms/Edit/sagas.js +14 -8
- package/v2Containers/SmsTrai/Create/sagas.js +9 -10
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +4 -4
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +12 -8
- package/v2Containers/SmsTrai/Edit/tests/index.test.js +5 -3
- package/v2Containers/TagList/_tagList.scss +18 -0
- package/v2Containers/TagList/index.js +81 -42
- package/v2Containers/TagList/tests/TagList.test.js +6 -7
- package/v2Containers/TagList/tests/mockdata.js +10 -166
- package/v2Containers/TagList/tests/utils.test.js +17 -0
- package/v2Containers/TagList/utils.js +15 -0
- package/v2Containers/Templates/_templates.scss +60 -5
- package/v2Containers/Templates/actions.js +6 -5
- package/v2Containers/Templates/constants.js +2 -1
- package/v2Containers/Templates/index.js +576 -181
- package/v2Containers/Templates/messages.js +52 -8
- package/v2Containers/Templates/reducer.js +3 -1
- package/v2Containers/Templates/sagas.js +54 -38
- package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +669 -43
- package/v2Containers/Templates/tests/actions.test.js +19 -0
- package/v2Containers/Templates/tests/index.test.js +53 -1
- package/v2Containers/Templates/tests/mockData.js +45 -1
- package/v2Containers/Templates/tests/reducer.test.js +50 -0
- package/v2Containers/Templates/tests/sagas.test.js +116 -3
- package/v2Containers/Templates/tests/selector.test.js +17 -0
- package/v2Containers/TemplatesV2/index.js +180 -8
- package/v2Containers/TemplatesV2/messages.js +8 -0
- package/v2Containers/TemplatesV2/tests/index.test.js +104 -0
- package/v2Containers/TemplatesV2/tests/mockData.js +685 -0
- package/v2Containers/Viber/constants.js +58 -0
- package/v2Containers/Viber/index.js +404 -421
- package/v2Containers/Viber/index.scss +107 -0
- package/v2Containers/Viber/messages.js +70 -2
- package/v2Containers/Viber/sagas.js +22 -14
- package/v2Containers/Viber/style.js +20 -0
- package/v2Containers/Viber/tests/index.test.js +299 -0
- package/v2Containers/Viber/tests/mockData.js +134 -0
- package/v2Containers/WeChat/MapTemplates/sagas.js +22 -14
- package/v2Containers/WeChat/RichmediaTemplates/Create/sagas.js +12 -11
- package/v2Containers/WeChat/RichmediaTemplates/Edit/sagas.js +9 -5
- package/v2Containers/Whatsapp/actions.js +16 -0
- package/v2Containers/Whatsapp/constants.js +24 -0
- package/v2Containers/Whatsapp/index.js +892 -222
- package/v2Containers/Whatsapp/index.scss +91 -1
- package/v2Containers/Whatsapp/messages.js +98 -1
- package/v2Containers/Whatsapp/reducer.js +19 -0
- package/v2Containers/Whatsapp/sagas.js +67 -12
- package/v2Containers/Whatsapp/styles.scss +35 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34983 -24886
- package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +12 -0
- package/v2Containers/Whatsapp/tests/actions.test.js +21 -0
- package/v2Containers/Whatsapp/tests/index.test.js +17 -4
- package/v2Containers/Whatsapp/tests/mockData.js +77 -0
- package/v2Containers/Whatsapp/tests/reducer.test.js +67 -0
- package/v2Containers/Whatsapp/tests/saga.test.js +201 -0
- package/v2Containers/Whatsapp/tests/utils.test.js +18 -0
- package/v2Containers/Whatsapp/utils.js +65 -4
- package/v2Containers/Zalo/actions.js +24 -0
- package/v2Containers/Zalo/constants.js +59 -0
- package/v2Containers/Zalo/index.js +548 -0
- package/v2Containers/Zalo/index.scss +75 -0
- package/v2Containers/Zalo/messages.js +86 -0
- package/v2Containers/Zalo/reducer.js +63 -0
- package/v2Containers/Zalo/saga.js +45 -0
- package/v2Containers/Zalo/selectors.js +19 -0
- package/v2Containers/Zalo/tests/actions.test.js +26 -0
- package/v2Containers/Zalo/tests/index.test.js +149 -0
- package/v2Containers/Zalo/tests/mockData.js +11527 -0
- package/v2Containers/Zalo/tests/reducer.test.js +96 -0
- package/v2Containers/Zalo/tests/saga.test.js +118 -0
- package/v2Containers/Zalo/tests/selector.test.js +51 -0
- package/v2Containers/mockdata.js +1531 -680
- package/containers/TestPage/constants.js +0 -7
- package/containers/TestPage/index.js +0 -31
- package/containers/TestPage/messages.js +0 -13
- package/containers/TestPage/reducer.js +0 -21
- package/containers/TestPage/sagas.js +0 -11
- package/containers/Testv2/actions.js +0 -15
- package/containers/Testv2/constants.js +0 -7
- package/containers/Testv2/index.js +0 -47
- package/containers/Testv2/messages.js +0 -21
- package/containers/Testv2/reducer.js +0 -23
- package/containers/Testv2/sagas.js +0 -11
- package/containers/Testv2/selectors.js +0 -25
- package/reducers.js +0 -73
- package/store.js +0 -61
- package/utils/tests/asyncInjectors.test.js +0 -173
- package/v2Containers/TestPage/constants.js +0 -7
- package/v2Containers/TestPage/index.js +0 -31
- package/v2Containers/TestPage/messages.js +0 -13
- package/v2Containers/TestPage/reducer.js +0 -21
- package/v2Containers/TestPage/sagas.js +0 -11
- package/v2Containers/Testv2/actions.js +0 -15
- package/v2Containers/Testv2/constants.js +0 -7
- package/v2Containers/Testv2/index.js +0 -47
- package/v2Containers/Testv2/messages.js +0 -21
- package/v2Containers/Testv2/reducer.js +0 -23
- package/v2Containers/Testv2/sagas.js +0 -11
- package/v2Containers/Testv2/selectors.js +0 -25
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Bugsnag from '@bugsnag/js';
|
|
3
|
+
import { FormattedMessage } from 'react-intl';
|
|
4
|
+
import "@testing-library/jest-dom";
|
|
5
|
+
import {
|
|
6
|
+
filterTags,
|
|
7
|
+
getTreeStructuredTags,
|
|
8
|
+
handleInjectedData,
|
|
9
|
+
intlKeyGenerator,
|
|
10
|
+
bytes2Size,
|
|
11
|
+
getUserNameById,
|
|
12
|
+
iframePreviewAdjustWidth,
|
|
13
|
+
getDecodedFileName
|
|
14
|
+
} from "../common";
|
|
15
|
+
import * as mockdata from "./common.mockdata";
|
|
16
|
+
|
|
17
|
+
describe("getTreeStructuredTags test", () => {
|
|
18
|
+
it("test for getTreeStructuredTags when tagsList is not empty", () => {
|
|
19
|
+
expect(getTreeStructuredTags({ tagsList: mockdata.tagsList })).toEqual(mockdata.output1);
|
|
20
|
+
});
|
|
21
|
+
it("test for getTreeStructuredTags when tagsList is empty", () => {
|
|
22
|
+
expect(getTreeStructuredTags({ tagsList: [] })).toEqual([]);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("test for getTreeStructuredTags when incentive attached is BADGES", () => {
|
|
26
|
+
expect(getTreeStructuredTags({ tagsList: mockdata.badgesTags, offerDetails: mockdata.offer })).toEqual(mockdata.expectedOffer);
|
|
27
|
+
});
|
|
28
|
+
it("test for filterTags", () => {
|
|
29
|
+
expect(filterTags(mockdata.tagsToFilter, mockdata.tagsList)).toEqual([mockdata.tagsList[1]]);
|
|
30
|
+
});
|
|
31
|
+
it("test for filterTags when tagsToFilter and tagsList is empty", () => {
|
|
32
|
+
expect(filterTags([], [])).toEqual([]);
|
|
33
|
+
});
|
|
34
|
+
it("test for getTreeStructuredTags when incentive attached is offer", () => {
|
|
35
|
+
expect(getTreeStructuredTags({ tagsList: mockdata.OfferTag, offerDetails: [{ id: '12', couponName: 'mac' }] })).toEqual(mockdata.offerOutput);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("getUserNameById test", () => {
|
|
40
|
+
it("test for username is available or not", () => {
|
|
41
|
+
const data = [
|
|
42
|
+
{
|
|
43
|
+
userId: 1,
|
|
44
|
+
firstName: 'test1',
|
|
45
|
+
lastName: 'test2',
|
|
46
|
+
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
userId: 2,
|
|
50
|
+
firstName: 'test3',
|
|
51
|
+
lastName: 'test4',
|
|
52
|
+
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
const expected = 'test1 test2';
|
|
56
|
+
expect(getUserNameById(1, data)).toEqual(expected);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe("handleInjectedData", () => {
|
|
61
|
+
it("replaces name with intl key for top level tag", () => {
|
|
62
|
+
const data = {
|
|
63
|
+
tag1: {
|
|
64
|
+
name: "Registration Fields",
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const result = handleInjectedData(data, "scope");
|
|
69
|
+
const intlKey = intlKeyGenerator("scope");
|
|
70
|
+
expect(intlKey).toEqual('scope');
|
|
71
|
+
expect(result.tag1.name).toEqual(<FormattedMessage defaultMessage="Registration Fields" id="scope.registration_fields" values={{}} />);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("adds tagType for Registration custom fields", () => {
|
|
75
|
+
const data = {
|
|
76
|
+
tag1: {
|
|
77
|
+
name: "Registration custom fields",
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const result = handleInjectedData(data, "scope");
|
|
82
|
+
const intlKey = intlKeyGenerator();
|
|
83
|
+
expect(intlKey).toEqual('');
|
|
84
|
+
expect(result.tag1.name).toEqual(
|
|
85
|
+
<FormattedMessage defaultMessage="Registration custom fields" id="scope.registration_custom_fields_name.CustomTagMessage" values={{}} />
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("adds tagType for Customer extended fields fields", () => {
|
|
90
|
+
const data = {
|
|
91
|
+
tag1: {
|
|
92
|
+
name: "Customer extended fields",
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const result = handleInjectedData(data, "scope");
|
|
97
|
+
|
|
98
|
+
expect(result.tag1.name).toEqual(
|
|
99
|
+
<FormattedMessage defaultMessage="Customer extended fields" id="scope.customer_extended_fields_name.ExtendedTagMessage" values={{}} />
|
|
100
|
+
);
|
|
101
|
+
});
|
|
102
|
+
it("adds tagType for Customer extended fields fields", () => {
|
|
103
|
+
const data = {
|
|
104
|
+
tag1: {
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const result = handleInjectedData(data, "scope");
|
|
109
|
+
|
|
110
|
+
expect(result.tag1.name).toEqual(undefined);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it("adds tagType for Customer with extended fields fields", () => {
|
|
114
|
+
const data = {
|
|
115
|
+
tag1: {
|
|
116
|
+
name: "mahaRaja",
|
|
117
|
+
subtag1: {
|
|
118
|
+
name: "First Name",
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const result = handleInjectedData(data, "scope");
|
|
124
|
+
|
|
125
|
+
expect(result.tag1.subtag1.name).toEqual("First Name");
|
|
126
|
+
});
|
|
127
|
+
it("replaces subtag name with intl key", () => {
|
|
128
|
+
const data = {
|
|
129
|
+
tag1: {
|
|
130
|
+
subtags: {
|
|
131
|
+
subtag1: {
|
|
132
|
+
name: "First Name",
|
|
133
|
+
hasOwnProperty: jest.fn(),
|
|
134
|
+
},
|
|
135
|
+
hasOwnProperty: jest.fn(),
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const result = handleInjectedData(data, "scope");
|
|
141
|
+
|
|
142
|
+
expect(result.tag1.subtags.subtag1.name).toEqual("First Name");
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("replaces subtag name with intl key test", () => {
|
|
146
|
+
const data = {
|
|
147
|
+
tag1: {
|
|
148
|
+
subtags: {
|
|
149
|
+
subtag1: {
|
|
150
|
+
name: "First Name",
|
|
151
|
+
hasOwnProperty: jest.fn(),
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
hasOwnProperty: jest.fn(),
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const result = handleInjectedData(data, "scope");
|
|
159
|
+
|
|
160
|
+
expect(result.tag1.subtags.subtag1.name).toEqual("First Name");
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it("replaces subtag desc with intl key", () => {
|
|
164
|
+
const data = {
|
|
165
|
+
tag1: {
|
|
166
|
+
subtags: {
|
|
167
|
+
subtag1: {
|
|
168
|
+
desc: "Enter your first name",
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const result = handleInjectedData(data, "scope");
|
|
175
|
+
|
|
176
|
+
expect(result.tag1.subtags.subtag1.desc).toEqual(
|
|
177
|
+
<FormattedMessage defaultMessage="Enter your first name" id="scope.enter_your_first_name" values={{}} />
|
|
178
|
+
);
|
|
179
|
+
});
|
|
180
|
+
it("replaces subtag name desc with intl key", () => {
|
|
181
|
+
const data = {
|
|
182
|
+
tag1: {
|
|
183
|
+
subtags: {
|
|
184
|
+
subtag1: {
|
|
185
|
+
name: "mahaRaja",
|
|
186
|
+
desc: "Enter your first name",
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const result = handleInjectedData(data, "scope");
|
|
193
|
+
|
|
194
|
+
expect(result.tag1.subtags.subtag1.desc).toEqual(
|
|
195
|
+
<FormattedMessage defaultMessage="Enter your first name" id="scope.enter_your_first_name" values={{}} />
|
|
196
|
+
);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
describe('bytes2Size', () => {
|
|
201
|
+
it('should convert bytes to the correct size string', () => {
|
|
202
|
+
// Test cases with different byte values
|
|
203
|
+
expect(bytes2Size(0)).toBe('0 Bytes');
|
|
204
|
+
expect(bytes2Size(1023)).toBe('1023 Bytes');
|
|
205
|
+
expect(bytes2Size(1024)).toBe('1 KB');
|
|
206
|
+
expect(bytes2Size(1048576)).toBe('1 MB');
|
|
207
|
+
expect(bytes2Size(1099511627776)).toBe('1 TB');
|
|
208
|
+
expect(bytes2Size(1125899906842624)).toBe('1 PB');
|
|
209
|
+
expect(bytes2Size(1152921504606846976)).toBe('1 EB');
|
|
210
|
+
expect(bytes2Size(1180591620717411303424)).toBe('1 ZB');
|
|
211
|
+
expect(bytes2Size(Number.MAX_SAFE_INTEGER)).toBe('8 PB'); // Test with the maximum safe integer value
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('should handle negative decimals', () => {
|
|
215
|
+
// Test with negative decimal values
|
|
216
|
+
expect(bytes2Size(1024, -1)).toBe('1 KB'); // Decimals < 0 should round to 0
|
|
217
|
+
expect(bytes2Size(1024, -2)).toBe('1 KB');
|
|
218
|
+
expect(bytes2Size(1024, -3)).toBe('1 KB');
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
describe('iframeAdjustWidth', () => {
|
|
223
|
+
it("should Add the width in iframe image", () => {
|
|
224
|
+
const data = [
|
|
225
|
+
<head>
|
|
226
|
+
<meta httpEquiv="Content-Type" content="text/html; charset=utf-8">
|
|
227
|
+
<meta name="viewport" content="width=device-width">
|
|
228
|
+
</meta></meta></head>,
|
|
229
|
+
|
|
230
|
+
];
|
|
231
|
+
expect(iframePreviewAdjustWidth(data)).toBe("<html><head></head><body>[object Object]</body></html>");
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
describe('getDecodedFileName function', () => {
|
|
236
|
+
it('Returns an empty string when templateName is undefined', () => {
|
|
237
|
+
expect(getDecodedFileName()).toEqual('');
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it('Returns the decoded filename from encoded filename', () => {
|
|
241
|
+
expect(getDecodedFileName('%24Test.jpeg')).toEqual('$Test.jpeg');
|
|
242
|
+
expect(getDecodedFileName('cap%24.logo.%23.jpg')).toEqual('cap$.logo.#.jpg');
|
|
243
|
+
expect(getDecodedFileName("%24L_i%40n%26e__%60AL%60L%2BI'ma_g__e%2Bco_pyAI____Copy____Copy_wek1SeS0.jpg")).toEqual("$L_i@n&e__`AL`L+I'ma_g__e+co_pyAI____Copy____Copy_wek1SeS0.jpg");
|
|
244
|
+
expect(getDecodedFileName('test.jpeg')).toEqual('test.jpeg');
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it('Returns the original filename when decoding fails due to URIError', () => {
|
|
248
|
+
const fileName = '@Test%ZZ.jpeg';
|
|
249
|
+
expect(getDecodedFileName(fileName)).toEqual(fileName);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it('Returns the original filename and notifies Bugsnag for other decoding errors', () => {
|
|
253
|
+
// Mocking Bugsnag methods for testing
|
|
254
|
+
const originalLeaveBreadcrumb = Bugsnag.leaveBreadcrumb;
|
|
255
|
+
const originalNotify = Bugsnag.notify;
|
|
256
|
+
Bugsnag.leaveBreadcrumb = jest.fn();
|
|
257
|
+
Bugsnag.notify = jest.fn((error, callback) => {
|
|
258
|
+
const event = {};
|
|
259
|
+
callback(event);
|
|
260
|
+
expect(event.severity).toEqual("error");
|
|
261
|
+
});
|
|
262
|
+
const fileName = '@Test%20ZZ.jpg';
|
|
263
|
+
const error = new Error('Some other decoding error');
|
|
264
|
+
// Mocking decodeURIComponent to throw the error
|
|
265
|
+
global.decodeURIComponent = jest.fn(() => { throw error; });
|
|
266
|
+
|
|
267
|
+
expect(getDecodedFileName(fileName)).toEqual(fileName);
|
|
268
|
+
expect(Bugsnag.notify).toHaveBeenCalled();
|
|
269
|
+
// Restoring original Bugsnag methods
|
|
270
|
+
Bugsnag.leaveBreadcrumb = originalLeaveBreadcrumb;
|
|
271
|
+
Bugsnag.notify = originalNotify;
|
|
272
|
+
});
|
|
273
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { getTreeStructuredTags } from "../common";
|
|
3
|
+
import * as mockdata from "./common.mockdata";
|
|
4
|
+
import { addBaseToTemplate } from "../commonUtils";
|
|
5
|
+
|
|
6
|
+
jest.mock('@capillarytech/cap-ui-utils', () => ({
|
|
7
|
+
Auth: {
|
|
8
|
+
hasAccess: () => jest.fn(() => true),
|
|
9
|
+
hasFeatureAccess: () => jest.fn(() => true),
|
|
10
|
+
authHoc: jest.fn(),
|
|
11
|
+
initialize: jest.fn(),
|
|
12
|
+
},
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
describe("common utils test", () => {
|
|
16
|
+
it("test for getTreeStructuredTags when tagsList is not empty", () => {
|
|
17
|
+
expect(getTreeStructuredTags({tagsList: mockdata.tagsList})).toEqual(mockdata.output2);
|
|
18
|
+
});
|
|
19
|
+
it("test for getTreeStructuredTags when tagsList is empty", () => {
|
|
20
|
+
expect(getTreeStructuredTags({tagsList: []})).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe('addBaseToTemplate', () => {
|
|
25
|
+
it('should add the first item in history as base if history exists', () => {
|
|
26
|
+
const template = {
|
|
27
|
+
versions: {
|
|
28
|
+
history: ['v1', 'v2', 'v3'],
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const expected = {
|
|
32
|
+
versions: {
|
|
33
|
+
history: ['v1', 'v2', 'v3'],
|
|
34
|
+
base: 'v1',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
expect(addBaseToTemplate(template)).toEqual(expected);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('should return the original template if history is empty', () => {
|
|
41
|
+
const template = {
|
|
42
|
+
versions: {
|
|
43
|
+
history: [],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
expect(addBaseToTemplate(template)).toEqual(template);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should return the original template if history is undefined', () => {
|
|
50
|
+
const template = {
|
|
51
|
+
versions: {},
|
|
52
|
+
};
|
|
53
|
+
expect(addBaseToTemplate(template)).toEqual(template);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('should return the original template if versions is undefined', () => {
|
|
57
|
+
const template = {};
|
|
58
|
+
expect(addBaseToTemplate(template)).toEqual(template);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should handle null input gracefully', () => {
|
|
62
|
+
expect(addBaseToTemplate(null)).toBeNull();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('should handle undefined input gracefully', () => {
|
|
66
|
+
expect(addBaseToTemplate(undefined)).toBeUndefined();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should not modify the original template object', () => {
|
|
70
|
+
const template = {
|
|
71
|
+
versions: {
|
|
72
|
+
history: ['v1', 'v2', 'v3'],
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const originalTemplateCopy = JSON.parse(JSON.stringify(template));
|
|
76
|
+
addBaseToTemplate(template);
|
|
77
|
+
expect(template).toEqual(originalTemplateCopy);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { injectIntl, intlShape } from "react-intl";
|
|
4
|
+
import cloneDeep from "lodash/cloneDeep";
|
|
5
|
+
import isEmpty from "lodash/isEmpty";
|
|
6
|
+
import CapHeading from "@capillarytech/cap-ui-library/CapHeading";
|
|
7
|
+
import CapHeader from "@capillarytech/cap-ui-library/CapHeader";
|
|
8
|
+
import CapInput from "@capillarytech/cap-ui-library/CapInput";
|
|
9
|
+
import CapRadioGroup from "@capillarytech/cap-ui-library/CapRadioGroup";
|
|
10
|
+
import CapRow from "@capillarytech/cap-ui-library/CapRow";
|
|
11
|
+
import CapColumn from "@capillarytech/cap-ui-library/CapColumn";
|
|
12
|
+
import CapLabel from "@capillarytech/cap-ui-library/CapLabel";
|
|
13
|
+
import CapLink from "@capillarytech/cap-ui-library/CapLink";
|
|
14
|
+
import CapError from "@capillarytech/cap-ui-library/CapError";
|
|
15
|
+
import CapCheckbox from "@capillarytech/cap-ui-library/CapCheckbox";
|
|
16
|
+
import CapSelect from "@capillarytech/cap-ui-library/CapSelect";
|
|
17
|
+
import TagList from "../../v2Containers/TagList";
|
|
18
|
+
import messages from "./messages";
|
|
19
|
+
import {
|
|
20
|
+
ANDROID,
|
|
21
|
+
INAPP_MEDIA_TYPES,
|
|
22
|
+
INAPP_BUTTON_TYPES,
|
|
23
|
+
ALLOWED_IMAGE_EXTENSIONS_REGEX,
|
|
24
|
+
INAPP_IMG_SIZE,
|
|
25
|
+
INITIAL_CTA_DATA,
|
|
26
|
+
MEDIA_RADIO_OPTIONS,
|
|
27
|
+
BUTTON_RADIO_OPTIONS,
|
|
28
|
+
} from "../../v2Containers/InApp/constants";
|
|
29
|
+
import { INAPP } from "../../v2Containers/CreativesContainer/constants";
|
|
30
|
+
import CapImageUpload from "../CapImageUpload";
|
|
31
|
+
import CapInAppCTA from "../CapInAppCTA";
|
|
32
|
+
import './index.scss';
|
|
33
|
+
|
|
34
|
+
const CapDeviceContent = (props) => {
|
|
35
|
+
const {
|
|
36
|
+
intl,
|
|
37
|
+
location,
|
|
38
|
+
injectedTags,
|
|
39
|
+
selectedOfferDetails,
|
|
40
|
+
panes,
|
|
41
|
+
actions,
|
|
42
|
+
editData,
|
|
43
|
+
isFullMode,
|
|
44
|
+
inAppImageSrc,
|
|
45
|
+
setInAppImageSrc,
|
|
46
|
+
isEditFlow,
|
|
47
|
+
ctaData,
|
|
48
|
+
setCtaData,
|
|
49
|
+
buttonType,
|
|
50
|
+
setButtonType,
|
|
51
|
+
templateMediaType,
|
|
52
|
+
setTemplateMediaType,
|
|
53
|
+
title,
|
|
54
|
+
setTitle,
|
|
55
|
+
templateMessageError,
|
|
56
|
+
templateMessage,
|
|
57
|
+
setTemplateMessage,
|
|
58
|
+
setTemplateMessageError,
|
|
59
|
+
addActionLink,
|
|
60
|
+
setAddActionLink,
|
|
61
|
+
deepLink,
|
|
62
|
+
deepLinkValue,
|
|
63
|
+
setDeepLinkValue,
|
|
64
|
+
onCopyTitleAndContent,
|
|
65
|
+
tags,
|
|
66
|
+
onTagSelect,
|
|
67
|
+
handleOnTagsContextChange,
|
|
68
|
+
templateDescErrorHandler,
|
|
69
|
+
templateTitleError,
|
|
70
|
+
setTemplateTitleError,
|
|
71
|
+
} = props || {};
|
|
72
|
+
const { TextArea } = CapInput;
|
|
73
|
+
const { formatMessage } = intl;
|
|
74
|
+
|
|
75
|
+
const isAndroid = panes === ANDROID;
|
|
76
|
+
const isMediaTypeImage = INAPP_MEDIA_TYPES.IMAGE === templateMediaType;
|
|
77
|
+
const isBtnTypeCta = buttonType === INAPP_BUTTON_TYPES.CTA;
|
|
78
|
+
const onTemplateMessageChange = ({ target: { value } }) => {
|
|
79
|
+
let error = templateDescErrorHandler(value);
|
|
80
|
+
if (value === '') {
|
|
81
|
+
error = formatMessage(messages.emptyTemplateMessageErrorMessage);
|
|
82
|
+
}
|
|
83
|
+
setTemplateMessage(value);
|
|
84
|
+
setTemplateMessageError(error);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const setUpdateInAppImageSrc = useCallback(
|
|
88
|
+
(filePath) => {
|
|
89
|
+
const templateType = 0;
|
|
90
|
+
setInAppImageSrc(filePath);
|
|
91
|
+
actions.clearInAppAsset(templateType);
|
|
92
|
+
},
|
|
93
|
+
[inAppImageSrc]
|
|
94
|
+
);
|
|
95
|
+
const updateOnInAppImageReUpload = useCallback(() => {
|
|
96
|
+
setInAppImageSrc("");
|
|
97
|
+
}, [inAppImageSrc]);
|
|
98
|
+
|
|
99
|
+
const updateHandler = (ctaDataParam, index) => {
|
|
100
|
+
setCtaData((prevState) => {
|
|
101
|
+
const clonedCta = cloneDeep(prevState);
|
|
102
|
+
clonedCta[index] = ctaDataParam;
|
|
103
|
+
return clonedCta;
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// function to delete CTA button
|
|
108
|
+
const deleteHandler = (index) => {
|
|
109
|
+
setCtaData((prevState) => {
|
|
110
|
+
const clonedCta = cloneDeep(prevState);
|
|
111
|
+
const filteredCta = clonedCta.filter((cta) => cta.index !== index);
|
|
112
|
+
if (filteredCta.length === 1) {
|
|
113
|
+
// updates the index of the cta buttons present in case there's a cta button deleted
|
|
114
|
+
filteredCta[0].index = 0;
|
|
115
|
+
}
|
|
116
|
+
if (isEmpty(filteredCta)) {
|
|
117
|
+
onChangeButtonType({target: { value: INAPP_BUTTON_TYPES.NONE } });
|
|
118
|
+
}
|
|
119
|
+
return filteredCta;
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const onTitleChange = ({ target: { value } }) => {
|
|
124
|
+
let error = templateDescErrorHandler(value);
|
|
125
|
+
if (value === '') {
|
|
126
|
+
error = formatMessage(messages.emptyTemplateMessageErrorMessage);
|
|
127
|
+
}
|
|
128
|
+
setTitle(value);
|
|
129
|
+
setTemplateTitleError(error);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const onTemplateMediaTypeChange = ({ target: { value } }) => {
|
|
133
|
+
setTemplateMediaType(value);
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const onChangeButtonType = ({ target: { value } }) => {
|
|
137
|
+
setButtonType(value);
|
|
138
|
+
setCtaData(INITIAL_CTA_DATA);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const onActionLinkCheckBoxChange = () => {
|
|
142
|
+
setAddActionLink(!addActionLink);
|
|
143
|
+
setDeepLinkValue('');
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const uploadInAppAsset = (file, type, fileParams) => {
|
|
147
|
+
actions.uploadInAppAsset(file, type, fileParams, 0);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const getTagList = (index) => (
|
|
151
|
+
<TagList
|
|
152
|
+
moduleFilterEnabled={
|
|
153
|
+
location && location?.query && location?.query?.type !== "embedded"
|
|
154
|
+
}
|
|
155
|
+
label={formatMessage(messages.addLabel)}
|
|
156
|
+
onTagSelect={(value) => onTagSelect(value, index)}
|
|
157
|
+
onContextChange={handleOnTagsContextChange}
|
|
158
|
+
location={location}
|
|
159
|
+
tags={tags || []}
|
|
160
|
+
injectedTags={injectedTags || {}}
|
|
161
|
+
selectedOfferDetails={selectedOfferDetails}
|
|
162
|
+
/>
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
return (
|
|
166
|
+
<>
|
|
167
|
+
<CapRow className="creatives-device-content">
|
|
168
|
+
<CapLink
|
|
169
|
+
title={isAndroid
|
|
170
|
+
? formatMessage(messages.copyContentFromIOS)
|
|
171
|
+
: formatMessage(messages.copyCotentFromAndroid)}
|
|
172
|
+
className="inapp-copy-content"
|
|
173
|
+
onClick={onCopyTitleAndContent}
|
|
174
|
+
/>
|
|
175
|
+
<CapRow className="creatives-inapp-title">
|
|
176
|
+
<CapColumn
|
|
177
|
+
className="inapp-content-main"
|
|
178
|
+
>
|
|
179
|
+
<CapHeading type="h5" className="inapp-title">
|
|
180
|
+
{formatMessage(messages.title)}
|
|
181
|
+
</CapHeading>
|
|
182
|
+
{getTagList(0)} {/* here 0 signifies the tags for template title */}
|
|
183
|
+
</CapColumn>
|
|
184
|
+
<CapInput
|
|
185
|
+
id="inapp-title-name-input"
|
|
186
|
+
onChange={onTitleChange}
|
|
187
|
+
placeholder={formatMessage(messages.titlePlaceholder)}
|
|
188
|
+
value={title}
|
|
189
|
+
size="default"
|
|
190
|
+
isRequired
|
|
191
|
+
errorMessage={templateTitleError && (
|
|
192
|
+
<CapError className="inapp-template-message-error">
|
|
193
|
+
{templateTitleError}
|
|
194
|
+
</CapError>
|
|
195
|
+
)}
|
|
196
|
+
/>
|
|
197
|
+
</CapRow>
|
|
198
|
+
<CapRow className="creatives-inapp-media">
|
|
199
|
+
<CapRow className="inapp-content-media">
|
|
200
|
+
<CapHeading type="h5" className="inapp-media-header">
|
|
201
|
+
{formatMessage(messages.mediaLabel)}
|
|
202
|
+
</CapHeading>
|
|
203
|
+
<CapRadioGroup
|
|
204
|
+
id="inapp-media-radio"
|
|
205
|
+
options={MEDIA_RADIO_OPTIONS}
|
|
206
|
+
value={templateMediaType}
|
|
207
|
+
onChange={onTemplateMediaTypeChange}
|
|
208
|
+
className="inapp-media-radio"
|
|
209
|
+
/>
|
|
210
|
+
</CapRow>
|
|
211
|
+
</CapRow>
|
|
212
|
+
<CapRow className={`creatives-inapp-message ${!isMediaTypeImage && "message-bottom-margin"}`}>
|
|
213
|
+
<CapColumn
|
|
214
|
+
className="inapp-message-header"
|
|
215
|
+
>
|
|
216
|
+
<CapHeading type="h5" className="inapp-message-header-style">
|
|
217
|
+
{formatMessage(messages.message)}
|
|
218
|
+
</CapHeading>
|
|
219
|
+
{getTagList(1)} {/* here 1 signifies the tags for template message */}
|
|
220
|
+
</CapColumn>
|
|
221
|
+
<TextArea
|
|
222
|
+
id="inapp-create-template-message-input"
|
|
223
|
+
className="inapp-create-template-message-input"
|
|
224
|
+
placeholder={formatMessage(messages.textAreaInputPlaceholder)}
|
|
225
|
+
onChange={onTemplateMessageChange}
|
|
226
|
+
value={templateMessage || ''}
|
|
227
|
+
autosize={{ minRows: 5, maxRows: 5 }}
|
|
228
|
+
errorMessage={templateMessageError && (
|
|
229
|
+
<CapError className="inapp-template-message-error">
|
|
230
|
+
{templateMessageError}
|
|
231
|
+
</CapError>
|
|
232
|
+
)}
|
|
233
|
+
/>
|
|
234
|
+
{isMediaTypeImage && (
|
|
235
|
+
<>
|
|
236
|
+
<CapHeading type="h4" className="cover-img">
|
|
237
|
+
{formatMessage(messages.coverImage)}
|
|
238
|
+
</CapHeading>
|
|
239
|
+
<CapImageUpload
|
|
240
|
+
allowedExtensionsRegex={ALLOWED_IMAGE_EXTENSIONS_REGEX}
|
|
241
|
+
imgSize={INAPP_IMG_SIZE}
|
|
242
|
+
uploadAsset={uploadInAppAsset}
|
|
243
|
+
isFullMode={isFullMode}
|
|
244
|
+
imageSrc={inAppImageSrc}
|
|
245
|
+
updateImageSrc={setUpdateInAppImageSrc}
|
|
246
|
+
updateOnReUpload={updateOnInAppImageReUpload}
|
|
247
|
+
index={0}
|
|
248
|
+
className="cap-custom-image-upload"
|
|
249
|
+
key="inapp-uploaded-image"
|
|
250
|
+
imageData={editData}
|
|
251
|
+
channel={INAPP}
|
|
252
|
+
channelSpecificStyle={!isFullMode}
|
|
253
|
+
/>
|
|
254
|
+
</>
|
|
255
|
+
)}
|
|
256
|
+
</CapRow>
|
|
257
|
+
</CapRow>
|
|
258
|
+
<CapRow className="inapp-action-link">
|
|
259
|
+
<CapCheckbox onChange={onActionLinkCheckBoxChange} checked={addActionLink} />
|
|
260
|
+
<CapRow className="inapp-render-heading">
|
|
261
|
+
<CapHeader
|
|
262
|
+
title={<CapRow type="flex">
|
|
263
|
+
<CapHeading type="h4">
|
|
264
|
+
{formatMessage(messages.addActionLink)}
|
|
265
|
+
</CapHeading>
|
|
266
|
+
</CapRow>}
|
|
267
|
+
description={<CapLabel type="label3">{formatMessage(messages.addActionLinkDesc)}</CapLabel>}
|
|
268
|
+
/>
|
|
269
|
+
{addActionLink && (
|
|
270
|
+
<CapRow className="inapp-action-deep-link">
|
|
271
|
+
<CapHeading type="h4">
|
|
272
|
+
{formatMessage(messages.actionDeepLink)}
|
|
273
|
+
</CapHeading>
|
|
274
|
+
<CapSelect
|
|
275
|
+
id="inapp-add-action-link-type"
|
|
276
|
+
placeholder={formatMessage(messages.deepLinkOptionsPlaceholder)}
|
|
277
|
+
options={deepLink || []}
|
|
278
|
+
value={deepLinkValue}
|
|
279
|
+
onChange={(value) => { setDeepLinkValue(value); }}
|
|
280
|
+
/>
|
|
281
|
+
</CapRow>
|
|
282
|
+
)}
|
|
283
|
+
</CapRow>
|
|
284
|
+
</CapRow>
|
|
285
|
+
<CapRow className="inapp-cta-button">
|
|
286
|
+
<CapHeader
|
|
287
|
+
className="inapp-render-heading-cta-button"
|
|
288
|
+
title={<CapRow type="flex">
|
|
289
|
+
<CapHeading type="h4">
|
|
290
|
+
{formatMessage(messages.btnLabel)}
|
|
291
|
+
</CapHeading>
|
|
292
|
+
<CapHeading
|
|
293
|
+
type="h6"
|
|
294
|
+
className="inapp-optional-label"
|
|
295
|
+
>
|
|
296
|
+
{formatMessage(messages.optional)}
|
|
297
|
+
</CapHeading>
|
|
298
|
+
</CapRow>}
|
|
299
|
+
description={<CapLabel type="label3">{formatMessage(messages.btnDesc)}</CapLabel>}
|
|
300
|
+
/>
|
|
301
|
+
<CapRadioGroup
|
|
302
|
+
options={BUTTON_RADIO_OPTIONS}
|
|
303
|
+
value={buttonType}
|
|
304
|
+
onChange={onChangeButtonType}
|
|
305
|
+
disabled={!isAndroid}
|
|
306
|
+
className="inapp-btn-radio-group"
|
|
307
|
+
/>
|
|
308
|
+
{isBtnTypeCta && (
|
|
309
|
+
<CapInAppCTA
|
|
310
|
+
ctaData={ctaData}
|
|
311
|
+
updateHandler={updateHandler}
|
|
312
|
+
deleteHandler={deleteHandler}
|
|
313
|
+
isEditFlow={isEditFlow}
|
|
314
|
+
deepLink={deepLink || []}
|
|
315
|
+
/>
|
|
316
|
+
)}
|
|
317
|
+
</CapRow>
|
|
318
|
+
</>
|
|
319
|
+
);
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
CapDeviceContent.propTypes = {
|
|
323
|
+
intl: intlShape.isRequierd,
|
|
324
|
+
location: PropTypes.string,
|
|
325
|
+
injectedTags: PropTypes.object,
|
|
326
|
+
selectedOfferDetails: PropTypes.array,
|
|
327
|
+
panes: PropTypes.string,
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
export default injectIntl(CapDeviceContent);
|