feat: distinguish new notes (green dot) from modified notes (orange dot)

New notes created in-session show a green dot; existing notes with
uncommitted git changes show an orange dot. Saving a new note clears
the green dot; git commit clears the orange dot.

Introduces NoteStatus type ('new' | 'modified' | 'clean'), extracts
useNewNoteTracker hook and resolveNoteStatus pure function, and adds
onNoteSaved callback to useEditorSave for clearing new-note tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
lucaronin
2026-02-24 15:54:24 +01:00
parent 0e9de3c1e2
commit 4f03751da5
16 changed files with 380 additions and 123 deletions

View File

@@ -206,20 +206,33 @@ describe('Editor', () => {
{...defaultProps}
tabs={[mockTab]}
activeTabPath={mockEntry.path}
isModified={() => true}
getNoteStatus={() => 'modified'}
/>
)
// Modified indicator shows "M" in the breadcrumb
expect(screen.getByText('M')).toBeInTheDocument()
})
it('shows new indicator when file is new', () => {
render(
<Editor
{...defaultProps}
tabs={[mockTab]}
activeTabPath={mockEntry.path}
getNoteStatus={() => 'new'}
/>
)
// New indicator shows "N" in the breadcrumb
expect(screen.getByText('N')).toBeInTheDocument()
})
it('renders diff toggle button when file is modified', () => {
render(
<Editor
{...defaultProps}
tabs={[mockTab]}
activeTabPath={mockEntry.path}
isModified={() => true}
getNoteStatus={() => 'modified'}
onLoadDiff={async () => '+ added line'}
/>
)