Remove formDataFromRequest helper function

This commit is contained in:
Kalle (Sendou) 2021-12-25 22:04:02 +02:00
parent 56e735dd28
commit 3cdf9dcf34
2 changed files with 9 additions and 32 deletions

View File

@ -23,7 +23,7 @@ import {
import { getTrustingUsers } from "~/services/user";
import type { FindManyByTrustReceiverId } from "~/models/TrustRelationship";
import styles from "~/styles/tournament-manage-roster.css";
import { formDataFromRequest, requireUser } from "~/utils";
import { requireUser } from "~/utils";
import { useBaseURL, useIsSubmitting, useTimeoutState } from "~/utils/hooks";
import { Catcher } from "~/components/Catcher";
@ -42,10 +42,9 @@ export const action: ActionFunction = async ({
request,
context,
}): Promise<Response | ActionData> => {
const { userId, teamId } = await formDataFromRequest({
request,
fields: ["userId", "teamId"],
});
const data = Object.fromEntries(await request.formData());
invariant(typeof data.userId === "string", "Invalid type for userId");
invariant(typeof data.teamId === "string", "Invalid type for teamId");
const user = requireUser(context);
@ -53,16 +52,16 @@ export const action: ActionFunction = async ({
case "POST":
try {
await putPlayerToTeam({
teamId,
teamId: data.teamId,
captainId: user.id,
newPlayerId: userId,
newPlayerId: data.userId,
});
} catch (e) {
if (e instanceof Prisma.PrismaClientKnownRequestError) {
if (e.code === "P2002" && e.message.includes("`tournamentId`")) {
return {
fieldErrors: { userId: "This player is already in a team." },
fields: { userId },
fields: { userId: data.userId },
};
}
}
@ -73,8 +72,8 @@ export const action: ActionFunction = async ({
case "DELETE":
await removePlayerFromTeam({
captainId: user.id,
playerId: userId,
teamId,
playerId: data.userId,
teamId: data.teamId,
});
return new Response("Player deleted from team", { status: 200 });
default:

View File

@ -32,28 +32,6 @@ export function getLogInUrl(location: ReturnType<typeof useLocation>) {
)}`;
}
/** Get fields from `request.formData()`. Throw an error if the formData doesn't contain a requested field. */
export async function formDataFromRequest<T extends string>({
request,
fields,
}: {
request: Request;
fields: T[];
}): Promise<Record<T, string>> {
const formData = await request.formData();
let result: Partial<Record<T, string>> = {};
for (const field of fields) {
const value = formData.get(field);
invariant(typeof value === "string", `Expected ${field} to be string`);
result[field] = value;
}
return result as Record<T, string>;
}
/** @link https://stackoverflow.com/a/69413184 */
// @ts-expect-error
export const assertType = <A, B extends A>() => {};