From 155d54d4115e2b383f0f39bd79ab0eeb7a6afbf1 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Thu, 7 Jul 2022 14:38:28 +0300 Subject: [PATCH] Edit badge owners in DB --- app/routes/badges/$id/edit.tsx | 95 +++++++++++++++++++++++++++++----- app/styles/badges.css | 18 +++++-- 2 files changed, 97 insertions(+), 16 deletions(-) diff --git a/app/routes/badges/$id/edit.tsx b/app/routes/badges/$id/edit.tsx index 710d93302..91a89d3bf 100644 --- a/app/routes/badges/$id/edit.tsx +++ b/app/routes/badges/$id/edit.tsx @@ -15,6 +15,7 @@ import { parseRequestFormData, validate } from "~/utils/remix"; import { canEditBadgeManagers } from "~/permissions"; import { assertUnreachable } from "~/utils/types"; import { db } from "~/db"; +import type { User } from "~/db/types"; const editBadgeActionSchema = z.union([ z.object({ @@ -23,7 +24,7 @@ const editBadgeActionSchema = z.union([ }), z.object({ _action: z.literal("OWNERS"), - ownerIds: z.preprocess(safeJSONParse, z.array(id).refine(noDuplicates)), + ownerIds: z.preprocess(safeJSONParse, z.array(id)), }), ]); @@ -72,6 +73,7 @@ export default function EditBadgePage() { to={atOrError(matches, -2).pathname} variant="minimal-destructive" tiny + className="badges-edit__cancel-button" > Cancel @@ -84,6 +86,13 @@ export default function EditBadgePage() { ); } +function submitButtonText(amountOfChanges: number) { + if (amountOfChanges === 0) return "Submit"; + if (amountOfChanges === 1) return `Submit ${amountOfChanges} change`; + + return `Submit ${amountOfChanges} changes`; +} + function Managers({ data }: { data: BadgeDetailsLoaderData }) { const [managers, setManagers] = React.useState( data.managers.map((m) => ({ @@ -156,21 +165,83 @@ function Managers({ data }: { data: BadgeDetailsLoaderData }) { } function Owners({ data }: { data: BadgeDetailsLoaderData }) { + const [owners, setOwners] = React.useState( + data.owners.map((o) => ({ + id: o.id, + discordFullName: discordFullName(o), + count: o.count, + })) + ); + + const amountOfChanges = owners.reduce((acc, owner) => { + const oldOwner = data.owners.find((o) => o.id === owner.id); + const hasChanged = !oldOwner || owner.count !== oldOwner.count; + return acc + (hasChanged ? 1 : 0); + }, 0); + return ( -