SmarMaker - Documentation
Docs» front» front:hooks

Hooks SmartCommon

SmartCommon fournit un ensemble de hooks React pour faciliter le développement d'applications.

Hooks globaux

Ces hooks utilisent le contexte de l'application et doivent être utilisés à l'intérieur du Provider.

useApi

Gestion des appels API avec authentification JWT automatique.

import { useApi } from '@cap-rel/smartcommon';

const api = useApi();

// Connexion
await api.login({ login, password, rememberMe: true });

// Déconnexion
await api.logout();

// Requête authentifiée
const data = await api.private.get('items').json();

// Requête publique
const info = await api.public.get('public/info').json();

Voir Requêtes API pour plus de détails.

useGlobalStates

État global avec persistance automatique (localStorage/sessionStorage).

import { useGlobalStates } from '@cap-rel/smartcommon';

const gst = useGlobalStates();

// Lire
const user = gst.get('user');
const theme = gst.get('settings.theme');

// Écrire (persistant)
gst.local.set('user', userData);

// Écrire (session uniquement)
gst.session.set('tempData', data);

// Supprimer
gst.unset('user');

// Accès direct aux valeurs
const { user, settings } = gst.values;

Voir Stockage de données pour plus de détails.

useNavigation

Utilitaires de navigation pour react-router-dom.

import { useNavigation } from '@cap-rel/smartcommon';

const nav = useNavigation();

// Navigation programmatique
nav.navigate('/dashboard');
nav.navigate(-1); // Retour arrière

// Informations de route
const { pathname, search, hash } = nav.location;

// Paramètres d'URL
const { id } = nav.params;

useLibConfig

Accès à la configuration de l'application.

import { useLibConfig } from '@cap-rel/smartcommon';

const config = useLibConfig();

console.log(config.debug);     // true/false
console.log(config.api);       // { prefixUrl, timeout, ... }

Hooks locaux

Ces hooks gèrent un état local au composant.

useStates

Gestion d'état local avec path notation.

import { useStates } from '@cap-rel/smartcommon';

const st = useStates({
  initialStates: {
    count: 0,
    user: { name: '', email: '' },
    items: []
  },
  debug: true
});

// Lire
st.get('count');           // 0
st.get('user.name');       // ''
st.get('items[0]');        // undefined

// Écrire
st.set('count', 1);
st.set('user.name', 'John');
st.set('items[]', { id: 1 });  // Push dans le tableau

// Écrire avec fonction
st.set('count', prev => prev + 1);

// Supprimer
st.unset('user.email');
st.unset('items[0]');

// Accès direct
const { count, user, items } = st.values;

useForm

Gestion de formulaires avec état et erreurs.

import { useForm } from '@cap-rel/smartcommon';

const form = useForm({
  defaultValues: {
    name: '',
    email: ''
  },
  debug: true
});

// Lire les valeurs
const name = form.get('values.name');

// Définir un champ avec validation
form.setField({
  name: 'email',
  value: 'test@example.com',
  errors: {
    required: { condition: !value },
    format: { condition: !isValidEmail(value) }
  }
});

// Vérifier les erreurs
const hasEmailError = form.get('errors.email.required');

// Accès direct
const { values, errors, isFormSubmitting, isFormSubmitted } = form;

useDb

Base de données IndexedDB via Dexie.

import { useDb } from '@cap-rel/smartcommon';

const db = useDb({
  name: 'myApp',
  version: 1,
  stores: {
    items: 'id++, name, category',
    logs: 'id++, action, timestamp'
  },
  debug: true
});

// CRUD operations
await db.items.add({ name: 'Item 1', category: 'A' });
await db.items.update(1, { name: 'Item modifié' });
await db.items.delete(1);

// Requêtes
const all = await db.items.toArray();
const filtered = await db.items.where('category').equals('A').toArray();
const item = await db.items.get(1);

Voir Stockage de données pour plus de détails.

Hooks utilitaires

useIntl

Formatage de dates et nombres avec l'API Intl.

import { useIntl } from '@cap-rel/smartcommon';

const intl = useIntl();

// Formater une date
const formatted = intl.DateTimeFormat(Date.now());
// "11/01/2025, 14:30:00"

// Avec options personnalisées
const dateOnly = intl.DateTimeFormat(Date.now(), 'fr-FR', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});
// "11 janvier 2025"

useAnimation

Gestion d'animations avec Framer Motion.

import { useAnimation } from '@cap-rel/smartcommon';

const { start, animations, setAnimations } = useAnimation({
  fadeIn: { value: false, state: null },
  slideIn: { value: false, state: null }
});

// start devient true après le premier rendu
// Utilisez-le pour déclencher des animations d'entrée

useEffect(() => {
  if (start) {
    setAnimations(prev => ({
      ...prev,
      fadeIn: { ...prev.fadeIn, state: 'visible' }
    }));
  }
}, [start]);

useFile

Utilitaires pour la gestion de fichiers.

import { useFile } from '@cap-rel/smartcommon';

const { resizeImage } = useFile();

// Redimensionner une image
const handleFileChange = async (e) => {
  const file = e.target.files[0];

  const base64 = await resizeImage(file, {
    maxWidth: 1920,
    maxHeight: 1080,
    quality: 85
  });

  console.log(base64); // data:image/jpeg;base64,...
};

useVariantMerger

Fusion de props avec variants de composants (usage interne principalement).

import { useVariantMerger } from '@cap-rel/smartcommon';

const MyComponent = (props) => {
  const { variantProps, mergeProps } = useVariantMerger('MyComponent', props);

  return (
    <div {...mergeProps('container', p => ({
      ...p,
      className: `base-class ${p.className || ''}`
    }))}>
      {variantProps.children}
    </div>
  );
};

useListDnD

Drag and drop pour listes (réordonnancement).

import { useListDnD } from '@cap-rel/smartcommon';

const { items, handleDragStart, handleDragOver, handleDrop } = useListDnD({
  initialItems: ['Item 1', 'Item 2', 'Item 3'],
  onReorder: (newItems) => console.log('Nouvel ordre:', newItems)
});

useWindow

Informations sur la fenêtre du navigateur.

import { useWindow } from '@cap-rel/smartcommon';

const { width, height, isMobile, isTablet, isDesktop } = useWindow();

// Responsive conditionnel
if (isMobile) {
  return <MobileView />;
}

Tableau récapitulatif

Hook Catégorie Description
useApi Global Appels API avec auth JWT
useGlobalStates Global État global persistant
useNavigation Global Navigation react-router
useLibConfig Global Configuration de l'app
useStates Local État local avec path notation
useForm Local Gestion de formulaires
useDb Local Base IndexedDB
useIntl Utilitaire Formatage dates/nombres
useAnimation Utilitaire Animations Framer Motion
useFile Utilitaire Manipulation de fichiers
useVariantMerger Utilitaire Fusion de variants
useListDnD Utilitaire Drag and drop
useWindow Utilitaire Infos fenêtre

Voir aussi

  • SmartCommon - Liste des composants
  • Requêtes API - Documentation détaillée useApi
  • Stockage de données - Documentation détaillée stockage
Previous Next

SmarMaker - Documentation
Traductions de cette page:
  • Français
  • Deutsch
  • English
  • Español
  • Italiano
  • Nederlands

Table of Contents

Table des matières

  • Hooks SmartCommon
    • Hooks globaux
      • useApi
      • useGlobalStates
      • useNavigation
      • useLibConfig
    • Hooks locaux
      • useStates
      • useForm
      • useDb
    • Hooks utilitaires
      • useIntl
      • useAnimation
      • useFile
      • useVariantMerger
      • useListDnD
      • useWindow
    • Tableau récapitulatif
    • Voir aussi


  • SmartMaker
    • SmartAuth
    • Back (PHP)
      • Mapping Dolibarr
    • Front (React)
      • Configuration
      • SmartCommon
      • Hooks
      • Architecture
      • Composants et pages
      • Routage
      • Requêtes Api
      • Stockage de données
      • Animations
      • Traductions
      • Thèmes
      • PWA
      • Debug
      • Astuces
    • HowTo first app
  • Formations
  • Démonstration
  • Afficher le texte source
  • Anciennes révisions
  • Liens de retour
  • Haut de page
  • S'identifier
front/hooks.txt · Dernière modification : 2026/01/11 22:31 de 127.0.0.1