From e10a8a425adf1ad46cb23719cd4b2195840acfc1 Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Wed, 16 Dec 2020 11:24:52 +0200 Subject: [PATCH] rotation selector --- components/common/MultiWeaponSelector.tsx | 24 +++- components/sr/AddRecordModal.tsx | 48 ++++++++ components/sr/RotationSelector.tsx | 128 +++++++++++++++++++++ lib/lists/weaponsWithHero.ts | 53 +++++++++ pages/api/sr/rotations.ts | 10 +- pages/sr/leaderboards.tsx | 23 ++++ prisma/queries/getAllSalmonRunRotations.ts | 13 +++ public/weapons/RANDOM.png | Bin 0 -> 1470 bytes public/weapons/RANDOM_GRIZZCO.png | Bin 0 -> 2296 bytes 9 files changed, 287 insertions(+), 12 deletions(-) create mode 100644 components/sr/AddRecordModal.tsx create mode 100644 components/sr/RotationSelector.tsx create mode 100644 pages/sr/leaderboards.tsx create mode 100644 prisma/queries/getAllSalmonRunRotations.ts create mode 100644 public/weapons/RANDOM.png create mode 100644 public/weapons/RANDOM_GRIZZCO.png diff --git a/components/common/MultiWeaponSelector.tsx b/components/common/MultiWeaponSelector.tsx index eed749feb..97efb2ded 100644 --- a/components/common/MultiWeaponSelector.tsx +++ b/components/common/MultiWeaponSelector.tsx @@ -1,17 +1,27 @@ import { Select, Tag, TagCloseButton, TagLabel } from "@chakra-ui/react"; import { t } from "@lingui/macro"; import { useLingui } from "@lingui/react"; -import { weaponsWithHero } from "lib/lists/weaponsWithHero"; +import { salmonRunWeapons, weaponsWithHero } from "lib/lists/weaponsWithHero"; import WeaponImage from "./WeaponImage"; interface Props { - name: string; + name?: string; value: string[]; onChange: (value: string[]) => void; + isSalmonRun?: boolean; } -const MultiWeaponSelector: React.FC = ({ name, value, onChange }) => { +const MultiWeaponSelector: React.FC = ({ + name, + value, + onChange, + isSalmonRun, +}) => { const { i18n } = useLingui(); + + const weaponsArray: readonly string[] = isSalmonRun + ? salmonRunWeapons + : weaponsWithHero; return ( <> setStage(e.target.value)} + > + {salmonRunStages.map((stage) => ( + + ))} + + + + Weapons + + + + {filteredRotations && ( + + + Rotation + + + + )} + + ); + + function getFilteredRotations() { + if (!data) return null; + if (!stage || weapons.length < 1) return null; + return data.filter((rotation) => { + return ( + rotation.stage === stage && + weapons.every((wpn) => rotation.weapons.includes(wpn)) + ); + }); + } +}; + +export default RotationSelector; diff --git a/lib/lists/weaponsWithHero.ts b/lib/lists/weaponsWithHero.ts index 1ac5c3602..d015352ac 100644 --- a/lib/lists/weaponsWithHero.ts +++ b/lib/lists/weaponsWithHero.ts @@ -142,6 +142,59 @@ export const weaponsWithHero = [ "Kensa Undercover Brella", ] as const; +export const salmonRunWeapons = [ + "Sploosh-o-matic", + "Splattershot Jr.", + "Splash-o-matic", + "Aerospray MG", + "Splattershot", + ".52 Gal", + "N-ZAP '85", + "Splattershot Pro", + ".96 Gal", + "Jet Squelcher", + "L-3 Nozzlenose", + "H-3 Nozzlenose", + "Squeezer", + "Luna Blaster", + "Blaster", + "Range Blaster", + "Rapid Blaster", + "Rapid Blaster Pro", + "Clash Blaster", + "Carbon Roller", + "Splat Roller", + "Dynamo Roller", + "Flingza Roller", + "Inkbrush", + "Octobrush", + "Classic Squiffer", + "Splat Charger", + "Splatterscope", + "E-liter 4K", + "E-liter 4K Scope", + "Bamboozler 14 Mk I", + "Goo Tuber", + "Slosher", + "Tri-Slosher", + "Sloshing Machine", + "Bloblobber", + "Explosher", + "Mini Splatling", + "Heavy Splatling", + "Hydra Splatling", + "Ballpoint Splatling", + "Nautilus 47", + "Dapple Dualies", + "Splat Dualies", + "Glooga Dualies", + "Dualie Squelchers", + "Dark Tetra Dualies", + "Splat Brella", + "Tenta Brella", + "Undercover Brella", +] as const; + export const weaponsWithHeroCategorized: readonly { name: string; weapons: readonly string[]; diff --git a/pages/api/sr/rotations.ts b/pages/api/sr/rotations.ts index f6683179b..7bfa46aba 100644 --- a/pages/api/sr/rotations.ts +++ b/pages/api/sr/rotations.ts @@ -1,18 +1,12 @@ import { NextApiRequest, NextApiResponse } from "next"; -import prisma from "prisma/client"; +import { getAllSalmonRunRotations } from "prisma/queries/getAllSalmonRunRotations"; const rotationsHandler = async (req: NextApiRequest, res: NextApiResponse) => { if (req.method !== "GET") { return res.status(405).end(); } - const rotations = await prisma.salmonRunRotation.findMany({ - where: { startTime: { lt: new Date() } }, - orderBy: { id: "desc" }, - select: { id: true, startTime: true, weapons: true, stage: true }, - }); - - res.status(200).json(rotations); + res.status(200).json(await getAllSalmonRunRotations()); }; export default rotationsHandler; diff --git a/pages/sr/leaderboards.tsx b/pages/sr/leaderboards.tsx new file mode 100644 index 000000000..215456e2a --- /dev/null +++ b/pages/sr/leaderboards.tsx @@ -0,0 +1,23 @@ +import { Button } from "@chakra-ui/react"; +import { t, Trans } from "@lingui/macro"; +import Breadcrumbs from "components/common/Breadcrumbs"; +import AddRecordModal from "components/sr/AddRecordModal"; +import { useState } from "react"; + +const SalmonRunLeaderboardsPage = ({}) => { + const [showModal, setShowModal] = useState(true); + + return ( + <> + {showModal && setShowModal(false)} />} + + + + ); +}; + +export default SalmonRunLeaderboardsPage; diff --git a/prisma/queries/getAllSalmonRunRotations.ts b/prisma/queries/getAllSalmonRunRotations.ts new file mode 100644 index 000000000..8c2ff6995 --- /dev/null +++ b/prisma/queries/getAllSalmonRunRotations.ts @@ -0,0 +1,13 @@ +import { Prisma } from "@prisma/client"; +import prisma from "prisma/client"; + +export type GetAllSalmonRunRotationsData = Prisma.PromiseReturnType< + typeof getAllSalmonRunRotations +>; + +export const getAllSalmonRunRotations = async () => + prisma.salmonRunRotation.findMany({ + where: { startTime: { lt: new Date() } }, + orderBy: { id: "desc" }, + select: { id: true, startTime: true, weapons: true, stage: true }, + }); diff --git a/public/weapons/RANDOM.png b/public/weapons/RANDOM.png new file mode 100644 index 0000000000000000000000000000000000000000..04eee67de3bb87a136268eb643f521fe018acabe GIT binary patch literal 1470 zcmYLI2~bm46n%*p5exu#{kvDXVkZRic5};$YBkEu=)A4^6G&|ECVR^#9?f{6U1aKh~mi$+Bl?GPL17|~E z_5l|nYHSi~3hL|+$Rj)#t32u=q9b0YMoAi$ILG+-3| zuT~pvPy7oggGm6zJmi7CctFO3vLLX^4HBXQLX3q+Q2}xWh*|`?d2nmC_l5C9V6aE@ zBG}j20o><+seQ1co&!(zZvuCtr{%#yyH4mNPU|$GEl_#(xzMbb42<^KQD)TAC_u-B zN+@`^ZKFd}u7w!q4d&s1F%Ih2^FWp#_}mR%$o;74Yq@|99t&^aNi5I_K~)I2fdKkK z;5i$hY9HHW&%#0~bR4v`DGrW_-moDWavJ&Y)u0SU9+YH=fim<__L2GVBa<7@!kSzG zR|sT#Ykxh;SJqXZJ2JF0UzJ>0lbNDQ)NFXt*f^-!vynY?dtk;p$wiIkeTUw{34DyZ zM`}G8wfgCadd%Uiqr>BrpZ?-`g)QCNRr~IFOW$n^!pYsw9=`YXS{OaRwDYR1?#5f} z9f5-Ix(>7OSUhViqayTWjmyZxvZD5s9(+U#*P(E1M`x2rPV2p;csJ>7sV0(azrX0X z`SHX0>(nx*Vf1^&UW{Z$#BJ>x(@S!U3<7R*h`eQ&$6#$&R~M%Wny(}^Ys`<6k~_8K zO2%kUlQK`1#q$o^L;rKMDkbSmCW&1cC@%Fj8%EYGJvGv1wKa{>Z1-wZw`}ximqxEP z16in!siv;5_zK*1Rc0xBe^ESmP1x5#c(lH#fcUES`<0#bJ)ev%`JshW{pjP0+s?8H z&$*f<{n`aO&H0Kcb#JSGXwZ1^H&NOX$&-b(0{(D2vEi8da9K84{@q*xkR4)INlP#% zODFcvkn38ni3@Y*<2pPn1q4T0=NNB}{M2GfNI3=Ep^7QyzMt{qZ)84s7?)V>;!EFt zsk%}Vqe$nvYG)NinJ2a}@Bgb*cR{zF~3eUQC4nG3SJRU{P4!7y>2y@F{ec< zHc|&Z=vv+KDylSZ)4|H8Qi9`9bZK}=$OEyJ$$GXyrTQYjZ9aP$z5LKIN^QPoKyPq; z-nk=nZTJ#JIkRuERUP51R*785=+ YcbmK1U(@4y9{!P$EH1NQ&E|uD1I^$vYybcN literal 0 HcmV?d00001 diff --git a/public/weapons/RANDOM_GRIZZCO.png b/public/weapons/RANDOM_GRIZZCO.png new file mode 100644 index 0000000000000000000000000000000000000000..db8ea4afd66b983e41bd9f5f469eb98382701e7f GIT binary patch literal 2296 zcmb7Gc~sKb9{;J~5^hgtTo7%+t+d7kQB(7omN{jP(@bevk_%eylBlVWgia}1rj<)( zr)KJpQA8_A5dtApOff6Llw4BGz$JA=#bB`W&Ut6%{V~4pz2AG!{oece-tTtqxmSNU z=C89AvK0UToq)rBKPuOF$x!xXi_{Ts1xM&Rk zmk0o`rW9TJ2mt900PqP30Q)Kcz&PbjYp|zsLp}0{zaOC3X!mH3%9IkVl*6HD000|o zuu8uWyAA-F;Q@X=KV_=SFe8YT>OPFIIZDm1mXKi$h2%0jUt>ohW{XZ7BMHof`RDX& z4DPgMS3IG|5gp+W7lU7KRBXS}!aDpt3`ep&e`H!n0=3}Vo3FQ)8;ES*?eZ~)Y!glR zRKs`e4I|eGD`_pg($KGzg;?tpB2J%8t6c3A76{n--h{xqsE^Y_tSzu`w(cQs#ctT` zmOJ;Ty`ddOq!;>OqIkTyBywtsM456b1Ia#SiQV$~}okZuip(wI^(domx}b!=&%&c@DEJcd4AlnOZKPChgvW&h?Zvh9eQ zvKVrk;bK?=b~TPR?$#dL9$)1lg*WF4>QA~w=?*~4(pu|`4+ej;$v(M6mG|#LlSL*H z>@cF)v&d5cO3EGVrVTrWp|!cyMfYtBH{D6}cW7+ZkcYzsA}P&Jn$wOM+`DV8r;?6OLn_%-9gYlp!tu(xG}D)J7uf5gjoe!5r9}G1)D(~&>ZV%a9n?7 zJjB@5f$RyMDBm1v2O*PXM$@h~*>^t=X4~*|-0C|Qc8#F@F69P`z6@7c=qn59~gTsTSn8^ShE-x@hz*gs=$S4dy zB?8~^2nH%e$&pj3P)hW3A?@;_-C|IPax%kWI}AvNdSzIGbx^F;~BZDIjK;QR!I z5ueaqnVm~}n*0uaInVTFezwH144pxhevq2X+;v@kcKkVVu~kf)S4O98?L03PkDbp# zS1}Hk#UIzu@}pTi(<{rDN6a_i-rZqzLz)XIGa=i8-3`v zdOh+backsMGWtlt!R}I>m!pqJj%$x(Jwldo@q0NUTeo^#buaQ$Sa|x)fR?v-uV-`j zVW*rQ{H+A$$A*MrvSTk&<9N`R3qO0C_5T#3=U)G2)QP`}uN+Y%UR)C{o5Np(62EwJ z@BU4#{(+nYd?^f45nTCu!~XLUvWLSmy!>=R=si99Naw%mD}`)mE_URgMj&}=T4n)W zn!jBPg}ZFT*(;&4Y@vSHOD!fY57XPi^NHFBQ)N*HJ;|xEVpygH)0oLt=k}=z*Urdv zA(c#qB#H5`L%7B-(931^9be%o9K13pjStMSs+KJr*sY*J*%R7l*h5`NHIqRs@Qx&u zCZBTkHst-g<&`RJrXHhof^Mn}z1Fx|m02}ALRs}r2)j-T8lvKOY#$j4p5n<7q%rdky(Hd6%Y0+2Jr&B9RPcDD9QTjHIj?HO{KP_}#&3U3z>)k*rbxqbSSkn2jL z7i@46JPQM5GQJ%}M>w#v>cXyvz5lfAZ{e8UrwQ{Xqq=fu!2_ufvC%}7^x3?8hzP~} z0)vF4O~MO|CVsyLc|NT(dqDsqn!jQgWRDg#r*iS(RaNho#7Stu77yi{VD$&XIC0zv zyj0?imgUwurV2ujnqSVd`Zr&MW(QvY*#YKTNVhFtq)y2wrnq`x|tkX=mkcQ+b~dJC&l$?(^v9qvb2y_B_`~{8cMQ;7wP;GLj>89 zD{hRTr?n5%c~09Yl0Fi2?5{RyijN5xH*C?;YS%%|EgK24179E7Qm1Wy)d}aGsm#oJ{RRA}_czrKs(!~VrJ