Refactor website addition logic to use modal and form validation

This commit is contained in:
2026-05-07 23:57:45 +02:00
parent f33cec7658
commit 287c94b4e0

View File

@@ -94,6 +94,9 @@ export default function App() {
const [priorModalOpen, setPriorModalOpen] = useState(false); const [priorModalOpen, setPriorModalOpen] = useState(false);
const [priorData, setPriorData] = useState<PriorArtResponse | null>(null); const [priorData, setPriorData] = useState<PriorArtResponse | null>(null);
const [websiteModalOpen, setWebsiteModalOpen] = useState(false);
const [websiteInput, setWebsiteInput] = useState("");
const [websiteError, setWebsiteError] = useState("");
const [settingsModalOpen, setSettingsModalOpen] = useState(false); const [settingsModalOpen, setSettingsModalOpen] = useState(false);
const menuActionRef = useRef<(action: string) => void>(() => undefined); const menuActionRef = useRef<(action: string) => void>(() => undefined);
@@ -222,17 +225,24 @@ export default function App() {
}; };
const onAddWebsite = () => { const onAddWebsite = () => {
const url = window.prompt("Enter a URL (starting with http:// or https://):"); setWebsiteInput("");
if (!url) return; setWebsiteError("");
const trimmed = url.trim(); setWebsiteModalOpen(true);
};
const onSubmitWebsite = () => {
const trimmed = websiteInput.trim();
if (!/^https?:\/\//i.test(trimmed)) { if (!/^https?:\/\//i.test(trimmed)) {
window.alert("Please enter a valid http(s) URL."); setWebsiteError("Enter a valid http(s) URL.");
return; return;
} }
setWebsites((prev) => { if (websites.some((w) => w.url === trimmed)) {
if (prev.some((w) => w.url === trimmed)) return prev; setWebsiteError("This website is already in the table.");
return;
}
const name = trimmed.replace(/^https?:\/\//, "").slice(0, 60); const name = trimmed.replace(/^https?:\/\//, "").slice(0, 60);
return [ setWebsites((prev) => [
...prev, ...prev,
{ {
kind: "url", kind: "url",
@@ -241,7 +251,18 @@ export default function App() {
type: "url", type: "url",
size: "web", size: "web",
}, },
]; ]);
setWebsiteModalOpen(false);
setWebsiteInput("");
setWebsiteError("");
setStatus(`Added ${name}`);
};
const closeWebsiteModal = () => {
setWebsiteModalOpen(false);
setWebsiteInput("");
setWebsiteError("");
};
}); });
}; };