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")}
-
-
- >
- )}
-
{mode === "edit" && (
<>
@@ -369,6 +345,41 @@ export default function LinkDetails({
>
)}
+ {link.url && mode === "view" ? (
+ <>
+
+
+ {t("link")}
+
+
+ >
+ ) : 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);
-};