SmarMaker - Documentation
Docs» 15_training:module5-architecture-smartmaker:configuration

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.

snippet.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

snippet.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.

snippet.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.

snippet.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.

snippet.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 :

snippet.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).

snippet.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 :

snippet.javascript
// src/App.jsx
import { Provider } from '@cap-rel/smartcommon';
import { Router } from './components/app/Router';
import { config } from './appConfig';
 
export const App = () => (
    <Provider config={config}>
        <Router />
    </Provider>
);

En interne, le Provider encapsule :

snippet.javascript
// Équivalent interne (simplifié)
<LibConfigProvider config={config}>
    <ReduxProvider>
        <I18nextProvider>
            <ApiProvider>
                <GlobalStatesProvider>
                    {children}
                </GlobalStatesProvider>
            </ApiProvider>
        </I18nextProvider>
    </ReduxProvider>
</LibConfigProvider>

Accéder à la configuration

Dans n'importe quel composant :

snippet.javascript
import { useLibConfig } from '@cap-rel/smartcommon';
 
function MyComponent() {
    const config = useLibConfig();
 
    console.log(config.api.prefixUrl);
    console.log(config.debug);
 
    return <div>...</div>;
}

Configuration avancée

Internationalisation (i18n)

snippet.javascript
export const config = {
    // ...
    i18n: {
        defaultLanguage: 'fr',
        supportedLanguages: ['fr', 'en'],
        debug: import.meta.env.DEV
    }
};

Base de données locale (Dexie)

snippet.javascript
export const config = {
    // ...
    db: {
        name: 'monapp',
        version: 1,
        stores: {
            items: 'id++, name, category',
            logs: 'id++, action, timestamp'
        }
    }
};

Bonnes pratiques

1. Utiliser les variables d'environnement

snippet.javascript
// .env.development
VITE_API_URL=http://localhost/dolibarr/modules/monmodule/pwa/api.php
 
// .env.production
VITE_API_URL=https://production.com/modules/monmodule/pwa/api.php

2. Séparer les environnements

snippet.javascript
const isDev = import.meta.env.DEV;
 
export const config = {
    debug: isDev,
    api: {
        prefixUrl: import.meta.env.VITE_API_URL,
        timeout: isDev ? 60000 : 30000,  // Plus long en dev
        debug: isDev
    }
};

3. Ne pas stocker de données sensibles

snippet.javascript
storage: {
    // OK : données non sensibles
    local: ["session", "settings", "cart"],
 
    // PAS dans le code : mots de passe, clés API côté serveur
}

Exemple complet

snippet.javascript
// src/appConfig.js
const isDev = import.meta.env.DEV;
 
export const config = {
    debug: isDev,
 
    api: {
        prefixUrl: import.meta.env.VITE_API_URL,
        timeout: isDev ? 60000 : 30000,
        debug: isDev,
        paths: {
            login: "login",
            logout: "logout",
            refresh: "refresh"
        }
    },
 
    storage: {
        local: ["session", "settings"]
    },
 
    globalState: {
        reducers: {
            // Auth
            session: null,
 
            // Préférences
            settings: {
                lng: "fr",
                theme: "light",
                notifications: true
            },
 
            // Données métier
            products: [],
            cart: { items: [], total: 0 },
            currentProduct: null
        }
    },
 
    pages: {
        "/": {
            "/cart": "slideLeft",
            "/product/*": "slideLeft",
            "*": "fade"
        },
        "/cart": {
            "/": "slideRight",
            "*": "fade"
        },
        "*": "fade"
    },
 
    i18n: {
        defaultLanguage: 'fr',
        supportedLanguages: ['fr', 'en']
    }
};

Points clés à retenir

  1. appConfig.js centralise toute la configuration
  2. api configure le client HTTP avec JWT
  3. storage.local définit ce qui est persisté
  4. globalState.reducers initialise l'état global
  5. pages configure les animations de transition
  6. Utiliser import.meta.env pour les variables d'environnement

← Chapitre précédent | Retour au module | Chapitre suivant : Flux de données →

Previous Next

Made with ❤ by CAP-REL · SmartMaker · GNU AGPL v3+
Code source · Faire un don
SmarMaker - Documentation
Traductions de cette page:
  • Français
  • Deutsch
  • English
  • Español
  • Italiano
  • Nederlands

Table of Contents

Table des matières

  • Chapitre 2 : Configuration
    • Le fichier appConfig.js
    • Détail des options
      • debug
      • api
      • storage
      • globalState
      • pages
    • Le Provider SmartCommon
    • Accéder à la configuration
    • Configuration avancée
      • Internationalisation (i18n)
      • Base de données locale (Dexie)
    • Bonnes pratiques
      • 1. Utiliser les variables d'environnement
      • 2. Séparer les environnements
      • 3. Ne pas stocker de données sensibles
    • Exemple complet
    • Points clés à retenir
  • SmartAuth
  • SmartMaker - Back (PHP)
    • Mapping Dolibarr - React
  • SmartMaker - Front (React)
    • Animations de pages
    • Architecture
    • Astuces
    • Calendar
    • Composants et pages
    • Configuration du Provider
    • Debug et Logs
    • Hooks SmartCommon
    • PWA (Progressive Web App)
    • Requêtes API
    • Routage
    • SmartCommon
    • Stockage de données
    • Thèmes
    • Traductions
  • HowTo - Pas à pas - Votre première application
    • Développement PHP (back)
    • Développement React (front)
    • Première étape : Module Builder Dolibarr
    • SmartAuth
    • SmartBoot : Un "squelette" quasiment prêt à l'emploi
  • Formation SmartMaker
    • Module 1 : Fondamentaux JavaScript ES6+
      • Chapitre 1 : Variables et Scope
      • Chapitre 2 : Fonctions
      • Chapitre 3 : Programmation Asynchrone
      • Chapitre 4 : Modules ES6
    • Module 2 : Introduction à React
      • Chapitre 1 : Philosophie React
      • Chapitre 2 : JSX
      • Chapitre 3 : Composants
    • Module 3 : Hooks React Fondamentaux
      • Chapitre 1 : useState
      • Chapitre 2 : useEffect
      • Chapitre 3 : useRef
      • Chapitre 4 : useContext
    • Module 4 : React Avancé
      • Chapitre 1 : useCallback et useMemo
      • Chapitre 2 : Custom Hooks
      • Chapitre 3 : Redux et Redux Toolkit
    • Module 5 : Architecture SmartMaker
      • Chapitre 1 : Structure du projet
      • Chapitre 2 : Configuration
      • Chapitre 3 : Flux de données
    • Module 6 : SmartCommon - Composants
      • Chapitre 1 : Mise en page
      • Chapitre 2 : Navigation
      • Chapitre 3 : Formulaires
      • Chapitre 4 : Affichage
    • Module 7 : SmartCommon - Hooks
      • Chapitre 1 : useApi
      • Chapitre 2 : Gestion d'état
      • Chapitre 3 : Hooks utilitaires
    • Module 8 : Backend API (PHP)
      • Chapitre 1 : Routage
      • Chapitre 2 : Controllers
      • Chapitre 3 : Mappers
      • Extrafields et formulaires dynamiques
    • Module 9 : Intégration complète
      • Chapitre 1 : Backend
      • Chapitre 2 : Frontend
      • Chapitre 3 : Déploiement
    • Module 10 : Fonctionnalités avancées
      • Chapitre 1 : Mode offline
      • Chapitre 2 : Internationalisation (i18n)
      • Chapitre 3 : Autres fonctionnalités
    • Module 11 : Bonnes pratiques
  • Démonstration
  • Start
  • Composants et pages
  • Afficher le texte source
  • Anciennes révisions
  • Liens de retour
  • Haut de page