Add duplicate link action with unique name prefill
This commit is contained in:
@@ -361,6 +361,27 @@ function AdminPage({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const startDuplicate = (link: LinkItem) => {
|
||||||
|
const existingNames = new Set(orderedLinks.map((item) => item.name.toLowerCase()));
|
||||||
|
const base = `${link.name} (copy)`;
|
||||||
|
let candidate = base;
|
||||||
|
let counter = 2;
|
||||||
|
while (existingNames.has(candidate.toLowerCase())) {
|
||||||
|
candidate = `${base} ${counter}`;
|
||||||
|
counter += 1;
|
||||||
|
}
|
||||||
|
setEditingId(null);
|
||||||
|
setFile(null);
|
||||||
|
setForm({
|
||||||
|
name: candidate,
|
||||||
|
url: link.url,
|
||||||
|
description: link.description,
|
||||||
|
category: link.category,
|
||||||
|
icon_url: link.icon_url ?? '',
|
||||||
|
enabled: link.enabled,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
setEditingId(null);
|
setEditingId(null);
|
||||||
setFile(null);
|
setFile(null);
|
||||||
@@ -511,6 +532,7 @@ function AdminPage({
|
|||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
<button type="button" className="btn-subtle" onClick={() => moveBy(link.id, -1)} disabled={index === 0}>Up</button>
|
<button type="button" className="btn-subtle" onClick={() => moveBy(link.id, -1)} disabled={index === 0}>Up</button>
|
||||||
<button type="button" className="btn-subtle" onClick={() => moveBy(link.id, 1)} disabled={index === orderedLinks.length - 1}>Down</button>
|
<button type="button" className="btn-subtle" onClick={() => moveBy(link.id, 1)} disabled={index === orderedLinks.length - 1}>Down</button>
|
||||||
|
<button type="button" className="btn-subtle" onClick={() => startDuplicate(link)}>Duplicate</button>
|
||||||
<button type="button" className="btn-subtle" onClick={() => startEdit(link)}>Edit</button>
|
<button type="button" className="btn-subtle" onClick={() => startEdit(link)}>Edit</button>
|
||||||
<button type="button" className="btn-subtle" onClick={() => onDelete(link.id)}>Delete</button>
|
<button type="button" className="btn-subtle" onClick={() => onDelete(link.id)}>Delete</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user