import React, { useEffect, useState } from "react"; import CollectionSelection from "@/components/InputSelect/CollectionSelection"; import TagSelection from "@/components/InputSelect/TagSelection"; import TextInput from "@/components/TextInput"; import unescapeString from "@/lib/client/unescapeString"; import useLinkStore from "@/store/links"; import { LinkIncludingShortenedCollectionAndTags } from "@/types/global"; import toast from "react-hot-toast"; import Link from "next/link"; import Modal from "../Modal"; import { useTranslation } from "next-i18next"; type Props = { onClose: Function; activeLink: LinkIncludingShortenedCollectionAndTags; }; export default function EditLinkModal({ onClose, activeLink }: Props) { const { t } = useTranslation(); const [link, setLink] = useState(activeLink); let shortenedURL; try { shortenedURL = new URL(link.url || "").host.toLowerCase(); } catch (error) { console.log(error); } const { updateLink } = useLinkStore(); const [submitLoader, setSubmitLoader] = useState(false); const setCollection = (e: any) => { if (e?.__isNew__) e.value = null; setLink({ ...link, collection: { id: e?.value, name: e?.label, ownerId: e?.ownerId }, }); }; const setTags = (e: any) => { const tagNames = e.map((e: any) => ({ name: e.label })); setLink({ ...link, tags: tagNames }); }; useEffect(() => { setLink(activeLink); }, []); const submit = async () => { if (!submitLoader) { setSubmitLoader(true); const load = toast.loading(t("updating")); let response = await updateLink(link); toast.dismiss(load); if (response.ok) { toast.success(t("updated")); onClose(); } else { toast.error(response.data as string); } setSubmitLoader(false); return response; } }; return (

{t("edit_link")}

{link.url && (

{shortenedURL}

)}

{t("name")}

setLink({ ...link, name: e.target.value })} placeholder={t("placeholder_example_link")} className="bg-base-200" />

{t("collection")}

{link.collection.name ? ( ) : null}

{t("tags")}

({ label: e.name, value: e.id, }))} />

{t("description")}