From b140273e42ab5d4458e743fee25efd5580a5a6d3 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Mon, 16 Oct 2023 18:09:40 +0100 Subject: [PATCH 001/147] Reduced text in 'intro' and 'why' section --- .env | 2 +- src/components/home/HeroPlanner.tsx | 82 ++--------------------------- src/pages/About.tsx | 4 +- 3 files changed, 7 insertions(+), 81 deletions(-) diff --git a/.env b/.env index 842c1105..3ab8e6ff 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ -REACT_APP_PROD=0 +REACT_APP_PROD=1 REACT_APP_RELEASE_DATE=2023-01-27 PORT=3000 \ No newline at end of file diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 2cca46fb..189e23cd 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -27,9 +27,6 @@ const HeroPlanner = () => {

TTS, ou Time Table Selector, é uma plataforma desenvolvida pelo NIAEFEUP{' '} para ajudar os estudantes da Universidade do Porto a planear e elaborar o seu horário para um semestre. - Geralmente, no 1º semestre de faculdade o horário é atribuído automaticamente, não sendo - possível efetuar trocas. A partir do 2º Semestre até ao fim do(s) curso(s) o aluno tem a oportunidade de{' '} - submeter preferências para o horário, no início de cada semestre.

No entanto, o sistema de informação das faculdades (SIGARRA) geralmente não permite ou não facilita delinear @@ -57,85 +54,14 @@ const HeroPlanner = () => { content: (

- O TTS permite aos estudantes criar, planear e partilhar{' '} - os horários antes das inscrições nas turmas de forma flexível e prática. Podes planear o teu semestre com - antecedência e ter uma visão abrangente das opções que tens e quais os horários a que queres dar prioridade. -

-

- Com a nova versão do TTS podes delinear até 10 opções de horário, tal como na submissão das preferências no - SIGARRA, que se aplica a alguns cursos da UPorto. Mais opções de horário dão-te melhor chance de ficar com - um horário desejado, evitando alocações automáticas indesejadas. -

-
- ), - }, - { - id: 'news', - title: O que há de novo na nova versão do TTS?, - subtitle: Temos muitas novas funcionalidades do TTS e planos para futuras atualizações., - image: HomePageImage, - reverse: false, - content: ( -
-

- No seguimento do fim dos mestrados integrados foram precisas várias mudanças ao nosso sistema. Em vez de - adaptar continuamente, o TTS foi reinventado e reimaginado. -

-

- Das novas funcionalidade da nova versão destacam-se a capacidade de inspecionar conflitos de aula, exportar - e importar horários, escolher múltiplas opções de horário, progresso guardado automaticamente e também - capacidade de transferir um ficheiro CSV com as opções prontas a submeter no SIGARRA. Este novo lançamento, - contempla também grandes melhoramentos a nível de acessibilidade e usabilidade, começando pelo adição do - tema claro ou escuro. Para mais informação detalhada sobre novas funcionalidades, consulta a secção do{' '} - - TTS na página de FAQs - - . -

-

- Relativamente a planos futuros, temos o FEUP Exchange (nome sujeito a mudança) em - desenvolvimento, um serviço que permitirá a estudantes da FEUP alterar o seu horário após a atribuição - inicial feita pelos departamentos. + O TTS oferece aos estudantes a flexibilidade e praticidade de criar, planear e partilhar{' '} os horários com até 10 opções, + semelhante à submissão de preferências no SIGARRA. Isso permite que os alunos planejem seus semestres com antecedência, + tenham uma visão abrangente das opções disponíveis e aumentem suas chances de obter o horário desejado, evitando alocações automáticas + indesejadas durante as inscrições nas turmas.

), }, - { - id: 'identity', - title: Quem somos nós?, - subtitle: NIAEFEUP: Núcleo de Informática da AEFEUP, - image: LogoNIAEFEUPAltImage, - reverse: true, - content: ( -

- O Núcleo de Informática da Associação de Estudantes da Faculdade de Engenharia da Universidade do Porto, ou{' '} - - NIAEFEUP - {' '} - é constituído inteiramente por alunos do curso de Engenharia Informática e Computação (L.EIC/M.EIC). A nossa - principal motivação é ganhar experiência e competências essenciais para o mundo do trabalho assim como - cultivar nos nossos colegas a vontade de aprender linguagens e novas tecnologias. Fruto dessa motivação surgem - projetos úteis para a comunidade, como esta plataforma. Entre outros projetos destacamos o{' '} - - NiJobs - - , uma plataforma dedicada a ajudar estudantes a encontrar oportunidades de emprego e/ou estágios. -

- ), - }, ] const id = 'planner' diff --git a/src/pages/About.tsx b/src/pages/About.tsx index cb534494..7c9babe0 100644 --- a/src/pages/About.tsx +++ b/src/pages/About.tsx @@ -8,8 +8,8 @@ const AboutPage = () => { return (
- - + +
) } From 21b8dd7d76827570fb02716b30fdf28170f1b666 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Mon, 27 Nov 2023 15:38:40 +0000 Subject: [PATCH 002/147] Added banner to About page --- src/app.css | 24 ++++++++++++++++++++++ src/components/home/HeroPlanner.tsx | 32 +++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/app.css b/src/app.css index 9f220b70..9396af46 100644 --- a/src/app.css +++ b/src/app.css @@ -84,3 +84,27 @@ button { .quote { @apply border-l-4 border-slate-700 bg-lightish py-1 pl-4 dark:border-white dark:bg-darkish; } + + + +.stamp { + @apply w-10 h-5 inline-block p-10 mt-5 bg-white relative text-center filter drop-shadow-md; + background: radial-gradient( + transparent 0px, + transparent 4px, + white 4px, + white + ); + background-size: 20px 20px; + background-position: -10px -10px; +} + +.stamp::after { + @apply absolute left-5 top-5 right-5 bottom-5 z-[-1]; + content: ''; +} + +.stamp::before { + @apply absolute bottom-0 left-0 font-bold text-white opacity-75 text-4xl leading-normal p-5; + content: 'CSS3'; +} diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 189e23cd..4d0e998d 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -4,6 +4,8 @@ import { useEffect } from 'react' import { HomePageImage, HomePageAltImage, ScheduleDarkImage, LogoNIAEFEUPAltImage } from '../../images' import { ArrowNarrowRightIcon } from '@heroicons/react/outline' import { getPath, config } from '../../utils' +import { LogoNIAEFEUPImage } from '../../images' + type Card = { id: string @@ -25,14 +27,14 @@ const HeroPlanner = () => { content: (

- TTS, ou Time Table Selector, é uma plataforma desenvolvida pelo NIAEFEUP{' '} - para ajudar os estudantes da Universidade do Porto a planear e elaborar o seu horário para um semestre. + TTS, ou Time Table Selector, é uma plataforma desenvolvida pelo NIAEFEUP{', '} + como uma melhor alternativa à ferramenta de horários do SIGARRA, para ajudar os estudantes da Universidade do Porto a planear e elaborar o seu horário para um semestre.

- No entanto, o sistema de informação das faculdades (SIGARRA) geralmente não permite ou não facilita delinear - opções de horário atempadamente. Para resolver este problema e ajudar a comunidade da{' '} - Universidade do Porto, o NIAEFEUP desenvolveu o TTS, uma ferramenta de uso - fácil, com uma interface simples e polida, que permite aos estudantes preparar as suas opções de horário. + O TTS oferece aos estudantes a flexibilidade e praticidade de criar, planear e partilhar{' '} os horários com até 10 opções. + Isso permite que os alunos planejem seus semestres com antecedência, + tenham uma visão abrangente das opções disponíveis e aumentem suas chances de obter o horário desejado, evitando alocações automáticas + indesejadas durante as inscrições nas turmas. Tens dúvidas sobre a plataforma? A{' '} { }, { id: 'why', - title: Porquê usar o TTS?, - subtitle: Porque é a ferramenta ideal para teres o melhor horário possível., + title: O que há de novo na nova versão do TTS?, + subtitle: Temos muitas novas funcionalidades do TTS e planos para futuras atualizações., image: HomePageAltImage, reverse: true, content: ( @@ -89,7 +91,19 @@ const HeroPlanner = () => { A melhor ferramenta para escolheres e gerires o teu horário FEUP!

- +
+
+ +

DEVELOPED BY

+ NIAEFEUP + + +
+
{data.map((item, itemIdx) => (
From 2f2e37c41ab61d32c883bb662c1ef7d931d43db0 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Fri, 26 Jan 2024 22:27:45 +0000 Subject: [PATCH 003/147] cleaned updates info --- src/components/home/HeroPlanner.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 4d0e998d..7bc282f6 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -56,10 +56,7 @@ const HeroPlanner = () => { content: (

- O TTS oferece aos estudantes a flexibilidade e praticidade de criar, planear e partilhar{' '} os horários com até 10 opções, - semelhante à submissão de preferências no SIGARRA. Isso permite que os alunos planejem seus semestres com antecedência, - tenham uma visão abrangente das opções disponíveis e aumentem suas chances de obter o horário desejado, evitando alocações automáticas - indesejadas durante as inscrições nas turmas. +

), From d32312aa44a638a0f0cf6626469b83b3bae57073 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Fri, 26 Jan 2024 22:37:22 +0000 Subject: [PATCH 004/147] updated home-page imgs --- src/images/schedule-dark.png | Bin 137123 -> 168192 bytes src/images/schedule-light.png | Bin 136623 -> 166871 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/images/schedule-dark.png b/src/images/schedule-dark.png index c81254536cbb78cfe475c724a160f36a884523ec..a87305d5849e358df5426c90e5686ed4e97740d0 100644 GIT binary patch literal 168192 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 diff --git a/src/images/schedule-light.png b/src/images/schedule-light.png index 231449a412db3323860d8db20fa48f359719e956..1de89136f50a4f057af2a12ca6a49f619a8a81ae 100644 GIT binary patch literal 166871 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 literal 136623 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

    bCB&Vk(URo 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 From 28e715f88374533a0db0a33bf5fb97f8f80b9cc7 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Sun, 28 Jan 2024 19:16:40 +0000 Subject: [PATCH 005/147] Fixed endpoint path --- src/api/backend.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/backend.ts b/src/api/backend.ts index c017dc71..a1d611cc 100644 --- a/src/api/backend.ts +++ b/src/api/backend.ts @@ -104,7 +104,7 @@ const getExtraCourses = (major: Major) => { * Retrieves the scrappe info from the backend */ const getInfo = async () => { - return await apiRequest('/info') + return await apiRequest('/info/') } const api = { From 7789d32b1ab15b7d03f72c3e6ddfa894f705ed27 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Mon, 29 Jan 2024 13:30:30 +0000 Subject: [PATCH 006/147] added ni-stamp v1 --- src/app.css | 17 +++++++++++++++++ src/components/home/HeroPlanner.tsx | 25 +++++++++++-------------- src/images/index.ts | 4 ++++ src/images/ni-stamp-back.png | Bin 0 -> 27889 bytes src/images/ni-stamp.png | Bin 0 -> 31889 bytes 5 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 src/images/ni-stamp-back.png create mode 100644 src/images/ni-stamp.png diff --git a/src/app.css b/src/app.css index 9396af46..2fbbff64 100644 --- a/src/app.css +++ b/src/app.css @@ -108,3 +108,20 @@ button { @apply absolute bottom-0 left-0 font-bold text-white opacity-75 text-4xl leading-normal p-5; content: 'CSS3'; } + +.stamp-card-inner { + transition: transform 1s; + transform-style: preserve-3d; +} + +.stamp-card:hover .stamp-card-inner { + transform: rotateY(180deg); +} + +.stamp-card-front, .stamp-card-back { + -webkit-backface-visibility: hidden; +} + +.stamp-card-back { + transform: rotateY(180deg); +} \ No newline at end of file diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 7bc282f6..b4e4eebe 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -4,7 +4,7 @@ import { useEffect } from 'react' import { HomePageImage, HomePageAltImage, ScheduleDarkImage, LogoNIAEFEUPAltImage } from '../../images' import { ArrowNarrowRightIcon } from '@heroicons/react/outline' import { getPath, config } from '../../utils' -import { LogoNIAEFEUPImage } from '../../images' +import { StampNIAEFEUPImage, BackStampNIAEFEUPImage} from '../../images' type Card = { @@ -87,19 +87,16 @@ const HeroPlanner = () => {

    A melhor ferramenta para escolheres e gerires o teu horário FEUP!

    -
-
-
- -

DEVELOPED BY

- NIAEFEUP - - -
+
+
+
+ NIAEFEUP +
+
+ NIAEFEUP +
+
+
{data.map((item, itemIdx) => ( diff --git a/src/images/index.ts b/src/images/index.ts index e337c0ae..c9c10da7 100644 --- a/src/images/index.ts +++ b/src/images/index.ts @@ -7,6 +7,8 @@ import LogoFEDarkImage from './logo-dark.png' import LogoFELightImage from './logo-light.png' import LogoNIAEFEUPImage from './logo-ni.png' import LogoNIAEFEUPAltImage from './logo-ni2.png' +import StampNIAEFEUPImage from './ni-stamp.png' +import BackStampNIAEFEUPImage from './ni-stamp-back.png' import ScheduleLightImage from './schedule-light.png' import ScheduleDarkImage from './schedule-dark.png' import NoticeOldScheduleImage from './old-new-schedule.jpg' @@ -23,6 +25,8 @@ export { LogoFELightImage, LogoNIAEFEUPImage, LogoNIAEFEUPAltImage, + StampNIAEFEUPImage, + BackStampNIAEFEUPImage, ScheduleLightImage, ScheduleDarkImage, NoticeOldScheduleImage, diff --git a/src/images/ni-stamp-back.png b/src/images/ni-stamp-back.png new file mode 100644 index 0000000000000000000000000000000000000000..bac9ddb61d61512422f5c45032f3129e06468920 GIT binary patch literal 27889 zcmb4q1yfv2*X`gI+=5GRC%6;b2{O0^cL?qfB*;9tdx8dccXtTx5Q4kI;P>SHe!-<` zikdlXXZPyvwb$Mq`B_C49hDdr1OlPU%Sow&Kro%a#}^q9_@(04*%|N;#aT|*6$C=V z{r7_TS~DK52TvoMxl=k?f|w zZ4w!F#?r(j{t1GS?EXgE6N$1;ur{;a82CdR!nn@LTK}7EH6Y*F;m+ z!o>2f?OonE_ujd($iS%nfBveaut7oP7yYGR9^UY6b;AfSFSsJcb|p<&%?Kr2V#;t~ zcAEew0osD2M6Uj63tv}#u-@l)*g-%>o@^T?#+j_caWN;OVJx(Y>Uo1Mkd%2=sTud~_; zeP4KxG)5>U9&6@8h1~~cdl6-a$k!@{(U6SFz}px7#uIFtyki=HDC!)&wmX=NK$hrx zk(<{F{i-c#PPiOvyE3(o4GgfFWBpRWP-SUqhtsuX6X=KBw~KFiA<~gj=Q7fZ=W<_M z`A`OgX0cIM#2`hFkc9=_aI7vu8ytea!I<{TGqeSl>4K^ajX834V!xHw(|Y$v*uLB0 z<1v3yes2NK@;7aDJE?L~zs9bV?(c*-&mnbKk5lUa#zx0UB z_C14*Z$02V=F4%N6ha^m_=F9+1vdcCcZF(r(^P!Vwi`NXQXPU2UD1LkD*1Ae>9ir2 znageo^6$FNv3KbBRxzl#x&5EiLNS#OPG*saIBa%pH|%Eyz}9Le+-IY>b_)h6mEs&U z5`6XsZ5|y|GEwtZZf1!yRb zyS{hr8XhveS8&pyhM>41=YCp71$$(1n!h-c#4rrNbl#$z?a(sv`x0CN-OM6agbaG2#Pc(6MMA_+4{b~xgiD$gyk7-`nL z&FA)wDf*RWBR*VMNiOlJzD}Z#;+m(a{lSS6kjo<@a(_eFVk?a_fe4-f7Y1YY};!&QxyX zuFtq**!$I!>k8=L-Kk`~Q*=j5N#}iu>r{tkq!g62LHQvy^KMoe6O{x@1oa9VnPQke zsd%wcgt?SKRcZBCBGjqk-G%Dv8k-elWk?6C!5?}df;MhL~+K^rxzsE96XeXRw1B$mYe1+dAgU&;9$ zQwQb8iKqVU&FmWH9XMAUslZnm?8td*4&_lRX}2j#RcCBifpQ6aAD-2i*Xj>=F5 zya^isTR(9`?av{Pi*D&v=XqW}7#d7-x0xSD%rV!Y_NG`z2+99@yf0@uwZ4fxQt4H$9tiGjx z>api-@~g1nLA@8TSs7Aqp#0WfF%)dbtDc*ulwBm7AMM5>z;K|>DGA&9dUjW#pF3~X zsUATw%!nl#XXoV=^tfrau(qW+KZX1`E;JPSid3Si)&Gb!J1Pe!Uev=c8mBmZX~ugL zD5Mw^JV4j4TSG+N_~{IIxvZWS8CF(STYvwK?8lT>nV{e>Vq(#*qKi+@;wm*LAQxbB zeR!A(bbMN1EUuqhv43L`?~zc@zN&0(CFCO$?El7v>;fZzKtPd(Z*U*2xD{~||B01b zJ5_)btApC)=j_P-veH9J<2+yA@w*_ipfQ+&iCMeF$|&ToJhG3<7-GL~)$}%gt=eN6 zwtKs3qqfC|jCK{2@})401|omPgLi*P+?=aNYHMrjE3s#{qqAL!{>VHTe_+s*cWlU; ziJtzY`@f)zZ%JEnH^w=x7^&mBx%NWQ8c`0*F0*rA-7lS8cDZuB_lS$J?$JJLT1)u7 zCa~(C;mPL-X)ye7>5#$@v@<-H?8zcocpIw+G;r=MCC&{RkD@W3cC&e2~`{# zL@VPQWs7Ut0HU1w$}n1*l0sk}4l@hvawweTA`L%(_K?rt>cNQT;4ai7n3W+U!)WQzkv=@=I@Fbb?b%0C5>5(}2BB9Qei#+? zc!8(rlHl;KpWj3V`>e)|7&2%NWhbTUVv<&|b8TTEC1rl-9%+*v77xMeBh%;C<5Q=q ziYO_^Ii6E9S#(kDBsRVK-%m}B{v0E#$;Atm9U5v$BtTbjzbZF94i_rOsCB7N+>cjI zT04!bS4#7l#D0sIYT#)GFqlyKg@s?u3GA=^vR-+#aUpjJ=*P$`6}8&<^E_t=w2-L?SD0&}|9jlzcBt+vKHL7Uz<*NtNY<8STU_M)J;I2+d~a$P zuo=R@?&%nUUFt6qWqT34V1Py&AYRl@xq7N(ak zmZ}MI@$@qK`*)mf6at8YkD;NV0TvI@nq{BQ@0FB0dBf-Nu)>a+Iq(ArM6|#7;lpvj z>w`7LR@|X z)`Gxh4GM>GJlx{B&|$%9Ht%ZjzcMvtM=N8gthljc{J&|t+YwdSy!(p)5Y=1XsDss1 z{w!u-Rh5>mxL@u~7)CbE^PH*(ezQUWiSvGy#oygd?Yx<((|G%`(FgFlqNlp}^DoM3 zt!%5c7Wp7=xKMUX4yluGGy}%#+_!Pz7D<8&cE3D395SfuKtU}-%J+HtYG6;)`@&4Y z9j5>>cnJk(yb^9|k z{yv}}328NzX1}Q%PgG>%$)F1hA~rh-u1w_!UKkLALKZ+v#AlAPV7A6Se!uu?gZoYr z^ux=hU<5JM$`L3`SO}cL>@L1ii%&o|4AZ6#RULJ8xDL)3-Jhn|6tuNd+yC@se1G%? z;W2i~6==T?b3kC}EQi|~qc#vz?T=}hIK6$<0)e6u0;)VA{4+yHKu7$4mZcr6t(|Z0 z?^CB;b`vWq0_pI}@jyX&RHesH?CY(!r}g|QiLpgL;x<&{SWPZ12*adQHMIuoW7f!k z-R8$HBPB>w}lXrV&O^85gAbprO7#qP11<^p0y%$4Wa15ilha9#!d?;Pto` z_VIp5Ln<85S`n}oDM(52=u=ZR7=b=VE@^3vA-*V=V;`|PPpF4ZggY%Kx=N#5+JSy( zcTNSi3GEgG6irBtRk~rOsPA)q&w>ZyhkabUHzc$*Z?Wv{9Ms|q!1P4W zYgLqDt5{_!FWTj`o)N^$O<9PDn{R1`M?>i`pSrAZGzb**q51F&ludfJm2IuH zAzYirT6JwMrx{@w8LLyb)@Hqx_vi7kjV<7uacDCr5Vpuwd2jAbIKo&WJVGsdH1@Mx z6MxrRQ2}rg2wzE$C^}u9TWK{~#Kz3jlw)yrH+yJ&PMwgw zXB?(9I;>8j3up!peG6V8$%{KEh?MiO2unG4xz<8Q96EzoIe8N|KTB5HN}h)V8m8hI z`dUreAbau+hmw`jkI~e?KzMn0z#H%#uKZ-@}1Llo`qt5X7!xi{?E%T*b(O@6903(zg0V-cwQ87VE!vvAV2<;2R`d9At z=zdd~tE0U=YxP4RfTW=Ry^*0InXw76@^nH%!a<#+WEbK8it-D$CtIq4!2&jZb^ugc1tUlkR%ZR=-o5h#>$Fm0fc z-dGJav#1CiCvO(XY>!x7-jG!&bMM zc}DS3aj5#x$#$Yf{+N5lzj?Zd2}5K5p*y$hlJ0;b2ZwCzGaR9ERU(_3lC;JGAOvY{ z<#cgIskl>wOpWyr*y~~LbKGW9?W1Z9{!PN?l9xk!n+HMGqxUU2qP#Hb(pys1d_En= zhNX{A{|p^r2wpVmv`@cU`UYnRTY!**r@m9Ouz;(`eTpFsX8$)v`p-z4s=uhtz1~t- z9luegCIww6Z$8F_OGV%3$4$Y2r3o&(V06~6RgURRZEtLP{@*pMRf;IS;# zVReDFTTLALF2H+IfbTG)F^4UO7ywxqoNTwf*V{q`CMqSP&(?O(uVOv@^Mc90B!Fmv z$J83IIH2FOK_fmb>&~Q_?W%$#g$eq6@mc8J+|CZ^=nlVWp!naqk7NVClmW(~roxME z^s8=r!dL76#xY=fITBopLA8Je0x?i)W}Y71-FY}ZK^86;WwsKxFRdLl@OJ%xQ2?Ii z;^yY^@`zb8L<<^q8Ll{O2W+Wp9ro#}fDPj>i!U!NHoZ<8J{_Gy5@0^Nu}$UGL#@@> znHhB%K%gJU0;Cvq1I3O@)jt_3I!&La8wUqvhK7gb4*Qt3nh!ymD8K-4hTE^(1IJPl zt*4ny-Cy$Zh8YwfQ>Pwf)7Eq35i)NyKtmB1GWlKDHH}@?PY+SNrLLx?5~sI5fz3HN>js95|gV*WEgEK#c*LM+NnKJ}4#wmWK3u2NS?kWRQufVTrd@ z!T@0TTsCw)xJt<8m#eJC^v|vgUzCNQnCxB8HhS--@pc}1LXbY>AtTiimX#%{))Tx# z%&&@xjTPY&eg*^9K^V6a-Nck;i3_7A5S~Z__@IicEK=@)wSxm|u2;YniofUm8Ed`E zKe)m4E^MUw`sU)uWXfvPx3shzOeGY=Uy`X=U zy759~H)?NYs1PZ7ZwA9ab)mkIj5~ z=q)TP{PKS%)(;S)#ymbZT5N1=c(g~AHPHDI8jj%6(UAc~NxAT;A%wsI9~k40c45xT zv)hgi;qUB}rfS*M&?qbde?u_%#fgvwngt*Zwy352L@&d}!NGyWOPbk7Nln|N7_HkQ zWYITKQted|u*o+r>`1?(KET}DrmV8&>h%N^g!vsk=Wh)Ez|5k#bb9}q*Kmu7Bce8r zw_CMY?`W9$yPm}6QvDw^5z~Dzmrw45*!?aC$kjse!Y)KUNfgWErzUv&5_A~Q;uXpO zebnS1=SzTnxs`pv4a>YnfZLeL0E?;z&9QY5QJcP{Nc`OZU=TFB)mU~UwAticr;o=G z#^g7eXtz+Vj=zgp4XBEgtTH^Ar-rG|hpH!ttizx*2|Up-mJXSWw{HOk`9SSB^48a) zzb+M>7qNk)to;X55|ATq$arP=0Su`7omvuZy)%?946M3{HYv{Z%OG1=>Kk2hj@C*) zY1lEF@RNPba~?!}W5e@L&;^+=gRqb%>Qtp6wV_JKnV?#uTS*%0*5%il?HHk=^+_XL z#+0|*w-2S-rsg9lCTgzvMwj(1aw*Nywa2&1HlO0U+g=kv$t z^s*tRH$oq_OSIGV+>a}U%C|S0_v2;hjQKYG>YTO6^~=0|wdvo8z0}JQmc5YWZI5bv zgpz`DU80^(lZ$hhMpIbQ=LMpMj(jqGP7=TVP1cUGeKgY8^8K>^au0EncMmKH@D$Zz zK7fBA9jwK#fP290kBaqJt}_v`e}^;xL<8~#o0oR(;TcNA<50N4D6i-UJKRood-o4j7mdXp z9_Q?;lF^Sfo4-EhdUoj-NHX$F656k&T?FbMdSM8^weR{q2o?CoKz$U!SrwH{B}1Y_ z&jA~%)KKD^La)=z_IuB+#KnD0=qI+iBoD--jQtr8=Tfj_9c!kNQ{bSq8NejC7 z^S29SjgJ0>zY*IBL(3A&SR>Ldmfe)~DX;JXhz(VuZ@n?avZ}Es@Yk@0&yxm~hcC_r z&Wpt+$~JqegRK63p~~?mh(@QVauc%~@!qF3m_jc}KDZR{L83S&%K8w%&kre@dFO?p z{*5BEoW-%xe&$8vUdK}kyN6@3ZHu;hg0uzv&KWy#jKrZPqaE+Y{h2v z0&cvcS!Y27>((O`~|k>Hc_^lb96 zGT!{zBQp+OCI5iQ#AWv4ri=_qOc4@MbD$UtmGp@_}K@Y);qD!tLGiqNcM-a>rt%_Vps*UNP@V~ri**UIgV@h zgwfl{q0ytJDd`_W?+s&p175H57cNB%6o!&Q?8+yz4}QoP=B1n|Z{ z?0<@cgyH-lU;SycSDVA%4|v^m&gm~@s>_GBqR)I_ur7XQQ&HrZS?UC;EjKO-C7nEly5Mr2Pq{7t(ZemMGFcZFAto&X4ud+bc7SwigrL-q2?c+7m*7 zh}+Wrz*k7^r{$>fdg{8h$6e*b4Ar^n$T-Nl;E6whNeP6^x9necV+LykYLxD~R8os> zz6%SG;IilmMo?%9YXXEzxos#EeuO>&z0LFOwZg$mGK8 z(ze;ri5B*rno&eQmZs^x@ALcgt`+)`8*cj}YkLo6m9=Y@Y{6rQ5wf%GHCGl81)$Pw_PxSd5 zBL(OBNcxYrbSs=nc13Diy2ECHWoaV|?C~qps3C#n+rfob17jyA+M4=`c67Sur@F&E zrSJ`*b0r1|E$q$_axbH-J($7J4s@;kkLv-mhkrb-S8{UBf9F{$(IGpI(0lR2rT_H{ z&NHgwlep%%9w8HQB*6?f#`cEatdDdw@SZIXhkP=-#i#ESsa>K+a z`3sSGsysYwi6*cRQqXWaoGDcMS`V7^MYZ6E%lspJITD$alJebvjWDO}(njaKAbjwqKU6H1$BN9Euec7#9zLq^QNfFqYd_n8Ns((6mRG0V# zKRP4&cw%&YWWl~Ryv)zlRb^oGN_FYY%AL&$%gw_5wTz{eb!PX~|H<(uQB&?GTiHGy z9-gfbBus^Au0cgYc!cEI|NhV?RtSyN)TKg;{{ZeXvwAPqsl{X zVq#(#ly^Q-U``){L>iWYdww|NZoY;4;fR(EGLv!s={YYkO|JaU$!O9peH`a6NffK9L_`} zOy)6B{T?~e=0pZi$a;2UD2qmAPs?DgI5e#UII9A=u({Eusk9*@zF#wP$r?9G{GhFx4jr`@9gg3q_eHW{K{8o?}EInW_8S(AkQOFTD6s5`kR&sd;K2* z+zvp4^W6#~%rn1~PDxEMqP#*bgYab+2YNgeJkn68Y!7aqcbBwyeLU{`y4`QHn1F)d zAn&h&V;@0_Q&taGoIl5D=bKU(Xy_azv=hV~IG9g{+Ru>`kLO{NWs^Mr1&1xFQ zd`n?zN){90lCi1$yTCY2hI?gAYpkS340Bf_Dy8D0zr(KXNa((ayv?Cr#>@Th-&p!S z2mrJHiJGg^;!@b@eynw>0S1pLXu4+)e<+7HXNhKDcVyWU+|}+!{>xF(rJi4o!>1DI zDDFXVM%SZM_{H+euvTc!;Z@erMwSD$UEOm`vR&evRkD+dAYU=~Pbiqi{Nu;39TNnu zYx|lIHqoh)$bMAb}X4vlxrsVomG zAHp$eTrws5Q4=KG+!X``1w&U)2`2FI-^?|VcBy0Kv}|c}w+11sf@Su&58TLsOr+h3 zzj6-?bZ>5HS-Z^O9d)vg4@=Q>4AHn4t;{UGT0Z$?POb~&KHimg+U14glp$pu5lNXA zUAG+O#Z?*wtbJ|b=H(r|tBYgQ+)8Z7&(UeS8!P11H`<*}P;DSUSK}RGxJ2*&#;8%O z`Pc!KX*|khQmonhKzL)n6n7brcla@J{Kh~Zg-O5S@TM?j5M5gSUdTM-5Yb=Xf9h43 zsGdA_9!@#$I%UMwMpv0uQog`&&M2U`@@$O855W$P6XEdad3SZwC?6q&EGln}^6Fh9 z2TqGfZFW?oQ=SxG)p_@~q(MU67A;HSpm=nsXU8W3yH+#g#4q50a0*HSon`?IfkiDx z&AN!MrG?hz1}!aeFBUwn)1>qna?k{P&?G*K&d8`YtsY^;6Br8{_D&-}TdG9+SrojcW1odDFy?F+8#r z8uP@NH8GvVPqhxKt$*JPKle8MlL)03#fp$ZQWFm5BZPz5AMxdxlC6aB6TxN)wqk}M z1JPnB`)7J*$J>Y=y!h3{3BR6IYA=IJvh30^6M$I>!V2*E+f9j4DUaB-So&=ee8leI zNhf$$tfTq<{ix)0osY9ZimW@^)Goo%sZo4iYd<|dAZeo%&)1vd3x`o z^}f#rT-_^jcW(gF>wN6&{aF-6s4;SHaonHmD!UapH*u0(n~_8oI7>~Mwl*7Y00AR>zZ&6452Mx{_B*U3FeqrVd0j>>)4gm-I7ALRmrnYr-tp*`xm!dt_J%! zFcYI=HTzPt8t-rWo^;0y+kDNK2BV1WxP4otD3QD zwLjng_g{5kWYad{tbIXZ^zGmChrjPeWxuB6Xv(`)q|+$gr&xp#&sYp4KKla-EQ^*60-{`j8LYCaePNQ)Rbw&vr zX}T*Gmry#f0X>9zXUVu2#owhyI@HkbIb%J|v+*{m#o&fZvqr_);H~eu6#pgQlQfjV zrAFkeI*u*hTAJ>jWhrz56vkv)kv5w+S8;=P8BSYp{|el?dBx~y)5(b!>9>#8(E(R) z?b){eu_p4N%PjOfvcXQ9Z2sXr@_$APvx&=-!!}-~^QFXU>Mm{+WS%A~_B?kZsnfV% z=@F&ubkc6VPpaew&H7zX=}TT8)NF^*ng=gj7oJnJ953n*Y^uzj`<$y2l-!$2s2rIJ ztM-RA2fLD;W9HybF)M7C`2yQpX06GUKi$gJxoUds+tHs}SbjYH`CD(!Pa1HLYwUX} zueZY_!s0azsBndKbsBfy$v*hi|Fv}?+u(2MJ;ck@)5kqGT$FW>nMsF1m0hDj6Hi}( z8GZ5idTf8qt>5fcH;wDp3EfpLOMD_KV#ct&4IsGigS0D#RZ}4zYPMEW<9im5YjO2$ z;jsj){hrvNqBSP3RT_758ez%w`)`js^8Gj25<0syR0xGJT9`B2b$mn-S@ZP--#I!w zY`N3Vl@&dIb8{&^sq^<+8qM41QOuRlXW6y0d2?lDC{l>^7!mXG&34yF}3M$c9gh@z@liphrc z!gv<((pPrhr?B-?{bH^zGq%r@m7o}VYP5)*;R07KfIfloC}tl2Lzryb)rL+fcWVFR zW^>?X=dq`fQrfZ=H;zbS8h^Dk-v^=H%_Tc&8#_Ap>dllbOjLq; zK8A5S=xSnW``IrXW7n|vk7?MGm4Ho9dPK$)Hs7SE4*WGn*4XlO(Uj+#Rio2BGBt(r zMrkQi)zJ1<6fV_Fi=4z3E+^V&Ew;CjqxswlcYa4ea0mS_Vje=V)Od=cw?o}(ltK5O z1wn_ipH1Ni_V=|*dQ*wvzuH&R+C~qN^f(V;Kn>7U*3;eDixoDr1Y6lKiL0)Xr!9gv zqhEW1;H#8|#_Wzy>X=1WN7eZ%mAV=rc!72pg*rBb0^Ok(M%cKW^3(ZeLb{)fluEe2 z==u2oF^G-DMJp|iMSvyFoL+k6QV_3D0=0sK&1pyhM^eb+dHm1~QBgr*slf)-xS*_z zIpdd4`-H&{boi3|zaDMiBP>mM=+drD;PNqfm&&I2t?OmZW1y?Tz0Yz64g3w5PMsT!e#=C_9-At6P&zv3r2F=Hdqxm=8ZRafZ|JA+7>Qu zS@ZgfPc8hXZPP0FNVvX(Q?&E+SsL;>S;WwySb+)XvkY4&EM!8SF0i%)f?b^HW_LyS zA~Fq+;pBDr`Gb>7?o1(u9$^xFhJAg*2Y_`b%c>#QT&qp4FdF2oCaAf~Rlpg@dBpu@ zwFQ}5TpXLe2+j2??eV=kU3HAa~!fJ~sQ6c!7@ zV);_(OD`c3#||y!7hCTKW#Gj?!yFlvv72q4=isS#@0tzS7UA7n zzQSAi;aTY|kaJ}ZSW&|n%6$@O*Gj&;m-dYGMwtG

)!NT;=6vF+>6`{$Sd0$_e8B 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 literal 0 HcmV?d00001 diff --git a/src/images/ni-stamp.png b/src/images/ni-stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..fa39d4ec9052259c054c4a8f49f40cb4dd5ebe84 GIT binary patch literal 31889 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 literal 0 HcmV?d00001 From 8586c7a16de6929d837919bbf8f861ae89a99685 Mon Sep 17 00:00:00 2001 From: thePeras Date: Tue, 30 Jan 2024 22:33:30 +0000 Subject: [PATCH 007/147] Remove outdated faqs --- src/app.css | 4 - src/components/faqs/ExchangeFaqs.tsx | 133 --------------------------- src/components/faqs/HeaderFaqs.tsx | 7 +- src/components/faqs/PlannerFaqs.tsx | 68 ++------------ src/components/faqs/index.ts | 3 +- src/components/layout/Header.tsx | 2 - src/pages/Faqs.tsx | 3 +- 7 files changed, 15 insertions(+), 205 deletions(-) delete mode 100644 src/components/faqs/ExchangeFaqs.tsx diff --git a/src/app.css b/src/app.css index 8d16f74e..47877952 100644 --- a/src/app.css +++ b/src/app.css @@ -75,10 +75,6 @@ button { margin-top: 1.5rem !important; } -.quote { - @apply py-1 pl-4 border-l-4 border-slate-700 bg-lightish dark:border-white dark:bg-darkish; -} - #option-header .EmojiPickerReact { --epr-bg-color: rgb(242, 244, 247); --epr-category-label-bg-color: rgb(242, 244, 247); diff --git a/src/components/faqs/ExchangeFaqs.tsx b/src/components/faqs/ExchangeFaqs.tsx deleted file mode 100644 index c539eaba..00000000 --- a/src/components/faqs/ExchangeFaqs.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import classNames from 'classnames' -import { useEffect } from 'react' -import { Transition, Disclosure } from '@headlessui/react' -import { ChevronUpIcon } from '@heroicons/react/24/outline' - -const ExchangeFaqs = () => { - const data = [ - { - question: ( - - Se quiser mudar de turma a uma cadeira, preciso de encontrar previamente um outro aluno nessa turma que esteja - disposto a fazer a troca comigo? - - ), - answer: ( -

- Não! Basta cada aluno indicar as suas preferências a cada cadeira, e o algoritmo irá automaticamente encontrar - alguém que faça a troca com o mesmo -

- ), - }, - { - question: Posso fazer alterações às minhas preferências, ou desistir de a utilizar?, - answer: ( -

- Sim, mas apenas antes da data limite. A data limite será apresentada na página principal do FEUPExchange. Até - esse limite, os estudantes podem alterá-las, ou até desistir de utilizar a plataforma. Depois desse limite, as - preferências ficam bloqueadas, e o algoritmo é executado. -

- ), - }, - { - question: Quando é que posso ver o meu novo horário?, - answer: ( -

- Após chegar a data limite e após o algoritmo ser executado, a platforma irá enviar um email a cada estudante, - que irá conter o seu novo horário! Esses horários são depois enviados para a secretaria da FEUP, e pouco - depois o novo horário ficará visível no SIGARRA! -

- ), - }, - { - question: E se eu fico com um horário que não gosto?, - answer: ( -

- O algoritmo do FEUPExchange não irá gerar, para nenhum estudante, um horário cujas cadeiras não sejam - especificadas nas suas indicações (quer seja nas preferências, nos give-ins ou nos buddies). Tendo isto em - conta, o FEUPExchange não se responsabiliza caso o estudante prefira o seu horário antigo, face ao novo - horário gerado. -

- ), - }, - { - question: Quanto tempo demora até as alterações serem visíveis no SIGARRA?, - answer: ( -

- Após correr o algoritmo, todos os novos horários serão enviados para secretaria da FEUP passado alguns - minutos. Depois cabe à secretaria processar as alterações de horário para cada estudante. É previsto que as - mudanças sejam visíveis no SIGARRA dentro de 1 a 2 dias úteis. -

- ), - }, - ] - - const id = 'exchange' - const scrollToComponentTop = () => document.getElementById(id).scrollIntoView() - - useEffect(() => { - if (window.location.href.split('#')[1] === id) scrollToComponentTop() - }, []) - - return ( -
-
- -

- Nesta secção podes ver as questão relacionadas com as{' '} - mudanças de horário. -

-
- -
- {data.map((faq, faqIdx) => ( - - {({ open }) => ( - <> - - {faq.question} - - - - - - {faq.answer} - - - - )} - - ))} -
-
- ) -} - -export default ExchangeFaqs diff --git a/src/components/faqs/HeaderFaqs.tsx b/src/components/faqs/HeaderFaqs.tsx index 96af7142..9bbeebf4 100644 --- a/src/components/faqs/HeaderFaqs.tsx +++ b/src/components/faqs/HeaderFaqs.tsx @@ -4,16 +4,15 @@ const HeaderFaqs = () => {

Perguntas mais frequentes (FAQs)

-

- Nesta página podes encontrar respostas para as perguntas que mais frequentemente surgem, relativamente às - plataformas de gestão de horário do NIAEFEUP. No caso de perguntas persistirem, podes contactar o nosso email{' '} +

+ No caso de a tua dúvida persistir, contacta-nos pelo email{' '} projetos.niaefeup@gmail.com {' '} - ou submeter uma issue diretamente no{' '} + ou submete uma issue diretamente no{' '} { const data = [ - { - question: O que é que mudou relativamente à versão anterior do TTS?, - answer: ( -

- ), - }, { question: Qual o caso de uso do TTS mais comum?, answer: ( @@ -58,23 +17,22 @@ const PlannerFaqs = () => {
  • - Selecionar as unidades curriculares que pretende realizar no semestre e confirmar. + Selecionar as unidades curriculares a frequentar e confirmar.
  • - Selecionar os horários pretendidos nas caixas associadas a cada curso. + Selecionar as turmas pretendidas nas caixas associadas a cada unidade curricular.
  • - Fazer várias opções de horário, saltando entre elas usando as setas no topo. + Fazer várias opções de horário, saltando e ordenando por preferência.
  • - No menu com opções extra ,{' '} - exportar as opções em CSV e usar esse ficheiro para preencher no SIGARRA. + Exportar as opções em CSV para partilhar ou usar para preencher no SIGARRA.
  • @@ -82,7 +40,8 @@ const PlannerFaqs = () => { ), }, { - question: O que devo fazer se tenho cadeiras em vários cursos?, + //TODO: + question: O que devo fazer se tenho cadeiras em diferentes cursos?, answer: (

    @@ -137,12 +96,6 @@ const PlannerFaqs = () => { o aluno deve fazer um pedido de troca de turma junto do departamento de curso e, no caso do limite de alunos da turma de destino não ser excedido o pedido será, em princípio concretizado.

    -

    - Tanto as trocas de turmas diretas como as indiretas serão facilitadas uma - vez que a plataforma de mudança de turma FEUP Exchange esteja desenvolvida também pelo - NIAEFEUP. Esta plataforma está em desenvolvimento e está planeado que saia a tempo do{' '} - ano letivo de 2023/2024. -

    ), }, @@ -162,6 +115,9 @@ const PlannerFaqs = () => {
    ), }, + /* Mais questões? + - Para que servem os cadeados? + */ ] const id = 'planner' @@ -181,10 +137,6 @@ const PlannerFaqs = () => { > Time Table Selector -

    - Nesta secção podes ver as questão relacionadas com o{' '} - planeamento de horário. -

    diff --git a/src/components/faqs/index.ts b/src/components/faqs/index.ts index 1220498b..726bcf36 100644 --- a/src/components/faqs/index.ts +++ b/src/components/faqs/index.ts @@ -1,5 +1,4 @@ import PlannerFaqs from './PlannerFaqs' -import ExchangeFaqs from './ExchangeFaqs' import HeaderFaqs from './HeaderFaqs' -export { PlannerFaqs, ExchangeFaqs, HeaderFaqs } +export { PlannerFaqs, HeaderFaqs } diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index ad9cefce..cf6f08a0 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -7,9 +7,7 @@ import { Bars3Icon, XMarkIcon, AtSymbolIcon, - UserCircleIcon, RectangleStackIcon, - ArrowsRightLeftIcon, QuestionMarkCircleIcon, } from '@heroicons/react/24/outline' diff --git a/src/pages/Faqs.tsx b/src/pages/Faqs.tsx index 6cc63eb5..b82b55e3 100644 --- a/src/pages/Faqs.tsx +++ b/src/pages/Faqs.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react' -import { PlannerFaqs, ExchangeFaqs, HeaderFaqs } from '../components/faqs' +import { PlannerFaqs, HeaderFaqs } from '../components/faqs' const FaqsPage = () => { useEffect(() => { @@ -10,7 +10,6 @@ const FaqsPage = () => {
    -
    ) } From 3d7c6576c27a2e7aa7a4761eb08ee4d5ab7c32cb Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 1 Feb 2024 15:34:41 +0000 Subject: [PATCH 008/147] Removed unnecessary console.logs --- src/components/planner/sidebar/ScheduleListbox.tsx | 1 - src/utils/utils.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/components/planner/sidebar/ScheduleListbox.tsx b/src/components/planner/sidebar/ScheduleListbox.tsx index 45db0e39..e51bdb79 100644 --- a/src/components/planner/sidebar/ScheduleListbox.tsx +++ b/src/components/planner/sidebar/ScheduleListbox.tsx @@ -25,7 +25,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo const [showTheoretical, setShowTheoretical] = useState(courseOption.shown.T) const [showPractical, setShowPractical] = useState(courseOption.shown.TP) //FIXME (thePeras): If you are here you probably oberserved a bug. Don't worry its gonna be fixed very very soon - console.log(courseOption.teachers) var teacherOptions = [{ acronym: 'All teachers', name: '' }, ...courseOption.teachers] const [lastSelected, setLastSelected] = useState(selectedOption) const [previewing, setPreviewing] = useState(false) diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 21ad2099..a28f9c68 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -187,7 +187,6 @@ const getCourseTeachers = (courseOption: CourseOption) => { const removeDuplicatesFromCourseOption = (courses: CourseOption[]): CourseOption[] => { - console.log(courses) if (!courses) return [] let frequency: Map = new Map() From e17b4461b539cb9f0106561bd34e895617c1cf70 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 1 Feb 2024 16:31:06 +0000 Subject: [PATCH 009/147] Bug on paste fixed! --- .../selectedOptionController/PasteOption.tsx | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx index 2e713bb0..2ca1dcd4 100644 --- a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx @@ -25,13 +25,7 @@ type Props = { isImportedOptionHook: [boolean, React.Dispatch>] } -const PasteOption = ({ - majors, - majorHook, - multipleOptionsHook, - checkCourses, - isImportedOptionHook, -}: Props) => { +const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isImportedOptionHook }: Props) => { const [multipleOptions, setMultipleOptions] = multipleOptionsHook const [major, setMajor] = majorHook const [modalOpen, setModalOpen] = useState(false) @@ -54,12 +48,14 @@ const PasteOption = ({ } }, []) - const importSchedule = async (value = null) => { - const url = value ?? await navigator.clipboard.readText() + const importSchedule = async (value) => { + const url = value const decoded_url = Buffer.from(url, 'base64').toString() if (!isValidURL(decoded_url)) { - const description = value ? 'O texto inserido não é uma opção válida' : 'O texto do clipboard não é uma opção válida'; + const description = value + ? 'O texto inserido não é uma opção válida' + : 'O texto do clipboard não é uma opção válida' toast({ title: 'Erro ao colar opção', description, @@ -168,8 +164,8 @@ const PasteOption = ({ const selected_option = class_name_option !== 'null' ? course_schedules.find( - (schedule) => schedule.class_name === class_name_option && schedule.lesson_type !== 'T' - ) + (schedule) => schedule.class_name === class_name_option && schedule.lesson_type !== 'T' + ) : null const course_option: CourseOption = { @@ -217,14 +213,25 @@ const PasteOption = ({ return ( <> - {isClipboardSupported - ? - : + ) : ( - @@ -233,7 +240,7 @@ const PasteOption = ({ autoFocus type="text" placeholder="Colar aqui opção" - className="w-full p-2 rounded border border-slate-200 dark:border-slate-800 text-slate-950 dark:text-slate-50 focus:outline-none focus:ring-2 focus:ring-primary" + className="text-slate-950 w-full rounded border border-slate-200 p-2 focus:outline-none focus:ring-2 focus:ring-primary dark:border-slate-800 dark:text-slate-50" onPaste={(e) => importSchedule(e.clipboardData.getData('text/plain'))} onKeyDown={(e) => { if (e.key === 'Enter') { @@ -244,7 +251,7 @@ const PasteOption = ({ /> - } + )} Date: Thu, 1 Feb 2024 18:00:14 +0000 Subject: [PATCH 010/147] Add new FAQS and modify old ones --- src/components/faqs/PlannerFaqs.tsx | 53 +++++++++++------------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/src/components/faqs/PlannerFaqs.tsx b/src/components/faqs/PlannerFaqs.tsx index 6b544ed8..03b9c3f6 100644 --- a/src/components/faqs/PlannerFaqs.tsx +++ b/src/components/faqs/PlannerFaqs.tsx @@ -40,33 +40,11 @@ const PlannerFaqs = () => { ), }, { - //TODO: question: O que devo fazer se tenho cadeiras em diferentes cursos?, answer: (
    -

    - Esta funcionalidade estava planeada para a nova versão do TTS e pode futuramente ser implementada. No - entanto, o planeador de horário apenas permite selecionar unidades curriculares de um curso. Esta - funcionalidade foi considerada ser de prioridade baixa para o planeador de horários por{' '} - 4 motivos: -

    -
      -
    • Não são muito comuns casos de alunos nesta situação na UPorto.
    • -
    • Alunos nesta situação não costumam ter mais do que 1 ou 2 unidades curriculares noutro curso.
    • -
    • A submissão de horários para cursos diferentes é feita em momentos diferentes.
    • -
    • - Eventualmente, alunos em 2 cursos fruto da cisão dos mestrados integrados (exemplo: - L.EIC, M.EIC) estarão obrigados a concluir a licenciatura antes de prosseguir para o mestrado. -
    • -
    - -

    - Assim sendo, recomendamos fazer as opções de horário num curso e depois no outro e exportar - ambos os CSVs, já que a submissão é geralmente feita no SIGARRA e no mesmo formato que o - CSV oferece. Resumidamente, no que toca a{' '} - sobreposições de horário em unidades curriculares de cursos diferentes, essa gestão fica da - responsabilidade do utilizador. -

    +

    É possível selecionar unidades curriculares de diferentes cursos que já o selecionado.

    +

    Para isso basta aceder ao painel de escolha de UCs e clicar no botão no canto inferior esquerdo "UCs de outros cursos", pesquisar o curso da unidade curricular desejável e selecionar.

    ), }, @@ -100,18 +78,27 @@ const PlannerFaqs = () => { ), }, { - question: O planeador deixa-me selecionar as cadeiras que eu quiser no meu curso?, + question: O planeador deixa-me selecionar as cadeiras que eu quiser?, answer: (

    - Sim, o planeador de horário permite selecionar as cadeiras que pretende no seu curso, no respetivo semestre. - No entanto, o planeador não se responsabiliza pela contagem de créditos ECTS. O máximo de - créditos na Universidade do Porto é 42 ECTS num semestre e{' '} - 75 ECTS num ano letivo. O NIAEFEUP recomenda que os estudantes evitem ultrapassar os{' '} - 36 ECTS por semestre, já que um número superior a 36 corresponde (geralmente) a uma carga - horária pesada, pouco saudável e difícil de gerir. + Sim, o planeador de horário permite selecionar um número qualquer de cadeiras no respetivo semestre. + No entanto, o planeador não se responsabiliza pela contagem de créditos ECTS. Certifica-se que não + estás a ultrapassar o limite de créditos permitido para a tua situação atual. +

    +
    + ), + }, + { + question: Para que servem os cadeados ao lado das opções?, + answer: ( +
    +

    + Os cadeados servem para conseguires bloqueares a opção atual de tal forma a que te impeça de alterares acidentalmente a opção exceto se voltares a desbloquear. +

    +

    + Esta funcionalidade é particularmente útil para as opções que já não tens dúvidas e também para que a opção não seja alterada ao utilizares o preenchimento aleatório.

    -

    Avisos e contagem de créditos está planeada como uma funcionalidade para o futuro.

    ), }, @@ -128,7 +115,7 @@ const PlannerFaqs = () => { }, []) return ( -
    +
    + + + + + + + Professores + + + + { + e.preventDefault() + toggleAllTeachers(teacherOptions) + }} + > + + {selectedTeachers.length === 0 ? 'Select All' : 'Erase all'} + + + + {teacherOptions.map((option) => { + console.log(selectedTeachers) + const isSelected = selectedTeachers.includes(option) + return ( + { + e.preventDefault() + toggleTeacher(option) + }} + > + {option.acronym} + {option.name} + + ) + })} + + + + + + + handleListBoxSelection(null)}> + Remover Seleção + {selectDropdownSchedules().map((option, optionIdx) => ( - showPreview(option)} onMouseLeave={() => removePreview()} - key={`schedule-listbox-option-${multipleOptions.index}-${optionIdx}`} - value={option === null ? <>  : option} - className={({ active }) => - `group relative cursor-default select-none py-2 pl-10 pr-4 - text-sm ${active ? 'bg-primary/75 text-white dark:bg-primary/75' : 'text-gray-900'}` - } + checked={selectedOption == option} + onSelect={() => handleListBoxSelection(option)} > - {({ selected, active }) => ( - <> - - {getOptionDisplayText(option)} + {getOptionDisplayText(option)} + + {(() => { + const collisionType = timesCollideWithSelected(option) + return collisionType ? ( + + - {isLastSelected(option) ? ( - - - ) : selected ? ( - - - ) : null} - {(() => { - const collisionType = timesCollideWithSelected(option) - return collisionType ? ( - - - ) : null - })()} - - )} - + ) : null + })()} + ))} - - - - {/* Teachers ListBox */} - - {/* Button */} - - - {getTeacherSelectionText(selectedTeachers)} - - - {!courseOption.locked && - - - {/* Dropdown */} - - - {teacherOptions.map((option, optionIdx) => ( - showName(e, option.name)} - onMouseOut={(e) => showAcronym(e, option.acronym)} - className={({ active }) => - `group relative cursor-default select-none py-2 pl-10 pr-4 - text-sm ${active ? 'bg-primary/75 text-white dark:bg-primary/75' : 'text-gray-900'}` - } - > - {({ selected, active }) => ( - <> - - {optionIdx === 0 - ? selectedTeachers.length === 0 - ? 'Select All' - : 'Erase all' - : option.acronym} - - {selected ? ( - - - ) : null} - - )} - - ))} - - - - - {/* Lock Button */} - -
    + + + + +
    - {/* Show/Hide Checkboxes */} -
    -
    +
    + updateShown(event.target.checked, 'T', courseOption)} + /> +
    -
    Teóricas + +
    +
    + updateShown(event.target.checked, 'TP', courseOption)} + /> +
    + Práticas +
    - +
    ) ) } diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx index b34a4feb..b1714d3f 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/src/components/ui/dropdown-menu.tsx @@ -1,7 +1,6 @@ -import * as React from 'react' import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' import { Check, ChevronRight, Circle } from 'lucide-react' - +import * as React from 'react' import { cn } from '../../utils/utils' const DropdownMenu = DropdownMenuPrimitive.Root @@ -61,7 +60,7 @@ const DropdownMenuContent = React.forwardRef< ref={ref} sideOffset={sideOffset} className={cn( - 'text-slate-950 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:bg-slate-950 z-50 overflow-hidden rounded-md border border-slate-200 bg-white p-1 shadow-md dark:border-slate-800 dark:text-slate-50', + 'text-slate-950 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:bg-slate-950 z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-200 bg-white p-1 shadow-md dark:border-slate-800 dark:text-slate-50', className )} {...props} @@ -166,18 +165,18 @@ DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' export { DropdownMenu, - DropdownMenuTrigger, + DropdownMenuCheckboxItem, DropdownMenuContent, + DropdownMenuGroup, DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, - DropdownMenuRadioGroup, + DropdownMenuTrigger, } From c2be415cb4fc87476ff8859965c1ac11f03040bb Mon Sep 17 00:00:00 2001 From: jpnsantoss Date: Wed, 7 Feb 2024 19:29:55 +0000 Subject: [PATCH 020/147] Renamed component --- .../{ScheduleListbox.tsx => ClassSelector.tsx} | 11 +++++------ src/components/planner/sidebar/CoursesController.tsx | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) rename src/components/planner/sidebar/{ScheduleListbox.tsx => ClassSelector.tsx} (96%) diff --git a/src/components/planner/sidebar/ScheduleListbox.tsx b/src/components/planner/sidebar/ClassSelector.tsx similarity index 96% rename from src/components/planner/sidebar/ScheduleListbox.tsx rename to src/components/planner/sidebar/ClassSelector.tsx index 94a7c22c..3e572bab 100644 --- a/src/components/planner/sidebar/ScheduleListbox.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -24,7 +24,7 @@ type Props = { isImportedOptionHook: [boolean, React.Dispatch>] } -const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHook }: Props) => { +const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook }: Props) => { const firstRenderRef = useRef(true) const [multipleOptions, setMultipleOptions] = multipleOptionsHook const [isImportedOption, setIsImportedOption] = isImportedOptionHook @@ -54,7 +54,7 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo ) }, [courseOption]) - const handleListBoxSelection = (option: CourseSchedule) => { + const handleClassSelection = (option: CourseSchedule) => { setLastSelected(option) setSelectedOption(option) } @@ -182,7 +182,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo setIsImportedOption(false) } - //this line is needed since adding isImportedOption SetImportedSchedule to the dependency array causes an insconsistent ListBox behavior // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedOption, courseOption, setMultipleOptions]) @@ -298,7 +297,7 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo - handleListBoxSelection(null)}> + handleClassSelection(null)}> Remover Seleção {selectDropdownSchedules().map((option, optionIdx) => ( @@ -307,7 +306,7 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo onMouseEnter={() => showPreview(option)} onMouseLeave={() => removePreview()} checked={selectedOption == option} - onSelect={() => handleListBoxSelection(option)} + onSelect={() => handleClassSelection(option)} > {getOptionDisplayText(option)} @@ -387,4 +386,4 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo ) ) } -export default ScheduleListbox +export default ClassSelector diff --git a/src/components/planner/sidebar/CoursesController.tsx b/src/components/planner/sidebar/CoursesController.tsx index 891e6873..bd93d8aa 100644 --- a/src/components/planner/sidebar/CoursesController.tsx +++ b/src/components/planner/sidebar/CoursesController.tsx @@ -1,5 +1,5 @@ -import ScheduleListbox from './ScheduleListbox' import { removeDuplicatesFromCourseOption } from '../../../utils/utils' +import { default as ClassSelector } from './ClassSelector' const CoursesController = ({ multilpleOptionsHook, isImportedOptionHook }) => { const [multipleOptions, setMultipleOptions] = multilpleOptionsHook @@ -10,11 +10,11 @@ const CoursesController = ({ multilpleOptionsHook, isImportedOptionHook }) => { {multipleOptions.selected.length > 0 && removeDuplicatesFromCourseOption(multipleOptions.options[multipleOptions.index]).map( (courseOption, courseOptionIdx) => ( - ) )} From e9927fca2c1b5678ccc19de96f795691e02b393a Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 7 Feb 2024 20:14:24 +0000 Subject: [PATCH 021/147] Added tooltip on buttons --- .../selectedOptionController/CopyOption.tsx | 24 ++++-- .../selectedOptionController/PasteOption.tsx | 83 +++++++++++-------- .../selectedOptionController/RandomFill.tsx | 3 + 3 files changed, 68 insertions(+), 42 deletions(-) diff --git a/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx b/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx index fa375675..71bd46ab 100644 --- a/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx @@ -4,11 +4,12 @@ import { CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/outline' import { Major, CourseOption } from '../../../../@types' import { useToast } from '../../../ui/use-toast' import { Buffer } from 'buffer' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' type Props = { majorHook: [Major, React.Dispatch>] currentOption: CourseOption[] - className?: string, + className?: string } /** @@ -68,13 +69,20 @@ const CopyOption = ({ majorHook, currentOption, className }: Props) => { } return ( - + + + + + + Copiar horário + + ) } diff --git a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx index 2ca1dcd4..b08a6eeb 100644 --- a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx @@ -16,6 +16,7 @@ import React, { useEffect, useState } from 'react' import ConfirmationModal from './ConfirmationModal' import { Buffer } from 'buffer' import fillOptions from './fillOptions' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' type Props = { majors: Major[] @@ -214,42 +215,56 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI return ( <> {isClipboardSupported ? ( - + + + + + + Colar horário + + ) : ( - - - - - importSchedule(e.clipboardData.getData('text/plain'))} - onKeyDown={(e) => { - if (e.key === 'Enter') { - importSchedule(e.currentTarget.value) - } - }} - onBlur={() => setIsDropdownOpen(false)} - /> - + + + + + + + + Colar horário + + importSchedule(e.clipboardData.getData('text/plain'))} + onKeyDown={(e) => { + if (e.key === 'Enter') { + importSchedule(e.currentTarget.value) + } + }} + onBlur={() => setIsDropdownOpen(false)} + /> + + + )} >] @@ -239,6 +240,8 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { +
    Preenchimento aleatório
    + {Object.keys(randomClasses).map((key) => (
    Date: Wed, 7 Feb 2024 20:37:26 +0000 Subject: [PATCH 022/147] Fixed small bug --- .../selectedOptionController/RandomFill.tsx | 38 ++++++------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx index ef99caef..b1c64d67 100644 --- a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx +++ b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx @@ -22,6 +22,9 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { ) const [randomClasses, setRandomClasses] = useState({}) + console.log(courseOptions) + console.log(randomClasses) + /* Usage: const generator = cartesianGenerator(...schedules); @@ -55,8 +58,7 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { if (course.locked) { return [course.option] } - let aux = course.schedules.filter((schedule) => schedule.lesson_type != 'T' && randomClasses[schedule.class_name]) - return aux + return course.schedules.filter((schedule) => schedule.lesson_type != 'T' && randomClasses[schedule.class_name]) }) return cartesianGenerator(...allSchedules) @@ -113,19 +115,13 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { const randomNumber = Math.floor(Math.random() * (newPermutations.length - 1)) - // ================================================================= - // DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - console.log('Old permutations: ', permutations.length) - console.log('New permutations: ', newPermutations.length) - // console.log(newPermutations[randomNumber]) - // DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - // ================================================================= - applySchedule(newPermutations[randomNumber]) setPermutations(newPermutations) } const applySchedule = (schedules: CourseSchedule[]) => { + console.log('schedules: ', schedules) + if (schedules.length <= 0) return setMultipleOptions((prevMultipleOptions) => { @@ -184,15 +180,17 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { setRandomClasses(keyValue) }, [multipleOptions]) + /** + * Reseting generator and permutations when: + * - + */ useEffect(() => { - // console.warn('Reseting locked courses and generator') // ------------------------------------------------------ // Updating locked courses const newLockedCourses = multipleOptions.selected .filter((course) => course.locked) .map((course) => course.course.info.acronym) // Only update if locked courses changed - console.log('Locked courses changed? ', newLockedCourses.join() !== lockedCourses.join()) if (newLockedCourses.join() !== lockedCourses.join()) { setLockedCourses(newLockedCourses) setPermutations([]) @@ -202,30 +200,16 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { /** * Reseting generator and permutations when: - * - Multiple options change + * - Selected option changes * - Selected classes for random generations change */ useEffect(() => { - // console.warn('Reseting generator and permutations') setPermutations([]) setGenerator(getSchedulesGenerator()) }, [multipleOptions.index, randomClasses]) - // }, [multipleOptions.index, randomClasses]) const [generator, setGenerator] = useState(getSchedulesGenerator()) - // =================================================================================================================================== - // DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - console.log( - 'Locked courses: ', - courseOptions.filter((course) => course.locked).map((course) => course.course.info.acronym) - ) - // console.log('Random classes: ', randomClasses) - // console.log('Permutations: ', permutations.length) - // console.log('Multiple options: ', multipleOptions) - // DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - // =================================================================================================================================== - return ( From d972ac231bb33cf50811c00d32849d46885de39f Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 7 Feb 2024 20:48:49 +0000 Subject: [PATCH 023/147] Fixed print on dark mode --- .../planner/schedule/PrintSchedule.tsx | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/components/planner/schedule/PrintSchedule.tsx b/src/components/planner/schedule/PrintSchedule.tsx index 14ef58ea..5a260bda 100644 --- a/src/components/planner/schedule/PrintSchedule.tsx +++ b/src/components/planner/schedule/PrintSchedule.tsx @@ -1,32 +1,38 @@ -import { useCallback } from 'react' +import { useCallback, useContext } from 'react' +import { ThemeContext } from '../../../contexts/ThemeContext' import { Button } from '../../ui/button' import { CameraIcon } from '@heroicons/react/24/outline' import { toPng } from 'html-to-image' import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../../ui/tooltip' const PrintSchedule = ({ component }) => { - const takeScreenshot = useCallback(() => { - if (component.current === null) { - return - } + const { enabled, setEnabled } = useContext(ThemeContext) - toPng(component.current, { cacheBust: true, backgroundColor: 'white' }) - .then((dataUrl) => { - const link = document.createElement('a') - link.download = 'horario.png' - link.href = dataUrl - link.click() - }) - .catch((err) => { - console.log(err) - }) - }, [component]) + const takeScreenshot = useCallback( + (isThemeEnabled) => { + if (component.current === null) { + return + } + + toPng(component.current, { cacheBust: true, backgroundColor: isThemeEnabled ? '#252733' : '#fbfbfb' }) + .then((dataUrl) => { + const link = document.createElement('a') + link.download = 'horario.png' + link.href = dataUrl + link.click() + }) + .catch((err) => { + console.log(err) + }) + }, + [component] + ) return ( - From 9ae207a3392e0b87516b396b0d3cc318d59b40eb Mon Sep 17 00:00:00 2001 From: jpnsantoss Date: Wed, 7 Feb 2024 21:00:29 +0000 Subject: [PATCH 024/147] dark mode --- src/components/planner/sidebar/ClassSelector.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index 3e572bab..a01c04c5 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -251,10 +251,10 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook className="w-full justify-between truncate bg-lightish text-xs font-normal tracking-tighter hover:bg-primary/75 hover:text-white dark:bg-darkish" > {getOptionDisplayText(selectedOption)} - {!courseOption.locked && } + {!courseOption.locked && } - + @@ -262,7 +262,7 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook Professores - + { e.preventDefault() @@ -300,7 +300,7 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook handleClassSelection(null)}> Remover Seleção - {selectDropdownSchedules().map((option, optionIdx) => ( + {selectDropdownSchedules().map((option) => ( showPreview(option)} @@ -334,9 +334,9 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook disabled={!courseOption.option} > {courseOption.locked ? ( - + ) : ( - + )}
    From 33857e16a20d1373caef96a87ff74a03729a5dde Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 15:44:26 +0000 Subject: [PATCH 025/147] Added tooltips to buttons --- src/@types/index.d.ts | 1 - src/api/storage.ts | 5 ++--- src/components/planner/sidebar/OptionsController.tsx | 1 - src/components/planner/sidebar/ScheduleListbox.tsx | 4 ---- .../sidebar/selectedOptionController/PasteOption.tsx | 1 - .../planner/sidebar/selectedOptionController/RandomFill.tsx | 6 ------ .../planner/sidebar/selectedOptionController/fillOptions.ts | 1 - src/pages/TimeTableScheduler.tsx | 4 ++-- 8 files changed, 4 insertions(+), 19 deletions(-) diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts index 7c66d2b2..c6f41d1b 100644 --- a/src/@types/index.d.ts +++ b/src/@types/index.d.ts @@ -108,7 +108,6 @@ export type MultipleOptions = { index: number selected: CourseOption[] options: CourseOption[][] - names: string[] } export type ImportedCourses = { diff --git a/src/api/storage.ts b/src/api/storage.ts index efd85b6a..fa972cbf 100644 --- a/src/api/storage.ts +++ b/src/api/storage.ts @@ -3,7 +3,7 @@ import { getCourseTeachers } from '../utils/utils' import API from './backend' -const INITIAL_VALUE = { index: 0, selected: [], options: [], names: Array.from({ length: 10 }, (_, i) => `Horário ${i + 1}`) } +const INITIAL_VALUE = { index: 0, selected: [], options: [] } const isStorageValid = (key: string, daysElapsed: number) => { const stored = JSON.parse(localStorage.getItem(key)) @@ -32,8 +32,6 @@ const getOptionsStorage = (): MultipleOptions => { try { if (isStorageValid(key, 7)) { const courseOptions: MultipleOptions = JSON.parse(localStorage.getItem(key)) - // For older files (which don't have the attribute 'names') - if (courseOptions.names === undefined) courseOptions.names = INITIAL_VALUE.names for (let i = 0; i < courseOptions.options.length; i++) { for (let j = 0; j < courseOptions.options[i].length; j++) { @@ -58,6 +56,7 @@ const getOptionsStorage = (): MultipleOptions => { return courseOptions } else { + console.log('Invalid storage') writeStorageInvalid(key, INITIAL_VALUE) return INITIAL_VALUE } diff --git a/src/components/planner/sidebar/OptionsController.tsx b/src/components/planner/sidebar/OptionsController.tsx index 97e2fa84..1a4fc4ea 100644 --- a/src/components/planner/sidebar/OptionsController.tsx +++ b/src/components/planner/sidebar/OptionsController.tsx @@ -24,7 +24,6 @@ const Option = ({ item, selectedHook, multipleOptionsHook }) => { index: newIndex - 1, selected: prev.options[newIndex - 1], options: [...prev.options], - names: prev.names, })) } diff --git a/src/components/planner/sidebar/ScheduleListbox.tsx b/src/components/planner/sidebar/ScheduleListbox.tsx index e51bdb79..0582966b 100644 --- a/src/components/planner/sidebar/ScheduleListbox.tsx +++ b/src/components/planner/sidebar/ScheduleListbox.tsx @@ -69,7 +69,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo index: prev.index, selected: [...newCourseOptions], options: prev.options, - names: prev.names, } }) } @@ -122,7 +121,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo index: prev.index, selected: [...newCourseOptions], options: prev.options, - names: prev.names, } }) } else if (type === 'TP') { @@ -141,7 +139,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo index: prev.index, selected: [...newCourseOptions], options: prev.options, - names: prev.names, } }) } @@ -183,7 +180,6 @@ const ScheduleListbox = ({ courseOption, multipleOptionsHook, isImportedOptionHo index: prevMultipleOptions.index, selected: resolvedCourseOptions, options: resolvedOptions, - names: prevMultipleOptions.names, } return value diff --git a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx index b08a6eeb..83c3e376 100644 --- a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx @@ -202,7 +202,6 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI index: prevMultipleOptions.index, selected: importedOption.courses, options: newOptions, - names: prevMultipleOptions.names, } return value diff --git a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx index b1c64d67..55765bd4 100644 --- a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx +++ b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx @@ -22,9 +22,6 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { ) const [randomClasses, setRandomClasses] = useState({}) - console.log(courseOptions) - console.log(randomClasses) - /* Usage: const generator = cartesianGenerator(...schedules); @@ -120,8 +117,6 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { } const applySchedule = (schedules: CourseSchedule[]) => { - console.log('schedules: ', schedules) - if (schedules.length <= 0) return setMultipleOptions((prevMultipleOptions) => { @@ -137,7 +132,6 @@ const RandomFill = ({ multipleOptionsHook, className }: Props) => { index: prevMultipleOptions.index, selected: [...newSelected], options: prevMultipleOptions.options, - names: prevMultipleOptions.names, } return value diff --git a/src/components/planner/sidebar/selectedOptionController/fillOptions.ts b/src/components/planner/sidebar/selectedOptionController/fillOptions.ts index 193f0705..932b2bb8 100644 --- a/src/components/planner/sidebar/selectedOptionController/fillOptions.ts +++ b/src/components/planner/sidebar/selectedOptionController/fillOptions.ts @@ -34,7 +34,6 @@ const fillOptions = (importedCourses: ImportedCourses, setMultipleOptions: React index: prevMultipleOptions.index, selected: newOptions[prevMultipleOptions.index], options: newOptions, - names: prevMultipleOptions.names, }; return value; diff --git a/src/pages/TimeTableScheduler.tsx b/src/pages/TimeTableScheduler.tsx index aea67750..524e3ca7 100644 --- a/src/pages/TimeTableScheduler.tsx +++ b/src/pages/TimeTableScheduler.tsx @@ -136,7 +136,6 @@ const TimeTableSchedulerPage = () => { index: 0, selected: [], options: [], - names: Array.from({ length: 10 }, (_, i) => `Horário ${i + 1}`), }) // schedule options and selected schedule const totalSelected = useMemo( () => multipleOptions.options.map((co: CourseOption[]) => co.filter((item) => item.option !== null)).flat(), @@ -352,7 +351,6 @@ const TimeTableSchedulerPage = () => { index: prev.index, selected: newCourseOptions, options: newOptions, - names: prev.names, } }) @@ -397,6 +395,8 @@ const TimeTableSchedulerPage = () => { setCheckedCourses(newCheckedCourses) } + console.log(multipleOptions) + return (
    {/* Schedule Preview */} From 1794fc3f861875b9f3a07bc4f3c4fa819c5a8d51 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 15:51:07 +0000 Subject: [PATCH 026/147] Updated courses order to mimic sigarra --- .../planner/sidebar/CoursesController.tsx | 8 ++-- .../sessionController/CoursePicker.tsx | 42 ++++++++++--------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/components/planner/sidebar/CoursesController.tsx b/src/components/planner/sidebar/CoursesController.tsx index 891e6873..8f7521b2 100644 --- a/src/components/planner/sidebar/CoursesController.tsx +++ b/src/components/planner/sidebar/CoursesController.tsx @@ -8,16 +8,16 @@ const CoursesController = ({ multilpleOptionsHook, isImportedOptionHook }) => { return (
    {multipleOptions.selected.length > 0 && - removeDuplicatesFromCourseOption(multipleOptions.options[multipleOptions.index]).map( - (courseOption, courseOptionIdx) => ( + removeDuplicatesFromCourseOption(multipleOptions.options[multipleOptions.index]) + .sort((a, b) => a.course.info.sigarra_id - b.course.info.sigarra_id) + .map((courseOption, courseOptionIdx) => ( - ) - )} + ))}
    ) } diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 0dc23cdf..1847826f 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -396,27 +396,29 @@ const SelectionModal = ({ {/* Children checkboxes */}
    - {year.map((course: CheckedCourse, courseIdx: number) => ( -
    - handleCheck(event, yearIdx, courseIdx)} - /> -
    + ))}
    )) From f1a659d52f736d8f6c66b76ca501226ce2e51f7a Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 16:07:32 +0000 Subject: [PATCH 027/147] Changed faqs text --- src/components/faqs/PlannerFaqs.tsx | 43 +++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/components/faqs/PlannerFaqs.tsx b/src/components/faqs/PlannerFaqs.tsx index c4913768..5f1593a5 100644 --- a/src/components/faqs/PlannerFaqs.tsx +++ b/src/components/faqs/PlannerFaqs.tsx @@ -12,27 +12,27 @@ const PlannerFaqs = () => {
    1. - Escolher o ciclo de estudos (curso) que frequenta. + Escolher o ciclo de estudos (curso) que frequentas.
    2. - Selecionar as unidades curriculares a frequentar e confirmar. + Seleciona as unidades curriculares que vais frequentar e confirmar.
    3. - Selecionar as turmas pretendidas nas caixas associadas a cada unidade curricular. + Seleciona as turmas pretendidas nas caixas associadas a cada unidade curricular.
    4. - Fazer várias opções de horário, saltando e ordenando por preferência. + Faz várias opções de horário, saltando e ordenando de acordo com a tua preferência.
    5. - Exportar as opções em CSV para partilhar ou usar para preencher no SIGARRA. + Exporta as opções em CSV para partilhar ou para mais facilmente preencher no SIGARRA.
    @@ -44,7 +44,11 @@ const PlannerFaqs = () => { answer: (

    É possível selecionar unidades curriculares de diferentes cursos que já o selecionado.

    -

    Para isso basta aceder ao painel de escolha de UCs e clicar no botão no canto inferior esquerdo "UCs de outros cursos", pesquisar o curso da unidade curricular desejável e selecionar.

    +

    + Para isso basta aceder ao painel de escolha de UCs e clicar no botão no canto inferior + esquerdo "UCs de outros cursos", pesquisar o curso da unidade curricular desejável e + selecionar. +

    ), }, @@ -56,8 +60,8 @@ const PlannerFaqs = () => { As opções de horário são submetidas e processadas pelos departamentos de curso. De uma maneira geral há períodos dedicados a troca de turmas, sobre os quais os estudantes devem ser avisados por email. O processamento de pedidos de mudança de turma também é da responsabilidade do departamento de curso. - No entanto, no caso de encontrar outro estudantes que quer fazer a troca inversa é sempre - possível fazer a troca de turma numa fase inicial do semestre. Um{' '} + No entanto, no caso de encontrares outro estudantes que querem fazer a troca inversa é + sempre possível fazer a troca de turma numa fase inicial do semestre. Um{' '} exemplo de troca de turma direta é o seguinte:

      @@ -70,41 +74,40 @@ const PlannerFaqs = () => {

    Nesta situação, e caso não recebam nenhuma outra indicação, ambos os estudantes devem entrar em contacto com - o departamento do curso e pedir a troca direta. Relativamente a trocas de turmas indiretas, + o departamento do curso e pedir a troca direta. Relativamente à trocas de turmas indiretas, o aluno deve fazer um pedido de troca de turma junto do departamento de curso e, no caso do limite de alunos - da turma de destino não ser excedido o pedido será, em princípio concretizado. + da turma de destino não ser excedido o pedido poderá ser concretizado.

    ), }, { - question: O planeador deixa-me selecionar as cadeiras que eu quiser?, + question: O TTS deixa-me selecionar as cadeiras que eu quiser?, answer: (

    - Sim, o planeador de horário permite selecionar um número qualquer de cadeiras no respetivo semestre. - No entanto, o planeador não se responsabiliza pela contagem de créditos ECTS. Certifica-se que não - estás a ultrapassar o limite de créditos permitido para a tua situação atual. + Sim, o TTS de horário permite selecionar um número qualquer de cadeiras no respetivo semestre. No entanto, o + TTS não se responsabiliza pela contagem de créditos ECTS. Certifica-se que não estás a + ultrapassar o limite de créditos permitido para a tua situação atual.

    ), }, { - question: Para que servem os cadeados ao lado das opções?, + question: Para que servem os cadeados ao lado de cada opção de unidade curricular?, answer: (

    - Os cadeados servem para conseguires bloqueares a opção atual de tal forma a que te impeça de alterares acidentalmente a opção exceto se voltares a desbloquear. + Os cadeados servem para conseguires bloqueares a opção atual de tal forma a que te impeça de alterares + acidentalmente a opção exceto se voltares a desbloquear.

    - Esta funcionalidade é particularmente útil para as opções que já não tens dúvidas e também para que a opção não seja alterada ao utilizares o preenchimento aleatório. + Esta funcionalidade é particularmente útil para as opções que já não tens dúvidas e também + para que a opção não seja alterada ao utilizares o preenchimento aleatório.

    ), }, - /* Mais questões? - - Para que servem os cadeados? - */ ] const id = 'planner' From 69c199b5da5dd74c15257cfb49bd99e51e777018 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 17:02:16 +0000 Subject: [PATCH 028/147] Fixed lists of components with no key --- src/components/planner/sidebar/ClassSelector.tsx | 6 +++--- src/utils/utils.ts | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index a01c04c5..2a8f94e7 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -32,7 +32,6 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook const [showTheoretical, setShowTheoretical] = useState(courseOption.shown.T) const [showPractical, setShowPractical] = useState(courseOption.shown.TP) //FIXME (thePeras): If you are here you probably oberserved a bug. Don't worry its gonna be fixed very very soon - console.log(courseOption.teachers) var teacherOptions = courseOption.teachers const [lastSelected, setLastSelected] = useState(selectedOption) const [previewing, setPreviewing] = useState(false) @@ -231,7 +230,7 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook return ( adaptedSchedules && ( -
    +
    {/* Header */}

    {courseOption.course.info.acronym} @@ -275,10 +274,10 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook {teacherOptions.map((option) => { - console.log(selectedTeachers) const isSelected = selectedTeachers.includes(option) return ( { @@ -302,6 +301,7 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook {selectDropdownSchedules().map((option) => ( showPreview(option)} onMouseLeave={() => removePreview()} diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 21ad2099..a28f9c68 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -187,7 +187,6 @@ const getCourseTeachers = (courseOption: CourseOption) => { const removeDuplicatesFromCourseOption = (courses: CourseOption[]): CourseOption[] => { - console.log(courses) if (!courses) return [] let frequency: Map = new Map() From 5be066b7999117c95de723760df897c2da9e80e3 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 17:52:48 +0000 Subject: [PATCH 029/147] Class dropdowns are the same size as the trigger --- .../planner/sidebar/ClassSelector.tsx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index 2a8f94e7..78303d80 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -26,6 +26,9 @@ type Props = { const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook }: Props) => { const firstRenderRef = useRef(true) + const classSelectorTriggerRef = useRef(null) + const classSelectorContentRef = useRef(null) + const [isDropdownOpen, setIsDropdownOpen] = useState(false) const [multipleOptions, setMultipleOptions] = multipleOptionsHook const [isImportedOption, setIsImportedOption] = isImportedOptionHook const [selectedOption, setSelectedOption] = useState(courseOption.option) @@ -38,6 +41,15 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook const [selectedTeachers, setSelectedTeachers] = useState(courseOption.teachers) + /** + * This useEffect is used to make the dropdown content width match the trigger width + */ + useEffect(() => { + if (classSelectorTriggerRef.current && classSelectorContentRef.current) { + classSelectorContentRef.current.style.width = `${classSelectorTriggerRef.current.offsetWidth}px` + } + }, [isDropdownOpen]) + useEffect(() => { if (courseOption.option) { setSelectedOption(courseOption.option) @@ -242,8 +254,8 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook {courseOption.course.info.acronym}

    - - + setIsDropdownOpen(!isDropdownOpen)}> + - + @@ -309,7 +324,6 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook onSelect={() => handleClassSelection(option)} > {getOptionDisplayText(option)} - {(() => { const collisionType = timesCollideWithSelected(option) return collisionType ? ( From c7c866c3b29c84c1c78e814cbbca74f6629f792e Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Thu, 8 Feb 2024 18:08:01 +0000 Subject: [PATCH 030/147] Enhanced responsiveness of class picker --- src/components/planner/sidebar/ClassSelector.tsx | 6 ++---- src/components/ui/button.tsx | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index 78303d80..74c3c030 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -249,11 +249,8 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook  ·  {courseOption.course.info.name} 

    - -

    - {courseOption.course.info.acronym} -

    + {/* Dropdown Menu */} setIsDropdownOpen(!isDropdownOpen)}>
    diff --git a/src/components/planner/SelectionModal.tsx b/src/components/planner/SelectionModal.tsx index be1d1634..7c53475f 100644 --- a/src/components/planner/SelectionModal.tsx +++ b/src/components/planner/SelectionModal.tsx @@ -15,7 +15,7 @@ import { XCircleIcon, } from '@heroicons//react/24/solid' import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../pages/TimeTableScheduler' -import { MajorSearchCombobox } from './MajorSearchCombobox' +import { MajorSearchCombobox } from './sidebar/sessionController/course-picker/MajorSearchCombobox' import CreditsBanner from './CreditsBanner' type Props = { diff --git a/src/components/planner/sidebar/SessionController.tsx b/src/components/planner/sidebar/SessionController.tsx index 78c10f75..25607c60 100644 --- a/src/components/planner/sidebar/SessionController.tsx +++ b/src/components/planner/sidebar/SessionController.tsx @@ -1,5 +1,8 @@ import { CheckedCourse, Major, CourseOption, MultipleOptions } from '../../../@types' + +// import CoursePicker from './sessionController/CoursePicker' import CoursePicker from './sessionController/CoursePicker' + import CollaborativeSession from './sessionController/CollaborativeSession' import Export from './sessionController/Export' diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 1847826f..375b0ae8 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,13 +1,9 @@ -import classNames from 'classnames' -import { Dialog, Transition } from '@headlessui/react' -import { Fragment, useEffect, useState } from 'react' -import Alert, { AlertType } from '../../Alert' -import { CheckedCourse, Course, Major } from '../../../../@types' -import { getSchoolYear, getSemester } from '../../../../utils/utils' -import { AcademicCapIcon, CheckCircleIcon, PencilSquareIcon, PlusIcon, XCircleIcon } from '@heroicons//react/24/solid' -import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../../../pages/TimeTableScheduler' -import { MajorSearchCombobox } from '../../MajorSearchCombobox' +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' import { Button } from '../../../ui/button' +import { Separator } from '../../../ui/separator' +import { MajorSearchCombobox } from './course-picker' +import { PencilSquareIcon } from '@heroicons//react/24/solid' +import { CheckedCourse, Course, Major } from '../../../../@types' type Props = { majors: Major[] @@ -21,10 +17,7 @@ type Props = { repeatedCourseControlHook: [boolean, React.Dispatch>] } -/** - * Main modal where a user can select the courses for their main major - */ -const SelectionModal = ({ +const CoursePicker = ({ majors, openHook, majorHook, @@ -36,465 +29,33 @@ const SelectionModal = ({ repeatedCourseControlHook, }: Props) => { const [major, setMajor] = majorHook - const [isThisOpen, setIsThisOpen] = openHook - const [courses, setCourses] = coursesHook - const [extraCoursesActive, setExtraCoursesActive] = extraCoursesActiveHook - const [isExtraUcsModelOpen, setIsExtraUcsModalOpen] = extraCoursesModalOpenHook - const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = sourceBufferHook - const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = destBufferHook - const [chosenMajorMainModalEqualToExtra, setChosenMajorMainModalEqualToExtra] = repeatedCourseControlHook - const [coursesAlreadyTaken, setCoursesAlreadyTaken] = useState(false) - const [mainMajorAlreadyAnExtra, setMainMajorAlreadyAnExtra] = useState(false) - //const [extraCoursesQuery, setExtraCoursesQuery] = useState('') - const [alertLevel, setAlertLevel] = useState(AlertType.info) - const atLeastOneCourse = courses.some((item) => item?.some((course) => course.checked)) - - const closeModal = () => { - if (major?.name !== '' && atLeastOneCourse) { - setIsThisOpen(false) - } else { - setAlertLevel(AlertType.warning) - } - } - - const openModal = () => { - setIsThisOpen(true) - } - - const getDisplayExtraCourseText = (course: Course) => - course === null ? '' : `${course?.name} (${course?.acronym}, ${course?.course})` - - const handleCheck = (event: React.ChangeEvent, year: number, courseIdx: number) => { - if (is_null_or_undefined(year)) return - - courses[year + 1][courseIdx].checked = event.target.checked - setCourses([...courses]) - - setSelectionModalCoursesBuffer([...courses]) - } - - const handleCheckGroup = (event: React.ChangeEvent, year: number) => { - if (is_null_or_undefined(year)) return - - let newGroupEntry: CheckedCourse[] = [] - courses[year + 1].forEach((course: CheckedCourse) => { - course.checked = event.target.checked - newGroupEntry.push(course) - }) - courses[year + 1] = newGroupEntry - - setCourses([...courses]) - setSelectionModalCoursesBuffer([...courses]) - } - - const openExtraCoursesModal = () => { - setSelectionModalCoursesBuffer([...courses.slice(1)]) - - setCourses([courses[0], ...extraCoursesModalBuffer.slice(1)]) - - setIsExtraUcsModalOpen(true) - } - - const ExtraCoursesButton = () => ( - - ) - - const replaceExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { - const checkbox: HTMLElement = document.getElementById(checkboxId) - const removalIcon: HTMLElement = document.getElementById(XMarkIconId) - - if (!checkbox || !removalIcon) return - - checkbox.style.display = 'none' - removalIcon.style.display = 'block' - } - - const recoverExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { - const checkbox = document.getElementById(checkboxId) - const removalIcon: HTMLElement = document.getElementById(XMarkIconId) - - if (!checkbox || !removalIcon) return - - checkbox.style.display = 'block' - removalIcon.style.display = 'none' - } - - const removeCourseFromExtraCourses = (courseIdx: number) => { - courses[0].splice(courseIdx, 1) - setCourses([...courses]) - - if (courses[0].length === 0) { - extraCoursesModalBuffer[0] = [] - extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { - courseArray.forEach((course) => (course.checked = false)) - }) - } - } - - const removeExtraCourses = () => { - courses[0] = [] - setCourses([...courses]) - - extraCoursesModalBuffer[0] = [] - extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { - courseArray.forEach((course) => (course.checked = false)) - }) - setExtraCoursesActive(false) - } - - /** - * Displays vertical list of the extra courses the user selected - */ - const showUcsExtra = () => { - return ( - <> - {/* Courses checkboxes */} -
    -
    - {/* Parent checkbox */} -
    { - replaceExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') - }} - onMouseLeave={() => { - recoverExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') - }} - > - - - -
    - -
    - {courses[0] !== null && courses[0] !== undefined ? ( - courses[0].map((course: CheckedCourse, courseIdx: number) => ( -
    { - replaceExtraCourseCheckbox( - `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, - `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` - ) - }} - onMouseLeave={() => { - recoverExtraCourseCheckbox( - `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, - `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` - ) - }} - > - { - removeCourseFromExtraCourses(courseIdx) - }} - /> - - -
    - )) - ) : ( - <> - )} -
    -
    -
    - - ) - } - - const alreadyInExtraCourses = (course: CheckedCourse[][]) => { - if ( - is_null_or_undefined(course[1]) || - is_null_or_undefined(course[0]) || - is_null_or_undefined(course[0][0]) || - is_null_or_undefined(course[1][0]) - ) { - return false - } - - return course[0][0]?.info.course_unit_id === course[1][0]?.info.course_unit_id - } - - useEffect(() => { - if (major?.name !== '' && atLeastOneCourse) setAlertLevel(AlertType.success) - else setAlertLevel(AlertType.info) - }, [major, courses, atLeastOneCourse]) - - const warnIfMajorIsTheSameBetween = (courseLeft: CheckedCourse[], courseRight: CheckedCourse[][]) => { - if (is_null_or_undefined(courseLeft) || is_null_or_undefined(courseLeft[0])) return false - - let areLeftAndRightMajorsEqual: boolean = - courseRight - .flat() - .findIndex((extra_course) => extra_course.info.course_unit_id === courseLeft[0].info.course_unit_id) !== -1 - - areLeftAndRightMajorsEqual ? setMainMajorAlreadyAnExtra(true) : setMainMajorAlreadyAnExtra(false) - } - - useEffect(() => { - // Regular courses - for (let year = 1; year < courses.length; year++) { - controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) - } - - // Extra courses - if (courses[0] !== undefined && courses[0] !== null) { - controlCoursesGroupCheckbox(courses[0], 'extraCourseGroupCheckbox') - } - - warnIfMajorIsTheSameBetween(courses[0], courses.slice(1)) - }, [courses]) - - useEffect(() => { - alreadyInExtraCourses(courses.slice(1)) ? setCoursesAlreadyTaken(true) : setCoursesAlreadyTaken(false) - }, [courses]) return ( - <> - {/* Edit button - //TODO: Create and change to text variant - */} - - - - - -
    -
    - - - {/* Header */} - -
    -
    - -
    - - {`${getSemester()}ºS`} - - - {getSchoolYear()} - -
    -
    - - {/* Credits banner */} - {/* course.checked)} /> */} - - {/* Alert banner */} - - Selecione o seu curso principal, seguido das Unidades Curriculares{' '} - pretendidas. - - - {/* Select major dropdown */} - - -
    - {extraCoursesActive ?
    {showUcsExtra()}
    : <>} - - {chosenMajorMainModalEqualToExtra ? ( -
    -

    - Já tens este curso selecionado no menu de seleção de outros cursos -

    -
    - ) : ( -
    - {coursesAlreadyTaken ? ( - <> - ) : ( - major && - courses.slice(1).map((year: CheckedCourse[], yearIdx: number) => ( -
    - {/* Parent checkbox */} -
    - course.checked)} - id={`year-checkbox-${yearIdx}`} - onChange={(event) => handleCheckGroup(event, yearIdx)} - /> - -
    - - {/* Children checkboxes */} -
    - {year - .sort((a, b) => a.info.sigarra_id - b.info.sigarra_id) - .map((course: CheckedCourse, courseIdx: number) => ( -
    - handleCheck(event, yearIdx, courseIdx)} - /> - -
    - ))} -
    -
    - )) - )} -
    - )} -
    - - {/* Bottom action buttons */} -
    - {/* Left side buttons */} -
    - {/* Add / edit extra ucs */} - {major && } -
    - - {/* Right side buttons */} -
    - {/* Confirm options button */} - -
    -
    -
    -
    -
    + + + + + + + Seleciona as tuas Unidades Curriculares + + This action cannot be undone. This will permanently delete your account and remove your data from our + servers. + + +
    +
    +
    -
    - - + +
    +
    + +
    ) } -/* Masks outer background */ -const OuterMask = () => ( - -
    - -) - -/* Modal inner content custom transition */ -const InnerCustomTransition = ({ children, ...props }: any) => ( - - {children} - -) - -export default SelectionModal +export default CoursePicker diff --git a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx new file mode 100644 index 00000000..f76e257d --- /dev/null +++ b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx @@ -0,0 +1,500 @@ +import classNames from 'classnames' +import { Dialog, Transition } from '@headlessui/react' +import { Fragment, useEffect, useState } from 'react' +import Alert, { AlertType } from '../../Alert' +import { CheckedCourse, Course, Major } from '../../../../@types' +import { getSchoolYear, getSemester } from '../../../../utils/utils' +import { AcademicCapIcon, CheckCircleIcon, PencilSquareIcon, PlusIcon, XCircleIcon } from '@heroicons//react/24/solid' +import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../../../pages/TimeTableScheduler' +import { MajorSearchCombobox } from './course-picker/MajorSearchCombobox' +import { Button } from '../../../ui/button' + +type Props = { + majors: Major[] + openHook: [boolean, React.Dispatch>] + majorHook: [Major, React.Dispatch>] + coursesHook: [CheckedCourse[][], React.Dispatch>] + extraCoursesActiveHook: [boolean, React.Dispatch>] + extraCoursesModalOpenHook: [boolean, React.Dispatch>] + sourceBufferHook: [CheckedCourse[][], React.Dispatch>] + destBufferHook: [CheckedCourse[][], React.Dispatch>] + repeatedCourseControlHook: [boolean, React.Dispatch>] +} + +/** + * Main modal where a user can select the courses for their main major + */ +const CoursePicker = ({ + majors, + openHook, + majorHook, + coursesHook, + extraCoursesActiveHook, + extraCoursesModalOpenHook, + sourceBufferHook, + destBufferHook, + repeatedCourseControlHook, +}: Props) => { + const [major, setMajor] = majorHook + const [isThisOpen, setIsThisOpen] = openHook + const [courses, setCourses] = coursesHook + const [extraCoursesActive, setExtraCoursesActive] = extraCoursesActiveHook + const [isExtraUcsModelOpen, setIsExtraUcsModalOpen] = extraCoursesModalOpenHook + const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = sourceBufferHook + const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = destBufferHook + const [chosenMajorMainModalEqualToExtra, setChosenMajorMainModalEqualToExtra] = repeatedCourseControlHook + const [coursesAlreadyTaken, setCoursesAlreadyTaken] = useState(false) + const [mainMajorAlreadyAnExtra, setMainMajorAlreadyAnExtra] = useState(false) + //const [extraCoursesQuery, setExtraCoursesQuery] = useState('') + const [alertLevel, setAlertLevel] = useState(AlertType.info) + const atLeastOneCourse = courses.some((item) => item?.some((course) => course.checked)) + + const closeModal = () => { + if (major?.name !== '' && atLeastOneCourse) { + setIsThisOpen(false) + } else { + setAlertLevel(AlertType.warning) + } + } + + const openModal = () => { + setIsThisOpen(true) + } + + const getDisplayExtraCourseText = (course: Course) => + course === null ? '' : `${course?.name} (${course?.acronym}, ${course?.course})` + + const handleCheck = (event: React.ChangeEvent, year: number, courseIdx: number) => { + if (is_null_or_undefined(year)) return + + courses[year + 1][courseIdx].checked = event.target.checked + setCourses([...courses]) + + setSelectionModalCoursesBuffer([...courses]) + } + + const handleCheckGroup = (event: React.ChangeEvent, year: number) => { + if (is_null_or_undefined(year)) return + + let newGroupEntry: CheckedCourse[] = [] + courses[year + 1].forEach((course: CheckedCourse) => { + course.checked = event.target.checked + newGroupEntry.push(course) + }) + courses[year + 1] = newGroupEntry + + setCourses([...courses]) + setSelectionModalCoursesBuffer([...courses]) + } + + const openExtraCoursesModal = () => { + setSelectionModalCoursesBuffer([...courses.slice(1)]) + + setCourses([courses[0], ...extraCoursesModalBuffer.slice(1)]) + + setIsExtraUcsModalOpen(true) + } + + const ExtraCoursesButton = () => ( + + ) + + const replaceExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { + const checkbox: HTMLElement = document.getElementById(checkboxId) + const removalIcon: HTMLElement = document.getElementById(XMarkIconId) + + if (!checkbox || !removalIcon) return + + checkbox.style.display = 'none' + removalIcon.style.display = 'block' + } + + const recoverExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { + const checkbox = document.getElementById(checkboxId) + const removalIcon: HTMLElement = document.getElementById(XMarkIconId) + + if (!checkbox || !removalIcon) return + + checkbox.style.display = 'block' + removalIcon.style.display = 'none' + } + + const removeCourseFromExtraCourses = (courseIdx: number) => { + courses[0].splice(courseIdx, 1) + setCourses([...courses]) + + if (courses[0].length === 0) { + extraCoursesModalBuffer[0] = [] + extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { + courseArray.forEach((course) => (course.checked = false)) + }) + } + } + + const removeExtraCourses = () => { + courses[0] = [] + setCourses([...courses]) + + extraCoursesModalBuffer[0] = [] + extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { + courseArray.forEach((course) => (course.checked = false)) + }) + setExtraCoursesActive(false) + } + + /** + * Displays vertical list of the extra courses the user selected + */ + const showUcsExtra = () => { + return ( + <> + {/* Courses checkboxes */} +
    +
    + {/* Parent checkbox */} +
    { + replaceExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') + }} + onMouseLeave={() => { + recoverExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') + }} + > + + + +
    + +
    + {courses[0] !== null && courses[0] !== undefined ? ( + courses[0].map((course: CheckedCourse, courseIdx: number) => ( +
    { + replaceExtraCourseCheckbox( + `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, + `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` + ) + }} + onMouseLeave={() => { + recoverExtraCourseCheckbox( + `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, + `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` + ) + }} + > + { + removeCourseFromExtraCourses(courseIdx) + }} + /> + + +
    + )) + ) : ( + <> + )} +
    +
    +
    + + ) + } + + const alreadyInExtraCourses = (course: CheckedCourse[][]) => { + if ( + is_null_or_undefined(course[1]) || + is_null_or_undefined(course[0]) || + is_null_or_undefined(course[0][0]) || + is_null_or_undefined(course[1][0]) + ) { + return false + } + + return course[0][0]?.info.course_unit_id === course[1][0]?.info.course_unit_id + } + + useEffect(() => { + if (major?.name !== '' && atLeastOneCourse) setAlertLevel(AlertType.success) + else setAlertLevel(AlertType.info) + }, [major, courses, atLeastOneCourse]) + + const warnIfMajorIsTheSameBetween = (courseLeft: CheckedCourse[], courseRight: CheckedCourse[][]) => { + if (is_null_or_undefined(courseLeft) || is_null_or_undefined(courseLeft[0])) return false + + let areLeftAndRightMajorsEqual: boolean = + courseRight + .flat() + .findIndex((extra_course) => extra_course.info.course_unit_id === courseLeft[0].info.course_unit_id) !== -1 + + areLeftAndRightMajorsEqual ? setMainMajorAlreadyAnExtra(true) : setMainMajorAlreadyAnExtra(false) + } + + useEffect(() => { + // Regular courses + for (let year = 1; year < courses.length; year++) { + controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) + } + + // Extra courses + if (courses[0] !== undefined && courses[0] !== null) { + controlCoursesGroupCheckbox(courses[0], 'extraCourseGroupCheckbox') + } + + warnIfMajorIsTheSameBetween(courses[0], courses.slice(1)) + }, [courses]) + + useEffect(() => { + alreadyInExtraCourses(courses.slice(1)) ? setCoursesAlreadyTaken(true) : setCoursesAlreadyTaken(false) + }, [courses]) + + return ( + <> + {/* Edit button + //TODO: Create and change to text variant + */} + + + + + +
    +
    + + + {/* Header */} + +
    +
    + +
    + + {`${getSemester()}ºS`} + + + {getSchoolYear()} + +
    +
    + + {/* Credits banner */} + {/* course.checked)} /> */} + + {/* Alert banner */} + + Selecione o seu curso principal, seguido das Unidades Curriculares{' '} + pretendidas. + + + {/* Select major dropdown */} + + +
    + {extraCoursesActive ?
    {showUcsExtra()}
    : <>} + + {chosenMajorMainModalEqualToExtra ? ( +
    +

    + Já tens este curso selecionado no menu de seleção de outros cursos +

    +
    + ) : ( +
    + {coursesAlreadyTaken ? ( + <> + ) : ( + major && + courses.slice(1).map((year: CheckedCourse[], yearIdx: number) => ( +
    + {/* Parent checkbox */} +
    + course.checked)} + id={`year-checkbox-${yearIdx}`} + onChange={(event) => handleCheckGroup(event, yearIdx)} + /> + +
    + + {/* Children checkboxes */} +
    + {year + .sort((a, b) => a.info.sigarra_id - b.info.sigarra_id) + .map((course: CheckedCourse, courseIdx: number) => ( +
    + handleCheck(event, yearIdx, courseIdx)} + /> + +
    + ))} +
    +
    + )) + )} +
    + )} +
    + + {/* Bottom action buttons */} +
    + {/* Left side buttons */} +
    + {/* Add / edit extra ucs */} + {major && } +
    + + {/* Right side buttons */} +
    + {/* Confirm options button */} + +
    +
    +
    +
    +
    +
    +
    +
    + + ) +} + +/* Masks outer background */ +const OuterMask = () => ( + +
    + +) + +/* Modal inner content custom transition */ +const InnerCustomTransition = ({ children, ...props }: any) => ( + + {children} + +) + +export default CoursePicker diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx new file mode 100644 index 00000000..8900af83 --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -0,0 +1,14 @@ +import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' + +const CourseYearTabs = ({}) => { + return ( + + + Account + Password + + Make changes to your account here. + Change your password here. + + ) +} diff --git a/src/components/planner/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx similarity index 99% rename from src/components/planner/MajorSearchCombobox.tsx rename to src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index dcf14bee..50d02d35 100644 --- a/src/components/planner/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames' import { Combobox, Transition } from '@headlessui/react' -import { Major } from '../../@types' +import { Major } from '../../../../../@types' import { Fragment, useState, useEffect, SetStateAction } from 'react' import { CheckIcon, ChevronUpDownIcon } from '@heroicons//react/24/solid' diff --git a/src/components/planner/sidebar/sessionController/course-picker/index.ts b/src/components/planner/sidebar/sessionController/course-picker/index.ts new file mode 100644 index 00000000..c37b688b --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/index.ts @@ -0,0 +1,6 @@ +import { MajorSearchCombobox } from "./MajorSearchCombobox"; + +export { + MajorSearchCombobox, + +} \ No newline at end of file diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx new file mode 100644 index 00000000..d7bdbfb8 --- /dev/null +++ b/src/components/ui/dialog.tsx @@ -0,0 +1,99 @@ +import * as React from 'react' +import * as DialogPrimitive from '@radix-ui/react-dialog' +import { X } from 'lucide-react' + +import { cn } from '../../utils/utils' + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
    +) +DialogHeader.displayName = 'DialogHeader' + +const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
    +) +DialogFooter.displayName = 'DialogFooter' + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx new file mode 100644 index 00000000..a52817b6 --- /dev/null +++ b/src/components/ui/tabs.tsx @@ -0,0 +1,53 @@ +import * as React from 'react' +import * as TabsPrimitive from '@radix-ui/react-tabs' + +import { cn } from '../../utils/utils' + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } From 426b56c3aeb0c25c4863e39ea238198bc155e846 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Sun, 11 Feb 2024 19:08:45 +0000 Subject: [PATCH 034/147] Created major context, started working on courses picker --- package-lock.json | 426 ++++++++++++++ package.json | 1 + src/@types/new_index.d.ts | 16 +- .../planner/SelectionExtraCoursesModal.tsx | 322 ----------- src/components/planner/SelectionModal.tsx | 535 ------------------ src/components/planner/Sidebar.tsx | 8 +- src/components/planner/index.ts | 2 - .../sidebar/SelectedOptionController.tsx | 26 +- .../planner/sidebar/SessionController.tsx | 10 +- .../selectedOptionController/CopyOption.tsx | 39 +- .../selectedOptionController/PasteOption.tsx | 109 +--- .../sessionController/CoursePicker.tsx | 14 +- .../sessionController/OldCoursePicker.tsx | 2 +- .../course-picker/CourseYearCheckboxes.tsx | 29 + .../course-picker/CourseYearTabs.tsx | 32 +- .../course-picker/MajorSearchCombobox.tsx | 240 ++++---- src/components/ui/command.tsx | 138 +++++ src/contexts/CourseContext.tsx | 18 + src/contexts/MajorContext.tsx | 19 + src/pages/TimeTableScheduler.tsx | 157 +++-- src/utils/utils.ts | 62 +- 21 files changed, 939 insertions(+), 1266 deletions(-) delete mode 100644 src/components/planner/SelectionExtraCoursesModal.tsx delete mode 100644 src/components/planner/SelectionModal.tsx create mode 100644 src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx create mode 100644 src/components/ui/command.tsx create mode 100644 src/contexts/CourseContext.tsx create mode 100644 src/contexts/MajorContext.tsx diff --git a/package-lock.json b/package-lock.json index 07183bc8..769aa0b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "class-variance-authority": "^0.7.0", "classnames": "^2.3.1", "clsx": "^2.1.0", + "cmdk": "^0.2.1", "emoji-picker-react": "^4.6.4", "html-to-image": "^1.11.11", "lucide-react": "^0.307.0", @@ -5979,6 +5980,251 @@ "node": ">=6" } }, + "node_modules/cmdk": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-0.2.1.tgz", + "integrity": "sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==", + "dependencies": { + "@radix-ui/react-dialog": "1.0.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-dialog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz", + "integrity": "sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.0", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-slot": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.4" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz", + "integrity": "sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz", + "integrity": "sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-portal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.0.tgz", + "integrity": "sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz", + "integrity": "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/cmdk/node_modules/react-remove-scroll": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz", + "integrity": "sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -20399,6 +20645,186 @@ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==" }, + "cmdk": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-0.2.1.tgz", + "integrity": "sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==", + "requires": { + "@radix-ui/react-dialog": "1.0.0" + }, + "dependencies": { + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dialog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz", + "integrity": "sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.0", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-slot": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.4" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz", + "integrity": "sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.0" + } + }, + "@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz", + "integrity": "sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.0.tgz", + "integrity": "sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz", + "integrity": "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "react-remove-scroll": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz", + "integrity": "sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + } + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", diff --git a/package.json b/package.json index 9a389ded..9d078311 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "class-variance-authority": "^0.7.0", "classnames": "^2.3.1", "clsx": "^2.1.0", + "cmdk": "^0.2.1", "emoji-picker-react": "^4.6.4", "html-to-image": "^1.11.11", "lucide-react": "^0.307.0", diff --git a/src/@types/new_index.d.ts b/src/@types/new_index.d.ts index ff8a9b26..5f2a0840 100644 --- a/src/@types/new_index.d.ts +++ b/src/@types/new_index.d.ts @@ -23,8 +23,8 @@ export type Major = { // } // FICA APENAS COMO STATE (não é um type) export type CourseInfo = { - id: number // passa a ser o sigarra_id - course_unit_year: number + id: number, // passa a ser o sigarra_id + course_unit_year: number, ects: number, acronym: string, name: string, @@ -34,7 +34,7 @@ export type CourseInfo = { // year: number // remover ?? } -// selected_courses = CourseInfo[] // FICA APENAS COMO STATE (não é um type) +export type selected_courses = Array export type CourseOption = { course_id: number, @@ -63,6 +63,8 @@ export type Slot = { duration: number, location: string, lesson_type: string, + professors_link: string, + professors: Array, // last_updated: string, (is it needed??) } @@ -70,8 +72,6 @@ export type Class = { name: string course_id: number, composed_name: string, - professors: Array, - professors_link: string, slots: Array } @@ -95,12 +95,6 @@ export type Lesson = { schedule: CourseSchedule } -export type MultipleOptions = { - index: number - selected: CourseOption[] - options: CourseOption[][] -} - export type ImportedCourses = { [key: string]: string } diff --git a/src/components/planner/SelectionExtraCoursesModal.tsx b/src/components/planner/SelectionExtraCoursesModal.tsx deleted file mode 100644 index 655fa0ca..00000000 --- a/src/components/planner/SelectionExtraCoursesModal.tsx +++ /dev/null @@ -1,322 +0,0 @@ -import classNames from 'classnames' -import { Dialog, Transition } from '@headlessui/react' -import { Fragment, useEffect, useState, useRef } from 'react' -import Alert, { AlertType } from './Alert' -import { CheckedCourse, Major, MultipleOptions } from '../../@types' -import { getSchoolYear, getSemester } from '../../utils/utils' -import { AcademicCapIcon, ArrowLeftCircleIcon } from '@heroicons//react/24/outline' -import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../pages/TimeTableScheduler' -import { MajorSearchCombobox } from './sidebar/sessionController/course-picker/MajorSearchCombobox' - -type Props = { - majors: Major[] - openHook: [boolean, React.Dispatch>] - majorHook: [Major, React.Dispatch>] - coursesHook: [CheckedCourse[][], React.Dispatch>] - sourceBufferHook: [CheckedCourse[][], React.Dispatch>] - destBufferHook: [CheckedCourse[][], React.Dispatch>] - multipleOptionsHook: [MultipleOptions, React.Dispatch>] - repeatedCourseControlHook: [boolean, React.Dispatch>] -} - -/** - * Modal where the user will be able to select courses from a different major than its main one - */ -const SelectionExtraCoursesModal = ({ - majors, - openHook, - majorHook, - coursesHook, - sourceBufferHook, - destBufferHook, - multipleOptionsHook, - repeatedCourseControlHook, -}: Props) => { - const [major, setMajor] = majorHook - const [isThisOpen, setisThisOpen] = openHook - const [courses, setCourses] = coursesHook - const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = sourceBufferHook - const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = destBufferHook - const [extraMajorEqualToMainMajor, setExtraMajorEqualToMainMajor] = repeatedCourseControlHook - - const [majorQuery, setMajorQuery] = useState('') - const [alertLevel, setAlertLevel] = useState(AlertType.info) - const atLeastOneCourse = courses.some((item) => item?.some((course) => course.checked)) - - const closeModal = () => { - if (major?.name === '' || !atLeastOneCourse) setAlertLevel(AlertType.warning) - - setExtraCoursesModalBuffer([...courses]) - setCourses([courses[0], ...selectionModalCoursesBuffer]) - - setisThisOpen(false) - } - - /** - * If the user checked a single course, if the user checked it to true, it adds to the index 0 of the courses array - * Otherwise it removes it - */ - const handleCheck = (event: React.ChangeEvent, year: number, courseIdx: number) => { - courses[year + 1][courseIdx].checked = event.target.checked - - if (event.target.checked) { - let course_to_add: CheckedCourse = courses[year + 1][courseIdx] - course_to_add.checked = true - - is_null_or_undefined(courses[0]) ? (courses[0] = [course_to_add]) : courses[0].push(course_to_add) - } else { - let course_to_remove: CheckedCourse = courses[year + 1][courseIdx] - let remove_index: number = courses[0].findIndex( - (course) => course.info.course_unit_id === course_to_remove.info.course_unit_id - ) - - course_to_remove.checked = false - courses[0].splice(remove_index, 1) - } - - setCourses([...courses]) - } - - const handleCheckGroup = (event: React.ChangeEvent, year: number) => { - if (event.target.checked) { - courses[year].forEach((course: CheckedCourse) => { - let course_already_in_extra_subarray = - courses[0].findIndex((extra_course) => extra_course.info.course_unit_id === course.info.course_unit_id) == -1 - - if (course_already_in_extra_subarray) courses[0].push(course) - - course.checked = event.target.checked - }) - } else { - courses[year].forEach((course: CheckedCourse) => { - course.checked = event.target.checked - - courses[0].splice( - courses[0].findIndex((related_course) => related_course.info.course_unit_id === course.info.course_unit_id), - 1 - ) - }) - } - - setCourses([...courses]) - } - - const isCourseChecked = (course: CheckedCourse, yearIdx: number, courseIdx: number) => { - let courses_have_valid_value: boolean = !is_null_or_undefined(courses[0]) && courses[0].length > 0 - - return ( - courses_have_valid_value && - (isExtraCourseSet(course) || (isExtraCourseSet(course) && courses[yearIdx + 1][courseIdx].checked)) - ) - } - - useEffect(() => { - setMajorQuery((prev) => `${prev} `) - }, []) - - useEffect(() => { - if (major?.name !== '' && atLeastOneCourse) setAlertLevel(AlertType.success) - else setAlertLevel(AlertType.info) - }, [major, courses, atLeastOneCourse]) - - useEffect(() => { - // Regular courses - for (let year = 1; year < courses.length; year++) { - controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) - } - }, [courses]) - - /** - * If there is a least an extra course (course inside courses[0]) checked, it returns true - */ - const isExtraCourseSet = (course: CheckedCourse): boolean => { - if (is_null_or_undefined(courses[0]) || courses[0].length === 0) return false - - let possible_course_index: number = courses[0].findIndex( - (related_course) => related_course.info.course_unit_id === course.info.course_unit_id - ) - - if (possible_course_index !== -1) { - return courses[0][possible_course_index].checked - } - - return false - } - - return ( - <> - - - -
    -
    - - - {/* Header */} - -
    -
    - -
    - - {`${getSemester()}ºS`} - - - {getSchoolYear()} - -
    -
    - - {/* Credits banner */} - {/* course.checked)} /> */} - - {/* Alert banner */} - - Neste modal pode selecionar as suas Unidades Curriculares de um curso diferente do - principal. - - - {/* Select major dropdown */} - - - {extraMajorEqualToMainMajor ? ( -

    - Já tens este curso selecionado no menu principal! -

    - ) : ( -
    - {major && - courses.slice(1).map((year: CheckedCourse[], yearIdx: number) => ( -
    - {/* Parent checkbox */} -
    - course.checked)} - id={`extra-year-checkbox-${yearIdx}`} - onChange={(event) => handleCheckGroup(event, yearIdx + 1)} - /> - -
    - - {/* Children checkboxes */} -
    - {year.map((course: CheckedCourse, courseIdx: number) => ( -
    - handleCheck(event, yearIdx, courseIdx)} - /> - -
    - ))} -
    -
    - ))} -
    - )} - - {/* Bottom action buttons */} -
    - {/* Right side buttons */} -
    - {/* Go back to the main selection modal button */} - {/* Confirm options button */} - -
    -
    -
    -
    -
    -
    -
    -
    - - ) -} - -/* Masks outer background */ -const OuterMask = () => ( - -
    - -) - -/* Modal inner content custom transition */ -const InnerCustomTransition = ({ children, ...props }: any) => ( - - {children} - -) - -export default SelectionExtraCoursesModal diff --git a/src/components/planner/SelectionModal.tsx b/src/components/planner/SelectionModal.tsx deleted file mode 100644 index 7c53475f..00000000 --- a/src/components/planner/SelectionModal.tsx +++ /dev/null @@ -1,535 +0,0 @@ -import classNames from 'classnames' -import { Dialog, Transition } from '@headlessui/react' -import { Fragment, useEffect, useState } from 'react' -import Alert, { AlertType } from './Alert' -import { Link } from 'react-router-dom' -import { CheckedCourse, Course, Major } from '../../@types' -import { getSchoolYear, getSemester, config, getPath } from '../../utils/utils' -import { - AcademicCapIcon, - CheckCircleIcon, - HomeIcon, - InboxArrowDownIcon, - PencilSquareIcon, - PlusIcon, - XCircleIcon, -} from '@heroicons//react/24/solid' -import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../pages/TimeTableScheduler' -import { MajorSearchCombobox } from './sidebar/sessionController/course-picker/MajorSearchCombobox' -import CreditsBanner from './CreditsBanner' - -type Props = { - majors: Major[] - openHook: [boolean, React.Dispatch>] - majorHook: [Major, React.Dispatch>] - coursesHook: [CheckedCourse[][], React.Dispatch>] - extraCoursesActiveHook: [boolean, React.Dispatch>] - extraCoursesModalOpenHook: [boolean, React.Dispatch>] - sourceBufferHook: [CheckedCourse[][], React.Dispatch>] - destBufferHook: [CheckedCourse[][], React.Dispatch>] - repeatedCourseControlHook: [boolean, React.Dispatch>] -} - -/** - * Main modal where a user can select the courses for their main major - */ -const SelectionModal = ({ - majors, - openHook, - majorHook, - coursesHook, - extraCoursesActiveHook, - extraCoursesModalOpenHook, - sourceBufferHook, - destBufferHook, - repeatedCourseControlHook, -}: Props) => { - const [major, setMajor] = majorHook - const [isThisOpen, setIsThisOpen] = openHook - const [courses, setCourses] = coursesHook - const [extraCoursesActive, setExtraCoursesActive] = extraCoursesActiveHook - const [isExtraUcsModelOpen, setIsExtraUcsModalOpen] = extraCoursesModalOpenHook - const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = sourceBufferHook - const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = destBufferHook - const [chosenMajorMainModalEqualToExtra, setChosenMajorMainModalEqualToExtra] = repeatedCourseControlHook - const [coursesAlreadyTaken, setCoursesAlreadyTaken] = useState(false) - const [mainMajorAlreadyAnExtra, setMainMajorAlreadyAnExtra] = useState(false) - //const [extraCoursesQuery, setExtraCoursesQuery] = useState('') - const [alertLevel, setAlertLevel] = useState(AlertType.info) - const atLeastOneCourse = courses.some((item) => item?.some((course) => course.checked)) - - const closeModal = () => { - if (major?.name !== '' && atLeastOneCourse) { - setIsThisOpen(false) - } else { - setAlertLevel(AlertType.warning) - } - } - - const openModal = () => { - setIsThisOpen(true) - } - - const getDisplayExtraCourseText = (course: Course) => - course === null ? '' : `${course?.name} (${course?.acronym}, ${course?.course})` - - const handleCheck = (event: React.ChangeEvent, year: number, courseIdx: number) => { - if (is_null_or_undefined(year)) return - - courses[year + 1][courseIdx].checked = event.target.checked - setCourses([...courses]) - - setSelectionModalCoursesBuffer([...courses]) - } - - const handleCheckGroup = (event: React.ChangeEvent, year: number) => { - if (is_null_or_undefined(year)) return - - let newGroupEntry: CheckedCourse[] = [] - courses[year + 1].forEach((course: CheckedCourse) => { - course.checked = event.target.checked - newGroupEntry.push(course) - }) - courses[year + 1] = newGroupEntry - - setCourses([...courses]) - setSelectionModalCoursesBuffer([...courses]) - } - - const openExtraCoursesModal = () => { - setSelectionModalCoursesBuffer([...courses.slice(1)]) - - setCourses([courses[0], ...extraCoursesModalBuffer.slice(1)]) - - setIsExtraUcsModalOpen(true) - } - - const extraCoursesButton = () => ( - - ) - - const replaceExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { - const checkbox: HTMLElement = document.getElementById(checkboxId) - const removalIcon: HTMLElement = document.getElementById(XMarkIconId) - - if (!checkbox || !removalIcon) return - - checkbox.style.display = 'none' - removalIcon.style.display = 'block' - } - - const recoverExtraCourseCheckbox = (checkboxId: string, XMarkIconId: string) => { - const checkbox = document.getElementById(checkboxId) - const removalIcon: HTMLElement = document.getElementById(XMarkIconId) - - if (!checkbox || !removalIcon) return - - checkbox.style.display = 'block' - removalIcon.style.display = 'none' - } - - const removeCourseFromExtraCourses = (courseIdx: number) => { - courses[0].splice(courseIdx, 1) - setCourses([...courses]) - - if (courses[0].length === 0) { - extraCoursesModalBuffer[0] = [] - extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { - courseArray.forEach((course) => (course.checked = false)) - }) - } - } - - const removeExtraCourses = () => { - courses[0] = [] - setCourses([...courses]) - - extraCoursesModalBuffer[0] = [] - extraCoursesModalBuffer.forEach((courseArray: CheckedCourse[]) => { - courseArray.forEach((course) => (course.checked = false)) - }) - setExtraCoursesActive(false) - } - - /** - * Displays vertical list of the extra courses the user selected - */ - const showUcsExtra = () => { - return ( - <> - {/* Courses checkboxes */} -
    -
    - {/* Parent checkbox */} -
    { - replaceExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') - }} - onMouseLeave={() => { - recoverExtraCourseCheckbox('extraCourseGroupCheckbox', 'remove-extra-courses-icon') - }} - > - - - -
    - -
    - {courses[0] !== null && courses[0] !== undefined ? ( - courses[0].map((course: CheckedCourse, courseIdx: number) => ( -
    { - replaceExtraCourseCheckbox( - `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, - `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` - ) - }} - onMouseLeave={() => { - recoverExtraCourseCheckbox( - `added-extra-course-checkbox-${course?.info.course_unit_year}-${courseIdx}`, - `XMarkIcon-for-${course?.info.course_unit_year}-${courseIdx}` - ) - }} - > - { - removeCourseFromExtraCourses(courseIdx) - }} - /> - - -
    - )) - ) : ( - <> - )} -
    -
    -
    - - ) - } - - const alreadyInExtraCourses = (course: CheckedCourse[][]) => { - if ( - is_null_or_undefined(course[1]) || - is_null_or_undefined(course[0]) || - is_null_or_undefined(course[0][0]) || - is_null_or_undefined(course[1][0]) - ) { - return false - } - - return course[0][0]?.info.course_unit_id === course[1][0]?.info.course_unit_id - } - - useEffect(() => { - if (major?.name !== '' && atLeastOneCourse) setAlertLevel(AlertType.success) - else setAlertLevel(AlertType.info) - }, [major, courses, atLeastOneCourse]) - - const warnIfMajorIsTheSameBetween = (courseLeft: CheckedCourse[], courseRight: CheckedCourse[][]) => { - if (is_null_or_undefined(courseLeft) || is_null_or_undefined(courseLeft[0])) return false - - let areLeftAndRightMajorsEqual: boolean = - courseRight - .flat() - .findIndex((extra_course) => extra_course.info.course_unit_id === courseLeft[0].info.course_unit_id) !== -1 - - areLeftAndRightMajorsEqual ? setMainMajorAlreadyAnExtra(true) : setMainMajorAlreadyAnExtra(false) - } - - useEffect(() => { - // Regular courses - for (let year = 1; year < courses.length; year++) { - controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) - } - - // Extra courses - if (courses[0] !== undefined && courses[0] !== null) { - controlCoursesGroupCheckbox(courses[0], 'extraCourseGroupCheckbox') - } - - warnIfMajorIsTheSameBetween(courses[0], courses.slice(1)) - }, [courses]) - - useEffect(() => { - alreadyInExtraCourses(courses.slice(1)) ? setCoursesAlreadyTaken(true) : setCoursesAlreadyTaken(false) - }, [courses]) - - return ( - <> -
    - {/* Edit button */} - -
    - - - - -
    -
    - - - {/* Header */} - -
    -
    - -
    - - {`${getSemester()}ºS`} - - - {getSchoolYear()} - -
    -
    - - {/* Credits banner */} - course.checked)} /> - - {/* Alert banner */} - - Selecione o seu curso principal, seguido das Unidades Curriculares{' '} - pretendidas. - - - {/* Select major dropdown */} - - -
    - {extraCoursesActive ?
    {showUcsExtra()}
    : <>} - - {chosenMajorMainModalEqualToExtra ? ( -
    -

    - Já tens este curso selecionado no menu de seleção de outros cursos -

    -
    - ) : ( -
    - {coursesAlreadyTaken ? ( - <> - ) : ( - major && - courses.slice(1).map((year: CheckedCourse[], yearIdx: number) => ( -
    - {/* Parent checkbox */} -
    - course.checked)} - id={`year-checkbox-${yearIdx}`} - onChange={(event) => handleCheckGroup(event, yearIdx)} - /> - -
    - - {/* Children checkboxes */} -
    - {year.map((course: CheckedCourse, courseIdx: number) => ( -
    - handleCheck(event, yearIdx, courseIdx)} - /> - -
    - ))} -
    -
    - )) - )} -
    - )} -
    - - {/* Bottom action buttons */} -
    - {/* Left side buttons */} -
    - {/* Add / edit extra ucs */} - {major !== null ? extraCoursesButton() : <>} - {/* Contact us link */} - - - {/* Go back to about page button */} - -
    - - {/* Right side buttons */} -
    - {/* Confirm options button */} - -
    -
    -
    -
    -
    -
    -
    -
    - - ) -} - -/* Masks outer background */ -const OuterMask = () => ( - -
    - -) - -/* Modal inner content custom transition */ -const InnerCustomTransition = ({ children, ...props }: any) => ( - - {children} - -) - -export default SelectionModal diff --git a/src/components/planner/Sidebar.tsx b/src/components/planner/Sidebar.tsx index e50724c6..65936394 100644 --- a/src/components/planner/Sidebar.tsx +++ b/src/components/planner/Sidebar.tsx @@ -7,8 +7,8 @@ import CoursesController from './sidebar/CoursesController' type Props = { majors: Major[] + majorIndexHook: [number, React.Dispatch>] openHook: [boolean, React.Dispatch>] - majorHook: [Major, React.Dispatch>] coursesHook: [CheckedCourse[][], React.Dispatch>] extraCoursesActiveHook: [boolean, React.Dispatch>] extraCoursesModalOpenHook: [boolean, React.Dispatch>] @@ -77,8 +77,8 @@ const defaultOptionsList = [ */ const Sidebar = ({ majors, + majorIndexHook, openHook, - majorHook, coursesHook, extraCoursesActiveHook, extraCoursesModalOpenHook, @@ -115,9 +115,7 @@ const Sidebar = ({
    >] selectedOptionHook: [number, React.Dispatch>] - majors: Major[], - majorHook: [Major, React.Dispatch>] currentOption: CourseOption[] multipleOptionsHook: [MultipleOptions, React.Dispatch>] checkCourses: (course_unit_id: number[], importedCourses: ImportedCourses) => void @@ -30,8 +28,6 @@ type Props = { const SelectedOptionController = ({ optionsListHook, selectedOptionHook, - majors, - majorHook, currentOption, multipleOptionsHook, checkCourses, @@ -101,13 +97,13 @@ const SelectedOptionController = ({ } return ( -
    -
    +
    +
    - - + + - + { if (e.key === 'Enter') { @@ -147,9 +143,13 @@ const SelectedOptionController = ({ onScroll={scroll} />
    -
    - - +
    + +
    diff --git a/src/components/planner/sidebar/SessionController.tsx b/src/components/planner/sidebar/SessionController.tsx index 25607c60..dd0d2394 100644 --- a/src/components/planner/sidebar/SessionController.tsx +++ b/src/components/planner/sidebar/SessionController.tsx @@ -1,15 +1,13 @@ import { CheckedCourse, Major, CourseOption, MultipleOptions } from '../../../@types' -// import CoursePicker from './sessionController/CoursePicker' +// import OldCoursePicker from './sessionController/CoursePicker' import CoursePicker from './sessionController/CoursePicker' import CollaborativeSession from './sessionController/CollaborativeSession' import Export from './sessionController/Export' type Props = { - majors: Major[] openHook: [boolean, React.Dispatch>] - majorHook: [Major, React.Dispatch>] coursesHook: [CheckedCourse[][], React.Dispatch>] extraCoursesActiveHook: [boolean, React.Dispatch>] extraCoursesModalOpenHook: [boolean, React.Dispatch>] @@ -24,9 +22,7 @@ type Props = { * Sidebar with all the main schedule interactions */ const SessionController = ({ - majors, openHook, - majorHook, coursesHook, extraCoursesActiveHook, extraCoursesModalOpenHook, @@ -38,10 +34,9 @@ const SessionController = ({ }: Props) => { return (
    + {/* Course Picker */} + {/* */}
    diff --git a/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx b/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx index 71bd46ab..d5ce36a1 100644 --- a/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/CopyOption.tsx @@ -1,13 +1,12 @@ import { useState } from 'react' import { Button } from '../../../ui/button' import { CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/24/outline' -import { Major, CourseOption } from '../../../../@types' +import { CourseOption } from '../../../../@types' import { useToast } from '../../../ui/use-toast' import { Buffer } from 'buffer' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' type Props = { - majorHook: [Major, React.Dispatch>] currentOption: CourseOption[] className?: string } @@ -15,52 +14,32 @@ type Props = { /** * Copy currently selected option to clipboard */ -const CopyOption = ({ majorHook, currentOption, className }: Props) => { +const CopyOption = ({ currentOption, className }: Props) => { const { toast } = useToast() - const [major, setMajor] = majorHook const [icon, setIcon] = useState(false) /** * Function that converts schedule to string - * @param major selected major * @param selectedOption current schedule * @returns stringified schedule */ - const optionToString = (major: Major, selectedOption: CourseOption[]) => { - let copyOption: string = major.id.toString() - let extraUCsStrs: { [id: string]: string } = {} + const optionToString = (selectedOption: CourseOption[]) => { + let copyOption: string = '' for (let i = 0; i < selectedOption.length; i++) { - let uc_course_id = selectedOption[i].course.info.course_id let uc_course_unit_id = selectedOption[i].course.info.course_unit_id - if (uc_course_id === major.id) { - copyOption += ';' + uc_course_unit_id + '#' - if (selectedOption[i].option == null) { - copyOption += 'null' - } else { - copyOption += selectedOption[i].option.class_name - } + copyOption += ';' + uc_course_unit_id + '#' + if (selectedOption[i].option == null) { + copyOption += 'null' } else { - if (extraUCsStrs[uc_course_id] == null) { - extraUCsStrs[uc_course_id] = uc_course_id + '' - } - - extraUCsStrs[uc_course_id] += ';' + uc_course_unit_id + '#' - if (selectedOption[i].option == null) { - extraUCsStrs[uc_course_id] += 'null' - } else { - extraUCsStrs[uc_course_id] += selectedOption[i].option.class_name - } + copyOption += selectedOption[i].option.class_name } } - for (let key in extraUCsStrs) { - copyOption += '|' + extraUCsStrs[key] - } return Buffer.from(copyOption).toString('base64') } const copyOption = () => { - navigator.clipboard.writeText(optionToString(major, currentOption)) + navigator.clipboard.writeText(optionToString(currentOption)) setIcon(true) toast({ title: 'Horário copiado', description: 'Podes colar o horário noutra opção ou enviar a um amigo.' }) setTimeout(() => { diff --git a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx index 83c3e376..cee9bb51 100644 --- a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx @@ -6,7 +6,6 @@ import { CourseSchedule, ImportedCourses, } from '../../../../@types' -import getMajors from '../../../../api/backend' import { getCourseTeachers } from '../../../../utils/utils' import { Button } from '../../../ui/button' import { ClipboardDocumentIcon } from '@heroicons/react/24/outline' @@ -19,16 +18,13 @@ import fillOptions from './fillOptions' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' type Props = { - majors: Major[] - majorHook: [Major, React.Dispatch>] multipleOptionsHook: [MultipleOptions, React.Dispatch>] checkCourses: (course_unit_id: number[], importedCourses: ImportedCourses) => void isImportedOptionHook: [boolean, React.Dispatch>] } -const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isImportedOptionHook }: Props) => { +const PasteOption = ({ multipleOptionsHook, checkCourses, isImportedOptionHook }: Props) => { const [multipleOptions, setMultipleOptions] = multipleOptionsHook - const [major, setMajor] = majorHook const [modalOpen, setModalOpen] = useState(false) const [_, setIsImportedOption] = isImportedOptionHook const { toast } = useToast() @@ -67,9 +63,8 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI setIsDropdownOpen(false) - //ex: 36;1033#3LEIC02;1062#null;1044#null;1031#null;980#null;969#null + //ex: 1033#3LEIC02;1062#null;1044#null;1031#null;980#null;969#null var tokens: string[] = decoded_url.split(';') - const major_id = Number(tokens.shift()) var importedCourses: ImportedCourses = {} tokens.forEach((token) => { @@ -77,14 +72,6 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI importedCourses[course[0]] = course[1] }) - if (major_id !== major.id) { - setImportingCoursesUnitOptions(importedCourses) - const importingMajor = majors.find((major) => major.id === major_id) - setImportingMajor(importingMajor) - setModalOpen(true) - return - } - // Unchecked imported courses units const unCheckedCourses = Object.keys(importedCourses).filter((course_unit_id) => { return ( @@ -114,16 +101,12 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI /** * - * @param options Decoded URL with major and courses units options + * @param options Decoded URL with courses units options * @returns true if the url is valid */ const isValidURL = (url: string) => { const tokens = url.split(';') - if (tokens.length < 2) return false //At leat a major and one course - - // Validate major - const major_id = tokens.shift() - if (isNaN(Number(major_id))) return false + if (tokens.length < 1) return false //At leat one course // Validate courses: course_unit_id#selected_option_id tokens.forEach((token) => { @@ -135,82 +118,6 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI return true } - const importScheduleWithDifferentMajor = async () => { - //get importing major courses units information - try { - var course_units = await getMajors.getCourses(importingMajor) - } catch (e: any) { - console.log(e) - return - } - - let imported_course_units: CourseOption[] = [] - for (const [course_unit_id, class_name_option] of Object.entries(importingCoursesUnitOptions)) { - //get the course_unit info - const course_unit_info = course_units.find((course_unit) => course_unit.course_unit_id === Number(course_unit_id)) - - const checked_course: CheckedCourse = { - checked: true, - info: course_unit_info, - } - - // get all the course unit schedules - try { - var course_schedules: CourseSchedule[] = await getMajors.getCourseSchedule(checked_course) - } catch (e: any) { - console.log(e) - } - - // Find the selected schedule - const selected_option = - class_name_option !== 'null' - ? course_schedules.find( - (schedule) => schedule.class_name === class_name_option && schedule.lesson_type !== 'T' - ) - : null - - const course_option: CourseOption = { - shown: { - T: true, - TP: true, - }, - locked: false, - course: checked_course, - option: selected_option, - schedules: course_schedules, - teachers: [], - filteredTeachers: [], - } - - let course_teachers = getCourseTeachers(course_option) - course_option.teachers = course_teachers - course_option.filteredTeachers = course_teachers - - imported_course_units.push(course_option) - } - - // Create the new option with the imported courses - const importedOption = { - name: 'Importado', - courses: imported_course_units, - } - - setMultipleOptions((prevMultipleOptions) => { - const newOptions = [...prevMultipleOptions.options] - newOptions[prevMultipleOptions.index] = importedOption.courses - const value = { - index: prevMultipleOptions.index, - selected: importedOption.courses, - options: newOptions, - } - - return value - }) - setMajor(importingMajor) - setModalOpen(false) - setImportingCoursesUnitOptions(null) - } - return ( <> {isClipboardSupported ? ( @@ -266,14 +173,6 @@ const PasteOption = ({ majors, majorHook, multipleOptionsHook, checkCourses, isI )} - { - setModalOpen(false) - }} - confirmationAction={importScheduleWithDifferentMajor} - /> ) } diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 375b0ae8..fe16bd82 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -3,12 +3,12 @@ import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' import { MajorSearchCombobox } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' -import { CheckedCourse, Course, Major } from '../../../../@types' +import { CheckedCourse } from '../../../../@types' +import { Course, Major } from '../../../../@types/new_index' +import { groupCoursesByYear } from '../../../../utils/utils' type Props = { - majors: Major[] openHook: [boolean, React.Dispatch>] - majorHook: [Major, React.Dispatch>] coursesHook: [CheckedCourse[][], React.Dispatch>] extraCoursesActiveHook: [boolean, React.Dispatch>] extraCoursesModalOpenHook: [boolean, React.Dispatch>] @@ -18,9 +18,9 @@ type Props = { } const CoursePicker = ({ - majors, + // majors, + // majorIndexHook, openHook, - majorHook, coursesHook, extraCoursesActiveHook, extraCoursesModalOpenHook, @@ -28,7 +28,7 @@ const CoursePicker = ({ destBufferHook, repeatedCourseControlHook, }: Props) => { - const [major, setMajor] = majorHook + // const [majorIndex, setMajorIndex] = majorIndexHook return ( @@ -48,7 +48,7 @@ const CoursePicker = ({
    - +
    diff --git a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx index f76e257d..d301a522 100644 --- a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx @@ -355,7 +355,7 @@ const CoursePicker = ({ {/* Select major dropdown */} - +
    {extraCoursesActive ?
    {showUcsExtra()}
    : <>} diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx new file mode 100644 index 00000000..635b24bb --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -0,0 +1,29 @@ +import { CourseInfo } from '../../../../../@types/new_index' + +type Props = { + courses: CourseInfo[] +} + +export const CourseYearCheckboxes = ({ courses }) => { + return ( + <> +
    + {courses.map((course: CourseInfo, courseIdx: number) => ( +
    + + +
    + ))} +
    + + ) +} diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 8900af83..60f3f079 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -1,14 +1,34 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' +import { CourseInfo } from '../../../../../@types/new_index' +import { CourseYearCheckboxes } from './CourseYearCheckboxes' + +type Props = { + courses: CourseInfo[][] + pickedCourses: CourseInfo[] +} + +const CourseYearTabs = ({ courses, pickedCourses }: Props) => { + const isCourseChecked = (idx) => { + for (const course of pickedCourses) { + if (course.id === idx) { + return true + } + } + + return false + } -const CourseYearTabs = ({}) => { return ( - + - Account - Password + {courses.map((yearCourses, idx) => ( + `${idx + 1}º Ano` + ))} - Make changes to your account here. - Change your password here. + + {courses.map((yearCourses, idx) => ( + {} + ))} ) } diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 50d02d35..e7ad59c3 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -1,133 +1,137 @@ import classNames from 'classnames' -import { Combobox, Transition } from '@headlessui/react' import { Major } from '../../../../../@types' -import { Fragment, useState, useEffect, SetStateAction } from 'react' +import { Fragment, useState, useEffect, SetStateAction, useContext } from 'react' import { CheckIcon, ChevronUpDownIcon } from '@heroicons//react/24/solid' +import MajorContext from '../../../../../contexts/MajorContext' -type Props = { - majors: Major[] - majorHook: [Major, React.Dispatch>] -} +import { cn } from '../../../../../utils/utils' +import { Button } from '../../../../ui/button' +import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../../../../ui/command' +import { Popover, PopoverContent, PopoverTrigger } from '../../../../ui/popover' /** * Combobox also with a searchbar in which the user will be able to write the major he / she * wants to select courses from. They can type the major or click on the rightmost corner to open * the list of possible majors. */ -export const MajorSearchCombobox = ({ majors, majorHook }: Props) => { - const [major, setMajor] = majorHook - const [majorQuery, setMajorQuery] = useState('') - const [selected, setSelected] = useState(major) - - const match = (str: string, query: string, simple?: boolean) => - simple - ? str.toLowerCase().replace(/\s+/g, '').includes(query.toLowerCase().replace(/\s+/g, '')) - : str - .toLowerCase() - .normalize('NFD') - .replace(/\p{Diacritic}/gu, '') - .replace(/\s+/g, '') - .replace('.', '') - .replace(':', '') - .includes(query.toLowerCase().replace(/\s+/g, '')) - - const filteredMajors = - majors !== null && majors?.length !== 0 && Array.isArray(majors) - ? majorQuery === '' - ? majors - : majors.filter( - (major: Major) => - match(major?.name, majorQuery, true) || - match(major?.name, majorQuery, false) || - match(major?.acronym, majorQuery, true) || - match(major?.acronym, majorQuery, false) - ) - : [] - - const getDisplayMajorText = (major: Major) => (major === null ? '' : `${major?.name} (${major?.acronym})`) - - useEffect(() => { - setMajorQuery((prev) => `${prev} `) - }, []) +export const MajorSearchCombobox = () => { + const { majors, setMajors, majorIndex, setMajorIndex } = useContext(MajorContext) + const [open, setOpen] = useState(false) + const [value, setValue] = useState('') return ( - { - setMajor(value) - setSelected(value) - }} - > -
    - getDisplayMajorText(major)} - onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} - /> - - -
    - - setMajorQuery('')} - > - - {filteredMajors.length === 0 && majorQuery !== '' ? ( -
    - Nenhum curso encontrado com este nome. -
    - ) : ( - filteredMajors.map((major: Major, majorIdx: number) => ( - - `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ - active ? 'bg-primary text-white' : 'text-gray-900' - }` - } - value={major} + + + + + + + + Nenhum curso encontrado. + + {majors.map((major) => ( + { + setValue(currentValue === value ? '' : currentValue) + setMajorIndex(currentValue === value ? null : major.id) + setOpen(false) + }} > - {({ selected, active }) => ( - <> - - {getDisplayMajorText(major)} - - {selected && ( - - - )} - - )} - - )) - )} -
    -
    -
    + + {major.name} + + ))} + + + + ) + + // return ( + // { + // setMajorIndex(value) + // }} + // > + //
    + // getDisplayMajorText(major)} + // onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} + // /> + // + // + //
    + + // setMajorQuery('')} + // > + // + // {filteredMajors.length === 0 && majorQuery !== '' ? ( + //
    + // Nenhum curso encontrado com este nome. + //
    + // ) : ( + // filteredMajors.map((major: Major, majorIdx: number) => ( + // + // `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ + // active ? 'bg-primary text-white' : 'text-gray-900' + // }` + // } + // value={major} + // > + // {({ selected, active }) => ( + // <> + // + // {getDisplayMajorText(major)} + // + // {selected && ( + // + // + // )} + // + // )} + // + // )) + // )} + //
    + //
    + //
    + // ) } diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx new file mode 100644 index 00000000..401904c6 --- /dev/null +++ b/src/components/ui/command.tsx @@ -0,0 +1,138 @@ +import * as React from 'react' +import { type DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' + +import { cn } from '../../utils/utils' +import { Dialog, DialogContent } from '../../../src/components/ui/dialog' + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
    + + +
    +)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = 'CommandShortcut' + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} diff --git a/src/contexts/CourseContext.tsx b/src/contexts/CourseContext.tsx new file mode 100644 index 00000000..75518c31 --- /dev/null +++ b/src/contexts/CourseContext.tsx @@ -0,0 +1,18 @@ +import { createContext, SetStateAction } from 'react' +import { CourseInfo } from '../@types/new_index' + +interface MajorContextContent { + pickedCourses: CourseInfo[] + setPickedCourses: React.Dispatch> + courseInfo: CourseInfo[] + setCourseInfo: React.Dispatch> +} + +const CourseContext = createContext({ + pickedCourses: [], + setPickedCourses: (pickedCourses: CourseInfo[]) => {}, + courseInfo: [], + setCourseInfo: (courseInfo: CourseInfo[]) => {}, +}) + +export default CourseContext diff --git a/src/contexts/MajorContext.tsx b/src/contexts/MajorContext.tsx new file mode 100644 index 00000000..4efb2757 --- /dev/null +++ b/src/contexts/MajorContext.tsx @@ -0,0 +1,19 @@ +import { Context, Dispatch, SetStateAction, useState } from 'react' +import { createContext } from 'react' +import { Major } from '../@types/new_index' + +interface MajorContextContent { + majors: Major[] + setMajors: Dispatch> + majorIndex: number + setMajorIndex: Dispatch> +} + +const MajorContext: Context = createContext({ + majors: [], + setMajors: (majors: Major[]) => {}, + majorIndex: null, + setMajorIndex: (majorIndex: number) => {}, +}) + +export default MajorContext diff --git a/src/pages/TimeTableScheduler.tsx b/src/pages/TimeTableScheduler.tsx index 92bb37a3..2213e6eb 100644 --- a/src/pages/TimeTableScheduler.tsx +++ b/src/pages/TimeTableScheduler.tsx @@ -6,6 +6,8 @@ import { CheckedCourse, Course, CourseOption, CourseSchedule, ImportedCourses, M import { useMajor, useCourses } from '../hooks' import fillOptions from '../components/planner/sidebar/selectedOptionController/fillOptions' import { useToast } from '../components/ui/use-toast' +import { CourseInfo } from '../@types/new_index' +import MajorContext from '../contexts/MajorContext' export const removeDuplicatesFromCourseArray = (courses: CheckedCourse[]): CheckedCourse[] => { let frequency: Map = new Map() @@ -49,6 +51,52 @@ export const controlCoursesGroupCheckbox = (courses: CheckedCourse[], groupCheck } const TimeTableSchedulerPage = () => { + // ============================================================================================================================== + // ========================================================= OLD STATES ========================================================= + const [major, setMajor, majorChangedRef] = useMajor('niaefeup-tts.major') // the picked major + const [extraCoursesMajor, setExtraCoursesMajor, extraCoursesMajorChangedRef] = useMajor('niaefeup-tts.extra-major') + const [checkedCourses, setCheckedCourses] = useCourses('niaefeup-tts.courses') // courses for the major with frontend properties + const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = useCourses('niaefeup-tts.courses-buffer') + const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = useCourses('niaefeup-tts.extra-courses-buffer') + const [extraMajorEqualToMainMajor, setExtraMajorEqualToMainMajor] = useState(false) + const [chosenMajorMainModalEqualToExtra, setChosenMajorMainModalEqualToExtra] = useState(false) + const [extraCoursesActive, setExtraCoursesActive] = useState(false) + const [multipleOptions, setMultipleOptions] = useState({ + index: 0, + selected: [], + options: [], + }) // schedule options and selected schedule + const totalSelected = useMemo( + () => multipleOptions.options.map((co: CourseOption[]) => co.filter((item) => item.option !== null)).flat(), + [multipleOptions] + ) + // =============================================================================================================================== + + // ============================================================================== + // ============================ NEW STATES AND HOOKS ============================ + const [majors, setMajors] = useState([]) // all the [majors]]] + const [majorIndex, setMajorIndex] = useState(null) + const [courseInfo, setCourseInfo] = useState([]) + const [pickedCourses, setPickedCourses] = useState([]) + + useEffect(() => { + getCoursesForMajor(majors[majorIndex]) + }, [majorIndex]) + + // ============================================================================== + // ================================== FUNCTION ================================== + + const getCoursesForMajor = (major: Major) => { + if (majorIndex === null) return + + BackendAPI.getCourses(major).then((courses: CourseInfo[]) => { + setCourseInfo(courses) + }) + } + + // ============================ NEW STATES AND HOOKS ============================ + // ============================================================================== + // add check property to courses const courseToCheckedCourse = (majorCourses: Course[][]): CheckedCourse[][] => majorCourses.map((year: Course[]) => @@ -58,27 +106,6 @@ const TimeTableSchedulerPage = () => { })) ) - /** - * Considering that the yearCourses is sorted by the course_unit_year field in ascending order, the function groups the major courses by year. - * @param yearCourses All the courses in a major. - * @returns The courses grouped by year. - * @example input: [{ course: 1, year: 1 }, { course: 3, year: 1 }, { course: 2, year: 2 }] - * @example output: [[{ course: 1, year: 1 }, { course: 3, year: 1 }], [{ course: 2, year: 2 }]] - */ - const groupMajorCoursesByYear = (yearCourses: Course[]): Course[][] => { - let majorCourses: Course[][] = [] - let currYear = 0 - for (let i = 0; i < yearCourses.length; i++) { - if (yearCourses[i].course_unit_year !== currYear) { - currYear += 1 - majorCourses.push([yearCourses[i]]) - } else { - majorCourses[currYear - 1].push(yearCourses[i]) - } - } - return majorCourses - } - const getEmptyCourseOption = (course: CheckedCourse, schedules: CourseSchedule[]): CourseOption => { let teachers = [] schedules.forEach((schedule, idx) => { @@ -123,25 +150,6 @@ const TimeTableSchedulerPage = () => { return checkedCourses[0].length > 0 } - const [major, setMajor, majorChangedRef] = useMajor('niaefeup-tts.major') // the picked major - const [extraCoursesMajor, setExtraCoursesMajor, extraCoursesMajorChangedRef] = useMajor('niaefeup-tts.extra-major') - const [majors, setMajors] = useState([]) // all the [majors]]] - const [checkedCourses, setCheckedCourses] = useCourses('niaefeup-tts.courses') // courses for the major with frontend properties - const [selectionModalCoursesBuffer, setSelectionModalCoursesBuffer] = useCourses('niaefeup-tts.courses-buffer') - const [extraCoursesModalBuffer, setExtraCoursesModalBuffer] = useCourses('niaefeup-tts.extra-courses-buffer') - const [extraMajorEqualToMainMajor, setExtraMajorEqualToMainMajor] = useState(false) - const [chosenMajorMainModalEqualToExtra, setChosenMajorMainModalEqualToExtra] = useState(false) - const [extraCoursesActive, setExtraCoursesActive] = useState(false) - const [multipleOptions, setMultipleOptions] = useState({ - index: 0, - selected: [], - options: [], - }) // schedule options and selected schedule - const totalSelected = useMemo( - () => multipleOptions.options.map((co: CourseOption[]) => co.filter((item) => item.option !== null)).flat(), - [multipleOptions] - ) - /** * If there are chosen courses, the SelectionModal will be open and closed otherwise */ @@ -158,26 +166,6 @@ const TimeTableSchedulerPage = () => { const [importingCoursesUnitOptions, setImportingCoursesUnitOptions] = useState(null) const { toast } = useToast() - const getCoursesForMajor = (major: Major, majorChangedRef) => { - if (major === null || (majorChangedRef.current === false && checkedCourses.length > 0)) return - - let finalNewCheckedCourses: CheckedCourse[][] - - if (checkedCourses[0] === undefined) { - finalNewCheckedCourses = [[]] - } else { - finalNewCheckedCourses = [checkedCourses[0]] - } - - BackendAPI.getCourses(major).then((courses: Course[]) => { - const majorCourses = groupMajorCoursesByYear(courses) - const newCheckedCourses = courseToCheckedCourse(majorCourses) - let uCC = updateCheckedCourses(newCheckedCourses, multipleOptions.selected) - majorChangedRef.current = false - setCheckedCourses([...uCC]) - }) - } - useEffect(() => { if (totalSelected.length === 0) return StorageAPI.setOptionsStorage(multipleOptions) @@ -193,7 +181,8 @@ const TimeTableSchedulerPage = () => { // once a major has been picked => fetch courses for the major useEffect(() => { - getCoursesForMajor(major, majorChangedRef) + // esta função mudar o checkedcourses + getCoursesForMajor(major) }, [major, majorChangedRef, checkedCourses, setCheckedCourses]) /** @@ -206,7 +195,7 @@ const TimeTableSchedulerPage = () => { if (extraCoursesMajor.acronym === major.acronym && !chosenMajorMainModalEqualToExtra) { setExtraMajorEqualToMainMajor(true) } else { - getCoursesForMajor(extraCoursesMajor, extraCoursesMajorChangedRef) + getCoursesForMajor(extraCoursesMajor) if (extraMajorEqualToMainMajor) setExtraMajorEqualToMainMajor(false) } @@ -399,29 +388,31 @@ const TimeTableSchedulerPage = () => { console.log(majors) return ( -
    - {/* Schedule Preview */} -
    -
    - + +
    + {/* Schedule Preview */} +
    +
    + +
    -
    - {/* Sidebar */} - -
    + {/* Sidebar */} + +
    + ) } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index a28f9c68..3b94a64b 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,8 +1,10 @@ +import React, { FC, ComponentProps } from 'react' import config from '../config/prod.json' import dev_config from '../config/local.json' import { CourseOption, CourseSchedule, Lesson } from '../@types' -import { type ClassValue, clsx } from "clsx" -import { twMerge } from "tailwind-merge" +import { CourseInfo } from '../@types/new_index' +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' const minHour = 8 const maxHour = 23 const dayNames = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'] @@ -18,7 +20,6 @@ function cn(...inputs: ClassValue[]) { * @returns The complete path with the prefix. */ const getPath = (simplePath: string) => { - return config.pathPrefix + simplePath } @@ -75,22 +76,22 @@ const timesCollide = (first: CourseSchedule, second: CourseSchedule) => { } const schedulesConflict = (first, second) => { - if (first.day !== second.day) return false; - - const firstStart = parseFloat(first.start_time); - const secondStart = parseFloat(second.start_time); - const firstDuration = parseFloat(first.duration); - const secondDuration = parseFloat(second.duration); - const firstEnd = firstStart + firstDuration; - const secondEnd = secondStart + secondDuration; + if (first.day !== second.day) return false + + const firstStart = parseFloat(first.start_time) + const secondStart = parseFloat(second.start_time) + const firstDuration = parseFloat(first.duration) + const secondDuration = parseFloat(second.duration) + const firstEnd = firstStart + firstDuration + const secondEnd = secondStart + secondDuration - return (firstStart < secondStart && firstEnd > secondStart) || (firstStart >= secondStart && firstStart < secondEnd); + return (firstStart < secondStart && firstEnd > secondStart) || (firstStart >= secondStart && firstStart < secondEnd) } const getScheduleOptionDisplayText = (option: CourseSchedule | null) => { // prioritize single class name const classTitle = option.class_name !== null ? option.class_name : option.composed_class_name - const professor_acronyms = option.professor_information.map(prof_info => prof_info.acronym) + const professor_acronyms = option.professor_information.map((prof_info) => prof_info.acronym) return [classTitle, professor_acronyms, convertWeekday(option.day), getLessonBoxTime(option)].join(', ') } @@ -174,21 +175,20 @@ const getCourseTeachers = (courseOption: CourseOption) => { let teachers = [] courseOption.schedules.forEach((schedule, idx) => { if (schedule.lesson_type !== 'T') { - schedule.professor_information.forEach(prof_info => { - if (!teachers.some(other => other.acronym === prof_info.acronym)) { - teachers.push(prof_info); + schedule.professor_information.forEach((prof_info) => { + if (!teachers.some((other) => other.acronym === prof_info.acronym)) { + teachers.push(prof_info) } - }); + }) } }) return teachers } - const removeDuplicatesFromCourseOption = (courses: CourseOption[]): CourseOption[] => { if (!courses) return [] - + let frequency: Map = new Map() let newCourseOptions: CourseOption[] = [] @@ -202,6 +202,27 @@ const removeDuplicatesFromCourseOption = (courses: CourseOption[]): CourseOption return newCourseOptions } +/** + * Considering that the yearCourses is sorted by the course_unit_year field in ascending order, the function groups the major courses by year. + * @param yearCourses All the courses in a major. + * @returns The courses grouped by year. + * @example input: [{ course: 1, year: 1 }, { course: 3, year: 1 }, { course: 2, year: 2 }] + * @example output: [[{ course: 1, year: 1 }, { course: 3, year: 1 }], [{ course: 2, year: 2 }]] + */ +const groupCoursesByYear = (yearCourses: CourseInfo[]): CourseInfo[][] => { + let majorCourses: CourseInfo[][] = [] + let currYear = 0 + for (let i = 0; i < yearCourses.length; i++) { + if (yearCourses[i].course_unit_year !== currYear) { + currYear += 1 + majorCourses.push([yearCourses[i]]) + } else { + majorCourses[currYear - 1].push(yearCourses[i]) + } + } + return majorCourses +} + export { config, dev_config, @@ -225,5 +246,6 @@ export { getLessonTypeLongName, getCourseTeachers, cn, - removeDuplicatesFromCourseOption + removeDuplicatesFromCourseOption, + groupCoursesByYear, } From 65d25d88f975bde5db72f5c6d3817a1e626d2615 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Tue, 13 Feb 2024 00:48:15 +0000 Subject: [PATCH 035/147] Using old major combobox | majorIndex is now selected major --- src/components/planner/Sidebar.tsx | 4 - .../sessionController/CoursePicker.tsx | 7 +- .../course-picker/MajorSearchCombobox.tsx | 234 +++++++++--------- src/components/ui/command.tsx | 138 ----------- src/components/ui/input.tsx | 22 ++ src/contexts/MajorContext.tsx | 8 +- src/pages/TimeTableScheduler.tsx | 12 +- 7 files changed, 148 insertions(+), 277 deletions(-) delete mode 100644 src/components/ui/command.tsx create mode 100644 src/components/ui/input.tsx diff --git a/src/components/planner/Sidebar.tsx b/src/components/planner/Sidebar.tsx index 65936394..73a6a92c 100644 --- a/src/components/planner/Sidebar.tsx +++ b/src/components/planner/Sidebar.tsx @@ -6,8 +6,6 @@ import SelectedOptionController from './sidebar/SelectedOptionController' import CoursesController from './sidebar/CoursesController' type Props = { - majors: Major[] - majorIndexHook: [number, React.Dispatch>] openHook: [boolean, React.Dispatch>] coursesHook: [CheckedCourse[][], React.Dispatch>] extraCoursesActiveHook: [boolean, React.Dispatch>] @@ -76,8 +74,6 @@ const defaultOptionsList = [ * Sidebar with all the main schedule interactions */ const Sidebar = ({ - majors, - majorIndexHook, openHook, coursesHook, extraCoursesActiveHook, diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index fe16bd82..a9a5c23c 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -19,7 +19,7 @@ type Props = { const CoursePicker = ({ // majors, - // majorIndexHook, + // selectedMajorHook, openHook, coursesHook, extraCoursesActiveHook, @@ -28,7 +28,7 @@ const CoursePicker = ({ destBufferHook, repeatedCourseControlHook, }: Props) => { - // const [majorIndex, setMajorIndex] = majorIndexHook + // const [selectedMajor, setSelectedMajor] = selectedMajorHook return ( @@ -49,8 +49,9 @@ const CoursePicker = ({
    +
    - +
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index e7ad59c3..0c5b976c 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -1,137 +1,129 @@ import classNames from 'classnames' -import { Major } from '../../../../../@types' +import { Major } from '../../../../../@types/new_index' +import { Combobox, Transition } from '@headlessui/react' import { Fragment, useState, useEffect, SetStateAction, useContext } from 'react' import { CheckIcon, ChevronUpDownIcon } from '@heroicons//react/24/solid' import MajorContext from '../../../../../contexts/MajorContext' -import { cn } from '../../../../../utils/utils' -import { Button } from '../../../../ui/button' -import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../../../../ui/command' -import { Popover, PopoverContent, PopoverTrigger } from '../../../../ui/popover' - /** * Combobox also with a searchbar in which the user will be able to write the major he / she * wants to select courses from. They can type the major or click on the rightmost corner to open * the list of possible majors. */ export const MajorSearchCombobox = () => { - const { majors, setMajors, majorIndex, setMajorIndex } = useContext(MajorContext) - const [open, setOpen] = useState(false) - const [value, setValue] = useState('') + const { majors, setMajors, selectedMajor, setSelectedMajor } = useContext(MajorContext) + const [majorQuery, setMajorQuery] = useState('') + const [selected, setSelected] = useState(selectedMajor) + + const match = (str: string, query: string, simple?: boolean) => + simple + ? str.toLowerCase().replace(/\s+/g, '').includes(query.toLowerCase().replace(/\s+/g, '')) + : str + .toLowerCase() + .normalize('NFD') + .replace(/\p{Diacritic}/gu, '') + .replace(/\s+/g, '') + .replace('.', '') + .replace(':', '') + .includes(query.toLowerCase().replace(/\s+/g, '')) + + const filteredMajors = + majors !== null && majors?.length !== 0 && Array.isArray(majors) + ? majorQuery === '' + ? majors + : majors.filter( + (major: Major) => + match(major?.name, majorQuery, true) || + match(major?.name, majorQuery, false) || + match(major?.acronym, majorQuery, true) || + match(major?.acronym, majorQuery, false) + ) + : [] + + const getDisplayMajorText = (major: Major) => (major === null ? '' : `${major?.name} (${major?.acronym})`) + + useEffect(() => { + setMajorQuery((prev) => `${prev} `) + }, []) return ( - - - - - - - - Nenhum curso encontrado. - - {majors.map((major) => ( - { - setValue(currentValue === value ? '' : currentValue) - setMajorIndex(currentValue === value ? null : major.id) - setOpen(false) - }} + { + setSelectedMajor(value) + setSelected(value) + }} + > +
    + getDisplayMajorText(major)} + onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} + /> + + +
    + + setMajorQuery('')} + > + + {filteredMajors.length === 0 && majorQuery !== '' ? ( +
    + Nenhum curso encontrado com este nome. +
    + ) : ( + filteredMajors.map((major: Major, majorIdx: number) => ( + + `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ + active ? 'bg-primary text-white' : 'text-gray-900' + }` + } + value={major} > - - {major.name} -
    - ))} -
    -
    -
    -
    + {({ selected, active }) => ( + <> + + {getDisplayMajorText(major)} + + {selected && ( + + + )} + + )} + + )) + )} + + + ) - - // return ( - // { - // setMajorIndex(value) - // }} - // > - //
    - // getDisplayMajorText(major)} - // onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} - // /> - // - // - //
    - - // setMajorQuery('')} - // > - // - // {filteredMajors.length === 0 && majorQuery !== '' ? ( - //
    - // Nenhum curso encontrado com este nome. - //
    - // ) : ( - // filteredMajors.map((major: Major, majorIdx: number) => ( - // - // `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ - // active ? 'bg-primary text-white' : 'text-gray-900' - // }` - // } - // value={major} - // > - // {({ selected, active }) => ( - // <> - // - // {getDisplayMajorText(major)} - // - // {selected && ( - // - // - // )} - // - // )} - // - // )) - // )} - //
    - //
    - //
    - // ) } diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx deleted file mode 100644 index 401904c6..00000000 --- a/src/components/ui/command.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import * as React from 'react' -import { type DialogProps } from '@radix-ui/react-dialog' -import { Command as CommandPrimitive } from 'cmdk' -import { Search } from 'lucide-react' - -import { cn } from '../../utils/utils' -import { Dialog, DialogContent } from '../../../src/components/ui/dialog' - -const Command = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -Command.displayName = CommandPrimitive.displayName - -interface CommandDialogProps extends DialogProps {} - -const CommandDialog = ({ children, ...props }: CommandDialogProps) => { - return ( - - - - {children} - - - - ) -} - -const CommandInput = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( -
    - - -
    -)) - -CommandInput.displayName = CommandPrimitive.Input.displayName - -const CommandList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandList.displayName = CommandPrimitive.List.displayName - -const CommandEmpty = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->((props, ref) => ) - -CommandEmpty.displayName = CommandPrimitive.Empty.displayName - -const CommandGroup = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandGroup.displayName = CommandPrimitive.Group.displayName - -const CommandSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -CommandSeparator.displayName = CommandPrimitive.Separator.displayName - -const CommandItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandItem.displayName = CommandPrimitive.Item.displayName - -const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { - return ( - - ) -} -CommandShortcut.displayName = 'CommandShortcut' - -export { - Command, - CommandDialog, - CommandInput, - CommandList, - CommandEmpty, - CommandGroup, - CommandItem, - CommandShortcut, - CommandSeparator, -} diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx new file mode 100644 index 00000000..f398c50c --- /dev/null +++ b/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from 'react' + +import { cn } from '../../utils/utils' + +export interface InputProps extends React.InputHTMLAttributes {} + +const Input = React.forwardRef(({ className, type, ...props }, ref) => { + return ( + + ) +}) +Input.displayName = 'Input' + +export { Input } diff --git a/src/contexts/MajorContext.tsx b/src/contexts/MajorContext.tsx index 4efb2757..46eec7d3 100644 --- a/src/contexts/MajorContext.tsx +++ b/src/contexts/MajorContext.tsx @@ -5,15 +5,15 @@ import { Major } from '../@types/new_index' interface MajorContextContent { majors: Major[] setMajors: Dispatch> - majorIndex: number - setMajorIndex: Dispatch> + selectedMajor: Major + setSelectedMajor: Dispatch> } const MajorContext: Context = createContext({ majors: [], setMajors: (majors: Major[]) => {}, - majorIndex: null, - setMajorIndex: (majorIndex: number) => {}, + selectedMajor: null, + setSelectedMajor: (selectedMajor: Major) => {}, }) export default MajorContext diff --git a/src/pages/TimeTableScheduler.tsx b/src/pages/TimeTableScheduler.tsx index 2213e6eb..11d487ea 100644 --- a/src/pages/TimeTableScheduler.tsx +++ b/src/pages/TimeTableScheduler.tsx @@ -75,19 +75,19 @@ const TimeTableSchedulerPage = () => { // ============================================================================== // ============================ NEW STATES AND HOOKS ============================ const [majors, setMajors] = useState([]) // all the [majors]]] - const [majorIndex, setMajorIndex] = useState(null) + const [selectedMajor, setSelectedMajor] = useState(null) const [courseInfo, setCourseInfo] = useState([]) const [pickedCourses, setPickedCourses] = useState([]) useEffect(() => { - getCoursesForMajor(majors[majorIndex]) - }, [majorIndex]) + getCoursesForMajor(selectedMajor) + }, [selectedMajor]) // ============================================================================== // ================================== FUNCTION ================================== const getCoursesForMajor = (major: Major) => { - if (majorIndex === null) return + if (selectedMajor === null) return BackendAPI.getCourses(major).then((courses: CourseInfo[]) => { setCourseInfo(courses) @@ -388,7 +388,7 @@ const TimeTableSchedulerPage = () => { console.log(majors) return ( - +
    {/* Schedule Preview */}
    @@ -399,8 +399,6 @@ const TimeTableSchedulerPage = () => { {/* Sidebar */} Date: Tue, 13 Feb 2024 02:10:36 +0000 Subject: [PATCH 036/147] Displaying couse year tabs and checkboxes --- .../sessionController/CoursePicker.tsx | 11 +- .../sessionController/OldCoursePicker.tsx | 2 +- .../course-picker/CourseYearCheckboxes.tsx | 6 +- .../course-picker/CourseYearTabs.tsx | 27 +++-- .../course-picker/MajorSearchCombobox.tsx | 10 +- .../sessionController/course-picker/index.ts | 5 +- src/contexts/CourseContext.tsx | 8 +- src/pages/TimeTableScheduler.tsx | 104 +++++++++--------- src/utils/utils.ts | 1 + 9 files changed, 94 insertions(+), 80 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index a9a5c23c..0fb135d7 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,11 +1,10 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' -import { MajorSearchCombobox } from './course-picker' +import { MajorSearchCombobox, CourseYearTabs } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' import { CheckedCourse } from '../../../../@types' import { Course, Major } from '../../../../@types/new_index' -import { groupCoursesByYear } from '../../../../utils/utils' type Props = { openHook: [boolean, React.Dispatch>] @@ -18,8 +17,6 @@ type Props = { } const CoursePicker = ({ - // majors, - // selectedMajorHook, openHook, coursesHook, extraCoursesActiveHook, @@ -46,10 +43,10 @@ const CoursePicker = ({ servers. -
    -
    +
    +
    -
    +
    diff --git a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx index d301a522..937191ec 100644 --- a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx @@ -6,7 +6,7 @@ import { CheckedCourse, Course, Major } from '../../../../@types' import { getSchoolYear, getSemester } from '../../../../utils/utils' import { AcademicCapIcon, CheckCircleIcon, PencilSquareIcon, PlusIcon, XCircleIcon } from '@heroicons//react/24/solid' import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../../../pages/TimeTableScheduler' -import { MajorSearchCombobox } from './course-picker/MajorSearchCombobox' +import { MajorSearchCombobox } from './course-picker' import { Button } from '../../../ui/button' type Props = { diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index 635b24bb..fde8cd86 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -7,7 +7,7 @@ type Props = { export const CourseYearCheckboxes = ({ courses }) => { return ( <> -
    +
    {courses.map((course: CourseInfo, courseIdx: number) => (
    { defaultChecked={true /*course.checked*/} id={`course-checkbox-${course.course_unit_year}-${courseIdx}`} /> - +
    ))}
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 60f3f079..652680bc 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -1,13 +1,20 @@ +import { useContext } from 'react' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' import { CourseInfo } from '../../../../../@types/new_index' import { CourseYearCheckboxes } from './CourseYearCheckboxes' +import CourseContext from '../../../../../contexts/CourseContext' +import { groupCoursesByYear } from '../../../../../utils/utils' type Props = { courses: CourseInfo[][] pickedCourses: CourseInfo[] } -const CourseYearTabs = ({ courses, pickedCourses }: Props) => { +const CourseYearTabs = () => { + const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + + const coursesByYear = groupCoursesByYear(coursesInfo) + const isCourseChecked = (idx) => { for (const course of pickedCourses) { if (course.id === idx) { @@ -19,16 +26,22 @@ const CourseYearTabs = ({ courses, pickedCourses }: Props) => { } return ( - - - {courses.map((yearCourses, idx) => ( - `${idx + 1}º Ano` + + + {coursesByYear.map((_, idx) => ( + + {`${idx + 1}º Ano`} + ))} - {courses.map((yearCourses, idx) => ( - {} + {coursesByYear.map((yearCourses, idx) => ( + + {} + ))} ) } + +export default CourseYearTabs diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 0c5b976c..93b4f3a3 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -10,7 +10,7 @@ import MajorContext from '../../../../../contexts/MajorContext' * wants to select courses from. They can type the major or click on the rightmost corner to open * the list of possible majors. */ -export const MajorSearchCombobox = () => { +const MajorSearchCombobox = () => { const { majors, setMajors, selectedMajor, setSelectedMajor } = useContext(MajorContext) const [majorQuery, setMajorQuery] = useState('') const [selected, setSelected] = useState(selectedMajor) @@ -58,8 +58,8 @@ export const MajorSearchCombobox = () => { { > {filteredMajors.length === 0 && majorQuery !== '' ? (
    - Nenhum curso encontrado com este nome. + Nenhum curso encontrado com este nome/sigla.
    ) : ( filteredMajors.map((major: Major, majorIdx: number) => ( @@ -127,3 +127,5 @@ export const MajorSearchCombobox = () => { ) } + +export default MajorSearchCombobox diff --git a/src/components/planner/sidebar/sessionController/course-picker/index.ts b/src/components/planner/sidebar/sessionController/course-picker/index.ts index c37b688b..9b47ea20 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/index.ts +++ b/src/components/planner/sidebar/sessionController/course-picker/index.ts @@ -1,6 +1,7 @@ -import { MajorSearchCombobox } from "./MajorSearchCombobox"; +import MajorSearchCombobox from './MajorSearchCombobox'; +import CourseYearTabs from './CourseYearTabs'; export { MajorSearchCombobox, - + CourseYearTabs, } \ No newline at end of file diff --git a/src/contexts/CourseContext.tsx b/src/contexts/CourseContext.tsx index 75518c31..a09ab3bc 100644 --- a/src/contexts/CourseContext.tsx +++ b/src/contexts/CourseContext.tsx @@ -4,15 +4,15 @@ import { CourseInfo } from '../@types/new_index' interface MajorContextContent { pickedCourses: CourseInfo[] setPickedCourses: React.Dispatch> - courseInfo: CourseInfo[] - setCourseInfo: React.Dispatch> + coursesInfo: CourseInfo[] + setCoursesInfo: React.Dispatch> } const CourseContext = createContext({ pickedCourses: [], setPickedCourses: (pickedCourses: CourseInfo[]) => {}, - courseInfo: [], - setCourseInfo: (courseInfo: CourseInfo[]) => {}, + coursesInfo: [], + setCoursesInfo: (courseInfo: CourseInfo[]) => {}, }) export default CourseContext diff --git a/src/pages/TimeTableScheduler.tsx b/src/pages/TimeTableScheduler.tsx index 11d487ea..42d52337 100644 --- a/src/pages/TimeTableScheduler.tsx +++ b/src/pages/TimeTableScheduler.tsx @@ -8,6 +8,7 @@ import fillOptions from '../components/planner/sidebar/selectedOptionController/ import { useToast } from '../components/ui/use-toast' import { CourseInfo } from '../@types/new_index' import MajorContext from '../contexts/MajorContext' +import CourseContext from '../contexts/CourseContext' export const removeDuplicatesFromCourseArray = (courses: CheckedCourse[]): CheckedCourse[] => { let frequency: Map = new Map() @@ -76,23 +77,39 @@ const TimeTableSchedulerPage = () => { // ============================ NEW STATES AND HOOKS ============================ const [majors, setMajors] = useState([]) // all the [majors]]] const [selectedMajor, setSelectedMajor] = useState(null) - const [courseInfo, setCourseInfo] = useState([]) + const [coursesInfo, setCoursesInfo] = useState([]) const [pickedCourses, setPickedCourses] = useState([]) useEffect(() => { - getCoursesForMajor(selectedMajor) + { + /* Fetch major courses */ + } + // if (selectedMajor === null) return + + BackendAPI.getCourses(selectedMajor).then((courses) => { + { + /* TODO: Remover o map de dentro do setCoursesInfo + Para isso é preciso mudar a maneira como os + dados são enviados a partir do backend + */ + } + setCoursesInfo( + courses.map((course: Course) => ({ + id: course.sigarra_id, + course_unit_year: course.course_unit_year, + ects: course.ects, + acronym: course.acronym, + name: course.name, + url: course.url, + })) + ) + }) }, [selectedMajor]) // ============================================================================== - // ================================== FUNCTION ================================== + // ================================== FUNCTIONS ================================== - const getCoursesForMajor = (major: Major) => { - if (selectedMajor === null) return - - BackendAPI.getCourses(major).then((courses: CourseInfo[]) => { - setCourseInfo(courses) - }) - } + const fetchMajorCourses = (major: Major) => {} // ============================ NEW STATES AND HOOKS ============================ // ============================================================================== @@ -179,28 +196,6 @@ const TimeTableSchedulerPage = () => { }) }, []) - // once a major has been picked => fetch courses for the major - useEffect(() => { - // esta função mudar o checkedcourses - getCoursesForMajor(major) - }, [major, majorChangedRef, checkedCourses, setCheckedCourses]) - - /** - * Checks if the current selected extra major is the same as the main major selected in the selectionModal - * If it is not, it will fetch the courses for the current major - */ - useEffect(() => { - if (is_null_or_undefined(extraCoursesMajor)) return - - if (extraCoursesMajor.acronym === major.acronym && !chosenMajorMainModalEqualToExtra) { - setExtraMajorEqualToMainMajor(true) - } else { - getCoursesForMajor(extraCoursesMajor) - - if (extraMajorEqualToMainMajor) setExtraMajorEqualToMainMajor(false) - } - }, [extraCoursesMajor, extraCoursesMajorChangedRef, checkedCourses, setCheckedCourses]) - const updateCheckedCourses = (newCheckedCourses: CheckedCourse[][], importedCourses: CourseOption[]) => { let extraUCs: CheckedCourse[] = [] @@ -384,32 +379,35 @@ const TimeTableSchedulerPage = () => { setCheckedCourses(newCheckedCourses) } - console.log(multipleOptions) - console.log(majors) + console.log('multipleOptions:', multipleOptions) + console.log('majors: ', majors) + console.log('courses info: ', coursesInfo) return ( -
    - {/* Schedule Preview */} -
    -
    - + +
    + {/* Schedule Preview */} +
    +
    + +
    -
    - {/* Sidebar */} - -
    + {/* Sidebar */} + +
    + ) } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 3b94a64b..3947686c 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -223,6 +223,7 @@ const groupCoursesByYear = (yearCourses: CourseInfo[]): CourseInfo[][] => { return majorCourses } + export { config, dev_config, From 207acfacc1aa307b99e2d131c50dbfae45633a34 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Tue, 13 Feb 2024 16:02:25 +0000 Subject: [PATCH 037/147] Progress on course picker --- package-lock.json | 33 ++++++++ package.json | 1 + src/app.css | 8 ++ .../sessionController/CoursePicker.tsx | 6 +- .../course-picker/CourseYearCheckboxes.tsx | 76 ++++++++++++++----- .../course-picker/CourseYearTabs.tsx | 19 ++--- .../course-picker/PickedCourse.tsx | 21 +++++ .../course-picker/PickedCoursesList.tsx | 18 +++++ .../sessionController/course-picker/index.ts | 2 + src/components/ui/card.tsx | 48 ++++++++++++ src/components/ui/checkbox.tsx | 8 +- src/components/ui/dialog.tsx | 2 +- src/components/ui/label.tsx | 17 +++++ src/components/ui/tabs.tsx | 4 +- src/contexts/CourseContext.tsx | 10 +-- src/contexts/MajorContext.tsx | 2 +- 16 files changed, 229 insertions(+), 46 deletions(-) create mode 100644 src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx create mode 100644 src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/label.tsx diff --git a/package-lock.json b/package-lock.json index 769aa0b6..038ccd83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-separator": "^1.0.3", @@ -3146,6 +3147,29 @@ } } }, + "node_modules/@radix-ui/react-label": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-menu": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", @@ -18673,6 +18697,15 @@ "@radix-ui/react-use-layout-effect": "1.0.1" } }, + "@radix-ui/react-label": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + } + }, "@radix-ui/react-menu": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", diff --git a/package.json b/package.json index 9d078311..f1903640 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-separator": "^1.0.3", diff --git a/src/app.css b/src/app.css index 47877952..00345d5c 100644 --- a/src/app.css +++ b/src/app.css @@ -95,4 +95,12 @@ button { #option-name { -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ +} + +.tab-trigger[data-state='active'] { + @apply bg-primary text-white; +} + +.radix-checkbox[data-state='checked'] { + @apply bg-primary text-white dark:bg-primary/50 } \ No newline at end of file diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 0fb135d7..2850d86b 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,7 +1,7 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' -import { MajorSearchCombobox, CourseYearTabs } from './course-picker' +import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' import { CheckedCourse } from '../../../../@types' import { Course, Major } from '../../../../@types/new_index' @@ -49,7 +49,9 @@ const CoursePicker = ({
    -
    +
    + +
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index fde8cd86..f3abb013 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -1,31 +1,67 @@ +import { useContext } from 'react' import { CourseInfo } from '../../../../../@types/new_index' +import CourseContext from '../../../../../contexts/CourseContext' +import { Checkbox } from '../../../../ui/checkbox' +import { Label } from '../../../../ui/label' type Props = { courses: CourseInfo[] } export const CourseYearCheckboxes = ({ courses }) => { + const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + + const isCourseChecked = (idx) => { + return pickedCourses.some((course) => course.id === idx) + } + return ( - <> -
    - {courses.map((course: CourseInfo, courseIdx: number) => ( -
    + {courses.map((course: CourseInfo, courseIdx: number) => ( +
    + - - -
    - ))} -
    - + defaultChecked={isCourseChecked(course.id)} + onCheckedChange={() => { + console.log('Selecting!!') + if (pickedCourses.includes(course)) { + setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== course)) + } else { + setPickedCourses([...pickedCourses, course]) + } + }} + /> + +
    + ))} +
    + ) + + return ( +
    + {courses.map((course: CourseInfo, courseIdx: number) => ( +
    { + console.log('Selecting!!') + if (pickedCourses.includes(course)) return + setPickedCourses([...pickedCourses, course]) + }} + > + + +
    + ))} +
    ) } diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 652680bc..d340b1d7 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react' +import { useContext, useState } from 'react' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' import { CourseInfo } from '../../../../../@types/new_index' import { CourseYearCheckboxes } from './CourseYearCheckboxes' @@ -11,25 +11,16 @@ type Props = { } const CourseYearTabs = () => { - const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + const { pickedCourses, coursesInfo } = useContext(CourseContext) + const [selectedTab, setSelectedTab] = useState('1') const coursesByYear = groupCoursesByYear(coursesInfo) - const isCourseChecked = (idx) => { - for (const course of pickedCourses) { - if (course.id === idx) { - return true - } - } - - return false - } - return ( - + {coursesByYear.map((_, idx) => ( - + {`${idx + 1}º Ano`} ))} diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx new file mode 100644 index 00000000..0b471e0b --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx @@ -0,0 +1,21 @@ +import { CourseInfo } from '../../../../../@types/new_index' +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../../../../ui/card' +import { Separator } from '../../../../ui/separator' + +const PickedCourse = ({ course: CourseInfo }) => { + return ( + + + {CourseInfo.name} + ({CourseInfo.acronym}) + + + + +

    {CourseInfo.ects} ECTS

    +
    +
    + ) +} + +export default PickedCourse diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx new file mode 100644 index 00000000..829e90ef --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -0,0 +1,18 @@ +import { useContext } from 'react' +import CourseContext from '../../../../../contexts/CourseContext' +import { ScrollArea } from '../../../../ui/scroll-area' +import PickedCourse from './PickedCourse' + +const PickedCoursesList = () => { + const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + + return ( + + {pickedCourses.map((course) => ( + + ))} + + ) +} + +export default PickedCoursesList diff --git a/src/components/planner/sidebar/sessionController/course-picker/index.ts b/src/components/planner/sidebar/sessionController/course-picker/index.ts index 9b47ea20..5a0698ea 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/index.ts +++ b/src/components/planner/sidebar/sessionController/course-picker/index.ts @@ -1,7 +1,9 @@ import MajorSearchCombobox from './MajorSearchCombobox'; import CourseYearTabs from './CourseYearTabs'; +import PickedCoursesList from './PickedCoursesList'; export { MajorSearchCombobox, CourseYearTabs, + PickedCoursesList } \ No newline at end of file diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 00000000..87a9195a --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,48 @@ +import * as React from 'react' + +import { cn } from '../../../src/utils/utils' + +const Card = React.forwardRef>(({ className, ...props }, ref) => ( +
    +)) +Card.displayName = 'Card' + +const CardHeader = React.forwardRef>( + ({ className, ...props }, ref) => ( +
    + ) +) +CardHeader.displayName = 'CardHeader' + +const CardTitle = React.forwardRef>( + ({ className, ...props }, ref) => ( +

    + ) +) +CardTitle.displayName = 'CardTitle' + +const CardDescription = React.forwardRef>( + ({ className, ...props }, ref) => ( +

    + ) +) +CardDescription.displayName = 'CardDescription' + +const CardContent = React.forwardRef>( + ({ className, ...props }, ref) =>

    +) +CardContent.displayName = 'CardContent' + +const CardFooter = React.forwardRef>( + ({ className, ...props }, ref) =>
    +) +CardFooter.displayName = 'CardFooter' + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index 68c5dd13..c24f5459 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -11,7 +11,13 @@ const Checkbox = React.forwardRef< , + React.ComponentPropsWithoutRef & VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx index a52817b6..85a001a9 100644 --- a/src/components/ui/tabs.tsx +++ b/src/components/ui/tabs.tsx @@ -12,7 +12,7 @@ const TabsList = React.forwardRef< > + setPickedCourses: Dispatch> coursesInfo: CourseInfo[] - setCoursesInfo: React.Dispatch> + setCoursesInfo: Dispatch> } -const CourseContext = createContext({ +const CourseContext: Context = createContext({ pickedCourses: [], setPickedCourses: (pickedCourses: CourseInfo[]) => {}, coursesInfo: [], diff --git a/src/contexts/MajorContext.tsx b/src/contexts/MajorContext.tsx index 46eec7d3..73b78420 100644 --- a/src/contexts/MajorContext.tsx +++ b/src/contexts/MajorContext.tsx @@ -1,4 +1,4 @@ -import { Context, Dispatch, SetStateAction, useState } from 'react' +import { Context, Dispatch, SetStateAction } from 'react' import { createContext } from 'react' import { Major } from '../@types/new_index' From d647caf5ddb1596af37b597a9a9e86540fd2babb Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 14 Feb 2024 00:18:17 +0000 Subject: [PATCH 038/147] More progress on course picker --- package.json | 2 +- src/app.css | 36 --------------- .../sessionController/OldCoursePicker.tsx | 18 ++++---- .../course-picker/CourseYearCheckboxes.tsx | 4 +- .../course-picker/PickedCourse.tsx | 46 +++++++++++++++---- .../course-picker/PickedCoursesList.tsx | 4 +- src/components/ui/checkbox.tsx | 8 +--- src/components/ui/tabs.tsx | 2 +- src/pages/TimeTableScheduler.tsx | 45 +++++++++--------- 9 files changed, 76 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index f1903640..1ac21157 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,6 @@ "postcss": "^8.4.14", "prettier": "^2.6.2", "prettier-plugin-tailwindcss": "^0.1.10", - "tailwindcss": "^3.1.4" + "tailwindcss": "^3.4.1" } } diff --git a/src/app.css b/src/app.css index 00345d5c..16b1a5aa 100644 --- a/src/app.css +++ b/src/app.css @@ -48,33 +48,6 @@ button { } } -.checkbox { - @apply p-2 transition border-2 border-transparent rounded-md cursor-pointer bg-lightish text-primary hover:bg-primary/75 hover:text-primary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish dark:focus:ring-transparent; -} - -.extra-courses-checkbox { - @apply p-2 transition border-2 border-transparent rounded-md cursor-pointer bg-lightish text-secondary hover:bg-secondary/75 hover:text-secondary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish dark:focus:ring-transparent indeterminate:text-secondary focus:text-secondary checked:text-secondary; -} - -.checkbox-small { - @apply h-3 w-3 cursor-pointer rounded border-2 border-transparent bg-lightish p-0 text-primary transition - hover:bg-primary/75 hover:text-primary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 - dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish - dark:focus:ring-0 xl:h-3.5 xl:w-3.5; -} - -.extra-course-checkbox-small { - @apply h-3 w-3 cursor-pointer rounded border-2 border-transparent bg-lightish p-0 text-secondary transition - hover:bg-secondary/75 hover:text-primary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 - dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish - dark:focus:ring-0 xl:h-3.5 xl:w-3.5 indeterminate:text-secondary focus:text-secondary checked:text-secondary/75; -} - -.checkboxes { - @apply flex flex-wrap items-center justify-center gap-y-2 gap-x-4 md:flex-row md:items-start lg:gap-y-6 lg:gap-x-14; - margin-top: 1.5rem !important; -} - #option-header .EmojiPickerReact { --epr-bg-color: rgb(242, 244, 247); --epr-category-label-bg-color: rgb(242, 244, 247); @@ -85,7 +58,6 @@ button { --epr-category-label-bg-color: rgb(26, 28, 35); } - /* For Webkit-based browsers (Chrome, Safari and Opera) */ #option-name::-webkit-scrollbar { display: none; @@ -96,11 +68,3 @@ button { -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ } - -.tab-trigger[data-state='active'] { - @apply bg-primary text-white; -} - -.radix-checkbox[data-state='checked'] { - @apply bg-primary text-white dark:bg-primary/50 -} \ No newline at end of file diff --git a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx index 937191ec..7d06b486 100644 --- a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx @@ -5,7 +5,7 @@ import Alert, { AlertType } from '../../Alert' import { CheckedCourse, Course, Major } from '../../../../@types' import { getSchoolYear, getSemester } from '../../../../utils/utils' import { AcademicCapIcon, CheckCircleIcon, PencilSquareIcon, PlusIcon, XCircleIcon } from '@heroicons//react/24/solid' -import { controlCoursesGroupCheckbox, is_null_or_undefined } from '../../../../pages/TimeTableScheduler' +import { is_null_or_undefined } from '../../../../pages/TimeTableScheduler' import { MajorSearchCombobox } from './course-picker' import { Button } from '../../../ui/button' @@ -271,14 +271,14 @@ const CoursePicker = ({ useEffect(() => { // Regular courses - for (let year = 1; year < courses.length; year++) { - controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) - } - - // Extra courses - if (courses[0] !== undefined && courses[0] !== null) { - controlCoursesGroupCheckbox(courses[0], 'extraCourseGroupCheckbox') - } + // for (let year = 1; year < courses.length; year++) { + // controlCoursesGroupCheckbox(courses[year], `year-checkbox-${year - 1}`) + // } + + // // Extra courses + // if (courses[0] !== undefined && courses[0] !== null) { + // controlCoursesGroupCheckbox(courses[0], 'extraCourseGroupCheckbox') + // } warnIfMajorIsTheSameBetween(courses[0], courses.slice(1)) }, [courses]) diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index f3abb013..1e8ee454 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -8,7 +8,7 @@ type Props = { courses: CourseInfo[] } -export const CourseYearCheckboxes = ({ courses }) => { +export const CourseYearCheckboxes = ({ courses }: Props) => { const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) const isCourseChecked = (idx) => { @@ -18,7 +18,7 @@ export const CourseYearCheckboxes = ({ courses }) => { return (
    {courses.map((course: CourseInfo, courseIdx: number) => ( -
    +
    { +type Props = { + course: CourseInfo +} + +const PickedCourse = ({ course }: Props) => { + const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + + const removeCourse = () => { + console.log('Removing course') + setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== course)) + } + + return ( +
    +
    + {course.name} ({course.acronym}) +
    + +
    {course.ects} ECTS
    + removeCourse()} + /> +
    + ) return ( - - - {CourseInfo.name} - ({CourseInfo.acronym}) + + + {course.name} + ({course.acronym}) - - - -

    {CourseInfo.ects} ECTS

    + + + + +

    {course.ects} ECTS

    ) diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx index 829e90ef..0d9b864b 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react' +import { useContext, useEffect } from 'react' import CourseContext from '../../../../../contexts/CourseContext' import { ScrollArea } from '../../../../ui/scroll-area' import PickedCourse from './PickedCourse' @@ -7,7 +7,7 @@ const PickedCoursesList = () => { const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) return ( - + {pickedCourses.map((course) => ( ))} diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index c24f5459..a9154017 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -11,13 +11,7 @@ const Checkbox = React.forwardRef< { return element === undefined || element === null } -/** - * This method serves to go to a group of checkboxes and put the correct checked value on the group checkbox - */ -export const controlCoursesGroupCheckbox = (courses: CheckedCourse[], groupCheckboxId: string) => { - let some = courses.some((course) => course.checked) - let every = courses.every((course) => course.checked) - - //@ts-ignore - let checkbox: HTMLInputElement = document.getElementById(groupCheckboxId) - if (!checkbox) return - - if (every) { - checkbox.checked = true - checkbox.indeterminate = false - } else if (some) { - checkbox.checked = false - checkbox.indeterminate = true - } else { - checkbox.checked = false - checkbox.indeterminate = false - } -} +// TODO: delete this!! +// /** +// * This method serves to go to a group of checkboxes and put the correct checked value on the group checkbox +// */ +// export const controlCoursesGroupCheckbox = (courses: CheckedCourse[], groupCheckboxId: string) => { +// let some = courses.some((course) => course.checked) +// let every = courses.every((course) => course.checked) + +// //@ts-ignore +// let checkbox: HTMLInputElement = document.getElementById(groupCheckboxId) +// if (!checkbox) return + +// if (every) { +// checkbox.checked = true +// checkbox.indeterminate = false +// } else if (some) { +// checkbox.checked = false +// checkbox.indeterminate = true +// } else { +// checkbox.checked = false +// checkbox.indeterminate = false +// } +// } const TimeTableSchedulerPage = () => { // ============================================================================================================================== From 668fe600686e70eb17328ea733c937a37608cada Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 14 Feb 2024 23:51:10 +0000 Subject: [PATCH 039/147] Almost finishing course picker --- src/app.css | 14 ++++ .../sessionController/CoursePicker.tsx | 36 ++++++---- .../course-picker/CourseYearCheckboxes.tsx | 68 ++++++++----------- .../course-picker/CourseYearTabs.tsx | 6 +- .../sessionController/course-picker/Ects.tsx | 39 +++++++++++ .../course-picker/PickedCourse.tsx | 30 ++------ .../course-picker/PickedCoursesList.tsx | 8 ++- .../sessionController/course-picker/index.ts | 4 +- src/components/ui/card.tsx | 48 ------------- src/components/ui/dialog.tsx | 6 +- src/components/ui/label.tsx | 4 +- src/components/ui/tabs.tsx | 2 +- src/pages/TimeTableScheduler.tsx | 4 -- 13 files changed, 130 insertions(+), 139 deletions(-) create mode 100644 src/components/planner/sidebar/sessionController/course-picker/Ects.tsx delete mode 100644 src/components/ui/card.tsx diff --git a/src/app.css b/src/app.css index 16b1a5aa..d61a708e 100644 --- a/src/app.css +++ b/src/app.css @@ -38,6 +38,20 @@ button { -webkit-user-select: text; } +.checkbox { + @apply p-2 transition border-2 border-transparent rounded-md cursor-pointer bg-lightish text-primary hover:bg-primary/75 hover:text-primary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish dark:focus:ring-transparent; +} +.checkboxes { + @apply flex flex-wrap items-center justify-center gap-y-2 gap-x-4 md:flex-row md:items-start lg:gap-y-6 lg:gap-x-14; + margin-top: 1.5rem !important; +} +.checkbox-small { + @apply h-3 w-3 cursor-pointer rounded border-2 border-transparent bg-lightish p-0 text-primary transition + hover:bg-primary/75 hover:text-primary/75 focus:ring-transparent dark:bg-darkish dark:checked:bg-primary/50 + dark:indeterminate:bg-primary/50 dark:hover:bg-primary/80 dark:hover:text-primary/80 dark:focus:text-darkish + dark:focus:ring-0 xl:h-3.5 xl:w-3.5; +} + .min-h-adjusted { min-height: calc(100vh - 3.5rem - 2rem); /* minHeight = pageHeight - headerHeight - footerHeight */ } diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 2850d86b..5cae1ac3 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,7 +1,15 @@ -import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from '../../../ui/dialog' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' -import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList } from './course-picker' +import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList, Ects } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' import { CheckedCourse } from '../../../../@types' import { Course, Major } from '../../../../@types/new_index' @@ -35,24 +43,28 @@ const CoursePicker = ({ - + Seleciona as tuas Unidades Curriculares - - This action cannot be undone. This will permanently delete your account and remove your data from our - servers. + + Escolhe um curso e unidades curriculares à esquerda. À direita aparecem as unidades curriculares que + escolheste. -
    -
    - + + +
    +
    -
    - -
    +
    + + + + +

    ) diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index 1e8ee454..1fcac5df 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react' +import { useContext, useState, useEffect } from 'react' import { CourseInfo } from '../../../../../@types/new_index' import CourseContext from '../../../../../contexts/CourseContext' import { Checkbox } from '../../../../ui/checkbox' @@ -9,57 +9,43 @@ type Props = { } export const CourseYearCheckboxes = ({ courses }: Props) => { - const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + const { pickedCourses, setPickedCourses } = useContext(CourseContext) + const [checkboxList, setCheckboxList] = useState(courses.map((course) => pickedCourses.includes(course))) - const isCourseChecked = (idx) => { - return pickedCourses.some((course) => course.id === idx) + const toggleCourse = (idx: number) => { + // Toggle the checkbox + setCheckboxList((prev) => { + const newCheckboxList = [...prev] + newCheckboxList[idx] = !newCheckboxList[idx] + return newCheckboxList + }) + // Add or remove the course from the pickedCourses list + if (pickedCourses.includes(courses[idx])) + setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== courses[idx])) + else setPickedCourses([...pickedCourses, courses[idx]]) } + /* + * Update the checkboxList when the pickedCourses change + * This happends when the user removes a course from the pickedCourses list + */ + useEffect(() => { + setCheckboxList(courses.map((course) => pickedCourses.includes(course))) + }, [pickedCourses]) + return ( -
    +
    {courses.map((course: CourseInfo, courseIdx: number) => (
    { - console.log('Selecting!!') - if (pickedCourses.includes(course)) { - setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== course)) - } else { - setPickedCourses([...pickedCourses, course]) - } - }} - /> - -
    - ))} -
    - ) - - return ( -
    - {courses.map((course: CourseInfo, courseIdx: number) => ( -
    { - console.log('Selecting!!') - if (pickedCourses.includes(course)) return - setPickedCourses([...pickedCourses, course]) - }} - > - toggleCourse(courseIdx)} /> -
    ))}
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index d340b1d7..10fd64cd 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -4,6 +4,7 @@ import { CourseInfo } from '../../../../../@types/new_index' import { CourseYearCheckboxes } from './CourseYearCheckboxes' import CourseContext from '../../../../../contexts/CourseContext' import { groupCoursesByYear } from '../../../../../utils/utils' +import { ScrollArea } from '../../../../ui/scroll-area' type Props = { courses: CourseInfo[][] @@ -17,7 +18,7 @@ const CourseYearTabs = () => { const coursesByYear = groupCoursesByYear(coursesInfo) return ( - + {coursesByYear.map((_, idx) => ( @@ -25,10 +26,9 @@ const CourseYearTabs = () => { ))} - {coursesByYear.map((yearCourses, idx) => ( - {} + {} ))} diff --git a/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx new file mode 100644 index 00000000..220e9b47 --- /dev/null +++ b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx @@ -0,0 +1,39 @@ +import { useContext, useEffect } from 'react' +import CourseContext from '../../../../../contexts/CourseContext' +import { InformationCircleIcon } from '@heroicons/react/24/solid' +import { Tooltip, TooltipContent, TooltipProvider } from '../../../../ui/tooltip' +import { TooltipTrigger } from '@radix-ui/react-tooltip' + +const Ects = () => { + const { pickedCourses } = useContext(CourseContext) + + const totalEcts = pickedCourses.reduce((acc, course) => acc + course.ects, 0) + const warning = totalEcts > 42 ? 2 : totalEcts > 36 ? 1 : 0 + + return ( +
    +
    Total ECTS: 
    +
    {totalEcts}
    + {warning ? ( + + + + + + + {warning == 1 + ? 'O NIAEFEUP recomenda escolher 36 ou menos ECTS.' + : 'O limite de créditos por semestre, por norma, é 42 ECTS'} + + + + ) : ( + <> + )} +
    + ) +} + +export default Ects diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx index fd888abc..667da665 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx @@ -1,6 +1,5 @@ import { useContext } from 'react' import { CourseInfo } from '../../../../../@types/new_index' -import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../../../../ui/card' import { Separator } from '../../../../ui/separator' import CourseContext from '../../../../../contexts/CourseContext' import { XMarkIcon } from '@heroicons/react/24/outline' @@ -13,37 +12,22 @@ const PickedCourse = ({ course }: Props) => { const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) const removeCourse = () => { - console.log('Removing course') setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== course)) } return ( -
    +
    removeCourse()} + className="group m-2 ml-0 mr-4 flex cursor-pointer items-center rounded bg-lightish p-2" + >
    {course.name} ({course.acronym})
    - -
    {course.ects} ECTS
    - removeCourse()} - /> + +
    {course.ects} ECTS
    +
    ) - return ( - - - {course.name} - ({course.acronym}) - - - - - -

    {course.ects} ECTS

    -
    -
    - ) } export default PickedCourse diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx index 0d9b864b..04c2e970 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -6,12 +6,16 @@ import PickedCourse from './PickedCourse' const PickedCoursesList = () => { const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) - return ( - + return pickedCourses.length > 0 ? ( + {pickedCourses.map((course) => ( ))} + ) : ( +
    + Ainda não escolheste nenhuma cadeira. +
    ) } diff --git a/src/components/planner/sidebar/sessionController/course-picker/index.ts b/src/components/planner/sidebar/sessionController/course-picker/index.ts index 5a0698ea..d40d8d73 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/index.ts +++ b/src/components/planner/sidebar/sessionController/course-picker/index.ts @@ -1,9 +1,11 @@ import MajorSearchCombobox from './MajorSearchCombobox'; import CourseYearTabs from './CourseYearTabs'; import PickedCoursesList from './PickedCoursesList'; +import Ects from './Ects'; export { MajorSearchCombobox, CourseYearTabs, - PickedCoursesList + PickedCoursesList, + Ects } \ No newline at end of file diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx deleted file mode 100644 index 87a9195a..00000000 --- a/src/components/ui/card.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react' - -import { cn } from '../../../src/utils/utils' - -const Card = React.forwardRef>(({ className, ...props }, ref) => ( -
    -)) -Card.displayName = 'Card' - -const CardHeader = React.forwardRef>( - ({ className, ...props }, ref) => ( -
    - ) -) -CardHeader.displayName = 'CardHeader' - -const CardTitle = React.forwardRef>( - ({ className, ...props }, ref) => ( -

    - ) -) -CardTitle.displayName = 'CardTitle' - -const CardDescription = React.forwardRef>( - ({ className, ...props }, ref) => ( -

    - ) -) -CardDescription.displayName = 'CardDescription' - -const CardContent = React.forwardRef>( - ({ className, ...props }, ref) =>

    -) -CardContent.displayName = 'CardContent' - -const CardFooter = React.forwardRef>( - ({ className, ...props }, ref) =>
    -) -CardFooter.displayName = 'CardFooter' - -export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index f3764a7c..4fe42b97 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -19,7 +19,7 @@ const DialogOverlay = React.forwardRef< (({ className, ...props }, ref) => ( )) @@ -79,7 +79,7 @@ const DialogDescription = React.forwardRef< >(({ className, ...props }, ref) => ( )) diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx index a81544a9..59ac0e28 100644 --- a/src/components/ui/label.tsx +++ b/src/components/ui/label.tsx @@ -4,7 +4,9 @@ import { cva, type VariantProps } from 'class-variance-authority' import { cn } from '../../../src/utils/utils' -const labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70') +const labelVariants = cva( + 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-white' +) const Label = React.forwardRef< React.ElementRef, diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx index 9fe3d8a5..f3546d94 100644 --- a/src/components/ui/tabs.tsx +++ b/src/components/ui/tabs.tsx @@ -27,7 +27,7 @@ const TabsTrigger = React.forwardRef< { setCheckedCourses(newCheckedCourses) } - console.log('multipleOptions:', multipleOptions) - console.log('majors: ', majors) - console.log('courses info: ', coursesInfo) - return ( From ee7b2f7a61719017a509341de38b75d3a81fff92 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Sun, 18 Feb 2024 23:58:51 +0000 Subject: [PATCH 040/147] syncing states with local storage --- src/api/storage.ts | 14 ++++++- .../sessionController/CoursePicker.tsx | 31 ++++++++------- .../course-picker/CourseYearCheckboxes.tsx | 12 +++--- .../course-picker/CourseYearTabs.tsx | 8 +--- .../sessionController/course-picker/Ects.tsx | 6 +-- .../course-picker/MajorSearchCombobox.tsx | 2 +- .../course-picker/PickedCourse.tsx | 4 +- .../course-picker/PickedCoursesList.tsx | 18 +++++---- src/hooks/useMajor.tsx | 2 +- src/pages/TimeTableScheduler.tsx | 39 +++++++++---------- 10 files changed, 73 insertions(+), 63 deletions(-) diff --git a/src/api/storage.ts b/src/api/storage.ts index 040e2f81..77473a1b 100644 --- a/src/api/storage.ts +++ b/src/api/storage.ts @@ -75,6 +75,16 @@ const deleteOptionsStorage = (): void => { writeStorageInvalid(key, INITIAL_VALUE) } +const setSelectedMajorStorage = (selectedMajor: any): void => { + const key = 'niaefeup-tts.selected-major' + writeStorage(key, selectedMajor) +} + +const setPickedCoursesStorage = (pickedCourses: any): void => { + const key = 'niaefeup-tts.picked-courses' + writeStorage(key, pickedCourses) +} + const updateScrappeInfo = async () => { const key = 'niaefeup-tts.info' const info = await API.getInfo() @@ -85,7 +95,9 @@ const StorageAPI = { getOptionsStorage, setOptionsStorage, deleteOptionsStorage, - updateScrappeInfo + updateScrappeInfo, + setSelectedMajorStorage, + setPickedCoursesStorage, } export default StorageAPI diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 5cae1ac3..6ee84150 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,18 +1,14 @@ -import { - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '../../../ui/dialog' +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' +import StorageAPI from '../../../../api/storage' +import CourseContext from '../../../../contexts/CourseContext' +import MajorContext from '../../../../contexts/MajorContext' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' -import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList, Ects } from './course-picker' +import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' import { CheckedCourse } from '../../../../@types' import { Course, Major } from '../../../../@types/new_index' +import { useContext, useEffect } from 'react' type Props = { openHook: [boolean, React.Dispatch>] @@ -34,6 +30,16 @@ const CoursePicker = ({ repeatedCourseControlHook, }: Props) => { // const [selectedMajor, setSelectedMajor] = selectedMajorHook + const { pickedCourses } = useContext(CourseContext) + const { selectedMajor } = useContext(MajorContext) + + useEffect(() => { + StorageAPI.setPickedCoursesStorage(pickedCourses) + }, [pickedCourses]) + + useEffect(() => { + StorageAPI.setSelectedMajorStorage(selectedMajor) + }, [selectedMajor]) return ( @@ -60,11 +66,6 @@ const CoursePicker = ({
    - - - - - ) diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index 1fcac5df..5d505198 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -10,7 +10,7 @@ type Props = { export const CourseYearCheckboxes = ({ courses }: Props) => { const { pickedCourses, setPickedCourses } = useContext(CourseContext) - const [checkboxList, setCheckboxList] = useState(courses.map((course) => pickedCourses.includes(course))) + const [checkboxList, setCheckboxList] = useState([]) const toggleCourse = (idx: number) => { // Toggle the checkbox @@ -20,18 +20,18 @@ export const CourseYearCheckboxes = ({ courses }: Props) => { return newCheckboxList }) // Add or remove the course from the pickedCourses list - if (pickedCourses.includes(courses[idx])) - setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== courses[idx])) + if (pickedCourses.some((pickedCourse) => pickedCourse.id === courses[idx].id)) + setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse.id !== courses[idx].id)) else setPickedCourses([...pickedCourses, courses[idx]]) } /* - * Update the checkboxList when the pickedCourses change + * Update the checkboxList on load and when the pickedCourses changes * This happends when the user removes a course from the pickedCourses list */ useEffect(() => { - setCheckboxList(courses.map((course) => pickedCourses.includes(course))) - }, [pickedCourses]) + setCheckboxList(courses.map((course) => pickedCourses.some((pickedCourse) => pickedCourse.id === course.id))) + }, [courses, pickedCourses]) return (
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 10fd64cd..08f9e0c5 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -1,18 +1,12 @@ import { useContext, useState } from 'react' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' -import { CourseInfo } from '../../../../../@types/new_index' import { CourseYearCheckboxes } from './CourseYearCheckboxes' import CourseContext from '../../../../../contexts/CourseContext' import { groupCoursesByYear } from '../../../../../utils/utils' import { ScrollArea } from '../../../../ui/scroll-area' -type Props = { - courses: CourseInfo[][] - pickedCourses: CourseInfo[] -} - const CourseYearTabs = () => { - const { pickedCourses, coursesInfo } = useContext(CourseContext) + const { coursesInfo } = useContext(CourseContext) const [selectedTab, setSelectedTab] = useState('1') const coursesByYear = groupCoursesByYear(coursesInfo) diff --git a/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx index 220e9b47..b29a92f1 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx @@ -1,4 +1,4 @@ -import { useContext, useEffect } from 'react' +import { useContext } from 'react' import CourseContext from '../../../../../contexts/CourseContext' import { InformationCircleIcon } from '@heroicons/react/24/solid' import { Tooltip, TooltipContent, TooltipProvider } from '../../../../ui/tooltip' @@ -19,11 +19,11 @@ const Ects = () => { - {warning == 1 + {warning === 1 ? 'O NIAEFEUP recomenda escolher 36 ou menos ECTS.' : 'O limite de créditos por semestre, por norma, é 42 ECTS'} diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 93b4f3a3..4754ff61 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -11,7 +11,7 @@ import MajorContext from '../../../../../contexts/MajorContext' * the list of possible majors. */ const MajorSearchCombobox = () => { - const { majors, setMajors, selectedMajor, setSelectedMajor } = useContext(MajorContext) + const { majors, selectedMajor, setSelectedMajor } = useContext(MajorContext) const [majorQuery, setMajorQuery] = useState('') const [selected, setSelected] = useState(selectedMajor) diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx index 667da665..f06e09f1 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx @@ -1,7 +1,7 @@ import { useContext } from 'react' +import CourseContext from '../../../../../contexts/CourseContext' import { CourseInfo } from '../../../../../@types/new_index' import { Separator } from '../../../../ui/separator' -import CourseContext from '../../../../../contexts/CourseContext' import { XMarkIcon } from '@heroicons/react/24/outline' type Props = { @@ -9,7 +9,7 @@ type Props = { } const PickedCourse = ({ course }: Props) => { - const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + const { pickedCourses, setPickedCourses } = useContext(CourseContext) const removeCourse = () => { setPickedCourses(pickedCourses.filter((pickedCourse) => pickedCourse !== course)) diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx index 04c2e970..d50f4e4e 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -1,17 +1,21 @@ -import { useContext, useEffect } from 'react' +import { useContext } from 'react' import CourseContext from '../../../../../contexts/CourseContext' import { ScrollArea } from '../../../../ui/scroll-area' import PickedCourse from './PickedCourse' +import Ects from './Ects' const PickedCoursesList = () => { - const { pickedCourses, setPickedCourses, coursesInfo, setCoursesInfo } = useContext(CourseContext) + const { pickedCourses } = useContext(CourseContext) return pickedCourses.length > 0 ? ( - - {pickedCourses.map((course) => ( - - ))} - +
    + + {pickedCourses.map((course) => ( + + ))} + + +
    ) : (
    Ainda não escolheste nenhuma cadeira. diff --git a/src/hooks/useMajor.tsx b/src/hooks/useMajor.tsx index 79c13254..74217bcd 100644 --- a/src/hooks/useMajor.tsx +++ b/src/hooks/useMajor.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useRef } from 'react' -import { Major } from '../@types' +import { Major } from '../@types/new_index' const isStorageValid = (key: string, daysElapsed: number) => { const stored = JSON.parse(localStorage.getItem(key)) diff --git a/src/pages/TimeTableScheduler.tsx b/src/pages/TimeTableScheduler.tsx index 698113a4..d0e71515 100644 --- a/src/pages/TimeTableScheduler.tsx +++ b/src/pages/TimeTableScheduler.tsx @@ -77,23 +77,22 @@ const TimeTableSchedulerPage = () => { // ============================================================================== // ============================ NEW STATES AND HOOKS ============================ const [majors, setMajors] = useState([]) // all the [majors]]] - const [selectedMajor, setSelectedMajor] = useState(null) + const [selectedMajor, setSelectedMajor] = useState( + JSON.parse(localStorage.getItem('niaefeup-tts.selected-major')) || null + ) + // const [selectedMajor, setSelectedMajor] = useState(null) const [coursesInfo, setCoursesInfo] = useState([]) - const [pickedCourses, setPickedCourses] = useState([]) + const [pickedCourses, setPickedCourses] = useState( + JSON.parse(localStorage.getItem('niaefeup-tts.picked-courses')) || [] + ) useEffect(() => { - { - /* Fetch major courses */ - } + // Fetch major courses // if (selectedMajor === null) return - BackendAPI.getCourses(selectedMajor).then((courses) => { - { - /* TODO: Remover o map de dentro do setCoursesInfo - Para isso é preciso mudar a maneira como os - dados são enviados a partir do backend - */ - } + // TODO: Remover o map de dentro do setCoursesInfo + // Para isso é preciso mudar a maneira como os + // dados são enviados a partir do backend setCoursesInfo( courses.map((course: Course) => ({ id: course.sigarra_id, @@ -110,19 +109,19 @@ const TimeTableSchedulerPage = () => { // ============================================================================== // ================================== FUNCTIONS ================================== - const fetchMajorCourses = (major: Major) => {} + // const fetchMajorCourses = (major: Major) => {} // ============================ NEW STATES AND HOOKS ============================ // ============================================================================== // add check property to courses - const courseToCheckedCourse = (majorCourses: Course[][]): CheckedCourse[][] => - majorCourses.map((year: Course[]) => - year.map((item: Course) => ({ - checked: false, - info: item, - })) - ) + // const courseToCheckedCourse = (majorCourses: Course[][]): CheckedCourse[][] => + // majorCourses.map((year: Course[]) => + // year.map((item: Course) => ({ + // checked: false, + // info: item, + // })) + // ) const getEmptyCourseOption = (course: CheckedCourse, schedules: CourseSchedule[]): CourseOption => { let teachers = [] From 1c9bcb893cecce6446753666dea347dded9df7ad Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Mon, 19 Feb 2024 18:12:15 +0000 Subject: [PATCH 041/147] refactored main features section --- .env | 3 +- src/components/home/HeroPlanner.tsx | 108 ++++++++++++++++------------ src/images/ni-stamp-back.svg | 21 ++++++ src/images/ni-stamp.svg | 56 +++++++++++++++ 4 files changed, 143 insertions(+), 45 deletions(-) create mode 100644 src/images/ni-stamp-back.svg create mode 100644 src/images/ni-stamp.svg diff --git a/.env b/.env index 3ab8e6ff..0bfe82ca 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ REACT_APP_PROD=1 REACT_APP_RELEASE_DATE=2023-01-27 -PORT=3000 \ No newline at end of file +PORT=3100 +REACT_APP_SEMESTER=2 \ No newline at end of file diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index b4e4eebe..23f64178 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -31,34 +31,19 @@ const HeroPlanner = () => { como uma melhor alternativa à ferramenta de horários do SIGARRA, para ajudar os estudantes da Universidade do Porto a planear e elaborar o seu horário para um semestre.

    - O TTS oferece aos estudantes a flexibilidade e praticidade de criar, planear e partilhar{' '} os horários com até 10 opções. - Isso permite que os alunos planejem seus semestres com antecedência, - tenham uma visão abrangente das opções disponíveis e aumentem suas chances de obter o horário desejado, evitando alocações automáticas - indesejadas durante as inscrições nas turmas. - Tens dúvidas sobre a plataforma? A{' '} + O TTS é a ferramenta que torna o processo de escolher turmas mais simples, mais flexível e da forma a perderes o menos tempo possível. + Molda o horário à tua maneira, quer seja por preferires certos professores ou dias livres. + Partilha facilmente os horários com os amigos e não deixes o horário perfeito escapar. + Tens dúvidas sobre a plataforma? A{' '} - página das FAQs + página das FAQs {' '} esclarece as dúvidas mais comuns. -

    -
    - ), - }, - { - id: 'why', - title: O que há de novo na nova versão do TTS?, - subtitle: Temos muitas novas funcionalidades do TTS e planos para futuras atualizações., - image: HomePageAltImage, - reverse: true, - content: ( -
    -

    - -

    -
    +

    +
    ), }, ] @@ -75,29 +60,29 @@ const HeroPlanner = () => { }, []) return ( -
    -
    - -

    - A melhor ferramenta para escolheres e gerires o teu horário FEUP! -

    -
    -
    -
    - NIAEFEUP -
    -
    - NIAEFEUP +
    +
    +
    +
    + NIAEFEUP +
    +
    + NIAEFEUP +
    +
    -
    -
    -
    +
    + +
    +

    + Não deixes o horário perfeito escapar! +

    {data.map((item, itemIdx) => (
    @@ -130,6 +115,41 @@ const HeroPlanner = () => { ))}
    + +
    + +
    +

    + Temos muitas novas funcionalidades do TTS e planos para futuras atualizações. +

    + +
    +
    +

    Partilhar horários com amigos

    +
    +
    +

    Definir até 10 opções de horários

    +
    +
    +

    Completar o horário com cadeiras aleatórias

    +
    +
    +

    Tirar print ao horário

    +
    +
    +

    Filtrar as opções de horários pelos professores

    +
    +
    +

    Reordenar e personalizar as opções de horário

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/ni-stamp.svg b/src/images/ni-stamp.svg new file mode 100644 index 00000000..e36881ca --- /dev/null +++ b/src/images/ni-stamp.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0ba73c0ff2d200185a0c2d381012eb6203c7d51d Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Mon, 19 Feb 2024 19:17:23 +0000 Subject: [PATCH 042/147] Remove course unit UI --- src/app.css | 2 +- .../sidebar/SelectedOptionController.tsx | 2 +- .../planner/sidebar/SessionController.tsx | 12 +---- .../sessionController/CoursePicker.tsx | 48 ++++++++++--------- .../sidebar/sessionController/CsvExport.tsx | 1 - .../course-picker/PickedCourse.tsx | 22 +++++---- .../course-picker/PickedCoursesList.tsx | 14 ++---- 7 files changed, 46 insertions(+), 55 deletions(-) diff --git a/src/app.css b/src/app.css index d61a708e..7e1efd13 100644 --- a/src/app.css +++ b/src/app.css @@ -81,4 +81,4 @@ button { #option-name { -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ -} +} \ No newline at end of file diff --git a/src/components/planner/sidebar/SelectedOptionController.tsx b/src/components/planner/sidebar/SelectedOptionController.tsx index 389245bd..07b63d29 100644 --- a/src/components/planner/sidebar/SelectedOptionController.tsx +++ b/src/components/planner/sidebar/SelectedOptionController.tsx @@ -2,7 +2,7 @@ import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover' import EmojiPicker, { Theme, EmojiStyle, SuggestionMode } from 'emoji-picker-react' import { ThemeContext } from '../../../contexts/ThemeContext' import { useState, useContext, useRef } from 'react' -import { CourseOption, ImportedCourses, Major, MultipleOptions } from '../../../@types' +import { CourseOption, ImportedCourses, MultipleOptions } from '../../../@types' import CopyOption from './selectedOptionController/CopyOption' import PasteOption from './selectedOptionController/PasteOption' import RandomFill from './selectedOptionController/RandomFill' diff --git a/src/components/planner/sidebar/SessionController.tsx b/src/components/planner/sidebar/SessionController.tsx index dd0d2394..36072b6c 100644 --- a/src/components/planner/sidebar/SessionController.tsx +++ b/src/components/planner/sidebar/SessionController.tsx @@ -1,9 +1,7 @@ import { CheckedCourse, Major, CourseOption, MultipleOptions } from '../../../@types' -// import OldCoursePicker from './sessionController/CoursePicker' import CoursePicker from './sessionController/CoursePicker' -import CollaborativeSession from './sessionController/CollaborativeSession' import Export from './sessionController/Export' type Props = { @@ -35,15 +33,7 @@ const SessionController = ({ return (
    {/* Course Picker */} - + {/* */} diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 6ee84150..30e0d3b4 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -1,34 +1,26 @@ -import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../../ui/dialog' +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, + DialogFooter, + DialogClose, +} from '../../../ui/dialog' import StorageAPI from '../../../../api/storage' import CourseContext from '../../../../contexts/CourseContext' import MajorContext from '../../../../contexts/MajorContext' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' -import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList } from './course-picker' +import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList, Ects } from './course-picker' import { PencilSquareIcon } from '@heroicons//react/24/solid' -import { CheckedCourse } from '../../../../@types' import { Course, Major } from '../../../../@types/new_index' import { useContext, useEffect } from 'react' +import { TrashIcon } from '@heroicons/react/24/solid' +import { CheckIcon } from '@heroicons/react/24/outline' -type Props = { - openHook: [boolean, React.Dispatch>] - coursesHook: [CheckedCourse[][], React.Dispatch>] - extraCoursesActiveHook: [boolean, React.Dispatch>] - extraCoursesModalOpenHook: [boolean, React.Dispatch>] - sourceBufferHook: [CheckedCourse[][], React.Dispatch>] - destBufferHook: [CheckedCourse[][], React.Dispatch>] - repeatedCourseControlHook: [boolean, React.Dispatch>] -} - -const CoursePicker = ({ - openHook, - coursesHook, - extraCoursesActiveHook, - extraCoursesModalOpenHook, - sourceBufferHook, - destBufferHook, - repeatedCourseControlHook, -}: Props) => { +const CoursePicker = () => { // const [selectedMajor, setSelectedMajor] = selectedMajorHook const { pickedCourses } = useContext(CourseContext) const { selectedMajor } = useContext(MajorContext) @@ -66,6 +58,18 @@ const CoursePicker = ({
    + +
    +
    + + + + +
    + ) diff --git a/src/components/planner/sidebar/sessionController/CsvExport.tsx b/src/components/planner/sidebar/sessionController/CsvExport.tsx index b06f1ac8..a1730b02 100644 --- a/src/components/planner/sidebar/sessionController/CsvExport.tsx +++ b/src/components/planner/sidebar/sessionController/CsvExport.tsx @@ -1,6 +1,5 @@ import { ArrowUpOnSquareIcon } from '@heroicons/react/24/outline' import { MultipleOptions } from '../../../../@types' -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' type Props = { multipleOptions: MultipleOptions diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx index f06e09f1..aa3d684e 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCourse.tsx @@ -2,7 +2,8 @@ import { useContext } from 'react' import CourseContext from '../../../../../contexts/CourseContext' import { CourseInfo } from '../../../../../@types/new_index' import { Separator } from '../../../../ui/separator' -import { XMarkIcon } from '@heroicons/react/24/outline' +import { Button } from '../../../../ui/button' +import { XMarkIcon } from '@heroicons/react/24/solid' type Props = { course: CourseInfo @@ -16,16 +17,17 @@ const PickedCourse = ({ course }: Props) => { } return ( -
    removeCourse()} - className="group m-2 ml-0 mr-4 flex cursor-pointer items-center rounded bg-lightish p-2" - > -
    - {course.name} ({course.acronym}) +
    +
    + {course.ects} + +
    + {course.name} ({course.acronym}) +
    - -
    {course.ects} ECTS
    - +
    ) } diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx index d50f4e4e..09264eeb 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -2,20 +2,16 @@ import { useContext } from 'react' import CourseContext from '../../../../../contexts/CourseContext' import { ScrollArea } from '../../../../ui/scroll-area' import PickedCourse from './PickedCourse' -import Ects from './Ects' const PickedCoursesList = () => { const { pickedCourses } = useContext(CourseContext) return pickedCourses.length > 0 ? ( -
    - - {pickedCourses.map((course) => ( - - ))} - - -
    + + {pickedCourses.map((course) => ( + + ))} + ) : (
    Ainda não escolheste nenhuma cadeira. From 4f34edc13ced13653f25d316bce8207a63177fbd Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Mon, 19 Feb 2024 22:22:26 +0000 Subject: [PATCH 043/147] added description to each feature --- src/components/home/FeatureCards.tsx | 54 ++++++++++++++++++++++++ src/components/home/HeroPlanner.tsx | 63 +++++++++++----------------- 2 files changed, 79 insertions(+), 38 deletions(-) create mode 100644 src/components/home/FeatureCards.tsx diff --git a/src/components/home/FeatureCards.tsx b/src/components/home/FeatureCards.tsx new file mode 100644 index 00000000..872ae2d2 --- /dev/null +++ b/src/components/home/FeatureCards.tsx @@ -0,0 +1,54 @@ +import { Button } from '../ui/button' +import { BoltIcon, FunnelIcon, CameraIcon, ShareIcon, HashtagIcon, PencilIcon} from '@heroicons/react/24/outline'; + +// Define features with title, description, and the Icon component +const features = [ + { + title: "Reordenar e personalizar as opções de horário", + description: "Dá-te controlo total para ajustar e personalizar as tuas opções de horário conforme a tua disponibilidade e necessidade.", + Icon: PencilIcon, + }, + { + title: "Partilhar horários com amigos", + description: "Permite que compartilhes facilmente o teu horário de modo a que escolhas as mesmas turmas que os teus amigos.", + Icon: ShareIcon, + }, + { + title: "Definir até 10 opções de horários", + description: "Oferece a flexibilidade de gerir múltiplas opções de horários conforme a definido nos parâmetros do SIGARRA.", + Icon: HashtagIcon, + }, + { + title: "Completar o horário com cadeiras aleatórias", + description: "No caso de indecisão, preenche automaticamente o teu horário com cadeiras aleatórias para explorar as diferentes possibilidades.", + Icon: BoltIcon, + }, + { + title: "Tirar print ao horário", + description: "Permite que guardes ou imprimas o teu horário para referência rápida.", + Icon: CameraIcon, + }, + { + title: "Filtrar as opções de horários pelos professores", + description: "Facilita a escolha de horários com base nos teus professores preferidos.", + Icon: FunnelIcon, + }, +]; + +const FeatureCards = () => { + return ( +
    + {features.map((feature, index) => ( +
    + +

    {feature.title}

    +

    {feature.description}

    +
    + ))} +
    + ); +}; + +export default FeatureCards; diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 1e7c74bd..da75f28f 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -1,9 +1,12 @@ import classNames from 'classnames' import { Link } from 'react-router-dom' -import { useEffect } from 'react' -import { HomePageImage, HomePageAltImage, ScheduleDarkImage, LogoNIAEFEUPAltImage, StampNIAEFEUPImage, BackStampNIAEFEUPImage } from '../../images' +import { useEffect, useContext } from 'react' +import { ScheduleLightImage, ScheduleDarkImage, StampNIAEFEUPImage, BackStampNIAEFEUPImage } from '../../images' import { ArrowRightIcon } from '@heroicons/react/24/outline' import { getPath, config } from '../../utils/utils' +import FeatureCards from './FeatureCards'; +import { ThemeContext } from '../../contexts/ThemeContext'; + type Card = { id: string @@ -15,13 +18,15 @@ type Card = { } const HeroPlanner = () => { + const { enabled } = useContext(ThemeContext); + const ScheduleImage = enabled ? ScheduleDarkImage : ScheduleLightImage; const data: Card[] = [ { id: 'intro', reverse: false, title: 'O que é o TTS?', subtitle: 'O teu melhor amigo para escolher e gerir o teu horário na UPorto.', - image: ScheduleDarkImage, + image: ScheduleImage, content: (

    @@ -68,7 +73,7 @@ const HeroPlanner = () => { NIAEFEUP

    -
    +
    -
    +

    Não deixes o horário perfeito escapar!

    @@ -113,41 +118,23 @@ const HeroPlanner = () => { ))}
    - -
    - -
    -

    - Temos muitas novas funcionalidades do TTS e planos para futuras atualizações. -

    - -
    -
    -

    Partilhar horários com amigos

    -
    -
    -

    Definir até 10 opções de horários

    -
    -
    -

    Completar o horário com cadeiras aleatórias

    -
    -
    -

    Tirar print ao horário

    -
    -
    -

    Filtrar as opções de horários pelos professores

    -
    -
    -

    Reordenar e personalizar as opções de horário

    -
    +
    +
    + +
    +

    + Temos novas funcionalidades do TTS e planos para futuras atualizações. +

    +
    +
    Date: Tue, 20 Feb 2024 14:44:56 +0000 Subject: [PATCH 044/147] Double click on tab to select all course units from a specific year --- .../sessionController/CoursePicker.tsx | 6 +-- .../course-picker/CourseYearTabs.tsx | 43 +++++++++++++++---- .../course-picker/PickedCoursesList.tsx | 4 +- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 30e0d3b4..db584091 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -51,10 +51,8 @@ const CoursePicker = () => { -
    -
    - -
    +
    +
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 08f9e0c5..16b6bc44 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -6,25 +6,50 @@ import { groupCoursesByYear } from '../../../../../utils/utils' import { ScrollArea } from '../../../../ui/scroll-area' const CourseYearTabs = () => { - const { coursesInfo } = useContext(CourseContext) + const { coursesInfo, pickedCourses, setPickedCourses } = useContext(CourseContext) const [selectedTab, setSelectedTab] = useState('1') - const coursesByYear = groupCoursesByYear(coursesInfo) + const handleClick = (event, idx) => { + switch (event.detail) { + case 1: { + break + } + default: { + let newPickedCourses = [...pickedCourses] + + if (pickedCourses.some((pickedCourse) => pickedCourse.course_unit_year === parseInt(selectedTab))) { + newPickedCourses = pickedCourses.filter( + (pickedCourse) => pickedCourse.course_unit_year !== parseInt(selectedTab) + ) + } else { + newPickedCourses = [...newPickedCourses, ...coursesByYear[parseInt(selectedTab) - 1]] + } + + setPickedCourses(newPickedCourses) + break + } + } + } + return ( - + {coursesByYear.map((_, idx) => ( - + handleClick(event, idx)} key={idx} value={`${idx + 1}`}> {`${idx + 1}º Ano`} ))} - {coursesByYear.map((yearCourses, idx) => ( - - {} - - ))} + {coursesByYear.map((yearCourses, idx) => { + return ( + + + + + + ) + })} ) } diff --git a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx index 09264eeb..b03760b0 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/PickedCoursesList.tsx @@ -7,13 +7,13 @@ const PickedCoursesList = () => { const { pickedCourses } = useContext(CourseContext) return pickedCourses.length > 0 ? ( - + {pickedCourses.map((course) => ( ))} ) : ( -
    +
    Ainda não escolheste nenhuma cadeira.
    ) From c5334ad4fc5ae13f67b3c97cfb622bb9ef384157 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Tue, 20 Feb 2024 18:41:41 +0000 Subject: [PATCH 045/147] Double click on tab to select all course units from a specific year finished --- src/App.tsx | 2 +- src/api/backend.ts | 14 +- src/api/storage.ts | 2 +- src/components/home/HeroPlanner.tsx | 2 +- src/components/layout/Header.tsx | 2 +- src/components/planner/Schedule.tsx | 2 +- .../planner/schedule/ClassToggle.tsx | 2 +- .../planner/schedules/InspectLessonBox.tsx | 23 +- .../planner/schedules/LessonBox.tsx | 2 +- .../planner/schedules/ResponsiveLessonBox.tsx | 7 +- .../planner/schedules/ScheduleGrid.tsx | 2 +- .../planner/sidebar/ClassSelector.tsx | 2 +- .../planner/sidebar/CoursesController.tsx | 2 +- .../selectedOptionController/PasteOption.tsx | 2 +- .../selectedOptionController/RandomFill.tsx | 2 +- .../sessionController/OldCoursePicker.tsx | 2 +- .../course-picker/CourseYearTabs.tsx | 24 +- .../sessionController/course-picker/Ects.tsx | 1 - src/components/ui/alert-dialog.tsx | 2 +- src/components/ui/button.tsx | 2 +- src/components/ui/checkbox.tsx | 2 +- src/components/ui/dialog.tsx | 2 +- src/components/ui/dropdown-menu.tsx | 2 +- src/components/ui/input.tsx | 2 +- src/components/ui/label.tsx | 2 +- src/components/ui/popover.tsx | 2 +- src/components/ui/scroll-area.tsx | 2 +- src/components/ui/separator.tsx | 2 +- src/components/ui/tabs.tsx | 2 +- src/components/ui/toast.tsx | 2 +- src/components/ui/tooltip.tsx | 2 +- src/pages/NotFound.tsx | 2 +- src/utils/data.ts | 1109 ----------------- src/utils/{utils.ts => index.ts} | 14 + tsconfig.json | 6 +- 35 files changed, 72 insertions(+), 1180 deletions(-) delete mode 100644 src/utils/data.ts rename src/utils/{utils.ts => index.ts} (96%) diff --git a/src/App.tsx b/src/App.tsx index 4f99636c..fd593fc4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,7 +2,7 @@ import Layout from './components/layout' import StorageAPI from './api/storage' import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' import { AboutPage, TimeTableSchedulerPage, NotFoundPage, FaqsPage } from './pages' -import { getPath, config } from './utils/utils' +import { getPath, config } from './utils' import { useDarkMode } from './hooks' import { ThemeContext } from './contexts/ThemeContext' import { Toaster } from './components/ui/toaster' diff --git a/src/api/backend.ts b/src/api/backend.ts index a1d611cc..8477060a 100644 --- a/src/api/backend.ts +++ b/src/api/backend.ts @@ -1,6 +1,5 @@ import { CheckedCourse, Major } from '../@types' -import { extraCoursesData } from '../utils/data' -import { getSemester, config, dev_config } from '../utils/utils' +import { getSemester, config, dev_config } from '../utils' const prod_val = process.env.REACT_APP_PROD @@ -90,16 +89,6 @@ const getMajorCoursesSchedules = async (courses: CheckedCourse[][]) => { return schedules } -/** - * Retrieves all course units outside of a given major - * @param major major to exclude course units from - * @returns array of course units - */ -const getExtraCourses = (major: Major) => { - // TODO: implement - return extraCoursesData -} - /** * Retrieves the scrappe info from the backend */ @@ -113,7 +102,6 @@ const api = { getCourseSchedule, getCoursesSchedules, getMajorCoursesSchedules, - getExtraCourses, getInfo } diff --git a/src/api/storage.ts b/src/api/storage.ts index 77473a1b..2fa2643b 100644 --- a/src/api/storage.ts +++ b/src/api/storage.ts @@ -1,5 +1,5 @@ import { MultipleOptions } from '../@types' -import { getCourseTeachers } from '../utils/utils' +import { getCourseTeachers } from '../utils' import API from './backend' diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index 0c15f721..64d897d0 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -3,7 +3,7 @@ import { Link } from 'react-router-dom' import { useEffect } from 'react' import { HomePageImage, HomePageAltImage, ScheduleDarkImage, LogoNIAEFEUPAltImage } from '../../images' import { ArrowRightIcon } from '@heroicons/react/24/outline' -import { getPath, config } from '../../utils/utils' +import { getPath, config } from '../../utils' type Card = { id: string diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index cf6f08a0..0dc88f6b 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -2,7 +2,7 @@ import { Link } from 'react-router-dom' import { Disclosure } from '@headlessui/react' import { DarkModeSwitch } from './DarkModeSwitch' import { LogoNIAEFEUPImage } from '../../images' -import { config, getPath } from '../../utils/utils' +import { config, getPath } from '../../utils' import { Bars3Icon, XMarkIcon, diff --git a/src/components/planner/Schedule.tsx b/src/components/planner/Schedule.tsx index 64cba609..72e29db2 100644 --- a/src/components/planner/Schedule.tsx +++ b/src/components/planner/Schedule.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames' import { useMemo, useRef, useState } from 'react' import { Lesson, CourseOption } from '../../@types' import { ScheduleGrid, LessonBox, ResponsiveLessonBox } from './schedules' -import { minHour, maxHour, convertHour, convertWeekdayLong, timesCollide } from '../../utils/utils' +import { minHour, maxHour, convertHour, convertWeekdayLong, timesCollide } from '../../utils' import { useShowGrid } from '../../hooks' import ToggleScheduleGrid from './schedule/ToggleScheduleGrid' import PrintSchedule from './schedule/PrintSchedule' diff --git a/src/components/planner/schedule/ClassToggle.tsx b/src/components/planner/schedule/ClassToggle.tsx index 03c2810d..9052e517 100644 --- a/src/components/planner/schedule/ClassToggle.tsx +++ b/src/components/planner/schedule/ClassToggle.tsx @@ -1,6 +1,6 @@ import { cva, type VariantProps } from 'class-variance-authority' -import { cn } from '../../../utils/utils' +import { cn } from '../../../utils' /** * //TODO - complete this with colors for each class type diff --git a/src/components/planner/schedules/InspectLessonBox.tsx b/src/components/planner/schedules/InspectLessonBox.tsx index bde3d5ac..560984ee 100644 --- a/src/components/planner/schedules/InspectLessonBox.tsx +++ b/src/components/planner/schedules/InspectLessonBox.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames' import { Lesson } from '../../../@types' -import { convertWeekdayLong, getClassTypeClassName, getLessonBoxTime, getLessonTypeLongName } from '../../../utils/utils' +import { convertWeekdayLong, getClassTypeClassName, getLessonBoxTime, getLessonTypeLongName } from '../../../utils' type Props = { lesson: Lesson @@ -22,24 +22,19 @@ const InspectLessonBox = ({ lesson, conflict }: Props) => { getClassTypeClassName(lessonType) )} > -
    -
    - +
    +
    + {convertWeekdayLong(lesson.schedule.day)} {lessonType} {getLessonBoxTime(lesson.schedule)}
    -
    -
    +
    + -
    +
    {lesson.schedule.location} {lesson.schedule.professor_information.map((prof_info) => prof_info.acronym).join(', ')} diff --git a/src/components/planner/schedules/LessonBox.tsx b/src/components/planner/schedules/LessonBox.tsx index a7854c50..3b86d738 100644 --- a/src/components/planner/schedules/LessonBox.tsx +++ b/src/components/planner/schedules/LessonBox.tsx @@ -8,7 +8,7 @@ import { getLessonBoxTime, maxHour, minHour, -} from '../../../utils/utils' +} from '../../../utils' import LessonPopover from './LessonPopover' import ConflictsPopover from './ConflictsPopover' diff --git a/src/components/planner/schedules/ResponsiveLessonBox.tsx b/src/components/planner/schedules/ResponsiveLessonBox.tsx index 99398fa8..baa937be 100644 --- a/src/components/planner/schedules/ResponsiveLessonBox.tsx +++ b/src/components/planner/schedules/ResponsiveLessonBox.tsx @@ -1,11 +1,6 @@ import classNames from 'classnames' import { Lesson } from '../../../@types' -import { - convertWeekdayLong, - getClassTypeClassName, - getLessonBoxTime, - getLessonTypeLongName, -} from '../../../utils/utils' +import { convertWeekdayLong, getClassTypeClassName, getLessonBoxTime, getLessonTypeLongName } from '../../../utils' type Props = { lesson: Lesson diff --git a/src/components/planner/schedules/ScheduleGrid.tsx b/src/components/planner/schedules/ScheduleGrid.tsx index 93e04c2c..66eccadf 100644 --- a/src/components/planner/schedules/ScheduleGrid.tsx +++ b/src/components/planner/schedules/ScheduleGrid.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames' -import { maxHour, minHour } from '../../../utils/utils' +import { maxHour, minHour } from '../../../utils' type Props = { showGrid: boolean diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index 93dcedd5..74ff8203 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -2,7 +2,7 @@ import { ChevronUpDownIcon, ExclamationTriangleIcon, LockClosedIcon, LockOpenIco import { User } from 'lucide-react' import { useEffect, useMemo, useRef, useState } from 'react' import { CourseOption, CourseSchedule, MultipleOptions } from '../../../@types' -import { getScheduleOptionDisplayText, schedulesConflict } from '../../../utils/utils' +import { getScheduleOptionDisplayText, schedulesConflict } from '../../../utils' import { Button } from '../../ui/button' import { DropdownMenu, diff --git a/src/components/planner/sidebar/CoursesController.tsx b/src/components/planner/sidebar/CoursesController.tsx index 8d2f15e1..f46019d7 100644 --- a/src/components/planner/sidebar/CoursesController.tsx +++ b/src/components/planner/sidebar/CoursesController.tsx @@ -1,4 +1,4 @@ -import { removeDuplicatesFromCourseOption } from '../../../utils/utils' +import { removeDuplicatesFromCourseOption } from '../../../utils' import ClassSelector from './ClassSelector' const CoursesController = ({ multilpleOptionsHook, isImportedOptionHook }) => { diff --git a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx index cee9bb51..ca421e25 100644 --- a/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx +++ b/src/components/planner/sidebar/selectedOptionController/PasteOption.tsx @@ -6,7 +6,7 @@ import { CourseSchedule, ImportedCourses, } from '../../../../@types' -import { getCourseTeachers } from '../../../../utils/utils' +import { getCourseTeachers } from '../../../../utils' import { Button } from '../../../ui/button' import { ClipboardDocumentIcon } from '@heroicons/react/24/outline' import { useToast } from '../../../ui/use-toast' diff --git a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx index 55765bd4..eb45bcf4 100644 --- a/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx +++ b/src/components/planner/sidebar/selectedOptionController/RandomFill.tsx @@ -1,7 +1,7 @@ import { BoltIcon } from '@heroicons/react/24/outline' import { CourseOption, CourseSchedule, MultipleOptions } from '../../../../@types' import { useEffect, useState } from 'react' -import { removeDuplicatesFromCourseOption } from '../../../../utils/utils' +import { removeDuplicatesFromCourseOption } from '../../../../utils' import { Button } from '../../../ui/button' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/tooltip' import { ScrollArea } from '../../../ui/scroll-area' diff --git a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx index 7d06b486..d1326add 100644 --- a/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/OldCoursePicker.tsx @@ -3,7 +3,7 @@ import { Dialog, Transition } from '@headlessui/react' import { Fragment, useEffect, useState } from 'react' import Alert, { AlertType } from '../../Alert' import { CheckedCourse, Course, Major } from '../../../../@types' -import { getSchoolYear, getSemester } from '../../../../utils/utils' +import { getSchoolYear, getSemester } from '../../../../utils' import { AcademicCapIcon, CheckCircleIcon, PencilSquareIcon, PlusIcon, XCircleIcon } from '@heroicons//react/24/solid' import { is_null_or_undefined } from '../../../../pages/TimeTableScheduler' import { MajorSearchCombobox } from './course-picker' diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index 16b6bc44..cd178692 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -2,8 +2,9 @@ import { useContext, useState } from 'react' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../ui/tabs' import { CourseYearCheckboxes } from './CourseYearCheckboxes' import CourseContext from '../../../../../contexts/CourseContext' -import { groupCoursesByYear } from '../../../../../utils/utils' +import { groupCoursesByYear } from '../../../../../utils' import { ScrollArea } from '../../../../ui/scroll-area' +import { isSubset } from '../../../../../utils' const CourseYearTabs = () => { const { coursesInfo, pickedCourses, setPickedCourses } = useContext(CourseContext) @@ -16,17 +17,17 @@ const CourseYearTabs = () => { break } default: { - let newPickedCourses = [...pickedCourses] - - if (pickedCourses.some((pickedCourse) => pickedCourse.course_unit_year === parseInt(selectedTab))) { - newPickedCourses = pickedCourses.filter( - (pickedCourse) => pickedCourse.course_unit_year !== parseInt(selectedTab) + let newPickedCourses = new Set([...pickedCourses]) + const yearCourses = new Set(coursesByYear[parseInt(idx)]) + if (isSubset(yearCourses, newPickedCourses, (course1, course2) => course1.id === course2.id)) { + newPickedCourses = new Set( + pickedCourses.filter((pickedCourse) => pickedCourse.course_unit_year !== parseInt(selectedTab)) ) } else { - newPickedCourses = [...newPickedCourses, ...coursesByYear[parseInt(selectedTab) - 1]] + newPickedCourses = new Set([...pickedCourses, ...coursesByYear[parseInt(selectedTab) - 1]]) } - setPickedCourses(newPickedCourses) + setPickedCourses([...newPickedCourses.values()]) break } } @@ -36,7 +37,12 @@ const CourseYearTabs = () => { {coursesByYear.map((_, idx) => ( - handleClick(event, idx)} key={idx} value={`${idx + 1}`}> + handleClick(event, idx)} + key={idx} + value={`${idx + 1}`} + > {`${idx + 1}º Ano`} ))} diff --git a/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx index b29a92f1..a0fcbbe2 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/Ects.tsx @@ -6,7 +6,6 @@ import { TooltipTrigger } from '@radix-ui/react-tooltip' const Ects = () => { const { pickedCourses } = useContext(CourseContext) - const totalEcts = pickedCourses.reduce((acc, course) => acc + course.ects, 0) const warning = totalEcts > 42 ? 2 : totalEcts > 36 ? 1 : 0 diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx index 8fe02d29..324a6e3a 100644 --- a/src/components/ui/alert-dialog.tsx +++ b/src/components/ui/alert-dialog.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' import { buttonVariants } from './button' const AlertDialog = AlertDialogPrimitive.Root diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 21c635ff..7d2c0134 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import { Slot } from '@radix-ui/react-slot' import { cva, type VariantProps } from 'class-variance-authority' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const buttonVariants = cva( 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300', diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index a9154017..5d7e2349 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import * as CheckboxPrimitive from '@radix-ui/react-checkbox' import { Check } from 'lucide-react' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const Checkbox = React.forwardRef< React.ElementRef, diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index 4fe42b97..4c7c52fa 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import * as DialogPrimitive from '@radix-ui/react-dialog' import { X } from 'lucide-react' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const Dialog = DialogPrimitive.Root diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx index b1714d3f..c8a749b6 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/src/components/ui/dropdown-menu.tsx @@ -1,7 +1,7 @@ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' import { Check, ChevronRight, Circle } from 'lucide-react' import * as React from 'react' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const DropdownMenu = DropdownMenuPrimitive.Root diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index f398c50c..4c1f8fe5 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -1,6 +1,6 @@ import * as React from 'react' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' export interface InputProps extends React.InputHTMLAttributes {} diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx index 59ac0e28..45c8f3fc 100644 --- a/src/components/ui/label.tsx +++ b/src/components/ui/label.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import * as LabelPrimitive from '@radix-ui/react-label' import { cva, type VariantProps } from 'class-variance-authority' -import { cn } from '../../../src/utils/utils' +import { cn } from '../../utils' const labelVariants = cva( 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:text-white' diff --git a/src/components/ui/popover.tsx b/src/components/ui/popover.tsx index d442d3b5..5d4915f9 100644 --- a/src/components/ui/popover.tsx +++ b/src/components/ui/popover.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as PopoverPrimitive from '@radix-ui/react-popover' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const Popover = PopoverPrimitive.Root diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx index ce4a64ac..a39caa81 100644 --- a/src/components/ui/scroll-area.tsx +++ b/src/components/ui/scroll-area.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const ScrollArea = React.forwardRef< React.ElementRef, diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx index 3f565487..016c41a9 100644 --- a/src/components/ui/separator.tsx +++ b/src/components/ui/separator.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as SeparatorPrimitive from '@radix-ui/react-separator' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const Separator = React.forwardRef< React.ElementRef, diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx index f3546d94..db63a52b 100644 --- a/src/components/ui/tabs.tsx +++ b/src/components/ui/tabs.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as TabsPrimitive from '@radix-ui/react-tabs' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const Tabs = TabsPrimitive.Root diff --git a/src/components/ui/toast.tsx b/src/components/ui/toast.tsx index 75856703..c5ec3bc7 100644 --- a/src/components/ui/toast.tsx +++ b/src/components/ui/toast.tsx @@ -3,7 +3,7 @@ import * as ToastPrimitives from '@radix-ui/react-toast' import { cva, type VariantProps } from 'class-variance-authority' import { X } from 'lucide-react' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const ToastProvider = ToastPrimitives.Provider diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx index 6b67da70..34734c60 100644 --- a/src/components/ui/tooltip.tsx +++ b/src/components/ui/tooltip.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import * as TooltipPrimitive from '@radix-ui/react-tooltip' -import { cn } from '../../utils/utils' +import { cn } from '../../utils' const TooltipProvider = TooltipPrimitive.Provider diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx index 7c66086b..5458c6bf 100644 --- a/src/pages/NotFound.tsx +++ b/src/pages/NotFound.tsx @@ -1,5 +1,5 @@ import { Link } from 'react-router-dom' -import { config } from '../utils/utils' +import { config } from '../utils' const NotFoundPage = () => (
    diff --git a/src/utils/data.ts b/src/utils/data.ts deleted file mode 100644 index 9f0acc3b..00000000 --- a/src/utils/data.ts +++ /dev/null @@ -1,1109 +0,0 @@ -import { Major, Course } from '../@types' - -export const majorsData: Major[] = [ -// { -// id: 1, -// name: 'Licenciatura em Engenharia Informática e Computação', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 2, -// name: 'Licenciatura em Engenharia Eletrotécnica e de Computadores', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 3, -// name: 'Licenciatura em Engenharia Civil', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 4, -// name: 'Licenciatura em Engenharia Mecânica', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 5, -// name: 'Mestrado em Engenharia Informática e Computação', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 6, -// name: 'Mestrado em Engenharia Eletrotécnica e de Computadores', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 7, -// name: 'Mestrado em Engenharia Civil', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 8, -// name: 'Mestrado em Engenharia Química', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 9, -// name: 'Mestrado em Engenharia Mecânica', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 10, -// name: 'Mestrado em Engenharia do Ambiente', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// { -// id: 11, -// name: 'Mestrado em Engenharia e Gestão Industrial', -// course_id: 0, -// faculty: 1, -// acronym: 'M.EIC', -// course_type: 'M', -// year: 2021, -// url: 'https://sigarra.up.pt/feup/pt/cur_geral.cur_view?pv_curso_id=22862', -// plan_url: 'https://sigarra.up.pt/feup/pt/CUR_GERAL.CUR_PLANOS_ESTUDOS_VIEW?pv_plano_id=31204&pv_ano_lectivo=2021', -// last_updated: '2022-02-19T14:41:34Z', -// }, -// ] - -// export const coursesData: Course[][] = [ -// [ -// { -// id: 1, -// course_id: 0, -// course_unit_id: 484400, -// course: 'L.EIC007', -// name: 'Análise Matemática II', -// acronym: 'AM II', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484400', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484400 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 2, -// course_id: 0, -// course_unit_id: 484401, -// course: 'L.EIC008', -// name: 'Física I', -// acronym: 'F I', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484401', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484401 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 3, -// course_id: 0, -// course_unit_id: 484423, -// course: 'L.EIC010', -// name: 'Teoria da Computação', -// acronym: 'TC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484423', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484423 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 4, -// course_id: 0, -// course_unit_id: 484399, -// course: 'L.EIC006', -// name: 'Arquitetura de Computadores', -// acronym: 'AC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484399', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484399 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 5, -// course_id: 0, -// course_unit_id: 484422, -// course: 'L.EIC009', -// name: 'Programação', -// acronym: 'P', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484422', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484422 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// ], -// [ -// { -// id: 6, -// course_id: 0, -// course_unit_id: 484426, -// course: 'L.EIC018', -// name: 'Laboratório de Computadores', -// acronym: 'LC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484426', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484426 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 7, -// course_id: 0, -// course_unit_id: 484427, -// course: 'L.EIC019', -// name: 'Linguagens e Tecnologias Web', -// acronym: 'LTW', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484427', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484427 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 8, -// course_id: 0, -// course_unit_id: 484424, -// course: 'L.EIC016', -// name: 'Desenho de Algoritmos', -// acronym: 'DA', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484424', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484424 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 9, -// course_id: 0, -// course_unit_id: 484425, -// course: 'L.EIC017', -// name: 'Engenharia de Software', -// acronym: 'ES', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484425', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484425 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 10, -// course_id: 0, -// course_unit_id: 484428, -// course: 'L.EIC020', -// name: 'Métodos Estatísticos', -// acronym: 'ME', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484428', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484428 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// ], -// [ -// { -// id: 11, -// course_id: 0, -// course_unit_id: 484381, -// course: 'L.EIC028', -// name: 'Computação Paralela e Distribuída', -// acronym: 'CPD', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484381', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484381 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 12, -// course_id: 0, -// course_unit_id: 484379, -// course: 'L.EIC026', -// name: 'Compiladores', -// acronym: 'C', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484379', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484379 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 13, -// course_id: 0, -// course_unit_id: 484380, -// course: 'L.EIC027', -// name: 'Computação Gráfica', -// acronym: 'CG', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484380', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484380 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 14, -// course_id: 0, -// course_unit_id: 484443, -// course: 'L.EIC030', -// name: 'Projeto Integrador', -// acronym: 'PI', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484443', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484443 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 15, -// course_id: 0, -// course_unit_id: 484442, -// course: 'L.EIC029', -// name: 'Inteligência Artificial', -// acronym: 'IA', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484442', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484442 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// ], -// ] - -// export const schedulesData: CourseSchedule[][] = [ -// [ -// { -// day: 1, -// duration: '2.0', -// start_time: '9.0', -// location: 'B002', -// lesson_type: 'T', -// teacher_acronym: 'LPR', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2345', -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B342', -// lesson_type: 'TP', -// teacher_acronym: 'HLC', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC01', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B217', -// lesson_type: 'TP', -// teacher_acronym: 'APR', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC02', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '10.5', -// location: 'B206', -// lesson_type: 'TP', -// teacher_acronym: 'NRSG', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC03', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B202', -// lesson_type: 'TP', -// teacher_acronym: 'NRSG', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC04', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '10.5', -// location: 'B107', -// lesson_type: 'TP', -// teacher_acronym: 'LPR', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC05', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B307', -// lesson_type: 'TP', -// teacher_acronym: 'HLC', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC06', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B306', -// lesson_type: 'TP', -// teacher_acronym: 'APR', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC07', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B204', -// lesson_type: 'TP', -// teacher_acronym: 'HLC', -// course_unit_id: 484442, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC08', -// composed_class_name: null, -// }, -// ], -// [ -// { -// day: 5, -// duration: '3.0', -// start_time: '10', -// location: 'B119', -// lesson_type: 'OT', -// teacher_acronym: 'APR', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC01', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '14', -// location: 'B340', -// lesson_type: 'OT', -// teacher_acronym: 'NHF', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC02', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '14', -// location: 'B113', -// lesson_type: 'OT', -// teacher_acronym: 'JPF', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC03', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '14', -// location: 'B115', -// lesson_type: 'OT', -// teacher_acronym: 'MTC', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC04', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '10', -// location: 'B220', -// lesson_type: 'OT', -// teacher_acronym: 'NHF', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC05', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '10', -// location: 'B339', -// lesson_type: 'OT', -// teacher_acronym: 'PMAB', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC06', -// composed_class_name: null, -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '14', -// location: 'B322', -// lesson_type: 'OT', -// teacher_acronym: 'PMAB', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2598', -// }, -// { -// day: 5, -// duration: '3.0', -// start_time: '10', -// location: 'B340', -// lesson_type: 'OT', -// teacher_acronym: 'tbs', -// course_unit_id: 484443, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2771', -// }, -// ], -// [ -// { -// day: 4, -// duration: '2.0', -// start_time: '10.5', -// location: 'B013', -// lesson_type: 'T', -// teacher_acronym: 'DCC-AMSMF+PNF', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_3112', -// }, -// { -// day: 4, -// duration: '2.0', -// start_time: '14', -// location: 'B013', -// lesson_type: 'T', -// teacher_acronym: 'DCC-AMSMF+PNF', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_3110', -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '10.5', -// location: 'B342', -// lesson_type: 'P', -// teacher_acronym: 'AMSMF', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC01', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B217', -// lesson_type: 'P', -// teacher_acronym: 'LGBC', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC02', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B205', -// lesson_type: 'P', -// teacher_acronym: 'PMSP', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC03', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B310', -// lesson_type: 'P', -// teacher_acronym: 'PMSP', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC04', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B107', -// lesson_type: 'P', -// teacher_acronym: 'PNFRCD', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC05', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B202', -// lesson_type: 'P', -// teacher_acronym: 'PNFRCD', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC06', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B306', -// lesson_type: 'P', -// teacher_acronym: 'LGBC', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC07', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '10.5', -// location: 'B302', -// lesson_type: 'P', -// teacher_acronym: 'JBispo', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC08', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B204', -// lesson_type: 'P', -// teacher_acronym: 'TDRC', -// course_unit_id: 484379, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2771', -// }, -// ], -// [ -// { -// day: 1, -// duration: '2.0', -// start_time: '11', -// location: 'B011', -// lesson_type: 'T', -// teacher_acronym: 'AAS', -// course_unit_id: 484380, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2599', -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '14', -// location: 'B306', -// lesson_type: 'PL', -// teacher_acronym: 'RPR', -// course_unit_id: 484380, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_2598', -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B103', -// lesson_type: 'PL', -// teacher_acronym: 'TCCM', -// course_unit_id: 484380, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC09', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B302', -// lesson_type: 'PL', -// teacher_acronym: 'TCCM', -// course_unit_id: 484380, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC10', -// composed_class_name: null, -// }, -// ], -// [ -// { -// day: 4, -// duration: '2.0', -// start_time: '10.5', -// location: 'B007', -// lesson_type: 'T', -// teacher_acronym: 'JGB+PF', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_3110', -// }, -// { -// day: 4, -// duration: '2.0', -// start_time: '14', -// location: 'B020', -// lesson_type: 'T', -// teacher_acronym: 'JGB+PF', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: null, -// composed_class_name: 'COMP_3112', -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B342', -// lesson_type: 'L', -// teacher_acronym: 'PFS+JGB', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC01', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B343', -// lesson_type: 'L', -// teacher_acronym: 'SCS1', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC02', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B205', -// lesson_type: 'L', -// teacher_acronym: 'PMAADO', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC03', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '10.5', -// location: 'B202', -// lesson_type: 'L', -// teacher_acronym: 'AJMC', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC04', -// composed_class_name: null, -// }, -// { -// day: 2, -// duration: '2.0', -// start_time: '8.5', -// location: 'B107', -// lesson_type: 'L', -// teacher_acronym: 'AJMC', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC05', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B202', -// lesson_type: 'L', -// teacher_acronym: 'AJMC', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC06', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B309', -// lesson_type: 'L', -// teacher_acronym: 'JGB', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC07', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B204', -// lesson_type: 'L', -// teacher_acronym: 'PMAADO', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC08', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '10.5', -// location: 'B311', -// lesson_type: 'L', -// teacher_acronym: 'JGB', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC09', -// composed_class_name: null, -// }, -// { -// day: 3, -// duration: '2.0', -// start_time: '8.5', -// location: 'B302', -// lesson_type: 'L', -// teacher_acronym: 'SCS1', -// course_unit_id: 484381, -// last_updated: '2022-05-17T21:45:51Z', -// class_name: '3LEIC10', -// composed_class_name: null, -// }, -// ], -] - -export const extraCoursesData: Course[] = [ -// { -// id: 1, -// course_id: 0, -// course_unit_id: 484400, -// course: 'L.EIC007', -// name: 'Análise Matemática II', -// acronym: 'AM II', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484400', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484400 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 2, -// course_id: 0, -// course_unit_id: 484401, -// course: 'L.EIC008', -// name: 'Física I', -// acronym: 'F I', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484401', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484401 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 3, -// course_id: 0, -// course_unit_id: 484423, -// course: 'L.EIC010', -// name: 'Teoria da Computação', -// acronym: 'TC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484423', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484423 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 4, -// course_id: 0, -// course_unit_id: 484399, -// course: 'L.EIC006', -// name: 'Arquitetura de Computadores', -// acronym: 'AC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484399', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484399 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 5, -// course_id: 0, -// course_unit_id: 484422, -// course: 'L.EIC009', -// name: 'Programação', -// acronym: 'P', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484422', -// course_unit_year: 1, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484422 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 6, -// course_id: 0, -// course_unit_id: 484426, -// course: 'L.EIC018', -// name: 'Laboratório de Computadores', -// acronym: 'LC', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484426', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484426 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 7, -// course_id: 0, -// course_unit_id: 484427, -// course: 'L.EIC019', -// name: 'Linguagens e Tecnologias Web', -// acronym: 'LTW', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484427', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484427 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 8, -// course_id: 0, -// course_unit_id: 484424, -// course: 'L.EIC016', -// name: 'Desenho de Algoritmos', -// acronym: 'DA', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484424', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484424 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 9, -// course_id: 0, -// course_unit_id: 484425, -// course: 'L.EIC017', -// name: 'Engenharia de Software', -// acronym: 'ES', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484425', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484425 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 10, -// course_id: 0, -// course_unit_id: 484428, -// course: 'L.EIC020', -// name: 'Métodos Estatísticos', -// acronym: 'ME', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484428', -// course_unit_year: 2, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484428 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 11, -// course_id: 0, -// course_unit_id: 484381, -// course: 'L.EIC028', -// name: 'Computação Paralela e Distribuída', -// acronym: 'CPD', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484381', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484381 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 12, -// course_id: 0, -// course_unit_id: 484379, -// course: 'L.EIC026', -// name: 'Compiladores', -// acronym: 'C', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484379', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484379 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 13, -// course_id: 0, -// course_unit_id: 484380, -// course: 'L.EIC027', -// name: 'Computação Gráfica', -// acronym: 'CG', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484380', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484380 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 14, -// course_id: 0, -// course_unit_id: 484443, -// course: 'L.EIC030', -// name: 'Projeto Integrador', -// acronym: 'PI', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484443', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484443 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -// { -// id: 15, -// course_id: 0, -// course_unit_id: 484442, -// course: 'L.EIC029', -// name: 'Inteligência Artificial', -// acronym: 'IA', -// url: 'https://sigarra.up.pt/feup/pt/ucurr_geral.ficha_uc_view?pv_ocorrencia_id=484442', -// course_unit_year: 3, -// semester: 2, -// year: 2021, -// schedule_url: 'https://sigarra.up.pt/feup/pt/hor_geral.ucurr_view?pv_ocorrencia_id=484442 ', -// last_updated: '2022-02-19T14:43:27Z', -// }, -] diff --git a/src/utils/utils.ts b/src/utils/index.ts similarity index 96% rename from src/utils/utils.ts rename to src/utils/index.ts index 3947686c..23c6f9a0 100644 --- a/src/utils/utils.ts +++ b/src/utils/index.ts @@ -223,6 +223,19 @@ const groupCoursesByYear = (yearCourses: CourseInfo[]): CourseInfo[][] => { return majorCourses } +const isSubset = (set1, set2, same) => { + for (let elem1 of set1) { + let found = false + for (let elem2 of set2) { + if (same(elem1, elem2)) { + found = true + break + } + } + if (!found) return false + } + return true +} export { config, @@ -249,4 +262,5 @@ export { cn, removeDuplicatesFromCourseOption, groupCoursesByYear, + isSubset, } diff --git a/tsconfig.json b/tsconfig.json index 4b1a1b54..eb2d82c5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,9 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": ["./src/declaration.d.ts", "./src/**/*.ts", "./src/**/*.tsx"] + "include": [ + "./src/declaration.d.ts", + "./src/**/*.ts", + "./src/**/*.tsx", + ], } From 4258fe255687596497d1e975e9315d5b35bdc947 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 21 Feb 2024 00:45:50 +0000 Subject: [PATCH 046/147] MajorSearchCombobox UI finished --- package-lock.json | 1038 +++++++++++++---- src/@types/new_index.d.ts | 5 +- src/api/backend.ts | 22 + .../planner/sidebar/ClassSelector.tsx | 2 +- .../sessionController/CoursePicker.tsx | 16 +- .../course-picker/MajorSearchCombobox.tsx | 246 ++-- src/components/ui/command.tsx | 138 +++ 7 files changed, 1147 insertions(+), 320 deletions(-) create mode 100644 src/components/ui/command.tsx diff --git a/package-lock.json b/package-lock.json index 038ccd83..68821325 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,18 @@ "postcss": "^8.4.14", "prettier": "^2.6.2", "prettier-plugin-tailwindcss": "^0.1.10", - "tailwindcss": "^3.1.4" + "tailwindcss": "^3.4.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@ampproject/remapping": { @@ -2344,6 +2355,90 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2764,6 +2859,15 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", @@ -4938,27 +5042,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -5104,6 +5187,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -7085,11 +7173,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7162,22 +7245,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -7336,6 +7403,11 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8406,9 +8478,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -8668,6 +8740,32 @@ } } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -8849,9 +8947,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -9156,6 +9257,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -9631,11 +9743,11 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9953,6 +10065,23 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", @@ -10815,6 +10944,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11008,9 +11145,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } @@ -11374,6 +11511,14 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -11402,10 +11547,26 @@ "multicast-dns": "cli.js" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11961,6 +12122,29 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -12138,9 +12322,9 @@ } }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -12149,10 +12333,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -12513,16 +12701,16 @@ } }, "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "postcss": "^8.0.0" @@ -12537,9 +12725,9 @@ } }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -12551,7 +12739,7 @@ "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.21" } }, "node_modules/postcss-lab-function": { @@ -12574,19 +12762,25 @@ } }, "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 14" }, "peerDependencies": { "postcss": ">=8.0.9", @@ -12601,6 +12795,25 @@ } } }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -12792,11 +13005,11 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.11" }, "engines": { "node": ">=12.0" @@ -13174,9 +13387,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13463,17 +13676,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -14049,11 +14251,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14785,6 +14987,25 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -14858,6 +15079,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -14934,6 +15167,91 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15135,42 +15453,39 @@ } }, "node_modules/tailwindcss": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", - "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dependencies": { + "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.14", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" + "node": ">=14.0.0" } }, "node_modules/tailwindcss-animate": { @@ -15313,6 +15628,25 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -15408,6 +15742,11 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -16546,6 +16885,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -16592,14 +16948,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -16659,6 +17007,11 @@ } }, "dependencies": { + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -18178,6 +18531,59 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -18505,6 +18911,12 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", @@ -19916,23 +20328,6 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "requires": {} }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -20029,6 +20424,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -21453,11 +21853,6 @@ "object-keys": "^1.1.1" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -21512,16 +21907,6 @@ } } }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -21646,6 +22031,11 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -22430,9 +22820,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -22622,6 +23012,22 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, "fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -22742,9 +23148,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.5", @@ -22956,6 +23362,14 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -23297,11 +23711,11 @@ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -23510,6 +23924,15 @@ "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", @@ -24167,6 +24590,11 @@ } } }, + "jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -24311,9 +24739,9 @@ } }, "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { "version": "1.2.4", @@ -24583,6 +25011,11 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -24605,10 +25038,20 @@ "thunky": "^1.0.2" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -24988,6 +25431,22 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -25115,11 +25574,11 @@ } }, "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -25315,9 +25774,9 @@ } }, "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -25331,9 +25790,9 @@ "requires": {} }, "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "requires": { "camelcase-css": "^2.0.1" } @@ -25348,12 +25807,24 @@ } }, "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "dependencies": { + "lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==" + }, + "yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" + } } }, "postcss-loader": { @@ -25467,11 +25938,11 @@ } }, "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "requires": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.11" } }, "postcss-nesting": { @@ -25693,9 +26164,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -25895,11 +26366,6 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -26327,11 +26793,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -26877,6 +27343,23 @@ } } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + } + } + }, "string.prototype.matchall": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", @@ -26930,6 +27413,14 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -26973,6 +27464,65 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -27134,32 +27684,32 @@ } }, "tailwindcss": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", - "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "requires": { + "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.14", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" } }, "tailwindcss-animate": { @@ -27250,6 +27800,22 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -27326,6 +27892,11 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -28192,6 +28763,16 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -28224,11 +28805,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/src/@types/new_index.d.ts b/src/@types/new_index.d.ts index 5f2a0840..1a3956e4 100644 --- a/src/@types/new_index.d.ts +++ b/src/@types/new_index.d.ts @@ -29,6 +29,7 @@ export type CourseInfo = { acronym: string, name: string, url: string, + classes?: Array // last_updated: string, // remover ?? // semester: number, // remover ?? // year: number // remover ?? @@ -75,10 +76,6 @@ export type Class = { slots: Array } -export type Course = { - course_id: number - classes: Array -} // |=============================================================| // | Ver se nao podemos apagar daqui para baixo: | diff --git a/src/api/backend.ts b/src/api/backend.ts index 8477060a..f634d4dd 100644 --- a/src/api/backend.ts +++ b/src/api/backend.ts @@ -1,4 +1,5 @@ import { CheckedCourse, Major } from '../@types' +import { CourseInfo } from '../@types/new_index' import { getSemester, config, dev_config } from '../utils' @@ -89,6 +90,25 @@ const getMajorCoursesSchedules = async (courses: CheckedCourse[][]) => { return schedules } +/** + * Retrieves all schedule options for a given course unit + * @param course course of which to retrieve schedule + * @returns array of schedule options + */ +const _getCourseSchedule = async (course: CourseInfo) => { + if (course === null) return [] + return await apiRequest(`/schedule/${course.id}/`) +} + +const _getCoursesSchedules = async (courses : CourseInfo[]) => { + return courses.map((course) => { + const schedule = _getCourseSchedule(course) + + console.log(schedule) + return '' + }) +} + /** * Retrieves the scrappe info from the backend */ @@ -102,6 +122,8 @@ const api = { getCourseSchedule, getCoursesSchedules, getMajorCoursesSchedules, + _getCourseSchedule, + _getCoursesSchedules, getInfo } diff --git a/src/components/planner/sidebar/ClassSelector.tsx b/src/components/planner/sidebar/ClassSelector.tsx index 74ff8203..39e5a63b 100644 --- a/src/components/planner/sidebar/ClassSelector.tsx +++ b/src/components/planner/sidebar/ClassSelector.tsx @@ -247,7 +247,7 @@ const ClassSelector = ({ courseOption, multipleOptionsHook, isImportedOptionHook

    {/* Dropdown Menu */} - setIsDropdownOpen(!isDropdownOpen)}> + + + + + + Nenhum curso corresponde à tua pesquisa. + + + {filteredMajors.map((major) => ( + { + // setSelectedMajor(currentMajor === selectedMajor.id ? null : currentMajor) + setOpen(false) + }} + > + {getDisplayMajorText(major)} + + + ))} + + + + + ) } +// const MajorSearchCombobox = () => { +// const { majors, selectedMajor, setSelectedMajor } = useContext(MajorContext) +// const [majorQuery, setMajorQuery] = useState('') +// const [selected, setSelected] = useState(selectedMajor) + +// const match = (str: string, query: string, simple?: boolean) => +// simple +// ? str.toLowerCase().replace(/\s+/g, '').includes(query.toLowerCase().replace(/\s+/g, '')) +// : str +// .toLowerCase() +// .normalize('NFD') +// .replace(/\p{Diacritic}/gu, '') +// .replace(/\s+/g, '') +// .replace('.', '') +// .replace(':', '') +// .includes(query.toLowerCase().replace(/\s+/g, '')) + +// const filteredMajors = +// majors !== null && majors?.length !== 0 && Array.isArray(majors) +// ? majorQuery === '' +// ? majors +// : majors.filter( +// (major: Major) => +// match(major?.name, majorQuery, true) || +// match(major?.name, majorQuery, false) || +// match(major?.acronym, majorQuery, true) || +// match(major?.acronym, majorQuery, false) +// ) +// : [] + +// const getDisplayMajorText = (major: Major) => (major === null ? '' : `${major?.name} (${major?.acronym})`) + +// useEffect(() => { +// setMajorQuery((prev) => `${prev} `) +// }, []) + +// return ( +// { +// setSelectedMajor(value) +// setSelected(value) +// }} +// > +//
    +// getDisplayMajorText(major)} +// onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} +// /> +// +// +//
    + +// setMajorQuery('')} +// > +// +// {filteredMajors.length === 0 && majorQuery !== '' ? ( +//
    +// Nenhum curso encontrado com este nome/sigla. +//
    +// ) : ( +// filteredMajors.map((major: Major, majorIdx: number) => ( +// +// `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ +// active ? 'bg-primary text-white' : 'text-gray-900' +// }` +// } +// value={major} +// > +// {({ selected, active }) => ( +// <> +// +// {getDisplayMajorText(major)} +// +// {selected && ( +// +// +// )} +// +// )} +// +// )) +// )} +//
    +//
    +//
    +// ) +// } + export default MajorSearchCombobox diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx new file mode 100644 index 00000000..560ed848 --- /dev/null +++ b/src/components/ui/command.tsx @@ -0,0 +1,138 @@ +import * as React from 'react' +import { type DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' + +import { cn } from '../../utils' +import { Dialog, DialogContent } from '../../components/ui/dialog' + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
    + + +
    +)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = 'CommandShortcut' + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} From 24de0673b5b6cfb95e50564cd39b2a169ec13b43 Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 21 Feb 2024 12:00:35 +0000 Subject: [PATCH 047/147] MajorSearchCombobox logic implemented --- .../course-picker/CourseYearCheckboxes.tsx | 2 +- .../course-picker/MajorSearchCombobox.tsx | 193 +++--------------- src/components/ui/command.tsx | 6 +- 3 files changed, 36 insertions(+), 165 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx index 5d505198..6b0ae90c 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearCheckboxes.tsx @@ -43,7 +43,7 @@ export const CourseYearCheckboxes = ({ courses }: Props) => { checked={checkboxList[courseIdx]} onCheckedChange={() => toggleCourse(courseIdx)} /> -
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 1cec8309..588d06ca 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -1,14 +1,11 @@ -import classNames from 'classnames' import { Major } from '../../../../../@types/new_index' -import { Combobox, Transition } from '@headlessui/react' -import { Fragment, useState, useEffect, useRef, SetStateAction, useContext } from 'react' +import { useState, useContext } from 'react' import { CheckIcon, ChevronUpDownIcon } from '@heroicons//react/24/solid' import MajorContext from '../../../../../contexts/MajorContext' import { cn } from '../../../../../utils' import { Button } from '../../../../../components/ui/button' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../../../../../components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '../../../../../components/ui/popover' -import { ScrollArea } from '../../../../ui/scroll-area' /** * Combobox also with a searchbar in which the user will be able to write the major he / she @@ -18,8 +15,6 @@ import { ScrollArea } from '../../../../ui/scroll-area' const MajorSearchCombobox = () => { const { majors, selectedMajor, setSelectedMajor } = useContext(MajorContext) const [open, setOpen] = useState(false) - const [selected, setSelected] = useState(selectedMajor) - const [majorQuery, setMajorQuery] = useState('') const [triggerWidth, setTriggerWidth] = useState(undefined) const match = (str: string, query: string, simple?: boolean) => @@ -34,25 +29,8 @@ const MajorSearchCombobox = () => { .replace(':', '') .includes(query.toLowerCase().replace(/\s+/g, '')) - const filteredMajors = - majors !== null && majors?.length !== 0 && Array.isArray(majors) - ? majorQuery === '' - ? majors - : majors.filter( - (major: Major) => - match(major?.name, majorQuery, true) || - match(major?.name, majorQuery, false) || - match(major?.acronym, majorQuery, true) || - match(major?.acronym, majorQuery, false) - ) - : [] - const getDisplayMajorText = (major: Major) => (major === null ? '' : `${major?.name} (${major?.acronym})`) - useEffect(() => { - setMajorQuery((prev) => `${prev} `) - }, []) - return ( @@ -65,32 +43,43 @@ const MajorSearchCombobox = () => { aria-expanded={open} className="w-full justify-between" > - {selected ? majors.find((major) => major.id === selected.id)?.name : 'Seleciona um curso...'} + {selectedMajor ? majors.find((major) => major.id === selectedMajor.id)?.name : 'Seleciona um curso...'} - + { + const major = majors.find((major) => major.id === parseInt(value)) + return match(major?.name, search, true) || + match(major?.name, search, false) || + match(major?.acronym, search, true) || + match(major?.acronym, search, false) + ? 1 + : 0 + }} + > Nenhum curso corresponde à tua pesquisa. - - - {filteredMajors.map((major) => ( - { - // setSelectedMajor(currentMajor === selectedMajor.id ? null : currentMajor) - setOpen(false) - }} - > - {getDisplayMajorText(major)} - - - ))} - + + {/* */} + {majors.map((major) => ( + { + const currentMajor = majors.find((major) => major.id === parseInt(currentMajorId)) + setSelectedMajor(currentMajor.id === selectedMajor.id ? null : currentMajor) + setOpen(false) + }} + > + {getDisplayMajorText(major)} + + + ))} + {/* */} @@ -98,122 +87,4 @@ const MajorSearchCombobox = () => { ) } -// const MajorSearchCombobox = () => { -// const { majors, selectedMajor, setSelectedMajor } = useContext(MajorContext) -// const [majorQuery, setMajorQuery] = useState('') -// const [selected, setSelected] = useState(selectedMajor) - -// const match = (str: string, query: string, simple?: boolean) => -// simple -// ? str.toLowerCase().replace(/\s+/g, '').includes(query.toLowerCase().replace(/\s+/g, '')) -// : str -// .toLowerCase() -// .normalize('NFD') -// .replace(/\p{Diacritic}/gu, '') -// .replace(/\s+/g, '') -// .replace('.', '') -// .replace(':', '') -// .includes(query.toLowerCase().replace(/\s+/g, '')) - -// const filteredMajors = -// majors !== null && majors?.length !== 0 && Array.isArray(majors) -// ? majorQuery === '' -// ? majors -// : majors.filter( -// (major: Major) => -// match(major?.name, majorQuery, true) || -// match(major?.name, majorQuery, false) || -// match(major?.acronym, majorQuery, true) || -// match(major?.acronym, majorQuery, false) -// ) -// : [] - -// const getDisplayMajorText = (major: Major) => (major === null ? '' : `${major?.name} (${major?.acronym})`) - -// useEffect(() => { -// setMajorQuery((prev) => `${prev} `) -// }, []) - -// return ( -// { -// setSelectedMajor(value) -// setSelected(value) -// }} -// > -//
    -// getDisplayMajorText(major)} -// onChange={(event: { target: { value: SetStateAction } }) => setMajorQuery(event.target.value)} -// /> -// -// -//
    - -// setMajorQuery('')} -// > -// -// {filteredMajors.length === 0 && majorQuery !== '' ? ( -//
    -// Nenhum curso encontrado com este nome/sigla. -//
    -// ) : ( -// filteredMajors.map((major: Major, majorIdx: number) => ( -// -// `relative cursor-pointer select-none py-2 px-3 ${major?.name !== '' ? 'pl-10' : 'pl-4'} ${ -// active ? 'bg-primary text-white' : 'text-gray-900' -// }` -// } -// value={major} -// > -// {({ selected, active }) => ( -// <> -// -// {getDisplayMajorText(major)} -// -// {selected && ( -// -// -// )} -// -// )} -// -// )) -// )} -//
    -//
    -//
    -// ) -// } - export default MajorSearchCombobox diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx index 560ed848..46073428 100644 --- a/src/components/ui/command.tsx +++ b/src/components/ui/command.tsx @@ -13,7 +13,7 @@ const Command = React.forwardRef< Date: Wed, 21 Feb 2024 14:40:46 +0000 Subject: [PATCH 048/147] MajorSearchCombobox finished --- .../course-picker/MajorSearchCombobox.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 588d06ca..31e3f8b2 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -50,6 +50,7 @@ const MajorSearchCombobox = () => { { + if (value === 'remove') return 1 const major = majors.find((major) => major.id === parseInt(value)) return match(major?.name, search, true) || match(major?.name, search, false) || @@ -63,19 +64,22 @@ const MajorSearchCombobox = () => { Nenhum curso corresponde à tua pesquisa. {/* */} + setSelectedMajor(null)}> + Remover Seleção + {majors.map((major) => ( { const currentMajor = majors.find((major) => major.id === parseInt(currentMajorId)) - setSelectedMajor(currentMajor.id === selectedMajor.id ? null : currentMajor) + setSelectedMajor(currentMajor.id === selectedMajor?.id ? null : currentMajor) setOpen(false) }} > {getDisplayMajorText(major)} ))} From 99582dc9b3a38baa0d46142b13c209092b7defbd Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Wed, 21 Feb 2024 15:22:26 +0000 Subject: [PATCH 049/147] Bugfixes --- .../sessionController/CoursePicker.tsx | 22 ++++++++++++------- .../course-picker/CourseYearTabs.tsx | 19 +++++++++++----- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 174b699b..3afbdacc 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -14,14 +14,14 @@ import MajorContext from '../../../../contexts/MajorContext' import { Button } from '../../../ui/button' import { Separator } from '../../../ui/separator' import { MajorSearchCombobox, CourseYearTabs, PickedCoursesList, Ects } from './course-picker' -import { PencilSquareIcon } from '@heroicons//react/24/solid' +import { PencilSquareIcon, TrashIcon } from '@heroicons//react/24/solid' import { useContext, useEffect, useState } from 'react' import { CheckIcon } from '@heroicons/react/24/outline' import api from '../../../../api/backend' const CoursePicker = () => { const [open, setOpen] = useState(false) - const { pickedCourses } = useContext(CourseContext) + const { pickedCourses, setPickedCourses } = useContext(CourseContext) const { selectedMajor } = useContext(MajorContext) useEffect(() => { @@ -57,7 +57,7 @@ const CoursePicker = () => { -
    +
    @@ -66,12 +66,18 @@ const CoursePicker = () => {
    - - - + + + +
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx index cd178692..1619b561 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/CourseYearTabs.tsx @@ -17,14 +17,23 @@ const CourseYearTabs = () => { break } default: { - let newPickedCourses = new Set([...pickedCourses]) - const yearCourses = new Set(coursesByYear[parseInt(idx)]) + let newPickedCourses = [...pickedCourses] + const yearCourses = coursesByYear[parseInt(idx)] if (isSubset(yearCourses, newPickedCourses, (course1, course2) => course1.id === course2.id)) { - newPickedCourses = new Set( - pickedCourses.filter((pickedCourse) => pickedCourse.course_unit_year !== parseInt(selectedTab)) + newPickedCourses = pickedCourses.filter( + (pickedCourse) => pickedCourse.course_unit_year !== parseInt(selectedTab) ) } else { - newPickedCourses = new Set([...pickedCourses, ...coursesByYear[parseInt(selectedTab) - 1]]) + newPickedCourses = [...pickedCourses, ...coursesByYear[parseInt(selectedTab) - 1]] + } + + // Remove duplicates + for (let i = 0; i < newPickedCourses.length; i++) { + for (let j = i + 1; j < newPickedCourses.length; j++) { + if (newPickedCourses[i].id === newPickedCourses[j].id) { + newPickedCourses.splice(j--, 1) + } + } } setPickedCourses([...newPickedCourses.values()]) From a8d8033eef2e35512e94d4d409deb995a345f32d Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Mon, 26 Feb 2024 14:29:33 +0000 Subject: [PATCH 050/147] Fixed small issue on command component --- .../planner/sidebar/sessionController/CoursePicker.tsx | 2 +- .../course-picker/MajorSearchCombobox.tsx | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/planner/sidebar/sessionController/CoursePicker.tsx b/src/components/planner/sidebar/sessionController/CoursePicker.tsx index 3afbdacc..691da78a 100644 --- a/src/components/planner/sidebar/sessionController/CoursePicker.tsx +++ b/src/components/planner/sidebar/sessionController/CoursePicker.tsx @@ -57,7 +57,7 @@ const CoursePicker = () => { -
    +
    diff --git a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx index 31e3f8b2..9b5731cb 100644 --- a/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx +++ b/src/components/planner/sidebar/sessionController/course-picker/MajorSearchCombobox.tsx @@ -4,7 +4,7 @@ import { CheckIcon, ChevronUpDownIcon } from '@heroicons//react/24/solid' import MajorContext from '../../../../../contexts/MajorContext' import { cn } from '../../../../../utils' import { Button } from '../../../../../components/ui/button' -import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../../../../../components/ui/command' +import { Command, CommandEmpty, CommandList, CommandInput, CommandItem } from '../../../../../components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '../../../../../components/ui/popover' /** @@ -62,8 +62,7 @@ const MajorSearchCombobox = () => { > Nenhum curso corresponde à tua pesquisa. - - {/* */} + setSelectedMajor(null)}> Remover Seleção @@ -83,8 +82,7 @@ const MajorSearchCombobox = () => { /> ))} - {/* */} - + From 63869d91fa0d847f8f49729e811cf76ffe9ef113 Mon Sep 17 00:00:00 2001 From: Wallen Ribeiro Date: Tue, 27 Feb 2024 01:24:05 +0000 Subject: [PATCH 051/147] improved responsive design --- src/app.css | 2 +- src/components/home/FeatureCards.tsx | 12 ++++++------ src/components/home/HeroPlanner.tsx | 16 +++++++++------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/app.css b/src/app.css index 0b588448..4b4ed818 100644 --- a/src/app.css +++ b/src/app.css @@ -104,7 +104,7 @@ button { } .stamp-card-inner { - transition: transform 1s; + transition: transform 0.5s; transform-style: preserve-3d; } diff --git a/src/components/home/FeatureCards.tsx b/src/components/home/FeatureCards.tsx index 872ae2d2..50a507dc 100644 --- a/src/components/home/FeatureCards.tsx +++ b/src/components/home/FeatureCards.tsx @@ -37,14 +37,14 @@ const features = [ const FeatureCards = () => { return ( -
    +
    {features.map((feature, index) => ( -
    - -

    {feature.title}

    -

    {feature.description}

    +

    {feature.title}

    +

    {feature.description}

    ))}
    diff --git a/src/components/home/HeroPlanner.tsx b/src/components/home/HeroPlanner.tsx index da75f28f..4a62472c 100644 --- a/src/components/home/HeroPlanner.tsx +++ b/src/components/home/HeroPlanner.tsx @@ -64,15 +64,17 @@ const HeroPlanner = () => { return (
    -
    -
    +
    +
    +
    - NIAEFEUP + NIAEFEUP
    - NIAEFEUP + NIAEFEUP
    -
    +
    +

    - Temos novas funcionalidades do TTS e planos para futuras atualizações. + Temos novas funcionalidades e planos para futuras atualizações.

    From 883486eca4d109435e3f7ad8b9c75075381b9bfd Mon Sep 17 00:00:00 2001 From: diogotvf7 Date: Mon, 26 Feb 2024 14:29:33 +0000 Subject: [PATCH 052/147] Fixed small issue on command component --- src/@types/new_index.d.ts | 86 +++++++++++++------ .../sessionController/CoursePicker.tsx | 2 +- .../course-picker/MajorSearchCombobox.tsx | 8 +- 3 files changed, 63 insertions(+), 33 deletions(-) diff --git a/src/@types/new_index.d.ts b/src/@types/new_index.d.ts index 1a3956e4..b619c48a 100644 --- a/src/@types/new_index.d.ts +++ b/src/@types/new_index.d.ts @@ -18,10 +18,6 @@ export type Major = { // year: number // remover ?? } -// selected_major = { -// id: number -// } // FICA APENAS COMO STATE (não é um type) - export type CourseInfo = { id: number, // passa a ser o sigarra_id course_unit_year: number, @@ -35,15 +31,33 @@ export type CourseInfo = { // year: number // remover ?? } -export type selected_courses = Array +export type Class = { + // course_unit_id: number, // é mesmo necessário ?? + name: string + composed_name: string, + slots: Array +} -export type CourseOption = { - course_id: number, - locked: boolean, - filteredTeachers: Array, - hide: Array, +export type Slot = { + lesson_type: string, + day: number, + start_time: number, + duration: number, + location: string, + professors_link: string, + professors: Array, + // last_updated: string, (is it needed??) } + +// selected_major = { +// id: number +// } // FICA APENAS COMO STATE (não é um type) + +export type selected_courses = Array + +export type MultipleOptions = Array

    - Um horário com colisões de aulas teóricas é geralmente permitido na maioria dos - casos. O mesmo não se verifica para aulas práticas. + Colisões com aulas teóricas são geralmente permitidas na maioria dos + casos. O mesmo não se verifica quando colidem aulas práticas.

    - {lessons.map((lesson: Lesson, lessonIdx: number) => ( + {conflictsInfo.classDescriptors.map((classDescriptor: ClassDescriptor, lessonIdx: number) => ( ))}
    -
    - - +