Keep/CHANGELOG.md

73 lines
3.7 KiB
Markdown

# Changelog
All notable changes to this project will be documented in this file.
## [0.2.0] - 2026-01-04
### Added
- **Label Management System**: Complete redesign of label/tag management with color filtering
- Added `Label` model to Prisma schema with centralized database storage
- Fields: id, name, color, userId, createdAt, updatedAt
- Color field supports 10 pastel colors (default, red, orange, yellow, green, teal, blue, purple, pink, gray)
- Created `LabelContext` for global state management with React Context API
- Provides labels array and loading state
- Exposes functions: addLabel, updateLabel, deleteLabel, getLabelColor, refreshLabels
- Added `useLabels` hook for easy access to label functionality
- Implemented full CRUD API for labels (GET, POST, PUT, DELETE)
- `/api/labels` - GET all labels, POST create new label
- `/api/labels/[id]` - GET specific label, PUT update, DELETE remove
- Updated all components to use the new context instead of localStorage
- **New Components**:
- `LabelBadge` - Reusable component for displaying label badges
- 3 variants: default, filter, clickable
- Automatic color display via context
- Optional remove button (X icon)
- `LabelSelector` - Dropdown for selecting labels in note input
- Shows count of selected labels
- Uses LabelBadge for each option
- `LabelFilter` - Filter interface with color and label selection
- Color filter: 10 color buttons with label count per color
- Label filter: Checkbox list of all labels
- Clear all button to reset filters
- **Color Filtering**:
- Filter notes by label color via URL parameter `?color=blue`
- Shows number of labels per color
- Highlights selected color with ring effect
- Automatically filters label list when color is selected
- **Updated Components**:
- `note-input.tsx` - Added LabelSelector for label selection during note creation
- `note-card.tsx` - Uses LabelBadge to display labels on notes
- `note-editor.tsx` - Uses LabelBadge to display labels in editor
- `header.tsx` - Added selectedColor and onColorFilterChange props
- `header-wrapper.tsx` - Manages color filtering via URL params
- `page.tsx` - Filters notes by selected label color
- `layout.tsx` - Wraps app with LabelProvider
### Fixed
- **Tests**: Fixed Playwright drag-and-drop tests to work with dynamically generated note IDs
- Changed selectors from hardcoded text (`text=Note 1`) to flexible attribute selectors (`[data-draggable="true"]`)
- Updated matchers from `toContain('Note')` to regex patterns `toMatch(/Note \d+/)` to handle unique IDs with timestamps
- Replaced UI-based cleanup with API-based cleanup using `request.delete()` for more reliable test cleanup
### Database
- Cleaned up 38 accumulated test notes from database using MCP memento tool
- Retained only essential notes: "test" and 2x "New AI Framework Released"
- Added migration `20260104203746_add_labels_table` for new Label model
### Technical Details
- **Label Management**:
- Labels now stored in database with colors, eliminating localStorage duplication
- All label operations are centralized through LabelContext
- Automatic synchronization across all components
- Better performance with single source of truth
- Support for user-specific labels (userId field for future auth)
- **Tests**:
- The drag-and-drop functionality itself was working correctly
- The issue was in Playwright tests which expected exact text matches but notes were created with unique IDs (e.g., `test-1767557327567-Note 1`)
- Tests now properly handle the dynamic note generation system
## [Previous Versions]
See individual commit history for earlier changes.