feat(geschichte): restore document management for STORY-type Geschichten (#795) #804

Merged
marcel merged 23 commits from feat/issue-795-story-documents into feat/issue-750-lesereisen-data-model 2026-06-11 19:36:37 +02:00
2 changed files with 47 additions and 0 deletions
Showing only changes of commit d91bedbaaf - Show all commits

View File

@@ -102,6 +102,10 @@ async function handleRemove(item: JourneyItemView) {
});
if (!res.ok) {
items = prev;
await tick();
sectionEl
?.querySelector<HTMLElement>(`[data-item-id="${CSS.escape(item.id)}"] [data-remove-btn]`)
?.focus();
errorMessage = await failureMessage(res);
return;
}
@@ -109,6 +113,10 @@ async function handleRemove(item: JourneyItemView) {
} catch (e) {
console.error('Story document remove failed', e);
items = prev;
await tick();
sectionEl
?.querySelector<HTMLElement>(`[data-item-id="${CSS.escape(item.id)}"] [data-remove-btn]`)
?.focus();
errorMessage = m.journey_mutation_error_reload();
}
}

View File

@@ -309,4 +309,43 @@ describe('StoryDocumentPanel — remove', () => {
m.geschichte_documents_removed_announce({ title: 'Brief von Eugenie' })
);
});
it('returns focus to the item remove button when DELETE fails with !res.ok', async () => {
stubFetch([], { ok: false, status: 500, body: {} });
render(
StoryDocumentPanel,
defaultProps({ items: [makeItem('i1', 10, docSummary('d1', 'Brief von Eugenie'))] })
);
await userEvent.click(
page.getByRole('button', {
name: m.geschichte_documents_remove_label({ title: 'Brief von Eugenie' })
})
);
expect(document.activeElement?.getAttribute('aria-label')).toBe(
m.geschichte_documents_remove_label({ title: 'Brief von Eugenie' })
);
});
it('returns focus to the item remove button when DELETE throws a network error', async () => {
vi.stubGlobal(
'fetch',
vi.fn(() => Promise.reject(new Error('Network error')))
);
render(
StoryDocumentPanel,
defaultProps({ items: [makeItem('i1', 10, docSummary('d1', 'Brief von Eugenie'))] })
);
await userEvent.click(
page.getByRole('button', {
name: m.geschichte_documents_remove_label({ title: 'Brief von Eugenie' })
})
);
expect(document.activeElement?.getAttribute('aria-label')).toBe(
m.geschichte_documents_remove_label({ title: 'Brief von Eugenie' })
);
});
});