Files
Mitgliederverwaltung/.plans/open/issue-213-frontend-state-management-issues.md
T
shahondin1624 b29a268b1d Restructure .plans/ into done/ and open/ subdirectories
- Move completed plan files to .plans/done/
- Move 18 open plan files to .plans/open/
- Update .gitignore to exclude .verified_plans temp file
- Verified all 18 open plans still describe unimplemented issues
2026-04-28 20:30:55 +02:00

1.9 KiB

Issue #213: Frontend State Management Issues

Problem

Several issues in the Pinia stores and Vue components:

1. Store State Not Persisted

The members.js store state (filters, pagination) is lost on page refresh. Users lose their filter settings.

2. No Optimistic UI Updates

When creating/updating/deleting members, the UI waits for the server response before updating. For better UX, implement optimistic updates:

async function deleteMember(id) {
    // Optimistic: remove from local state immediately
    this.members = this.members.filter(m => m.id !== id)
    
    try {
        await axios.delete(url)
    } catch (err) {
        // Revert on failure
        await this.fetchMembers()
        throw err
    }
}

3. Stale Data After Navigation

After updating a member in MemberDetail.vue, navigating back to MemberList.vue may show stale data if the list wasn't refetched.

4. Error State Not Cleared

store.clearError() exists but isn't always called before retry operations, potentially showing old errors alongside new data.

Impact

  • Poor UX (page refresh loses context)
  • Slower perceived performance (no optimistic updates)
  • Confusing states when data is stale
  • Confusing error messages

Solution

  1. Add pinia-plugin-persistedstate to persist store state
  2. Implement optimistic updates in CRUD operations
  3. Use watch to refetch data when navigating back
  4. Ensure clearError() is called at the start of all fetch operations

Tasks

  • Add pinia-plugin-persistedstate dependency
  • Configure persistence for filter and pagination state
  • Implement optimistic updates in deleteMember(), updateMember(), createMember()
  • Add navigation watchers to refetch stale data
  • Verify clearError() is called before all fetch operations
  • Test page refresh preserves filter state

Labels

  • enhancement
  • frontend
  • ux
  • priority:medium