@antscorp/antsomi-ui 2.0.101 → 2.0.103
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/README.md +78 -78
- package/es/__mocks__/1000_city.json +802 -802
- package/es/assets/css/main.scss +6 -6
- package/es/assets/images/components/Login/AuthenSuccess.png +0 -0
- package/es/assets/images/feedback.svg +3 -3
- package/es/assets/svg/mobile-frame.svg +3 -3
- package/es/assets/svg/warning-icon.svg +5 -5
- package/es/components/atoms/Alert/Alert.js +28 -28
- package/es/components/atoms/ContentEditable/styled.js +16 -16
- package/es/components/atoms/DividerPure/styled.js +35 -35
- package/es/components/atoms/Icon/index.js +19 -19
- package/es/components/atoms/Iframe/Iframe.js +18 -18
- package/es/components/atoms/Input/styled.js +104 -104
- package/es/components/atoms/InputDynamic/styled.js +284 -284
- package/es/components/atoms/MobileBrandingBar/styled.js +21 -21
- package/es/components/atoms/MobileFrame/styled.js +30 -30
- package/es/components/atoms/MobileFrameV2/styled.js +42 -42
- package/es/components/atoms/MobileFrameV3/styled.js +31 -31
- package/es/components/atoms/NotificationStatus/NotificationStatus.d.ts +12 -0
- package/es/components/atoms/NotificationStatus/NotificationStatus.js +27 -0
- package/es/components/atoms/NotificationStatus/constants/index.d.ts +15 -0
- package/es/components/atoms/NotificationStatus/constants/index.js +15 -0
- package/es/components/atoms/NotificationStatus/index.d.ts +1 -0
- package/es/components/atoms/NotificationStatus/index.js +1 -0
- package/es/components/atoms/NotificationStatus/styled.d.ts +3 -0
- package/es/components/atoms/NotificationStatus/styled.js +14 -0
- package/es/components/atoms/PreviewTabs/styled.js +69 -69
- package/es/components/atoms/Radio/index.js +16 -16
- package/es/components/atoms/ReactIframe/ReactIframe.js +5 -5
- package/es/components/atoms/ReactIframe/styled.js +9 -9
- package/es/components/atoms/RequiredLabel/styled.js +3 -3
- package/es/components/atoms/ScrollBox/index.js +5 -5
- package/es/components/atoms/Scrollbars/styled.js +21 -21
- package/es/components/atoms/SlideBar/styled.js +194 -194
- package/es/components/atoms/Slider/styled.js +31 -31
- package/es/components/atoms/Space/Space.js +4 -4
- package/es/components/atoms/Spin/styled.js +11 -11
- package/es/components/atoms/Steps/styled.js +244 -244
- package/es/components/atoms/Switch/styled.js +56 -56
- package/es/components/atoms/Tag/Tag.js +10 -10
- package/es/components/atoms/Text/styled.js +34 -34
- package/es/components/atoms/index.d.ts +1 -0
- package/es/components/atoms/index.js +1 -0
- package/es/components/icons/DomainManagementIcon.js +1 -1
- package/es/components/icons/KeyValueIcon.d.ts +3 -0
- package/es/components/icons/KeyValueIcon.js +7 -0
- package/es/components/icons/LazyIcon/LazyIcon.d.ts +11 -10
- package/es/components/icons/LazyIcon/LazyIcon.js +11 -10
- package/es/components/icons/LoadingIcon.js +33 -33
- package/es/components/icons/document/styled.js +43 -43
- package/es/components/icons/index.d.ts +11 -10
- package/es/components/icons/index.js +11 -10
- package/es/components/molecules/AccessDenied/styled.js +28 -28
- package/es/components/molecules/AccountSelection/styled.js +110 -110
- package/es/components/molecules/AddDynamicContent/styled.js +23 -23
- package/es/components/molecules/AlignSetting/styled.js +4 -4
- package/es/components/molecules/ApplyPopupContent/styled.js +32 -32
- package/es/components/molecules/CalendarSelection/components/AutoUpdateTo/styled.js +8 -8
- package/es/components/molecules/CalendarSelection/components/CustomPicker/styled.js +79 -79
- package/es/components/molecules/CalendarSelection/components/Footer/styled.js +4 -4
- package/es/components/molecules/CalendarSelection/components/RangePicker/styled.js +21 -21
- package/es/components/molecules/CalendarSelection/components/RangeSelectOptions/components/Option/Option.js +26 -26
- package/es/components/molecules/CalendarSelection/components/RangeSelectOptions/styled.js +30 -30
- package/es/components/molecules/CalendarSelection/components/TimeRangeDisplay/styled.js +26 -26
- package/es/components/molecules/CalendarSelection/styled.js +8 -8
- package/es/components/molecules/CaptureScreen/components/CommentBox/styled.js +119 -119
- package/es/components/molecules/CaptureScreen/components/Cursor/styled.js +67 -67
- package/es/components/molecules/CaptureScreen/styled.js +240 -240
- package/es/components/molecules/ChartTab/components/styled.js +24 -24
- package/es/components/molecules/ChartTab/styled.js +20 -20
- package/es/components/molecules/ChatBox/AntsomiAI.js +8 -8
- package/es/components/molecules/ChatBox/ChatBoxInsight/QuestionItem.js +9 -9
- package/es/components/molecules/ChatBox/ChatBoxInsight/styled.js +365 -365
- package/es/components/molecules/ChatBox/styled.js +324 -324
- package/es/components/molecules/CodeStructure/styled.js +5 -5
- package/es/components/molecules/ColorPicker/ChromePicker/styled.js +10 -10
- package/es/components/molecules/ColorPicker/CustomPicker/styled.js +89 -89
- package/es/components/molecules/ColorPicker/SketchPicker/styled.js +5 -5
- package/es/components/molecules/ColorPicker/styled.js +7 -7
- package/es/components/molecules/ColorSetting/styled.js +39 -39
- package/es/components/molecules/DatePicker/components/AdvancedPicker/styled.js +110 -110
- package/es/components/molecules/DatePickerV2/styled.js +6 -6
- package/es/components/molecules/DisplayFormat/styled.js +12 -12
- package/es/components/molecules/DrawerDetail/components/ToggleDrawerSizeButton.js +24 -24
- package/es/components/molecules/DrawerDetail/styled.js +109 -109
- package/es/components/molecules/Dropdown/style.scss +11 -11
- package/es/components/molecules/Dropdown/styled.js +28 -28
- package/es/components/molecules/EdgeSetting/styled.js +10 -10
- package/es/components/molecules/EditableName/styled.js +70 -70
- package/es/components/molecules/EditingList/styled.js +29 -29
- package/es/components/molecules/EditorTab/styled.js +156 -156
- package/es/components/molecules/EmojiCollections/styled.js +22 -22
- package/es/components/molecules/EmojiPopover/styled.js +4 -4
- package/es/components/molecules/EmptyData/styled.js +53 -53
- package/es/components/molecules/GradientSetting/styled.js +57 -57
- package/es/components/molecules/HeaderV2/styled.js +70 -70
- package/es/components/molecules/IconSelection/styled.js +69 -69
- package/es/components/molecules/ImageEditor/components/ModalShortcut.js +21 -21
- package/es/components/molecules/ImageEditor/styled.js +5 -5
- package/es/components/molecules/ImagePreview/styled.js +3 -3
- package/es/components/molecules/InputNumberWithUnit/styled.js +14 -14
- package/es/components/molecules/InputSearch/styled.js +41 -41
- package/es/components/molecules/ItemNotFound/styled.js +26 -26
- package/es/components/molecules/MatchAnySelect/components/ExtendValuePopup.js +8 -8
- package/es/components/molecules/MatchAnySelect/styled.js +247 -247
- package/es/components/molecules/Modal/styled.js +63 -63
- package/es/components/molecules/ModalSelect/styled.js +152 -152
- package/es/components/molecules/ModalV2/styled.js +27 -27
- package/es/components/molecules/PopupDraggable/styled.js +57 -57
- package/es/components/molecules/PreviewModal/styled.js +26 -26
- package/es/components/molecules/ProcessLoading/styled.js +2 -2
- package/es/components/molecules/QuillEditor/CustomToolbar.js +3165 -3165
- package/es/components/molecules/QuillEditor/EditorToolbar.js +7 -7
- package/es/components/molecules/QuillEditor/styled.js +25 -25
- package/es/components/molecules/RadioGroup/styled.js +9 -9
- package/es/components/molecules/RequestAccess/styled.js +38 -38
- package/es/components/molecules/ResizeGrid/components/Cell/styled.js +77 -77
- package/es/components/molecules/ResizeGrid/styled.js +50 -50
- package/es/components/molecules/RichMenu/RichMenuBlock/RichMenuCell/styled.js +118 -118
- package/es/components/molecules/RichMenu/RichMenuBlock/styled.js +13 -13
- package/es/components/molecules/RichMenu/RichMenuChatBar/TypingChat/styled.js +40 -40
- package/es/components/molecules/RichMenu/RichMenuChatBar/styled.js +27 -27
- package/es/components/molecules/RichMenu/RichMenuMobileView/RichMenuMobileView.js +2 -2
- package/es/components/molecules/RichMenu/RichMenuMobileView/styled.js +38 -38
- package/es/components/molecules/SearchPopover/components/PopoverSelect/styled.js +36 -36
- package/es/components/molecules/SearchPopover/components/PopoverSelect/styles.scss +7 -7
- package/es/components/molecules/SearchPopover/styled.js +32 -32
- package/es/components/molecules/Select/styled.js +32 -32
- package/es/components/molecules/SelectAccount/styled.js +147 -147
- package/es/components/molecules/SelectEventAttribute/styled.js +8 -8
- package/es/components/molecules/SelectMulti/styled.js +62 -62
- package/es/components/molecules/SelectV2/styled.js +124 -124
- package/es/components/molecules/SettingWrapper/styled.js +12 -12
- package/es/components/molecules/ShareAccess/components/GeneralAccess/styled.js +56 -56
- package/es/components/molecules/ShareAccess/components/LayoutContent/styled.js +5 -5
- package/es/components/molecules/ShareAccess/components/ModalTransferOwnerShip/styled.js +15 -15
- package/es/components/molecules/ShareAccess/components/PeopleAccess/styled.js +63 -63
- package/es/components/molecules/ShareAccess/components/SearchUser/styled.js +31 -31
- package/es/components/molecules/SliderWithInputNumber/styled.js +2 -2
- package/es/components/molecules/Tabs/Tabs.js +11 -11
- package/es/components/molecules/TagifyInput/TagifyInput.js +50 -50
- package/es/components/molecules/TagifyInput/styled.js +37 -37
- package/es/components/molecules/TagifyInput/utils.js +13 -13
- package/es/components/molecules/TagifyInput/utils.style.js +217 -217
- package/es/components/molecules/TemplateSaveAs/components/Category/Category.js +5 -5
- package/es/components/molecules/TemplateSaveAs/components/ImageSlider/styled.js +276 -276
- package/es/components/molecules/TemplateSaveAs/styled.js +134 -134
- package/es/components/molecules/ThumbnailCard/styled.js +92 -92
- package/es/components/molecules/Tree/styled.js +38 -38
- package/es/components/molecules/UploadImage/styled.js +114 -114
- package/es/components/molecules/VirtualizedMenu/styled.js +82 -82
- package/es/components/organism/AccountProfile/components/AccountSetting/components/EditableInput/styles.js +98 -98
- package/es/components/organism/AccountProfile/components/AccountSetting/components/LanguageSelector/styles.js +18 -18
- package/es/components/organism/AccountProfile/components/AccountSetting/styled.js +543 -543
- package/es/components/organism/AccountProfile/components/AccountSetting/styles.scss +39 -39
- package/es/components/organism/AccountSharing/styled.js +336 -336
- package/es/components/organism/ActivityTimeline/components/ActionHistory/styled.js +28 -28
- package/es/components/organism/ActivityTimeline/components/CardMember/styled.js +60 -60
- package/es/components/organism/ActivityTimeline/components/ItemGroupEvent/styled.js +4 -4
- package/es/components/organism/ActivityTimeline/components/List/styled.js +77 -77
- package/es/components/organism/ActivityTimeline/components/ListItem/styled.js +37 -37
- package/es/components/organism/ActivityTimeline/components/ProductCard/styled.js +92 -92
- package/es/components/organism/ActivityTimeline/components/Redeem/styled.js +7 -7
- package/es/components/organism/ActivityTimeline/components/Slide/styled.js +20 -20
- package/es/components/organism/ActivityTimeline/components/TimeLineTitle/styled.js +7 -7
- package/es/components/organism/ActivityTimeline/components/TimelineSection/styled.js +69 -69
- package/es/components/organism/ActivityTimeline/styled.js +39 -39
- package/es/components/organism/AlgorithmsSetting/styled.js +35 -35
- package/es/components/organism/BasicLogin/BasicLogin.d.ts +3 -0
- package/es/components/organism/BasicLogin/BasicLogin.js +147 -0
- package/es/components/organism/BasicLogin/__tests__/index.spec.d.ts +0 -0
- package/es/components/organism/BasicLogin/__tests__/index.spec.js +46 -0
- package/es/components/organism/BasicLogin/components/AuthenticateResult/AuthenticateResult.d.ts +8 -0
- package/es/components/organism/BasicLogin/components/AuthenticateResult/AuthenticateResult.js +23 -0
- package/es/components/organism/BasicLogin/components/AuthenticateResult/index.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/AuthenticateResult/index.js +1 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/ChooseMethod.d.ts +9 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/ChooseMethod.js +54 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/Method.d.ts +10 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/Method.js +13 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/index.d.ts +2 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/index.js +2 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/styled.d.ts +10 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/styled.js +24 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/utils.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/utils.js +1 -0
- package/es/components/organism/BasicLogin/components/LoginWithEmail/LoginWithEmail.d.ts +14 -0
- package/es/components/organism/BasicLogin/components/LoginWithEmail/LoginWithEmail.js +192 -0
- package/es/components/organism/BasicLogin/components/LoginWithEmail/index.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/LoginWithEmail/index.js +1 -0
- package/es/components/organism/{Login/components/LoginStep2 → BasicLogin/components/LoginWithEmail}/styled.js +3 -3
- package/es/components/organism/BasicLogin/components/LoginWithGG/LoginWithGG.d.ts +12 -0
- package/es/components/organism/BasicLogin/components/LoginWithGG/LoginWithGG.js +107 -0
- package/es/components/organism/BasicLogin/components/LoginWithGG/index.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/LoginWithGG/index.js +1 -0
- package/es/components/organism/BasicLogin/components/LoginWithGG/styled.d.ts +3 -0
- package/es/components/organism/BasicLogin/components/LoginWithGG/styled.js +5 -0
- package/es/components/organism/BasicLogin/components/SignIn/SignIn.d.ts +14 -0
- package/es/components/organism/BasicLogin/components/SignIn/SignIn.js +66 -0
- package/es/components/organism/BasicLogin/components/SignIn/index.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/SignIn/index.js +1 -0
- package/es/components/organism/BasicLogin/components/SignIn/styled.d.ts +3 -0
- package/es/components/organism/BasicLogin/components/SignIn/styled.js +10 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/WidgetLayout.d.ts +13 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/WidgetLayout.js +18 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/index.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/index.js +1 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/styled.d.ts +5 -0
- package/es/components/organism/BasicLogin/components/WidgetLayout/styled.js +22 -0
- package/es/components/organism/BasicLogin/components/index.d.ts +5 -0
- package/es/components/organism/BasicLogin/components/index.js +5 -0
- package/es/components/organism/BasicLogin/constants/index.d.ts +26 -0
- package/es/components/organism/BasicLogin/constants/index.js +26 -0
- package/es/components/organism/BasicLogin/index.d.ts +2 -0
- package/es/components/organism/BasicLogin/index.js +2 -0
- package/es/components/organism/BasicLogin/styled.d.ts +50 -0
- package/es/components/organism/BasicLogin/styled.js +120 -0
- package/es/components/organism/BasicLogin/types/index.d.ts +36 -0
- package/es/components/organism/BasicLogin/types/index.js +1 -0
- package/es/components/organism/BasicLogin/utils.d.ts +8 -0
- package/es/components/organism/BasicLogin/utils.js +18 -0
- package/es/components/organism/ContentSources/styled.js +50 -50
- package/es/components/organism/DataTable/components/AddButton/index.js +8 -8
- package/es/components/organism/DataTable/components/ModifyColumn/styled.js +18 -18
- package/es/components/organism/DataTable/components/Pagination/styled.js +26 -26
- package/es/components/organism/DataTable/components/Table/styled.js +135 -135
- package/es/components/organism/DataTable/components/Toolbar/SearchPopover.js +17 -17
- package/es/components/organism/DataTable/components/Toolbar/styled.js +70 -70
- package/es/components/organism/DataTable/styled/index.js +84 -84
- package/es/components/organism/Filter/components/FilterCondition/styled.js +34 -34
- package/es/components/organism/Filter/styled.js +109 -109
- package/es/components/organism/FilterSetting/components/common/InputArray/styled.js +5 -5
- package/es/components/organism/FilterSetting/components/common/InputOrSelect/index.js +63 -63
- package/es/components/organism/FilterSetting/components/common/InputSelectMulti/ColumnSuggestion/index.js +31 -31
- package/es/components/organism/FilterSetting/components/common/InputSelectMulti/Tree/index.js +22 -22
- package/es/components/organism/FilterSetting/components/common/InputSelectMulti/index.js +55 -55
- package/es/components/organism/FilterSetting/styled.js +19 -19
- package/es/components/organism/Help/styled.js +267 -267
- package/es/components/organism/LeftMenu/components/HomeMenu/styled.js +39 -39
- package/es/components/organism/LeftMenu/components/common/ChildMenu/components/MenuItemImage/styled.js +16 -16
- package/es/components/organism/LeftMenu/components/common/ChildMenu/styled.js +156 -156
- package/es/components/organism/LeftMenu/hooks/usePermission.js +1 -1
- package/es/components/organism/LeftMenu/styled.js +214 -214
- package/es/components/organism/Login/Login.js +71 -17
- package/es/components/organism/Login/components/ChooseMethod/ChooseMethod.d.ts +9 -0
- package/es/components/organism/Login/components/ChooseMethod/ChooseMethod.js +54 -0
- package/es/components/organism/Login/components/ChooseMethod/Method.d.ts +10 -0
- package/es/components/organism/Login/components/ChooseMethod/Method.js +13 -0
- package/es/components/organism/Login/components/ChooseMethod/index.d.ts +1 -0
- package/es/components/organism/Login/components/ChooseMethod/index.js +1 -0
- package/es/components/organism/Login/components/ChooseMethod/styled.d.ts +10 -0
- package/es/components/organism/Login/components/ChooseMethod/styled.js +24 -0
- package/es/components/organism/Login/components/ChooseMethod/utils.d.ts +1 -0
- package/es/components/organism/Login/components/ChooseMethod/utils.js +1 -0
- package/es/components/organism/Login/components/ForgotPassword/styled.js +8 -8
- package/es/components/organism/Login/components/LoginSelectPortal/Item/styled.js +31 -31
- package/es/components/organism/Login/components/LoginSelectPortal/styled.js +3 -3
- package/es/components/organism/Login/components/LoginWithEmail/LoginWithEmail.d.ts +15 -0
- package/es/components/organism/Login/components/LoginWithEmail/LoginWithEmail.js +211 -0
- package/es/components/organism/Login/components/LoginWithEmail/index.d.ts +1 -0
- package/es/components/organism/Login/components/LoginWithEmail/index.js +1 -0
- package/es/components/organism/Login/components/LoginWithEmail/styled.d.ts +3 -0
- package/es/components/organism/Login/components/LoginWithEmail/styled.js +5 -0
- package/es/components/organism/Login/components/{LoginStep2/LoginStep2.d.ts → LoginWithGG/LoginWithGG.d.ts} +1 -1
- package/es/components/organism/Login/components/{LoginStep2/LoginStep2.js → LoginWithGG/LoginWithGG.js} +6 -20
- package/es/components/organism/Login/components/LoginWithGG/index.d.ts +1 -0
- package/es/components/organism/Login/components/LoginWithGG/index.js +1 -0
- package/es/components/organism/Login/components/LoginWithGG/styled.d.ts +3 -0
- package/es/components/organism/Login/components/LoginWithGG/styled.js +5 -0
- package/es/components/organism/Login/components/SetupGGAuthenticator/SetupGGAuthenticator.js +1 -1
- package/es/components/organism/Login/components/SetupGGAuthenticator/styled.js +7 -7
- package/es/components/organism/Login/components/SignIn/styled.js +8 -8
- package/es/components/organism/Login/components/VerifyAccount/styled.js +13 -13
- package/es/components/organism/Login/components/WidgetLayout/WidgetLayout.js +3 -3
- package/es/components/organism/Login/components/WidgetLayout/styled.js +18 -18
- package/es/components/organism/Login/components/index.d.ts +3 -1
- package/es/components/organism/Login/components/index.js +3 -1
- package/es/components/organism/Login/constants/index.d.ts +25 -1
- package/es/components/organism/Login/constants/index.js +25 -1
- package/es/components/organism/Login/styled.d.ts +2 -1
- package/es/components/organism/Login/styled.js +115 -114
- package/es/components/organism/Login/types/index.d.ts +7 -0
- package/es/components/organism/Login/utils/index.d.ts +1 -0
- package/es/components/organism/Login/utils/index.js +8 -0
- package/es/components/organism/Menu/styled.js +6 -6
- package/es/components/organism/ModifyColumnModal/styled.js +132 -132
- package/es/components/organism/Notification/styled.js +155 -155
- package/es/components/organism/PreviewCollections/Messages/SkeletonMessage/styled.js +14 -14
- package/es/components/organism/PreviewCollections/WhatsappMessage/CarouselMessage/styled.js +63 -63
- package/es/components/organism/PreviewCollections/constants.js +50 -50
- package/es/components/organism/PreviewCollections/styled.js +16 -16
- package/es/components/organism/PreviewTemplateModal/components/Banner/styled.js +78 -78
- package/es/components/organism/PreviewTemplateModal/components/Information/styled.js +52 -52
- package/es/components/organism/PreviewTemplateModal/components/SimilarTemplate/styled.js +18 -18
- package/es/components/organism/PreviewTemplateModal/components/ThumbnailSlider/styled.js +75 -75
- package/es/components/organism/PreviewTemplateModal/styled.js +21 -21
- package/es/components/organism/Table/CrossTabTable/components/CustomCell/styled.js +11 -11
- package/es/components/organism/Table/CrossTabTable/styled.js +11 -11
- package/es/components/organism/Table/ExplorePivotTable/components/CustomCell/styled.js +17 -17
- package/es/components/organism/Table/ExplorePivotTable/styled.js +11 -11
- package/es/components/organism/TicketEditor/styled.js +850 -850
- package/es/components/organism/TicketEditorV2/styled.js +839 -839
- package/es/components/organism/index.d.ts +1 -0
- package/es/components/organism/index.js +1 -0
- package/es/components/template/Layout/Layout.js +10 -10
- package/es/components/template/Layout/components/RecommendationWorkspace/components/MenuMapping/components/OldLeftMenu/index.js +2 -2
- package/es/components/template/Layout/components/RecommendationWorkspace/components/MenuMapping/components/OldLeftMenu/styled.js +73 -73
- package/es/components/template/Layout/components/RecommendationWorkspace/components/MenuMapping/styled.js +39 -39
- package/es/components/template/Layout/components/RecommendationWorkspace/components/RecommendationImage/styled.js +61 -61
- package/es/components/template/Layout/components/RecommendationWorkspace/styled.js +16 -16
- package/es/components/template/Layout/styled.js +84 -84
- package/es/components/template/TemplateListing/components/BlankTemplate/styled.js +21 -21
- package/es/components/template/TemplateListing/components/CategoryListing/styled.js +123 -123
- package/es/components/template/TemplateListing/components/Empty/styled.js +20 -20
- package/es/components/template/TemplateListing/stories/demo/styled.js +4 -4
- package/es/components/template/TemplateListing/styled/index.js +40 -40
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.js +1 -0
- package/es/hooks/useCountdown.d.ts +49 -0
- package/es/hooks/useCountdown.js +122 -0
- package/es/providers/ConfigProvider/GlobalStyle.js +1142 -1119
- package/es/styled/common.js +51 -51
- package/es/tests/styled.js +4 -4
- package/es/utils/variables.js +7 -7
- package/package.json +261 -261
- package/CHANGELOG.md +0 -63
- package/es/components/organism/ActivityTimeline/__mocks__/event_tracking.json +0 -1290
- package/es/components/organism/ActivityTimeline/__mocks__/timeline.json +0 -3059
- package/es/components/organism/Login/components/LoginStep2/index.d.ts +0 -1
- package/es/components/organism/Login/components/LoginStep2/index.js +0 -1
- /package/es/components/organism/{Login/components/LoginStep2 → BasicLogin/components/LoginWithEmail}/styled.d.ts +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
3
|
+
// Libraries
|
|
4
|
+
import { Button, Flex } from 'antd';
|
|
5
|
+
import { get } from 'lodash';
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
|
+
import { isMobile } from 'react-device-detect';
|
|
8
|
+
import { EmailTemplateIcon, KeyValueIcon } from '@antscorp/antsomi-ui/es/components/icons';
|
|
9
|
+
// Components
|
|
10
|
+
import { WidgetLayout } from '../WidgetLayout';
|
|
11
|
+
import { Method } from './Method';
|
|
12
|
+
// Images
|
|
13
|
+
import verifyImage from '../../../../../assets/images/components/Login/loginStep2.png';
|
|
14
|
+
// Utils
|
|
15
|
+
import { maskEmail } from './utils';
|
|
16
|
+
import { Title } from '../WidgetLayout/styled';
|
|
17
|
+
import { Text } from '../../styled';
|
|
18
|
+
import { LOGIN_METHODS } from '../../constants';
|
|
19
|
+
export const ChooseMethod = props => {
|
|
20
|
+
const { loginData = {}, onChooseMethod, backLogin } = props;
|
|
21
|
+
const handleBack = () => {
|
|
22
|
+
if (backLogin && typeof backLogin === 'function') {
|
|
23
|
+
backLogin();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const methods = useMemo(() => {
|
|
27
|
+
const options = loginData?.auth_options || [];
|
|
28
|
+
return options.map(opt => {
|
|
29
|
+
switch (opt.provider) {
|
|
30
|
+
case 'google':
|
|
31
|
+
return {
|
|
32
|
+
disable: opt.status !== 1,
|
|
33
|
+
icon: _jsx(KeyValueIcon, { color: "#005eb8" }),
|
|
34
|
+
name: LOGIN_METHODS.GOOGLE_AUTHENTICATOR,
|
|
35
|
+
label: opt.status === 1
|
|
36
|
+
? 'Use your security code using Google Authenticator.'
|
|
37
|
+
: 'Use your security code using Google Authenticator. Authenticator not available.',
|
|
38
|
+
};
|
|
39
|
+
case 'email':
|
|
40
|
+
return {
|
|
41
|
+
disable: opt.status !== 1,
|
|
42
|
+
icon: _jsx(EmailTemplateIcon, { color: "#005eb8" }),
|
|
43
|
+
name: LOGIN_METHODS.EMAIL,
|
|
44
|
+
label: `Get verification code at ${maskEmail(get(loginData, 'personal.email', ''))}`,
|
|
45
|
+
};
|
|
46
|
+
default:
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}, [loginData]);
|
|
51
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 30, content: _jsxs(Flex, { vertical: true, gap: 50, style: { marginTop: 20 }, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: verifyImage, alt: "" }), _jsx(Text, { isMobile: isMobile, color: "#595959", children: "For added security, we need to verify your identity." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 13, children: [_jsx(Flex, { gap: 5, align: "center", justify: "center", children: _jsx(Title, { isMobile: isMobile, children: "Choose how you want to sign in:" }) }), _jsx(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: methods.map(({ disable, icon, name, label }) => (_jsx(Method, { disable: disable, onClick: () => onChooseMethod(name), icon: icon, name: name, label: label }, name))) })] })] }), footer: _jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
52
|
+
fontSize: isMobile ? '16px' : '14px',
|
|
53
|
+
}, children: "Sign in with a different account" }) }) }));
|
|
54
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
type TMethod = {
|
|
3
|
+
onClick: (name: string) => void;
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
disable?: boolean;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const Method: (props: TMethod) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { isMobile } from 'react-device-detect';
|
|
3
|
+
import { BlockMethod } from './styled';
|
|
4
|
+
import { Text } from '../../styled';
|
|
5
|
+
export const Method = (props) => {
|
|
6
|
+
const { onClick, icon, label, disable, name } = props;
|
|
7
|
+
const onChooseMethod = () => {
|
|
8
|
+
if (!disable && onClick) {
|
|
9
|
+
onClick(name);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
return (_jsxs(BlockMethod, { onClick: onChooseMethod, disable: disable, "data-test": name, children: [_jsx("div", { children: icon }), _jsx(Text, { isMobile: isMobile, color: disable ? '#9C9B9B' : '#595959', children: label })] }));
|
|
13
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const TextInfo: import("styled-components").StyledComponent<"span", any, {
|
|
3
|
+
isMobile: boolean;
|
|
4
|
+
}, never>;
|
|
5
|
+
export declare const SubTitle: import("styled-components").StyledComponent<"span", any, {
|
|
6
|
+
isMobile: boolean;
|
|
7
|
+
}, never>;
|
|
8
|
+
export declare const BlockMethod: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {
|
|
9
|
+
disable?: boolean | undefined;
|
|
10
|
+
}, never>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Flex } from 'antd';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
export const TextInfo = styled.span `
|
|
4
|
+
color: #7f7f7f;
|
|
5
|
+
font-size: ${(props) => (props.isMobile ? ' 13px !important' : '11px')};
|
|
6
|
+
`;
|
|
7
|
+
export const SubTitle = styled.span `
|
|
8
|
+
color: #005eb8;
|
|
9
|
+
font-size: ${(props) => (props.isMobile ? ' 16px ' : '14px')};
|
|
10
|
+
font-weight: 500;
|
|
11
|
+
`;
|
|
12
|
+
export const BlockMethod = styled(Flex) `
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: 10px;
|
|
15
|
+
padding: 10px;
|
|
16
|
+
cursor: ${props => (props.disable ? 'not-allowed' : 'pointer')};
|
|
17
|
+
border-radius: 10px;
|
|
18
|
+
|
|
19
|
+
opacity: ${props => (props.disable ? '0.5' : '1')};
|
|
20
|
+
|
|
21
|
+
&:hover {
|
|
22
|
+
background-color: ${props => (props.disable ? '#f2f2f2' : '#e6f0ff')};
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const maskEmail: (email: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const maskEmail = (email) => email.replace(/(.)[^@]*(.@.).*(.)/, '$1****$2*******$3.');
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LoginData } from '../../types';
|
|
3
|
+
interface LoginWithEmailProps {
|
|
4
|
+
domainLogin: string;
|
|
5
|
+
codeKey?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
onLoginSuccess?: (data: Partial<LoginData>) => void;
|
|
8
|
+
backLogin?: () => void;
|
|
9
|
+
onResendEmail: () => void;
|
|
10
|
+
loginData?: Partial<LoginData>;
|
|
11
|
+
networkId?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const LoginWithEmail: React.FC<LoginWithEmailProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useCallback, useState } from 'react';
|
|
3
|
+
import { Button, Flex, Typography } from 'antd';
|
|
4
|
+
import { get, isEmpty } from 'lodash';
|
|
5
|
+
import { useImmer } from 'use-immer';
|
|
6
|
+
import { isMobile } from 'react-device-detect';
|
|
7
|
+
import { useCountdown } from '@antscorp/antsomi-ui/es/hooks';
|
|
8
|
+
// Components
|
|
9
|
+
import { WidgetLayout } from '../WidgetLayout';
|
|
10
|
+
import loginStep2Image from '../../../../../assets/images/components/Login/loginStep2.png';
|
|
11
|
+
import { StyleButton, StyleInput, Text } from '../../styled';
|
|
12
|
+
import { Title } from '../WidgetLayout/styled';
|
|
13
|
+
import { maskEmail } from '../ChooseMethod/utils';
|
|
14
|
+
import { LOGIN_ERROR_TYPES } from '../../../Login/constants';
|
|
15
|
+
import { makeAuthenticationRequest } from '../../utils';
|
|
16
|
+
// Constants
|
|
17
|
+
const COUNTDOWN_SECONDS = 59;
|
|
18
|
+
const CODE_LENGTH = 6;
|
|
19
|
+
const { Text: TextAntsomiUI } = Typography;
|
|
20
|
+
const initialState = {
|
|
21
|
+
code: '',
|
|
22
|
+
isTrust: false,
|
|
23
|
+
codeError: false,
|
|
24
|
+
isLoading: false,
|
|
25
|
+
isShowResend: false,
|
|
26
|
+
isDisableResend: false,
|
|
27
|
+
isTooManyMistakes: false,
|
|
28
|
+
};
|
|
29
|
+
export const LoginWithEmail = ({ loginData, domainLogin, codeKey = 'code', token = '', onLoginSuccess, backLogin, onResendEmail, networkId, }) => {
|
|
30
|
+
const [state, setState] = useImmer(initialState);
|
|
31
|
+
const errorRef = useRef(false);
|
|
32
|
+
const [errorMessageCode, setErrorMessageCode] = useState(null);
|
|
33
|
+
const errorCodeSend = get(loginData, 'errorCode', '');
|
|
34
|
+
const retryAfter = get(loginData, 'retryAfter');
|
|
35
|
+
const userEmail = get(loginData, 'personal.email', '');
|
|
36
|
+
const countdownOptions = {
|
|
37
|
+
autoStart: true,
|
|
38
|
+
onComplete: () => {
|
|
39
|
+
setState(draft => {
|
|
40
|
+
draft.isShowResend = true;
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const countdownIncorrectAttempts = {
|
|
45
|
+
autoStart: false,
|
|
46
|
+
onComplete: () => {
|
|
47
|
+
setState(draft => {
|
|
48
|
+
draft.isDisableResend = false;
|
|
49
|
+
draft.isShowResend = true;
|
|
50
|
+
draft.isTooManyMistakes = false;
|
|
51
|
+
});
|
|
52
|
+
setErrorMessageCode('');
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const { resetAndStartWithTime, seconds } = useCountdown(COUNTDOWN_SECONDS, countdownOptions);
|
|
56
|
+
const { resetAndStartWithTime: resetCountDownIncorrectAttempts } = useCountdown(0, countdownIncorrectAttempts);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (errorCodeSend) {
|
|
59
|
+
if (errorCodeSend === LOGIN_ERROR_TYPES.SEND_LIMIT_REACHED.type) {
|
|
60
|
+
setState(draft => {
|
|
61
|
+
draft.isDisableResend = true;
|
|
62
|
+
draft.isShowResend = true;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (errorCodeSend === LOGIN_ERROR_TYPES.TOO_MANY_ATTEMPTS.type && retryAfter > 0) {
|
|
66
|
+
setState(draft => {
|
|
67
|
+
draft.isDisableResend = true;
|
|
68
|
+
draft.isShowResend = true;
|
|
69
|
+
draft.isTooManyMistakes = true;
|
|
70
|
+
});
|
|
71
|
+
resetCountDownIncorrectAttempts(+retryAfter);
|
|
72
|
+
}
|
|
73
|
+
setErrorMessageCode(errorCodeSend);
|
|
74
|
+
}
|
|
75
|
+
if (+retryAfter > 0 && errorCodeSend === LOGIN_ERROR_TYPES.SEND_LIMIT_REACHED.type) {
|
|
76
|
+
resetAndStartWithTime(+retryAfter);
|
|
77
|
+
setState(draft => {
|
|
78
|
+
draft.isShowResend = false;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (errorCodeSend === 'RESEND_TOO_SOON' && +retryAfter > 0) {
|
|
82
|
+
resetAndStartWithTime(+retryAfter);
|
|
83
|
+
}
|
|
84
|
+
}, [errorCodeSend, retryAfter, resetAndStartWithTime, resetCountDownIncorrectAttempts, setState]);
|
|
85
|
+
const handleAuthenticationSuccess = useCallback((response) => {
|
|
86
|
+
if (response.code === 200) {
|
|
87
|
+
onLoginSuccess?.(response.data);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const errorCode = LOGIN_ERROR_TYPES[response.data.error];
|
|
91
|
+
if (errorCode) {
|
|
92
|
+
if (errorCode.type === LOGIN_ERROR_TYPES.SEND_LIMIT_REACHED.type) {
|
|
93
|
+
setState(draft => {
|
|
94
|
+
draft.isDisableResend = true;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (response.data.error === LOGIN_ERROR_TYPES.TOO_MANY_ATTEMPTS.type &&
|
|
98
|
+
response.data.retryAfter > 0) {
|
|
99
|
+
setState(draft => {
|
|
100
|
+
draft.isDisableResend = true;
|
|
101
|
+
draft.isShowResend = true;
|
|
102
|
+
draft.isTooManyMistakes = true;
|
|
103
|
+
});
|
|
104
|
+
resetCountDownIncorrectAttempts(+response.data.retryAfter);
|
|
105
|
+
}
|
|
106
|
+
setErrorMessageCode(errorCode.type);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}, [onLoginSuccess, setState, resetCountDownIncorrectAttempts]);
|
|
110
|
+
const onChangeLoading = useCallback((isLoading) => {
|
|
111
|
+
setState(draft => {
|
|
112
|
+
draft.isLoading = isLoading;
|
|
113
|
+
});
|
|
114
|
+
}, [setState]);
|
|
115
|
+
const signIn = useCallback(() => {
|
|
116
|
+
errorRef.current = true;
|
|
117
|
+
if (!token) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (isEmpty(state.code)) {
|
|
121
|
+
setState(draft => {
|
|
122
|
+
draft.codeError = true;
|
|
123
|
+
});
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const verificationParams = {
|
|
127
|
+
auth_type: 'email',
|
|
128
|
+
[codeKey]: state.code,
|
|
129
|
+
token,
|
|
130
|
+
trust_key: null,
|
|
131
|
+
app_id: networkId,
|
|
132
|
+
};
|
|
133
|
+
onChangeLoading(true);
|
|
134
|
+
makeAuthenticationRequest({
|
|
135
|
+
verificationParams,
|
|
136
|
+
domainLogin,
|
|
137
|
+
onLoading: onChangeLoading,
|
|
138
|
+
handleAuthenticationSuccess,
|
|
139
|
+
});
|
|
140
|
+
}, [
|
|
141
|
+
token,
|
|
142
|
+
state.code,
|
|
143
|
+
codeKey,
|
|
144
|
+
onChangeLoading,
|
|
145
|
+
domainLogin,
|
|
146
|
+
handleAuthenticationSuccess,
|
|
147
|
+
setState,
|
|
148
|
+
networkId,
|
|
149
|
+
]);
|
|
150
|
+
const handleBack = useCallback(() => {
|
|
151
|
+
backLogin?.();
|
|
152
|
+
}, [backLogin]);
|
|
153
|
+
const onResendCode = useCallback(() => {
|
|
154
|
+
onResendEmail();
|
|
155
|
+
setState(draft => {
|
|
156
|
+
draft.isShowResend = false;
|
|
157
|
+
draft.code = '';
|
|
158
|
+
draft.codeError = false;
|
|
159
|
+
});
|
|
160
|
+
resetAndStartWithTime(COUNTDOWN_SECONDS);
|
|
161
|
+
}, [onResendEmail, setState, resetAndStartWithTime]);
|
|
162
|
+
const handleCodeChange = useCallback((e) => {
|
|
163
|
+
const newCode = e.target.value;
|
|
164
|
+
setState(draft => {
|
|
165
|
+
draft.code = newCode;
|
|
166
|
+
});
|
|
167
|
+
errorRef.current = true;
|
|
168
|
+
}, [setState]);
|
|
169
|
+
const renderErrorMessages = () => {
|
|
170
|
+
let errMsg = null;
|
|
171
|
+
if (state.codeError && isEmpty(state.code)) {
|
|
172
|
+
errMsg = _jsx(TextAntsomiUI, { type: "danger", children: "Invalid code, please try again." });
|
|
173
|
+
}
|
|
174
|
+
if (errorMessageCode && LOGIN_ERROR_TYPES[errorMessageCode]) {
|
|
175
|
+
errMsg = (_jsx(TextAntsomiUI, { type: "danger", children: LOGIN_ERROR_TYPES[errorMessageCode].message }));
|
|
176
|
+
}
|
|
177
|
+
return errMsg;
|
|
178
|
+
};
|
|
179
|
+
const renderResendSection = () => {
|
|
180
|
+
const maskedEmail = maskEmail(userEmail);
|
|
181
|
+
const baseText = `Please enter the 6-digit code send to ${maskedEmail} Haven't received it? `;
|
|
182
|
+
return (_jsx(Flex, { gap: 5, align: "center", children: _jsxs(Text, { isMobile: isMobile, color: "#595959", children: [baseText, state.isShowResend ? (_jsx(Text, { color: state.isDisableResend ? '#a2a2a2' : '#005eb8', onClick: state.isDisableResend ? undefined : onResendCode, isMobile: isMobile, style: { cursor: state.isDisableResend ? 'not-allowed' : 'pointer' }, children: "Resend." })) : (`Resend code in ${seconds}s.`)] }) }));
|
|
183
|
+
};
|
|
184
|
+
const renderCodeInput = () => (_jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(StyleInput, { isMobile: isMobile, maxLength: CODE_LENGTH, placeholder: "Input your code", value: state.code, onChange: handleCodeChange, status: errorRef.current && state.codeError ? 'error' : undefined, disabled: state.isTooManyMistakes }), renderErrorMessages()] }));
|
|
185
|
+
const renderActionButtons = () => (_jsxs(Flex, { vertical: true, gap: isMobile ? 30 : 15, children: [_jsx(StyleButton, { isMobile: isMobile, type: "primary", onClick: signIn, loading: state.isLoading, disabled: state.isTooManyMistakes, children: "Verify" }), _jsx(StyleButton, { isMobile: isMobile, onClick: handleBack, type: "text", children: "Back to login" })] }));
|
|
186
|
+
const renderAlternativeSignIn = () => (_jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
187
|
+
fontSize: isMobile ? '16px' : '14px',
|
|
188
|
+
}, children: "Sign in with a different account" }) }));
|
|
189
|
+
const renderContent = () => (_jsxs(Flex, { vertical: true, gap: 50, style: { marginTop: 20 }, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: loginStep2Image, alt: "Identity Verification" }), _jsx(Text, { isMobile: isMobile, color: "#595959", children: "For added security, we need to verify your identity." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 15, children: [renderResendSection(), _jsx(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: renderCodeInput() }), _jsx(Flex, { vertical: true, gap: isMobile ? 30 : 15, style: { marginTop: isMobile ? 20 : 15 }, children: renderActionButtons() })] })] }));
|
|
190
|
+
const renderFooter = () => renderAlternativeSignIn();
|
|
191
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 30, content: renderContent(), footer: renderFooter() }));
|
|
192
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './LoginWithEmail';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './LoginWithEmail';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import styled from 'styled-components';
|
|
2
|
-
export const TextInfo = styled.span `
|
|
3
|
-
color: #7f7f7f;
|
|
4
|
-
font-size: ${(props) => (props.isMobile ? ' 13px !important' : '11px')};
|
|
2
|
+
export const TextInfo = styled.span `
|
|
3
|
+
color: #7f7f7f;
|
|
4
|
+
font-size: ${(props) => (props.isMobile ? ' 13px !important' : '11px')};
|
|
5
5
|
`;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LoginData } from '../../types';
|
|
3
|
+
interface LoginWithGGProps {
|
|
4
|
+
domainLogin: string;
|
|
5
|
+
codeKey?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
onLoginSuccess?: (data: Partial<LoginData>) => void;
|
|
8
|
+
backLogin?: () => void;
|
|
9
|
+
networkId?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const LoginWithGG: React.FC<LoginWithGGProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useCallback } from 'react';
|
|
3
|
+
import { Button, Flex, Typography } from 'antd';
|
|
4
|
+
import { useImmer } from 'use-immer';
|
|
5
|
+
import { isMobile } from 'react-device-detect';
|
|
6
|
+
// Components
|
|
7
|
+
import { WidgetLayout } from '../WidgetLayout';
|
|
8
|
+
import { IconInfo } from '../../../Login/components/IconInfo';
|
|
9
|
+
// Images
|
|
10
|
+
import step2 from '../../../../../assets/images/components/Login/step2.png';
|
|
11
|
+
import loginStep2Image from '../../../../../assets/images/components/Login/loginStep2.png';
|
|
12
|
+
import { StyleButton, StyleInput, Text } from '../../styled';
|
|
13
|
+
import { Title } from '../WidgetLayout/styled';
|
|
14
|
+
import { makeAuthenticationRequest } from '../../utils';
|
|
15
|
+
// Constants
|
|
16
|
+
const CODE_LENGTH = 6;
|
|
17
|
+
const { Text: TextAntsomiUI } = Typography;
|
|
18
|
+
const initialState = {
|
|
19
|
+
code: '',
|
|
20
|
+
isTrust: false,
|
|
21
|
+
codeError: true,
|
|
22
|
+
isLoading: false,
|
|
23
|
+
count: 0,
|
|
24
|
+
};
|
|
25
|
+
export const LoginWithGG = ({ domainLogin, codeKey = 'code', token = '', onLoginSuccess, backLogin, networkId, }) => {
|
|
26
|
+
const [state, setState] = useImmer(initialState);
|
|
27
|
+
const errorRef = useRef(false);
|
|
28
|
+
const handleAuthenticationSuccess = useCallback((response) => {
|
|
29
|
+
if (response.code === 200) {
|
|
30
|
+
onLoginSuccess?.(response.data);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
setState(draft => {
|
|
34
|
+
draft.codeError = true;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}, [onLoginSuccess, setState]);
|
|
38
|
+
const onChangeLoading = useCallback((isLoading) => {
|
|
39
|
+
setState(draft => {
|
|
40
|
+
draft.isLoading = isLoading;
|
|
41
|
+
});
|
|
42
|
+
}, [setState]);
|
|
43
|
+
const signIn = useCallback(() => {
|
|
44
|
+
errorRef.current = true;
|
|
45
|
+
setState(draft => {
|
|
46
|
+
draft.count += 1;
|
|
47
|
+
});
|
|
48
|
+
if (!token || state.codeError) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const verificationParams = {
|
|
52
|
+
[codeKey]: state.code,
|
|
53
|
+
token,
|
|
54
|
+
trust_key: null,
|
|
55
|
+
app_id: networkId,
|
|
56
|
+
};
|
|
57
|
+
setState(draft => {
|
|
58
|
+
draft.isLoading = true;
|
|
59
|
+
});
|
|
60
|
+
makeAuthenticationRequest({
|
|
61
|
+
verificationParams,
|
|
62
|
+
domainLogin,
|
|
63
|
+
onLoading: onChangeLoading,
|
|
64
|
+
handleAuthenticationSuccess,
|
|
65
|
+
});
|
|
66
|
+
}, [
|
|
67
|
+
token,
|
|
68
|
+
state.codeError,
|
|
69
|
+
state.code,
|
|
70
|
+
codeKey,
|
|
71
|
+
networkId,
|
|
72
|
+
setState,
|
|
73
|
+
domainLogin,
|
|
74
|
+
onChangeLoading,
|
|
75
|
+
handleAuthenticationSuccess,
|
|
76
|
+
]);
|
|
77
|
+
const handleBack = useCallback(() => {
|
|
78
|
+
backLogin?.();
|
|
79
|
+
}, [backLogin]);
|
|
80
|
+
const handleCodeChange = useCallback((e) => {
|
|
81
|
+
const newCode = e.target.value;
|
|
82
|
+
setState(draft => {
|
|
83
|
+
draft.code = newCode;
|
|
84
|
+
});
|
|
85
|
+
errorRef.current = true;
|
|
86
|
+
}, [setState]);
|
|
87
|
+
// Validate code on change
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
setState(draft => {
|
|
90
|
+
draft.codeError = !state.code?.trim();
|
|
91
|
+
});
|
|
92
|
+
}, [state.code, setState]);
|
|
93
|
+
const renderInstructionSection = () => (_jsxs(Flex, { gap: 5, align: "center", children: [_jsx(Text, { isMobile: isMobile, color: "#595959", children: "Please enter the 6-digit code registered to your device." }), _jsx(IconInfo, { image: step2, title: _jsx(TextAntsomiUI, { style: {
|
|
94
|
+
marginTop: 20,
|
|
95
|
+
textAlign: 'center',
|
|
96
|
+
}, children: _jsxs(Text, { isMobile: isMobile, children: ["Open Google Authenticator and enter the code from ", _jsx("b", { children: "antsomi.com" })] }) }) })] }));
|
|
97
|
+
const renderCodeInput = () => (_jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(StyleInput, { isMobile: isMobile, maxLength: CODE_LENGTH, placeholder: "Input your code", value: state.code, onChange: handleCodeChange, status: errorRef.current && state.codeError ? 'error' : undefined }), errorRef.current && state.codeError && (_jsx(TextAntsomiUI, { type: "danger", children: "Invalid code, please try again" }))] }));
|
|
98
|
+
const renderActionButtons = () => (_jsxs(Flex, { vertical: true, gap: isMobile ? 30 : 15, children: [_jsx(StyleButton, { isMobile: isMobile, type: "primary", onClick: signIn, loading: state.isLoading, children: "Verify" }), _jsx(StyleButton, { isMobile: isMobile, onClick: handleBack, type: "text", children: "Back to login" })] }));
|
|
99
|
+
const renderAlternativeSignIn = () => (_jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
100
|
+
fontSize: isMobile ? '16px' : '14px',
|
|
101
|
+
}, children: "Sign in with a different account" }) }));
|
|
102
|
+
const renderHeaderSection = () => (_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: loginStep2Image, alt: "Identity Verification Step" }), _jsx(Text, { isMobile: isMobile, color: "#595959", children: "For added security, we need to verify your identity." })] }));
|
|
103
|
+
const renderInputSection = () => (_jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 15, children: [renderInstructionSection(), _jsx(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: renderCodeInput() }), _jsx(Flex, { vertical: true, gap: isMobile ? 30 : 15, style: { marginTop: isMobile ? 20 : 15 }, children: renderActionButtons() })] }));
|
|
104
|
+
const renderContent = () => (_jsxs(Flex, { vertical: true, gap: 50, style: { marginTop: 20 }, children: [renderHeaderSection(), renderInputSection()] }));
|
|
105
|
+
const renderFooter = () => renderAlternativeSignIn();
|
|
106
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 30, content: renderContent(), footer: renderFooter() }));
|
|
107
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './LoginWithGG';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './LoginWithGG';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LoginData } from '../../types';
|
|
3
|
+
type TSignIn = {
|
|
4
|
+
domainLogin: string;
|
|
5
|
+
networkId?: string;
|
|
6
|
+
onLoginSuccess?: (data: Partial<LoginData>) => void;
|
|
7
|
+
userNameKey?: string;
|
|
8
|
+
passwordKey?: string;
|
|
9
|
+
setAuthenInfo: (info: {
|
|
10
|
+
email: string;
|
|
11
|
+
}) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const SignIn: React.FC<TSignIn>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Libraries
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Flex, Form } from 'antd';
|
|
5
|
+
// Styled
|
|
6
|
+
import { StyleButton, StyledForm, StyleInput, WrapperImage } from '../../styled';
|
|
7
|
+
// Images
|
|
8
|
+
import logoAntsomi from '../../../../../assets/images/logo/antsomi_logo.png';
|
|
9
|
+
import { Wrapper } from './styled';
|
|
10
|
+
import { isMobile } from 'react-device-detect';
|
|
11
|
+
import Icon from '@antscorp/icons';
|
|
12
|
+
export const SignIn = props => {
|
|
13
|
+
const { domainLogin, networkId, onLoginSuccess, userNameKey = 'user_name', passwordKey = 'password', setAuthenInfo, } = props;
|
|
14
|
+
const [form] = Form.useForm();
|
|
15
|
+
const loginUrl = `${domainLogin}api/account/authenticate`;
|
|
16
|
+
const [loginError, setLoginError] = useState(false);
|
|
17
|
+
const [isLoading, setLoading] = useState(false);
|
|
18
|
+
const onFinish = values => {
|
|
19
|
+
const { password, email } = values;
|
|
20
|
+
const params = {
|
|
21
|
+
[userNameKey]: email,
|
|
22
|
+
[passwordKey]: password,
|
|
23
|
+
app_id: networkId,
|
|
24
|
+
};
|
|
25
|
+
setAuthenInfo({
|
|
26
|
+
email,
|
|
27
|
+
});
|
|
28
|
+
setLoading(true);
|
|
29
|
+
const xhr = new XMLHttpRequest();
|
|
30
|
+
xhr.open('POST', loginUrl, true);
|
|
31
|
+
// Send the proper header information along with the request
|
|
32
|
+
xhr.setRequestHeader('Content-Type', 'application/json');
|
|
33
|
+
xhr.withCredentials = false;
|
|
34
|
+
xhr.onreadystatechange = () => {
|
|
35
|
+
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
36
|
+
setLoading(false);
|
|
37
|
+
}
|
|
38
|
+
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
|
|
39
|
+
const response = JSON.parse(xhr.responseText);
|
|
40
|
+
if (response?.data?.token) {
|
|
41
|
+
if (onLoginSuccess && typeof onLoginSuccess === 'function') {
|
|
42
|
+
onLoginSuccess({ ...response.data, isCheckG2FA: true, password });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
setLoginError(true);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
xhr.send(JSON.stringify(params));
|
|
51
|
+
};
|
|
52
|
+
return (_jsxs(Wrapper, { isMobile: isMobile, children: [_jsx(Flex, { align: "center", justify: "center", children: _jsx(WrapperImage, { src: logoAntsomi, alt: "logosaS" }) }), _jsxs(StyledForm, { form: form, name: "login_form", onFinish: onFinish, scrollToFirstError: true, style: { width: '100%' }, isMobile: isMobile, validateTrigger: "onSubmit", children: [_jsx(Form.Item, { name: "email", rules: [
|
|
53
|
+
{
|
|
54
|
+
required: true,
|
|
55
|
+
message: 'Please enter your email',
|
|
56
|
+
pattern: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
|
|
57
|
+
},
|
|
58
|
+
], children: _jsx(StyleInput, { "data-test-id": "email", isMobile: isMobile, placeholder: "Email" }) }), _jsx(Form.Item, { name: "password", rules: [
|
|
59
|
+
{ required: true, message: 'Please enter your password' },
|
|
60
|
+
{ min: 6, message: 'Password must be at least 6 characters long' },
|
|
61
|
+
], style: { marginTop: 15 }, children: _jsx(StyleInput.Password, { placeholder: "Password", "data-test-id": "password", iconRender: visible => visible ? (_jsx(Icon, { type: "icon-ants-eye", style: {
|
|
62
|
+
color: '#595959',
|
|
63
|
+
} })) : (_jsx(Icon, { type: "icon-ants-invisible", style: {
|
|
64
|
+
color: '#595959',
|
|
65
|
+
} })) }) }), loginError && (_jsx("span", { style: { color: 'red', fontSize: 11 }, children: "Email or password is invalid" })), _jsx(Flex, { style: { width: '100%', marginTop: '40px' }, vertical: true, className: "", children: _jsx(Form.Item, { children: _jsx(StyleButton, { isMobile: isMobile, type: "primary", htmlType: "submit", style: { width: '100%', marginBottom: isMobile ? 15 : 0 }, loading: isLoading, "data-test-id": "button__sign-in", children: "Sign in" }) }) })] })] }));
|
|
66
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SignIn';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SignIn';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type TWidgetLayout = {
|
|
3
|
+
header?: React.ReactNode | string;
|
|
4
|
+
title?: React.ReactNode | string;
|
|
5
|
+
content?: React.ReactNode | string;
|
|
6
|
+
isShowLogo?: boolean;
|
|
7
|
+
footer?: React.ReactNode;
|
|
8
|
+
urlLogo?: string;
|
|
9
|
+
gapContent?: number;
|
|
10
|
+
paddingContent?: string | number;
|
|
11
|
+
};
|
|
12
|
+
export declare const WidgetLayout: React.FC<TWidgetLayout>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Libraries
|
|
3
|
+
import { Flex } from 'antd';
|
|
4
|
+
import { isEmpty } from 'lodash';
|
|
5
|
+
import { isMobile } from 'react-device-detect';
|
|
6
|
+
// Styled
|
|
7
|
+
import { Title, WidgetLayoutMain } from './styled';
|
|
8
|
+
import { WrapperImage } from '../../styled';
|
|
9
|
+
// Images
|
|
10
|
+
import logoAntsomi from '../../../../../assets/images/logo/antsomi_logo.png';
|
|
11
|
+
export const WidgetLayout = props => {
|
|
12
|
+
const { header, title, content, isShowLogo = true, footer, urlLogo, gapContent = 40, paddingContent = '0 30px', } = props;
|
|
13
|
+
return (_jsxs(WidgetLayoutMain, { vertical: true, gap: 40, children: [isShowLogo && (_jsx(Flex, { align: "center", justify: "center", children: !isEmpty(urlLogo) ? (_jsx(WrapperImage, { src: urlLogo, alt: "" })) : typeof LOGO_NETWORK_DOMAIN !== 'undefined' && LOGO_NETWORK_DOMAIN !== '' ? (_jsx(WrapperImage, { src: LOGO_NETWORK_DOMAIN, alt: "" })) : (_jsx(WrapperImage, { src: logoAntsomi, alt: "logosaS" })) })), _jsxs(Flex, { vertical: true, gap: gapContent, style: { height: '100%', padding: paddingContent }, children: [_jsx(Flex, { align: "center", justify: "center", style: {
|
|
14
|
+
paddingTop: '40px',
|
|
15
|
+
}, children: header }), _jsx(Title, { isMobile: isMobile, children: title }), _jsxs(Flex, { vertical: true, justify: "space-between", flex: 1, gap: gapContent, children: [content, _jsx(Flex, { vertical: true, style: {
|
|
16
|
+
paddingBottom: '40px',
|
|
17
|
+
}, children: footer })] })] })] }));
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './WidgetLayout';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './WidgetLayout';
|