Editable and removable datasets #8

Merged
dylan merged 9 commits from feat/editable-datasets into main 2026-03-05 16:55:48 +00:00
2 changed files with 43 additions and 0 deletions
Showing only changes of commit eec8f2417e - Show all commits

View File

@@ -23,6 +23,12 @@ const DatasetEditPage = () => {
const [datasetName, setDatasetName] = useState(""); const [datasetName, setDatasetName] = useState("");
const token = localStorage.getItem("access_token");
if (!token) {
setHasError(true);
setStatusMessage("You must be signed in to save changes.");
}
useEffect(() => { useEffect(() => {
if (!Number.isInteger(parsedDatasetId) || parsedDatasetId <= 0) { if (!Number.isInteger(parsedDatasetId) || parsedDatasetId <= 0) {
setHasError(true); setHasError(true);
@@ -59,6 +65,7 @@ const DatasetEditPage = () => {
}); });
}, [parsedDatasetId]); }, [parsedDatasetId]);
const saveDatasetName = async (event: FormEvent<HTMLFormElement>) => { const saveDatasetName = async (event: FormEvent<HTMLFormElement>) => {
event.preventDefault(); event.preventDefault();
@@ -100,6 +107,23 @@ const DatasetEditPage = () => {
} }
}; };
const deleteDataset = async () => {
try{
await axios.delete(
`${API_BASE_URL}/dataset/${parsedDatasetId}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
navigate("/datasets", { replace: true });
} catch (error: unknown) {
setHasError(true);
if (axios.isAxiosError(error)) {
setStatusMessage(String(error.response?.data?.error || error.message || "Save failed."));
} else {
setStatusMessage("Save failed due to an unexpected error.");
}
}
}
return ( return (
<div style={styles.page}> <div style={styles.page}>
<div style={styles.containerNarrow}> <div style={styles.containerNarrow}>
@@ -132,6 +156,15 @@ const DatasetEditPage = () => {
/> />
<div style={{ display: "flex", gap: 8, justifyContent: "flex-end" }}> <div style={{ display: "flex", gap: 8, justifyContent: "flex-end" }}>
<button
type="button"
style={styles.buttonDanger}
onClick={deleteDataset}
disabled={isSaving}
>
Delete Dataset
</button>
<button <button
type="button" type="button"
style={styles.buttonSecondary} style={styles.buttonSecondary}

View File

@@ -97,6 +97,16 @@ export const foundationStyles: StyleMap = {
cursor: "pointer", cursor: "pointer",
}, },
buttonDanger: {
padding: "8px 12px",
borderRadius: 6,
border: `1px solid ${palette.borderDefault}`,
background: palette.dangerText,
color: palette.textPrimary,
fontWeight: 600,
cursor: "pointer",
},
grid: { grid: {
marginTop: 12, marginTop: 12,
display: "grid", display: "grid",