feat: Coupons CRUD - Frontend list page (Phase 2)
Implemented complete Coupons list page following PROJECT_SOP.md
Created: CouponsApi helper (lib/api/coupons.ts)
- TypeScript interfaces for Coupon and CouponFormData
- Full CRUD methods: list, get, create, update, delete
- Pagination and filtering support
Updated: Coupons/index.tsx (Complete rewrite)
- Full CRUD list page with SOP-compliant UI
- Toolbar with bulk actions and filters
- Desktop table + Mobile cards (responsive)
- Pagination support
- Search and filter by discount type
Following PROJECT_SOP.md Standards:
✅ Toolbar pattern: Bulk delete, Refresh (REQUIRED), Filters
✅ Table UI: p-3 padding, hover:bg-muted/30, bg-muted/50 header
✅ Button styling: bg-red-600 for delete, inline-flex gap-2
✅ Reset filters: Text link style (NOT button)
✅ Empty state: Icon + message + helper text
✅ Mobile responsive: Cards with md:hidden
✅ Error handling: ErrorCard for page loads
✅ Loading state: LoadingState component
✅ FAB configuration: Navigate to /coupons/new
Features:
- Bulk selection with checkbox
- Bulk delete with confirmation
- Search by coupon code
- Filter by discount type
- Pagination (prev/next)
- Formatted discount amounts
- Usage tracking display
- Expiry date display
- Edit navigation
UI Components Used:
- Card, Input, Select, Checkbox, Badge
- Lucide icons: Trash2, RefreshCw, Edit, Tag
- Consistent spacing and typography
Next Steps:
- Create New.tsx (create coupon form)
- Create Edit.tsx (edit coupon form)
- Update NavigationRegistry.php
- Update API_ROUTES.md