2024-11-06 02:36:02 -06:00
|
|
|
import React, { useEffect } from "react";
|
2023-12-19 16:20:09 -06:00
|
|
|
import { useRouter } from "next/router";
|
2024-11-06 02:36:02 -06:00
|
|
|
import { ArchivedFormat } from "@/types/global";
|
2023-12-19 16:20:09 -06:00
|
|
|
import ReadableView from "@/components/ReadableView";
|
2024-06-26 13:07:24 -05:00
|
|
|
import getServerSideProps from "@/lib/client/getServerSideProps";
|
2024-08-18 01:55:59 -05:00
|
|
|
import { useGetLink } from "@/hooks/store/links";
|
2024-11-06 02:36:02 -06:00
|
|
|
import clsx from "clsx";
|
2023-12-19 16:20:09 -06:00
|
|
|
|
|
|
|
export default function Index() {
|
2024-08-12 23:08:57 -05:00
|
|
|
const getLink = useGetLink();
|
2023-12-19 16:20:09 -06:00
|
|
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
useEffect(() => {
|
2024-11-06 02:36:02 -06:00
|
|
|
if (router.query.id) {
|
|
|
|
getLink.mutateAsync({ id: Number(router.query.id), isPublicRoute: true });
|
|
|
|
}
|
2023-12-19 16:20:09 -06:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
return (
|
2024-11-06 02:36:02 -06:00
|
|
|
<div className={clsx(getLink.isPending ? "flex h-screen" : "relative")}>
|
2023-12-19 16:20:09 -06:00
|
|
|
{/* <div className="fixed left-1/2 transform -translate-x-1/2 w-fit py-1 px-3 bg-base-200 border border-neutral-content rounded-md">
|
|
|
|
Readable
|
|
|
|
</div> */}
|
2024-11-06 02:36:02 -06:00
|
|
|
{getLink.data?.id &&
|
|
|
|
Number(router.query.format) === ArchivedFormat.readability ? (
|
|
|
|
<ReadableView link={getLink.data} />
|
|
|
|
) : getLink.data?.id &&
|
|
|
|
Number(router.query.format) === ArchivedFormat.monolith ? (
|
2024-08-18 01:55:59 -05:00
|
|
|
<iframe
|
2024-11-06 02:36:02 -06:00
|
|
|
src={`/api/v1/archives/${getLink.data.id}?format=${ArchivedFormat.monolith}`}
|
2024-08-18 01:55:59 -05:00
|
|
|
className="w-full h-screen border-none"
|
|
|
|
></iframe>
|
2024-11-06 02:36:02 -06:00
|
|
|
) : getLink.data?.id &&
|
|
|
|
Number(router.query.format) === ArchivedFormat.pdf ? (
|
2023-12-19 16:20:09 -06:00
|
|
|
<iframe
|
2024-11-06 02:36:02 -06:00
|
|
|
src={`/api/v1/archives/${getLink.data.id}?format=${ArchivedFormat.pdf}`}
|
2023-12-19 16:20:09 -06:00
|
|
|
className="w-full h-screen border-none"
|
|
|
|
></iframe>
|
2024-11-06 02:36:02 -06:00
|
|
|
) : getLink.data?.id &&
|
|
|
|
Number(router.query.format) === ArchivedFormat.png ? (
|
2023-12-19 16:20:09 -06:00
|
|
|
<img
|
|
|
|
alt=""
|
2024-11-06 02:36:02 -06:00
|
|
|
src={`/api/v1/archives/${getLink.data.id}?format=${ArchivedFormat.png}`}
|
2023-12-19 16:20:09 -06:00
|
|
|
className="w-fit mx-auto"
|
|
|
|
/>
|
2024-11-06 02:36:02 -06:00
|
|
|
) : getLink.data?.id &&
|
|
|
|
Number(router.query.format) === ArchivedFormat.jpeg ? (
|
2023-12-19 16:20:09 -06:00
|
|
|
<img
|
|
|
|
alt=""
|
2024-11-06 02:36:02 -06:00
|
|
|
src={`/api/v1/archives/${getLink.data.id}?format=${ArchivedFormat.jpeg}`}
|
2023-12-19 16:20:09 -06:00
|
|
|
className="w-fit mx-auto"
|
|
|
|
/>
|
2024-11-06 02:36:02 -06:00
|
|
|
) : getLink.error ? (
|
|
|
|
<p>404 - Not found</p>
|
|
|
|
) : (
|
|
|
|
<div className="max-w-3xl p-5 m-auto w-full flex flex-col items-center gap-5">
|
|
|
|
<div className="w-full mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-full mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-full mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-3/4 mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-5/6 mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-3/4 mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-full mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-full mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
<div className="w-5/6 mr-auto h-4 skeleton rounded-md"></div>
|
|
|
|
</div>
|
2023-12-19 16:20:09 -06:00
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
2024-06-26 13:07:24 -05:00
|
|
|
|
|
|
|
export { getServerSideProps };
|