Skip to content

Commit 430981d

Browse files
os-zhuangCopilot
andcommitted
feat(metadata-admin): db-only items show Delete action instead of Reset
For two-tier metadata types (allowRuntimeCreate true, allowOrgOverride false — e.g. hook, trigger, validation), the prior UX showed 'Reset overlay' on DB-only items, which is misleading because there is no underlying artifact to reset to. The action actually deletes the row. - ResourceEditPage: doReset() branches on itemIsArtifact; DB-only path navigates back to the list after successful delete - Button label/icon swap to Trash2/Delete when item is DB-only - i18n: add engine.edit.delete + engine.edit.deleteConfirm in EN+ZH Browser-verified end-to-end on hook type: - artifact-locked item: shows lock banner + '新建' CTA (no delete button) - DB-only item: shows '删除' button, confirmation dialog uses new key, delete navigates back to directory page Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6943854 commit 430981d

2 files changed

Lines changed: 37 additions & 9 deletions

File tree

packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { useNavigate, useParams } from 'react-router-dom';
2525
import {
2626
Save,
2727
RotateCcw,
28+
Trash2,
2829
History,
2930
Link2,
3031
Loader2,
@@ -386,19 +387,33 @@ export function MetadataResourceEditPage({
386387
}
387388

388389
async function doReset() {
389-
if (!confirm(`Reset overlay for ${type}/${name}? Code-level value will be restored.`)) {
390+
// Two semantics:
391+
// - artifact-backed item: "Reset overlay" — keep the code default.
392+
// - DB-only item: "Delete" — the item disappears entirely (no
393+
// artifact baseline to fall back to). Navigate back to the list
394+
// since the current URL no longer refers to anything.
395+
const itemIsArtifact = !createMode && layered?.code != null;
396+
const confirmKey = itemIsArtifact
397+
? 'engine.edit.resetConfirm'
398+
: 'engine.edit.deleteConfirm';
399+
if (!confirm(tFormat(confirmKey, locale, { type, name: name ?? '' }))) {
390400
return;
391401
}
392402
setSaving(true);
393403
setError(null);
394404
try {
395405
await client.reset(type, name);
396-
const lay = await client.layered<any>(type, name);
397-
setLayered(lay);
398-
const fresh = (lay.effective ?? lay.code ?? {}) as Record<string, unknown>;
399-
setDraft(fresh);
400-
draftSnapshotRef.current = fresh;
401-
setEditing(false);
406+
if (itemIsArtifact) {
407+
const lay = await client.layered<any>(type, name);
408+
setLayered(lay);
409+
const fresh = (lay.effective ?? lay.code ?? {}) as Record<string, unknown>;
410+
setDraft(fresh);
411+
draftSnapshotRef.current = fresh;
412+
setEditing(false);
413+
} else {
414+
// No artifact baseline → return to the list view.
415+
navigate(`../`);
416+
}
402417
} catch (err: any) {
403418
setError(err?.message ?? String(err));
404419
} finally {
@@ -512,8 +527,17 @@ export function MetadataResourceEditPage({
512527
)}
513528
{!createMode && canWrite && layered?.overlay && (
514529
<Button variant="ghost" size="sm" onClick={doReset} disabled={saving}>
515-
<RotateCcw className="h-4 w-4 mr-1" />
516-
{t('engine.edit.reset', locale)}
530+
{isArtifactItem ? (
531+
<>
532+
<RotateCcw className="h-4 w-4 mr-1" />
533+
{t('engine.edit.reset', locale)}
534+
</>
535+
) : (
536+
<>
537+
<Trash2 className="h-4 w-4 mr-1" />
538+
{t('engine.edit.delete', locale)}
539+
</>
540+
)}
517541
</Button>
518542
)}
519543
{!createMode && (

packages/app-shell/src/views/metadata-admin/i18n.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ const ENGINE_STRINGS_EN: Record<string, string> = {
152152
'engine.edit.save': 'Save',
153153
'engine.edit.reset': 'Reset overlay',
154154
'engine.edit.resetConfirm': 'Reset overlay for {type}/{name}?',
155+
'engine.edit.delete': 'Delete',
156+
'engine.edit.deleteConfirm': 'Delete {type}/{name}? This cannot be undone.',
155157
'engine.edit.history': 'History',
156158
'engine.edit.layers': 'Layers',
157159
'engine.edit.references': 'References',
@@ -269,6 +271,8 @@ const ENGINE_STRINGS_ZH: Record<string, string> = {
269271
'engine.edit.save': '保存',
270272
'engine.edit.reset': '重置覆盖',
271273
'engine.edit.resetConfirm': '重置 {type}/{name} 的覆盖层?',
274+
'engine.edit.delete': '删除',
275+
'engine.edit.deleteConfirm': '删除 {type}/{name}?此操作不可撤销。',
272276
'engine.edit.history': '历史',
273277
'engine.edit.layers': '层次',
274278
'engine.edit.references': '引用关系',

0 commit comments

Comments
 (0)