fix type errors

This commit is contained in:
Kalle (Sendou)
2020-11-20 09:23:16 +02:00
parent a4f2a91bb1
commit d36112934d
10 changed files with 321 additions and 73 deletions

View File

@@ -9,29 +9,28 @@ import {
PopoverTrigger,
} from "@chakra-ui/react";
import { Plural, t, Trans } from "@lingui/macro";
import { Ability } from "@prisma/client";
import { Ability, BuildGetPayload } from "@prisma/client";
import UserAvatar from "components/common/UserAvatar";
import WeaponImage from "components/common/WeaponImage";
import { getEmojiFlag } from "countries-list";
import { PartialBy, Unpacked } from "lib/types";
import { PartialBy } from "lib/types";
import { useMyTheme } from "lib/useMyTheme";
import Image from "next/image";
import Link from "next/link";
import { GetBuildsByWeaponData } from "prisma/queries/getBuildsByWeapon";
import { useState } from "react";
import { FiBarChart2, FiInfo, FiTarget } from "react-icons/fi";
import Gears from "./Gears";
import ViewAP from "./ViewAP";
//import ViewAP from "./ViewAP";
import ViewSlots from "./ViewSlots";
interface BuildCardProps {
build: PartialBy<Unpacked<Unpacked<GetBuildsByWeaponData>>, "user">;
// FIXME: don't select unnecessary fields
build: PartialBy<BuildGetPayload<{ include: { user: true } }>, "user">;
canModify?: boolean;
//setBuildBeingEdited?: (build: Build) => void;
otherBuildCount?: number;
onShowAllByUser?: () => void;
showWeaponImage?: boolean;
showWeapon?: boolean;
}
const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
@@ -40,7 +39,7 @@ const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
//setBuildBeingEdited,
otherBuildCount,
onShowAllByUser,
showWeaponImage,
showWeapon,
...props
}) => {
const [apView, setApView] = useState(false);
@@ -65,11 +64,6 @@ const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
{...props}
>
<Box display="flex" flexDirection="column" h="100%">
{showWeaponImage && (
<Box>
<WeaponImage name={build.weapon} size={64} />
</Box>
)}
{build.title && (
<Box fontWeight="semibold" as="h4" lineHeight="tight" mt="0.3em">
{build.title}
@@ -97,7 +91,7 @@ const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
</Link>
</Box>
)}
{build.weapon && (
{showWeapon && (
<Box>
<WeaponImage name={build.weapon} size={64} />
</Box>
@@ -196,13 +190,13 @@ const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
<ViewSlots build={build} />
)}
</Box>
<Box
display="flex"
justifyContent="space-between"
alignItems="center"
mt="1em"
>
{otherBuildCount ? (
{otherBuildCount ? (
<Box
display="flex"
justifyContent="space-between"
alignItems="center"
mt="1em"
>
<Box
mx="auto"
fontSize="0.8em"
@@ -218,8 +212,8 @@ const BuildCard: React.FC<BuildCardProps & BoxProps> = ({
other={<Trans>Show # more builds by {username}</Trans>}
/>
</Box>
) : null}
</Box>
</Box>
) : null}
</Box>
</Box>
</>

View File

@@ -21,9 +21,11 @@ interface EmojiProps {
const Emoji: React.FC<EmojiProps> = (props) => {
const value = props.value.replace(/:/g, "").toLowerCase();
//FIXME: inline removed : make sure emojis blend in with the text
const keyWeapon = value as keyof typeof codeToWeapon;
const weaponName = codeToWeapon[keyWeapon];
if (!!weaponName) return <WeaponImage name={weaponName} size={32} isInline />;
if (!!weaponName) return <WeaponImage name={weaponName} size={32} />;
const keyAbility = value as keyof typeof abilityMarkdownCodes;
const abilityName = abilityMarkdownCodes[keyAbility];
@@ -35,14 +37,7 @@ const Emoji: React.FC<EmojiProps> = (props) => {
const modeCode = modeCodes[value];
if (!!modeCode)
return (
<Image
src={`/modes/${modeCode}.png`}
style={{ display: "inline-block" }}
width={32}
height={32}
/>
);
return <Image src={`/modes/${modeCode}.png`} width={32} height={32} />;
return <>{props.value}</>;
};

View File

@@ -8,19 +8,13 @@ interface ModeImageProps {
style?: CSSProperties;
}
const ModeImage: React.FC<ModeImageProps> = ({
mode,
size,
onClick,
style,
}) => {
const ModeImage: React.FC<ModeImageProps> = ({ mode, size, onClick }) => {
return (
<Image
src={`/modes/${mode}.png`}
width={size}
height={size}
onClick={onClick}
style={style}
/>
);
};

View File

@@ -6,15 +6,9 @@ interface WeaponImageProps {
name: string;
size: 32 | 64 | 128;
noTitle?: boolean;
isInline?: boolean;
}
const WeaponImage: React.FC<WeaponImageProps> = ({
name,
size,
noTitle,
isInline,
}) => {
const WeaponImage: React.FC<WeaponImageProps> = ({ name, size, noTitle }) => {
const { i18n } = useLingui();
return (
@@ -25,7 +19,6 @@ const WeaponImage: React.FC<WeaponImageProps> = ({
title={noTitle ? undefined : i18n._(name)}
width={size}
height={size}
style={{ display: isInline ? "inline-block" : undefined }}
/>
</>
);

View File

@@ -137,6 +137,8 @@ const IconNavBar = () => {
width={48}
alt={code}
priority
// FIXME: when chakra-ui adds next/image support
// @ts-ignore
style={{ cursor: "pointer", userSelect: "none" }}
/>
{menuItems.length > 0 && (

View File

@@ -135,7 +135,6 @@ const BuildsPage: React.FC<RouteComponentProps> = () => {
defaultToAPView={
prefersAPView === null ? false : prefersAPView
}
showUser
otherBuildCount={
usersOtherBuilds[build.discord_user!.discord_id]
.length &&
@@ -166,7 +165,6 @@ const BuildsPage: React.FC<RouteComponentProps> = () => {
defaultToAPView={
prefersAPView === null ? false : prefersAPView
}
showUser
m="0.5em"
/>
))

294
package-lock.json generated
View File

@@ -162,6 +162,60 @@
"@babel/highlight": "^7.10.4"
}
},
"@babel/core": {
"version": "7.12.3",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
"integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.1",
"@babel/helper-module-transforms": "^7.12.1",
"@babel/helpers": "^7.12.1",
"@babel/parser": "^7.12.3",
"@babel/template": "^7.10.4",
"@babel/traverse": "^7.12.1",
"@babel/types": "^7.12.1",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
"json5": "^2.1.2",
"lodash": "^4.17.19",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
},
"dependencies": {
"@babel/generator": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
"integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
"dev": true,
"requires": {
"@babel/types": "^7.12.5",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"@babel/parser": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
"integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
"dev": true
},
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/generator": {
"version": "7.12.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz",
@@ -186,6 +240,48 @@
}
}
},
"@babel/helper-function-name": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
"integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/types": "^7.10.4"
}
},
"@babel/helper-get-function-arity": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
"integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz",
"integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1"
},
"dependencies": {
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-module-imports": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
@@ -194,16 +290,144 @@
"@babel/types": "^7.10.4"
}
},
"@babel/helper-module-transforms": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
"integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.12.1",
"@babel/helper-replace-supers": "^7.12.1",
"@babel/helper-simple-access": "^7.12.1",
"@babel/helper-split-export-declaration": "^7.11.0",
"@babel/helper-validator-identifier": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/traverse": "^7.12.1",
"@babel/types": "^7.12.1",
"lodash": "^4.17.19"
},
"dependencies": {
"@babel/helper-module-imports": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
"integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.5"
}
},
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-optimise-call-expression": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
"integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
}
},
"@babel/helper-plugin-utils": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
"integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
},
"@babel/helper-replace-supers": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
"integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.12.1",
"@babel/helper-optimise-call-expression": "^7.10.4",
"@babel/traverse": "^7.12.5",
"@babel/types": "^7.12.5"
},
"dependencies": {
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-simple-access": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
"integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1"
},
"dependencies": {
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-split-export-declaration": {
"version": "7.11.0",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
"integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
"dev": true,
"requires": {
"@babel/types": "^7.11.0"
}
},
"@babel/helper-validator-identifier": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
"integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
},
"@babel/helpers": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
"integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
"dev": true,
"requires": {
"@babel/template": "^7.10.4",
"@babel/traverse": "^7.12.5",
"@babel/types": "^7.12.5"
},
"dependencies": {
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/highlight": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
@@ -283,6 +507,64 @@
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
"integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/parser": "^7.10.4",
"@babel/types": "^7.10.4"
}
},
"@babel/traverse": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
"integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.5",
"@babel/helper-function-name": "^7.10.4",
"@babel/helper-split-export-declaration": "^7.11.0",
"@babel/parser": "^7.12.5",
"@babel/types": "^7.12.5",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
},
"dependencies": {
"@babel/generator": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
"integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
"dev": true,
"requires": {
"@babel/types": "^7.12.5",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"@babel/parser": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
"integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
"dev": true
},
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/types": {
"version": "7.11.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz",
@@ -5347,6 +5629,12 @@
}
}
},
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -5430,6 +5718,12 @@
"ini": "^1.3.5"
}
},
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",

View File

@@ -45,6 +45,7 @@
"zod": "^1.11.10"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@lingui/cli": "^3.2.1",
"@lingui/macro": "^3.2.1",
"@prisma/cli": "^2.11.0",

View File

@@ -143,7 +143,7 @@ const ProfilePage = (props: Props) => {
)}
<MyInfiniteScroller>
{builds.map((build) => (
<BuildCard key={build.id} build={build} m={2} />
<BuildCard key={build.id} build={build} m={2} showWeapon />
))}
</MyInfiniteScroller>
</>

View File

@@ -11,30 +11,7 @@ const getBuildsByWeaponQuery = async (weapon: string) =>
prisma.build.findMany({
where: { weapon },
orderBy: [{ top500: "desc" }, { jpn: "desc" }, { updatedAt: "desc" }],
select: {
userId: true,
abilityPoints: true,
clothingAbilities: true,
clothingGear: true,
description: true,
headAbilities: true,
headGear: true,
id: true,
jpn: true,
shoesAbilities: true,
shoesGear: true,
title: true,
top500: true,
updatedAt: true,
user: {
select: {
username: true,
discriminator: true,
discordId: true,
discordAvatar: true,
},
},
},
include: { user: true },
});
export const getBuildsByWeapon = async (weapon: string) =>