Fix stuff
This commit is contained in:
parent
7d2e224ecb
commit
4d11ac2382
11 changed files with 89 additions and 20 deletions
|
@ -5,7 +5,7 @@ import { useRouter } from "next/navigation";
|
||||||
import { ConditionalNull } from "@/components/utility/Conditional";
|
import { ConditionalNull } from "@/components/utility/Conditional";
|
||||||
import { JSONContentTable } from "@/lib/mastoauth/realtypes";
|
import { JSONContentTable } from "@/lib/mastoauth/realtypes";
|
||||||
|
|
||||||
export function Form({contentID, preset}:{contentID:string, preset:Partial<JSONContentTable>}) {
|
export function Form({contentID, preset}:{contentID:string, preset:JSONContentTable}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const formik = useFormik({
|
const formik = useFormik({
|
||||||
initialValues: preset,
|
initialValues: preset,
|
||||||
|
@ -77,6 +77,19 @@ export function Form({contentID, preset}:{contentID:string, preset:Partial<JSONC
|
||||||
<p><small>Error: {formik.errors.url}</small></p>
|
<p><small>Error: {formik.errors.url}</small></p>
|
||||||
</ConditionalNull>
|
</ConditionalNull>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<p><label htmlFor="winner">Winner (Admin property only!)</label></p>
|
||||||
|
<input
|
||||||
|
id="winner"
|
||||||
|
name="winner"
|
||||||
|
type="checkbox"
|
||||||
|
onChange={formik.handleChange}
|
||||||
|
checked={formik.values.winner}
|
||||||
|
/>
|
||||||
|
<ConditionalNull condition={formik.touched.winner != null && formik.errors.winner != null}>
|
||||||
|
<p><small>Error: {formik.errors.winner}</small></p>
|
||||||
|
</ConditionalNull>
|
||||||
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div>
|
<div>
|
||||||
<p><label htmlFor="submit">Done?</label></p>
|
<p><label htmlFor="submit">Done?</label></p>
|
||||||
|
|
|
@ -43,7 +43,7 @@ export default async function Home({
|
||||||
let editingContent = await db
|
let editingContent = await db
|
||||||
.selectFrom('content')
|
.selectFrom('content')
|
||||||
.where('content.id', '=', contentid)
|
.where('content.id', '=', contentid)
|
||||||
.select(['id','name','description','url'])
|
.selectAll()
|
||||||
.executeTakeFirst() as unknown as JSONContentTable;
|
.executeTakeFirst() as unknown as JSONContentTable;
|
||||||
|
|
||||||
if (editingContent == null) return notFound();
|
if (editingContent == null) return notFound();
|
||||||
|
|
|
@ -43,7 +43,7 @@ export default async function Home({
|
||||||
let editingJudgement = await db
|
let editingJudgement = await db
|
||||||
.selectFrom('judgements')
|
.selectFrom('judgements')
|
||||||
.where('judgements.id', '=', judgementid)
|
.where('judgements.id', '=', judgementid)
|
||||||
.select(['content_id', 'content', 'published'])
|
.select(['author_id', 'content_id', 'content', 'published'])
|
||||||
.executeTakeFirst() as unknown as JSONJudgementTable;
|
.executeTakeFirst() as unknown as JSONJudgementTable;
|
||||||
|
|
||||||
if (editingJudgement == null) return notFound();
|
if (editingJudgement == null) return notFound();
|
||||||
|
|
|
@ -95,7 +95,7 @@ export async function POST(request: NextRequest, {params}: {params: {content: st
|
||||||
if (body.id != null) te.push("id");
|
if (body.id != null) te.push("id");
|
||||||
if (body.author_id != null) te.push("author_id");
|
if (body.author_id != null) te.push("author_id");
|
||||||
if (body.content_id != null) te.push("content_id");
|
if (body.content_id != null) te.push("content_id");
|
||||||
if (typeof body.content !== 'string' || body.description.length < 10 || body.description.length > 10000) te.push("content");
|
if (typeof body.content !== 'string' || body.content.length < 10 || body.content.length > 10000) te.push("content");
|
||||||
if (body.published != null) te.push("published");
|
if (body.published != null) te.push("published");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,9 @@ export async function PATCH(request: NextRequest, {params}: {params: {content:st
|
||||||
if (body.name != null && typeof body.name === 'string' && body.name.length >= 10 && body.name.length <= 2048) newBody.name = body.name;
|
if (body.name != null && typeof body.name === 'string' && body.name.length >= 10 && body.name.length <= 2048) newBody.name = body.name;
|
||||||
if (body.description != null && typeof body.description === 'string' && body.description.length >= 10 && body.description.length <= 10000) newBody.description = body.description;
|
if (body.description != null && typeof body.description === 'string' && body.description.length >= 10 && body.description.length <= 10000) newBody.description = body.description;
|
||||||
if (body.url != null && typeof body.url === 'string' && body.url.length >= 3 && body.url.length <= 2048) newBody.url = body.url;
|
if (body.url != null && typeof body.url === 'string' && body.url.length >= 3 && body.url.length <= 2048) newBody.url = body.url;
|
||||||
|
if (body.winner != null && typeof body.winner === 'boolean' && existingUser?.admin) newBody.winner = body.winner;
|
||||||
|
|
||||||
|
console.log(body, newBody);
|
||||||
|
|
||||||
let res;
|
let res;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -104,6 +104,7 @@ export async function POST(request: NextRequest, {params}: {params: {jam: string
|
||||||
if (typeof body.description !== 'string' || body.description.length < 10 || body.description.length > 10000) te.push("description");
|
if (typeof body.description !== 'string' || body.description.length < 10 || body.description.length > 10000) te.push("description");
|
||||||
if (typeof body.url !== 'string' || body.url.length < 3 || body.url.length > 2048) te.push("url");
|
if (typeof body.url !== 'string' || body.url.length < 3 || body.url.length > 2048) te.push("url");
|
||||||
if (body.submitted != null) te.push("submitted");
|
if (body.submitted != null) te.push("submitted");
|
||||||
|
if (body.winner != null) te.push("winner");
|
||||||
|
|
||||||
|
|
||||||
if (te.length > 0) return new Response(JSON.stringify(te, null, 2), {
|
if (te.length > 0) return new Response(JSON.stringify(te, null, 2), {
|
||||||
|
@ -119,7 +120,8 @@ export async function POST(request: NextRequest, {params}: {params: {jam: string
|
||||||
name: newBody.name,
|
name: newBody.name,
|
||||||
description: newBody.description,
|
description: newBody.description,
|
||||||
url: newBody.url,
|
url: newBody.url,
|
||||||
submitted: Date.now()
|
submitted: Date.now(),
|
||||||
|
winner: false
|
||||||
};
|
};
|
||||||
|
|
||||||
let res;
|
let res;
|
||||||
|
|
|
@ -93,6 +93,9 @@ export default async function Home({
|
||||||
<ConditionalNull condition={submittedJam == null}>
|
<ConditionalNull condition={submittedJam == null}>
|
||||||
<p><small>Submitted by <a href={`/jams/user/${contentOwner.id}`}>{`${contentOwner.username}@${contentOwner.instance}`}</a> {new Date(parseInt(content.submitted)).toDateString()}</small></p>
|
<p><small>Submitted by <a href={`/jams/user/${contentOwner.id}`}>{`${contentOwner.username}@${contentOwner.instance}`}</a> {new Date(parseInt(content.submitted)).toDateString()}</small></p>
|
||||||
</ConditionalNull>
|
</ConditionalNull>
|
||||||
|
<ConditionalNull condition={content.winner}>
|
||||||
|
<p><small><b>WINNER!</b></small></p>
|
||||||
|
</ConditionalNull>
|
||||||
<p>{content.description}</p>
|
<p>{content.description}</p>
|
||||||
<ConditionalNull condition={existingUser != null}>
|
<ConditionalNull condition={existingUser != null}>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -69,6 +69,14 @@ export default async function Home({
|
||||||
jam.theme_description = "";
|
jam.theme_description = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let contentWinners = await db
|
||||||
|
.selectFrom('content')
|
||||||
|
.where('content.jam_id', '=', jam.id)
|
||||||
|
.where('content.winner', '=', true)
|
||||||
|
.orderBy('content.submitted', 'desc')
|
||||||
|
.selectAll()
|
||||||
|
.execute() as unknown[] as JSONContentTable[];
|
||||||
|
|
||||||
let content = await db
|
let content = await db
|
||||||
.selectFrom('content')
|
.selectFrom('content')
|
||||||
.where('content.jam_id', '=', jam.id)
|
.where('content.jam_id', '=', jam.id)
|
||||||
|
@ -104,12 +112,50 @@ export default async function Home({
|
||||||
<ConditionalNull condition={existingUser?.admin || jam.author_id == jam.id}><p><a href={`/jams/delete/jam/${jam.id}`}>Delete jam</a></p></ConditionalNull>
|
<ConditionalNull condition={existingUser?.admin || jam.author_id == jam.id}><p><a href={`/jams/delete/jam/${jam.id}`}>Delete jam</a></p></ConditionalNull>
|
||||||
</div>
|
</div>
|
||||||
</ConditionalNull>
|
</ConditionalNull>
|
||||||
<div style={{textAlign: 'center'}}>
|
<div style={{textAlign: 'center'}}>
|
||||||
<p>The theme is:</p>
|
<p>The theme is:</p>
|
||||||
<h1>{jam.theme || "To be announced"}</h1>
|
<h1>{jam.theme || "To be announced"}</h1>
|
||||||
<p>{jam.theme_description || "Something exciting, maybe?"}</p>
|
<p>{jam.theme_description || "Something exciting, maybe?"}</p>
|
||||||
<ConditionalNull condition={existingUser != null && started && !ended}><p><a href={`/jams/new/content/${jam.id}`}>Submit something</a></p></ConditionalNull>
|
<ConditionalNull condition={existingUser != null && started && !ended}><p><a href={`/jams/new/content/${jam.id}`}>Submit something</a></p></ConditionalNull>
|
||||||
</div>
|
</div>
|
||||||
|
<ConditionalNull condition={contentWinners.length > 0}>
|
||||||
|
<h1>Winners</h1>
|
||||||
|
{contentWinners.map(async (content:JSONContentTable) => {
|
||||||
|
let contentOwner = await db
|
||||||
|
.selectFrom('users')
|
||||||
|
.where('users.id', '=', content.author_id)
|
||||||
|
.selectAll()
|
||||||
|
.executeTakeFirst();
|
||||||
|
|
||||||
|
if (contentOwner == null) return <p>An error occured.</p>;
|
||||||
|
|
||||||
|
let allAdmins = await db
|
||||||
|
.selectFrom('users')
|
||||||
|
.where('users.admin', '=', true)
|
||||||
|
.selectAll()
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
let judgementWinner = await db
|
||||||
|
.selectFrom('judgements')
|
||||||
|
.where('judgements.author_id', 'in', allAdmins.map(x=>x.id))
|
||||||
|
.where('judgements.content_id', '=', content.id)
|
||||||
|
.selectAll()
|
||||||
|
.executeTakeFirst();
|
||||||
|
|
||||||
|
let adminWhoSaid = allAdmins.find(x=> judgementWinner?.author_id == x.id);
|
||||||
|
|
||||||
|
return (<div style={{
|
||||||
|
margin: "16px 0"
|
||||||
|
}}>
|
||||||
|
<h2><Link href={`/jams/content/${content.id}`}>{content.name}</Link></h2>
|
||||||
|
<p><small>by <a href={`/jams/user/${contentOwner.id}`}>{`${contentOwner.username}@${contentOwner.instance}`}</a></small></p>
|
||||||
|
<ConditionalNull condition={judgementWinner != null && adminWhoSaid != null}>
|
||||||
|
<p><b>ADMIN</b> <a href={`/jams/user/${adminWhoSaid?.id}`}>{adminWhoSaid?.username}@{adminWhoSaid?.instance}</a> - <i>"{judgementWinner?.content}"</i></p>
|
||||||
|
</ConditionalNull>
|
||||||
|
<p></p>
|
||||||
|
</div>);
|
||||||
|
})}
|
||||||
|
</ConditionalNull>
|
||||||
<h1>Submissions</h1>
|
<h1>Submissions</h1>
|
||||||
{content.map(async (content:JSONContentTable) => {
|
{content.map(async (content:JSONContentTable) => {
|
||||||
let contentOwner = await db
|
let contentOwner = await db
|
||||||
|
|
|
@ -55,6 +55,7 @@ export interface ContentTable {
|
||||||
description: string;
|
description: string;
|
||||||
url: string;
|
url: string;
|
||||||
submitted: number;
|
submitted: number;
|
||||||
|
winner: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface JudgementTable {
|
export interface JudgementTable {
|
||||||
|
|
|
@ -37,6 +37,7 @@ export interface JSONContentTable {
|
||||||
description: string;
|
description: string;
|
||||||
url: string;
|
url: string;
|
||||||
submitted: string;
|
submitted: string;
|
||||||
|
winner: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface JSONJudgementTable {
|
export interface JSONJudgementTable {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
:root {
|
:root {
|
||||||
--accent-color: hsl(24, 40%, 75%);
|
--accent-color: hsl(120, 40%, 75%);
|
||||||
--bg-0: hsl(24, 20%, 0%);
|
--bg-0: hsl(120, 20%, 0%);
|
||||||
--bg-1: hsl(24, 20%, 6.25%);
|
--bg-1: hsl(120, 20%, 6.25%);
|
||||||
--bg-2: hsl(24, 20%, 12.5%);
|
--bg-2: hsl(120, 20%, 12.5%);
|
||||||
--bg-3: hsl(24, 20%, 25%);
|
--bg-3: hsl(120, 20%, 25%);
|
||||||
--neutral: #80808080;
|
--neutral: #80808080;
|
||||||
--fg-0: hsl(24, 20%, 50%);
|
--fg-0: hsl(120, 20%, 50%);
|
||||||
--fg-1: hsl(24, 20%, 62.5%);
|
--fg-1: hsl(120, 20%, 62.5%);
|
||||||
--fg-2: hsl(24, 20%, 75%);
|
--fg-2: hsl(120, 20%, 75%);
|
||||||
--fg-3: hsl(24, 20%, 87.5%);
|
--fg-3: hsl(120, 20%, 87.5%);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue