veza/apps/web/src/features/playlists/components
senke b406d8a1a1 [FE-TYPE-001] fe-type: Fix all ID type mismatches
- Created ID normalization utility (idNormalization.ts) with:
  * normalizeId: Convert IDs to strings (handles number/string/null)
  * normalizeObjectIds: Recursively normalize IDs in objects
  * normalizeArrayIds: Normalize IDs in arrays of objects
  * Type guards for ID validation
- Updated stores/chat.ts to use normalization instead of manual String() conversions
- Fixed type definitions:
  * PlaylistAnalytics: playlistId number -> string
  * ImportPlaylistButton: playlistId number -> string
  * ExportPlaylistButton: playlistId number -> string
  * usePlaylistNotifications: lastNotificationId number -> string
- Removed unnecessary String() conversions in comparisons
- Comprehensive test suite (20 tests, all passing)
- Ensures all IDs are consistently strings (UUIDs) throughout the app
2025-12-25 14:27:28 +01:00
..
AddCollaboratorModal.tsx [FE-PAGE-008] fe-page: Complete Playlist Detail page implementation 2025-12-24 13:02:32 +01:00
AddTrackToPlaylistModal.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
AddTrackToPlaylistModal.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
CollaboratorList.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
CollaboratorList.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
CollaboratorManagement.tsx [FE-COMP-011] fe-comp: Add playlist collaborator management UI 2025-12-25 11:49:08 +01:00
CreatePlaylistDialog.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
CreatePlaylistDialog.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
DuplicatePlaylistButton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
ExportPlaylistButton.tsx [FE-TYPE-001] fe-type: Fix all ID type mismatches 2025-12-25 14:27:28 +01:00
ImportPlaylistButton.tsx [FE-TYPE-001] fe-type: Fix all ID type mismatches 2025-12-25 14:27:28 +01:00
PlaylistAccessibility.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistActions.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistActions.tsx [FE-COMP-004] fe-comp: Add confirmation dialogs for destructive actions 2025-12-24 14:38:55 +01:00
PlaylistAnalytics.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistAnalytics.tsx [FE-TYPE-001] fe-type: Fix all ID type mismatches 2025-12-25 14:27:28 +01:00
PlaylistBatchActions.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistBatchActions.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistCard.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistCard.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistCardSkeleton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistErrorBoundary.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistErrorBoundary.tsx fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
PlaylistFollowButton.tsx [FE-COMP-017] fe-comp: Add playlist follow/unfollow button 2025-12-25 12:07:29 +01:00
PlaylistForm.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistForm.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistHeader.tsx [FE-COMP-017] fe-comp: Add playlist follow/unfollow button 2025-12-25 12:07:29 +01:00
PlaylistHeaderSkeleton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistList.test.responsive.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistList.test.tsx BASE: completing the initial repo state 2025-12-03 22:56:50 +01:00
PlaylistList.tsx [FE-COMP-006] fe-comp: Add pagination component to all list views 2025-12-25 11:36:48 +01:00
PlaylistListSkeleton.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistListSkeleton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistRecommendations.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistRecommendations.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistSearch.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistSearch.tsx fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
PlaylistTrackItem.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistTrackItem.tsx fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
PlaylistTrackList.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistTrackList.tsx fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
PlaylistTrackListSkeleton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
PlaylistVersionHistory.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
RemoveTrackButton.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
RemoveTrackButton.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
ShareLinkButton.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
SharePlaylistModal.test.tsx refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
SharePlaylistModal.tsx [FE-PAGE-008] fe-page: Complete Playlist Detail page implementation 2025-12-24 13:02:32 +01:00