Files
linkwarden/packages/lib/getFormatBasedOnPreference.ts

51 lines
1.4 KiB
TypeScript

import {
ArchivedFormat,
LinkIncludingShortenedCollectionAndTags,
} from "@linkwarden/types/global";
// Don't use prisma client's LinksRouteTo, it'll crash in production (React Native)
type LinksRouteTo =
| "ORIGINAL"
| "PDF"
| "READABLE"
| "MONOLITH"
| "SCREENSHOT"
| "DETAILS";
const getFormatBasedOnPreference = ({
link,
preference,
}: {
link: LinkIncludingShortenedCollectionAndTags;
preference: LinksRouteTo;
}) => {
// Return the format based on the account's preference
// If the user's preference is not available, return null (original url)
if (preference === "ORIGINAL" && link.type === "url") {
return null;
} else if (preference === "PDF" || link.type === "pdf") {
if (!link.pdf || link.pdf === "unavailable") return null;
return ArchivedFormat.pdf;
} else if (preference === "READABLE" && link.type === "url") {
if (!link.readable || link.readable === "unavailable") return null;
return ArchivedFormat.readability;
} else if (preference === "SCREENSHOT" || link.type === "image") {
if (!link.image || link.image === "unavailable") return null;
return link?.image?.endsWith("png")
? ArchivedFormat.png
: ArchivedFormat.jpeg;
} else if (preference === "MONOLITH") {
if (!link.monolith || link.monolith === "unavailable") return null;
return ArchivedFormat.monolith;
} else {
return null;
}
};
export default getFormatBasedOnPreference;