diff --git a/src/components/Dialogs/AddLinkTdDialog.tsx b/src/components/Dialogs/AddLinkTdDialog.tsx index 3595549..5756852 100644 --- a/src/components/Dialogs/AddLinkTdDialog.tsx +++ b/src/components/Dialogs/AddLinkTdDialog.tsx @@ -15,6 +15,7 @@ import React, { useCallback, useContext, useImperativeHandle, + useState, } from "react"; import ReactDOM from "react-dom"; import ediTDorContext from "../../context/ediTDorContext"; @@ -41,6 +42,14 @@ interface AddLinkTdDialogProps { const AddLinkTdDialog = forwardRef( (props, ref) => { const context = useContext(ediTDorContext); + + const [formData, setFormData] = useState(() => ({ + href: "", + rel: "", + type: "", + })); + const [errorMessage, setErrorMessage] = useState(""); + const [display, setDisplay] = React.useState(() => { return false; }); @@ -80,9 +89,7 @@ const AddLinkTdDialog = forwardRef( }; const addLinksToTd = (link: Link): void => { - // clone instead of mutating original TD const updatedTd = structuredClone(context.parsedTD); - // initialize links array if missing if (!Array.isArray(updatedTd.links)) { updatedTd.links = []; } @@ -101,8 +108,13 @@ const AddLinkTdDialog = forwardRef( try { const res = await fileTdService.readFromFile(); - (document.getElementById("link-href") as HTMLInputElement).value = - `./${res.fileName}`; + setFormData((prev) => ({ + ...prev, + href: `./${res.fileName}`, + })); + + setErrorMessage(""); + setCurrentLinkedTd( res.fileHandle ? res.fileHandle : JSON.parse(res.td) ); @@ -155,6 +167,13 @@ const AddLinkTdDialog = forwardRef( id="rel" className="w-full rounded-md border-2 border-gray-600 bg-gray-600 p-2 text-white focus:border-blue-500 focus:outline-none sm:text-sm" placeholder="relation name" + value={formData.rel} + onChange={(e) => + setFormData({ + ...formData, + rel: e.target.value, + }) + } /> @@ -167,7 +186,7 @@ const AddLinkTdDialog = forwardRef( htmlFor="link-href" className="pl-2 pr-2 text-sm font-medium text-gray-400" > - Target ressource: + Target resource: ( type="text" name="link-href" id="link-href" - className="rounded-md border-2 border-gray-600 bg-gray-600 p-2 text-white focus:border-blue-500 focus:outline-none sm:text-sm" - placeholder="The target ressource" - onChange={() => { - clearHrefErrorMessage(); + className={`rounded-md border-2 bg-gray-600 p-2 text-white focus:outline-none sm:text-sm ${ + errorMessage + ? "border-red-400" + : "border-gray-600 focus:border-blue-500" + }`} + placeholder="The target resource" + onChange={(e) => { + setFormData({ + ...formData, + href: e.target.value, + }); + setErrorMessage(""); }} - disabled={linkingMethod !== "url"} + readOnly={linkingMethod !== "url"} + value={formData.href} /> {linkingMethod === "upload" && ( ( )} - + {errorMessage && ( + + {errorMessage} + + )}