Skip to content

Commit d6cb719

Browse files
committed
feat: inline dataset renaming
1 parent dfd2adf commit d6cb719

1 file changed

Lines changed: 59 additions & 3 deletions

File tree

web/src/pages/DatasetsView.tsx

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,13 @@ export function DatasetsView() {
111111
const datasets = useDatasets();
112112
const createDataset = useCreateDataset();
113113
const deleteDataset = useDeleteDataset();
114+
const updateDataset = useUpdateDataset();
114115
const removeMedia = useRemoveDatasetMedia();
115116

116117
const [newName, setNewName] = useState("");
118+
// Inline rename of the active dataset (the ✎ next to the title).
119+
const [renaming, setRenaming] = useState(false);
120+
const [nameDraft, setNameDraft] = useState("");
117121
const [addOpen, setAddOpen] = useState(false);
118122
const [autoOpen, setAutoOpen] = useState(false);
119123
// Once opened, the Studio stays mounted (hidden when closed) so an
@@ -324,9 +328,61 @@ export function DatasetsView() {
324328
}}
325329
>
326330
<div style={{ flex: 1 }}>
327-
<div style={{ fontSize: 15, fontWeight: 600 }}>
328-
{active.name}
329-
</div>
331+
{renaming ? (
332+
<input
333+
autoFocus
334+
value={nameDraft}
335+
onChange={(event) => setNameDraft(event.target.value)}
336+
onKeyDown={(event) => {
337+
if (event.key === "Enter") {
338+
const name = nameDraft.trim();
339+
if (name && name !== active.name) {
340+
updateDataset.mutate({ id: active.id, name });
341+
}
342+
setRenaming(false);
343+
} else if (event.key === "Escape") {
344+
setRenaming(false);
345+
}
346+
}}
347+
onBlur={() => setRenaming(false)}
348+
style={{
349+
fontSize: 15,
350+
fontWeight: 600,
351+
padding: "2px 6px",
352+
borderRadius: 6,
353+
border: `1px solid ${colors.borderControl}`,
354+
background: colors.input,
355+
color: colors.text,
356+
width: 260,
357+
}}
358+
/>
359+
) : (
360+
<div
361+
style={{
362+
fontSize: 15,
363+
fontWeight: 600,
364+
display: "flex",
365+
alignItems: "center",
366+
gap: 7,
367+
}}
368+
>
369+
{active.name}
370+
<span
371+
title="Rename dataset"
372+
onClick={() => {
373+
setNameDraft(active.name);
374+
setRenaming(true);
375+
}}
376+
style={{
377+
fontSize: 12,
378+
color: colors.textMuted,
379+
cursor: "pointer",
380+
}}
381+
>
382+
383+
</span>
384+
</div>
385+
)}
330386
<div
331387
style={{
332388
fontSize: 11,

0 commit comments

Comments
 (0)