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.

65 lines
1.3 KiB
TypeScript
Raw Normal View History

2024-04-23 03:22:31 +01:00
import { ReactElement } from "react";
import hljs from "highlight.js";
import { ActionMenu } from "@/app/components/action-menu";
// Highlight.js theme
import "highlight.js/styles/github-dark-dimmed.css";
import { cn } from "@/app/common/utils";
import { jetbrainsMono } from "@/app/common/font/font";
type PasteProps = {
params: {
id: string;
};
};
type Paste = {
/**
* The paste content.
*/
content?: string;
/**
* Whether an error occurred.
*/
error?: boolean;
};
async function getData(id: string): Promise<Paste> {
const response = await fetch(`${process.env.NEXT_PUBLIC_API_ENDPOINT}/${id}`);
const json = await response.json();
if (json.code && json.message) {
return {
error: true,
};
}
return json as Paste;
}
export default async function Paste({
params: { id },
}: PasteProps): Promise<ReactElement> {
const { content, error } = await getData(id);
if (content == undefined || error) {
return <div>Not found</div>;
}
return (
<div className="relative">
<ActionMenu />
<pre>
<code
className={cn("hljs !bg-transparent", jetbrainsMono.className)}
dangerouslySetInnerHTML={{
__html: hljs.highlightAuto(content).value,
}}
/>
</pre>
</div>
);
}