Remplace le magasin d'état fabriqué par une vraie couche API typée, alignée sur le back-end (Étape 5) : - src/api/ : schema.ts (miroir de backend/app/api/schemas.py), client HTTP, implémentation mock en mémoire (même surface + portage du moteur de validation), sélection mock/http via VITE_API_MODE, hooks React Query (lectures + mutations avec invalidation). - Grille des besoins ← GET /matrix ; treillis de colonnes dérivé des créneaux réels (plus de plages figées). - Panneau d'affectation ← GET /assignments?shift_id, POST /assignments/validate par candidat (alertes bloquantes / avertissements du moteur), POST / PATCH / DELETE /assignments. - Vue par bénévole ← volunteers + shifts + assignments (surcharge / oubliés calculés côté client). - Confirmations (ex-« Publication ») ← affectations PROPOSED ; publication versionnée et emails signalés hors périmètre. - Mobiles ← assignments filtrées ; confirmation = PATCH ; pointage référent local (hors périmètre). - Configuration ← positions & shifts CRUD (min/idéal, ajout/retrait), volunteers CRUD dont suppression RGPD ; messages = maquette locale. - i18n mis à jour, aucun texte d'interface en dur. - Vérifs : build tsc + vite, eslint (0 problème), npm run smoke (API mock + rendu headless des 6 écrans avec données préchargées). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwswqSChc3Rwtu61pRXiY2
41 lines
1.1 KiB
JSON
41 lines
1.1 KiB
JSON
{
|
|
"name": "benevoles-frontend",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint .",
|
|
"typecheck": "tsc -b --noEmit",
|
|
"smoke": "tsx --tsconfig tsconfig.app.json scripts/smoke.tsx"
|
|
},
|
|
"dependencies": {
|
|
"@tanstack/react-query": "^5.59.16",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-router-dom": "^6.27.0"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.12.0",
|
|
"@types/node": "^22.7.5",
|
|
"@types/react": "^18.3.11",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
|
"@typescript-eslint/parser": "^8.8.1",
|
|
"@vitejs/plugin-react": "^4.3.2",
|
|
"autoprefixer": "^10.4.20",
|
|
"eslint": "^9.12.0",
|
|
"eslint-plugin-react-hooks": "^5.0.0",
|
|
"eslint-plugin-react-refresh": "^0.4.12",
|
|
"globals": "^15.11.0",
|
|
"postcss": "^8.4.47",
|
|
"tailwindcss": "^3.4.13",
|
|
"tsx": "^4.19.1",
|
|
"typescript": "^5.6.2",
|
|
"typescript-eslint": "^8.8.1",
|
|
"vite": "^5.4.8"
|
|
}
|
|
}
|