From 6b827380372694f4343b6ef94e6b359117a7213b Mon Sep 17 00:00:00 2001 From: devyaniofficial Date: Mon, 8 Jan 2024 15:22:44 +0530 Subject: [PATCH] Role management with features --- package-lock.json | 39 ++- .../lib/assets/fonts/gotham/Gotham-Medium.ttf | Bin 0 -> 119512 bytes .../assets/fonts/gotham/Gotham-Medium.woff | Bin 0 -> 51880 bytes .../assets/fonts/gotham/Gotham-Medium.woff2 | Bin 0 -> 32396 bytes .../components/auth/auth-routing.module.ts | 16 +- .../lib/components/auth/auth.component.html | 2 +- .../lib/components/auth/auth.component.scss | 4 +- .../src/lib/components/auth/auth.module.ts | 16 +- .../auth/login/login.component.html | 226 +++++++++++------- .../components/auth/login/login.component.ts | 68 +++--- .../gantt-header/gantt-header.component.scss | 6 +- projects/arc-lib/src/lib/components/index.ts | 1 + .../src/lib/components/role/adapters/index.ts | 0 .../role/adapters/role-adapter.service.ts | 27 +++ .../role/commands/create-role.command.ts | 17 ++ .../role/commands/edit-role.command.ts | 19 ++ .../commands/get-feature-actions.command.ts | 18 ++ .../role/commands/get-role-by-id.command.ts | 19 ++ .../role/commands/get-roles.command.ts | 17 ++ .../src/lib/components/role/commands/index.ts | 4 + .../add-role/add-role.component.html | 134 +++++++++++ .../add-role/add-role.component.scss | 119 +++++++++ .../add-role/add-role.component.spec.ts | 21 ++ .../components/add-role/add-role.component.ts | 127 ++++++++++ .../confirmation-dialog.component.html | 30 +++ .../confirmation-dialog.component.scss | 39 +++ .../confirmation-dialog.component.spec.ts | 21 ++ .../confirmation-dialog.component.ts | 15 ++ .../role/components/role/role.component.html | 91 +++++++ .../role/components/role/role.component.scss | 40 ++++ .../components/role/role.component.spec.ts | 21 ++ .../role/components/role/role.component.ts | 66 +++++ .../role/models/api-config.interface.ts | 8 + .../role/models/feature-action.model.ts | 10 + .../src/lib/components/role/models/index.ts | 2 + .../lib/components/role/models/role.model.ts | 8 + .../role/role-facade.service.spec.ts | 16 ++ .../components/role/role-facade.service.ts | 91 +++++++ .../components/role/role-routing.module.ts | 25 ++ .../src/lib/components/role/role.module.ts | 41 ++++ .../arc-lib/src/lib/core/auth/auth.service.ts | 22 +- .../lib/core/interceptors/auth.interceptor.ts | 20 +- .../src/lib/theme/styles/_variables.scss | 108 ++++----- projects/arc-lib/src/public-api.ts | 5 +- projects/arc/src/app/app-routing.module.ts | 5 +- projects/arc/src/app/app.module.ts | 17 +- .../arc/src/app/main/home/home.component.ts | 8 +- .../arc/src/app/main/main-routing.module.ts | 46 ++-- projects/arc/src/app/main/main.component.ts | 43 ++-- projects/arc/src/app/main/main.module.ts | 5 +- projects/arc/src/environments/environment.ts | 10 +- projects/arc/src/styles.scss | 129 +++++++++- projects/arc/src/themes.scss | 13 +- 53 files changed, 1547 insertions(+), 308 deletions(-) create mode 100644 projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.ttf create mode 100644 projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff create mode 100644 projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff2 create mode 100644 projects/arc-lib/src/lib/components/role/adapters/index.ts create mode 100644 projects/arc-lib/src/lib/components/role/adapters/role-adapter.service.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/create-role.command.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/edit-role.command.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/get-feature-actions.command.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/get-role-by-id.command.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/get-roles.command.ts create mode 100644 projects/arc-lib/src/lib/components/role/commands/index.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.html create mode 100644 projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.scss create mode 100644 projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.spec.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.html create mode 100644 projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.scss create mode 100644 projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.spec.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/role/role.component.html create mode 100644 projects/arc-lib/src/lib/components/role/components/role/role.component.scss create mode 100644 projects/arc-lib/src/lib/components/role/components/role/role.component.spec.ts create mode 100644 projects/arc-lib/src/lib/components/role/components/role/role.component.ts create mode 100644 projects/arc-lib/src/lib/components/role/models/api-config.interface.ts create mode 100644 projects/arc-lib/src/lib/components/role/models/feature-action.model.ts create mode 100644 projects/arc-lib/src/lib/components/role/models/index.ts create mode 100644 projects/arc-lib/src/lib/components/role/models/role.model.ts create mode 100644 projects/arc-lib/src/lib/components/role/role-facade.service.spec.ts create mode 100644 projects/arc-lib/src/lib/components/role/role-facade.service.ts create mode 100644 projects/arc-lib/src/lib/components/role/role-routing.module.ts create mode 100644 projects/arc-lib/src/lib/components/role/role.module.ts diff --git a/package-lock.json b/package-lock.json index 67285e5b..bd15cc23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1497,9 +1497,9 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", - "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", @@ -2101,16 +2101,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", @@ -5680,9 +5679,9 @@ "dev": true }, "node_modules/bonjour-service": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.0.tgz", - "integrity": "sha512-xdzMA6JGckxyJzZByjEWRcfKmDxXaGXZWVftah3FkCqdlePNS9DjHSUN5zkP4oEfz/t0EXXlro88EIhzwMB4zA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6577,9 +6576,9 @@ } }, "node_modules/date-fns/node_modules/@babel/runtime": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz", - "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -6849,9 +6848,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.623", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", - "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "version": "1.4.625", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.625.tgz", + "integrity": "sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q==", "dev": true }, "node_modules/emoji-regex": { @@ -12145,9 +12144,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" diff --git a/projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.ttf b/projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e707d526f06769738fe7abbbdfecf97a9509ba32 GIT binary patch literal 119512 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
c0%4Q+6&0x(Yf`o_gj7rH@R zQ%Q~X3Dl=`d74e@i-u)G-ITw) z{N3~=tttNgM~4=yaHq${aneiEINC{+UOv{n#CLG?oiW6Lv8l8Jj*9Q-AVmVWQWKIu zUFjgE7Y)K8cLfs?53V@L~o0edf|R`pl)LCcf59 zZ>&&B%h<)TuV3^Jh4|MG?{|1{tm1grd*C4nCHuY-`GA-7`ol}4AVl-q#~v7WgPFcB zA3{H-Yxi&Rz!o*nFs&;qA?My`(-dz`pD)m;ZCBj$cu9-MZ%vbbcf5(`qjcj`v85xDoOI@~faq7~g zi=)D|;q&H&Yv6ves5UY)iZC)tPE1Z)5}O>OWxuN%8O6lLL`EdWB;#*e`L|hlb*(zW zmeu$OM)%EaF=bD5N>&)JHa2rKGcttF*2GFrHD<7Nk$YHKzuPTCVKYl~ zBZ-Qd&9IOgq}D|uD~kV5UYN9aaa>YNOzeVr+Ifi!k~J-Ri|R-t6D+o9Lo}~OY9b0L zDG3TS;*XtMmbxfSlSmTd6XS&?3pq8mhi$qoQpiunM$sWD$s6V<7<_y`JvmyzT16^` zAazVwqmNR=MH_fVd_-nGuZ}QbZKSM@R3xS(B_$IfIWaaSCN3^!LEOS5nMg?01VtQ) zi;bNx%t}Rw^YC4?(KLP*)DRJZql{S!w!~mMt`6cCE=o#FA;Oa6=(+P2gokVAlbFQV zWMM(ne8L@CD5j8v=vdT9=CSe-NhFaCSL9kQ7Kt05D8!^}h@Q_c4oh9j89>IA4{gdS z1?z?}wjU!u;k&s3+=7VtF;PT_UXZvbdEvrjEp5#<#UrY-{*sUtbJIi8R;8>YtAzCM z6+h032>(%YoR*3y*m*}sgq1WuDHgFH3ls3K)ZiGhlB6UjFDA((DQ+R+i5OrP7bY(v zWG;u4Gh_Wnlmzw=o4jCQEQuv?@kB0ai|*w9LhSf)S*U`I7>}~5K~wx@e@}*x(Yr}D*}HMe@imOQ*_Y7t z$W>&suy604{4?7pOw^FMu@UnlHzur!NDN}N8IG$qtX-ClJux<`fxkBW6dDjPBP38e zlgwT+4>isSbcVQyM>c0<-7r68Riw<__#-hTIcX6QQj=olX=g5C{lNc(=o!dcw(?`r zYCbt`;ewdB*l3N+*e1g4r05y?&n89?=Pk;Q#?_HOVx!|?7c3C;Rc#l>E{t197Bb2u z3d!+YT+{+2Sq#C^OOmIik&*cVgghV3hWW{4u^`VlBY~tOB`;1i{4!gR6qiJjgw#cg z(iSJjAQJLx6B2{KVuhv19x~2miHRtK5(S(c`g$pfAA>~3VTlXN8;eO ziH(hCToj!cixY>|+b%9o=5YolYW1bfNCH+)h);+o@x%bZWIxtG|h*gJAo7f6)vv&w~@41Z#MO0q_b zZ)45*=4!7b`NNV2X!Gk#FUmLm^x({lOZ1odAhYs4rt*(4nB|BXEa!-l8m`OSl{PMh&P#b}m#9d# zFb6a9=P8RUEWk<$Ru-1^jasOU-ZODs&8UG<8zXz8;YMSOf{o@FEi&3>bi}B@xUO+$ zV;AG`#(Ry=8(%dsHfe6s$;89t2a}&nPMZ8?^2W4*X-CtgrkhMJoBn3{-1HAKQ?oW^ zE@l(WrkVX ziam-vp{X!Z7%TV*5yDa-LpUKkuhyWNeYHN-{Hvu_+f*&1+C%e(=B>?pnFpBvXdZ9A z&OFonsCj|;P4j2U=E_dWp2{K0iON9bO64!gW6I0QVc&Z41(lZC%Ug2h&gqZSt| zN-ZrdZ7n-kPO@BMx!v-lWr@l})l}6+HB>cCm7rRq`dM{S^+5GTMXgM&YFah1YG>8Y zYP8jOt0`7tR&iDaT04YiMh=b9c%Zm{ax*}+8MR4)xK9pUB{)4N1env8|vJx+qiDmx|8e9sJo`_rn)(G zZ`OTP_s@FDdS5{u(9k-(^2K@ml_ZywKuee1T7g@9(-iVL1;$&A#gEVwG_N>{{rt~XT`m2`BS->cb6vQi~b)U^A zu7v93_ahfi32=~RvADL>M&ae}8tRPgHfr?_8Z+p1pMx3H)Z8P-0*{RqZj^F;avgr5 zmRQ6OQR_zCSz}(%7|pRjM9mOOMfSW@#8|rXLDq4;6 za@GtX=I`w^5q+su%Zf)e!vCxJ`JDG)Qr9)vg_iWRJ3uwDCuFDP0^4;aR zum8^-k@)AZemFQO9%YYr!1{fLdv?V7&0b&E@0%Wiiy&MhYqt_KlYl4i8}o`zjI+3x!XBMilEe~i@bPEJN^Y z$6fgTX6QZSzOK%v*tMFw=TF?ZbIG*}V%fQ`s~vK_3bOcrNK3zisuU=OK|yVhZB=qI zcjfbAhrmcHZIg4-c!d7wr->jD3E>NcuN7-zSH`Vp9It|w{Iwgt^ z(mywsi50`|9DRHoQk3n-{SJK@sJ_(lcUm3i{K#=WBLwANnDlRsP?j?vLLSS5?Uf7f zH7QV&Z<925)MR^nZSvc3FxCDq^AP8cDwdSMAR{?v&6NvlalD8s7hj2gh7v<7?o*@#Y1o6u2^UOA4Fk~Wv> zBYX(b{mg}VhRyaP(@98b$Wp<(1Gh7DXLuGVAqRG6g0TR;(k^Pv7QS)M=}8_=!gErr z8$n2OIEZT`ea^9UL@6(aUeNL5O4b2avT@W4rANg|)&b}EI9$mFQY|zACsxi08bC7? zu>(O%n@}fK&WSdl&FDasG5cu^=#MPZze^_VMW>P|Y^(GhEybp)9wH&^2nqS;BP7a_ z6GsZQDax5JDd^b>*pUbQR_{7*9L4AJV$Z6d=5-6 zz_EWw$`ffSD<>La`M_wlLfOs3y-y#{tRgnBstcj z#%+fM<@j664`K6S!49M6DAQj~}RDvJ`?n9Df)R)i@djBI8esN0v5*2>% z`IHL22Z9(C&>C+-jmLocYfkx?K+R{=gLl38SCYDg;1%^F}vYy4Fw-dom++qh=sMv@`qj@a+wGQxAPhWM=v+Bj2C`b__M z+x86`cJ10QeX{@bX+B!zW2~Bj>uL`vo)AGOn55nCd*B6-HRal>{x{lpF#7?e0BTiR~#a>7MuLCwGtF+G^Yo$$R7dK1Or zN8OJ+@-K1C6Hxu-l%t8~@`>vOxGEWOTfJ7gkzwpe=2uvs+M=XD_1z3?HHXQ*IXi;| zdQE4jLhR*U zWTdTNy;v8O9wBUq*c8cnk#{sJxBO7BcJNX6JdLvQiEjDyvhr^;^L{BUub}+9#Jpe1 z%B$38GJpi71g{Vv5aPI%K}-CJA1*s> z2KH#CQI?*)@m#Z&Y>e74TfkKx)ke@gpgJBkn+pe1?+Tsy@POc%?x_0&uL<9ZKT|th z@OX;oJtYO%sgDFZK78Wz>FoRT4dFZRXKLGmQSAHlpxM*ORDDuh>`YCZi#6F?L=sr@ z%4VeJu%0JS`L(3=Sad~YYtqBHM}AATuhk3~Qyn2WFoYzw#>e8M%nVX2+@nHq> z!N)!Gv~0F--?rgrobA*6C(E<_?74H>~NLu*lU zLha-P9pB*8G>0E!1!ZG|IaQ-$K&$?NuN6BIjkZYk8{l9M3^{e;|N&Sih! zjV%#SiylsPY*r7+@XHDnlx{P}Oq3IswY@bE+G*~Q+dp4EB)AoE!~F)#a3MlB?@fCU z*sdKL3Q8Pk(LeBw8qs+37AN z%cJ5erLYq>4RzJa!-Y=Nr4ZU5Y285qW0Qf$sR2!8;x@#(N}6JYMn3K?&OWDJXuyGS8u`aiy=;vybEW1A9jA*V zQlviU@OvUvmlBCC5mlgu`1vb>n$Iih1Fxtpf$h3+)RxXiN_{4h_1{M_hIsx?UKl9_C|naaw6K_$26gR88m&t$SXeRUtfo5g<=a2dC=c!!ZKsV^bnzSGF=o=?JDL+hu~*&P%+!yS}m>1$%0Cwwp8L0KNW?u&O&HU+Pj@1Q8hP2Kd#1r$$q z0YwP{i!;jOOpk}Ugm#5=?#|ZJ=UEs593O4V+sHvQnXh8+D*sc1_meOq6-M?y#2ER@ zm@EJDL1)(PB7?Q-RAKG@SF9kE^TNZ^$BO=z71K5+e}dI2hSdmekKcjm3@c=tdnAXk zjgy{j3c0^?PX@~F$?>1MCo5|3%FT*@>C!Y@D^~oSS4?@fx&9)@clui*sqB`>K-43f zSKRNYba_O1mY`L_jwmv%EhcV3ly*6v8kZEKQI?-{syN}K{J)}TYvlj{c$^)J!3lss z5X7=k@MA?+k^a>a&*B|?1Tv7JfHkxr3q=n%Pu6gw+&$3KE8ZRPcQVcVKllK-`vv&` zc$}qIdvMjo6+Y*?Pi_KSFe1IAG~;wS`KvWCh875t3qU#X=q=0R*)~Y=Hm*BGwnSS`hI;r`j1CX@!2fzlGeJ5a%)`lXG@| z`|a*Id!7*$k%)HVi1>5(BeBZGjd3Zxv2kIIj)_+^)#-Hc6C-EN$VFr-5Fft`lZa$U zrVN)6GE$;4N=9=%OD>i%{PmU0D9@3SSu>~QNW;AHk{o&Xf=)2ltR!sUg3!SWLWe#R zeWAKXM6WKNnInatOW*KkqA#hah&RddN<&xNP*-0o4=!q~sFc<5sv9e0UA(?BE^U@} zTe{8Cp1S7RM%mdwCi@a*@1aCh-6A=jNL-dDACTtDN2HfaA8CP{CcQ%aq=gzGouJV~ z^YsZGlW1;8Xm%6N(Mu^atlZ`=XlcZLGa8s#$kKqNeoK8$PeU^-%_I#w4Xu7MR=!|Y zMp!z^($SWBFY3M3#g>k-^b$*>mX5S^xMa&jDUnhsmuuvDsg@;jr`#nS@}%_0ZaFBg z$eVIP{v~}X8rGJ{t67^%Zz?|4oj^9dB^F$!Z?(xA|WS1OqLBRi37S zPH#PM+^$E1S;2|H1;M4k4Z%afzR>v4v`}^E?$GAYkubu!;n^NK+~W8O$2&YeEZ^}y zk4N0AN3tFNvg5gqJA7n;-o*#_5#B~0Zo}_z3@_mj4&xP^#vkx0Ud2g#jF<5btiulU;62=nU*k7;5cl8& zR^V>@7N6k1IO7xi5C6d`JcNhw2v%ba9>wo*JJ#Y3Jcc{*WBdd^#ZvqXKgTa{7nWf; zeu-bV)TvsmCDM#}*n}ss72EI>p2joy6SiXuHp^mE zNegOFj~~)6D^Vdg&^!FnC<`Sn#^zyq&~Ov(o0Z&)ac=z%r7p;j7rS3;VlMHchKRq_zC<0G<~ zH#{TT1N_+G<-KD*{M-N~+UuGUE zQ03`}n+Lq^I=#OvD*XaXq z&#7UfD+=TfOld1h|#@!-mlG|mutdzBkyr*RcBX7SP zX6zkd^c|D;ecnH(79 zOk@pzGniR&B~$Y>Pli*c4Ke~d(JN8x<-J)rO1)zyhhi?N(sN8c{kIuwXUZ6IDfiwn zbZnTsNgo-~L+H24GtOpIF%mP@C+Q?kix@j5JF8C9Yq{ogx!2qAd9f;Au{%t4J6qXI z)a1}#ie!p>pYieoSs+z%i%v!Xu0SCs;2W5TNtlcxOu?0yiei+|%fE?lSxsUon(%Z+ z$$TRf{r=Gusj|;Wb#~3jUa7ZQL?QpejOR>NmuzZ~i(9#OhRnhe%S*AC_*rNnEyXRQ zGpt54ILe_-OX;=i2gOw>eZkap>j`$2VQrmhDw!b%+ zn$#1RZXmfA=we<=t=;A&O;so!WQ&>HRmb{Q#!5GvRc#I{M?YrZ9y2eq`6{1ZBYd^T zZ3Q!xtd}&KdFi&KF6}ep&3jqbEs zcghm)6iVSoo%`mUkZ{Nb?_P^&^1fMX^~ZDP{{apQhfM$gc%1EB34ByV(y#8xp-DL8 zGNK{~C?2aW>bI`9s3_uzsCcdiDk36cJa-p&WmR+$T~-$lJWvFMRS=CwSVb115FjXo zHJ}j_2!S|(On?M38SDFZy?$?wOhN*QTz3EJ9sR2NRdrWaRUdDL6cMG+5PFyrIwMfW zTOJxdgburX_^o%+IYVyB7)qB?0&s|#3~mSV^*XO#XX)RP;H$~lf>+qqpkGT>^AdR!8lonG+rS*{9S!#s(n|ex(SGg)*-=_bfpVH&?dwQNO z^0oGL@}1;6-FKm{pYJ-~U|)vsVc#g<7~gZgmwd1L-t&Fv%kq5z3^!gF5i@*WMm!l~ zQ%^!U*Wp1m8(XHzy5B`Vu8wm((F4BWYpM5|lV8xpVR{ zpkYk%faFJ$UqF1-H%iWLBW*_V3%(1J=OwRCtVpg&IXPuO3d%4?-$A5vEvPExDQI~@+e%cQh}P{)XA zhoUXgxssF$@&C{YeW{bWmP2YVm+6sQLup7!rE7R8eF~V#OVz=Exqy{`pLwx9l$Yvm zfWrXC14o-2<_UGB)_fuD#|6{|lF*j@)DCZI&l9KvuJ=c}dGi4rppNWU=kY()70h^h zz8c6y>NYM^gLo?_DO7iHff~leYB-mudwH75;E&Y(zt&!dVIO+Tos0vDo zAG!QUS&0;<9KS8Y;1wA>loOOEmB8I-OJ8sBXUkjEVaa=*`cjM@RTa#YG5aW`qrF9roWlAV$-kiyfe!6p&oOPR)cz&gY;z1 z1MVo`-Nw1dYubA-Z=oi@ui0mweq#VUL zbRsWNX@Hi1D*+<`PlAHcIKK&)3Md3@b^>0Cw9qQ>R7og-Zh%~yx7-W<4BkF?l7&(# zQA$3Z1Z+tqDCuKhzzfjMkbuuXt{j&(NvKnoTc7{Yw@o;j1)5_xH0q1K{BC$T{(}lbo zY3sdwpP3#--9$#7hXl_6t(kNna6d)=XSJMCfImg_(@0~1kZ&#R59!=Yze5|Gj9PdR z?Un{UTLKQkbtk};xV{SK>j5KiJsR*PU@D*xP>g!mh;tCnL+IN*xmZsCOhkF+9joNH znc9M@BGhEQ^uf~sH;9HSfSfHB866}wyHuoD>I)n^4=ytSb5N&+sM`=1NRRW;)x1G{ z$s08B2C4s3Q0{ziy&hb*1O7B{T?wwcK=Xybb&ljSm@R-g2bgP6G6ORUm=(ZcV9kS$ zER*_y-0*Z@m~sMmT8&hrUw-BlsPj4e6EuFAceNI+^fp=&Eu$5*tPgNF_%*%hX>c)0 zO-K1Ncr{8K1FV%O^+S|ef>P&#o7VgRo_vDTDtZQ5qd)cHv2+fPq27Rtc{*JJxD?ly z;e0vZD%gxW_*r^@-=# z50D7x!DH1Ce5X1R=cDoLMx@=!6VQ*xs5@{y1TYkEH`4AwS_a@gz=MDhfG4@XdJ6g9 zNB$3h_o1}Xo$4bz`viGD#eEiFCg49jP<@8;=YUyw{sqpn0sqA{_)%ZsdLC!0`8ekQ z76KLla#7A=oWF+s1)pjOAP@K8Rjojo-{HCd@B`pS0D7QWjc03+Z!PXi`8~BB*X6jb z08|3D0IGpggY=(yg4Ud=698#ER<{JS;yZO~oZIji-Hu<<>A>j-JADwK6Vf^ZdI0}O z+@H_S>OTCgeiGMD0mdQUivXiNlBorcrdB)}wK7Tf=Fz$U@B^R_=~~UEH1vv7A<45L zcdqsr2V0fQ%OQuEkk%=X)^bSewp?66S1Zx~{E*murI5i=$Y3dCuoN;_3K=YgJe5M8N+D0BkbzRPf2pygXvb2#B?oOa4|O{a^-+rY zC`DbAg8IeatrWbKf{VrAVllW_3@hB4jzKS815MY%_AJxyyQ6hYkDdn(kCA>~1N{<0 z5B-^!>yfYn#v1ejb~&&Q2Id-rCAKCh7QcuU7%^Y0=ffw;(h{PBJvvVVv`(ygbi#Xw8YVfVvlN&@*`4e zkOF!Db71K~kM%avp-*8)VFMLqp`2vsnHJOvRPF~o3;zLQko_s04xo;77#&W>QBOLN zeg_+MD*ToUsUKZM*U>FBkZz?v(xdb@dW;^YCuj_G&$ILo8cWa7i}VsLq+I%%mQWs* z&=#tu8v0qKsg~*>)k$?%hp8jfQR*~xraDXYR_CenRbO?P>Zh(ySE{Sj0CkPJUfrl} zRkx`@>JBwn4N-TgyVWo?TxF>H)cxuq^;h+%8j11EX!VR5tDaNOtAD9+>IL<(dQH8l zCaSm8B=w$}re-K;NAQ$uwJjsmDh9CJrDLq2>VoWz3v6@3X zR*sb%;PLQIOXRAO%jFn=zp+;Y{+{!AInUbJbZlP$?Rj!8lH>P){J3}ymvcGDx$pva zv%upK^B|L>aQqI^nU66LaTd=4%;jv{7XaoXtrF1>S@wfZKhoynz658#x!c)%G)(|c z^LPo*hJM`*gK0}SPmfA98pjW>bq@-TyzMDcS66@^U|P=~l@>5I#P-I@=vIx_#$tzd zX=$#_rRW*Iv66C*;cEBfvgyL!;XVAy<*ppiLxT5BeK^;2uyrmze-viLGyiu?KeFyuVf^wV7<@b`$D za9%D)t8KW9f8w>qlaYDZ0I&D(t0G&Bx5{j0wVT2Ve_85xPS{l?wrRs&!sV~t`W_Q@ zRW5lWpg^t)Y*I3REV{KqQs-N|8FGBZTAP-`6}7jaj~dAucTZzOGFbI`hdfjE2-t#AAC`JXB`~(1JSf@*_tj z(w4!PHTx2$q+Kz%deZFdk#pVJr!e9!5N~Hf^HA7CA=G(xlT-f%zbe8*`EjQR@<|~WgV3BD*iSmrPj*)t{dE)gPy&tqxZqX zi`nZ1tsEuoyV7hPv`iHx%4MRLmKX8d*n?GoPtD#~o+{kL+tu{5Jy(g}R3-UByaMrS zvzxeCnP@-&MUKx_;ibgma;C>+Xi5hvb{;6_KOph-ao>W<%CLm%GW$ zPww^xeiahD9x_@1F44bY#xF#2BLmuRJUQzGt6>33 zobhoCPMN_7uOmb~6HUWel8?hSc;^Owf=9^8-QCbGewhQf8^^hT_jx|glG&hT5%`As z1-uUSQ}*-oVry+(%aJejGg@@>N}IOJte1oXkF&nOPp}#Ru_-auR5-1PKk{@q;?L}@ zuUScLaNr4u`QRoCN6?M-LmRf~KT2OoZFUxiLIaCmW4xQC&Wt4;Nb-9o@C6b{R`JAh_(A%rI}36kbdzIY z*=cEB5>aLzr5bMK7f_a=J}PJz3!vyg$Ib~?70&kwaqu?rcX9KF#DfUMf4cJm8bfS1 zycBoFInqXySom0Ece3=zcwD>lMKz{Jo3@v`LdZ!jyxKbbFkZB~B~yXYfP6F|Eks;l+=I4R!pxe3516x=2`W!{EHGL~%AC%but+t6J04@O zjTjevAiBH2`FfQ<#Q1YF?nO(1n(_h_AfN?3J4q#~&)S=dDs+ zm1|8gzAQ6eYt&DJtkD!n-WnWJntBEazKe_uomCHG;p!N9ErX?54qvDe7IiymXiSfn zo>bJd-x1c9R@-7#p2RjlOGe6Km9wp;2=bK{D!>|G&j6aL` zVc-~jIzjx{S72{O@?UZFcfgB$KJ3Oz{Hl`=wPR%#V)$S4o-cP5Dk;qlA@^ zlNuQtM2twAYV`%)<|a8hHt%RavgwJ&ZpjGSXu&e!${kZ44UgO}Yk+BXB``wgo8L&2 zaalXDK!vh50roz6ZZjhMMmU>qOYcO-dQXm*V``IdxlG=&%#OS;W)$mOB`uSUUS#He zUgI(7eUEr~mdmj$eDt0~+&NhG`h7>!)=No~diCMCwdnmSW;cH&lzg{K6||uA|j=n9GLFtvB%3 zQarC9a&EoM**A-}EP(vG7I>-W6*$sgZOMeh%&t;6l_`vkcH?<|oqR!PJz z;9&S@Q#MGRt+MCY*v2)ep9(Aebyx^@7Engt&9Yko(o{(?GyU!iqg?x)H}gkk?wQ|4 zO|KFAQOE3@)md9*rYr=Tv07I496r9Tmy$v=j~|uNWa|$Y9ZyDWSMfj1&N|RDQ+5r$HT9X-sP8kTfjvY{H0=~F#vf(0~=%?((iOuZ#n|C&$Lm(Ady;4{uvz;-(Bu)l2ya&Vbjkp0C8w ztQO4U;bi7(rtn*w3F%ozvVs6fT4&@HZCVV>B8;b<6@+ZNrr_?QH7f^S8~>Zg@tb5O zrOfz2b<*%S^!7@O#5PK;PvSrEr}oJRInLW*E+-+HG08X_e>5JQSWfe6RI>m%=KCka z@Gnvsn)79LDp!2l0$i6w@21=VYJP~hZ_sy24Jg+y-@F)mkqhcW*8euYzqM5Co=MHO zm;tn-^$Fx#8pHKg%ljf@4Xx!_fR<*`W4YkbCF{{-d12%TY&ettOe)F$fg8O9(30|K|>M0%+q$9 zPw{Iix3gxY=fy=`yc z%k0_t4r?vyJRX$D(~@}mJR7&C+0{EuLwz0ZSlw(T=SPiyYkgH|{n$!)Am;b~oVCq* zzP+>_tL%h!Ms?`3A$N5izRoJ6uN)lbjj$nw_R7_4E6gZ=HX}Z7q=dF3= zlih_5s-_wbL2SS%@HiqSr_&xr8{3hVw0@>|8_w^{-RJE5vBAtIed6Ykw@inB++N-_ z#ru85^c~O^j&moE!SMiHcIMw`o z)O{0tV`Oc4D9-Ox1|qCy10=}VVPNM9-lzlTLwhz{mU^jgM&Z=(OVRh+es|n=eYe_5bNPJD358&S~JYfO15`rzgUR)u6%QBj^+!oUlPdbKuL^+sn07g z9`P1<^lPMsB7M|)C6*$-LV_g;%7~?TfBB)6qkqVmgRS+Qh}gvPC=S@IAG;>M6?QS` z{MS8F5cj9bX^Z%IUls1%qrfqq6%Sal0`i0x*eD(W2;qpSFodV74zw?(7 z*WXgD-CXs}i^-0`br?OFb-;?~Iga?>W_VA%uj$2)4>`L%n=QC&USjcNr7P}?Xx-km zN4m-=?yTl=f0#l&B1hFNFyhN;$jE%N4b1JQ4iRu07K z2J7ET+jF+;gQ)Wt%;7f#d4csM0=7hVC&E^qWA+M5&o((-omavRa9aJ0jTeU`MV2S%3BO>e~NKV)2S1?MuW6I3T^cDqbDb z<1Gfzepbht@2=6p5pQjJixNls#Ba-5+Q&XKql;?(T>5j2t*N^$-PKvSUdQvz*VnH0 zX-dhhHR};O|HC4^d%(Qh>= zO4bE3JKT|+UxoPtT?gnyXGY;2L}sjiEn+yFMZM^3I!ESa&XbfrbOBu`SC`PmDElG0 zl=@MB^3j!a6%C-PX&*}R^50Ci(rq~3PJ?h9C~1S`Y9I~8GoribZu&FM_tO3J06j<} z>RE}u-n;q}B1PO0-GEU}8#_# z7~0)P0#0}k96gA)-t58I$nU~A_TA^AtXMeD*6(??{Mc{-YR%NT3*?;#dThLg|-ubcLA;_ zf;NY;vq9MvLfPe#dO4ZBK9|vn^89AJCxh<5sQPwLl_3~|=_EOu`Z2Qqd(`GoNcKIF zdJhf5ahR1HBUJ;D|2EX86NVuUlpgY+yl0ry_sMh$sJugp(y1G@rmob5QmF%_P)q7e`_jSkY)}-Yw$gPU{U13R z#~h8;xkp-|w)Ea?fkbOKwJ^X+ql0azy(VsaIBsl92T*(3kM?i$_q%^UGvG#P$Uz;g;@`YyCNK@Q0BXTm|E$4xMEJ&M9RIPx+pGRojf@oju;N+dSA%L zwUFPTpgA0MoPGTXLbn^u^^rEFTbd(dOD`U3V@sjkjRfdsV_R_67H>`Sz=x+U80(lI zv*9gkfe+~}IN{I;=pyY{8^}I$APMET;Jh#V>;TlV3+++g295;9v9Lc{AssxJc5LTC zvPeQ2YBNnrKS2JeyJ4Z5$PkHE+lR>7c4ePBcfSWc>Co^UMN^r6+5$Sg3-TU=tIHr8 zEpdM;Qcgo!7igv~NIL_mXF|W4RyYfoEun*sfd%L$*XGKE_GBbi_SiypwM`*t@h}x< z15U8tzqzRnWjuFjJAOGz&7>W0opB#2k3}* z{ub{v;7E%Bi3oQ0$$5w;nOeRjY>BpQU8_u2ih68ObzLisRg{&=xR+;|=A!41&vH^KrmE|_oXj2=!w zE8Tz=GW~B~M1>knMOq8AuMc#YUfL0O`-18op#CVxLR-}PX^@y+kj-w8zVpxz`XC+w zdAksO{9^Q{qaa6DpjNH|jXhxl?m+JxiW>es?A?9nfe+9V=xw7BFQPFt7I~hd$;k6A z%|Pvch2XO=~r2o+)l#lontw8)c6(EkLHMEwVrc%Ub$&dICDn}ek8xj9W zn-QO*D%F~vS8Y@qnx@*Rb~IgeP#x%fm9ElhhU%!g(+BEsbu7(Nr>IkCo;ppPM)TE~ zst@I;zN#=O;J--SM{!%rn;;5)hDWlnyLPyj#IM`d#c&$D|NieQ47?`YLQy3PF3Hi z|EV+73RR%aRVxwus6wsP1v*hDsUdnFy{{UoQ+2u;rVrMKsS)~UeY_f_Ptm>9v%0tL ztzOXQ>ptp5-B(|$UeQns}JyK=q$Mj?Bb3ID`UCq)@>oIDM z9;e5tZ2h8sQGKb$>sQoQ`gQ$=ny)A7x70%Yw$4_$xR0LneL=>Px#0N2eiV|bjEmThR3RT#&w`<$CBGhgu~bxWsnPWRfL z*|x_yx3-x+Zf#D{=9D&Eh=c}FY3K@_;)jeGQTC!neMupuAk#F>AT5%Jl%x+5p=e}T z(ndp}r{8t%`(E?Wl6d&@KhJr)uk*iN&hffMyd01x4c;Z0X^u#i*(im!Q3}jKnd03e zGrdDn0Sdf*Qf8i&YWgy~9Z~{Uo4b;i%o!>5UXZb-T?)-AnQr#VWV1%{O_!9KR^~j- zUR@IRM$24~#U2lW`QQe+a1v1in zNB=7NSAbDq0po9me44T6`Tk~^VtV9Zb4Akq7Hs)mGR-L&ZjQ=q@1!io<{miibxVm^ zlKcx^ZxS-q?3RRyWA|>((IWZYTGnd&aY=aTQtzcFdrhrtFR&jnmwvO|%}?k&Zzp3t zGSPcOG8n5hO)}Olllx3HXIqFq1rkH!n3s^J;QPJbB;NXNpuMS)BGV}qW}l2OYo!dE zmfBfT>}`=^vs`k#4jD#YgLhVH&~2XAB@cic`rhXJ36m>R)gS!d&kNdPlmag4l#7IPLpGwO1d(F3$9ODeTU!-%nu|i}+U0?P5W7QQL0A zE^c*QDi4%#*fanwf8jhA;XmLDXgrs5mcfted0m_nYZ~kBf50_2{9glam0Yh`GSw%l z%T26)L7P*GhbYqhv<8`7$vvhwxd-jv zvkQ_Z&8g%%+n)T=D^7mVSBJF5jF3F%PqnKzht5V{0?WV19zE7%L z4dRUUBhE$rv5Td~w(I)jb$9j?#8Qm&Xl*IRrqyV#ecSN`b%Pq5@5VE+LF0WV^;YL; zOti{)vooBR9mf7Av|pA=Q%-w7C}j?N+Ig&BE(7cgskTp0Pl}V5-M4g&j?)+Ax~-&6 za&Ge@XHkuVyuYq>*B>T>{3hlsWzMUvO}_5z0mpR z{?RScvrjY4H`Rx5=l5chIM30ITI*a~9qZ){qUZb_aF82)ngLsAgKTU!uQJ%Ise9=rHYfWW1dQ z$G|M&c^%v$*?sk@nS9poS5UX~9tiG?t9oys$pHHzW6W`ObOiNCzi+G1RQIk&gKgM7 zns2XQOmkfKBgf4^8S7V)2b(z)n!0mc;QURDC*kMVXCwO@W1r#t=Ue`rXx7MhRMRx> zn!?;u{+0RleCr3|p^dv8t@XUHs~zfp^`YwM?!1(m8RcbP&C|RkC!;lyozC|iVNL4j zSChi?x;RoTQaQ9oeeQJc$|aw0mg3&KSAtU6z%0j8yxlc=NPz$F@mKRwO5K-%bP5K^`aol^_O6-I(6H(Y^dH z^UPzCgTFJVzx95zOfpY$=YK=IUq;i7GQnRd^Yz|0pYs0$Vv(8=-rsqB+$oblM)*H7 z0S6cG4e_Pe{cYlaPK|m1HI2KqR9!`Td7%h@J7%(N_`jIoejY|$Gvwp zNG)7zPl9#9o990fys7$F^TEZ=t|0$4zMLIeC;QjNP1xT?-O%?>7ybwk>05O>jsMSF z^qO@m5I4DC4k!eZK^7PXrhp<)1@b^aI93WKf*Jl<%k>-?g?2d5Amy$xYWub Q`B*l|YjW&w>K#WR0F5irwg3PC literal 0 HcmV?d00001 diff --git a/projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff2 b/projects/arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..76611d45f9af58a2bf8c1438e73c7c3a8541951f GIT binary patch literal 32396 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 - \ No newline at end of file + diff --git a/projects/arc-lib/src/lib/components/auth/auth.component.scss b/projects/arc-lib/src/lib/components/auth/auth.component.scss index c90fdee5..5d33d5a3 100644 --- a/projects/arc-lib/src/lib/components/auth/auth.component.scss +++ b/projects/arc-lib/src/lib/components/auth/auth.component.scss @@ -28,5 +28,5 @@ .card-row { flex-grow: 0 !important; flex-shrink: 0 !important; - flex-basis: 35% !important; -} \ No newline at end of file + flex-basis: 35% !important; +} diff --git a/projects/arc-lib/src/lib/components/auth/auth.module.ts b/projects/arc-lib/src/lib/components/auth/auth.module.ts index cd9f5acd..838f2237 100644 --- a/projects/arc-lib/src/lib/components/auth/auth.module.ts +++ b/projects/arc-lib/src/lib/components/auth/auth.module.ts @@ -12,12 +12,18 @@ import {AuthRoutingModule} from './auth-routing.module'; import {AuthComponent} from './auth.component'; import {LoginComponent} from './login/login.component'; -import { SignupComponent } from './signup/signup.component'; -import { ForgotPasswordComponent } from './forgot-password/forgot-password.component'; -import { ResetPasswordComponent } from './reset-password/reset-password.component'; +import {SignupComponent} from './signup/signup.component'; +import {ForgotPasswordComponent} from './forgot-password/forgot-password.component'; +import {ResetPasswordComponent} from './reset-password/reset-password.component'; @NgModule({ - declarations: [LoginComponent, AuthComponent, SignupComponent, ForgotPasswordComponent, ResetPasswordComponent], + declarations: [ + LoginComponent, + AuthComponent, + SignupComponent, + ForgotPasswordComponent, + ResetPasswordComponent, + ], schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [ CommonModule, @@ -29,7 +35,7 @@ import { ResetPasswordComponent } from './reset-password/reset-password.componen HttpClientModule, NbLayoutModule, TranslateModule, - NbThemeModule.forRoot(), + NbThemeModule.forRoot({name: 'boiler'}), NbAuthModule.forRoot({ strategies: [ NbPasswordAuthStrategy.setup({ diff --git a/projects/arc-lib/src/lib/components/auth/login/login.component.html b/projects/arc-lib/src/lib/components/auth/login/login.component.html index a6eecae6..75f359d9 100644 --- a/projects/arc-lib/src/lib/components/auth/login/login.component.html +++ b/projects/arc-lib/src/lib/components/auth/login/login.component.html @@ -2,102 +2,148 @@
- -
- + -
- -
-
- Email -
-
- -
-
- Email is required. -
-
- Invalid email format. -
-
- - -
-
- Password -
-
- - - - -
-
- Password is required. -
-
- Password must be at least 6 characters. -
-
- - -
- -
-
+
+ +
+
+ Email +
+
+ +
+
+ Email is required. +
+
+ Invalid email format. +
+
-
- You can also Sign In via -
+ +
+
+ Password +
+
+ + + + +
+
+ Password is required. +
+
+ Password must be at least 6 characters. +
+
- - - -
+ +
+ +
+ + +
+ You can also Sign In via +
+ + + + +
diff --git a/projects/arc-lib/src/lib/components/auth/login/login.component.ts b/projects/arc-lib/src/lib/components/auth/login/login.component.ts index 302c523c..8e15af45 100644 --- a/projects/arc-lib/src/lib/components/auth/login/login.component.ts +++ b/projects/arc-lib/src/lib/components/auth/login/login.component.ts @@ -3,8 +3,8 @@ import {Component, Inject} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; import {AuthService} from '@project-lib/core/auth'; import {RouteComponentBaseDirective} from '@project-lib/core/route-component-base'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { concatMap, throwError } from 'rxjs'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {concatMap, throwError} from 'rxjs'; @Component({ selector: 'app-login', @@ -20,45 +20,50 @@ export class LoginComponent extends RouteComponentBaseDirective { override readonly location: Location, private readonly authService: AuthService, private readonly router: Router, - private fb: FormBuilder - + private fb: FormBuilder, ) { super(route, location); - this.imageUrl = '../../../assets/images/auth/ARC_logo.png'; + this.imageUrl = '../../../assets/images/auth/ARC_logo.png'; this.altText = 'logo'; this.loginForm = this.fb.group({ - email: ['', [Validators.required, Validators.email]], - password:['',[ Validators.required, - Validators.minLength(6), - Validators.pattern( - '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&#])[A-Za-zd$@$!%*?&].{7,}', - ), - ]] - }) -} + email: ['', [Validators.required, Validators.email]], + password: [ + '', + [ + Validators.required, + Validators.minLength(6), + Validators.pattern( + '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&#])[A-Za-zd$@$!%*?&].{7,}', + ), + ], + ], + }); + } - showPassword = false; onSubmit() { if (this.loginForm.valid) { const credentials = this.loginForm.value; - this.authService.login(credentials.email,credentials.password).pipe( - concatMap(response => { - if (response.body && response.body.code) { - this.authService.authorize(response.body.code).subscribe(); - } - return throwError('Unauthorized'); - }), - ).subscribe( - () => { - // Handle successful login response - }, - (error) => { - // Handle login error - console.error('Login error:', error); //NOSONAR - } - ); + this.authService + .login(credentials.email, credentials.password) + .pipe( + concatMap(response => { + if (response.body && response.body.code) { + this.authService.authorize(response.body.code).subscribe(); + } + return throwError('Unauthorized'); + }), + ) + .subscribe( + () => { + // Handle successful login response + }, + error => { + // Handle login error + console.error('Login error:', error); //NOSONAR + }, + ); } } @@ -69,7 +74,6 @@ export class LoginComponent extends RouteComponentBaseDirective { } return 'password'; } - toggleShowPassword() { this.showPassword = !this.showPassword; diff --git a/projects/arc-lib/src/lib/components/gantt/components/gantt-header/gantt-header.component.scss b/projects/arc-lib/src/lib/components/gantt/components/gantt-header/gantt-header.component.scss index a479c055..3e9aeb60 100644 --- a/projects/arc-lib/src/lib/components/gantt/components/gantt-header/gantt-header.component.scss +++ b/projects/arc-lib/src/lib/components/gantt/components/gantt-header/gantt-header.component.scss @@ -1,6 +1,6 @@ // @use "../../../../theme/styles/variables" as *; -@use "projects/arc-lib/src/lib/theme/styles/_variables.scss" as *; -@use "sass:map"; +@use 'projects/arc-lib/src/lib/theme/styles/_variables.scss' as *; +@use 'sass:map'; .header-container { line-height: 1; width: 100%; @@ -15,7 +15,7 @@ nb-form-field { flex-grow: 1; } - nb-icon[icon="menu-arrow-outline"] { + nb-icon[icon='menu-arrow-outline'] { height: 100%; margin: 0 1rem; cursor: pointer; diff --git a/projects/arc-lib/src/lib/components/index.ts b/projects/arc-lib/src/lib/components/index.ts index 6f21206f..e7c52ee0 100644 --- a/projects/arc-lib/src/lib/components/index.ts +++ b/projects/arc-lib/src/lib/components/index.ts @@ -4,3 +4,4 @@ export * from './gantt/gantt.module'; export * from './selector/select.module'; export * from './resize/resize.module'; export * from './list/list.component'; +export * from './role/role.module'; diff --git a/projects/arc-lib/src/lib/components/role/adapters/index.ts b/projects/arc-lib/src/lib/components/role/adapters/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/projects/arc-lib/src/lib/components/role/adapters/role-adapter.service.ts b/projects/arc-lib/src/lib/components/role/adapters/role-adapter.service.ts new file mode 100644 index 00000000..6c07c580 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/adapters/role-adapter.service.ts @@ -0,0 +1,27 @@ +/* eslint-disable */ +import {Injectable} from '@angular/core'; +import {Role} from '../models'; +import {IAdapter} from '@project-lib/core/api'; + +@Injectable() +export class RoleAdapterService implements IAdapter { + adaptToModel(resp: any): Role { + const role = new Role(); + role.id = resp.id; + role.name = resp.name; + role.tenantId = resp.tenantId; + role.actions = resp.actions.map( + (ele: {id: string; action_key: string}) => ele.action_key, + ); + role.createdOn = resp.createdOn; + return role; + } + adaptFromModel(data: Role): any { + return { + id: data.id, + name: data.name, + actions: data.actions, + tenantId: data.tenantId, + }; + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/create-role.command.ts b/projects/arc-lib/src/lib/components/role/commands/create-role.command.ts new file mode 100644 index 00000000..b6c552cc --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/create-role.command.ts @@ -0,0 +1,17 @@ +import {environment} from '@main-project/boiler/env/environment'; +import {ApiService, IAdapter, PostAPICommand} from '@project-lib/core/api'; + +export class CreateRoleCommand extends PostAPICommand { + constructor( + apiService: ApiService, + adapter: IAdapter, + tenantId?: string, + endpoint?: string, + ) { + super( + apiService, + adapter, + endpoint ?? `${environment.authServiceUrl}/tenant/${tenantId}/roles`, + ); + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/edit-role.command.ts b/projects/arc-lib/src/lib/components/role/commands/edit-role.command.ts new file mode 100644 index 00000000..843c05a5 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/edit-role.command.ts @@ -0,0 +1,19 @@ +import {environment} from '@main-project/boiler/env/environment'; +import {PatchAPICommand, ApiService, IAdapter} from '@project-lib/core/api'; + +export class EditRoleCommand extends PatchAPICommand { + constructor( + apiService: ApiService, + adapter: IAdapter, + tenantId: string, + id: string, + endpoint?: string, + ) { + super( + apiService, + adapter, + endpoint ?? + `${environment.authServiceUrl}/tenant/${tenantId}/roles/${id}`, + ); + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/get-feature-actions.command.ts b/projects/arc-lib/src/lib/components/role/commands/get-feature-actions.command.ts new file mode 100644 index 00000000..3bb42312 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/get-feature-actions.command.ts @@ -0,0 +1,18 @@ +import {environment} from '@main-project/boiler/env/environment'; +import {GetListAPICommand, ApiService, IAdapter} from '@project-lib/core/api'; + +export class GetFeatureActionsCommand extends GetListAPICommand { + constructor( + apiService: ApiService, + adapter: IAdapter, + tenantId?: string, + endpoint?: string, + ) { + super( + apiService, + adapter, + endpoint ?? + `${environment.authServiceUrl}/tenant/${tenantId}/feature-actions`, + ); + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/get-role-by-id.command.ts b/projects/arc-lib/src/lib/components/role/commands/get-role-by-id.command.ts new file mode 100644 index 00000000..22916700 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/get-role-by-id.command.ts @@ -0,0 +1,19 @@ +import {environment} from '@main-project/boiler/env/environment'; +import {GetAPICommand, ApiService, IAdapter} from '@project-lib/core/api'; + +export class GetRoleByIdCommand extends GetAPICommand { + constructor( + apiService: ApiService, + adapter: IAdapter, + tenantId?: string, + id?: string, + endpoint?: string, + ) { + super( + apiService, + adapter, + endpoint ?? + `${environment.authServiceUrl}/tenant/${tenantId}/roles/${id}`, + ); + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/get-roles.command.ts b/projects/arc-lib/src/lib/components/role/commands/get-roles.command.ts new file mode 100644 index 00000000..8b1efaa9 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/get-roles.command.ts @@ -0,0 +1,17 @@ +import {environment} from '@main-project/boiler/env/environment'; +import {GetListAPICommand, ApiService, IAdapter} from '@project-lib/core/api'; + +export class GetRolesCommand extends GetListAPICommand { + constructor( + apiService: ApiService, + adapter: IAdapter, + tenantId?: string, + endpoint?: string, + ) { + super( + apiService, + adapter, + endpoint ?? `${environment.authServiceUrl}/tenant/${tenantId}/roles`, + ); + } +} diff --git a/projects/arc-lib/src/lib/components/role/commands/index.ts b/projects/arc-lib/src/lib/components/role/commands/index.ts new file mode 100644 index 00000000..a7cd901d --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/commands/index.ts @@ -0,0 +1,4 @@ +export * from './get-feature-actions.command'; +export * from './create-role.command'; +export * from './get-role-by-id.command'; +export * from './edit-role.command'; diff --git a/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.html b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.html new file mode 100644 index 00000000..9fd3bb63 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.html @@ -0,0 +1,134 @@ +
+ +
+
+

+ {{ roleId ? 'Update Role' : 'New Role' }} +

+
+
+
+
+
+ + Role name + + Name is required + + + Role Description + + +
+
+
+
Role Permissions
+
+ + + + +
+
+ + {{ action.name }} + +
+
+ See all Permissions +
+
+
+
+
+
+ + {{ item.action }} + +
+
+
+
+
+
+
+ + +
+
+
diff --git a/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.scss b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.scss new file mode 100644 index 00000000..4ce76bb2 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.scss @@ -0,0 +1,119 @@ +$primary-color: #0469e3; +$secondary-font: Gotham; +.inner-content-wrapper { + max-height: calc(100vh - 185px); + overflow: auto; + .add-role { + margin-top: 12px !important; + } + .role-permission-wrapper { + .title { + font-weight: bold; + } + .role-permission-panels { + .permission-accordion { + ::ng-deep .mat-expansion-panel { + border-radius: 8px; + margin: 12px 0 0 !important; + &:first-child { + margin-top: 0 !important; + } + .mat-expansion-panel-header { + height: 48px; + padding: 0 8px; + pointer-events: none; + .mat-expansion-panel-header-title { + margin-right: 5px; + .role-hdr { + display: flex; + width: 100%; + align-items: center; + .role-hdr-content { + justify-content: flex-start; + pointer-events: fill; + width: calc(100% - 135px); + @media (max-width: 768px) { + width: calc(100% - 85px); + } + .mat-icon { + transition: all ease 0.2s; + } + } + .panel-indicator { + justify-content: flex-end; + pointer-events: fill; + text-align: center; + .mat-icon { + transition: all ease 0.2s; + } + } + } + } + .mat-expansion-indicator { + display: none; + } + } + &.mat-expanded { + .panel-indicator { + .mat-icon { + transform: scale(-1); + -webkit-transform: scale(-1); + -moz-transform: scale(-1); + } + } + } + } + } + } + } +} +.form-action-button { + position: fixed; + z-index: 1; + right: 0; + width: calc(100% - 265px); + padding: 16px; + bottom: 0; + display: flex; + justify-content: flex-end; + @media (max-width: 768px) { + width: 100%; + } + button { + margin: 3px; + } +} +mat-form-field { + width: 50%; + padding: 5px; + @media (max-width: 768px) { + width: 100%; + } +} +.breadcrumb-wrapper { + margin-bottom: 6px; + .breadcrumb-text { + color: #525252; + font-family: $secondary-font; + font-size: 13px; + font-style: normal; + font-weight: 400; + line-height: normal; + } +} +.ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} +.stroke { + font-size: smaller; +} +.inner-content { + .role-permission-wrapper { + .title { + margin-bottom: 10px; + } + } +} diff --git a/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.spec.ts b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.spec.ts new file mode 100644 index 00000000..58ce765f --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddRoleComponent } from './add-role.component'; + +describe('AddRoleComponent', () => { + let component: AddRoleComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AddRoleComponent] + }); + fixture = TestBed.createComponent(AddRoleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.ts b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.ts new file mode 100644 index 00000000..414e2f6f --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/add-role/add-role.component.ts @@ -0,0 +1,127 @@ +import {Component} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; +import {ConfirmationDialogComponent} from '../confirmation-dialog/confirmation-dialog.component'; +import {Location} from '@angular/common'; +import {ActivatedRoute, Router} from '@angular/router'; +import {MatCheckboxChange} from '@angular/material/checkbox'; +import {indexOf} from 'lodash'; +import {RouteComponentBaseDirective} from '@project-lib/core/route-component-base'; +import {RoleFacadeService} from '../../role-facade.service'; +import {UserSessionStoreService} from '@project-lib/core/store'; +import {FeatureAction, Role} from '../../models'; +import {takeUntil} from 'rxjs'; + +@Component({ + selector: 'careconnect-add-role', + templateUrl: './add-role.component.html', + styleUrls: ['./add-role.component.scss'], +}) +export class AddRoleComponent extends RouteComponentBaseDirective { + role = new Role(); + featureActions: FeatureAction[] = []; + roleId = this.getRouteParam('id') ?? ''; + actions: {action: string; id: string; key: string; enabled: boolean}[] = []; + constructor( + public dialog: MatDialog, + protected override readonly location: Location, + protected override readonly route: ActivatedRoute, + private readonly store: UserSessionStoreService, + private readonly roleFacade: RoleFacadeService, + private readonly router: Router, + ) { + super(route, location); + } + + ngOnInit() { + this.getFeatureActions(); + if (this.roleId) { + this.getRoleById(); + } + } + + getRoleById() { + this.roleFacade + .getRoleById(this.roleId, this.store.getUser().id) + .pipe(takeUntil(this._destroy$)) + .subscribe(res => { + this.role = res; + this.mapActions(); + }); + } + + mapActions() { + this.featureActions.forEach(ele => { + let count = 0; + ele.actions.forEach(action => { + if (this.role.actions.includes(action.key)) { + action.enabled = true; + count++; + } else { + action.enabled = false; + } + }); + if (count && count === ele.actions.length) { + ele.enabled = true; + } + }); + } + + getFeatureActions() { + this.roleFacade + .getFeatureActions(this.store.getUser().tenant.id) + .pipe(takeUntil(this._destroy$)) + .subscribe(res => { + this.featureActions = res; + }); + } + + openDialog() { + this.dialog.open(ConfirmationDialogComponent, { + maxWidth: '543px', + width: '100%', + }); + } + + actionChanged(key: string, event: MatCheckboxChange, action: FeatureAction) { + if (event.checked) { + this.role.actions.push(key); + } else { + this.role.actions.splice(indexOf(this.role.actions, key), 1); + action.enabled = false; + } + this.role.actions = [...new Set(this.role.actions)]; + } + + selectFeature(feature: FeatureAction, event: MatCheckboxChange) { + if (event.checked) { + this.role.actions = this.role.actions.concat( + ...feature.actions.map(ele => ele.key), + ); + } else { + feature.actions.forEach(ele => { + this.role.actions.splice(indexOf(this.role.actions, ele.key), 1); + }); + } + this.role.actions = [...new Set(this.role.actions)]; + this.mapActions(); + } + + createRole() { + this.role.tenantId = this.store.getUser()?.tenant?.id; + if (this.roleId) { + this.roleFacade + .editRole(this.role, this.store.getUser()?.tenant?.id) + .pipe(takeUntil(this._destroy$)) + .subscribe(() => + this.router.navigate(['../../'], {relativeTo: this.route}), + ); + } else { + this.roleFacade + .createRole(this.role, this.store.getUser()?.tenant?.id) + .pipe(takeUntil(this._destroy$)) + .subscribe(() => + this.router.navigate(['../'], {relativeTo: this.route}), + ); + } + } +} diff --git a/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.html b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.html new file mode 100644 index 00000000..faae2977 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.html @@ -0,0 +1,30 @@ + diff --git a/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.scss b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.scss new file mode 100644 index 00000000..a2ae73a4 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.scss @@ -0,0 +1,39 @@ +.confirmation-dialog { + .title { + color: #000; + height: auto; + line-height: normal; + font-size: 36px; + padding: 36px 36px 0; + &::before { + display: none; + } + @media (max-width: 1400px) { + font-size: 28px; + padding: 24px 24px 0; + } + } + .dialog-content { + padding: 36px; + color: #000; + @media (max-width: 1400px) { + padding: 24px; + } + p { + font-size: 16px; + margin: 0; + @media (max-width: 1400px) { + font-size: 14px; + } + } + } + .dialog-action { + padding: 0 36px 36px; + @media (max-width: 1400px) { + padding: 0 24px 24px; + } + .dialog-action-items { + width: 100%; + } + } +} diff --git a/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.spec.ts b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.spec.ts new file mode 100644 index 00000000..4afa9094 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ConfirmationDialogComponent } from './confirmation-dialog.component'; + +describe('ConfirmationDialogComponent', () => { + let component: ConfirmationDialogComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ConfirmationDialogComponent] + }); + fixture = TestBed.createComponent(ConfirmationDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.ts b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.ts new file mode 100644 index 00000000..707b0d69 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/confirmation-dialog/confirmation-dialog.component.ts @@ -0,0 +1,15 @@ +import {Component} from '@angular/core'; +import {MatDialogRef} from '@angular/material/dialog'; + +@Component({ + selector: 'careconnect-confirmation-dialog', + templateUrl: './confirmation-dialog.component.html', + styleUrls: ['./confirmation-dialog.component.scss'], +}) +export class ConfirmationDialogComponent { + constructor(public dialogRef: MatDialogRef) {} + + closeModal() { + this.dialogRef.close(); + } +} diff --git a/projects/arc-lib/src/lib/components/role/components/role/role.component.html b/projects/arc-lib/src/lib/components/role/components/role/role.component.html new file mode 100644 index 00000000..421ead28 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/role/role.component.html @@ -0,0 +1,91 @@ +
+ +
+
+

Role Management

+
+ +
+
+ + + + + + + + + + + + + + +
{{ column }}{{ element[column] }}Actions + + + + +
+
+
diff --git a/projects/arc-lib/src/lib/components/role/components/role/role.component.scss b/projects/arc-lib/src/lib/components/role/components/role/role.component.scss new file mode 100644 index 00000000..d5b7fc1a --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/role/role.component.scss @@ -0,0 +1,40 @@ +$primary-color: #0469e3; +$secondary-font: Gotham; + +.page-title { + color: #000; + font-feature-settings: 'clig' off, 'liga' off; + font-family: Gotham; + font-size: 32px; + font-style: normal; + font-weight: 700; + line-height: normal; +} + +table { + width: 100%; +} + +th { + text-align: left; +} + +.breadcrumb-wrapper { + .breadcrumb-text { + color: #525252; + font-family: $secondary-font; + font-size: 13px; + font-style: normal; + font-weight: 400; + line-height: normal; + } +} +.ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} +.stroke { + font-size: smaller; +} diff --git a/projects/arc-lib/src/lib/components/role/components/role/role.component.spec.ts b/projects/arc-lib/src/lib/components/role/components/role/role.component.spec.ts new file mode 100644 index 00000000..ac0b8bde --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/role/role.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RoleComponent } from './role.component'; + +describe('RoleComponent', () => { + let component: RoleComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [RoleComponent] + }); + fixture = TestBed.createComponent(RoleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/arc-lib/src/lib/components/role/components/role/role.component.ts b/projects/arc-lib/src/lib/components/role/components/role/role.component.ts new file mode 100644 index 00000000..16b9b238 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/components/role/role.component.ts @@ -0,0 +1,66 @@ +import {Location} from '@angular/common'; +import {Component} from '@angular/core'; +import {ActivatedRoute, Router} from '@angular/router'; +import {RouteComponentBaseDirective} from '@project-lib/core/route-component-base'; +import {Role} from '../../models'; +import {RoleFacadeService} from '../../role-facade.service'; +import {UserSessionStoreService} from '@project-lib/core/index'; +import {MatTableDataSource} from '@angular/material/table'; + +@Component({ + selector: 'careconnect-role', + templateUrl: './role.component.html', + styleUrls: ['./role.component.scss'], +}) +export class RoleComponent extends RouteComponentBaseDirective { + roles: MatTableDataSource; + displayedColumns = ['name', 'createdOn', 'action']; + + constructor( + protected override readonly location: Location, + protected override readonly route: ActivatedRoute, + private readonly roleFacade: RoleFacadeService, + private readonly store: UserSessionStoreService, + private readonly router: Router, + ) { + super(route, location); + } + + ngOnInit(): void { + this.getRoles(); + } + + getRoles() { + this.roles = new MatTableDataSource(); + this.roles.data = [ + { + name: 'Admin', + createdOn: '2023-10-27 07:49:14.844+00', + id: 'jher', + tenantId: 'hgvcyug', + description: 'jhvguryew', + }, + ]; + // this.roleFacade.getRoles(this.store.getUser().tenant.id).subscribe(res => { + // this.roles = new MatTableDataSource(); + // this.roles.data = res; + // this.roles.data = [ + // { + // name: 'Admin', + // createdOn: '2023-10-27 07:49:14.844+00', + // id: 'jher', + // tenantId: 'hgvcyug', + // description: 'jhvguryew', + // }, + // ]; + // }); + } + + editRole(id: string) { + this.router.navigate([`./edit/${id}`], { + relativeTo: this.route, + }); + } + + deleteRole(id: string) {} +} diff --git a/projects/arc-lib/src/lib/components/role/models/api-config.interface.ts b/projects/arc-lib/src/lib/components/role/models/api-config.interface.ts new file mode 100644 index 00000000..37a3ea22 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/models/api-config.interface.ts @@ -0,0 +1,8 @@ +export interface RoleApiConfig { + getRoles: string; + addRole: string; + deleteRole: string; + editRole: string; + getRoleById: string; + getFeatureActions: string; +} diff --git a/projects/arc-lib/src/lib/components/role/models/feature-action.model.ts b/projects/arc-lib/src/lib/components/role/models/feature-action.model.ts new file mode 100644 index 00000000..b911a533 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/models/feature-action.model.ts @@ -0,0 +1,10 @@ +export class FeatureAction { + id!: string; + name!: string; + featureKey!: string; + strategyKey!: string; + strategyEntityId!: string; + status!: boolean; + actions: any[] = []; + enabled? = false; +} diff --git a/projects/arc-lib/src/lib/components/role/models/index.ts b/projects/arc-lib/src/lib/components/role/models/index.ts new file mode 100644 index 00000000..c18f107f --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/models/index.ts @@ -0,0 +1,2 @@ +export * from './role.model'; +export * from './feature-action.model'; diff --git a/projects/arc-lib/src/lib/components/role/models/role.model.ts b/projects/arc-lib/src/lib/components/role/models/role.model.ts new file mode 100644 index 00000000..0e8a121f --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/models/role.model.ts @@ -0,0 +1,8 @@ +export class Role { + id!: string; + name!: string; + actions?: any; + tenantId!: string; + description: string; + createdOn: string; +} diff --git a/projects/arc-lib/src/lib/components/role/role-facade.service.spec.ts b/projects/arc-lib/src/lib/components/role/role-facade.service.spec.ts new file mode 100644 index 00000000..e58a98a8 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/role-facade.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { RoleFacadeService } from './role-facade.service'; + +describe('RoleFacadeService', () => { + let service: RoleFacadeService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(RoleFacadeService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/projects/arc-lib/src/lib/components/role/role-facade.service.ts b/projects/arc-lib/src/lib/components/role/role-facade.service.ts new file mode 100644 index 00000000..221498e3 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/role-facade.service.ts @@ -0,0 +1,91 @@ +import {Inject, Injectable, Optional} from '@angular/core'; +import { + CreateRoleCommand, + EditRoleCommand, + GetFeatureActionsCommand, + GetRoleByIdCommand, +} from './commands'; +import {RoleAdapterService} from './adapters/role-adapter.service'; +import {AnyAdapter, ApiService} from '@project-lib/core/api'; +import {FeatureAction, Role} from './models'; +import {GetRolesCommand} from './commands/get-roles.command'; +import {ROLE_API_ENDPOINT} from './role.module'; +import {RoleApiConfig} from './models/api-config.interface'; + +@Injectable() +export class RoleFacadeService { + constructor( + private readonly apiService: ApiService, + private readonly anyAdapter: AnyAdapter, + private readonly roleAdapter: RoleAdapterService, + @Optional() + @Inject(ROLE_API_ENDPOINT) + private readonly endPointConfig: RoleApiConfig, + ) {} + + getRoles(tenantId: string) { + const command: GetRolesCommand = new GetRolesCommand( + this.apiService, + this.roleAdapter, + tenantId, + this.endPointConfig?.getRoles, + ); + + return command.execute(); + } + + getFeatureActions(tenantId: string) { + const command: GetFeatureActionsCommand = + new GetFeatureActionsCommand( + this.apiService, + this.anyAdapter, + tenantId, + this.endPointConfig?.getFeatureActions, + ); + + return command.execute(); + } + + createRole(role: Role, tenantId: string) { + const command: CreateRoleCommand = new CreateRoleCommand( + this.apiService, + this.roleAdapter, + tenantId, + this.endPointConfig?.getFeatureActions, + ); + + command.parameters = { + data: role, + }; + + return command.execute(); + } + + editRole(role: Role, tenantId: string) { + const command: EditRoleCommand = new EditRoleCommand( + this.apiService, + this.roleAdapter, + tenantId, + role.id, + this.endPointConfig?.editRole, + ); + + command.parameters = { + data: role, + }; + + return command.execute(); + } + + getRoleById(roleId: string, tenantId: string) { + const command: GetRoleByIdCommand = new GetRoleByIdCommand( + this.apiService, + this.roleAdapter, + tenantId, + roleId, + this.endPointConfig?.getRoleById, + ); + + return command.execute(); + } +} diff --git a/projects/arc-lib/src/lib/components/role/role-routing.module.ts b/projects/arc-lib/src/lib/components/role/role-routing.module.ts new file mode 100644 index 00000000..0094c429 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/role-routing.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {RoleComponent} from './components/role/role.component'; +import {AddRoleComponent} from './components/add-role/add-role.component'; + +const routes: Routes = [ + { + path: '', + component: RoleComponent, + }, + { + path: 'add', + component: AddRoleComponent, + }, + { + path: 'edit/:id', + component: AddRoleComponent, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class RoleRoutingModule {} diff --git a/projects/arc-lib/src/lib/components/role/role.module.ts b/projects/arc-lib/src/lib/components/role/role.module.ts new file mode 100644 index 00000000..e69db464 --- /dev/null +++ b/projects/arc-lib/src/lib/components/role/role.module.ts @@ -0,0 +1,41 @@ +import {InjectionToken, NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {RoleComponent} from './components/role/role.component'; +import {RoleRoutingModule} from './role-routing.module'; +import {AddRoleComponent} from './components/add-role/add-role.component'; +import {ConfirmationDialogComponent} from './components/confirmation-dialog/confirmation-dialog.component'; +import {RoleAdapterService} from './adapters/role-adapter.service'; +import {ThemeModule} from '@project-lib/theme/theme.module'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatIconModule} from '@angular/material/icon'; +import {RoleFacadeService} from './role-facade.service'; +import {CdkTableModule} from '@angular/cdk/table'; +import {RoleApiConfig} from './models/api-config.interface'; +import {MatTableModule} from '@angular/material/table'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatFormFieldModule} from '@angular/material/form-field'; +import {MatInputModule} from '@angular/material/input'; +import {MatExpansionModule} from '@angular/material/expansion'; + +export const ROLE_API_ENDPOINT = new InjectionToken( + 'Role API endpoint', +); + +@NgModule({ + declarations: [AddRoleComponent, ConfirmationDialogComponent, RoleComponent], + imports: [ + CommonModule, + RoleRoutingModule, + ThemeModule, + MatDialogModule, + CdkTableModule, + MatIconModule, + MatTableModule, + MatFormFieldModule, + MatInputModule, + MatCheckboxModule, + MatExpansionModule, + ], + providers: [RoleAdapterService, RoleFacadeService], +}) +export class RoleModule {} diff --git a/projects/arc-lib/src/lib/core/auth/auth.service.ts b/projects/arc-lib/src/lib/core/auth/auth.service.ts index 1fb15ce5..59f7d4ba 100644 --- a/projects/arc-lib/src/lib/core/auth/auth.service.ts +++ b/projects/arc-lib/src/lib/core/auth/auth.service.ts @@ -31,9 +31,9 @@ import { import {LoggedInUserDM, LoginModel} from './models'; import {AnyAdapter, ApiService} from '../api'; import {APP_CONFIG} from '@project-lib/app-config'; -import { CreateExternalUserCommand } from './commands/create-external-user.command'; -import { SignUpAdapter } from './adapters/signup-adapter.service'; -import { CreateTokenCommand } from './commands/create-token.command'; +import {CreateExternalUserCommand} from './commands/create-external-user.command'; +import {SignUpAdapter} from './adapters/signup-adapter.service'; +import {CreateTokenCommand} from './commands/create-token.command'; @Injectable({ providedIn: CoreAuthModule, @@ -170,11 +170,11 @@ export class AuthService { data: { username: username.toLowerCase(), password, - client_id: this.appConfig.clientId, - client_secret: this.appConfig.publicKey, + clientId: this.appConfig.clientId, + clientSecret: this.appConfig.publicKey, } as any, observe: 'response', - headers: this.authTokenSkipHeader, + headers: new HttpHeaders().set(AuthTokenSkipHeader, ''), }; return command.execute(); } @@ -206,9 +206,7 @@ export class AuthService { this.signUpAdapter, this.appConfig, ); - - - + command.parameters = { data: user, }; @@ -216,21 +214,19 @@ export class AuthService { return command.execute(); } - createToken(email){ + createToken(email) { const command = new CreateTokenCommand( this.apiService, this.signUpAdapter, this.appConfig, ); - + command.parameters = { data: email, }; return command.execute(); } - - public authorize(secret: string): Observable { if (!secret) { diff --git a/projects/arc-lib/src/lib/core/interceptors/auth.interceptor.ts b/projects/arc-lib/src/lib/core/interceptors/auth.interceptor.ts index b7a9b95f..6c1d1d24 100644 --- a/projects/arc-lib/src/lib/core/interceptors/auth.interceptor.ts +++ b/projects/arc-lib/src/lib/core/interceptors/auth.interceptor.ts @@ -4,36 +4,34 @@ import { HttpInterceptor, HttpRequest, } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { Observable, throwError } from 'rxjs'; - -import { AuthTokenSkipHeader } from '../constants'; -import { UserSessionStoreService } from '../store'; +import {Injectable} from '@angular/core'; +import {ActivatedRoute, Router} from '@angular/router'; +import {Observable, throwError} from 'rxjs'; +import {AuthTokenSkipHeader} from '../constants'; +import {UserSessionStoreService} from '../store'; @Injectable() export class AuthInterceptor implements HttpInterceptor { constructor( private readonly sessionStore: UserSessionStoreService, private readonly route: ActivatedRoute, - private readonly router: Router + private readonly router: Router, ) {} intercept( req: HttpRequest, - next: HttpHandler + next: HttpHandler, ): Observable> { - if (req.headers.has(AuthTokenSkipHeader) || req.url.includes('i18n/')) { const headers = req.headers.delete(AuthTokenSkipHeader); - return next.handle(req.clone({ headers })); + return next.handle(req.clone({headers})); } const authToken = this.sessionStore.getAccessToken(); if (authToken) { return next.handle( - req.clone({ setHeaders: { Authorization: `Bearer ${authToken}` } }) + req.clone({setHeaders: {Authorization: `Bearer ${authToken}`}}), ); } else { if (this.route.snapshot.data['skipAuth']) { diff --git a/projects/arc-lib/src/lib/theme/styles/_variables.scss b/projects/arc-lib/src/lib/theme/styles/_variables.scss index a2fc8960..3b9753a1 100644 --- a/projects/arc-lib/src/lib/theme/styles/_variables.scss +++ b/projects/arc-lib/src/lib/theme/styles/_variables.scss @@ -1,56 +1,56 @@ $font: ( - "dark": #191a1b, - "dark2": #404040, - "primary": #1a69df, - "primary-active": #124798, - "primary-hover": #1658bb, - "light": #fff, - "light2": #838383, - "light3": #4b4b4b, - "light4": #b1b1b1, - "placeholder": #9a9a9a, - "disable": #838383, - "logo-text": #35ab38, + 'dark': #191a1b, + 'dark2': #404040, + 'primary': #f00c18, + 'primary-active': #dc8a8e, + 'primary-hover': #dc8a8e, + 'light': #fff, + 'light2': #838383, + 'light3': #4b4b4b, + 'light4': #b1b1b1, + 'placeholder': #9a9a9a, + 'disable': #838383, + 'logo-text': #35ab38, ) !default; $color: ( - "light": #ffffff, - "background-basic": #f8f8f8, - "background-disable": #dfdfdf, - "border-basic": #ebebeb, - "border-disable": #dfdfdf, - "icon": #555555, - "menu-item-active": #edf3fd, - "menu-item-hover": #f8f8f8, - "tab-hover": #222222, - "select-dropdown-border": #f5f5f5, - "input-border-basic": #e6e6e6, - "logo-bg": #c5ffd4, - "grey": #838383, - "input-border-basic-hover": #9a9a9a, - "primary": #1a69df, - "primary-active": #1a69df, - "primary-hover": #9a9a9a, - "primary-focused": #1658bb, - "dark": #191a1b, - "toggle-background": #0469e3, - "gray20": #333333, - "overallocated": #df0101, - "primary-label-background": #fff0b3, - "overallocated-gantt-border": "f6222e1a", - "overallocated-resource-gantt-text": "#e73d3d", - "actual-resource-gantt-text": #006497, - "actual-resource-gantt-lines": #cde3ff, - "actual-resource-gantt-background": #ebf7fe, - "placeholder-resource-gantt-background": #f7f7f7, - "placeholder-resource-gantt-lines": #cbcbcb, - "gantt-lines": #e5e5e5, - "currency-tags": #464646, - "opendialogspan": #1a69df, - "warning-separator": #d1d1d1, - "gantt-subtitle": #8f8f8f, - "gantt-parent-bar": #e3fcef, - "gantt-parent-bar-border": #baefd4, + 'light': #ffffff, + 'background-basic': #f8f8f8, + 'background-disable': #dfdfdf, + 'border-basic': #ebebeb, + 'border-disable': #dfdfdf, + 'icon': #555555, + 'menu-item-active': #edf3fd, + 'menu-item-hover': #f8f8f8, + 'tab-hover': #222222, + 'select-dropdown-border': #f5f5f5, + 'input-border-basic': #e6e6e6, + 'logo-bg': #c5ffd4, + 'grey': #838383, + 'input-border-basic-hover': #9a9a9a, + 'primary': #f00c18, + 'primary-active': #dc8a8e, + 'primary-hover': #dc8a8e, + 'primary-focused': #dc8a8e, + 'dark': #191a1b, + 'toggle-background': #dc8a8e, + 'gray20': #333333, + 'overallocated': #df0101, + 'primary-label-background': #fff0b3, + 'overallocated-gantt-border': 'f6222e1a', + 'overallocated-resource-gantt-text': '#e73d3d', + 'actual-resource-gantt-text': #006497, + 'actual-resource-gantt-lines': #cde3ff, + 'actual-resource-gantt-background': #ebf7fe, + 'placeholder-resource-gantt-background': #f7f7f7, + 'placeholder-resource-gantt-lines': #cbcbcb, + 'gantt-lines': #e5e5e5, + 'currency-tags': #464646, + 'opendialogspan': #1a69df, + 'warning-separator': #d1d1d1, + 'gantt-subtitle': #8f8f8f, + 'gantt-parent-bar': #e3fcef, + 'gantt-parent-bar-border': #baefd4, ) !default; $font-size: ( @@ -59,7 +59,7 @@ $font-size: ( // 10px small: 0.625rem, // 12px - medium: 0.75rem, + medium: 0.85rem, // 14px default: 0.875rem, // 16px @@ -79,9 +79,9 @@ $font-weight: ( ); $padding: ( - small: 0.125rem, - medium: 0.25rem, - large: 0.5rem, + small: 0.145rem, + medium: 0.29rem, + large: 0.7rem, ); -$main-font-family: Montserrat, Open Sans, sans-serif; +$main-font-family: 'Gotham', Open Sans, sans-serif; diff --git a/projects/arc-lib/src/public-api.ts b/projects/arc-lib/src/public-api.ts index 4be079f6..b8295258 100644 --- a/projects/arc-lib/src/public-api.ts +++ b/projects/arc-lib/src/public-api.ts @@ -1,9 +1,6 @@ -/* - * Public API Surface of shared-library - */ - export * from './lib/components/auth/login/login.component'; export * from './lib/core/route-component-base'; export * from './lib/components/auth/auth.module'; +export * from './lib/components/index'; export * from './lib/core'; export * from './lib/theme'; diff --git a/projects/arc/src/app/app-routing.module.ts b/projects/arc/src/app/app-routing.module.ts index 7ac50dcb..583bf642 100644 --- a/projects/arc/src/app/app-routing.module.ts +++ b/projects/arc/src/app/app-routing.module.ts @@ -19,7 +19,10 @@ const routes: Routes = [ }, { path: 'gantt', - loadChildren: () => import('../../../arc-lib/src/lib/components/gantt/gantt.module').then(m => m.GanttModule), + loadChildren: () => + import('../../../arc-lib/src/lib/components/gantt/gantt.module').then( + m => m.GanttModule, + ), canActivate: [AuthGuard], }, { diff --git a/projects/arc/src/app/app.module.ts b/projects/arc/src/app/app.module.ts index 8388f78b..c49156a3 100644 --- a/projects/arc/src/app/app.module.ts +++ b/projects/arc/src/app/app.module.ts @@ -19,13 +19,11 @@ import {APP_CONFIG} from '@project-lib/app-config'; import {environment} from '../environments/environment'; import {ThemeModule} from '@project-lib/theme/theme.module'; import {NbLayoutModule, NbThemeModule} from '@nebular/theme'; -import { OverlayModule } from '@angular/cdk/overlay'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { GanttModule } from '@project-lib/components/index'; -import { SelectModule } from '@project-lib/components/selector'; -import { GanttAdapter } from '@project-lib/components/gantt'; - - +import {OverlayModule} from '@angular/cdk/overlay'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {GanttModule} from '@project-lib/components/index'; +import {SelectModule} from '@project-lib/components/selector'; +import {GanttAdapter} from '@project-lib/components/gantt'; @NgModule({ declarations: [AppComponent], @@ -37,14 +35,12 @@ import { GanttAdapter } from '@project-lib/components/gantt'; LocalizationModule, CoreModule, ThemeModule, - NbThemeModule.forRoot(), + NbThemeModule.forRoot({name: 'boiler'}), NbLayoutModule, OverlayModule, SelectModule, GanttModule, BrowserAnimationsModule, - - ], providers: [ TranslationService, @@ -58,7 +54,6 @@ import { GanttAdapter } from '@project-lib/components/gantt'; provide: APP_CONFIG, useValue: environment, }, - ], bootstrap: [AppComponent], }) diff --git a/projects/arc/src/app/main/home/home.component.ts b/projects/arc/src/app/main/home/home.component.ts index 62636e01..c3d77370 100644 --- a/projects/arc/src/app/main/home/home.component.ts +++ b/projects/arc/src/app/main/home/home.component.ts @@ -13,7 +13,6 @@ import {takeUntil} from 'rxjs'; export class HomeComponent extends RouteComponentBaseDirective implements OnInit - { imageUrl: string; altText: string; @@ -24,11 +23,10 @@ export class HomeComponent private readonly authService: AuthService, ) { super(route, location); - this.imageUrl='../../../assets/images/home/home-banner.png'; - - this.altText='homepage-illustration'; + this.imageUrl = '../../../assets/images/Illustration.svg'; + this.altText = 'homepage-illustration'; } - + loggedInUserDM: LoggedInUserDM = new LoggedInUserDM(); greeting = ''; diff --git a/projects/arc/src/app/main/main-routing.module.ts b/projects/arc/src/app/main/main-routing.module.ts index 45387405..19a11602 100644 --- a/projects/arc/src/app/main/main-routing.module.ts +++ b/projects/arc/src/app/main/main-routing.module.ts @@ -1,7 +1,7 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MainComponent } from './main.component'; -import { IntroductionComponent } from './introduction/introduction.component'; +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {MainComponent} from './main.component'; +import {IntroductionComponent} from './introduction/introduction.component'; const routes: Routes = [ { @@ -11,22 +11,34 @@ const routes: Routes = [ { path: 'home', loadChildren: () => - import('./home/home.module').then((m) => m.HomeModule), + import('./home/home.module').then(m => m.HomeModule), + }, + { + path: 'role', + loadChildren: () => + import('@project-lib/components/role/role.module').then( + m => m.RoleModule, + ), }, { path: 'components', - component:IntroductionComponent, - children:[{ - path:'nebular-comp', - loadChildren: () => - import('./introduction/introduction.module').then((m) => m.IntroductionModule), - }, - { - path:'arc-comp', - loadChildren: () => - import('./introduction/introduction.module').then((m) => m.IntroductionModule), - } - ] + component: IntroductionComponent, + children: [ + { + path: 'nebular-comp', + loadChildren: () => + import('./introduction/introduction.module').then( + m => m.IntroductionModule, + ), + }, + { + path: 'arc-comp', + loadChildren: () => + import('./introduction/introduction.module').then( + m => m.IntroductionModule, + ), + }, + ], }, ], }, diff --git a/projects/arc/src/app/main/main.component.ts b/projects/arc/src/app/main/main.component.ts index c9aabe15..2a4594b8 100644 --- a/projects/arc/src/app/main/main.component.ts +++ b/projects/arc/src/app/main/main.component.ts @@ -6,8 +6,8 @@ import {takeUntil} from 'rxjs'; import {AuthService, LoggedInUserDM} from '@project-lib/core/auth'; import {RouteComponentBaseDirective} from '@project-lib/core/route-component-base'; import {IconPacksManagerService} from '@project-lib/theme/services'; -import { COMPONENTS_ITEMS } from './constants/components.constant'; -import { NEBULAR_COMP_ITEMS } from './constants/nebularComponents.constants'; +import {COMPONENTS_ITEMS} from './constants/components.constant'; +import {NEBULAR_COMP_ITEMS} from './constants/nebularComponents.constants'; @Component({ selector: 'main', @@ -26,13 +26,13 @@ export class MainComponent private readonly authService: AuthService, private readonly menuService: NbMenuService, private readonly iconMgr: IconPacksManagerService, - private router: Router + private router: Router, ) { super(route, location); this.iconMgr.registerSvgs(); } - loggedInUserDM: LoggedInUserDM = new LoggedInUserDM(); + loggedInUserDM: LoggedInUserDM = new LoggedInUserDM(); userMenu: NbMenuItem[] = [{title: 'Log out', data: 'logout'}]; menu: NbMenuItem[] = [ { @@ -48,20 +48,33 @@ export class MainComponent link: '/main/components', home: true, pathMatch: 'prefix', - children:[ + children: [ { - title:'Nebular Components', - link:'/nebular-comp', - children:NEBULAR_COMP_ITEMS as NbMenuItem[] + title: 'Nebular Components', + link: '/nebular-comp', + children: NEBULAR_COMP_ITEMS as NbMenuItem[], }, { - title:' Arc Components', - link:'/arc-comp', - children:COMPONENTS_ITEMS as NbMenuItem[] - } - - ] - + title: ' Arc Components', + link: '/arc-comp', + children: COMPONENTS_ITEMS as NbMenuItem[], + }, + ], + }, + { + title: 'ARC-Back', + icon: 'book-outline', + home: true, + pathMatch: 'prefix', + children: [ + { + title: 'Role', + icon: 'book-outline', + link: '/main/role', + home: true, + pathMatch: 'prefix', + }, + ], }, ]; diff --git a/projects/arc/src/app/main/main.module.ts b/projects/arc/src/app/main/main.module.ts index 01628d2a..9e58169c 100644 --- a/projects/arc/src/app/main/main.module.ts +++ b/projects/arc/src/app/main/main.module.ts @@ -5,8 +5,7 @@ import {MainComponent} from './main.component'; import {APP_CONFIG} from '@project-lib/app-config'; import {ThemeModule} from '@project-lib/theme/theme.module'; import {NbLayoutModule, NbMenuModule, NbThemeModule} from '@nebular/theme'; -import { IntroductionComponent } from './introduction/introduction.component'; - +import {IntroductionComponent} from './introduction/introduction.component'; @NgModule({ declarations: [MainComponent], @@ -15,7 +14,7 @@ import { IntroductionComponent } from './introduction/introduction.component'; MainRoutingModule, NbLayoutModule, NbMenuModule.forRoot(), - NbThemeModule.forRoot(), + NbThemeModule.forRoot({name: 'boiler'}), ThemeModule, ], }) diff --git a/projects/arc/src/environments/environment.ts b/projects/arc/src/environments/environment.ts index a0a9ee2b..50df1bde 100644 --- a/projects/arc/src/environments/environment.ts +++ b/projects/arc/src/environments/environment.ts @@ -1,10 +1,10 @@ export const environment = { production: false, - clientId: "", - publicKey: "", + clientId: 'managing_webapp', + publicKey: 'FbHISutQ6e', homePath: '/main/home', - baseApiUrl: '', - authServiceUrl: '', - userServiceUrl: '', + baseApiUrl: 'http://localhost:4001/', + authServiceUrl: 'auth-facade', + userServiceUrl: 'http://localhost:4002/user-tenant-facade', logLevel: 5, }; diff --git a/projects/arc/src/styles.scss b/projects/arc/src/styles.scss index 32ac3fdc..9fb2744e 100644 --- a/projects/arc/src/styles.scss +++ b/projects/arc/src/styles.scss @@ -9,7 +9,42 @@ @include nb-theme-global(); @include nb-auth-global(); } +// Fonts From Local +@font-face { + font-family: 'Gotham'; + font-style: normal; + font-weight: 100; + src: url('../../arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.ttf') + format('truetype'), + url('../../arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff') + format('woff'), + url('../../arc-lib/src/lib/assets/fonts/gotham/Gotham-Medium.woff2') + format('woff2'); + font-display: swap; +} +//gogal style set +body, +html, +p, +div, +span, +form, +input, +button, +a, +ul, +li, +table, +ul, +li, +table, +tr, +th, +td, +.mat-expansion-panel-header { + font-family: 'Gotham', sans-serif !important; +} /* You can add global styles to this file, and also import other style files */ .kebab-menu ul.menu-items { text-align: left !important; @@ -101,14 +136,13 @@ router-outlet.main-router + * { color: #525252; a { text-decoration: none; - color: #19a5ff; - font-weight: 700; + font-weight: 500; } } h1, .h1 { - font-size: 2.25rem !important; + font-size: 2.25rem; } h3, @@ -206,6 +240,7 @@ nb-select[readonly] > button { nb-sidebar, nb-sidebar > div.main-container { transition: width 0.3s; + background: #fff; } input[disabled], @@ -288,3 +323,91 @@ nb-toast.status-success .icon-container { background: #fff; } } +.inner-content-wrapper { + padding: 0; + .breadcrumb-wrapper { + margin: 0; + } + .list-container { + ::ng-deep .ag-grid-main { + height: calc(100vh - 194px); + .status-column { + display: flex; + align-items: center; + } + } + } + .title-n-filter { + margin-bottom: 15px; + display: flex; + justify-content: flex-start; + width: 100%; + align-items: center; + flex-wrap: wrap; + .title-container { + width: calc(100% - 350px); + @media (max-width: 1200px) { + width: 100%; + } + .page-title { + margin: 0; + font-size: 1.5rem; + font-family: Gotham; + line-height: normal; + @media (max-width: 1400px) { + font-size: 1.5rem; + margin-bottom: 10px; + } + } + } + .search { + width: 345px; + display: flex; + align-items: center; + gap: 8px; + justify-content: flex-end; + @media (max-width: 1200px) { + width: 100%; + } + } + } +} +.list-container { + width: 100%; + overflow: auto; + .actions { + min-width: 100px; + .cursor-pointer { + margin: 0 5px; + } + } +} +.layout-container { + .main-container { + .scrollable { + padding: 10px 0 !important; + .menu-items { + .menu-item { + a { + padding: 15px; + font-weight: 500; + } + > .menu-items { + padding: 10px 0; + .menu-item { + margin-left: 10px; + } + } + } + } + } + } + .left.expanded { + @media (max-width: 1200px) { + position: fixed; + } + .scrollable { + background: #fff; + } + } +} diff --git a/projects/arc/src/themes.scss b/projects/arc/src/themes.scss index 74684b40..0269fafc 100644 --- a/projects/arc/src/themes.scss +++ b/projects/arc/src/themes.scss @@ -16,14 +16,13 @@ $nb-themes: nb-register-theme( border-radius: 0.25rem, // Font - font-family-primary: 'Montserrat,Open Sans,sans-serif', + font-family-primary: 'Gotham,Open Sans,sans-serif', // Background related background-basic-color-3: map.get($bb-color, 'background-basic'), ag-header-background-color: inherit, // Layout related - layout-padding: 1.25rem map.get($bb-font-size, 'large'), // Header related header-height: 3.25rem, header-padding: map.get($bb-font-size, 'medium'), @@ -72,7 +71,7 @@ $nb-themes: nb-register-theme( sidebar-text-color: map.get($bb-font, 'dark2'), sidebar-text-font-size: map.get($bb-font-size, 'medium'), sidebar-shadow: none, - sidebar-width: 10.688rem, + sidebar-width: 13.688rem, sidebar-padding: map.get($bb-font-size, 'medium'), sidebar-width-compact: 3.5rem, // Nb-user @@ -100,7 +99,7 @@ $nb-themes: nb-register-theme( // Button related button-filled-basic-background-color: map.get($bb-color, 'light'), - button-medium-text-font-size: map.get($bb-font-size, 'small'), + button-medium-text-font-size: map.get($bb-font-size, 'medium'), color-primary-default: map.get($bb-font, 'primary'), color-primary-focus: map.get($bb-font, 'primary-active'), color-primary-focus-border: map.get($bb-font, 'primary-active'), @@ -123,6 +122,10 @@ $nb-themes: nb-register-theme( button-filled-basic-focus-background-color: map.get($bb-color, 'light'), button-filled-basic-border-color: map.get($bb-color, 'input-border-basic'), button-filled-basic-active-border-color: map.get($bb-color, 'primary-focus'), + button-filled-primary-hover-background-color: + map.get($bb-color, 'primary-hover'), + button-filled-primary-hover-border-color: + map.get($bb-color, 'primary-hover'), button-filled-basic-focus-border-color: map.get($bb-color, 'primary-focus'), button-filled-medium-padding: map.get($bb-padding, 'large') 0.914rem, button-filled-basic-hover-border-color: @@ -230,4 +233,4 @@ $nb-themes: nb-register-theme( ), boiler, default -); \ No newline at end of file +);