From dcd3a5c188aeb355cf1ff2f760e4d53c757ebb7b Mon Sep 17 00:00:00 2001 From: Nic D Date: Thu, 19 Mar 2026 16:16:58 -0400 Subject: [PATCH] refactor(timesheet): UI overhaul, better separation of concerns with components, minor chatbot changes --- src/assets/links/facturation-transparent.png | Bin 16540 -> 2060 bytes src/assets/links/hydroQC_icon.png | Bin 11006 -> 3121 bytes src/assets/links/intranet_logo.png | Bin 5144 -> 3347 bytes src/assets/links/logo_gmail.png | Bin 19706 -> 1778 bytes src/css/app.scss | 6 +- src/css/quasar.variables.scss | 10 +- src/i18n/en-ca/index.ts | 1 + src/i18n/fr-ca/index.ts | 1 + src/layouts/main-layout.vue | 13 +- .../chatbot/components/chatbot-drawer.vue | 43 ++- .../components/employee/shortcut-card.vue | 48 ++- .../dashboard/components/main-carousel.vue | 28 +- .../shift-list-mobile.vue} | 25 +- .../components/shift-list-date-widget.vue | 31 +- .../timesheets/components/shift-list-day.vue | 234 +++++++++------ .../components/shift-list-scrollable.vue | 10 +- .../components/shift-list-weekly-overview.vue | 2 +- .../timesheets/components/shift-list.vue | 276 ++++-------------- src/modules/timesheets/models/shift.models.ts | 4 +- .../timesheets/models/timesheet.models.ts | 13 +- src/pages/dashboard-page.vue | 44 ++- 21 files changed, 364 insertions(+), 425 deletions(-) rename src/modules/timesheets/components/{new-shift-list.vue => mobile/shift-list-mobile.vue} (90%) diff --git a/src/assets/links/facturation-transparent.png b/src/assets/links/facturation-transparent.png index 550e260c9d1edba73b3109c3a5bd69a2da2314ff..1249e8ef13319dc54d9006beee454792533b661c 100644 GIT binary patch literal 2060 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 diff --git a/src/assets/links/hydroQC_icon.png b/src/assets/links/hydroQC_icon.png index 63f77be820091d95daeabc1e54cb3d6b8a819349..b97e65f95e3935520743cff036c53b295d0046f2 100644 GIT binary patch literal 3121 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ℑ`U-9s{rHoAJFuI-za;t78V za$csiy6XnT!q4rq?R#$7l($djK7P$3HH5BAoNzfYAwtj8JT)_qbU3bzslDXf{YtP3?FIX7o~L|M@*vB&x8 z8B)aSQ3BKJ3Fs4eQ+-OBHbrDs*+`UzsUZaFr(=lRENKoASe?b_{Jl-d4|Zy(2D}wQ zZS?bwMb0kPAH_{Bg|_Z=Qs(S(AZ9;*R8+l?bN=w#`%Fyt%wdUHh~wCyeanOZr46NB zTV!3>(WR^tkiVjf`j#$(DoSqJ{DH{z!r!_6*9suV_odJoblbrdqZ%@;EM92QcJ}+Q z;B)@O)!&~I*W6dn64xgT+J>{&55)HDvM_0`r5j-=}JiIto)7;>WuKk?3^}9yy5-XXD&su; z_?3R^Ho81q+c_@h8uD#yH+wqgo++|<%iemGAcxMa=7MsfNmyF3>NwfkyRxGl(1zOT zk2a5t;%X7N`cE(m8CR;lZLdhT`5U5kzVgl?2jUuLs(;kgx$D&ztp@cj4A8&A;VzkD z77Cnn+^@%)55(kEgMu_luHNu-lJiA1()BPmkxV-5*S0u&0+8wbRKv;|jcqQRLJkDo zw411P;T9|ix?UwPAh>M2h_gXhbVlRA@?G$men7|pU;-xgTyB#gs0Lihp96{R8EJSt zb$jFx0ue`VV~}^#JhpVNz?Z-vs5vJ7`rsR!r+rZnacrzZJC#{)4H=;5-)oTYp?-=M z1CT;=hc5u@>rg|0c=#RvXNX=fzy#usxTi@Eoxk+Gvh1Pf>e&KCAz}!S16Zgx`&tRABXkQ4F{wegP z&*9-{p^bB$z<{ztudRacmfpuT2cpumld;j;Rt0S8t9#z&yxe;#d3QXhbMI9&@HbUB NB{?zYb0%9%R6@9*VOjVnE1`tjuT7KInxjiAv4X0)3#O_q8j)8ia5D@&+*Qp zeM^M3ooHwBsz1E!N2q2+2D$jq-|NITtzDlxubWuVK$X6$f1xa-#*%~m9m5b_Zj_on zBV!|9+GrsdYVCQkp1_xsd0X$S9Dl-{)@!!{dq(m07)piRa8xlaH$`1BZm#BnH~;{g zMH}j4!-_Wx!tDf6!rjjGm_*7OX%HWjOYIvwGQd4VWI#w;l3Wx3JR^uSgb?l%jFtv7 zDL;XRncX~czQa!U@8V5b#NmF^Z?)eyM(Xsd)Z!-`7W-&vc1S zSH~NjUp!bRHu-=LILV$6HR_omkO%u#46{DXJap2|&>eg|azCh$kERUfPepzJuNTdI z;}}hYR>&YX>ClE>TEK;EYvnskk?-{XpdcW>4;_z#pF-`hY{a!eS!!DZDIvdHA_2tLEdD39f|fP-)GuBZ#rW<`JYABQ{l=KJ zE(JyGjTCY`ORAgaFU*VUQ5ZucVf>$;rsmsSQsyDYz%lQ!H8`3Cay-UcD(AA1O=pVa zB?{?i861I~yS%>9`P=mC!|e7DHUmGMR&mY9eE2Kk2!B`87w6% z@J=Mfp^5l+H=?CqS|k;nd5SNG9Ih!uMi8K-z!Hckfe=(Q~wn5=~oXN)23g;H`gmb#>~{tZoT7)$t#VaoW$s zM)b(343E>d8zh2ROv8_xjr(->05Nr=sfjEWnBZ_EPOW=hBKQu{MZ4S5m493{jFQrn z45!L%Ch;m)X}Dkb(C>@y`|-=9rJO!Splh)YhruWOf(P;B^{8a;mn(*sOo&+^SY*-= z@3u~8zfX;GX!-Q;fs%ZqILA3+Bp>l{=(~Mb`X|jHBUYV_W26fAh9wT175XXST2vaA z(NNUt2YJv}><~)`-1=rvQMGn`YcHkWiI;R?LwMlB7q>Dp_@X3VzUPhR5ZB$qxvFT7 z>7nkpsz<-W+t?MP(@;eVWN9J769;{h*6E87H@l78WNNRtYgj<3(BFd6Oshrq=-R@iE$XjiI>?T0}s|pgAXw;

Y>N4InRBLVyMxIM$?9Qhd0_5FNJvl#G= zb%qwJu^w!qp)19BLpCy1nzZQ)n+lkr62dOpr~oZeGfdW*C70drRru6)RbCu4up7Cu z*EAcSYkw@S63MS2ZRoUnpS#b<)(jmypGO|?T!My?Qk#0~8401<8B8Qm zEe}Y?H)zwE>gZaG2>KqplW74ysr@Dp&$Qz}nCcKQ!jB487-7lJa zys)@sG$6??VcDv_-Vuu!UusE(7MQ%F8MaX~m)|~fQgC@A6#CQA;LF$KvEVJ$7w^kH z=g2UBCZupqN13K@^ZF|b#>YBHS=#hyb$+0grWJOGWKo;wbbQUV#J^X!7vh(vH3e){caP-H{SMv!Cympzf(_cg6gh z6Wx({3u=`+nH?(?KL4kZRyev{xM^07OJKX*k->A#XFy5Sd-7rsZcoLN# z?ahH-g+ezsi*{yjAgldG?+U;~{dA$0T$rg`XIKf44wo*v*TV0%eX|(Q14lOOq$j|c zML0R2X06kbS7wI$Lc|ck;-(F#Xjp^E$Lw9Lehn=n_;OP9%4?npn@0W*(lFuVeXVw! zD(d60)n$qzFflpdx{iQgPN0FtfVQ8GU}WqkqDlQ?=`nMXsh455-3t71-aZ*9nt63% p^~%xeQArW$wcdZ1MGWhf|1&brL61_s?8(Rjpp7gIA0S=G{{c@kp2YwF literal 5144 zcmV+z6zA)SP)Z1$g&_xSX|CrfT$=a@jyjF5Cs7R4^W5@ zit5{QQ7PBE7%i&Ye4laKAZ$WO;290V1FeW4-xc zTDELS1`i%g#*ZKG7ltF0eNN^%O@_F0o}v6Q@;Bk~^zYxFG;iLV701(F+eCm13}IYC zdBS`!ojP?g9`v|z<4Et`y-B-v?MRz8ZA^wKL&;+6)~(M{o=#0o{f6>X0{n*N^DX5W zaIAmBmz`=>~ca!0O%=rBD!o%HM1 z&$!RH-&t8%tT^^lUg))LG<+i3Ej58+D6kojOxTi{`3W@Z|n>055k?Af#TR#a4kDT#{Z<>hr?X=&-{l9G~B z^zXOy?^pQ0tgP%T{Vimbhh5Si4&*|R4r4!o=`^V&9=JY?d?$jC507Zw(NMglmE(<4WYda>&J01V5N} zwHB{_dVnFAYo8rT9&r0k;DZl_0&(~p3UP$}B98gnmy;ID`jQ{cYpX2?86hkP z<+gSICfkng^z53ZOqoIgarhiEaipiG*Lf|DCqH_HbX+;y5mAUZa7`h(Z{uuFt}P*P z;CRZto|L>EIQJAmxrS1%rL0XfPx^l|%0kN01j||#$pd*cOGF$qXU-(sw{IskH8q~L zHPD{8WI;y40{F?o_R8OJj+V=AAq#grX?wt3ZGQMYz z0q%HhT8#T-)(lV7yi7VgJ4|>kG}gzy{;(t0qypmC;t@v_AAb0uXT$mj4;~a=6buH2 z(YbSH+j+v6MERLjY`h#YWQdW6D1Qbsx%(`v4N)HCgNC`CGK?8BhE!Em>DopN-Z{F9 z3|sr4&{zk&Iw_|6^hY#n)p;dFNWiwf_WQptI5ItOc=S1GT8)CjeoF?A<5?8LA{{rcpE(cyPI02v|wD;5h&F?V?xbg72F?or^0o=WzIHsY#?$Fz0#}|9Z==Ia3 z?GG@Ox^u68;#40@ED8z=cyX}zPb!X~Y$mwDZVCf$J|1wf5`Ck(Ee;ETL;=^;scRFR zU*?_yXlHbKZdAh>V@+Yq=U-RcX!J(0?F0bY!~u+_?v$*CfN-X5EhkgoE{o|NHrpTQUUnLZjB^yS8Ns03 z5C#l|f79W!ljm?-9HMgqs8N#Hp0ld8st>-^pw@tkGjIFyXc~0AX42Y1G#Gf}b0ec} z5&{piDsPK1?DQ3bNwX#0qND4ghIiNJ?<9qr=8}V7oeMk`)nw>ib{d6+g>j3c8J`(^ ze)zF4CK*)^8^5WJMeQImBC7^7j^(>JRpqcF4wOmOjS3>PL&v~H9SrzR$H-AWG}PIb z2L8wMK>0*9557aKq{1z)Owe{=;PHZGbilU&ar6@3v~^e)NJPmfyQ8sJyi0^$DH%Tb z`l#X3m}x`dkTk81I8e)&X%Leo!{VJUkiR^Z9h2vn^$%%XpAH1#_$V%MSO_NyJK_-J zQ_B9X>b}Kq9Ab`5V$D%S1TO^>s`inYmsO_)k9F(TZEf&nf)Mo@!RSSX|G?&XF(Rr< zP#hQlG;0qGB-$w_dcT|kFOHm?oc+EO2N4WB>KGb>D)xgHZ4RrN4!>KuUi>|Z1WoSH zE`$a!pBvLwS);40T_;U{Yt=ua=`f2gtf<6v#9=3$sQcF`bno6hMjSWaeDhJiibFeO zMbZ$jVn4Vo4j8>EP|%F&vg)Pc&o_DUWKvsO8*P9C4?#n`ig4mk8LHFbK)0z?1g+@?T8V=P z|6RO;vAcKgj^=TFAdL!!^r+H4V#IbGLx$%oOPv>imPxzHi0gFgC263!lzgLYM z3mW1=I3*4z$c~PCB@XtQ198-&fB*je76+-H7aoOG9Fb$elqG9BB1R;5E1u9*%!S1P(C4z0;fE{kKE?(v{*1Jn=V5RGzM ziGv^Gm^*haIez^32|M@5>YA}Qf*pfHH?Nrvi?XSpo2PC%%;#v5H3!9Y{1?d#-*!tJ z7Bc~r$BNv>v17+B<-bD>$_GK}b}Xzvw6%fJVP1y}L#od8Ze6+bW@$RWX>la8E7#XG z2SpkCK@~^USj3?d`eD_x#UEc?UHvxwQ)l(CRrj91X5Qd(R*jS9Tf__kA|6Tw9V13? zqbW{|)a&L4B9hlB_+1<^aARJDU2%v))~!O#tvU^?B6wx<=dF;4I8;V|=<6df%k`+B zBMvsg_peKPNYgFZ^`h}RnyTV=q?2ajiNgB#+o5;drDuk3Wm z!j0qGKPb0u@1E#7MAKvucO?Smdax^x;Ej(O1hWFIR$%{WX{KS=2ySHKv}8SBuN~Uj zVC6-eLlqnu4;qDArSjjcR?mMP5j(-<^pkiW%YH%e6(NfZZ$tYZXXW#B6J$|{=I3F7)> z0yS3t+O zthdW-79 z{SD1qRAXRrm244)L@{~t(Fv=!zfSupkrm`YltDK*lLcHH zRfGB}+ITL0cd1c3ux$dq0WT5<8tZJ4GnKf*`5;ulF zhAw5)T#4*Ig3V}#uAMA2QW)`5yH`ikV#@(@tm0yBs{mdcSh|NDQ^9d;LmV}VD1Hhq zShBYuaI5BUV<#wSt>I!Brf}zMuqvcYAn>x;zJ2?=*)fs>c4iW_KR}FDV=Y?~Y_~3! z0DWxND&u=z99YxJ{0t#s#dZL$61G+oZPyH!i(MNlS#WKuWnypfH@o`{7A2t!c2O-k zXT19gMz4uJge!}Si^G1{4-k80$hv8)MS#eI?9chKv zlv2N8rqPXv1r>Je*g=jRJ0@TMCdqhZ|3)K9SJoE5@;HdG!iJgb$T`-wl5Lm?!C7sX ziTwuM+%PlPhrAJh6$cpEhrDj=*s(R0m6e3LU9NAYx%1dwql;Cx1%VyvY_*J@s)x5N zcJ&$qaWn!*#1T$SO*NLMM1$KaU<(4w{<8`ZiIP*6r)28sjBiW9ZPKfjImQg*ZOP=Lr)g)Ou}5BGjHdXzWdnFcQ=% z7_>th1;Ro2I~w3vDIEiavQT(0(W6I?KpcLD%&juT(Y<^3$LX{D+-qYx-_WgFH$Lz% z5QpC&6Gyvt?LLcqw`th0VGBx1O1`Y9s0c4ww1}vPG?XFAy7Kb!Go_`ar@(~^7oM0u zfBxq*pOf?E&HHTb+_|6N@2pv~YAAOV7Z>k*=%I(U&X_Udokt#dWII03o;`aH($Qm& zmug}^X1VgpRCOB92YO?eK?Yyo^FhgXJ%#w;_xeE;>gL#*&I)NRX}^p z%gYPI;aAASF>c(ruc<(erlqBwPEAccLwUA!>((L4aD*hF9^15O69yyq&A5luZ4LM7 z(XF^DWy@UJFxd*82uf0++j&`*H#?ob@}bEpr8Ot=j9K?;d7)g4RQ?Zd2IxCIcn4>l97=?nm2E*B?_eL(4m7-i+EjjJH(o5 zty;BWuVtRswsYQt-sA^ZqM4Y}^>#$B$PEJm;8P3kmuA@9lc_zZslD~Cv<}J%l_4jOqbrFUHtkd{g$EB|m z{LV8(%MOOw>$%~E8~B>>6y+6O+fI`Jz0ptkpldRqK4*JvGff8cW?w|P$_EcUpfy)e ze&1`GX;Pp!{6fm%lv^o}r_@*70sX;aly6ezQ-05UX8#8jpBj*DLN}@a00009#mMneEw2&l0Cr~;;sEhRyI!3>PT(F<>X`}6KVi#|K6 zR?W`mU*BJu8N%5#UJj4vE6x_?kOrZ%U)#T zazm3qQl$&XKZMr%U(q8i(_SXf_o^Sb$^TcS@@ z{Y72~&!*Pb{}*)GWac(cy31sXyVovc=y_pVfymGQl` ztLwGo)F8)`r{m&J&F{GpQFvVQC}&s?0|WDVPZ!6KiaBp@Mtg_^O0a);zn^ni=25Y< zr79sF(t#znw`@^b6m_X)rGe0*ZjmiY>sl2&HCiWjo$^YxWl?Pu@o1G6T)0v6607i~ zbpcaiOG4i~@(R41v$ERS*xI~$f~CK8@jm1Ib7vO+Ok?{Z&sE~$4n%H@js8EE9dum0 zxBc~_wuupcIOH$hTV*EnV=+%vUBScy-Sr+yAC5|2l$O7?uFHV2_MWctha=58PSgE) z#JO!k5?$QSy!x{DqVdH;@d}@-&)J``%{y0n)Xm6B>Cblwb<2rO*Bcw}#F%KBTzeE5 zP~U5k5c~SagBvq6@A``fTz=Hk^V?GX#*JfATFlyc1wD5k9c`NLFS&c?QIF~~c^j8( z50BF~K6{k8>}-*Q@(t5x*)L^_L?(0YkGc`6Z5X^^=EW}uHNVbEw7#GdveS)aVW;6o zaaEJ-&wTR?$9t`d!o4ISL0Hz1zOv6!!|rW<;+rj^U#JX zRh(;8m9`kYi%h=YcY05G`BIZ`1!=6{yYJK;We%d$&?;b-`!{K^qGDJ}E8D)o^4 znb7kSF>Rr% zu%+`-8I_An#}|72=MlegXwxb>hb;OqA(Qx$7g&Hg*_rf%)2e~iBaHmwm^7`Z#n zv{TA(^W>Z*LJy56|5&AeM!|pPjP||C(pmy@UTcb;x^q`muzFATMy?kBs_l=oR!^UK zc|HG+WhYh%*u5|PVz{W!`tRrDQjY&q5}X|!d@`$(4}5NkY7x5k^vC%bw^u#B&vImi zTZfjq#UArxdtO%O1+=hn=+#&l{&CCPFzYmz-$xUNjz#A!>?{3_$yDDwTcvc3Me(v= zgy85}Sb4q9e0M*x2 AfB*mh literal 19706 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 Ug0GY*0s=DBHPv~!pL+HG0G&UcYybcN diff --git a/src/css/app.scss b/src/css/app.scss index f5b3f6e..dfb3916 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -19,8 +19,8 @@ background: #fd4b2d !important; } -.q-table tbody tr:hover { - background: #00ff260c; +.q-table tbody tr:hover > td { + background-color: var(--q-accent2) !important; } body.body--dark { @@ -71,6 +71,6 @@ input[type=number] { } .q-field--dark .q-field__control:hover::before, .q-field--outlined .q-field__control:hover::before { - border-color: var(--q-accent); + border-color: var(--q-accent2); border-width: 2px; } \ No newline at end of file diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss index 1b60238..b210fed 100644 --- a/src/css/quasar.variables.scss +++ b/src/css/quasar.variables.scss @@ -15,15 +15,13 @@ $primary : #30303A; $secondary : #DAE0E7; $accent : #0c9a3b; -$accent2 : #0a7d32; -$dark-shadow-color : #000000; +$dark-shadow-color : #000; -$elevation-dark-umbra : rgba($dark-shadow-color, 1); -$elevation-dark-penumbra : rgba($dark-shadow-color, 0.75); -$elevation-dark-ambient : rgba($dark-shadow-color, 0.53); +$elevation-dark-umbra : rgba($dark-shadow-color, .2); +$elevation-dark-penumbra : rgba($dark-shadow-color, .14); +$elevation-dark-ambient : rgba($dark-shadow-color, .12); -$dark-shadow-2 : 2px 3px $elevation-dark-umbra, 2px 3px 6px $elevation-dark-penumbra, 2px 3px 14px $elevation-dark-ambient; $layout-shadow-dark : 0 0 5px 5px rgba($dark-shadow-color, 0.5); $input-text-color : #455A64; diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts index c462be4..cc08350 100644 --- a/src/i18n/en-ca/index.ts +++ b/src/i18n/en-ca/index.ts @@ -250,6 +250,7 @@ export default { name: "name", lock: "", unlock: "", + today: "today", }, misc: { or: "or", diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts index 2509717..3be3cef 100644 --- a/src/i18n/fr-ca/index.ts +++ b/src/i18n/fr-ca/index.ts @@ -250,6 +250,7 @@ export default { name: "nom", lock: "verrouiller", unlock: "déverrouiller", + today: "aujourd'hui", }, misc: { or: "ou", diff --git a/src/layouts/main-layout.vue b/src/layouts/main-layout.vue index 704a258..0385b09 100644 --- a/src/layouts/main-layout.vue +++ b/src/layouts/main-layout.vue @@ -8,11 +8,12 @@ import ChatbotDrawer from 'src/modules/chatbot/components/chatbot-drawer.vue'; import { onMounted, watch, ref } from 'vue'; + import { setCssVar } from 'quasar'; import { RouterView } from 'vue-router'; import { useUiStore } from 'src/stores/ui-store'; import { useAuthStore } from 'src/stores/auth-store'; - + setCssVar('accent2', '#36c45a44'); const ui_store = useUiStore(); const auth_store = useAuthStore(); const userPreferences = ref(ui_store.userPreferences); @@ -47,3 +48,13 @@ + + \ No newline at end of file diff --git a/src/modules/chatbot/components/chatbot-drawer.vue b/src/modules/chatbot/components/chatbot-drawer.vue index a0b5c84..1b397a0 100644 --- a/src/modules/chatbot/components/chatbot-drawer.vue +++ b/src/modules/chatbot/components/chatbot-drawer.vue @@ -12,7 +12,7 @@ const chatbot_store = useChatbotStore(); const text = ref(''); - const is_showing_right_drawer = ref(true); + const isShowingRightDrawer = ref(true); const drawer_width = ref(85); const handleSend = async () => { @@ -28,7 +28,7 @@ - \ No newline at end of file diff --git a/src/modules/dashboard/components/employee/shortcut-card.vue b/src/modules/dashboard/components/employee/shortcut-card.vue index d71b696..4f3f7bd 100644 --- a/src/modules/dashboard/components/employee/shortcut-card.vue +++ b/src/modules/dashboard/components/employee/shortcut-card.vue @@ -4,7 +4,6 @@ > const { route = "" } = defineProps<{ iconImageSource: string, - bgImageSource: string, name: string, route?: string, }>(); @@ -16,36 +15,21 @@ @@ -54,11 +38,17 @@ scoped lang="css" > -.link-card { - background-blend-mode: multiply; - background-position: bottom right; - background-repeat: no-repeat; - background-color: var(--q-dark); - background-size: contain; +.link-btn { + box-shadow: 0 6px rgb(4, 77, 4); + transform: translateY(-6px); +} + +.link-btn:hover { + background-color: var(--q-accent2) !important; +} + +.link-btn:active { + box-shadow: 0 2px rgb(4, 77, 4); + transform: translateY(2px); } \ No newline at end of file diff --git a/src/modules/dashboard/components/main-carousel.vue b/src/modules/dashboard/components/main-carousel.vue index 8f3c5b0..5d8e9fc 100644 --- a/src/modules/dashboard/components/main-carousel.vue +++ b/src/modules/dashboard/components/main-carousel.vue @@ -28,28 +28,34 @@ :autoplay="autoplayTimer" control-color="accent" control-type="outline" - class="bg-dark fit rounded-15 shadow-18" + class="bg-dark rounded-15 fit shadow-18" @mouseenter="onCarouselMouseEvent('enter')" @mouseleave="onCarouselMouseEvent('exit')" > -

+
-
+
{{ $t('dashboard.carousel.welcome_title') }}
-
+
{{ $t('dashboard.carousel.welcome_message') }}
@@ -61,19 +67,25 @@ class="q-pa-none cursor-pointer" @click="$router.push(RouteNames.HELP)" > -
+
-
+
{{ $t('dashboard.carousel.help_title') }}
-
+
{{ $t('dashboard.carousel.help_message') }}
diff --git a/src/modules/timesheets/components/new-shift-list.vue b/src/modules/timesheets/components/mobile/shift-list-mobile.vue similarity index 90% rename from src/modules/timesheets/components/new-shift-list.vue rename to src/modules/timesheets/components/mobile/shift-list-mobile.vue index 4b87399..be8c29e 100644 --- a/src/modules/timesheets/components/new-shift-list.vue +++ b/src/modules/timesheets/components/mobile/shift-list-mobile.vue @@ -42,8 +42,6 @@ // ========== methods ======================================== - // const timesheetRows = computed(() => timesheetStore.timesheets); - const addNewShift = (day_shifts: Shift[], date: string, timesheet_id: number) => { uiStore.focusNextComponent = true; const newShift = new Shift; @@ -52,14 +50,6 @@ day_shifts.push(newShift); }; - const deleteUnsavedShift = (timesheet_index: number, day_index: number) => { - if (timesheetStore.timesheets !== undefined) { - const day = timesheetStore.timesheets[timesheet_index]!.days[day_index]!; - const shifts_without_deleted_shift = day.shifts.filter(shift => shift.id !== 0); - day.shifts = shifts_without_deleted_shift; - } - }; - const getDayApproval = (day: TimesheetDay) => { if (day.shifts.length < 1) return false; return day.shifts.every(shift => shift.is_approved === true); @@ -101,7 +91,7 @@ :class="$q.platform.is.mobile ? 'column no-wrap q-pb-lg' : 'row'" >
@@ -226,13 +213,11 @@ />
diff --git a/src/modules/timesheets/components/shift-list-date-widget.vue b/src/modules/timesheets/components/shift-list-date-widget.vue index 4ce59c2..f841d35 100644 --- a/src/modules/timesheets/components/shift-list-date-widget.vue +++ b/src/modules/timesheets/components/shift-list-date-widget.vue @@ -4,14 +4,15 @@ > import { computed } from 'vue'; import { date, useQuasar } from 'quasar'; - + const q = useQuasar(); const { extractDate } = date; - const { displayDate, dense = false, approved = false} = defineProps<{ + const { displayDate, dense = false, approved = false } = defineProps<{ displayDate: string; dense?: boolean; approved?: boolean; + today?: boolean; }>(); const date_font_size = computed(() => dense ? '1.5em' : '2.5em'); @@ -26,21 +27,31 @@ class="column flex-center rounded-10 text-center self-center bg-transparent" :style="date_box_size" > + + {{ $t('shared.label.today') }} + + - {{ $d(display_date, { weekday: $q.platform.is.mobile ? 'short' : 'long'}) }} + {{ $d(display_date, { weekday: $q.platform.is.mobile ? 'short' : 'long' }) }} + {{ display_date.getDate() }} +
- \ No newline at end of file + + + \ No newline at end of file diff --git a/src/modules/timesheets/components/shift-list-day.vue b/src/modules/timesheets/components/shift-list-day.vue index c1ecda1..9c8f891 100644 --- a/src/modules/timesheets/components/shift-list-day.vue +++ b/src/modules/timesheets/components/shift-list-day.vue @@ -3,127 +3,195 @@ lang="ts" > import ShiftListDayRow from 'src/modules/timesheets/components/shift-list-day-row.vue'; - import ShiftListDayRowMobile from 'src/modules/timesheets/components/mobile/shift-list-day-row-mobile.vue'; + import ShiftListDateWidget from 'src/modules/timesheets/components/shift-list-date-widget.vue'; - import { inject, ref } from 'vue'; + import { useI18n } from 'vue-i18n'; + import { computed, inject, ref } from 'vue'; + import { useUiStore } from 'src/stores/ui-store'; import { useTimesheetStore } from 'src/stores/timesheet-store'; import { useShiftApi } from 'src/modules/timesheets/composables/use-shift-api'; import { useTimesheetApi } from 'src/modules/timesheets/composables/use-timesheet-api'; import { isShiftOverlap } from 'src/modules/timesheets/utils/shift.util'; - import type { Shift } from 'src/modules/timesheets/models/shift.models'; + import { Shift } from 'src/modules/timesheets/models/shift.models'; import type { TimesheetDay } from 'src/modules/timesheets/models/timesheet.models'; - // ================== State ================== + // ========== Constants ======================================== - const { timesheetId, weekDayIndex, day, dense = false, approved = false, holiday = false } = defineProps<{ + const CURRENT_DATE_STRING = new Date().toISOString().slice(0, 10); + + // ========== State ======================================== + + const day = defineModel({ required: true }); + + const { timesheetId, weekDayIndex, timesheetApproved = false } = defineProps<{ timesheetId: number; weekDayIndex: number; - day: TimesheetDay; dense?: boolean; - approved?: boolean; - holiday?: boolean; + timesheetApproved?: boolean; }>(); - const emit = defineEmits<{ - 'deleteUnsavedShift': [void]; - }>(); - - const shift_api = useShiftApi(); - const timesheet_api = useTimesheetApi(); - const timesheet_store = useTimesheetStore(); - const preset_mouseover = ref(false); - const shift_error_message = ref(); + const { locale } = useI18n(); + const uiStore = useUiStore(); + const shiftApi = useShiftApi(); + const timesheetApi = useTimesheetApi(); + const timesheetStore = useTimesheetStore(); + const presetMouseover = ref(false); + const shiftErrorMessage = ref(); const employeeEmail = inject('employeeEmail'); + // ========== Computed ======================================== + + const isDayApproved = computed(() => day.value.shifts.length > 0 && day.value.shifts.every( + shift => shift.is_approved === true)); + + const isHoliday = computed(() => timesheetStore.federal_holidays.some( + holiday => holiday.date === day.value.date)); + + const isToday = computed(() => CURRENT_DATE_STRING === day.value.date); + // ================== Methods ================== - const deleteCurrentShift = async (shift: Shift) => { - if (shift.id <= 0) { - shift.id = 0; - emit('deleteUnsavedShift'); - } else { - await shift_api.deleteShiftById(shift.id, employeeEmail); - } + const addNewShift = () => { + uiStore.focusNextComponent = true; + const newShift = new Shift(day.value.date); + newShift.timesheet_id = timesheetId; + day.value.shifts.push(newShift); + }; - if (day.shifts.length < 2 && shift_error_message.value !== undefined) { + const deleteCurrentShift = async (shiftId: number, index: number) => { + if (shiftId <= 0) + day.value.shifts.splice(index, 1); + else + await shiftApi.deleteShiftById(shiftId, employeeEmail); + + if (day.value.shifts.length < 2 && shiftErrorMessage.value !== undefined) { onTimeFieldBlur(); } }; const onTimeFieldBlur = () => { - const is_error = isShiftOverlap(day.shifts); - day.shifts.map(shift => shift.has_error = is_error); + const is_error = isShiftOverlap(day.value.shifts); + day.value.shifts.map(shift => shift.has_error = is_error); if (is_error) - shift_error_message.value = 'timesheet.errors.SHIFT_OVERLAP_SHORT'; + shiftErrorMessage.value = 'timesheet.errors.SHIFT_OVERLAP_SHORT'; else - shift_error_message.value = undefined; + shiftErrorMessage.value = undefined; } const onClickApplyDailyPreset = async () => { - await timesheet_api.applyPreset(timesheetId, weekDayIndex, day.date, employeeEmail); + await timesheetApi.applyPreset(timesheetId, weekDayIndex, day.value.date, employeeEmail); } + + const getHolidayName = (date: string) => { + const holiday = timesheetStore.federal_holidays.find(holiday => holiday.date === date); + if (!holiday) return; + + if (locale.value === 'fr-FR') + return holiday.nameFr; + + else if (locale.value === 'en-CA') + return holiday.nameEn; + }; \ No newline at end of file diff --git a/src/modules/timesheets/components/shift-list-scrollable.vue b/src/modules/timesheets/components/shift-list-scrollable.vue index cc33003..82975aa 100644 --- a/src/modules/timesheets/components/shift-list-scrollable.vue +++ b/src/modules/timesheets/components/shift-list-scrollable.vue @@ -1,8 +1,9 @@