Skip to content

Feature: Members page #44

@FadyGergesRezk

Description

@FadyGergesRezk

Implement the Members management page under /members.

Priority: P0

API endpoints used

Method Endpoint Description
GET /members List all members (MemberSummary[])
POST /members Create a new member (MemberCreate)
GET /members/{member_id} Get full member details (Member)
PATCH /members/{member_id} Update member fields (MemberPartialUpdate)
DELETE /members/{member_id} Delete a member

Tasks

  • Add src/features/members/api/queries.ts with useListMembers and useGetMember hooks using TanStack Query; expose memberListQueryOptions and memberDetailQueryOptions for use in the route loader
  • Add src/features/members/api/mutations.ts with useCreateMember, useUpdateMember, and useDeleteMember hooks; on success invalidate memberListQueryOptions
  • Add src/features/members/api/query-keys.ts for structured query keys
  • Wire a React Router v7 loader on the /members route that calls queryClient.ensureQueryData(memberListQueryOptions())
  • Add Zod schema for MemberCreate and MemberPartialUpdate derived from the generated types in src/api.ts
  • Add Zustand slice for UI state only: selected member ID, detail sheet open/closed
  • Build a members list view (shadcn/ui Table with columns: first_name, last_name, email)
  • Add a member detail Sheet that opens on row click showing all Member fields
  • Add a "New Member" Dialog with a React Hook Form + Zod validated form for MemberCreate
  • Support edit (PATCH) and delete with confirmation from the detail Sheet

Acceptance criteria

  • Members list loads from GET /members before the page renders (via loader prefetch)
  • Creating, editing, and deleting a member reflects in the list without a full page reload
  • Form validates required fields (first_name, last_name) before submitting and shows inline errors
  • Loading, empty, and API-error states are visible in the members list view

Metadata

Metadata

Assignees

No one assigned

    Labels

    clientIssue regarding the client frontendenhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions