@antscorp/antsomi-ui 1.3.7-beta.71 → 1.3.7-beta.74
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 +35 -16
- package/dist/0b4e3284d58d239d9b45.eot +0 -0
- package/dist/214.index.js +1 -0
- package/dist/432.index.js +1 -0
- package/dist/527.index.js +431 -0
- package/dist/580.index.js +1 -0
- package/dist/8b3d32a72b5f8509ae81.woff +0 -0
- package/dist/ad2f555da19d88ea413b.ttf +0 -0
- package/dist/assets/03cfac3ae7bc38c983a1.png +0 -0
- package/dist/assets/04124adb9943ac13c331.png +0 -0
- package/dist/assets/041d08f097ed062c8b5a.png +0 -0
- package/dist/assets/051d95d1b03279c61c3b.png +0 -0
- package/dist/assets/05baf245d63f058bdbdc.png +0 -0
- package/dist/assets/05ce1a8f7d6822bca4b8.png +0 -0
- package/dist/assets/06c925709fb967cebcce.png +0 -0
- package/dist/assets/07d6ee6ef09c64a5d5e2.png +0 -0
- package/dist/assets/09208aea631fa021e064.png +0 -0
- package/dist/assets/0a309db610a29a4179d2.png +0 -0
- package/dist/assets/0be0132dd955b59d48d5.png +0 -0
- package/dist/assets/0c84f36ef2b21e8e2caf.png +0 -0
- package/dist/assets/0df8254b26510011ab1b.png +0 -0
- package/dist/assets/0fdd546dc94fd68e2840.png +0 -0
- package/dist/assets/10376b9cdd16f25096ae.png +0 -0
- package/dist/assets/10f5f82b4328fbd8fb73.png +0 -0
- package/dist/assets/116102d666f7a59d3c4f.png +0 -0
- package/dist/assets/118e88887ab23834799e.png +0 -0
- package/dist/assets/11a17e76ee4aed1a75d2.png +0 -0
- package/dist/assets/11b8327e87a85fa30581.png +0 -0
- package/dist/assets/12e09327911b75d12e70.png +0 -0
- package/dist/assets/1533a428e4c7289d8182.png +0 -0
- package/dist/assets/1612b3127bc5cd75152b.png +0 -0
- package/dist/assets/1637b3eae164e51b7e07.png +0 -0
- package/dist/assets/16685aa5424bbca0a02c.png +0 -0
- package/dist/assets/16d0ba8bbbcb1d762732.png +0 -0
- package/dist/assets/17153d6968ff69831cc4.png +0 -0
- package/dist/assets/1785f647cda94edb1f70.png +0 -0
- package/dist/assets/17afd13b95f21e77999a.png +0 -0
- package/dist/assets/199cd9b3f8087be2a5a8.png +0 -0
- package/dist/assets/1c0a8da5077411d92811.png +0 -0
- package/dist/assets/1d359e08bd9e494ee682.png +0 -0
- package/dist/assets/1e1f9e305c74afb97068.png +0 -0
- package/dist/assets/1e9b2310d1afc9edf2ef.png +0 -0
- package/dist/assets/1efac46b55c5c78d1bef.png +0 -0
- package/dist/assets/20e42321b67d2e48b2d1.png +0 -0
- package/dist/assets/210aa2869c9f0708e6bd.png +0 -0
- package/dist/assets/213b3900fb7eaabc9def.png +0 -0
- package/dist/assets/21e23afb572d687ba90c.png +0 -0
- package/dist/assets/225e04633ffaec2adcda.png +0 -0
- package/dist/assets/23054dac254e126f8173.png +0 -0
- package/dist/assets/231844041bb6edbfc586.png +0 -0
- package/dist/assets/249fb85704ff7a4e903a.png +0 -0
- package/dist/assets/2564ff3567d32a6a81a0.png +0 -0
- package/dist/assets/25fd59b1b6fd551c23ff.png +0 -0
- package/dist/assets/2649663649740d2bccde.png +0 -0
- package/dist/assets/2803ebb0f3a4466810c6.png +0 -0
- package/dist/assets/294fccfb8d6e9215ab6f.png +0 -0
- package/dist/assets/2a2fa9555c1de890fe70.png +0 -0
- package/dist/assets/2a3055a5826225895d01.png +0 -0
- package/dist/assets/2a37b15e7b886bfce887.png +0 -0
- package/dist/assets/2a68d393f743d3253a1a.png +0 -0
- package/dist/assets/2c28ac0f13b02551ca25.png +0 -0
- package/dist/assets/2d3452197f30e473615f.png +0 -0
- package/dist/assets/2d64967dc67e0f5ac33e.png +0 -0
- package/dist/assets/2d8b063a83866bfa6914.png +0 -0
- package/dist/assets/2d8b20f71ecbfaf67c4a.png +0 -0
- package/dist/assets/2dd22b83c77f19a40c61.png +0 -0
- package/dist/assets/2ea9b8057d681df0fac8.png +0 -0
- package/dist/assets/2fc58b16dc1544624b90.png +0 -0
- package/dist/assets/30a2d8d92f06073b95b6.png +0 -0
- package/dist/assets/312a531fb8322e1c0986.png +0 -0
- package/dist/assets/33b34204ec395b77cb77.png +0 -0
- package/dist/assets/34411e9fe1e6aad66018.png +0 -0
- package/dist/assets/363836d69538acb54351.png +0 -0
- package/dist/assets/375355bd82547f68c8fd.png +0 -0
- package/dist/assets/39a7c31ade96707b7c1c.png +0 -0
- package/dist/assets/3bdcac18b5471e988636.png +0 -0
- package/dist/assets/3be11fc033f0074c0e0e.svg +635 -0
- package/dist/assets/3c9f54a6d79af34bc0e2.png +0 -0
- package/dist/assets/40a1150cc90b996ea45e.png +0 -0
- package/dist/assets/42defb8a33c8774983d9.png +0 -0
- package/dist/assets/42e8b15d5d6f9c1017af.png +0 -0
- package/dist/assets/4433268e3d3599978aa7.png +0 -0
- package/dist/assets/4529487635a8ee85e859.png +0 -0
- package/dist/assets/464fb17c8479cb9aa905.png +0 -0
- package/dist/assets/4719dd2de6b8397b65f6.png +0 -0
- package/dist/assets/4a824e811d4678e0e3a2.png +0 -0
- package/dist/assets/4d48beef25893d1bcacf.png +0 -0
- package/dist/assets/4ebaa2b563dd76a7ff02.png +0 -0
- package/dist/assets/4eec900de287be84627e.png +0 -0
- package/dist/assets/50d3e14133c3a61570c6.png +0 -0
- package/dist/assets/52129e02a1e15240d930.png +0 -0
- package/dist/assets/52290d2a364d71db1bd4.png +0 -0
- package/dist/assets/534e6aab4651d93b98cd.png +0 -0
- package/dist/assets/54a204623b50b0392f9d.png +0 -0
- package/dist/assets/5530cdc0e34c2d62e7a6.png +0 -0
- package/dist/assets/55e49b6032a6093f7546.png +0 -0
- package/dist/assets/566a307c14a66a6a896d.png +0 -0
- package/dist/assets/5b545c618eecb8979b57.png +0 -0
- package/dist/assets/5ef24f89bff30907da18.png +0 -0
- package/dist/assets/5fbf1b6cb2bbd7d38344.png +0 -0
- package/dist/assets/5fe9085a04e98f8283ed.png +0 -0
- package/dist/assets/5ffd69204b1f1d9a735d.png +0 -0
- package/dist/assets/6029e946f170ebcc0df4.png +0 -0
- package/dist/assets/615dd68cff2d5ff37de4.png +0 -0
- package/dist/assets/616f35c90b1c441247ce.png +0 -0
- package/dist/assets/62d0bb8585d97b9fb93a.png +0 -0
- package/dist/assets/63e7bcc514c0959efb3d.png +0 -0
- package/dist/assets/63fd89258e9f0cef0e8a.png +0 -0
- package/dist/assets/652a8b972efe9a6bf82c.png +0 -0
- package/dist/assets/662fc3d77b3fc210ac82.png +0 -0
- package/dist/assets/66720ae403a17f575d01.png +0 -0
- package/dist/assets/66a1e5c49d57ddd648e0.png +0 -0
- package/dist/assets/682437b58fce819117d5.png +0 -0
- package/dist/assets/6bdbeeaea7545cd644a0.png +0 -0
- package/dist/assets/6be09f06fd0affaf2fd6.png +0 -0
- package/dist/assets/6c943d16f0d934f6acdb.png +0 -0
- package/dist/assets/6d02c2d964a751421da8.png +0 -0
- package/dist/assets/6d1cf37281ebc39314ce.png +0 -0
- package/dist/assets/6e7bac0f650daae979e4.png +0 -0
- package/dist/assets/6ff2dd847dc71d5c9550.png +0 -0
- package/dist/assets/70237ed2aa82176091f5.png +0 -0
- package/dist/assets/70fc6e254cb1cc0e2c46.png +0 -0
- package/dist/assets/7198ac973d020819f7df.png +0 -0
- package/dist/assets/738a71547df74372c170.png +0 -0
- package/dist/assets/75c11537fb2452a5e931.png +0 -0
- package/dist/assets/761127170cff00511ae9.png +0 -0
- package/dist/assets/770b13ac8b9bb79d7a62.png +0 -0
- package/dist/assets/7798d82ce8a9059f11be.png +0 -0
- package/dist/assets/77b2d637bf9d37240059.png +0 -0
- package/dist/assets/78306a6d2ef4f7267291.png +0 -0
- package/dist/assets/7880ca1fdbac3643c86f.png +0 -0
- package/dist/assets/7880d4ae3f3a7c3053f1.png +0 -0
- package/dist/assets/790a97fe913530df720e.png +0 -0
- package/dist/assets/7b13f21f69bdd96b1a41.png +0 -0
- package/dist/assets/7bc11c25360b14b4139d.png +0 -0
- package/dist/assets/7cd320711388220dbdf9.png +0 -0
- package/dist/assets/7cd7249d01b738fc14cb.png +0 -0
- package/dist/assets/7d63dd75edcbef5eab39.png +0 -0
- package/dist/assets/7e00db194a3ded8393eb.png +0 -0
- package/dist/assets/7e0936755f1e406517e2.png +0 -0
- package/dist/assets/7f733c741988bae849cc.png +0 -0
- package/dist/assets/7fa095e6cea829c24129.png +0 -0
- package/dist/assets/7fb3f8ff32bcaf7a7527.png +0 -0
- package/dist/assets/7fb70af210b629d3eb0c.png +0 -0
- package/dist/assets/806da3574b3f03ee55b7.png +0 -0
- package/dist/assets/80f0628818c6e50234e5.png +0 -0
- package/dist/assets/810e763e3b50a6ff9858.png +0 -0
- package/dist/assets/816eeaef98b2b85bc0a4.png +0 -0
- package/dist/assets/85ebffb1567556134327.png +0 -0
- package/dist/assets/869b12e92824d762f3fb.png +0 -0
- package/dist/assets/86e47021eb8ba9c83328.png +0 -0
- package/dist/assets/89a7e748e188aa5ce7a4.png +0 -0
- package/dist/assets/89e2c04275dbd564fc95.png +0 -0
- package/dist/assets/8dbc9f7c183aa1f9366c.png +0 -0
- package/dist/assets/8e1813b737b6d77210a3.png +0 -0
- package/dist/assets/8e336b7c99947f0c6c73.png +0 -0
- package/dist/assets/8f05c28a9622f01737f5.png +0 -0
- package/dist/assets/91a3cfe2f01f8332652b.png +0 -0
- package/dist/assets/929bef3a6a5008c1cd9f.png +0 -0
- package/dist/assets/92c6f1705ecc7835caa4.png +0 -0
- package/dist/assets/93466d79d515c08bf6f6.png +0 -0
- package/dist/assets/93796fef8e146465c12b.png +0 -0
- package/dist/assets/9468534045e0fef49315.png +0 -0
- package/dist/assets/94b4f0ba83af81a8d923.png +0 -0
- package/dist/assets/96c3af1468f685c7eb16.png +0 -0
- package/dist/assets/97a6979fbe779183ab5e.png +0 -0
- package/dist/assets/9948a2077fb8885b09a6.png +0 -0
- package/dist/assets/9978a54182b8cb24fa06.png +0 -0
- package/dist/assets/99be4e86a0f9caa9709c.png +0 -0
- package/dist/assets/9b48a4a4ef8f6fa20b40.png +0 -0
- package/dist/assets/a05a2bf953e2448eb9dd.png +0 -0
- package/dist/assets/a1f809949c16c0951ee3.png +0 -0
- package/dist/assets/a207844ad0d2a66a8509.png +0 -0
- package/dist/assets/a3260ec8452ad74c01c5.png +0 -0
- package/dist/assets/a47254876c2936d12ebd.png +0 -0
- package/dist/assets/a4c67aa90ddb42e4ffe1.png +0 -0
- package/dist/assets/a50a87b175236d7632e4.png +0 -0
- package/dist/assets/a52b706048084b21efb1.png +0 -0
- package/dist/assets/a5b66d71f1d1cd62b3cc.png +0 -0
- package/dist/assets/a7b5461a8fc65988e9bd.png +0 -0
- package/dist/assets/a918e91c423f5722b1eb.png +0 -0
- package/dist/assets/a94c8677ccbc4357d5cb.png +0 -0
- package/dist/assets/aaf3040dc3c489510e9f.png +0 -0
- package/dist/assets/ab5d3b33839c65e5b5b6.png +0 -0
- package/dist/assets/ad1ec3689456db3aac83.png +0 -0
- package/dist/assets/b18659ae77bad7b79e78.png +0 -0
- package/dist/assets/b77b497e90309f691778.png +0 -0
- package/dist/assets/b7a08efbfa36ba940d70.png +0 -0
- package/dist/assets/b91011aeb7ff85a74374.png +0 -0
- package/dist/assets/b95ffb9c574aa1aa29e3.png +0 -0
- package/dist/assets/ba70dffa7f40c2ce698e.png +0 -0
- package/dist/assets/bcd53e69974ee455b95d.png +0 -0
- package/dist/assets/be54178060701d82de39.png +0 -0
- package/dist/assets/bfb9cf6473c43ea3c384.png +0 -0
- package/dist/assets/c029f64b6ddfbe291b06.png +0 -0
- package/dist/assets/c0a42df1c6eec859507e.png +0 -0
- package/dist/assets/c27818ba2d069f35555b.png +0 -0
- package/dist/assets/c2901dd9375dc66b78d9.png +0 -0
- package/dist/assets/c2b1a2e1c7544a8172f1.png +0 -0
- package/dist/assets/c347bc33c43df93ef597.png +0 -0
- package/dist/assets/c3d4316c7f0e568290cc.png +0 -0
- package/dist/assets/c5ce38bdbb3866fbd5c1.png +0 -0
- package/dist/assets/c5ff99235af06d46eed1.png +0 -0
- package/dist/assets/c61fdd37d577b79fd724.png +0 -0
- package/dist/assets/c7126c6ebc2920cd73cb.png +0 -0
- package/dist/assets/c74e9d6a9ac4f04cfd3d.png +0 -0
- package/dist/assets/c8eb29b47b9cc412ddca.png +0 -0
- package/dist/assets/c91e248e824efce278a7.png +0 -0
- package/dist/assets/c9927f45fb80aa059c09.png +0 -0
- package/dist/assets/c9d9e5ad52f8ad9865e8.png +0 -0
- package/dist/assets/ca8fe3a54ac277a3c13b.png +0 -0
- package/dist/assets/cbc709ee2adb699c50e4.svg +1 -0
- package/dist/assets/cc7cfd265ab0ba070e16.png +0 -0
- package/dist/assets/cc9c4202225fb243860e.png +0 -0
- package/dist/assets/cdc943c76b426d711f89.png +0 -0
- package/dist/assets/cefdf6693a86ffa4fce3.png +0 -0
- package/dist/assets/cf32336034371ff91222.png +0 -0
- package/dist/assets/cff5f7e2051a9f2a28ef.png +0 -0
- package/dist/assets/d1f2e1906b5c0c4fa443.png +0 -0
- package/dist/assets/d2664f36c5397473647a.png +0 -0
- package/dist/assets/d3228f6d0abca1c9f39b.png +0 -0
- package/dist/assets/d400de12326a2e2f8aaa.png +0 -0
- package/dist/assets/d45925ab837ef04f929f.png +0 -0
- package/dist/assets/d60fb74ce7cbd3895951.png +0 -0
- package/dist/assets/d7cb2e169f1042c09f3f.png +0 -0
- package/dist/assets/db69c05a76b9d7b83b8d.png +0 -0
- package/dist/assets/dbd7d27883ecb5d064e5.png +0 -0
- package/dist/assets/dbfd076b70b5c6e38b47.png +0 -0
- package/dist/assets/dcb92e65db3b1239f932.png +0 -0
- package/dist/assets/dcf6612eb688f70b6ef8.png +0 -0
- package/dist/assets/dd91c9bbf5e64421b8ea.png +0 -0
- package/dist/assets/ddfbdd57f1002196a7a9.png +0 -0
- package/dist/assets/df199f9281f969c02b6e.png +0 -0
- package/dist/assets/df5225510d929568b1a4.png +0 -0
- package/dist/assets/e19f0551039779435cd3.png +0 -0
- package/dist/assets/e29b2eb6c8b2d1b24878.png +0 -0
- package/dist/assets/e2ae780e2e83a4d1c768.png +0 -0
- package/dist/assets/e3b4defccd5333d7a04e.png +0 -0
- package/dist/assets/e3d63edb193aa8277bc3.png +0 -0
- package/dist/assets/e3eaac75b2502b4a4cc6.png +0 -0
- package/dist/assets/e4b605b6e2b32f21bd9e.png +0 -0
- package/dist/assets/e54c620e36c434f9a02e.png +0 -0
- package/dist/assets/e5df56fbc34fde2aad4a.png +0 -0
- package/dist/assets/e79fa764ff671f49422f.png +0 -0
- package/dist/assets/e8f6b412df4854b0bfad.svg +87 -0
- package/dist/assets/ea352701714e3b3228bf.png +0 -0
- package/dist/assets/ea884837e370d820cc30.png +0 -0
- package/dist/assets/ecaaf45476df71b70d54.png +0 -0
- package/dist/assets/ed25b069a8a2624b7b23.png +0 -0
- package/dist/assets/ed6c620052799dfa1ed2.png +0 -0
- package/dist/assets/ed8900cdbb8267eb7ab2.png +0 -0
- package/dist/assets/edccc3e392a6280bea22.png +0 -0
- package/dist/assets/edf6c21e45b285b61d4c.png +0 -0
- package/dist/assets/ee787f2d4d3fb28cda76.png +0 -0
- package/dist/assets/f11a9dabd1062ef85ccc.png +0 -0
- package/dist/assets/f4e415d9975a969b2a67.png +0 -0
- package/dist/assets/f5e22a792c07756d8dc2.png +0 -0
- package/dist/assets/f8cd1e99bc17f3db5f1e.png +0 -0
- package/dist/assets/fa2c1829526a8879de81.png +0 -0
- package/dist/assets/fac4a283bb014d77168d.png +0 -0
- package/dist/assets/fba77ae9697aa7dc71b6.png +0 -0
- package/dist/assets/ff7db9ff05a910761543.png +0 -0
- package/dist/index.js +14692 -0
- package/dist/index.js.LICENSE.txt +367 -0
- package/dist/main.css +5332 -0
- package/es/components/organism/BasicLogin/components/AuthenticateResult/AuthenticateResult.js +1 -1
- package/es/components/organism/BasicLogin/components/ChooseMethod/ChooseMethod.js +37 -19
- package/es/components/organism/BasicLogin/components/ChooseMethod/Method.d.ts +1 -0
- package/es/components/organism/BasicLogin/components/ChooseMethod/Method.js +4 -5
- package/es/components/organism/BasicLogin/components/ChooseMethod/styled.d.ts +10 -3
- package/es/components/organism/BasicLogin/components/ChooseMethod/styled.js +54 -6
- package/es/components/organism/BasicLogin/components/LoginWithEmail/LoginWithEmail.js +2 -2
- package/es/components/organism/BasicLogin/components/LoginWithGG/LoginWithGG.js +3 -3
- package/es/components/organism/Login/components/ChooseMethod/ChooseMethod.js +36 -19
- package/es/components/organism/Login/components/ChooseMethod/ChooseMethod.spec.d.ts +1 -0
- package/es/components/organism/Login/components/ChooseMethod/ChooseMethod.spec.js +50 -0
- package/es/components/organism/Login/components/ChooseMethod/Method.d.ts +1 -0
- package/es/components/organism/Login/components/ChooseMethod/Method.js +4 -5
- package/es/components/organism/Login/components/ChooseMethod/styled.d.ts +10 -3
- package/es/components/organism/Login/components/ChooseMethod/styled.js +54 -6
- package/es/components/organism/Login/components/LoginSelectPortal/LoginSelectPortal.js +1 -1
- package/es/components/organism/Login/components/LoginWithEmail/LoginWithEmail.js +1 -1
- package/es/components/organism/Login/components/LoginWithGG/LoginWithGG.js +1 -1
- package/es/components/organism/Login/components/WidgetLayout/styled.d.ts +3 -0
- package/es/components/organism/Login/components/WidgetLayout/styled.js +6 -0
- package/es/components/organism/Login/styled.d.ts +1 -0
- package/es/components/organism/Login/styled.js +1 -0
- package/package.json +16 -7
package/es/components/organism/BasicLogin/components/AuthenticateResult/AuthenticateResult.js
CHANGED
|
@@ -17,7 +17,7 @@ export const AuthenticateResult = props => {
|
|
|
17
17
|
backLogin();
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx("div", { style: { marginBottom: 100 } }), gapContent:
|
|
20
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx("div", { style: { marginBottom: 100 } }), gapContent: 30, content: _jsx(Flex, { vertical: true, gap: 50, children: _jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: authenSuccessImg, alt: "" }), _jsx(Title, { isMobile: isMobile, children: "Authenticated!" }), _jsxs(Text, { isMobile: isMobile, children: ["Sign in as ", get(loginData, 'personal.full_name')] })] }) }), footer: _jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
21
21
|
fontSize: isMobile ? '16px' : '14px',
|
|
22
22
|
}, children: "Sign in with a different account" }) }) }));
|
|
23
23
|
};
|
|
@@ -5,7 +5,7 @@ import { Button, Flex } from 'antd';
|
|
|
5
5
|
import { get } from 'lodash';
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
7
|
import { isMobile } from 'react-device-detect';
|
|
8
|
-
import { EmailTemplateIcon,
|
|
8
|
+
import { EmailTemplateIcon, PhoneIphoneIcon } from '@antscorp/antsomi-ui/es/components/icons';
|
|
9
9
|
// Components
|
|
10
10
|
import { WidgetLayout } from '../WidgetLayout';
|
|
11
11
|
import { Method } from './Method';
|
|
@@ -13,6 +13,8 @@ import { Method } from './Method';
|
|
|
13
13
|
import verifyImage from '../../../../../assets/images/components/Login/loginStep2.png';
|
|
14
14
|
// Utils
|
|
15
15
|
import { maskEmail } from './utils';
|
|
16
|
+
// Styled
|
|
17
|
+
import { SubTitle } from './styled';
|
|
16
18
|
import { Title } from '../WidgetLayout/styled';
|
|
17
19
|
import { Text } from '../../styled';
|
|
18
20
|
import { LOGIN_METHODS } from '../../constants';
|
|
@@ -24,31 +26,47 @@ export const ChooseMethod = props => {
|
|
|
24
26
|
}
|
|
25
27
|
};
|
|
26
28
|
const methods = useMemo(() => {
|
|
27
|
-
const options = loginData?.auth_options || []
|
|
28
|
-
|
|
29
|
+
const options = [...(loginData?.auth_options || [])].sort((first, second) => {
|
|
30
|
+
if (first.provider === 'email') {
|
|
31
|
+
return -1;
|
|
32
|
+
}
|
|
33
|
+
if (second.provider === 'email') {
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
return 0;
|
|
37
|
+
});
|
|
38
|
+
return options
|
|
39
|
+
.filter(opt => opt.provider !== 'google' || loginData.G2FA_user === 1)
|
|
40
|
+
.flatMap(opt => {
|
|
29
41
|
switch (opt.provider) {
|
|
30
42
|
case 'google':
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
:
|
|
38
|
-
|
|
43
|
+
return [
|
|
44
|
+
{
|
|
45
|
+
disable: opt.status !== 1,
|
|
46
|
+
icon: _jsx(PhoneIphoneIcon, { color: "#005eb8" }),
|
|
47
|
+
name: LOGIN_METHODS.GOOGLE_AUTHENTICATOR,
|
|
48
|
+
label: 'Authenticator app',
|
|
49
|
+
description: opt.status === 1
|
|
50
|
+
? 'Enter the code from your authenticator app.'
|
|
51
|
+
: 'Enter the code from your authenticator app. Authenticator not available.',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
39
54
|
case 'email':
|
|
40
|
-
return
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
disable: opt.status !== 1,
|
|
58
|
+
icon: _jsx(EmailTemplateIcon, { color: "#005eb8" }),
|
|
59
|
+
name: LOGIN_METHODS.EMAIL,
|
|
60
|
+
label: 'Email Verification',
|
|
61
|
+
description: `We'll send a 6-digit verification code to ${maskEmail(get(loginData, 'personal.email', ''))}`,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
46
64
|
default:
|
|
47
|
-
return
|
|
65
|
+
return [];
|
|
48
66
|
}
|
|
49
67
|
});
|
|
50
68
|
}, [loginData]);
|
|
51
|
-
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
69
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: _jsxs(Flex, { vertical: true, gap: 50, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: verifyImage, alt: "" }), _jsx(Text, { isMobile: isMobile, color: "#595959", children: "For your security, we need to verify your identity before continuing." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 13, children: [_jsx(Flex, { gap: 5, align: "center", justify: "center", children: _jsx(SubTitle, { isMobile: isMobile, children: "How would you like to verify your identity?" }) }), _jsx(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: methods.map(({ disable, icon, name, label, description }) => (_jsx(Method, { disable: disable, onClick: onChooseMethod, icon: icon, name: name, label: label, description: description }, name))) })] })] }), footer: _jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
52
70
|
fontSize: isMobile ? '16px' : '14px',
|
|
53
71
|
}, children: "Sign in with a different account" }) }) }));
|
|
54
72
|
};
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { BlockMethod } from './styled';
|
|
4
|
-
import { Text } from '../../styled';
|
|
2
|
+
import { ChevronRightIcon } from '@antscorp/antsomi-ui/es/components/icons';
|
|
3
|
+
import { BlockMethod, MethodContent, MethodDescription, MethodIcon, MethodLabel } from './styled';
|
|
5
4
|
export const Method = (props) => {
|
|
6
|
-
const { onClick, icon, label, disable, name } = props;
|
|
5
|
+
const { onClick, icon, label, description, disable, name } = props;
|
|
7
6
|
const onChooseMethod = () => {
|
|
8
7
|
if (!disable && onClick) {
|
|
9
8
|
onClick(name);
|
|
10
9
|
}
|
|
11
10
|
};
|
|
12
|
-
return (_jsxs(BlockMethod, { onClick: onChooseMethod, disable: disable, "data-test": name, children: [_jsx("
|
|
11
|
+
return (_jsxs(BlockMethod, { type: "button", onClick: onChooseMethod, disabled: disable, "$disable": disable, "data-test": name, children: [_jsx(MethodIcon, { children: icon }), _jsxs(MethodContent, { children: [_jsx(MethodLabel, { "$disable": disable, children: label }), _jsx(MethodDescription, { "$disable": disable, children: description })] }), _jsx(ChevronRightIcon, { "aria-hidden": true, color: disable ? '#9c9b9b' : '#005eb8', width: 20, height: 20 })] }));
|
|
13
12
|
};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
export declare const TextInfo: import("styled-components").StyledComponent<"span", any, {
|
|
3
2
|
isMobile: boolean;
|
|
4
3
|
}, never>;
|
|
5
4
|
export declare const SubTitle: import("styled-components").StyledComponent<"span", any, {
|
|
6
5
|
isMobile: boolean;
|
|
7
6
|
}, never>;
|
|
8
|
-
export declare const BlockMethod: import("styled-components").StyledComponent<
|
|
9
|
-
disable?: boolean | undefined;
|
|
7
|
+
export declare const BlockMethod: import("styled-components").StyledComponent<"button", any, {
|
|
8
|
+
$disable?: boolean | undefined;
|
|
9
|
+
}, never>;
|
|
10
|
+
export declare const MethodIcon: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
11
|
+
export declare const MethodContent: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
12
|
+
export declare const MethodLabel: import("styled-components").StyledComponent<"span", any, {
|
|
13
|
+
$disable?: boolean | undefined;
|
|
14
|
+
}, never>;
|
|
15
|
+
export declare const MethodDescription: import("styled-components").StyledComponent<"span", any, {
|
|
16
|
+
$disable?: boolean | undefined;
|
|
10
17
|
}, never>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Flex } from 'antd';
|
|
2
1
|
import styled from 'styled-components';
|
|
3
2
|
export const TextInfo = styled.span `
|
|
4
3
|
color: #7f7f7f;
|
|
@@ -9,16 +8,65 @@ export const SubTitle = styled.span `
|
|
|
9
8
|
font-size: ${(props) => (props.isMobile ? ' 16px ' : '14px')};
|
|
10
9
|
font-weight: 500;
|
|
11
10
|
`;
|
|
12
|
-
export const BlockMethod = styled
|
|
11
|
+
export const BlockMethod = styled.button `
|
|
12
|
+
display: flex;
|
|
13
13
|
align-items: center;
|
|
14
14
|
gap: 10px;
|
|
15
|
+
width: 100%;
|
|
16
|
+
min-height: 64px;
|
|
15
17
|
padding: 10px;
|
|
16
|
-
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
cursor: ${props => (props.$disable ? 'not-allowed' : 'pointer')};
|
|
20
|
+
background-color: #ffffff;
|
|
21
|
+
border: 1px solid #b8cfe6;
|
|
17
22
|
border-radius: 10px;
|
|
23
|
+
font-family: inherit;
|
|
24
|
+
text-align: left;
|
|
25
|
+
opacity: ${props => (props.$disable ? '0.5' : '1')};
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
&:hover:not(:disabled) {
|
|
28
|
+
background-color: #f2f9ff;
|
|
29
|
+
border-color: #81bcf4;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:focus-visible {
|
|
33
|
+
outline: 2px solid #005eb8;
|
|
34
|
+
outline-offset: 2px;
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
37
|
+
export const MethodIcon = styled.span `
|
|
38
|
+
display: flex;
|
|
39
|
+
flex: 0 0 24px;
|
|
40
|
+
align-self: flex-start;
|
|
41
|
+
align-items: flex-start;
|
|
42
|
+
justify-content: flex-start;
|
|
43
|
+
margin-top: 2px;
|
|
44
|
+
|
|
45
|
+
svg {
|
|
46
|
+
width: 24px;
|
|
47
|
+
height: 24px;
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
export const MethodContent = styled.span `
|
|
51
|
+
display: flex;
|
|
52
|
+
flex: 1;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
gap: 5px;
|
|
56
|
+
`;
|
|
57
|
+
export const MethodLabel = styled.span `
|
|
58
|
+
color: ${props => (props.$disable ? '#9c9b9b' : '#000000')};
|
|
59
|
+
font-size: 14px;
|
|
60
|
+
|
|
61
|
+
@media (max-width: 768px) {
|
|
62
|
+
font-size: 16px;
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
export const MethodDescription = styled.span `
|
|
66
|
+
color: ${props => (props.$disable ? '#9c9b9b' : '#595959')};
|
|
67
|
+
font-size: 12px;
|
|
20
68
|
|
|
21
|
-
|
|
22
|
-
|
|
69
|
+
@media (max-width: 768px) {
|
|
70
|
+
font-size: 13px;
|
|
23
71
|
}
|
|
24
72
|
`;
|
|
@@ -186,7 +186,7 @@ export const LoginWithEmail = ({ loginData, domainLogin, codeKey = 'code', token
|
|
|
186
186
|
const renderAlternativeSignIn = () => (_jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
187
187
|
fontSize: isMobile ? '16px' : '14px',
|
|
188
188
|
}, children: "Sign in with a different account" }) }));
|
|
189
|
-
const renderContent = () => (_jsxs(Flex, { vertical: true, gap: 50,
|
|
189
|
+
const renderContent = () => (_jsxs(Flex, { vertical: true, gap: 50, 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 your security, we need to verify your identity before continuing." })] }), _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
190
|
const renderFooter = () => renderAlternativeSignIn();
|
|
191
|
-
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
191
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: renderContent(), footer: renderFooter() }));
|
|
192
192
|
};
|
|
@@ -99,9 +99,9 @@ export const LoginWithGG = ({ domainLogin, codeKey = 'code', token = '', onLogin
|
|
|
99
99
|
const renderAlternativeSignIn = () => (_jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
100
100
|
fontSize: isMobile ? '16px' : '14px',
|
|
101
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
|
|
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 your security, we need to verify your identity before continuing." })] }));
|
|
103
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,
|
|
104
|
+
const renderContent = () => (_jsxs(Flex, { vertical: true, gap: 50, children: [renderHeaderSection(), renderInputSection()] }));
|
|
105
105
|
const renderFooter = () => renderAlternativeSignIn();
|
|
106
|
-
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
106
|
+
return (_jsx(WidgetLayout, { header: null, isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: renderContent(), footer: renderFooter() }));
|
|
107
107
|
};
|
|
@@ -12,8 +12,9 @@ import { Method } from './Method';
|
|
|
12
12
|
// Images
|
|
13
13
|
import loginStep2Image from '../../../../../assets/images/components/Login/loginStep2.png';
|
|
14
14
|
import { Text } from '../../styled';
|
|
15
|
+
import { SubTitle } from './styled';
|
|
15
16
|
import { Title } from '../WidgetLayout/styled';
|
|
16
|
-
import { EmailTemplateIcon,
|
|
17
|
+
import { EmailTemplateIcon, PhoneIphoneIcon } from '@antscorp/antsomi-ui/es/components/icons';
|
|
17
18
|
import { maskEmail } from './utils';
|
|
18
19
|
import { LOGIN_METHODS } from '../../constants';
|
|
19
20
|
export const ChooseMethod = props => {
|
|
@@ -24,31 +25,47 @@ export const ChooseMethod = props => {
|
|
|
24
25
|
}
|
|
25
26
|
};
|
|
26
27
|
const methods = useMemo(() => {
|
|
27
|
-
const options = loginData?.auth_options || []
|
|
28
|
-
|
|
28
|
+
const options = [...(loginData?.auth_options || [])].sort((first, second) => {
|
|
29
|
+
if (first.provider === 'email') {
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
if (second.provider === 'email') {
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
return 0;
|
|
36
|
+
});
|
|
37
|
+
return options
|
|
38
|
+
.filter(opt => opt.provider !== 'google' || loginData.G2FA_user === 1)
|
|
39
|
+
.flatMap(opt => {
|
|
29
40
|
switch (opt.provider) {
|
|
30
41
|
case 'google':
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
:
|
|
38
|
-
|
|
42
|
+
return [
|
|
43
|
+
{
|
|
44
|
+
disable: opt.status !== 1,
|
|
45
|
+
icon: _jsx(PhoneIphoneIcon, { color: "#005eb8" }),
|
|
46
|
+
name: LOGIN_METHODS.GOOGLE_AUTHENTICATOR,
|
|
47
|
+
label: 'Authenticator app',
|
|
48
|
+
description: opt.status === 1
|
|
49
|
+
? 'Enter the code from your authenticator app.'
|
|
50
|
+
: 'Enter the code from your authenticator app. Authenticator not available.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
39
53
|
case 'email':
|
|
40
|
-
return
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
disable: opt.status !== 1,
|
|
57
|
+
icon: _jsx(EmailTemplateIcon, { color: "#005eb8" }),
|
|
58
|
+
name: LOGIN_METHODS.EMAIL,
|
|
59
|
+
label: 'Email Verification',
|
|
60
|
+
description: `We'll send a 6-digit verification code to ${maskEmail(get(loginData, 'personal.email', ''))}`,
|
|
61
|
+
},
|
|
62
|
+
];
|
|
46
63
|
default:
|
|
47
|
-
return
|
|
64
|
+
return [];
|
|
48
65
|
}
|
|
49
66
|
});
|
|
50
67
|
}, [loginData]);
|
|
51
|
-
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
68
|
+
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: _jsxs(Flex, { vertical: true, gap: 50, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: loginStep2Image, alt: "" }), _jsx(Text, { isMobile: isMobile, color: "#595959", isCenter: true, children: "For your security, we need to verify your identity before continuing." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 13, children: [_jsx(Flex, { gap: 5, align: "center", justify: "center", children: _jsx(SubTitle, { isMobile: isMobile, children: "How would you like to verify your identity?" }) }), _jsx(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: methods.map(({ disable, icon, name, label, description }) => (_jsx(Method, { disable: disable, onClick: onChooseMethod, icon: icon, name: name, label: label, description: description }, name))) })] })] }), footer: _jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
52
69
|
fontSize: isMobile ? '16px' : '14px',
|
|
53
70
|
}, children: "Sign in with a different account" }) }) }));
|
|
54
71
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cleanup, render, screen } from '@testing-library/react';
|
|
3
|
+
import { ChooseMethod as LoginChooseMethod } from './ChooseMethod';
|
|
4
|
+
import { ChooseMethod as BasicLoginChooseMethod } from '../../../BasicLogin/components/ChooseMethod/ChooseMethod';
|
|
5
|
+
const loginDataWithout2FA = {
|
|
6
|
+
G2FA_user: 0,
|
|
7
|
+
personal: {
|
|
8
|
+
avatar: '',
|
|
9
|
+
email: 'user@example.com',
|
|
10
|
+
full_name: 'Test User',
|
|
11
|
+
language: 'en',
|
|
12
|
+
role: '',
|
|
13
|
+
user_id: '1',
|
|
14
|
+
},
|
|
15
|
+
auth_options: [
|
|
16
|
+
{ provider: 'google', status: 1 },
|
|
17
|
+
{ provider: 'email', status: 1 },
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
describe.each([
|
|
21
|
+
['Login', LoginChooseMethod],
|
|
22
|
+
['BasicLogin', BasicLoginChooseMethod],
|
|
23
|
+
])('%s ChooseMethod', (_, ChooseMethod) => {
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
it('renders Google Authenticator only when the account has enabled 2FA', () => {
|
|
26
|
+
const { rerender } = render(_jsx(ChooseMethod, { backLogin: () => undefined, loginData: loginDataWithout2FA, onChooseMethod: () => undefined }));
|
|
27
|
+
expect(screen.queryByText('Enter the code from your authenticator app.')).toBeNull();
|
|
28
|
+
expect(screen.queryByRole('button', { name: /Email Verification/ })).not.toBeNull();
|
|
29
|
+
rerender(_jsx(ChooseMethod, { backLogin: () => undefined, loginData: { ...loginDataWithout2FA, G2FA_user: 1 }, onChooseMethod: () => undefined }));
|
|
30
|
+
expect(screen.queryByText('Enter the code from your authenticator app.')).not.toBeNull();
|
|
31
|
+
});
|
|
32
|
+
it('renders each verification method with a label and description', () => {
|
|
33
|
+
render(_jsx(ChooseMethod, { backLogin: () => undefined, loginData: { ...loginDataWithout2FA, G2FA_user: 1 }, onChooseMethod: () => undefined }));
|
|
34
|
+
expect(screen.queryByText('How would you like to verify your identity?')).not.toBeNull();
|
|
35
|
+
expect(screen.queryByRole('button', {
|
|
36
|
+
name: "Email Verification We'll send a 6-digit verification code to u****r@e*******m.",
|
|
37
|
+
})).not.toBeNull();
|
|
38
|
+
expect(screen.queryByRole('button', {
|
|
39
|
+
name: 'Authenticator app Enter the code from your authenticator app.',
|
|
40
|
+
})).not.toBeNull();
|
|
41
|
+
});
|
|
42
|
+
it('renders Email Verification before Authenticator app regardless of backend order', () => {
|
|
43
|
+
render(_jsx(ChooseMethod, { backLogin: () => undefined, loginData: { ...loginDataWithout2FA, G2FA_user: 1 }, onChooseMethod: () => undefined }));
|
|
44
|
+
const methodButtons = screen.getAllByRole('button', {
|
|
45
|
+
name: /Email Verification|Authenticator app/,
|
|
46
|
+
});
|
|
47
|
+
expect(methodButtons[0].textContent).toContain('Email Verification');
|
|
48
|
+
expect(methodButtons[1].textContent).toContain('Authenticator app');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { BlockMethod } from './styled';
|
|
4
|
-
import { Text } from '../../styled';
|
|
2
|
+
import { ChevronRightIcon } from '@antscorp/antsomi-ui/es/components/icons';
|
|
3
|
+
import { BlockMethod, MethodContent, MethodDescription, MethodIcon, MethodLabel } from './styled';
|
|
5
4
|
export const Method = (props) => {
|
|
6
|
-
const { onClick, icon, label, disable, name } = props;
|
|
5
|
+
const { onClick, icon, label, description, disable, name } = props;
|
|
7
6
|
const onChooseMethod = () => {
|
|
8
7
|
if (!disable && onClick) {
|
|
9
8
|
onClick(name);
|
|
10
9
|
}
|
|
11
10
|
};
|
|
12
|
-
return (_jsxs(BlockMethod, { onClick: onChooseMethod, disable: disable, "data-test": name, children: [_jsx("
|
|
11
|
+
return (_jsxs(BlockMethod, { type: "button", onClick: onChooseMethod, disabled: disable, "$disable": disable, "data-test": name, children: [_jsx(MethodIcon, { children: icon }), _jsxs(MethodContent, { children: [_jsx(MethodLabel, { "$disable": disable, children: label }), _jsx(MethodDescription, { "$disable": disable, children: description })] }), _jsx(ChevronRightIcon, { "aria-hidden": true, color: disable ? '#9c9b9b' : '#005eb8', width: 20, height: 20 })] }));
|
|
13
12
|
};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
export declare const TextInfo: import("styled-components").StyledComponent<"span", any, {
|
|
3
2
|
isMobile: boolean;
|
|
4
3
|
}, never>;
|
|
5
4
|
export declare const SubTitle: import("styled-components").StyledComponent<"span", any, {
|
|
6
5
|
isMobile: boolean;
|
|
7
6
|
}, never>;
|
|
8
|
-
export declare const BlockMethod: import("styled-components").StyledComponent<
|
|
9
|
-
disable?: boolean | undefined;
|
|
7
|
+
export declare const BlockMethod: import("styled-components").StyledComponent<"button", any, {
|
|
8
|
+
$disable?: boolean | undefined;
|
|
9
|
+
}, never>;
|
|
10
|
+
export declare const MethodIcon: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
11
|
+
export declare const MethodContent: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
12
|
+
export declare const MethodLabel: import("styled-components").StyledComponent<"span", any, {
|
|
13
|
+
$disable?: boolean | undefined;
|
|
14
|
+
}, never>;
|
|
15
|
+
export declare const MethodDescription: import("styled-components").StyledComponent<"span", any, {
|
|
16
|
+
$disable?: boolean | undefined;
|
|
10
17
|
}, never>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Flex } from 'antd';
|
|
2
1
|
import styled from 'styled-components';
|
|
3
2
|
export const TextInfo = styled.span `
|
|
4
3
|
color: #7f7f7f;
|
|
@@ -9,16 +8,65 @@ export const SubTitle = styled.span `
|
|
|
9
8
|
font-size: ${(props) => (props.isMobile ? ' 16px ' : '14px')};
|
|
10
9
|
font-weight: 500;
|
|
11
10
|
`;
|
|
12
|
-
export const BlockMethod = styled
|
|
11
|
+
export const BlockMethod = styled.button `
|
|
12
|
+
display: flex;
|
|
13
13
|
align-items: center;
|
|
14
14
|
gap: 10px;
|
|
15
|
+
width: 100%;
|
|
16
|
+
min-height: 64px;
|
|
15
17
|
padding: 10px;
|
|
16
|
-
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
cursor: ${props => (props.$disable ? 'not-allowed' : 'pointer')};
|
|
20
|
+
background-color: #ffffff;
|
|
21
|
+
border: 1px solid #b8cfe6;
|
|
17
22
|
border-radius: 10px;
|
|
23
|
+
font-family: inherit;
|
|
24
|
+
text-align: left;
|
|
25
|
+
opacity: ${props => (props.$disable ? '0.5' : '1')};
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
&:hover:not(:disabled) {
|
|
28
|
+
background-color: #f2f9ff;
|
|
29
|
+
border-color: #81bcf4;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:focus-visible {
|
|
33
|
+
outline: 2px solid #005eb8;
|
|
34
|
+
outline-offset: 2px;
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
37
|
+
export const MethodIcon = styled.span `
|
|
38
|
+
display: flex;
|
|
39
|
+
flex: 0 0 24px;
|
|
40
|
+
align-self: flex-start;
|
|
41
|
+
align-items: flex-start;
|
|
42
|
+
justify-content: flex-start;
|
|
43
|
+
margin-top: 2px;
|
|
44
|
+
|
|
45
|
+
svg {
|
|
46
|
+
width: 24px;
|
|
47
|
+
height: 24px;
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
export const MethodContent = styled.span `
|
|
51
|
+
display: flex;
|
|
52
|
+
flex: 1;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
gap: 5px;
|
|
56
|
+
`;
|
|
57
|
+
export const MethodLabel = styled.span `
|
|
58
|
+
color: ${props => (props.$disable ? '#9c9b9b' : '#000000')};
|
|
59
|
+
font-size: 14px;
|
|
60
|
+
|
|
61
|
+
@media (max-width: 768px) {
|
|
62
|
+
font-size: 16px;
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
export const MethodDescription = styled.span `
|
|
66
|
+
color: ${props => (props.$disable ? '#9c9b9b' : '#595959')};
|
|
67
|
+
font-size: 12px;
|
|
20
68
|
|
|
21
|
-
|
|
22
|
-
|
|
69
|
+
@media (max-width: 768px) {
|
|
70
|
+
font-size: 13px;
|
|
23
71
|
}
|
|
24
72
|
`;
|
|
@@ -177,7 +177,7 @@ export const LoginSelectPortal = props => {
|
|
|
177
177
|
return draftListNetwork.filter(netWork => netWork.networkName.toLocaleLowerCase().indexOf(state.portalSearch.toLocaleLowerCase()) !==
|
|
178
178
|
-1);
|
|
179
179
|
}, [listNetworks, state.portalSearch]);
|
|
180
|
-
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), gapContent:
|
|
180
|
+
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), gapContent: 20, isShowLogo: false, title: "Select Portal", content: _jsxs(Flex, { vertical: true, gap: 30, children: [_jsxs(Flex, { vertical: true, gap: 20, children: [_jsx(StyleInput, { isMobile: isMobile, placeholder: "Search", suffix: _jsx(Icon, { type: "icon-ants-search-2", style: {
|
|
181
181
|
fontSize: 24,
|
|
182
182
|
}, color: "#595959" }), onChange: e => setPortalSearch(e.target.value) }), isEmpty(filterListNetworks) ? (_jsxs(Flex, { vertical: true, align: "center", justify: "center", style: { height: 514 }, gap: 15, children: [!isMobile && _jsx(Image, { src: NoData, alt: "", width: 80, height: 80 }), _jsx(Text, { style: {
|
|
183
183
|
color: '#595959',
|
|
@@ -205,7 +205,7 @@ export const LoginWithEmail = ({ loginData, domainLogin, codeKey = 'code', token
|
|
|
205
205
|
const baseText = `Please enter the 6-digit code send to ${maskedEmail} Haven't received it? `;
|
|
206
206
|
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.`)] }) }));
|
|
207
207
|
};
|
|
208
|
-
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: userAvatar, name: userFullName, email: userEmail }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
208
|
+
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: userAvatar, name: userFullName, email: userEmail }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: _jsxs(Flex, { vertical: true, gap: 50, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: loginStep2Image, alt: "Identity Verification" }), _jsx(Text, { isMobile: isMobile, color: "#595959", isCenter: true, children: "For your security, we need to verify your identity before continuing." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 15, children: [renderResendSection(), _jsxs(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: [_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()] }), _jsx(Checkbox, { checked: state.isTrust, onChange: handleTrustChange, disabled: state.isTooManyMistakes, children: _jsx(TextInfo, { isMobile: isMobile, children: "Remember this browser for future logins" }) })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 30 : 15, style: { marginTop: isMobile ? 20 : 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" })] })] })] }), footer: _jsx(Flex, { vertical: true, gap: 115, children: _jsx(Flex, { justify: "center", children: _jsx(Button, { type: "text", onClick: handleBack, style: {
|
|
209
209
|
fontSize: isMobile ? '16px' : '14px',
|
|
210
210
|
}, children: "Sign in with a different account" }) }) }) }));
|
|
211
211
|
};
|
|
@@ -98,7 +98,7 @@ export const LoginWithGG = props => {
|
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
}, [state.code]);
|
|
101
|
-
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent:
|
|
101
|
+
return (_jsx(WidgetLayout, { header: _jsx(Avatar, { image: get(loginData, 'personal.avatar'), name: get(loginData, 'personal.full_name'), email: get(loginData, 'personal.email') }), isShowLogo: false, title: _jsx(Title, { isMobile: isMobile, style: { marginTop: 20 }, children: "Identity Verification" }), gapContent: 20, content: _jsxs(Flex, { vertical: true, gap: 50, children: [_jsxs(Flex, { vertical: true, gap: 20, align: "center", children: [_jsx("img", { src: loginStep2Image, alt: "" }), _jsx(Text, { isMobile: isMobile, color: "#595959", isCenter: true, children: "For your security, we need to verify your identity before continuing." })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 10 : 15, children: [_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: {
|
|
102
102
|
marginTop: 20,
|
|
103
103
|
textAlign: 'center',
|
|
104
104
|
}, children: _jsxs(Text, { isMobile: isMobile, children: ["Open Google Authenticator and enter the code from ", _jsx("b", { children: "antsomi.com" })] }) }) })] }), _jsxs(Flex, { vertical: true, gap: isMobile ? 20 : 11, children: [_jsxs(Flex, { vertical: true, gap: 10, children: [_jsx(StyleInput, { isMobile: isMobile, maxLength: 6, placeholder: "Input your code", value: state.code, onChange: e => {
|
|
@@ -2,4 +2,7 @@
|
|
|
2
2
|
export declare const Title: import("styled-components").StyledComponent<"div", any, {
|
|
3
3
|
isMobile: boolean;
|
|
4
4
|
}, never>;
|
|
5
|
+
export declare const Label: import("styled-components").StyledComponent<"div", any, {
|
|
6
|
+
isMobile: boolean;
|
|
7
|
+
}, never>;
|
|
5
8
|
export declare const WidgetLayoutMain: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
|
|
@@ -6,6 +6,12 @@ export const Title = styled.div `
|
|
|
6
6
|
color: #005eb8;
|
|
7
7
|
text-align: center;
|
|
8
8
|
`;
|
|
9
|
+
export const Label = styled.div `
|
|
10
|
+
font-size: ${props => (props.isMobile ? '16px' : '14px')};
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
color: #005eb8;
|
|
13
|
+
text-align: center;
|
|
14
|
+
`;
|
|
9
15
|
export const WidgetLayoutMain = styled(Flex) `
|
|
10
16
|
position: relative;
|
|
11
17
|
|
|
@@ -126,4 +126,5 @@ export const Text = styled.div `
|
|
|
126
126
|
color: ${props => (props.color ? props.color : ' #000000')};
|
|
127
127
|
font-size: ${props => (props.isMobile ? ' 14px !important' : '12px')};
|
|
128
128
|
font-weight: ${props => (props.isBold ? 'bold' : 'normal')};
|
|
129
|
+
text-align: ${props => (props.isCenter ? 'center' : 'left')};
|
|
129
130
|
`;
|