diff --git a/components/LinkDetails.tsx b/components/LinkDetails.tsx index 4681d74..d83d711 100644 --- a/components/LinkDetails.tsx +++ b/components/LinkDetails.tsx @@ -327,30 +327,6 @@ export default function LinkDetails({ )} - {link.url && ( - <> -
- -

{t("link")}

- -
-
- - {link.url} - -
- -
-
-
- - )} - {mode === "edit" && ( <>
@@ -369,6 +345,41 @@ export default function LinkDetails({ )} + {link.url && mode === "view" ? ( + <> +
+ +

{t("link")}

+ +
+
+ + {link.url} + +
+ +
+
+
+ + ) : activeLink.url ? ( + <> +
+ +
+

+ {t("link")} +

+ setLink({ ...link, url: e.target.value })} + placeholder={t("placeholder_example_link")} + className="bg-base-200" + /> +
+ + ) : undefined} +
diff --git a/lib/api/controllers/links/linkId/updateLinkById.ts b/lib/api/controllers/links/linkId/updateLinkById.ts index 9c79316..587c2b2 100644 --- a/lib/api/controllers/links/linkId/updateLinkById.ts +++ b/lib/api/controllers/links/linkId/updateLinkById.ts @@ -2,7 +2,8 @@ import { prisma } from "@/lib/api/db"; import { LinkIncludingShortenedCollectionAndTags } from "@/types/global"; import { UsersAndCollections } from "@prisma/client"; import getPermission from "@/lib/api/getPermission"; -import { moveFiles } from "@/lib/api/manageLinkFiles"; +import { moveFiles, removeFiles } from "@/lib/api/manageLinkFiles"; +import isValidUrl from "@/lib/shared/isValidUrl"; export default async function updateLinkById( userId: number, @@ -89,16 +90,32 @@ export default async function updateLinkById( status: 401, }; else { + const oldLink = await prisma.link.findUnique({ + where: { + id: linkId, + }, + }); + + if (oldLink && oldLink?.url !== data.url) { + await removeFiles(oldLink.id, oldLink.collectionId); + } + const updatedLink = await prisma.link.update({ where: { id: linkId, }, data: { name: data.name, + url: data.url, description: data.description, icon: data.icon, iconWeight: data.iconWeight, color: data.color, + image: oldLink?.url !== data.url ? null : undefined, + pdf: oldLink?.url !== data.url ? null : undefined, + readable: oldLink?.url !== data.url ? null : undefined, + monolith: oldLink?.url !== data.url ? null : undefined, + preview: oldLink?.url !== data.url ? null : undefined, collection: { connect: { id: data.collection.id, diff --git a/pages/api/v1/links/[id]/archive/index.ts b/pages/api/v1/links/[id]/archive/index.ts index 6cacf73..72583ae 100644 --- a/pages/api/v1/links/[id]/archive/index.ts +++ b/pages/api/v1/links/[id]/archive/index.ts @@ -54,7 +54,20 @@ export default async function links(req: NextApiRequest, res: NextApiResponse) { response: "Invalid URL.", }); - await deleteArchivedFiles(link); + await prisma.link.update({ + where: { + id: link.id, + }, + data: { + image: null, + pdf: null, + readable: null, + monolith: null, + preview: null, + }, + }); + + await removeFiles(link.id, link.collection.id); return res.status(200).json({ response: "Link is being archived.", @@ -72,20 +85,3 @@ const getTimezoneDifferenceInMinutes = (future: Date, past: Date) => { return diffInMinutes; }; - -const deleteArchivedFiles = async (link: Link & { collection: Collection }) => { - await prisma.link.update({ - where: { - id: link.id, - }, - data: { - image: null, - pdf: null, - readable: null, - monolith: null, - preview: null, - }, - }); - - await removeFiles(link.id, link.collection.id); -};