# Chapitre 2 : Configuration
## Le fichier appConfig.js
Le fichier `appConfig.js` centralise toute la configuration de l'application. Il est passé au `Provider` de SmartCommon.
```javascript
// src/appConfig.js
export const config = {
// Mode debug
debug: import.meta.env.DEV,
// Configuration API
api: {
prefixUrl: import.meta.env.VITE_API_URL,
timeout: 30000,
debug: import.meta.env.DEV,
paths: {
login: "login",
logout: "logout",
refresh: "refresh"
}
},
// Persistance localStorage
storage: {
local: ["session", "settings"]
},
// État global initial
globalState: {
reducers: {
session: null,
settings: { lng: "fr" },
items: []
}
},
// Animations de transition
pages: {
"/": { "/settings": "slideLeft", "*": "fade" },
"*": "fade"
}
};
```
## Détail des options
### debug
```javascript
debug: import.meta.env.DEV
```
Active les logs de debug dans la console. Utilise la variable d'environnement Vite `DEV` qui est `true` en développement.
### api
Configuration du client HTTP (ky) avec authentification JWT.
```javascript
api: {
// URL de base pour toutes les requêtes
prefixUrl: import.meta.env.VITE_API_URL,
// Timeout en millisecondes
timeout: 30000,
// Logs des requêtes en console
debug: import.meta.env.DEV,
// Endpoints SmartAuth
paths: {
login: "login", // POST pour authentification
logout: "logout", // POST pour déconnexion
refresh: "refresh" // GET pour renouveler le token
}
}
```
### storage
Définit quelles clés de l'état global sont persistées en localStorage.
```javascript
storage: {
local: ["session", "settings"]
}
```
Avec cette configuration :
- `session` sera sauvegardé dans `localStorage.session`
- `settings` sera sauvegardé dans `localStorage.settings`
- Au rechargement de la page, ces valeurs seront restaurées
**Cas d'usage** :
- `session` : tokens JWT et informations utilisateur
- `settings` : préférences (langue, thème)
### globalState
Initialise l'état global Redux via `useGlobalStates`.
```javascript
globalState: {
reducers: {
// Utilisateur connecté (null = non connecté)
session: null,
// Préférences utilisateur
settings: { lng: "fr" },
// Données métier
items: [],
currentItem: null
}
}
```
Chaque clé devient accessible via `useGlobalStates` :
```javascript
const [session, setSession] = useGlobalStates('session');
const [settings, setSettings] = useGlobalStates('settings');
const [items, setItems] = useGlobalStates('items');
```
### pages
Configuration des animations de transition entre pages (Framer Motion).
```javascript
pages: {
// Depuis la page "/"
"/": {
"/settings": "slideLeft", // Vers settings : glisse à gauche
"*": "fade" // Vers autres : fondu
},
// Depuis toute autre page
"*": "fade"
}
```
Animations disponibles :
- `fade` : fondu enchaîné
- `slideLeft` : glisse vers la gauche
- `slideRight` : glisse vers la droite
- `slideUp` : glisse vers le haut
- `slideDown` : glisse vers le bas
## Le Provider SmartCommon
Le `Provider` initialise tous les contextes nécessaires :
```javascript
// src/App.jsx
import { Provider } from '@cap-rel/smartcommon';
import { Router } from './components/app/Router';
import { config } from './appConfig';
export const App = () => (