This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
Frontend/src/app/(pages)/page.tsx
Liam f185270a5b
All checks were successful
Deploy App / docker (ubuntu-latest) (push) Successful in 1m4s
cleanup and add a raw page
2024-04-24 17:46:47 +01:00

80 lines
2.0 KiB
TypeScript

"use client";
import { ReactElement, useState } from "react";
import { ActionMenu } from "@/app/components/action-menu";
import { Button } from "@/app/components/ui/button";
import { useToast } from "@/app/components/ui/use-toast";
import { ArrowPathIcon } from "@heroicons/react/16/solid";
export default function Home(): ReactElement {
const { toast } = useToast();
const [value, setValue] = useState("");
const [creating, setCreating] = useState(false);
/**
* Uploads the paste to the server.
*/
async function createPaste() {
// Ignore empty pastes, we don't want to save them
if (!value || value.length == 0) {
toast({
title: "Paste",
description: "Paste is empty",
});
return;
}
setCreating(true);
// Upload the paste to the server
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_ENDPOINT}/upload`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: value,
},
);
const data = await response.json();
if (!response.ok) {
toast({
title: "Paste",
description: data.message,
});
setCreating(false);
return;
}
// Redirect to the new paste
window.location.href = `/${data.id}`;
}
return (
<div className="p-3 h-screen w-screen relative">
<div className="flex gap-2 h-full w-full text-sm">
<p className="hidden md:block">&gt;</p>
<textarea
onInput={(event) => {
setValue((event.target as HTMLTextAreaElement).value);
}}
className="w-full h-full bg-background outline-none resize-none"
/>
</div>
<ActionMenu>
<Button onClick={() => createPaste()} className="flex gap-1">
{creating && (
<div className="animate-spin">
<ArrowPathIcon width={16} height={16} />
</div>
)}
Save
</Button>
</ActionMenu>
</div>
);
}