@capillarytech/creatives-library 2.0.69 → 2.0.71
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 +1 -1
- package/components/Ckeditor/index.js +2 -1
- package/components/FormBuilder/index.js +25 -10
- package/components/Header/index.js +3 -1
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +38 -3
- package/components/TemplatePreview/index.js +45 -51
- package/components/TemplatePreview/messages.js +1 -1
- package/containers/Cap/actions.js +0 -5
- package/containers/Cap/reducer.js +1 -1
- package/containers/Cap/selectors.js +0 -13
- package/containers/Ebill/index.js +1 -2
- package/containers/Email/_email.scss +1 -0
- package/containers/Email/actions.js +3 -8
- package/containers/Email/constants.js +0 -1
- package/containers/Email/index.js +947 -322
- package/containers/Email/reducer.js +0 -3
- package/containers/Email/sagas.js +6 -3
- package/containers/Email/selectors.js +1 -4
- package/containers/Line/Create/index.js +1 -2
- package/containers/Line/Edit/_lineEdit.scss +4 -0
- package/containers/Line/Edit/index.js +1 -3
- package/containers/MobilePush/Create/_mobilePushCreate.scss +3 -12
- package/containers/MobilePush/Create/actions.js +0 -6
- package/containers/MobilePush/Create/constants.js +0 -1
- package/containers/MobilePush/Create/index.js +1133 -628
- package/containers/MobilePush/Create/messages.js +1 -5
- package/containers/MobilePush/Create/reducer.js +0 -2
- package/containers/MobilePush/Create/selectors.js +3 -3
- package/containers/MobilePush/Edit/_mobilePushCreate.scss +3 -9
- package/containers/MobilePush/Edit/index.js +1127 -393
- package/containers/MobilePush/Edit/messages.js +0 -4
- package/containers/MobilePush/Edit/reducer.js +1 -2
- package/containers/MobilePush/Edit/selectors.js +3 -6
- package/containers/Sms/Create/_smsCreate.scss +2 -1
- package/containers/Sms/Create/actions.js +4 -4
- package/containers/Sms/Create/index.js +570 -102
- package/containers/Sms/Create/sagas.js +2 -1
- package/containers/Sms/Edit/actions.js +5 -10
- package/containers/Sms/Edit/constants.js +0 -1
- package/containers/Sms/Edit/index.js +548 -103
- package/containers/Sms/Edit/reducer.js +0 -2
- package/containers/Sms/Edit/sagas.js +3 -1
- package/containers/TagList/index.js +3 -3
- package/containers/Templates/actions.js +1 -3
- package/containers/Templates/index.js +299 -268
- package/containers/Templates/messages.js +90 -122
- package/containers/Templates/reducer.js +3 -3
- package/containers/Templates/sagas.js +1 -5
- package/containers/Templates/selectors.js +1 -41
- package/containers/WeChat/MapTemplates/index.js +3 -4
- package/containers/WeChat/RichmediaTemplates/Create/index.js +18 -4
- package/containers/WeChat/RichmediaTemplates/Create/messages.js +4 -0
- package/containers/WeChat/RichmediaTemplates/Edit/index.js +3 -1
- package/containers/WeChat/RichmediaTemplates/View/index.js +3 -1
- package/index.js +31 -31
- package/initialState.js +6 -0
- package/package.json +3 -3
- package/routes.js +24 -19
- package/services/api.js +6 -2
- package/services/getSchema.js +18 -0
- package/v2Containers/App/actions.js +7 -0
- package/v2Containers/App/constants.js +3 -0
- package/v2Containers/App/reducer.js +19 -0
- package/v2Containers/App/sagas.js +26 -0
- package/v2Containers/App/selectors.js +25 -0
- package/v2Containers/App/tests/actions.test.js +18 -0
- package/v2Containers/App/tests/reducer.test.js +9 -0
- package/v2Containers/App/tests/sagas.test.js +15 -0
- package/v2Containers/App/tests/selectors.test.js +10 -0
- package/v2Containers/Assets/Gallery/_gallery.scss +0 -0
- package/v2Containers/Assets/Gallery/actions.js +37 -0
- package/v2Containers/Assets/Gallery/constants.js +23 -0
- package/v2Containers/Assets/Gallery/index.js +479 -0
- package/v2Containers/Assets/Gallery/messages.js +97 -0
- package/v2Containers/Assets/Gallery/reducer.js +81 -0
- package/v2Containers/Assets/Gallery/sagas.js +84 -0
- package/v2Containers/Assets/Gallery/selectors.js +25 -0
- package/v2Containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +7 -0
- package/v2Containers/Assets/Gallery/tests/actions.test.js +26 -0
- package/v2Containers/Assets/Gallery/tests/index.test.js +10 -0
- package/v2Containers/Assets/Gallery/tests/reducer.test.js +95 -0
- package/v2Containers/Assets/Gallery/tests/sagas.test.js +15 -0
- package/v2Containers/Assets/Gallery/tests/selectors.test.js +10 -0
- package/v2Containers/CallTask/_callTask.scss +5 -0
- package/v2Containers/CallTask/actions.js +15 -0
- package/v2Containers/CallTask/constants.js +7 -0
- package/v2Containers/CallTask/index.js +141 -0
- package/v2Containers/CallTask/messages.js +21 -0
- package/v2Containers/CallTask/reducer.js +23 -0
- package/v2Containers/CallTask/sagas.js +11 -0
- package/v2Containers/CallTask/selectors.js +25 -0
- package/v2Containers/CallTask/tests/actions.test.js +18 -0
- package/v2Containers/CallTask/tests/index.test.js +10 -0
- package/v2Containers/CallTask/tests/reducer.test.js +9 -0
- package/v2Containers/CallTask/tests/sagas.test.js +15 -0
- package/v2Containers/CallTask/tests/selectors.test.js +10 -0
- package/v2Containers/Cap/actions.js +64 -0
- package/v2Containers/Cap/constants.js +24 -0
- package/v2Containers/Cap/index.js +349 -0
- package/v2Containers/Cap/messsages.js +63 -0
- package/v2Containers/Cap/reducer.js +111 -0
- package/v2Containers/Cap/sagas.js +143 -0
- package/v2Containers/Cap/selectors.js +85 -0
- package/v2Containers/Cap/tests/index.test.js +16 -0
- package/v2Containers/Cap/tests/selectors.test.js +28 -0
- package/v2Containers/ChannelTemplates/actions.js +20 -0
- package/v2Containers/ChannelTemplates/constants.js +8 -0
- package/v2Containers/ChannelTemplates/index.js +48 -0
- package/v2Containers/ChannelTemplates/messages.js +13 -0
- package/v2Containers/ChannelTemplates/reducer.js +34 -0
- package/v2Containers/ChannelTemplates/sagas.js +32 -0
- package/v2Containers/ChannelTemplates/selectors.js +25 -0
- package/v2Containers/ChannelTemplates/tests/actions.test.js +18 -0
- package/v2Containers/ChannelTemplates/tests/index.test.js +10 -0
- package/v2Containers/ChannelTemplates/tests/reducer.test.js +9 -0
- package/v2Containers/ChannelTemplates/tests/sagas.test.js +15 -0
- package/v2Containers/ChannelTemplates/tests/selectors.test.js +10 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +257 -0
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +45 -0
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +70 -0
- package/v2Containers/CreativesContainer/actions.js +27 -0
- package/v2Containers/CreativesContainer/constants.js +16 -0
- package/v2Containers/CreativesContainer/index.js +483 -0
- package/v2Containers/CreativesContainer/index.scss +27 -0
- package/v2Containers/CreativesContainer/messages.js +293 -0
- package/v2Containers/CreativesContainer/reducer.js +29 -0
- package/v2Containers/CreativesContainer/sagas.js +11 -0
- package/v2Containers/CreativesContainer/selectors.js +30 -0
- package/v2Containers/CreativesContainer/tests/actions.test.js +18 -0
- package/v2Containers/CreativesContainer/tests/index.test.js +10 -0
- package/v2Containers/CreativesContainer/tests/reducer.test.js +9 -0
- package/v2Containers/CreativesContainer/tests/sagas.test.js +15 -0
- package/v2Containers/CreativesContainer/tests/selectors.test.js +10 -0
- package/v2Containers/Dashboard/actions.js +15 -0
- package/v2Containers/Dashboard/constants.js +7 -0
- package/v2Containers/Dashboard/index.js +54 -0
- package/v2Containers/Dashboard/messages.js +13 -0
- package/v2Containers/Dashboard/reducer.js +21 -0
- package/v2Containers/Dashboard/sagas.js +11 -0
- package/v2Containers/Dashboard/selectors.js +25 -0
- package/v2Containers/Dashboard/tests/actions.test.js +18 -0
- package/v2Containers/Dashboard/tests/index.test.js +10 -0
- package/v2Containers/Dashboard/tests/reducer.test.js +9 -0
- package/v2Containers/Dashboard/tests/sagas.test.js +15 -0
- package/v2Containers/Dashboard/tests/selectors.test.js +10 -0
- package/v2Containers/Ebill/_ebill.scss +5 -0
- package/v2Containers/Ebill/actions.js +43 -0
- package/v2Containers/Ebill/constants.js +20 -0
- package/v2Containers/Ebill/index.js +1261 -0
- package/v2Containers/Ebill/messages.js +73 -0
- package/v2Containers/Ebill/reducer.js +72 -0
- package/v2Containers/Ebill/sagas.js +65 -0
- package/v2Containers/Ebill/selectors.js +25 -0
- package/v2Containers/Ebill/tests/actions.test.js +18 -0
- package/v2Containers/Ebill/tests/index.test.js +10 -0
- package/v2Containers/Ebill/tests/reducer.test.js +9 -0
- package/v2Containers/Ebill/tests/sagas.test.js +15 -0
- package/v2Containers/Ebill/tests/selectors.test.js +10 -0
- package/v2Containers/Email/_email.scss +140 -0
- package/v2Containers/Email/actions.js +86 -0
- package/v2Containers/Email/constants.js +37 -0
- package/v2Containers/Email/index.js +2703 -0
- package/v2Containers/Email/initialSchema.js +540 -0
- package/v2Containers/Email/messages.js +237 -0
- package/v2Containers/Email/reducer.js +147 -0
- package/v2Containers/Email/sagas.js +133 -0
- package/v2Containers/Email/selectors.js +34 -0
- package/v2Containers/Email/tests/actions.test.js +18 -0
- package/v2Containers/Email/tests/index.test.js +10 -0
- package/v2Containers/Email/tests/reducer.test.js +9 -0
- package/v2Containers/Email/tests/sagas.test.js +15 -0
- package/v2Containers/Email/tests/selectors.test.js +10 -0
- package/v2Containers/EmailWrapper/actions.js +15 -0
- package/v2Containers/EmailWrapper/constants.js +7 -0
- package/v2Containers/EmailWrapper/index.js +258 -0
- package/v2Containers/EmailWrapper/messages.js +57 -0
- package/v2Containers/EmailWrapper/reducer.js +23 -0
- package/v2Containers/EmailWrapper/sagas.js +11 -0
- package/v2Containers/EmailWrapper/selectors.js +25 -0
- package/v2Containers/EmailWrapper/tests/actions.test.js +18 -0
- package/v2Containers/EmailWrapper/tests/index.test.js +10 -0
- package/v2Containers/EmailWrapper/tests/reducer.test.js +9 -0
- package/v2Containers/EmailWrapper/tests/sagas.test.js +15 -0
- package/v2Containers/EmailWrapper/tests/selectors.test.js +10 -0
- package/v2Containers/LanguageProvider/actions.js +17 -0
- package/v2Containers/LanguageProvider/constants.js +8 -0
- package/v2Containers/LanguageProvider/index.js +46 -0
- package/v2Containers/LanguageProvider/reducer.js +30 -0
- package/v2Containers/LanguageProvider/selectors.js +20 -0
- package/v2Containers/LanguageProvider/tests/actions.test.js +19 -0
- package/v2Containers/LanguageProvider/tests/index.test.js +49 -0
- package/v2Containers/LanguageProvider/tests/reducer.test.js +20 -0
- package/v2Containers/LanguageProvider/tests/selectors.test.js +15 -0
- package/v2Containers/Line/Create/_lineCreate.scss +43 -0
- package/v2Containers/Line/Create/actions.js +90 -0
- package/v2Containers/Line/Create/constants.js +39 -0
- package/v2Containers/Line/Create/index.js +822 -0
- package/v2Containers/Line/Create/messages.js +173 -0
- package/v2Containers/Line/Create/reducer.js +99 -0
- package/v2Containers/Line/Create/sagas.js +107 -0
- package/v2Containers/Line/Create/selectors.js +36 -0
- package/v2Containers/Line/Edit/_lineEdit.scss +21 -0
- package/v2Containers/Line/Edit/actions.js +79 -0
- package/v2Containers/Line/Edit/constants.js +27 -0
- package/v2Containers/Line/Edit/index.js +1050 -0
- package/v2Containers/Line/Edit/messages.js +157 -0
- package/v2Containers/Line/Edit/reducer.js +83 -0
- package/v2Containers/Line/Edit/sagas.js +81 -0
- package/v2Containers/Line/Edit/selectors.js +29 -0
- package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
- package/v2Containers/Line/Edit/tests/index.test.js +10 -0
- package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
- package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
- package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
- package/v2Containers/Login/assets/images/capillary_logo.png +0 -0
- package/v2Containers/Login/components/LoginForm/index.js +59 -0
- package/v2Containers/Login/components/LoginForm/messages.js +21 -0
- package/v2Containers/Login/components/LoginForm/tests/index.test.js +10 -0
- package/v2Containers/Login/index.js +106 -0
- package/v2Containers/Login/messages.js +21 -0
- package/v2Containers/Login/selectors.js +25 -0
- package/v2Containers/Login/tests/index.test.js +10 -0
- package/v2Containers/Login/tests/sagas.test.js +15 -0
- package/v2Containers/Login/tests/selectors.test.js +10 -0
- package/v2Containers/MobilePush/Create/_mobilePushCreate.scss +41 -0
- package/v2Containers/MobilePush/Create/actions.js +52 -0
- package/v2Containers/MobilePush/Create/constants.js +24 -0
- package/v2Containers/MobilePush/Create/index.js +1759 -0
- package/v2Containers/MobilePush/Create/messages.js +237 -0
- package/v2Containers/MobilePush/Create/reducer.js +72 -0
- package/v2Containers/MobilePush/Create/sagas.js +60 -0
- package/v2Containers/MobilePush/Create/selectors.js +28 -0
- package/v2Containers/MobilePush/Create/tests/actions.test.js +18 -0
- package/v2Containers/MobilePush/Create/tests/index.test.js +10 -0
- package/v2Containers/MobilePush/Create/tests/reducer.test.js +9 -0
- package/v2Containers/MobilePush/Create/tests/sagas.test.js +15 -0
- package/v2Containers/MobilePush/Create/tests/selectors.test.js +10 -0
- package/v2Containers/MobilePush/Edit/_mobilePushCreate.scss +38 -0
- package/v2Containers/MobilePush/Edit/actions.js +91 -0
- package/v2Containers/MobilePush/Edit/constants.js +35 -0
- package/v2Containers/MobilePush/Edit/index.js +1846 -0
- package/v2Containers/MobilePush/Edit/messages.js +253 -0
- package/v2Containers/MobilePush/Edit/reducer.js +113 -0
- package/v2Containers/MobilePush/Edit/sagas.js +119 -0
- package/v2Containers/MobilePush/Edit/selectors.js +32 -0
- package/v2Containers/MobilePush/Edit/tests/actions.test.js +18 -0
- package/v2Containers/MobilePush/Edit/tests/index.test.js +10 -0
- package/v2Containers/MobilePush/Edit/tests/reducer.test.js +9 -0
- package/v2Containers/MobilePush/Edit/tests/sagas.test.js +15 -0
- package/v2Containers/MobilePush/Edit/tests/selectors.test.js +10 -0
- package/v2Containers/MobilePush/commonMethods.js +249 -0
- package/v2Containers/MobilePush/eventsMap.js +127 -0
- package/v2Containers/MobilePush/initialSchema.js +1739 -0
- package/v2Containers/MobilepushWrapper/_mobilepushWrapper.scss +18 -0
- package/v2Containers/MobilepushWrapper/index.js +136 -0
- package/v2Containers/MobilepushWrapper/messages.js +29 -0
- package/v2Containers/MobilepushWrapper/tests/index.test.js +10 -0
- package/v2Containers/NotFoundPage/index.js +25 -0
- package/v2Containers/NotFoundPage/messages.js +13 -0
- package/v2Containers/NotFoundPage/tests/index.test.js +17 -0
- package/v2Containers/Sms/Create/_smsCreate.scss +58 -0
- package/v2Containers/Sms/Create/actions.js +27 -0
- package/v2Containers/Sms/Create/constants.js +16 -0
- package/v2Containers/Sms/Create/index.js +1017 -0
- package/v2Containers/Sms/Create/messages.js +85 -0
- package/v2Containers/Sms/Create/reducer.js +41 -0
- package/v2Containers/Sms/Create/sagas.js +35 -0
- package/v2Containers/Sms/Create/selectors.js +28 -0
- package/v2Containers/Sms/Create/tests/actions.test.js +18 -0
- package/v2Containers/Sms/Create/tests/index.test.js +10 -0
- package/v2Containers/Sms/Create/tests/reducer.test.js +9 -0
- package/v2Containers/Sms/Create/tests/sagas.test.js +15 -0
- package/v2Containers/Sms/Create/tests/selectors.test.js +10 -0
- package/v2Containers/Sms/Edit/actions.js +45 -0
- package/v2Containers/Sms/Edit/constants.js +18 -0
- package/v2Containers/Sms/Edit/index.js +1018 -0
- package/v2Containers/Sms/Edit/messages.js +89 -0
- package/v2Containers/Sms/Edit/reducer.js +52 -0
- package/v2Containers/Sms/Edit/sagas.js +50 -0
- package/v2Containers/Sms/Edit/selectors.js +32 -0
- package/v2Containers/Sms/Edit/tests/actions.test.js +18 -0
- package/v2Containers/Sms/Edit/tests/index.test.js +10 -0
- package/v2Containers/Sms/Edit/tests/reducer.test.js +9 -0
- package/v2Containers/Sms/Edit/tests/sagas.test.js +15 -0
- package/v2Containers/Sms/Edit/tests/selectors.test.js +10 -0
- package/v2Containers/Sms/initialSchema.js +281 -0
- package/v2Containers/TagList/_tagList.scss +8 -0
- package/v2Containers/TagList/actions.js +15 -0
- package/v2Containers/TagList/constants.js +7 -0
- package/v2Containers/TagList/index.js +236 -0
- package/v2Containers/TagList/messages.js +13 -0
- package/v2Containers/TagList/reducer.js +23 -0
- package/v2Containers/TagList/sagas.js +11 -0
- package/v2Containers/TagList/selectors.js +25 -0
- package/v2Containers/TagList/tests/actions.test.js +18 -0
- package/v2Containers/TagList/tests/index.test.js +10 -0
- package/v2Containers/TagList/tests/reducer.test.js +9 -0
- package/v2Containers/TagList/tests/sagas.test.js +15 -0
- package/v2Containers/TagList/tests/selectors.test.js +10 -0
- package/v2Containers/Templates/_templates.scss +349 -0
- package/v2Containers/Templates/actions.js +110 -0
- package/v2Containers/Templates/constants.js +45 -0
- package/v2Containers/Templates/index.js +1682 -0
- package/v2Containers/Templates/messages.js +273 -0
- package/v2Containers/Templates/reducer.js +142 -0
- package/v2Containers/Templates/sagas.js +180 -0
- package/v2Containers/Templates/selectors.js +68 -0
- package/v2Containers/Templates/tests/actions.test.js +18 -0
- package/v2Containers/Templates/tests/index.test.js +10 -0
- package/v2Containers/Templates/tests/reducer.test.js +9 -0
- package/v2Containers/Templates/tests/sagas.test.js +15 -0
- package/v2Containers/Templates/tests/selectors.test.js +10 -0
- package/v2Containers/TemplatesV2/_templatesV2.scss +5 -0
- package/v2Containers/TemplatesV2/actions.js +16 -0
- package/v2Containers/TemplatesV2/constants.js +10 -0
- package/v2Containers/TemplatesV2/index.js +217 -0
- package/v2Containers/TemplatesV2/messages.js +29 -0
- package/v2Containers/TemplatesV2/selectors.js +25 -0
- package/v2Containers/TemplatesV2/tests/actions.test.js +18 -0
- package/v2Containers/TemplatesV2/tests/index.test.js +10 -0
- package/v2Containers/TemplatesV2/tests/reducer.test.js +9 -0
- package/v2Containers/TemplatesV2/tests/sagas.test.js +15 -0
- package/v2Containers/TemplatesV2/tests/selectors.test.js +10 -0
- package/v2Containers/TestPage/constants.js +7 -0
- package/v2Containers/TestPage/index.js +31 -0
- package/v2Containers/TestPage/messages.js +13 -0
- package/v2Containers/TestPage/reducer.js +21 -0
- package/v2Containers/TestPage/sagas.js +11 -0
- package/v2Containers/Testv2/actions.js +15 -0
- package/v2Containers/Testv2/constants.js +7 -0
- package/v2Containers/Testv2/index.js +47 -0
- package/v2Containers/Testv2/messages.js +13 -0
- package/v2Containers/Testv2/reducer.js +23 -0
- package/v2Containers/Testv2/sagas.js +11 -0
- package/v2Containers/Testv2/selectors.js +25 -0
- package/v2Containers/Testv2/tests/actions.test.js +18 -0
- package/v2Containers/Testv2/tests/index.test.js +10 -0
- package/v2Containers/Testv2/tests/reducer.test.js +9 -0
- package/v2Containers/Testv2/tests/sagas.test.js +15 -0
- package/v2Containers/Testv2/tests/selectors.test.js +10 -0
- package/v2Containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
- package/v2Containers/WeChat/MapTemplates/actions.js +52 -0
- package/v2Containers/WeChat/MapTemplates/constants.js +28 -0
- package/v2Containers/WeChat/MapTemplates/index.js +1385 -0
- package/v2Containers/WeChat/MapTemplates/messages.js +73 -0
- package/v2Containers/WeChat/MapTemplates/reducer.js +74 -0
- package/v2Containers/WeChat/MapTemplates/sagas.js +86 -0
- package/v2Containers/WeChat/MapTemplates/selectors.js +25 -0
- package/v2Containers/WeChat/MapTemplates/tests/actions.test.js +18 -0
- package/v2Containers/WeChat/MapTemplates/tests/index.test.js +10 -0
- package/v2Containers/WeChat/MapTemplates/tests/reducer.test.js +9 -0
- package/v2Containers/WeChat/MapTemplates/tests/sagas.test.js +15 -0
- package/v2Containers/WeChat/MapTemplates/tests/selectors.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1053 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/messages.js +141 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/sagas.js +48 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/tests/actions.test.js +18 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/tests/index.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/tests/reducer.test.js +9 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/tests/sagas.test.js +15 -0
- package/v2Containers/WeChat/RichmediaTemplates/Create/tests/selectors.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/index.js +116 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/sagas.js +32 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/actions.test.js +18 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/index.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/reducer.test.js +9 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/sagas.test.js +15 -0
- package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/selectors.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/index.js +47 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/messages.js +13 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/tests/actions.test.js +18 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/tests/index.test.js +10 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/tests/reducer.test.js +9 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/tests/sagas.test.js +15 -0
- package/v2Containers/WeChat/RichmediaTemplates/View/tests/selectors.test.js +10 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Edit Messages
|
|
3
|
+
*
|
|
4
|
+
* This contains all the text for the Edit component.
|
|
5
|
+
*/
|
|
6
|
+
import { defineMessages } from 'react-intl';
|
|
7
|
+
|
|
8
|
+
export default defineMessages({
|
|
9
|
+
imageUploadLabel: {
|
|
10
|
+
id: 'app.containers.Line.Edit.ImageUploadLabel',
|
|
11
|
+
defaultMessage: 'Upload Image',
|
|
12
|
+
},
|
|
13
|
+
"Enter template name*": {
|
|
14
|
+
id: 'app.containers.Line.Edit.enterTemplateNameImportant',
|
|
15
|
+
defaultMessage: 'Enter template name*',
|
|
16
|
+
},
|
|
17
|
+
"Enter template name": {
|
|
18
|
+
id: 'app.containers.Line.Edit.enterTemplateName',
|
|
19
|
+
defaultMessage: 'Enter template name',
|
|
20
|
+
},
|
|
21
|
+
"Template name cannot be empty": {
|
|
22
|
+
id: 'app.containers.Line.Edit.templateCantEmpty',
|
|
23
|
+
defaultMessage: 'Template name cannot be empty',
|
|
24
|
+
},
|
|
25
|
+
"Discard Changes": {
|
|
26
|
+
id: 'app.containers.Line.Edit.discardChanges',
|
|
27
|
+
defaultMessage: 'Discard Changes',
|
|
28
|
+
},
|
|
29
|
+
"Cancel": {
|
|
30
|
+
id: 'app.containers.Line.Edit.cancel',
|
|
31
|
+
defaultMessage: 'Cancel',
|
|
32
|
+
},
|
|
33
|
+
"Save": {
|
|
34
|
+
id: 'app.containers.Line.Edit.save',
|
|
35
|
+
defaultMessage: 'Save',
|
|
36
|
+
},
|
|
37
|
+
"Select Line Template": {
|
|
38
|
+
id: 'app.containers.Line.Edit.selectLineTemplate',
|
|
39
|
+
defaultMessage: 'Select Line Template',
|
|
40
|
+
},
|
|
41
|
+
"Template": {
|
|
42
|
+
id: 'app.containers.Line.Edit.template',
|
|
43
|
+
defaultMessage: 'Template',
|
|
44
|
+
},
|
|
45
|
+
"Title*": {
|
|
46
|
+
id: 'app.containers.Line.Edit.titleLabel',
|
|
47
|
+
defaultMessage: 'Title*',
|
|
48
|
+
},
|
|
49
|
+
"Title": {
|
|
50
|
+
id: 'app.containers.Line.Edit.title',
|
|
51
|
+
defaultMessage: 'Title',
|
|
52
|
+
},
|
|
53
|
+
"Please input message title name.": {
|
|
54
|
+
id: 'app.containers.Line.Edit.titleNameInvalid',
|
|
55
|
+
defaultMessage: 'Please enter the message title',
|
|
56
|
+
},
|
|
57
|
+
"Template message has unsupported/missing tags!": {
|
|
58
|
+
id: 'app.containers.Line.Edit.messageHasUnsupportedTag',
|
|
59
|
+
defaultMessage: 'Please check the message content for unsupported/missing tags',
|
|
60
|
+
},
|
|
61
|
+
"Tags": {
|
|
62
|
+
id: 'app.containers.Line.Edit.Tags',
|
|
63
|
+
defaultMessage: 'Tags',
|
|
64
|
+
},
|
|
65
|
+
"Message*": {
|
|
66
|
+
id: 'app.containers.Line.Edit.messageLabel',
|
|
67
|
+
defaultMessage: 'Message*',
|
|
68
|
+
},
|
|
69
|
+
"Message": {
|
|
70
|
+
id: 'app.containers.Line.Edit.message',
|
|
71
|
+
defaultMessage: 'Message',
|
|
72
|
+
},
|
|
73
|
+
"Please input mobile push template content.": {
|
|
74
|
+
id: 'app.containers.Line.Edit.inputLineTemplateContent',
|
|
75
|
+
defaultMessage: 'Please enter the message content',
|
|
76
|
+
},
|
|
77
|
+
"Template title has unsupported/missing tags.": {
|
|
78
|
+
id: 'app.containers.Line.Edit.titleHasUnsupportedTag',
|
|
79
|
+
defaultMessage: 'Please check the message content for unsupported/missing tags',
|
|
80
|
+
},
|
|
81
|
+
"Template name cannot be empty.": {
|
|
82
|
+
id: 'app.containers.Line.Edit.templateNameNotEmpty',
|
|
83
|
+
defaultMessage: 'Please provide a template name ',
|
|
84
|
+
},
|
|
85
|
+
"Message title has unsupported/missing tags!": {
|
|
86
|
+
id: 'app.containers.Line.Edit.messageTitleWithUnsupportedTag',
|
|
87
|
+
defaultMessage: 'Please check the message content for unsupported/missing tags',
|
|
88
|
+
},
|
|
89
|
+
"Image": {
|
|
90
|
+
id: 'app.containers.Line.Edit.Image',
|
|
91
|
+
defaultMessage: 'Image',
|
|
92
|
+
},
|
|
93
|
+
"Max file size acceptable is 5mb": {
|
|
94
|
+
id: 'app.containers.Line.Edit.maxUploadFileSize',
|
|
95
|
+
defaultMessage: 'Max file size acceptable is 5mb',
|
|
96
|
+
},
|
|
97
|
+
"Please upload Image": {
|
|
98
|
+
id: 'app.containers.Line.Edit.pleaseUploadImage',
|
|
99
|
+
defaultMessage: 'Please upload Image',
|
|
100
|
+
},
|
|
101
|
+
"Upload Image": {
|
|
102
|
+
id: 'app.containers.Line.Edit.uploadImage',
|
|
103
|
+
defaultMessage: 'Upload Image',
|
|
104
|
+
},
|
|
105
|
+
"Line Template Edited Successfully": {
|
|
106
|
+
id: 'app.containers.Line.Edit.templateEditedSuccessfully',
|
|
107
|
+
defaultMessage: 'Line Template Edited Successfully',
|
|
108
|
+
},
|
|
109
|
+
"somethingWentWrong": {
|
|
110
|
+
id: 'app.containers.Line.Edit.somethingWentWrong',
|
|
111
|
+
defaultMessage: 'Something Went Wrong!!',
|
|
112
|
+
},
|
|
113
|
+
"Do you really want to go back? All your temporary changes will be lost!": {
|
|
114
|
+
id: 'app.containers.Line.Edit.goBackConfirmation',
|
|
115
|
+
defaultMessage: "Going back will discard all the changes you've made. Continue?",
|
|
116
|
+
},
|
|
117
|
+
"Name and Description": {
|
|
118
|
+
id: 'app.containers.Line.Edit.nameAndDescription',
|
|
119
|
+
defaultMessage: 'Name and Description',
|
|
120
|
+
},
|
|
121
|
+
"Button 1": {
|
|
122
|
+
id: 'app.containers.Line.Edit.button1',
|
|
123
|
+
defaultMessage: 'Button 1',
|
|
124
|
+
},
|
|
125
|
+
"Button 2": {
|
|
126
|
+
id: 'app.containers.Line.Edit.button2',
|
|
127
|
+
defaultMessage: 'Button 2',
|
|
128
|
+
},
|
|
129
|
+
"File size cannot be more than 5mb": {
|
|
130
|
+
id: 'app.containers.Line.Edit.uploadFileSizeError',
|
|
131
|
+
defaultMessage: 'File size cannot be more than 5mb',
|
|
132
|
+
},
|
|
133
|
+
"value cannot be empty.": {
|
|
134
|
+
id: 'app.containers.Line.Edit.valueCantEmpty',
|
|
135
|
+
defaultMessage: 'value cannot be empty.',
|
|
136
|
+
},
|
|
137
|
+
"Uploading Image...": {
|
|
138
|
+
id: 'app.containers.Line.Edit.uploadingImage',
|
|
139
|
+
defaultMessage: 'Uploading Image...',
|
|
140
|
+
},
|
|
141
|
+
"Campaigns": {
|
|
142
|
+
id: 'app.containers.Line.Edit.Campaigns',
|
|
143
|
+
defaultMessage: 'Campaigns',
|
|
144
|
+
},
|
|
145
|
+
"Creatives": {
|
|
146
|
+
id: 'app.containers.Line.Edit.Creatives',
|
|
147
|
+
defaultMessage: 'Creatives',
|
|
148
|
+
},
|
|
149
|
+
"Line": {
|
|
150
|
+
id: 'app.containers.Line.Edit.mobilePush',
|
|
151
|
+
defaultMessage: 'Mobile Push',
|
|
152
|
+
},
|
|
153
|
+
"template not configured,": {
|
|
154
|
+
id: 'app.containers.Line.Edit.templateNotConfigured',
|
|
155
|
+
defaultMessage: 'template not configured,',
|
|
156
|
+
},
|
|
157
|
+
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Create reducer
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { fromJS } from 'immutable';
|
|
8
|
+
import * as types from './constants';
|
|
9
|
+
|
|
10
|
+
const initialState = fromJS({
|
|
11
|
+
editTemplateInProgress: false,
|
|
12
|
+
editResponse: {},
|
|
13
|
+
getTemplateDetailsInProgress: false,
|
|
14
|
+
templateDetails: {},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
function editReducer(state = initialState, action) {
|
|
18
|
+
switch (action.type) {
|
|
19
|
+
case types.DEFAULT_ACTION:
|
|
20
|
+
return state;
|
|
21
|
+
case types.EDIT_TEMPLATE_REQUEST:
|
|
22
|
+
return state
|
|
23
|
+
.set('editTemplateInProgress', true)
|
|
24
|
+
.set('editTemplateError', false)
|
|
25
|
+
.set('editTemplateErrorMessage', fromJS(""));
|
|
26
|
+
case types.EDIT_TEMPLATE_SUCCESS:
|
|
27
|
+
return state.set('editTemplateInProgress', false)
|
|
28
|
+
.set('editResponse', action.data)
|
|
29
|
+
.set('editTemplateError', (action.statusCode !== undefined && action.statusCode > 300))
|
|
30
|
+
.set('editTemplateErrorMessage', fromJS(action.errorMsg));
|
|
31
|
+
case types.EDIT_TEMPLATE_FAILURE:
|
|
32
|
+
return state
|
|
33
|
+
.set('editTemplateInProgress', false)
|
|
34
|
+
.set('editTemplateError', true)
|
|
35
|
+
.set('editTemplateErrorMessage', fromJS(action.errorMsg));
|
|
36
|
+
case types.GET_TEMPLATE_DETAILS_REQUEST:
|
|
37
|
+
return state.set('getTemplateDetailsInProgress', true);
|
|
38
|
+
case types.GET_TEMPLATE_DETAILS_SUCCESS:
|
|
39
|
+
case types.SET_SELECTED_TEMPLATE:
|
|
40
|
+
return state.set('getTemplateDetailsInProgress', false)
|
|
41
|
+
.set('templateDetails', action.data);
|
|
42
|
+
case types.GET_TEMPLATE_DETAILS_FAILURE:
|
|
43
|
+
return state.set('getTemplateDetailsInProgress', false);
|
|
44
|
+
case types.CLEAR_EDIT_RESPONSE_REQUEST:
|
|
45
|
+
return state.set('editResponse', {});
|
|
46
|
+
case types.UPLOAD_ASSET_REQUEST:
|
|
47
|
+
return state
|
|
48
|
+
.set('uploadAssetSuccess', false)
|
|
49
|
+
.set('assetUploading', true);
|
|
50
|
+
case types.UPLOAD_ASSET_SUCCESS:
|
|
51
|
+
return state
|
|
52
|
+
.set('uploadAssetSuccess', (action.statusCode !== undefined && action.statusCode !== '' && action.statusCode < 300))
|
|
53
|
+
.set('assetUploading', false)
|
|
54
|
+
.set('uploadedAssetData', action.data);
|
|
55
|
+
case types.UPLOAD_ASSET_FAILURE:
|
|
56
|
+
return state
|
|
57
|
+
.set('uploadAssetSuccess', false)
|
|
58
|
+
.set('assetUploading', false);
|
|
59
|
+
case types.CLEAR_DATA:
|
|
60
|
+
return state
|
|
61
|
+
.delete('uploadedAssetData')
|
|
62
|
+
.delete('metaEntities')
|
|
63
|
+
.delete('templateDetails');
|
|
64
|
+
case types.CLEAR_ASSET:
|
|
65
|
+
return state
|
|
66
|
+
.delete('uploadedAssetData');
|
|
67
|
+
case types.GET_LINE_TEMPLATES_LIST_REQUEST:
|
|
68
|
+
return state
|
|
69
|
+
.set('fetchingDefaultTemplates', true);
|
|
70
|
+
case types.GET_LINE_TEMPLATES_LIST_SUCCESS:
|
|
71
|
+
return state
|
|
72
|
+
.set('fetchingDefaultTemplates', false)
|
|
73
|
+
.set('lineTemplates', fromJS(action.data));
|
|
74
|
+
case types.GET_LINE_TEMPLATES_LIST_FAILURE:
|
|
75
|
+
return state
|
|
76
|
+
.set('fetchingDefaultTemplates', false)
|
|
77
|
+
.set('errorFetchingDefaultTempalte', true);
|
|
78
|
+
default:
|
|
79
|
+
return state;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export default editReducer;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { call, put, takeLatest, take, cancel } from 'redux-saga/effects';
|
|
2
|
+
import { LOCATION_CHANGE } from 'react-router-redux';
|
|
3
|
+
// import { schema, normalize } from 'normalizr';
|
|
4
|
+
import * as Api from '../../../services/api';
|
|
5
|
+
import * as types from './constants';
|
|
6
|
+
|
|
7
|
+
// Individual exports for testing
|
|
8
|
+
export function* editTemplate(template) {
|
|
9
|
+
let errorMsg;
|
|
10
|
+
try {
|
|
11
|
+
console.log('saga editTemplate line', template);
|
|
12
|
+
const result = yield call(Api.createLineTemplate, template);
|
|
13
|
+
console.log('saga editTemplate success line', result);
|
|
14
|
+
if (result.message || result.status.code === 500) {
|
|
15
|
+
errorMsg = result.message;
|
|
16
|
+
}
|
|
17
|
+
yield put({ type: types.EDIT_TEMPLATE_SUCCESS, data: result.response, statusCode: result.status ? result.status.code : '', errorMsg });
|
|
18
|
+
} catch (error) {
|
|
19
|
+
yield put({ type: types.EDIT_TEMPLATE_FAILURE, error, errorMsg });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function* getTemplateDetails(id) {
|
|
24
|
+
try {
|
|
25
|
+
console.log('saga get Template details line', id);
|
|
26
|
+
const result = yield call(Api.getTemplateDetails, id);
|
|
27
|
+
// const sidebar = result.response.sidebar;
|
|
28
|
+
yield put({ type: types.GET_TEMPLATE_DETAILS_SUCCESS, data: result.response });
|
|
29
|
+
} catch (error) {
|
|
30
|
+
yield put({ type: types.GET_TEMPLATE_DETAILS_FAILURE, error });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function* uploadAsset(file, assetType, fileParams, mode) {
|
|
35
|
+
try {
|
|
36
|
+
const result = yield call(Api.uploadFile, file, assetType, fileParams, mode);
|
|
37
|
+
yield put({ type: types.UPLOAD_ASSET_SUCCESS, data: result.response.asset, statusCode: result.status ? result.status.code : '' });
|
|
38
|
+
} catch (error) {
|
|
39
|
+
yield put({ type: types.UPLOAD_ASSET_FAILURE, error });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function* getLineTemplatesList(params) {
|
|
44
|
+
try {
|
|
45
|
+
console.log('Saga param line ', params.channel, params.queryParams);
|
|
46
|
+
const result = yield call(Api.getAllTemplates, {channel: params.channel, queryParams: params.queryParams});
|
|
47
|
+
yield put({ type: types.GET_LINE_TEMPLATES_LIST_SUCCESS, data: result.response.templates, templateData: result.response.mapped});
|
|
48
|
+
} catch (error) {
|
|
49
|
+
yield put({ type: types.GET_LINE_TEMPLATES_LIST_FAILURE, error });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function* watchEditTemplate() {
|
|
54
|
+
const watcher = yield takeLatest(types.EDIT_TEMPLATE_REQUEST, editTemplate);
|
|
55
|
+
yield take(LOCATION_CHANGE);
|
|
56
|
+
yield cancel(watcher);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function* watchGetTemplateDetails() {
|
|
60
|
+
const watcher = yield takeLatest(types.GET_TEMPLATE_DETAILS_REQUEST, getTemplateDetails);
|
|
61
|
+
yield take(LOCATION_CHANGE);
|
|
62
|
+
yield cancel(watcher);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function* watchUploadAsset() {
|
|
66
|
+
const watcher = yield takeLatest(types.UPLOAD_ASSET_REQUEST, uploadAsset);
|
|
67
|
+
yield take(LOCATION_CHANGE);
|
|
68
|
+
yield cancel(watcher);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function* watchLineTemplatesList() {
|
|
72
|
+
const watcher = yield takeLatest(types.GET_LINE_TEMPLATES_LIST_REQUEST, getLineTemplatesList);
|
|
73
|
+
yield take(LOCATION_CHANGE);
|
|
74
|
+
yield cancel(watcher);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// All sagas to be loaded
|
|
78
|
+
export default [
|
|
79
|
+
watchEditTemplate, watchGetTemplateDetails, watchLineTemplatesList,
|
|
80
|
+
watchUploadAsset,
|
|
81
|
+
];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Direct selector to the create state domain
|
|
5
|
+
*/
|
|
6
|
+
const selectLineEditDomain = () => (state) => state.get('edit');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Other specific selectors
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Default selector used by Create
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const makeSelectEdit = () => createSelector(
|
|
18
|
+
selectLineEditDomain(),
|
|
19
|
+
(substate) => substate.toJS()
|
|
20
|
+
);
|
|
21
|
+
const makeSelectEditResponse = () => createSelector(
|
|
22
|
+
selectLineEditDomain(), (dimensionState) => dimensionState.get('editResponse')
|
|
23
|
+
);
|
|
24
|
+
const makeSelectTemplateDetailsResponse = () => createSelector(
|
|
25
|
+
selectLineEditDomain(), (dimensionState) => dimensionState.get('templateDetails')
|
|
26
|
+
);
|
|
27
|
+
export {
|
|
28
|
+
makeSelectEdit, makeSelectEditResponse, makeSelectTemplateDetailsResponse,
|
|
29
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
import {
|
|
3
|
+
defaultAction,
|
|
4
|
+
} from '../actions';
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_ACTION,
|
|
7
|
+
} from '../constants';
|
|
8
|
+
|
|
9
|
+
describe('Create actions', () => {
|
|
10
|
+
describe('Default Action', () => {
|
|
11
|
+
it('has a type of DEFAULT_ACTION', () => {
|
|
12
|
+
const expected = {
|
|
13
|
+
type: DEFAULT_ACTION,
|
|
14
|
+
};
|
|
15
|
+
expect(defaultAction()).toEqual(expected);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test sagas
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/* eslint-disable redux-saga/yield-effects */
|
|
6
|
+
// import { take, call, put, select } from 'redux-saga/effects';
|
|
7
|
+
// import { defaultSaga } from '../sagas';
|
|
8
|
+
|
|
9
|
+
// const generator = defaultSaga();
|
|
10
|
+
|
|
11
|
+
describe('defaultSaga Saga', () => {
|
|
12
|
+
it('Expect to have unit tests specified', () => {
|
|
13
|
+
expect(true).toEqual(false);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// import { fromJS } from 'immutable';
|
|
2
|
+
// import { makeSelectCreateDomain } from '../selectors';
|
|
3
|
+
|
|
4
|
+
// const selector = makeSelectCreateDomain();
|
|
5
|
+
|
|
6
|
+
describe('makeSelectCreateDomain', () => {
|
|
7
|
+
it('Expect to have unit tests specified', () => {
|
|
8
|
+
expect(true).toEqual(false);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Form, Icon } from 'antd';
|
|
4
|
+
import { CapInput, CapButton } from '@capillarytech/cap-ui-library';
|
|
5
|
+
const FormItem = Form.Item;
|
|
6
|
+
|
|
7
|
+
class NormalLoginForm extends React.Component {
|
|
8
|
+
handleSubmit = (e) => {
|
|
9
|
+
e.preventDefault();
|
|
10
|
+
this.props.form.validateFields((err, values) => {
|
|
11
|
+
if (!err) {
|
|
12
|
+
this.props.authenticate(values);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
render() {
|
|
18
|
+
const { getFieldDecorator } = this.props.form;
|
|
19
|
+
return (
|
|
20
|
+
<Form onSubmit={this.handleSubmit} className="login-form">
|
|
21
|
+
<FormItem className="login-form-item">
|
|
22
|
+
{getFieldDecorator('username', {
|
|
23
|
+
rules: [{ required: true, message: 'Please input your username!' }],
|
|
24
|
+
})(
|
|
25
|
+
<CapInput prefix={<Icon type="user" style={{ fontSize: 13 }} />} placeholder="Username" />
|
|
26
|
+
)}
|
|
27
|
+
</FormItem>
|
|
28
|
+
<FormItem className="login-form-item">
|
|
29
|
+
{getFieldDecorator('password', {
|
|
30
|
+
rules: [{ required: true, message: 'Please input your Password!' }],
|
|
31
|
+
})(
|
|
32
|
+
<CapInput prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder="Password" />
|
|
33
|
+
)}
|
|
34
|
+
</FormItem>
|
|
35
|
+
{this.props.isError
|
|
36
|
+
? <FormItem>
|
|
37
|
+
<span style={{color: "red"}}>{"Invalid or Incorrect credentials!"}</span>
|
|
38
|
+
</FormItem>
|
|
39
|
+
: null
|
|
40
|
+
}
|
|
41
|
+
<FormItem>
|
|
42
|
+
<CapButton loading={this.props.loginInProgress} type="primary" htmlType="submit" className="login-form-button">
|
|
43
|
+
Log in
|
|
44
|
+
</CapButton>
|
|
45
|
+
</FormItem>
|
|
46
|
+
</Form>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
NormalLoginForm.propTypes = {
|
|
52
|
+
authenticate: PropTypes.func.isRequired,
|
|
53
|
+
loginInProgress: PropTypes.bool,
|
|
54
|
+
isError: PropTypes.bool,
|
|
55
|
+
form: PropTypes.object,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const WrappedNormalLoginForm = Form.create()(NormalLoginForm);
|
|
59
|
+
export default WrappedNormalLoginForm;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* LoginForm Messages
|
|
3
|
+
*
|
|
4
|
+
* This contains all the text for the LoginForm component.
|
|
5
|
+
*/
|
|
6
|
+
import { defineMessages } from 'react-intl';
|
|
7
|
+
|
|
8
|
+
export default defineMessages({
|
|
9
|
+
username: {
|
|
10
|
+
id: 'reon.modules.Login.components.LoginForm.input.username',
|
|
11
|
+
defaultMessage: 'Username or Email',
|
|
12
|
+
},
|
|
13
|
+
password: {
|
|
14
|
+
id: 'reon.modules.Login.components.LoginForm.input.password',
|
|
15
|
+
defaultMessage: 'Password',
|
|
16
|
+
},
|
|
17
|
+
loginButton: {
|
|
18
|
+
id: 'reon.modules.Login.components.LoginForm.input.loginButton',
|
|
19
|
+
defaultMessage: 'Login',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { connect } from 'react-redux';
|
|
4
|
+
import Helmet from 'react-helmet';
|
|
5
|
+
import { FormattedMessage } from 'react-intl';
|
|
6
|
+
import { routerActions } from 'react-router-redux';
|
|
7
|
+
import { Row, Col } from 'antd';
|
|
8
|
+
import { bindActionCreators } from 'redux';
|
|
9
|
+
import { createStructuredSelector } from 'reselect';
|
|
10
|
+
import makeSelectLogin from './selectors';
|
|
11
|
+
import messages from './messages';
|
|
12
|
+
import config from '../../config/app';
|
|
13
|
+
import LoginForm from './components/LoginForm';
|
|
14
|
+
import * as actions from '../../containers/Cap/actions';
|
|
15
|
+
import { UserIsNotAuthenticated } from '../../utils/authWrapper';
|
|
16
|
+
import loaderGif from '../../assets/loading_img.gif';
|
|
17
|
+
const logo = require('./assets/images/capillary_logo.png');
|
|
18
|
+
|
|
19
|
+
export class Login extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
|
20
|
+
constructor(props) {
|
|
21
|
+
super(props);
|
|
22
|
+
this.state = {
|
|
23
|
+
message: '',
|
|
24
|
+
isLoginError: false,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
componentWillMount() {
|
|
29
|
+
const isAuthenticated = this.props.Login.token !== '';
|
|
30
|
+
const replace = this.props.replace;
|
|
31
|
+
if ((this.props.Login.login_progress === false) && (this.props.Login.fetching_userdata === false) && isAuthenticated) {
|
|
32
|
+
replace(process.env.NODE_ENV === 'production' ? config.production.dashboard_url : config.development.dashboard_url);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
componentWillReceiveProps(nextProps) {
|
|
37
|
+
const isAuthenticated = nextProps.Login.token !== undefined && nextProps.Login.token !== '';
|
|
38
|
+
const wasAuthenticated = this.props.Login.token !== undefined && this.props.Login.token !== '';
|
|
39
|
+
if (this.props.Login && this.props.Login.isError) {
|
|
40
|
+
this.setState({ isLoginError: true });
|
|
41
|
+
} else {
|
|
42
|
+
this.setState({ isLoginError: false });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!wasAuthenticated && isAuthenticated) {
|
|
46
|
+
let redirectUrl = process.env.NODE_ENV === 'production' ? config.production.dashboard_url : config.development.dashboard_url;
|
|
47
|
+
if (this.props.location.query.redirect) redirectUrl = this.props.location.query.redirect;
|
|
48
|
+
this.props.router.push({ pathname: redirectUrl, state: {} });
|
|
49
|
+
this.props.router.go(redirectUrl);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
render() {
|
|
54
|
+
const loginProgress = this.props.Login.login_progress;
|
|
55
|
+
return (
|
|
56
|
+
<div className={this.props.Login.fetching_userdata ? "opacity-class" : ""}>
|
|
57
|
+
<FormattedMessage {...messages.pageTitle}>{(message) =>
|
|
58
|
+
<Helmet
|
|
59
|
+
title={message}
|
|
60
|
+
meta={[
|
|
61
|
+
{ name: 'description', content: 'Login Page' },
|
|
62
|
+
]}
|
|
63
|
+
/>}
|
|
64
|
+
</FormattedMessage>
|
|
65
|
+
<Row align="middle" justify="center" type="flex" className="login-container">
|
|
66
|
+
{process.env.NODE_ENV === "production"
|
|
67
|
+
? <div className="cap-loader-box">
|
|
68
|
+
<img
|
|
69
|
+
className="loader-image"
|
|
70
|
+
src={loaderGif}
|
|
71
|
+
alt="Capillary"/>
|
|
72
|
+
</div>
|
|
73
|
+
: <Col className="login-box" style={{textAlign: 'center'}}>
|
|
74
|
+
<h2 className="ui image header">
|
|
75
|
+
<img alt="" src={logo} className="login-logo" />
|
|
76
|
+
</h2>
|
|
77
|
+
<LoginForm isError={this.state.isLoginError} authenticate={this.props.actions.authenticate} loginInProgress={loginProgress} />
|
|
78
|
+
</Col>
|
|
79
|
+
}
|
|
80
|
+
</Row>
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Login.propTypes = {
|
|
87
|
+
actions: PropTypes.object.isRequired,
|
|
88
|
+
Login: PropTypes.object,
|
|
89
|
+
replace: PropTypes.func,
|
|
90
|
+
login_progress: PropTypes.bool,
|
|
91
|
+
location: PropTypes.object,
|
|
92
|
+
router: PropTypes.object,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const mapStateToProps = createStructuredSelector({
|
|
96
|
+
Login: makeSelectLogin(),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
function mapDispatchToProps(dispatch) {
|
|
100
|
+
return {
|
|
101
|
+
actions: bindActionCreators(actions, dispatch),
|
|
102
|
+
replace: routerActions.replace,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default UserIsNotAuthenticated(connect(mapStateToProps, mapDispatchToProps)(Login));
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Login Messages
|
|
3
|
+
*
|
|
4
|
+
* This contains all the text for the Login component.
|
|
5
|
+
*/
|
|
6
|
+
import { defineMessages } from 'react-intl';
|
|
7
|
+
|
|
8
|
+
export default defineMessages({
|
|
9
|
+
pageTitle: {
|
|
10
|
+
id: 'app.containers.Login.pageTitle',
|
|
11
|
+
defaultMessage: 'Login',
|
|
12
|
+
},
|
|
13
|
+
header: {
|
|
14
|
+
id: 'app.containers.Login.header',
|
|
15
|
+
defaultMessage: 'This is Login container change !',
|
|
16
|
+
},
|
|
17
|
+
invalidCredential: {
|
|
18
|
+
id: 'app.containers.Login.invalidCredential',
|
|
19
|
+
defaultMessage: 'Invalid Username or Password',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Direct selector to the login state domain
|
|
5
|
+
*/
|
|
6
|
+
const selectLoginDomain = () => (state) => state.get('cap');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Other specific selectors
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Default selector used by Login
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const makeSelectLogin = () => createSelector(
|
|
18
|
+
selectLoginDomain(),
|
|
19
|
+
(substate) => substate.toJS()
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default makeSelectLogin;
|
|
23
|
+
export {
|
|
24
|
+
selectLoginDomain,
|
|
25
|
+
};
|