From 57b320a799e2c27216ac8309d77a2b6ec22b9e91 Mon Sep 17 00:00:00 2001 From: aastha Date: Wed, 18 Dec 2024 11:41:42 +0530 Subject: [PATCH] Revert "fix: revert verify/sign in changes (#3364)" This reverts commit 160753f3c67f122f72feb8029d54439c0b978b7f. --- android/app/src/main/assets/splash-screen.png | Bin 0 -> 11789 bytes .../ic_launcher_new_splash_foreground.xml | 8 +- android/app/src/main/res/fyle_logo_square.png | Bin 0 -> 15224 bytes .../mipmap-hdpi/ic_launcher_new_splash.png | Bin 1261 -> 0 bytes .../mipmap-hdpi/ic_launcher_new_splash.webp | Bin 0 -> 1054 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 260 -> 395 bytes .../mipmap-mdpi/ic_launcher_new_splash.png | Bin 924 -> 0 bytes .../mipmap-mdpi/ic_launcher_new_splash.webp | Bin 0 -> 784 bytes .../ic_launcher_new_splash_round.webp | Bin 0 -> 1432 bytes .../mipmap-xhdpi/ic_launcher_new_splash.png | Bin 1840 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_new_splash.png | Bin 2604 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_new_splash.webp | Bin 0 -> 1678 bytes .../ic_launcher_new_splash_round.webp | Bin 0 -> 4734 bytes .../mipmap-xxxhdpi/ic_launcher_new_splash.png | Bin 3575 -> 0 bytes .../ic_launcher_new_splash.webp | Bin 0 -> 2238 bytes .../ic_launcher_new_splash_round.webp | Bin 0 -> 6658 bytes .../ic_launcher_new_splash_background.xml | 2 +- android/app/src/main/res/values/styles.xml | 2 +- capacitor.config.json | 1 + fyle_logo.png | Bin 0 -> 1241 bytes ios/App/App/Assets.xcassets/fyle_logo.png | Bin 25153 -> 34212 bytes .../App/Base.lproj/LaunchScreen.storyboard | 2 +- ios/App/App/fyle_logo.png | Bin 25153 -> 34212 bytes ios/App/fyle_logo.png | Bin 25153 -> 34212 bytes src/app/auth/disabled/disabled.page.html | 50 +-- src/app/auth/disabled/disabled.page.scss | 127 +++---- .../auth/new-password/new-password.module.ts | 2 + .../auth/new-password/new-password.page.html | 229 ++++++------ .../auth/new-password/new-password.page.scss | 134 ++++--- .../new-password/new-password.page.spec.ts | 241 ++++++------- .../auth/new-password/new-password.page.ts | 131 +++---- .../pending-verification.page.html | 122 +++++-- .../pending-verification.page.scss | 203 +++++++++++ .../pending-verification.page.spec.ts | 159 ++++++--- .../pending-verification.page.ts | 56 ++- .../reset-password/reset-password.page.html | 105 +++++- .../reset-password/reset-password.page.scss | 174 +++++++++ .../reset-password.page.spec.ts | 192 +++++++--- .../reset-password/reset-password.page.ts | 81 ++++- .../auth/sign-in/error/error.component.html | 21 +- .../auth/sign-in/error/error.component.scss | 42 ++- .../sign-in/error/error.component.spec.ts | 20 +- src/app/auth/sign-in/error/error.component.ts | 13 +- .../auth/sign-in/sign-in-page-state.enum.ts | 5 + src/app/auth/sign-in/sign-in.page.html | 251 +++++++------ src/app/auth/sign-in/sign-in.page.scss | 333 +++++++++++++----- src/app/auth/sign-in/sign-in.page.spec.ts | 98 ++++-- src/app/auth/sign-in/sign-in.page.ts | 21 +- src/app/auth/verify/verify.page.html | 21 +- src/app/auth/verify/verify.page.scss | 105 ++---- src/app/auth/verify/verify.page.spec.ts | 28 +- src/app/auth/verify/verify.page.ts | 16 +- src/app/core/services/loader.service.spec.ts | 2 +- src/app/core/services/loader.service.ts | 2 +- .../invited-user/invited-user.module.ts | 2 + .../invited-user/invited-user.page.html | 241 ++++++------- .../invited-user/invited-user.page.scss | 134 +++---- .../invited-user/invited-user.page.spec.ts | 194 +++++----- .../invited-user/invited-user.page.ts | 95 ++--- .../password-check-tooltip.component.html | 22 ++ .../password-check-tooltip.component.scss | 84 +++++ .../password-check-tooltip.component.spec.ts | 153 ++++++++ .../password-check-tooltip.component.ts | 81 +++++ .../password-checks.model.ts | 7 + .../password-criteria.model.ts | 4 + src/app/shared/shared.module.ts | 3 + src/assets/svg/arrow-left.svg | 4 +- src/assets/svg/check-circle-outline.svg | 6 +- src/assets/svg/error-outlined.svg | 9 + src/assets/svg/eye-slash.svg | 7 + src/assets/svg/eye.svg | 4 + src/assets/svg/loader.svg | 4 +- src/assets/videos/mobile-onboarding.mp4 | Bin 0 -> 1496359 bytes src/global.scss | 5 +- src/theme/colors.scss | 1 + 75 files changed, 2676 insertions(+), 1383 deletions(-) create mode 100644 android/app/src/main/assets/splash-screen.png create mode 100644 android/app/src/main/res/fyle_logo_square.png delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_new_splash.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_new_splash.webp delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_new_splash.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_new_splash.webp create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_new_splash_round.webp delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_new_splash.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.webp create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash_round.webp delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_new_splash.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_new_splash.webp create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_new_splash_round.webp create mode 100644 capacitor.config.json create mode 100644 fyle_logo.png create mode 100644 src/app/auth/pending-verification/pending-verification.page.scss create mode 100644 src/app/auth/reset-password/reset-password.page.scss create mode 100644 src/app/auth/sign-in/sign-in-page-state.enum.ts create mode 100644 src/app/shared/components/password-check-tooltip/password-check-tooltip.component.html create mode 100644 src/app/shared/components/password-check-tooltip/password-check-tooltip.component.scss create mode 100644 src/app/shared/components/password-check-tooltip/password-check-tooltip.component.spec.ts create mode 100644 src/app/shared/components/password-check-tooltip/password-check-tooltip.component.ts create mode 100644 src/app/shared/components/password-check-tooltip/password-checks.model.ts create mode 100644 src/app/shared/components/password-check-tooltip/password-criteria.model.ts create mode 100644 src/assets/svg/error-outlined.svg create mode 100644 src/assets/svg/eye-slash.svg create mode 100644 src/assets/svg/eye.svg create mode 100644 src/assets/videos/mobile-onboarding.mp4 diff --git a/android/app/src/main/assets/splash-screen.png b/android/app/src/main/assets/splash-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b042ee047fae0814464568f326826db4b2fe1a GIT binary patch literal 11789 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 RuNjE%5VVc7GBi(~`y1%7u7Cgl literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable/ic_launcher_new_splash_foreground.xml b/android/app/src/main/res/drawable/ic_launcher_new_splash_foreground.xml index ece36e455d..b6ff074f5f 100644 --- a/android/app/src/main/res/drawable/ic_launcher_new_splash_foreground.xml +++ b/android/app/src/main/res/drawable/ic_launcher_new_splash_foreground.xml @@ -16,19 +16,19 @@ android:fillType="evenOdd"/> diff --git a/android/app/src/main/res/fyle_logo_square.png b/android/app/src/main/res/fyle_logo_square.png new file mode 100644 index 0000000000000000000000000000000000000000..119fe28ec11f434618f95718e5339d88efbb90d7 GIT binary patch literal 15224 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 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_new_splash.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_new_splash.webp new file mode 100644 index 0000000000000000000000000000000000000000..ad2642ff46d57f1231ba96c2e98276d1b38b285c GIT binary patch literal 1054 zcmV+(1mXKqNk&E%1ONb6MM6+kP&iBq1ONapN5Byfe+Q|NBuSD-WY+A-Wic#&D)ZZW zt1E*B`0OvE7d)_56u^T;0*R-!_#`FA=S3FY}xlW z+?@*U42eJkhLm7T3JpLEcY?S(ya9lKfPjE@&;$Yk0xF;dG(bQtlTmO69>G5-nf!y_ zOn_Ph1Mr(r<3uJhk%jqgi1Xhv4Ghfbn+y;cWMWRsAk&adP%`|-0dk-1av<>K;%Ij}+j2aOh&Cc35HVU{v~Brt5plN@acRf0JzZMF zmy3vqZ8_SXyUX(LDdNl3XxkEPM8vUN8X~~Uzd3E~LBws{#Z?sPJ@gu?%w41AHK?q+xJ}?LRR&pmP{d^fYfo~n*ZTf(P-{@+;j-3WpMEyF%i0qWfg*~y z1tOwIbs-Q@NtIL&3RF^My(R+36md!Ksj3^w{3Z}lpfZtabD1IpA}({8B8n(|-D@-R z`L^E$FW29*JCg!RCIL}2y?-C(bk6@enbQaVKlhbP3MiQ*lk)d{`~G}8uI}H*+S~K* z&HL-$o+664L@@;}Q$!I+ui`S7xXfh`1h=!8`c5T{g9c>q`O6Pj_##y~dwG z!nSRO-Ars9&551VZiAXhou;-Kt8Qw$scqY~ZQJgTNOw1xsrh~p{ht8#<6Z9|CGtSW zB-LrsF}OuUM@9)v(GhM8It@DJUfuvMzM(=0)2Y%kR5W-=i87W zp~|AHEGFM07V0cZb4keOu%$Zd60(?lj$3OeDbF!2Mddm92Z5@wKy``*P{W`5Y+tfy zokD?SB$PS6LyP9E;(7w;R*COQex5W;Ve`$cLU}i-AK$EHqXZ)AQH8I0ym;@Sf<-(z z3K!aZV+#*kF^}f23J@fweV2AhtM3mPe_+bcAnr42bgsz{U*OrjS%TE6(^Spfv_3n= z^bO`dgR*lC?7s)w(kFO|5z{F_&65orss`M;OLuO55qhr#u#<~XyJJF|ICW!FXUv(M zk-hJB*4z=M8WAHWWjcW8(_6L28CJBu=?P#S}gR3^5PKEpV2=5zu z=A+FdrvANyYtEJPmoEUg1P}oP0*C+t00M{r0s%w-fi9lElH=;|j%l=bW9Q`TBD}Mc Y?Mn+Sz}pY6UkU&E16ZC~NXUMq0ED( z5r>3ePlw>a4w9(^mmUtcBOPQ=WcUsk9G~toIf?eCER$cY4GdidPgg&ebxsLQ0Cu}) At^fc4 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJ&H|6fVg?3oVGw3ym^DWND7ekj z#WAGf*4vAYybKH+M+|Hpa{lMzlb-O!kU4v)`mf-b3_b@~cxE(kN*FK-8zeBPB^+S! zIncm4qXEceWL8UHVgoDS#4e0QA0d;VT9C{}H{@j!w@ee;?KwX-c>#UE;OXk;vd$@? F2>>tjLhS$m diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_new_splash.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_new_splash.png deleted file mode 100644 index fbb5189b69bf36389038aef684350e16f8c568c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_new_splash.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_new_splash.png deleted file mode 100644 index ed8fc23e712975e89bdcfea137e13433b0033c4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1840 zcmbtVi8C9B7fvEXh?cPKtL(NK)uohZ5p}0U9dS2WlpyY-6x9%H+}czsOI2NURK`)I zs^Y#%qSRGK>L^NF>n_^0zu(OM1N+VQ-kW*z=9~9szL}S3VQ$RFBhCW=0Qk@*239Ba z&OgD;b&_YZ!jJ#}*B;v78YbL%^;x6^#zwO1VS_@fLQ>kQQ|4w$EpQg7fi_+77nW9~ucgywDIL?DOIKCavtufMKh&2xUS-Glz*;7W~v#}QMgR>hPrHkBE)m?C^!=xdDs0dR%Q@@7wH%8?=7Bz+Xg(Ip3~e|^%~OLwjtoU zh%HpEycSp4o?!+su#3>Q05KWDAjgPno?-BfyD4By2q;wUpB5&UA8rQ9?Q;WKX8Q4G z_0`A&Q@NoTu>U|)vhYBKJE)00avFC}P2Ly5fJu5EgmqT#mX6gLM%hT9r^WVrYk~uo zN%v!~RWY5m-A?^H%5o+Lwh|mf2N6B9Ki?Fhc};?@w^V-`FM-(;dXqndz#K@|Tf8u5 z=kxOWtG@&s-Gv1Y#0w8MX+*zU0ZbpSNK@=4MWQypnI}j0L2ZAVeQ|8OIT$aOa?h-G zpRVLJ2#P?y{K693vd|3T%6#^R#dwE(&h2u78`?pXCR0nDdfuk^G= z`$KS=la&hEyxqn zk2K$w{AyNSM|k|$s`2PB^k~QDj6^NfReW|xK&B<3Ne&y4IFL-6EU|4a>sZ+k#xG{C zvS#d7c5N;9CoW$=2IM?wdfBl#8owYfi<3ZXZCRjmo&A9*Y3)?JPIp&23!APYWmN&s zIQ+2~Ub|F`yx}Z$sV<4!^{~Z_^IXSH=h6O(-j=`}$q;SMS58$Og;+eN=*9Vk41y6n z;P|^z-+fgPR@OcZN`}zWrd~B-eWgLP%)H0QVGoe{t4RbHmJ|sjU&V0`s75vgI^@uGM|AVKospW4H&v(fZShjziFT1^DV!B}}vOcGM=)&@oSJw7< z0)5W`DM&c>)=L;&j?QFGxm5jcsASXSmJ&=OQq)ec2YYE;?Fn`#Bdv`I z!Y>BlPu$7|!ezz&GpSvmd_^BbGbGl{q?xRu!=ZI155i=e1?{_ny$2}bVS4ti-JLS| zYYjv?1vjb-bUon9#;SbkxDLBstG<(XJ+#Skp~;>ZMDL7Id_^4e-q_*3&BFC zk_6#R75(QuL|xJ~f9~l%)gj#I06euGNyImzLg*eD{J&DFl5DtDR<-7-8z(xi#-N|K zcmu8yNFxhgj@C-silBq~m{EHaNnwG~Z%laKrs^`o@;tpZci(pH%XAtJM=2Wq+8ozV zQ&C(ah9Os(9a=V^#KODP-Yxmz~UZmW;d5PN}I92CQwxlpFj^G5|bs@cMHd2fz^ zk!0Ub>`-O-l$OyC)wpo3mIl*sb*%y}rD9sa}EE= zWj;E8l`Bp|>GZE#lIx#xXT&xxi2oLj_&>^i8XrSGHMdDC4{qN+`Gf$pp}7G~?@sLB DE|yf$ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.png deleted file mode 100644 index 89e612ccf5adcbd0b3fe79b70c0bd86c234c419a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2604 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 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_new_splash.webp new file mode 100644 index 0000000000000000000000000000000000000000..dff53babfc72da3c980be8f4724dca79a3a77d97 GIT binary patch literal 1678 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 M8$ohEsm#>{06|m(R{#J2 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values/ic_launcher_new_splash_background.xml b/android/app/src/main/res/values/ic_launcher_new_splash_background.xml index 4294a955b9..cb5eb46f62 100644 --- a/android/app/src/main/res/values/ic_launcher_new_splash_background.xml +++ b/android/app/src/main/res/values/ic_launcher_new_splash_background.xml @@ -1,4 +1,4 @@ - #220033 + #FFFFFF \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index d0016f643b..a74326a208 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -18,6 +18,6 @@ \ No newline at end of file diff --git a/capacitor.config.json b/capacitor.config.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/capacitor.config.json @@ -0,0 +1 @@ +{} diff --git a/fyle_logo.png b/fyle_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..375696808a0591a6a29a733e58d90dbdfa9c124b GIT binary patch literal 1241 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 E0Hi_^LjV8( literal 25153 zcmeIa2T+tv(Nz30}gx^?US>iFIeMT+mY6w})j9 zf*||Osw?Xt2sH{pD4KUsf|@gI5#->{?wjg{E(mgn2mT{Ft8-)mRFb*qs3{`Z4Qzwp zVaIia^9l&^I)Zxn%1#8i(sou^;j$;$NOyT;=UhVXUgKJTQp;Dg>SXp4i!ekJLvOKgwG-Wd<)QQSIS?uIh= zE!cx~RO5H33Rs?_n{y0~Br7vvVDX=-$xI6QYRB*?L-M(ILUJs(2SKg9C*WIJd9L-^ zhl19$B;Ho>_Y% z=U(8ZBmjTpyeblP1fxs6F9foK^Ef zOhRig|J$;}f}wT1(WgO8)`h%w$-gxZ1Nc__!F`+^2lWBnp0WGuCDk#?KMiUqe;fk7yk)K>e+=6(iJ+~D_0XM8xbDi)9SozbCXTcg2*<^`J>7X zg^leIAp#doA00%H4wP;bTY&GRv)kW4mz<_18?%m3#AO@F2+zK#;FoETH1`$_alk(M z%|z^urrwQZ6)c||ySci*J6~Ibuopq>b9$DUaZ61@BLs2bUiI?%i1D2`O6D-t0PBL@ zP{X2wPF*>V`uSzTkDP(a3K-H#5l>mW!co^-B9L9*`+ArPL2@;{v3<5>o?c9n<*|N~ zEv#f;F6jEk8~HdAzS%SJxmoC~SnntHM%)8w-zzx#cZ5B6q2-$`bp*Yovl#hI8yVO7 z>LnKDOMxUMAl8^c*Y7^GlUnik6@J+UN#l*duc&<4^F1c~iJ5RA8X(-2!jlKvlZG?}cieE9QQo-ACX#yI)| zsGN@EU6N{Ypl4z@6SJokxg`+{k{C_v)oSF!5%iD@!R(wDR2`#~-?#DdkV;UA;zHQx zc2qMbXnrW!!}|?4j{ewZ8%JNUQsE5_UA$W@@Tj-Y7fcHn5dBv(r+=E%Al;9Quoo=> zvu0({-1kXz0yjh1>~koC>=y$c^WF<~bF*`uX>qB=t) z_9J3Zv|bmDvWVz3W&WnhJzm+eG_KrqXakTZz@+9ACjj#F*n4kk`(S>>hP+5t67vyO zK=ZLzoY3UGC#NT`J{_Al-!R7Ad#d4ohm`eW7PUd%kB?ATb0`OaY zZ0(u|$_?=E*{k6Gb_(khenp3IhQJNrFAfXh0uo=a0xI8{NO&D!c`2AyTB_yykb9XK zIKZHw`(IvX{7bzQ{Iq`imHOF5*|3K+F3KXrmk63-H}c6TmNQ zE(>XMkdZ7qaJ(2SPQo~CfqH~zd z{4*US0k#uDDZ{BTcs_}r*9d1?pC)@|E{HbnQPjZO*z0*2>l`vx4}$pT9)Y49RrJ5r z?nq9KpmE-0hURXlWXPdRz{H?$&>nz-5jsj5FSk^SZDTM=(qQCa;j*&TTbS{ZT0R8Y zg-RM(*YFX9)cDSbTOa49SZ&mjcNKfM@~Q1zR}uHSw9H^oG+D5o6OEf_%N4(xyN} z1Hpx_SKS=%Y2vXX$^wFL5^;OU!vHJ-sgR^ZI~`1e`tfzb0k@y

p6jgJ;f&W@=cY{a{vR0$XXq!J7lNpB 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

_f6`xuS$J!f?8&;C)vI|0XHK9oY9J9&&^{@q| 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 - + diff --git a/ios/App/App/fyle_logo.png b/ios/App/App/fyle_logo.png index 84e826c74055688fd5f716a7e7b79d08b3492c7f..b68fd4852a8da745f4ce9637bec38df6e1098251 100644 GIT binary patch literal 34212 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 E0Hi_^LjV8( literal 25153 zcmeIa2T+tv(Nz30}gx^?US>iFIeMT+mY6w})j9 zf*||Osw?Xt2sH{pD4KUsf|@gI5#->{?wjg{E(mgn2mT{Ft8-)mRFb*qs3{`Z4Qzwp zVaIia^9l&^I)Zxn%1#8i(sou^;j$;$NOyT;=UhVXUgKJTQp;Dg>SXp4i!ekJLvOKgwG-Wd<)QQSIS?uIh= zE!cx~RO5H33Rs?_n{y0~Br7vvVDX=-$xI6QYRB*?L-M(ILUJs(2SKg9C*WIJd9L-^ zhl19$B;Ho>_Y% z=U(8ZBmjTpyeblP1fxs6F9foK^Ef zOhRig|J$;}f}wT1(WgO8)`h%w$-gxZ1Nc__!F`+^2lWBnp0WGuCDk#?KMiUqe;fk7yk)K>e+=6(iJ+~D_0XM8xbDi)9SozbCXTcg2*<^`J>7X zg^leIAp#doA00%H4wP;bTY&GRv)kW4mz<_18?%m3#AO@F2+zK#;FoETH1`$_alk(M z%|z^urrwQZ6)c||ySci*J6~Ibuopq>b9$DUaZ61@BLs2bUiI?%i1D2`O6D-t0PBL@ zP{X2wPF*>V`uSzTkDP(a3K-H#5l>mW!co^-B9L9*`+ArPL2@;{v3<5>o?c9n<*|N~ zEv#f;F6jEk8~HdAzS%SJxmoC~SnntHM%)8w-zzx#cZ5B6q2-$`bp*Yovl#hI8yVO7 z>LnKDOMxUMAl8^c*Y7^GlUnik6@J+UN#l*duc&<4^F1c~iJ5RA8X(-2!jlKvlZG?}cieE9QQo-ACX#yI)| zsGN@EU6N{Ypl4z@6SJokxg`+{k{C_v)oSF!5%iD@!R(wDR2`#~-?#DdkV;UA;zHQx zc2qMbXnrW!!}|?4j{ewZ8%JNUQsE5_UA$W@@Tj-Y7fcHn5dBv(r+=E%Al;9Quoo=> zvu0({-1kXz0yjh1>~koC>=y$c^WF<~bF*`uX>qB=t) z_9J3Zv|bmDvWVz3W&WnhJzm+eG_KrqXakTZz@+9ACjj#F*n4kk`(S>>hP+5t67vyO zK=ZLzoY3UGC#NT`J{_Al-!R7Ad#d4ohm`eW7PUd%kB?ATb0`OaY zZ0(u|$_?=E*{k6Gb_(khenp3IhQJNrFAfXh0uo=a0xI8{NO&D!c`2AyTB_yykb9XK zIKZHw`(IvX{7bzQ{Iq`imHOF5*|3K+F3KXrmk63-H}c6TmNQ zE(>XMkdZ7qaJ(2SPQo~CfqH~zd z{4*US0k#uDDZ{BTcs_}r*9d1?pC)@|E{HbnQPjZO*z0*2>l`vx4}$pT9)Y49RrJ5r z?nq9KpmE-0hURXlWXPdRz{H?$&>nz-5jsj5FSk^SZDTM=(qQCa;j*&TTbS{ZT0R8Y zg-RM(*YFX9)cDSbTOa49SZ&mjcNKfM@~Q1zR}uHSw9H^oG+D5o6OEf_%N4(xyN} z1Hpx_SKS=%Y2vXX$^wFL5^;OU!vHJ-sgR^ZI~`1e`tfzb0k@y

p6jgJ;f&W@=cY{a{vR0$XXq!J7lNpB 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

_f6`xuS$J!f?8&;C)vI|0XHK9oY9J9&&^{@q| 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 E0Hi_^LjV8( literal 25153 zcmeIa2T+tv(Nz30}gx^?US>iFIeMT+mY6w})j9 zf*||Osw?Xt2sH{pD4KUsf|@gI5#->{?wjg{E(mgn2mT{Ft8-)mRFb*qs3{`Z4Qzwp zVaIia^9l&^I)Zxn%1#8i(sou^;j$;$NOyT;=UhVXUgKJTQp;Dg>SXp4i!ekJLvOKgwG-Wd<)QQSIS?uIh= zE!cx~RO5H33Rs?_n{y0~Br7vvVDX=-$xI6QYRB*?L-M(ILUJs(2SKg9C*WIJd9L-^ zhl19$B;Ho>_Y% z=U(8ZBmjTpyeblP1fxs6F9foK^Ef zOhRig|J$;}f}wT1(WgO8)`h%w$-gxZ1Nc__!F`+^2lWBnp0WGuCDk#?KMiUqe;fk7yk)K>e+=6(iJ+~D_0XM8xbDi)9SozbCXTcg2*<^`J>7X zg^leIAp#doA00%H4wP;bTY&GRv)kW4mz<_18?%m3#AO@F2+zK#;FoETH1`$_alk(M z%|z^urrwQZ6)c||ySci*J6~Ibuopq>b9$DUaZ61@BLs2bUiI?%i1D2`O6D-t0PBL@ zP{X2wPF*>V`uSzTkDP(a3K-H#5l>mW!co^-B9L9*`+ArPL2@;{v3<5>o?c9n<*|N~ zEv#f;F6jEk8~HdAzS%SJxmoC~SnntHM%)8w-zzx#cZ5B6q2-$`bp*Yovl#hI8yVO7 z>LnKDOMxUMAl8^c*Y7^GlUnik6@J+UN#l*duc&<4^F1c~iJ5RA8X(-2!jlKvlZG?}cieE9QQo-ACX#yI)| zsGN@EU6N{Ypl4z@6SJokxg`+{k{C_v)oSF!5%iD@!R(wDR2`#~-?#DdkV;UA;zHQx zc2qMbXnrW!!}|?4j{ewZ8%JNUQsE5_UA$W@@Tj-Y7fcHn5dBv(r+=E%Al;9Quoo=> zvu0({-1kXz0yjh1>~koC>=y$c^WF<~bF*`uX>qB=t) z_9J3Zv|bmDvWVz3W&WnhJzm+eG_KrqXakTZz@+9ACjj#F*n4kk`(S>>hP+5t67vyO zK=ZLzoY3UGC#NT`J{_Al-!R7Ad#d4ohm`eW7PUd%kB?ATb0`OaY zZ0(u|$_?=E*{k6Gb_(khenp3IhQJNrFAfXh0uo=a0xI8{NO&D!c`2AyTB_yykb9XK zIKZHw`(IvX{7bzQ{Iq`imHOF5*|3K+F3KXrmk63-H}c6TmNQ zE(>XMkdZ7qaJ(2SPQo~CfqH~zd z{4*US0k#uDDZ{BTcs_}r*9d1?pC)@|E{HbnQPjZO*z0*2>l`vx4}$pT9)Y49RrJ5r z?nq9KpmE-0hURXlWXPdRz{H?$&>nz-5jsj5FSk^SZDTM=(qQCa;j*&TTbS{ZT0R8Y zg-RM(*YFX9)cDSbTOa49SZ&mjcNKfM@~Q1zR}uHSw9H^oG+D5o6OEf_%N4(xyN} z1Hpx_SKS=%Y2vXX$^wFL5^;OU!vHJ-sgR^ZI~`1e`tfzb0k@y

p6jgJ;f&W@=cY{a{vR0$XXq!J7lNpB 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

_f6`xuS$J!f?8&;C)vI|0XHK9oY9J9&&^{@q| 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 - - - - - - - -

-
Account Disabled
- Stop -
- This account is no longer active. Please contact your company admin for details. +
+
+
+ +
+
+

Account disabled

+

+ This account is no longer active. Please contact your company admin for details. +

+
+
+
+ +
+ + Back to sign in +
+
- - - - - Incorrect Account? - Try Signing in Again - - - diff --git a/src/app/auth/disabled/disabled.page.scss b/src/app/auth/disabled/disabled.page.scss index 5fdb92d550..4b402c85cd 100644 --- a/src/app/auth/disabled/disabled.page.scss +++ b/src/app/auth/disabled/disabled.page.scss @@ -1,93 +1,80 @@ -$disabled-header: #220033; -$body-header: #000; -$body-subheader: #4a4a4a; -$password-icon: #b9beba; -$secondary-cta-border: #e0e0e0; +@import '../../../theme/colors.scss'; -.disabled { - &--header { - min-height: 140px; - } - - &--header-container { - min-height: 140px; - background-color: $disabled-header; - } +.disabled-user { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; - &--header-logo-container { - text-align: center; + &__content-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex-grow: 2; } - &--header-logo { - max-width: 100px; + &__arrow-icon { + fill: $pure-white; + margin-right: 8px; } - &--body { - padding: 24px; - text-align: center; + &__cta-text { + font-size: 14px; + font-weight: 500; } - &--body-field { - width: 100%; + &__cta { + margin: 0 20px 24px 20px; } - &--body-header { - font-size: 24px; - margin-top: 16px; - margin-bottom: 8px; - color: $body-header; - font-weight: 700; + &__cta-content { + display: flex; + align-items: center; + justify-content: center; } - &--image { - max-width: 125px; - padding: 12px; + &__error-icon-container { + width: 60px; + height: 60px; + border-radius: 8px; + background: $pale-pink; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 16px; } - &--subtext { - font-size: 16px; - color: $body-subheader; - margin-top: 8px; - margin-bottom: 24px; + &__error-icon { + width: 45px; + height: 45px; } - &--primary-cta { - .mat-button-base { - width: 100%; - font-weight: 700; - min-height: 47px; - } + &__text { + display: flex; + align-items: center; + gap: 8px; + flex-direction: column; } - &--password-visibility-icon { - color: $password-icon; + &__header { + color: $black; + font-size: 20px; + font-style: normal; + font-weight: 500; + line-height: normal; + height: 26px; + margin: 0; } - &--secondary-cta { - .mat-button-base { - width: 100%; - font-weight: 700; - min-height: 47px; - letter-spacing: 1.6px; - border: 1px solid $secondary-cta-border; - } - margin-top: 24px; - } - - &--redirect { - margin: 16px; + &__content { + color: $black-light; text-align: center; - font-size: 16px; - a { - text-decoration: none; - } - } - - &--edit-email { - text-align: end; - } - - &--greyed { - color: grey; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 1.25; + height: 36px; + width: 274px; } } diff --git a/src/app/auth/new-password/new-password.module.ts b/src/app/auth/new-password/new-password.module.ts index ebe48b4b6e..452791efbb 100644 --- a/src/app/auth/new-password/new-password.module.ts +++ b/src/app/auth/new-password/new-password.module.ts @@ -17,6 +17,7 @@ import { MatIconModule } from '@angular/material/icon'; import { MatButtonModule } from '@angular/material/button'; import { PopupComponent } from './popup/popup.component'; +import { SharedModule } from 'src/app/shared/shared.module'; @NgModule({ imports: [ @@ -30,6 +31,7 @@ import { PopupComponent } from './popup/popup.component'; ReactiveFormsModule, MatIconModule, MatButtonModule, + SharedModule, ], declarations: [NewPasswordPage, PopupComponent], }) diff --git a/src/app/auth/new-password/new-password.page.html b/src/app/auth/new-password/new-password.page.html index ad72afd5e7..e4955fc821 100644 --- a/src/app/auth/new-password/new-password.page.html +++ b/src/app/auth/new-password/new-password.page.html @@ -1,133 +1,108 @@ - - - - - - - - -
-
Reset password
-
+ +
+
+
- - - - - Is between 12 to 32 characters -
-
- - - - - Contains atleast 1 uppercase character -
-
- - - - - Contains atleast 1 lowercase character -
-
- - - - - Contains atleast 1 number -
-
- - - - - Contains atleast 1 special character +
Reset password
+
+
+
+
+
New password
+
+ +
+ +
+
+ +
+
+ Password cannot be empty +
+
+ Please enter a valid password. +
+
+
+
+
Confirm new password
+
+ +
+ +
+
+
+
+ Password cannot be empty +
+
+ Passwords do not match +
+
+
+
-
Please enter a new password
-
- - - - {{hide ? 'visibility_off' : 'visibility'}} - - -
-
- +
+ + Reset password + +
+ + Back to sign in +
- - - - - Back to Sign in - - - diff --git a/src/app/auth/new-password/new-password.page.scss b/src/app/auth/new-password/new-password.page.scss index e1afee8662..4341395b5c 100644 --- a/src/app/auth/new-password/new-password.page.scss +++ b/src/app/auth/new-password/new-password.page.scss @@ -1,84 +1,114 @@ -$new-password-header: #220033; -$form-header: #000; -$form-subheader: #4a4a4a; -$password-icon: #b9beba; -$secondary-cta-border: #e0e0e0; -$flash-yellow: #fde081; -$error: #f00; -$offline-title: #4a4a4a; -$offline-sub-title: #ababab; +@import '../../../theme/colors.scss'; .new-password { - &--header { - min-height: 140px; + display: flex; + flex-direction: column; + padding: 24px 20px 44px 20px; + margin-top: 18px; + height: 100%; + justify-content: space-between; + + &__password-container { + display: flex; } - &--header-container { - min-height: 140px; - background-color: $new-password-header; + &__input-container { + margin-bottom: 24px; } - &--header-logo-container { - text-align: center; + &__error { + color: $red; + font-size: 12px; + display: flex; + align-items: center; } - &--header-logo { - max-width: 100px; + &__text { + border-bottom: 1px solid $grey-lighter; + + &__invalid { + border-bottom: 1px solid $red; + } } - &--form { - padding: 24px; + &__mandatory { + color: $brand-primary; + display: inline-block; + font-size: 14px; + font-weight: 400; } - &--form-field { - width: 100%; + &__text-label { + margin: 0 8px 0 0; + max-width: 90%; + min-width: 120px; + font-size: 12px; + color: $black-light; + line-height: 16px; + white-space: nowrap; + font-weight: 400; } - &--form-header { - font-size: 24px; - margin-top: 16px; - margin-bottom: 8px; - color: $form-header; - font-weight: 700; + &__text-input { + border: 0; + font-size: 14px; + font-weight: 400; + height: 18px; + line-height: 18px; + color: $blue-black; + width: 100%; + margin: 6px 0; + padding: 0; } - &--form-subheader { - font-size: 16px; - color: $form-subheader; - margin-top: 8px; - margin-bottom: 24px; + &__password-icon { + width: 20px; + height: 20px; + fill: $black-light; } - &--primary-cta { - margin-top: 12px; - .mat-button-base { - width: 100%; - font-weight: 700; - min-height: 47px; - } + &__password-icon-container { + display: flex; + align-items: center; } - &--password-rules { - padding: 14px 0; + &__form-header { + font-size: 20px; + position: relative; + margin-bottom: 24px; + color: $black; + font-weight: 500; } - &--save { + &__save { width: 100%; &__disabled { opacity: 0.2; } } - &--validation { - vertical-align: middle; - font-size: 16px; + &__back-icon { + margin-bottom: 20px; + width: 28px; + height: 28px; + } - &__correct { - color: green; - } + &__cta-text { + font-size: 14px; + font-weight: 500; + } - &__incorrect { - color: red; - } + &__arrow-icon { + fill: $pure-white; + margin-right: 6px; + } + + &__cta-secondary { + display: flex; + padding-top: 18px; + align-items: center; + justify-content: center; + color: $blue-black; + flex-direction: row; } } diff --git a/src/app/auth/new-password/new-password.page.spec.ts b/src/app/auth/new-password/new-password.page.spec.ts index f5db061720..c4da1499ba 100644 --- a/src/app/auth/new-password/new-password.page.spec.ts +++ b/src/app/auth/new-password/new-password.page.spec.ts @@ -1,5 +1,5 @@ import { ComponentFixture, TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; -import { IonicModule, PopoverController } from '@ionic/angular'; +import { IonicModule } from '@ionic/angular'; import { NewPasswordPage } from './new-password.page'; import { AuthService } from 'src/app/core/services/auth.service'; @@ -9,14 +9,16 @@ import { TrackingService } from 'src/app/core/services/tracking.service'; import { DeviceService } from 'src/app/core/services/device.service'; import { LoginInfoService } from 'src/app/core/services/login-info.service'; import { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { of } from 'rxjs'; import { apiEouRes } from 'src/app/core/mock-data/extended-org-user.data'; import { extendedDeviceInfoMockData } from 'src/app/core/mock-data/extended-device-info.data'; import { RouterTestingModule } from '@angular/router/testing'; import { getElementBySelector } from 'src/app/core/dom-helpers'; import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { PopupComponent } from './popup/popup.component'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; describe('NewPasswordPage', () => { let component: NewPasswordPage; @@ -24,19 +26,23 @@ describe('NewPasswordPage', () => { let authService: jasmine.SpyObj; let routerAuthService: jasmine.SpyObj; let loaderService: jasmine.SpyObj; - let popoverController: jasmine.SpyObj; let trackingService: jasmine.SpyObj; let deviceService: jasmine.SpyObj; let loginInfoService: jasmine.SpyObj; + let router: jasmine.SpyObj; + let matSnackBar: jasmine.SpyObj; + let snackbarPropertiesService: jasmine.SpyObj; beforeEach(waitForAsync(() => { const authServiceSpy = jasmine.createSpyObj('AuthService', ['refreshEou']); const routerAuthServiceSpy = jasmine.createSpyObj('RouterAuthService', ['resetPassword']); const loaderServiceSpy = jasmine.createSpyObj('LoaderService', ['showLoader', 'hideLoader']); - const popoverControllerSpy = jasmine.createSpyObj('PopoverController', ['create']); const trackingServiceSpy = jasmine.createSpyObj('TrackingService', ['onSignin', 'resetPassword', 'eventTrack']); const deviceServiceSpy = jasmine.createSpyObj('DeviceService', ['getDeviceInfo']); const loginInfoServiceSpy = jasmine.createSpyObj('LoginInfoService', ['addLoginInfo']); + const routerSpy = jasmine.createSpyObj('Router', ['navigate']); + const matSnackBarSpy = jasmine.createSpyObj('MatSnackBar', ['openFromComponent']); + const snackbarPropertiesServiceSpy = jasmine.createSpyObj('SnackbarPropertiesService', ['setSnackbarProperties']); TestBed.configureTestingModule({ declarations: [NewPasswordPage], @@ -46,10 +52,12 @@ describe('NewPasswordPage', () => { { provide: AuthService, useValue: authServiceSpy }, { provide: RouterAuthService, useValue: routerAuthServiceSpy }, { provide: LoaderService, useValue: loaderServiceSpy }, - { provide: PopoverController, useValue: popoverControllerSpy }, { provide: TrackingService, useValue: trackingServiceSpy }, { provide: DeviceService, useValue: deviceServiceSpy }, { provide: LoginInfoService, useValue: loginInfoServiceSpy }, + { provide: MatSnackBar, useValue: matSnackBarSpy }, + { provide: SnackbarPropertiesService, useValue: snackbarPropertiesServiceSpy }, + { provide: Router, useValue: routerSpy }, { provide: ActivatedRoute, useValue: { @@ -67,10 +75,12 @@ describe('NewPasswordPage', () => { authService = TestBed.inject(AuthService) as jasmine.SpyObj; routerAuthService = TestBed.inject(RouterAuthService) as jasmine.SpyObj; loaderService = TestBed.inject(LoaderService) as jasmine.SpyObj; - popoverController = TestBed.inject(PopoverController) as jasmine.SpyObj; trackingService = TestBed.inject(TrackingService) as jasmine.SpyObj; deviceService = TestBed.inject(DeviceService) as jasmine.SpyObj; loginInfoService = TestBed.inject(LoginInfoService) as jasmine.SpyObj; + router = TestBed.inject(Router) as jasmine.SpyObj; + matSnackBar = TestBed.inject(MatSnackBar) as jasmine.SpyObj; + snackbarPropertiesService = TestBed.inject(SnackbarPropertiesService) as jasmine.SpyObj; fixture.detectChanges(); })); @@ -78,133 +88,23 @@ describe('NewPasswordPage', () => { expect(component).toBeTruthy(); }); - describe('ngOnInit():', () => { - it('should initialize the form and observables', () => { - component.ngOnInit(); - - expect(component.fg).toBeDefined(); - expect(component.lengthValidationDisplay$).toBeDefined(); - expect(component.uppercaseValidationDisplay$).toBeDefined(); - expect(component.numberValidationDisplay$).toBeDefined(); - expect(component.specialCharValidationDisplay$).toBeDefined(); - expect(component.lowercaseValidationDisplay$).toBeDefined(); - }); - - it('should validate password length of 12 characters', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="lengthValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('123456789012'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should validate password length of 32 characters', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="lengthValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('1234567890123456789012345678901'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should not validate password length of less 12 characters', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="lengthValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('12345'); - expect(closeIcon).toBeDefined(); - }); - - it('should not validate password length of more 32 characters', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="lengthValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('12345678901234567890123456789012'); - expect(closeIcon).toBeDefined(); - }); - - it('should validate the presence of an uppercase letter in password', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="uppercaseValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWithUpperCase'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should not validate the absence of an uppercase letter in password', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="uppercaseValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('passwordwithoutuppercase'); - expect(closeIcon).toBeDefined(); - }); - - it('should validate the presence of a number in password', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="numberValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWithNumber123'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should not validate the absence of a number in password', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="numberValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWithoutNumber'); - expect(closeIcon).toBeDefined(); - }); - - it('should validate the presence of a special character in password', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="specialcharValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWith@Special#Char'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should not validate the absence of a special character in password', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="specialcharValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWithoutSpecialChar'); - expect(closeIcon).toBeDefined(); - }); - - it('should validate the presence of a lowercase letter in password', () => { - const checkmarkIcon = getElementBySelector(fixture, '[data-testid="lowercaseValidation_correct"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PasswordWithLowerCase'); - expect(checkmarkIcon).toBeDefined(); - }); - - it('should not validate the absence of a lowercase letter in password', () => { - const closeIcon = getElementBySelector(fixture, '[data-testid="lowercaseValidation_incorrect"]'); - const passwordControl = component.fg.controls.password as FormControl; - - passwordControl.setValue('PASSWORDWITHOUTLOWERCASE'); - expect(closeIcon).toBeDefined(); - }); - }); - describe('changePassword', () => { const passwordValue = 'DummyPassword@123'; const refreshToken = 'token123'; const resetPasswordRes = { ...apiEouRes, refresh_token: refreshToken }; it('should change the password and show success message on success', fakeAsync(() => { + const message = 'Password changed successfully'; spyOn(component, 'trackLoginInfo'); routerAuthService.resetPassword.and.returnValue(of(resetPasswordRes)); authService.refreshEou.and.returnValue(of(apiEouRes)); - const popoverSpy = jasmine.createSpyObj('HTMLIonPopoverElement', ['present']); - popoverController.create.and.returnValue(popoverSpy); deviceService.getDeviceInfo.and.returnValue(of(extendedDeviceInfoMockData)); loaderService.showLoader.and.resolveTo(); loaderService.hideLoader.and.resolveTo(); component.fg.controls.password.setValue(passwordValue); fixture.detectChanges(); - const newPasswordButton = getElementBySelector(fixture, '#new-password--btn-sign-in') as HTMLButtonElement; + const newPasswordButton = getElementBySelector(fixture, '.btn-primary') as HTMLButtonElement; newPasswordButton.click(); tick(500); @@ -215,27 +115,23 @@ describe('NewPasswordPage', () => { expect(trackingService.onSignin).toHaveBeenCalledOnceWith('ajain@fyle.in'); expect(trackingService.resetPassword).toHaveBeenCalledTimes(1); expect(component.trackLoginInfo).toHaveBeenCalledTimes(1); - expect(popoverController.create).toHaveBeenCalledOnceWith({ - component: PopupComponent, - componentProps: { - header: 'Password changed successfully', - route: ['/', 'auth', 'switch_org'], - }, - cssClass: 'dialog-popover', + expect(snackbarPropertiesService.setSnackbarProperties).toHaveBeenCalledOnceWith('success', { message }); + expect(matSnackBar.openFromComponent).toHaveBeenCalledOnceWith(ToastMessageComponent, { + ...snackbarPropertiesService.setSnackbarProperties('success', { message }), + panelClass: ['msb-success'], }); })); it('should show error message on failure', fakeAsync(() => { + const message = 'Something went wrong. Please try after some time.'; spyOn(component, 'trackLoginInfo'); routerAuthService.resetPassword.and.rejectWith(); - const popoverSpy = jasmine.createSpyObj('HTMLIonPopoverElement', ['present']); - popoverController.create.and.returnValue(popoverSpy); loaderService.showLoader.and.resolveTo(); loaderService.hideLoader.and.resolveTo(); component.fg.controls.password.setValue(passwordValue); fixture.detectChanges(); - const newPasswordButton = getElementBySelector(fixture, '#new-password--btn-sign-in') as HTMLButtonElement; + const newPasswordButton = getElementBySelector(fixture, '.btn-primary') as HTMLButtonElement; newPasswordButton.click(); tick(500); @@ -246,13 +142,9 @@ describe('NewPasswordPage', () => { expect(trackingService.onSignin).not.toHaveBeenCalled(); expect(trackingService.resetPassword).not.toHaveBeenCalled(); expect(component.trackLoginInfo).not.toHaveBeenCalled(); - expect(popoverController.create).toHaveBeenCalledOnceWith({ - component: PopupComponent, - componentProps: { - header: 'Setting new password failed. Please try again later.', - route: ['/', 'auth', 'sign_in'], - }, - cssClass: 'dialog-popover', + expect(matSnackBar.openFromComponent).toHaveBeenCalledOnceWith(ToastMessageComponent, { + ...snackbarPropertiesService.setSnackbarProperties('failure', { message }), + panelClass: ['msb-failure'], }); })); }); @@ -270,4 +162,81 @@ describe('NewPasswordPage', () => { expect(trackingService.eventTrack).toHaveBeenCalledOnceWith('Added Login Info', { label: '5.50.0' }); expect(loginInfoService.addLoginInfo).toHaveBeenCalledOnceWith('5.50.0', mockDate); })); + + it('redirectToSignIn(): should navigate to the sign-in page', () => { + component.redirectToSignIn(); + // @ts-ignore + expect(component.router.navigate).toHaveBeenCalledOnceWith(['/', 'auth', 'sign_in']); // Should navigate to the correct route + }); + + describe('checkPasswordValidity():', () => { + it('should return null when isPasswordValid is true', () => { + component.isPasswordValid = true; + + const result = component.checkPasswordValidity(); + + expect(result).toBeNull(); // No errors + }); + + it('should return an error object when isPasswordValid is false', () => { + component.isPasswordValid = false; + + const result = component.checkPasswordValidity(); + + expect(result).toEqual({ invalidPassword: true }); // Error object + }); + }); + + describe('validatePasswordEquality():', () => { + it('should return null when password and confirmPassword match', () => { + component.fg.controls.password.setValue('StrongPassword@123'); + component.fg.controls.confirmPassword.setValue('StrongPassword@123'); + + const result = component.validatePasswordEquality(); + + expect(result).toBeNull(); // No errors + }); + + it('should return an error object when password and confirmPassword do not match', () => { + component.fg.controls.password.setValue('StrongPassword@123'); + component.fg.controls.confirmPassword.setValue('DifferentPassword@123'); + + const result = component.validatePasswordEquality(); + + expect(result).toEqual({ passwordMismatch: true }); + }); + + it('should return null when password or confirmPassword is empty', () => { + component.fg.controls.password.setValue(''); + component.fg.controls.confirmPassword.setValue(''); + + const result = component.validatePasswordEquality(); + + expect(result).toBeNull(); + }); + }); + + describe('onPasswordValid():', () => { + it('should set isPasswordValid to true when called with true', () => { + component.onPasswordValid(true); + expect(component.isPasswordValid).toBeTrue(); + }); + + it('should set isPasswordValid to false when called with false', () => { + component.onPasswordValid(false); + expect(component.isPasswordValid).toBeFalse(); + }); + }); + + describe('setPasswordTooltip():', () => { + it('should set showPasswordTooltip to true when called with true', () => { + component.setPasswordTooltip(true); + expect(component.showPasswordTooltip).toBeTrue(); + }); + + it('should set showPasswordTooltip to false when called with false', () => { + component.setPasswordTooltip(false); + expect(component.showPasswordTooltip).toBeFalse(); + }); + }); }); diff --git a/src/app/auth/new-password/new-password.page.ts b/src/app/auth/new-password/new-password.page.ts index 0d5295e798..1032da3806 100644 --- a/src/app/auth/new-password/new-password.page.ts +++ b/src/app/auth/new-password/new-password.page.ts @@ -1,16 +1,17 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { finalize, map, switchMap, tap } from 'rxjs/operators'; +import { FormBuilder, FormGroup, ValidationErrors, Validators } from '@angular/forms'; +import { finalize, switchMap, tap } from 'rxjs/operators'; import { from, Observable } from 'rxjs'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { LoaderService } from 'src/app/core/services/loader.service'; import { RouterAuthService } from 'src/app/core/services/router-auth.service'; import { AuthService } from 'src/app/core/services/auth.service'; -import { PopoverController } from '@ionic/angular'; -import { PopupComponent } from './popup/popup.component'; import { TrackingService } from '../../core/services/tracking.service'; import { DeviceService } from '../../core/services/device.service'; import { LoginInfoService } from '../../core/services/login-info.service'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; @Component({ selector: 'app-new-password', @@ -30,7 +31,13 @@ export class NewPasswordPage implements OnInit { lowercaseValidationDisplay$: Observable; - hide = false; + isPasswordValid = false; + + hide = true; + + hideConfirmPassword = true; + + showPasswordTooltip = false; constructor( private fb: FormBuilder, @@ -38,54 +45,27 @@ export class NewPasswordPage implements OnInit { private loaderService: LoaderService, private routerAuthService: RouterAuthService, private authService: AuthService, - private popoverController: PopoverController, private trackingService: TrackingService, private deviceService: DeviceService, - private loginInfoService: LoginInfoService + private loginInfoService: LoginInfoService, + private router: Router, + private matSnackBar: MatSnackBar, + private snackbarPropertiesService: SnackbarPropertiesService ) {} - ngOnInit() { + ngOnInit(): void { this.fg = this.fb.group({ - password: [ - '', - Validators.compose([ - Validators.required, - Validators.minLength(12), - Validators.maxLength(32), - Validators.pattern(/[A-Z]/), - Validators.pattern(/[a-z]/), - Validators.pattern(/[0-9]/), - Validators.pattern(/[!@#$%^&*()+\-:;<=>{}|~?]/), - ]), - ], + password: ['', [Validators.required, this.checkPasswordValidity]], + confirmPassword: ['', [Validators.required, this.validatePasswordEquality]], }); - - this.lengthValidationDisplay$ = this.fg.controls.password.valueChanges.pipe( - map((password) => password && password.length >= 12 && password.length <= 32) - ); - - this.uppercaseValidationDisplay$ = this.fg.controls.password.valueChanges.pipe( - map((password) => /[A-Z]/.test(password)) - ); - - this.numberValidationDisplay$ = this.fg.controls.password.valueChanges.pipe( - map((password) => /[0-9]/.test(password)) - ); - this.specialCharValidationDisplay$ = this.fg.controls.password.valueChanges.pipe( - map((password) => /[!@#$%^&*()+\-:;<=>{}|~?]/.test(password)) - ); - - this.lowercaseValidationDisplay$ = this.fg.controls.password.valueChanges.pipe( - map((password) => /[a-z]/.test(password)) - ); } - changePassword() { - const refreshToken = this.activatedRoute.snapshot.params.refreshToken; + changePassword(): void { + const refreshToken = this.activatedRoute.snapshot.params.refreshToken as string; from(this.loaderService.showLoader()) .pipe( - switchMap(() => this.routerAuthService.resetPassword(refreshToken, this.fg.controls.password.value)), + switchMap(() => this.routerAuthService.resetPassword(refreshToken, this.fg.controls.password.value as string)), switchMap(() => this.authService.refreshEou()), tap(async (eou) => { const email = eou.us.email; @@ -96,36 +76,59 @@ export class NewPasswordPage implements OnInit { finalize(() => from(this.loaderService.hideLoader())) ) .subscribe( - async () => { - const popup = await this.popoverController.create({ - component: PopupComponent, - componentProps: { - header: 'Password changed successfully', - route: ['/', 'auth', 'switch_org'], - }, - cssClass: 'dialog-popover', + () => { + const toastMessageData = { + message: 'Password changed successfully', + }; + + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarPropertiesService.setSnackbarProperties('success', toastMessageData), + panelClass: ['msb-success'], }); - - await popup.present(); + this.router.navigate(['/', 'auth', 'switch_org']); }, - async () => { - const popup = await this.popoverController.create({ - component: PopupComponent, - componentProps: { - header: 'Setting new password failed. Please try again later.', - route: ['/', 'auth', 'sign_in'], - }, - cssClass: 'dialog-popover', + () => { + const toastMessageData = { + message: 'Something went wrong. Please try after some time.', + }; + + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarPropertiesService.setSnackbarProperties('failure', toastMessageData), + panelClass: ['msb-failure'], }); - - await popup.present(); + this.router.navigate(['/', 'auth', 'sign_in']); } ); } - async trackLoginInfo() { + async trackLoginInfo(): Promise { const deviceInfo = await this.deviceService.getDeviceInfo().toPromise(); this.trackingService.eventTrack('Added Login Info', { label: deviceInfo.appVersion }); await this.loginInfoService.addLoginInfo(deviceInfo.appVersion, new Date()); } + + onPasswordValid(isValid: boolean): void { + this.isPasswordValid = isValid; + this.fg.controls.password.updateValueAndValidity(); + this.fg.controls.confirmPassword.updateValueAndValidity(); + } + + redirectToSignIn(): void { + this.router.navigate(['/', 'auth', 'sign_in']); + } + + setPasswordTooltip(value: boolean): void { + this.showPasswordTooltip = value; + } + + checkPasswordValidity = (): ValidationErrors => (this.isPasswordValid ? null : { invalidPassword: true }); + + validatePasswordEquality = (): ValidationErrors => { + if (!this.fg) { + return null; + } + const password = this.fg.controls.password.value as string; + const confirmPassword = this.fg.controls.confirmPassword.value as string; + return password === confirmPassword ? null : { passwordMismatch: true }; + }; } diff --git a/src/app/auth/pending-verification/pending-verification.page.html b/src/app/auth/pending-verification/pending-verification.page.html index 0e31f3bb36..317f9d0cad 100644 --- a/src/app/auth/pending-verification/pending-verification.page.html +++ b/src/app/auth/pending-verification/pending-verification.page.html @@ -1,26 +1,96 @@ - - - + +
+
+
+
+ +
+
+
The invitation has expired
+
+ Enter your registered email address to receive a new invitation and set up your account on Fyle. +
+
+
+
Registered email
+ +
+ Please enter a valid email. +
+
+
+
+ + Send invite + +
+ + Back to Sign In +
+
+
+
+
+
+ +
+
+

Invitation link sent

+

+ A new invitation link has been sent to your registered email address. Check your inbox to continue setting + up your account. +

+
+
+
+ +
+ + Back to sign in +
+
+
+
+
+
diff --git a/src/app/auth/pending-verification/pending-verification.page.scss b/src/app/auth/pending-verification/pending-verification.page.scss new file mode 100644 index 0000000000..18f0553f15 --- /dev/null +++ b/src/app/auth/pending-verification/pending-verification.page.scss @@ -0,0 +1,203 @@ +@import '../../../theme/colors.scss'; + +.pending-verification { + height: 100%; + margin-top: 18px; + padding-top: 28px; + padding-bottom: 20px; + + &__send-invite { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + padding: 0 20px 24px 20px; + } + + &__form-container { + display: flex; + flex-direction: column; + padding-top: 24px; + justify-content: flex-start; + height: 100%; + } + + &__error-icon { + width: 45px; + height: 45px; + fill: $red; + } + + &__error-icon-container { + width: 40px; + height: 40px; + border-radius: 8px; + background: $pale-pink; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 20px; + padding: 10px; + } + + &__page-header { + font-size: 20px; + margin: 0 0 10px; + position: relative; + margin-bottom: 8px; + font-weight: 500; + } + + &__disabled { + opacity: 0.2; + } + + &__sub-header { + font-size: 14px; + margin: 0 0 10px; + position: relative; + margin-bottom: 32px; + color: $black-light; + line-height: 1.28; + } + + &__error-message { + color: $red; + font-size: 12px; + display: flex; + align-items: center; + } + + &__input-container { + &__label { + margin: 0 8px 0 0; + font-size: 12px; + color: $black-light; + line-height: 1.3; + font-weight: 400; + } + + &__input { + border: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.3; + color: $blue-black; + width: 100%; + padding: 6px 0; + border-bottom: 1px solid $grey-lighter; + } + + &__input:focus { + border-bottom: 1px solid $blue-black; + } + } + + &__content-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex-grow: 2; + } + + &__arrow-icon { + fill: $pure-white; + margin-right: 6px; + } + + &__cta-text { + font-size: 14px; + font-weight: 500; + } + + &__cta-content { + display: flex; + align-items: center; + justify-content: center; + } + + &__success-message { + height: 100%; + display: flex; + flex-direction: column; + } + + &__success-icon-container { + width: 60px; + height: 60px; + border-radius: 8px; + background: $success-bg; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 16px; + } + + &__success-icon { + width: 45px; + height: 45px; + fill: $green; + } + + &__text { + display: flex; + align-items: center; + gap: 8px; + flex-direction: column; + } + + &__header { + color: $black; + font-size: 20px; + font-style: normal; + font-weight: 500; + line-height: normal; + height: 26px; + margin: 0; + } + + &__resend-text { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + color: $black-light; + font-weight: 500; + gap: 2px; + + &__resend-link { + color: $brand-primary; + } + + &__spinner-icon { + color: $brand-primary; + height: 12px; + } + } + + &__content { + color: $black-light; + text-align: center; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 1.25; + height: 36px; + width: 274px; + + &__reset-email { + font-weight: 500; + } + } + &__cta-secondary { + display: flex; + padding-top: 18px; + flex-direction: column; + justify-content: center; + align-items: center; + color: $blue-black; + display: flex; + flex-direction: row; + } +} diff --git a/src/app/auth/pending-verification/pending-verification.page.spec.ts b/src/app/auth/pending-verification/pending-verification.page.spec.ts index 17271dc667..604f6b7f00 100644 --- a/src/app/auth/pending-verification/pending-verification.page.spec.ts +++ b/src/app/auth/pending-verification/pending-verification.page.spec.ts @@ -1,48 +1,76 @@ import { ComponentFixture, TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IonicModule } from '@ionic/angular'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { PendingVerificationPage } from './pending-verification.page'; -import { PageState } from 'src/app/core/models/page-state.enum'; import { RouterAuthService } from 'src/app/core/services/router-auth.service'; import { of, throwError } from 'rxjs'; import { authResData1 } from 'src/app/core/mock-data/auth-reponse.data'; -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; +import { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; +import { HttpErrorResponse } from '@angular/common/http'; +import { getElementRef } from 'src/app/core/dom-helpers'; describe('PendingVerificationPage', () => { let component: PendingVerificationPage; let fixture: ComponentFixture; let router: jasmine.SpyObj; - let activatedRoute: jasmine.SpyObj; let routerAuthService: jasmine.SpyObj; + let matSnackBar: jasmine.SpyObj; + let snackbarPropertiesService: jasmine.SpyObj; + let activatedRoute: jasmine.SpyObj; + let formBuilder: jasmine.SpyObj; + let fb: FormBuilder; beforeEach(waitForAsync(() => { const routerSpy = jasmine.createSpyObj('Router', ['navigate']); const routerAuthServiceSpy = jasmine.createSpyObj('RouterAuthService', ['resendVerificationLink']); - + const matSnackBarSpy = jasmine.createSpyObj('MatSnackBar', ['openFromComponent']); + const snackbarPropertiesServiceSpy = jasmine.createSpyObj('SnackbarPropertiesService', ['setSnackbarProperties']); TestBed.configureTestingModule({ declarations: [PendingVerificationPage], - imports: [IonicModule.forRoot()], + imports: [IonicModule.forRoot(), RouterTestingModule, RouterModule, FormsModule, ReactiveFormsModule], providers: [ - { provide: Router, useValue: routerSpy }, - { - provide: ActivatedRoute, - useValue: { snapshot: { params: { orgId: 'orNVthTo2Zyo' } } }, - }, + FormBuilder, { provide: RouterAuthService, useValue: routerAuthServiceSpy, }, + { + provide: Router, + useValue: routerSpy, + }, + { + provide: MatSnackBar, + useValue: matSnackBarSpy, + }, + { + provide: SnackbarPropertiesService, + useValue: snackbarPropertiesServiceSpy, + }, + { + provide: ActivatedRoute, + useValue: { snapshot: { params: { email: 'aastha.b@fyle.in' } } }, + }, ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); fixture = TestBed.createComponent(PendingVerificationPage); component = fixture.componentInstance; router = TestBed.inject(Router) as jasmine.SpyObj; - activatedRoute = TestBed.inject(ActivatedRoute) as jasmine.SpyObj; routerAuthService = TestBed.inject(RouterAuthService) as jasmine.SpyObj; + matSnackBar = TestBed.inject(MatSnackBar) as jasmine.SpyObj; + snackbarPropertiesService = TestBed.inject(SnackbarPropertiesService) as jasmine.SpyObj; + activatedRoute = TestBed.inject(ActivatedRoute) as jasmine.SpyObj; + fb = TestBed.inject(FormBuilder); + activatedRoute.snapshot.params.orgId = 'orNVthTo2Zyo'; + component.fg = fb.group({ + email: ['', Validators.compose([Validators.required, Validators.pattern('\\S+@\\S+\\.\\S{2,}')])], + }); fixture.detectChanges(); })); @@ -50,33 +78,6 @@ describe('PendingVerificationPage', () => { expect(component).toBeTruthy(); }); - it('should set hasTokenExpired to true if snapshot.params.hasTokenExpired is defined and true on ionViewWillEnter()', () => { - activatedRoute.snapshot.params.hasTokenExpired = true; - component.ionViewWillEnter(); - fixture.detectChanges(); - const pageTitle = fixture.debugElement.query(By.css('app-send-email')).nativeElement.title; - expect(component.hasTokenExpired).toBe(true); - expect(pageTitle).toEqual('Verification link expired'); - }); - - it('should set hasTokenExpired to false if snapshot.params.hasTokenExpired is defined and false on ionViewWillEnter()', () => { - activatedRoute.snapshot.params.hasTokenExpired = false; - component.ionViewWillEnter(); - fixture.detectChanges(); - const pageTitle = fixture.debugElement.query(By.css('app-send-email')).nativeElement.title; - expect(component.hasTokenExpired).toBe(false); - expect(pageTitle).toEqual('Please verify your email'); - }); - - it('should set hasTokenExpired to false and currentPageState to notSent if snapshot.params.hasTokenExpired is not defined on ionViewWillEnter()', () => { - component.ionViewWillEnter(); - fixture.detectChanges(); - const pageTitle = fixture.debugElement.query(By.css('app-send-email')).nativeElement.title; - expect(component.hasTokenExpired).toBe(false); - expect(component.currentPageState).toEqual(PageState.notSent); - expect(pageTitle).toEqual('Please verify your email'); - }); - it('resendVerificationLink(): should call routerAuthService and set PageState to success if API is successful', fakeAsync(() => { const data = { cluster_domain: authResData1.cluster_domain, @@ -86,36 +87,80 @@ describe('PendingVerificationPage', () => { tick(1000); expect(routerAuthService.resendVerificationLink).toHaveBeenCalledOnceWith('ajain@fyle.in', 'orNVthTo2Zyo'); expect(component.isLoading).toBeFalse(); - expect(component.currentPageState).toEqual(PageState.success); })); it('resendVerificationLink(): should call routerAuthService and call handleError if API is unsuccessful', fakeAsync(() => { - const error = new Error('An Error Occured'); + const error = { status: 500 } as HttpErrorResponse; routerAuthService.resendVerificationLink.and.returnValue(throwError(() => error)); spyOn(component, 'handleError'); component.resendVerificationLink('ajain@fyle.in'); tick(1000); expect(routerAuthService.resendVerificationLink).toHaveBeenCalledOnceWith('ajain@fyle.in', 'orNVthTo2Zyo'); expect(component.isLoading).toBeTrue(); - expect(component.currentPageState).not.toEqual(PageState.success); expect(component.handleError).toHaveBeenCalledOnceWith(error); })); - it('handleError(); should navigate to auth/disabled if status code is 422', () => { - const error = { - status: 422, - }; - component.handleError(error); - expect(router.navigate).toHaveBeenCalledOnceWith(['/', 'auth', 'disabled']); - expect(component.currentPageState).not.toEqual(PageState.failure); + describe('handleError():', () => { + it('handleError(); should navigate to auth/disabled if status code is 422', () => { + const error = { + status: 422, + } as HttpErrorResponse; + component.handleError(error); + expect(router.navigate).toHaveBeenCalledOnceWith(['/', 'auth', 'disabled']); + }); + + it('should display error message on other errors', () => { + const error = { status: 401 } as HttpErrorResponse; + const props = { + panelClass: ['msb-failure'], + }; + + matSnackBar.openFromComponent.and.callThrough(); + + component.handleError(error); + expect(matSnackBar.openFromComponent).toHaveBeenCalledOnceWith(ToastMessageComponent, { + ...props, + panelClass: ['msb-failure'], + }); + expect(snackbarPropertiesService.setSnackbarProperties).toHaveBeenCalledTimes(1); + }); }); - it('handleError(); should set pagestate to failure if status code', () => { - const error = { - status: 422, - }; - component.handleError(error); - expect(router.navigate).toHaveBeenCalledOnceWith(['/', 'auth', 'disabled']); - expect(component.currentPageState).not.toEqual(PageState.failure); + it('onGotoSignInClick(): should navigate to sign-in page', () => { + component.onGotoSignInClick(); + expect(router.navigate).toHaveBeenCalledWith(['/', 'auth', 'sign_in']); + }); + + describe('template', () => { + it('should render the form for entering email', () => { + component.isInvitationLinkSent = false; + fixture.detectChanges(); + + const formElement = fixture.debugElement.query(By.css('.pending-verification__form-container')); + expect(formElement).toBeTruthy(); + }); + + it('should display validation error for invalid email input', () => { + component.isInvitationLinkSent = false; + const emailControl = component.fg.controls.email; + emailControl.setValue('invalid-email'); + emailControl.markAsTouched(); + fixture.detectChanges(); + + const errorElement = getElementRef(fixture, '.pending-verification__error-message'); + expect(errorElement.nativeElement.textContent).toContain('Please enter a valid email.'); + }); + + it('should call resendVerificationLink with correct email when button is clicked', () => { + component.isInvitationLinkSent = false; + spyOn(component, 'resendVerificationLink'); + component.fg.controls.email.setValue('test@example.com'); + fixture.detectChanges(); + + const buttonElement = fixture.debugElement.query(By.css('ion-button')); + buttonElement.triggerEventHandler('click', null); + + expect(component.resendVerificationLink).toHaveBeenCalledWith('test@example.com'); + }); }); }); diff --git a/src/app/auth/pending-verification/pending-verification.page.ts b/src/app/auth/pending-verification/pending-verification.page.ts index 814941636a..cf54a1723b 100644 --- a/src/app/auth/pending-verification/pending-verification.page.ts +++ b/src/app/auth/pending-verification/pending-verification.page.ts @@ -1,51 +1,71 @@ -import { Component, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { tap } from 'rxjs/operators'; import { RouterAuthService } from 'src/app/core/services/router-auth.service'; -import { PageState } from 'src/app/core/models/page-state.enum'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-pending-verification', templateUrl: './pending-verification.page.html', + styleUrls: ['./pending-verification.page.scss'], }) -export class PendingVerificationPage implements OnInit { - currentPageState: PageState; - +export class PendingVerificationPage { isLoading = false; - hasTokenExpired = false; + isInvitationLinkSent = false; + + fg: FormGroup; constructor( + private formBuilder: FormBuilder, private routerAuthService: RouterAuthService, private router: Router, - private activatedRoute: ActivatedRoute + private activatedRoute: ActivatedRoute, + private matSnackBar: MatSnackBar, + private snackbarProperties: SnackbarPropertiesService ) {} - ngOnInit() {} - - ionViewWillEnter() { - this.hasTokenExpired = this.activatedRoute.snapshot.params.hasTokenExpired || false; - this.currentPageState = PageState.notSent; + ionViewWillEnter(): void { + this.fg = this.formBuilder.group({ + email: ['', Validators.compose([Validators.required, Validators.pattern('\\S+@\\S+\\.\\S{2,}')])], + }); } - resendVerificationLink(email: string) { + resendVerificationLink(email: string): void { this.isLoading = true; - const orgId = this.activatedRoute.snapshot.params.orgId; + const orgId = this.activatedRoute.snapshot.params.orgId as string; this.routerAuthService .resendVerificationLink(email, orgId) .pipe(tap(() => (this.isLoading = false))) .subscribe({ - next: () => (this.currentPageState = PageState.success), - error: (err) => this.handleError(err), + next: () => { + this.isInvitationLinkSent = true; + }, + error: (err: HttpErrorResponse) => this.handleError(err), }); } - handleError(err: any) { + handleError(err: HttpErrorResponse): void { if (err.status === 422) { this.router.navigate(['/', 'auth', 'disabled']); } else { - this.currentPageState = PageState.failure; + const toastMessageData = { + message: 'Something went wrong. Please try after some time.', + }; + + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarProperties.setSnackbarProperties('failure', toastMessageData), + panelClass: ['msb-failure'], + }); } } + + onGotoSignInClick(): void { + this.router.navigate(['/', 'auth', 'sign_in']); + } } diff --git a/src/app/auth/reset-password/reset-password.page.html b/src/app/auth/reset-password/reset-password.page.html index e7ff210805..2a3722c334 100644 --- a/src/app/auth/reset-password/reset-password.page.html +++ b/src/app/auth/reset-password/reset-password.page.html @@ -1,11 +1,94 @@ - + +
+
+
+ +
+
Forgot password
+
+ Please enter your registered email address to receive instructions for resetting your password +
+
+
+
Registered Email
+ +
+ Enter an email address. +
+
+
+
+ + Request reset link + +
+
+
+
+
+ +
+
+

Check your email

+

+ We've sent password recovery instructions to + {{resetEmail}} +

+
+
+ Didn’t receive the email? + Resend + +
+
+
+ +
+ + Back to sign in +
+
+
+
+
+
diff --git a/src/app/auth/reset-password/reset-password.page.scss b/src/app/auth/reset-password/reset-password.page.scss new file mode 100644 index 0000000000..1e73b237ee --- /dev/null +++ b/src/app/auth/reset-password/reset-password.page.scss @@ -0,0 +1,174 @@ +@import '../../../theme/colors.scss'; + +.forgot-password { + height: 100%; + margin-top: 18px; + padding-bottom: 20px; + + &__form-container { + display: flex; + flex-direction: column; + padding: 24px 20px; + justify-content: space-between; + height: 100%; + } + + &__page-header { + font-size: 20px; + margin: 0 0 10px; + position: relative; + margin-bottom: 6px; + font-weight: 500; + } + + &__disabled { + opacity: 0.2; + } + + &__sub-header { + font-size: 14px; + margin: 0 0 10px; + position: relative; + margin-bottom: 24px; + color: $black-light; + } + + &__error-message { + color: $red; + display: flex; + align-items: center; + } + + &__input-container { + &__label { + margin: 0 8px 0 0; + font-size: 12px; + color: $black-light; + line-height: 1.3; + font-weight: 400; + } + + &__input { + border: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.3; + color: $blue-black; + width: 100%; + padding: 6px 0; + border-bottom: 1px solid $grey-lighter; + } + + &__input:focus { + border-bottom: 1px solid $blue-black; + } + } + + &__content-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex-grow: 2; + } + + &__arrow-icon { + fill: $pure-white; + margin-right: 8px; + } + + &__cta-text { + font-size: 14px; + font-weight: 500; + } + + &__cta { + margin: 0 20px 24px 20px; + } + + &__cta-content { + display: flex; + align-items: center; + justify-content: center; + } + + &__success-message { + height: 100%; + display: flex; + flex-direction: column; + } + + &__success-icon-container { + width: 60px; + height: 60px; + border-radius: 8px; + background: $success-bg; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 16px; + } + + &__success-icon { + width: 45px; + height: 45px; + fill: $green; + } + + &__text { + display: flex; + align-items: center; + gap: 8px; + flex-direction: column; + } + + &__header { + color: $black; + font-size: 20px; + font-style: normal; + font-weight: 500; + line-height: normal; + height: 26px; + margin: 0; + } + + &__resend-text { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + color: $black-light; + font-weight: 500; + gap: 2px; + + &__resend-link { + color: $brand-primary; + } + + &__spinner-icon { + color: $brand-primary; + height: 12px; + } + } + + &__content { + color: $black-light; + text-align: center; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 1.25; + height: 36px; + width: 274px; + + &__reset-email { + font-weight: 500; + } + } + + &__back-icon { + margin-bottom: 16px; + width: 28px; + height: 28px; + } +} diff --git a/src/app/auth/reset-password/reset-password.page.spec.ts b/src/app/auth/reset-password/reset-password.page.spec.ts index 55a30ea298..931329254f 100644 --- a/src/app/auth/reset-password/reset-password.page.spec.ts +++ b/src/app/auth/reset-password/reset-password.page.spec.ts @@ -1,54 +1,40 @@ -import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { ResetPasswordPage } from './reset-password.page'; +import { ReactiveFormsModule, FormsModule, FormBuilder, Validators, FormGroup } from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { IonicModule } from '@ionic/angular'; import { RouterAuthService } from 'src/app/core/services/router-auth.service'; -import { Router, RouterModule } from '@angular/router'; -import { Location } from '@angular/common'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; import { PageState } from 'src/app/core/models/page-state.enum'; +import { getElementRef } from 'src/app/core/dom-helpers'; +import { DebugElement } from '@angular/core'; import { of, throwError } from 'rxjs'; -import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; describe('ResetPasswordPage', () => { let component: ResetPasswordPage; let fixture: ComponentFixture; let router: jasmine.SpyObj; let routerAuthService: jasmine.SpyObj; - let location: jasmine.SpyObj; - - @Component({ - selector: 'app-send-email', - template: '
', - }) - class MockSendEmailComponent { - @Input() title: string; - - @Input() content: string; - - @Input() subcontent: string; - - @Input() ctaText: string; - - @Input() successTitle: string; - - @Input() successContent: string; - - @Input() sendEmailPageState: PageState; - - @Input() isLoading: boolean; - - @Output() sendEmail = new EventEmitter(); - } + let matSnackBar: jasmine.SpyObj; + let snackbarPropertiesService: jasmine.SpyObj; + let activatedRoute: jasmine.SpyObj; + let formBuilder: jasmine.SpyObj; + let fb: FormBuilder; beforeEach(waitForAsync(() => { const routerSpy = jasmine.createSpyObj('Router', ['navigate']); - const locationSpy = jasmine.createSpyObj('Location', ['path']); const routerAuthServiceSpy = jasmine.createSpyObj('RouterAuthService', ['sendResetPassword']); + const matSnackBarSpy = jasmine.createSpyObj('MatSnackBar', ['openFromComponent']); + const snackbarPropertiesServiceSpy = jasmine.createSpyObj('SnackbarPropertiesService', ['setSnackbarProperties']); TestBed.configureTestingModule({ - declarations: [ResetPasswordPage, MockSendEmailComponent], + declarations: [ResetPasswordPage], imports: [IonicModule.forRoot(), RouterTestingModule, RouterModule, FormsModule, ReactiveFormsModule], providers: [ + FormBuilder, { provide: RouterAuthService, useValue: routerAuthServiceSpy, @@ -58,8 +44,16 @@ describe('ResetPasswordPage', () => { useValue: routerSpy, }, { - provide: Location, - useValue: locationSpy, + provide: MatSnackBar, + useValue: matSnackBarSpy, + }, + { + provide: SnackbarPropertiesService, + useValue: snackbarPropertiesServiceSpy, + }, + { + provide: ActivatedRoute, + useValue: { snapshot: { params: { email: 'aastha.b@fyle.in' } } }, }, ], }).compileComponents(); @@ -67,12 +61,18 @@ describe('ResetPasswordPage', () => { fixture = TestBed.createComponent(ResetPasswordPage); component = fixture.componentInstance; router = TestBed.inject(Router) as jasmine.SpyObj; - location = TestBed.inject(Location) as jasmine.SpyObj; routerAuthService = TestBed.inject(RouterAuthService) as jasmine.SpyObj; + matSnackBar = TestBed.inject(MatSnackBar) as jasmine.SpyObj; + snackbarPropertiesService = TestBed.inject(SnackbarPropertiesService) as jasmine.SpyObj; + activatedRoute = TestBed.inject(ActivatedRoute) as jasmine.SpyObj; + fb = TestBed.inject(FormBuilder); + component.fg = fb.group({ + email: [Validators.compose([Validators.required, Validators.pattern('\\S+@\\S+\\.\\S{2,}')])], + }); fixture.detectChanges(); })); - it('should create', () => { + it('should create the component', () => { expect(component).toBeTruthy(); }); @@ -81,15 +81,89 @@ describe('ResetPasswordPage', () => { expect(component.currentPageState).toEqual(PageState.notSent); }); + describe('template', () => { + it('should render the form in "notSent" state', () => { + component.currentPageState = component.PageState.notSent; + fixture.detectChanges(); + + const formElement = fixture.debugElement.query(By.css('.forgot-password__form-container')); + expect(formElement).toBeTruthy(); + }); + + it('should render the success message in "success" state', () => { + component.currentPageState = component.PageState.success; + component.resetEmail = 'test@example.com'; + fixture.detectChanges(); + + const successMessageElement = fixture.debugElement.query(By.css('.forgot-password__success-message')); + expect(successMessageElement).toBeTruthy(); + + const emailElement = fixture.debugElement.query(By.css('.forgot-password__content__reset-email')); + expect(emailElement.nativeElement.textContent).toContain('test@example.com'); + }); + + it('should display validation error for invalid email input', () => { + component.currentPageState = PageState.notSent; + const emailControl = component.fg.controls.email; + emailControl.setValue('invalid-email'); + emailControl.markAsTouched(); + fixture.detectChanges(); + + const errorElement = getElementRef(fixture, '.forgot-password__error-message'); + expect(errorElement.nativeElement.textContent).toContain(' Enter an email address. '); + }); + + it('should call sendResetLink with correct email when button is clicked', () => { + component.currentPageState = PageState.notSent; + spyOn(component, 'sendResetLink'); + component.fg.controls.email.setValue('test@example.com'); + fixture.detectChanges(); + + const buttonElement = fixture.debugElement.query(By.css('ion-button')); + buttonElement.triggerEventHandler('click', null); + + expect(component.sendResetLink).toHaveBeenCalledWith('test@example.com'); + }); + + it('should display resend link if email is not sent', () => { + component.isEmailSentOnce = false; + component.isLoading = false; + component.currentPageState = component.PageState.success; + component.resetEmail = 'test@example.com'; + fixture.detectChanges(); + + const resendLink = fixture.debugElement.query(By.css('.forgot-password__resend-text__resend-link')); + expect(resendLink).toBeTruthy(); + }); + + it('should hide resend link and show spinner when loading', () => { + component.isEmailSentOnce = false; + component.isLoading = true; + component.currentPageState = component.PageState.success; + fixture.detectChanges(); + + const resendLink = getElementRef(fixture, '.forgot-password__resend-text__resend-link') as DebugElement; + expect(resendLink).toBeFalsy(); + + const spinner = getElementRef(fixture, 'ion-spinner') as DebugElement; + expect(spinner).toBeTruthy(); + }); + }); + describe('sendResetLink():', () => { - it('should send reset password link, change loading and page state', () => { + beforeEach(() => { + component.currentPageState = PageState.success; + }); + + it('should send reset password link, change loading and page state to success', fakeAsync(() => { routerAuthService.sendResetPassword.and.returnValue(of({})); const email = 'jay.b@fyle.in'; component.sendResetLink(email); - expect(component.isLoading).toEqual(false); + tick(); + expect(component.isLoading).toBeFalse(); expect(component.currentPageState).toEqual(PageState.success); - }); + })); it('should send reset password link, change loading and page state', () => { routerAuthService.sendResetPassword.and.returnValue(throwError(() => new Error('Error message'))); @@ -97,28 +171,38 @@ describe('ResetPasswordPage', () => { const email = 'jay.b@fyle.in'; component.sendResetLink(email); - expect(component.isLoading).toEqual(true); + expect(component.isLoading).toBeFalse(); expect(component.handleError).toHaveBeenCalledTimes(1); }); }); - describe('handleError():', () => { - it('should navigate to disabled auth', () => { - component.handleError({ - status: 422, - message: 'Error message', - }); + describe('handleError(): ', () => { + it('should navigate to disabled page on 422 error', () => { + const error = { status: 422 }; + component.handleError(error); - expect(router.navigate).toHaveBeenCalledOnceWith(['/', 'auth', 'disabled']); + expect(router.navigate).toHaveBeenCalledWith(['/', 'auth', 'disabled']); }); - it('should change page state if auth not disabled', () => { - component.handleError({ - status: 400, - message: 'Error message', - }); + it('should display error message on other errors', () => { + const error = { status: 401 }; + const props = { + panelClass: ['msb-failure'], + }; + + matSnackBar.openFromComponent.and.callThrough(); - expect(component.currentPageState).toEqual(PageState.failure); + component.handleError(error); + expect(matSnackBar.openFromComponent).toHaveBeenCalledOnceWith(ToastMessageComponent, { + ...props, + panelClass: ['msb-failure'], + }); + expect(snackbarPropertiesService.setSnackbarProperties).toHaveBeenCalledTimes(1); }); }); + + it('onGotoSignInClick(): should navigate to sign-in page', () => { + component.onGotoSignInClick(); + expect(router.navigate).toHaveBeenCalledWith(['/', 'auth', 'sign_in']); + }); }); diff --git a/src/app/auth/reset-password/reset-password.page.ts b/src/app/auth/reset-password/reset-password.page.ts index 09d288f93d..17f7740976 100644 --- a/src/app/auth/reset-password/reset-password.page.ts +++ b/src/app/auth/reset-password/reset-password.page.ts @@ -1,43 +1,96 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { tap } from 'rxjs/operators'; +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { finalize } from 'rxjs/operators'; import { RouterAuthService } from 'src/app/core/services/router-auth.service'; import { PageState } from 'src/app/core/models/page-state.enum'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { SnackbarPropertiesService } from 'src/app/core/services/snackbar-properties.service'; +import { ToastMessageComponent } from 'src/app/shared/components/toast-message/toast-message.component'; @Component({ selector: 'app-reset-password', templateUrl: './reset-password.page.html', + styleUrls: ['./reset-password.page.scss'], }) -export class ResetPasswordPage implements OnInit { +export class ResetPasswordPage { currentPageState: PageState; isLoading = false; - constructor(private routerAuthService: RouterAuthService, private router: Router) {} + fg: FormGroup; - ionViewWillEnter() { + resetEmail: string; + + isEmailSentOnce: boolean; + + PageState: typeof PageState = PageState; + + constructor( + private formBuilder: FormBuilder, + private routerAuthService: RouterAuthService, + private router: Router, + private activatedRoute: ActivatedRoute, + private matSnackBar: MatSnackBar, + private snackbarProperties: SnackbarPropertiesService + ) {} + + ionViewWillEnter(): void { this.currentPageState = PageState.notSent; + const email = (this.activatedRoute.snapshot.params.email as string) || ''; + this.fg = this.formBuilder.group({ + email: [email, Validators.compose([Validators.required, Validators.pattern('\\S+@\\S+\\.\\S{2,}')])], + }); } - ngOnInit() {} - - sendResetLink(email: string) { + sendResetLink(email: string): void { this.isLoading = true; + this.resetEmail = email; + + if (this.currentPageState === PageState.success) { + this.isEmailSentOnce = true; + } this.routerAuthService .sendResetPassword(email) - .pipe(tap(() => (this.isLoading = false))) + .pipe( + finalize(() => { + this.isLoading = false; + }) + ) .subscribe({ - next: () => (this.currentPageState = PageState.success), - error: (err) => this.handleError(err), + next: () => { + this.currentPageState = PageState.success; + if (this.isEmailSentOnce) { + const toastMessageData = { + message: ' Password recovery email sent successfully.', + }; + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarProperties.setSnackbarProperties('success', toastMessageData), + panelClass: ['msb-success'], + }); + } + }, + error: (err: { status: number }) => this.handleError(err), }); } - handleError(err) { + handleError(err: { status: number }): void { if (err.status === 422) { this.router.navigate(['/', 'auth', 'disabled']); } else { - this.currentPageState = PageState.failure; + const toastMessageData = { + message: 'Something went wrong. Please try after some time.', + }; + + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarProperties.setSnackbarProperties('failure', toastMessageData), + panelClass: ['msb-failure'], + }); } } + + onGotoSignInClick(): void { + this.router.navigate(['/', 'auth', 'sign_in']); + } } diff --git a/src/app/auth/sign-in/error/error.component.html b/src/app/auth/sign-in/error/error.component.html index d7d3157e3d..e3d0d09cf6 100644 --- a/src/app/auth/sign-in/error/error.component.html +++ b/src/app/auth/sign-in/error/error.component.html @@ -1,11 +1,18 @@
-
- {{ header }} +
+ +
+ {{ header }} +
-
+
- This email address will be temporarily locked after 5 unsuccessful login attempts. Try - resetting your + This email address will be temporarily locked after 5 unsuccessful login attempts. Would you like to try + resetting your password?
@@ -31,7 +38,7 @@
Your organization has restricted Fyle access to its corporate network.
-
- +
+ Try again
diff --git a/src/app/auth/sign-in/error/error.component.scss b/src/app/auth/sign-in/error/error.component.scss index bab19843e8..7b01cf25fb 100644 --- a/src/app/auth/sign-in/error/error.component.scss +++ b/src/app/auth/sign-in/error/error.component.scss @@ -1,29 +1,39 @@ -$details-color: #ababab; +@import '../../../../theme/colors.scss'; .error-internal { - &--header { + &__header { font-size: 20px; padding: 16px; - font-weight: 700; - } - - &--details { - font-size: 16px; - padding: 0 16px; font-weight: 500; - color: $details-color; - } + display: flex; + flex-direction: row; + border-bottom: 1px solid $grey-lighter; + gap: 12px; - &--primary-cta { - padding: 16px; - .mat-button-base { + &__header-text { + align-items: center; + justify-content: center; width: 100%; - font-weight: 700; - min-height: 47px; + display: flex; + flex-direction: row; } } - &--redirect { + &__close-icon { + align-self: flex-start; + } + + &__primary-cta { + padding: 0 16px 16px; + } + + &__details { + font-size: 16px; + padding: 20px 16px; + color: $black; + } + + &__redirect { text-decoration: none; } } diff --git a/src/app/auth/sign-in/error/error.component.spec.ts b/src/app/auth/sign-in/error/error.component.spec.ts index 2771080c02..f92b180191 100644 --- a/src/app/auth/sign-in/error/error.component.spec.ts +++ b/src/app/auth/sign-in/error/error.component.spec.ts @@ -35,11 +35,11 @@ describe('ErrorComponent', () => { }); it('should have a default header', () => { - expect(component.header).toEqual('Account does not Exist'); + expect(component.header).toEqual('Account does not exist'); }); - it('tryAgainClicked(): should dismiss the popover on try again button click', async () => { - const tryAgainBtn = getElementBySelector(fixture, '.error-internal--primary-cta button') as HTMLButtonElement; + it('closePopover(): should dismiss the popover on try again button click', async () => { + const tryAgainBtn = getElementBySelector(fixture, '.error-internal__primary-cta ion-button') as HTMLButtonElement; click(tryAgainBtn); fixture.detectChanges(); await fixture.whenStable(); @@ -59,10 +59,10 @@ describe('ErrorComponent', () => { it('should display the correct error message for status 401 and data is present', () => { component.error = { status: 401, data: { message: 'Invalid email or password' } }; fixture.detectChanges(); - const errorMessage = getElementBySelector(fixture, '.error-internal--details'); - const resetLink = getElementBySelector(fixture, '.error-internal--redirect'); + const errorMessage = getElementBySelector(fixture, '.error-internal__details'); + const resetLink = getElementBySelector(fixture, '.error-internal__redirect'); expect(getTextContent(errorMessage)).toContain( - 'This email address will be temporarily locked after 5 unsuccessful login attempts. Try resetting your password?' + 'This email address will be temporarily locked after 5 unsuccessful login attempts. Would you like to try resetting your password?' ); expect(resetLink).toBeTruthy(); }); @@ -70,7 +70,7 @@ describe('ErrorComponent', () => { it('should display the correct error message for status 400', () => { component.error = { status: 400 }; fixture.detectChanges(); - const errorMessage = getElementBySelector(fixture, '.error-internal--details'); + const errorMessage = getElementBySelector(fixture, '.error-internal__details'); expect(getTextContent(errorMessage)).toContain( 'Your account is not verified. Please request a verification link, if required' ); @@ -79,7 +79,7 @@ describe('ErrorComponent', () => { it('should display the correct error message for status 500', () => { component.error = { status: 500 }; fixture.detectChanges(); - const errorMessage = getElementBySelector(fixture, '.error-internal--details'); + const errorMessage = getElementBySelector(fixture, '.error-internal__details'); const supportLink = getElementBySelector(fixture, 'a'); expect(getTextContent(errorMessage)).toContain( 'Please retry in a while. Send us a note to support@fylehq.com if the problem persists.' @@ -90,7 +90,7 @@ describe('ErrorComponent', () => { it('should display the correct error message for status 433', () => { component.error = { status: 433 }; fixture.detectChanges(); - const errorMessage = getElementBySelector(fixture, '.error-internal--details'); + const errorMessage = getElementBySelector(fixture, '.error-internal__details'); expect(getTextContent(errorMessage)).toContain( 'This email address is locked temporarily, as there are too many unsuccessful login attempts recently. Please retry later.' ); @@ -99,7 +99,7 @@ describe('ErrorComponent', () => { it('should display the correct error message for status 401 and no data or message is present', () => { component.error = { status: 401 }; fixture.detectChanges(); - const errorMessage = getElementBySelector(fixture, '.error-internal--details'); + const errorMessage = getElementBySelector(fixture, '.error-internal__details'); expect(getTextContent(errorMessage)).toContain( 'Your organization has restricted Fyle access to its corporate network.' ); diff --git a/src/app/auth/sign-in/error/error.component.ts b/src/app/auth/sign-in/error/error.component.ts index a4a2775bda..bdbd7fc782 100644 --- a/src/app/auth/sign-in/error/error.component.ts +++ b/src/app/auth/sign-in/error/error.component.ts @@ -1,27 +1,24 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { PopoverController } from '@ionic/angular'; import { Router } from '@angular/router'; -import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-error', templateUrl: './error.component.html', styleUrls: ['./error.component.scss'], }) -export class ErrorComponent implements OnInit { - @Input() header = 'Account does not Exist'; +export class ErrorComponent { + @Input() header = 'Account does not exist'; @Input() error; constructor(private popoverController: PopoverController, private router: Router) {} - ngOnInit() {} - - async tryAgainClicked() { + async closePopover(): Promise { await this.popoverController.dismiss(); } - async routeTo(route: string[]) { + async routeTo(route: string[]): Promise { this.router.navigate(route); await this.popoverController.dismiss(); } diff --git a/src/app/auth/sign-in/sign-in-page-state.enum.ts b/src/app/auth/sign-in/sign-in-page-state.enum.ts new file mode 100644 index 0000000000..ac16d4b294 --- /dev/null +++ b/src/app/auth/sign-in/sign-in-page-state.enum.ts @@ -0,0 +1,5 @@ +export enum SignInPageState { + SELECT_SIGN_IN_METHOD, // Google Sign In and normal sign in redirection from here + ENTER_EMAIL, // user can enter email and proceed to next step, SSO flow begins after this step + ENTER_PASSWORD, // user can enter their password for login here +} diff --git a/src/app/auth/sign-in/sign-in.page.html b/src/app/auth/sign-in/sign-in.page.html index e03001cd91..d453b91a88 100644 --- a/src/app/auth/sign-in/sign-in.page.html +++ b/src/app/auth/sign-in/sign-in.page.html @@ -1,125 +1,160 @@ -