Passer au contenu principal

Configuration requise

Configuration Auth0 requise – Assurez-vous que votre locataire est configuré avec l’ API My Organization. Afficher le guide de configuration →

Installation

pnpm add @auth0/universal-components-react
L’exécution de la commande shadcn installe également la dépendance @auth0/universal-components-core pour les utilitaires partagés et l’intégration Auth0.

Démarrage rapide

import { OrganizationDetailsEdit } from '@auth0/universal-components-react/spa';

export function OrganizationSettingsPage() {
  const navigate = useNavigate();

return (

<OrganizationDetailsEdit
saveAction={{
        onAfter: () => navigate("/organization"),
      }}
backButton={{
        onClick: () => navigate("/organization"),
      }}
/>
);
}

Bien que cet exemple utilise une application à page unique (SPA) React, les configurations des propriétés (schéma, customMessages, style, etc.) s’appliquent également aux configurations Next.js et shadcn.
import React from "react";
import { OrganizationDetailsEdit } from "@auth0/universal-components-react/spa";
import { Auth0Provider } from "@auth0/auth0-react";
import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa";
import { useNavigate } from "react-router-dom";
import { analytics } from "./lib/analytics";

function OrganizationSettingsPage() {
  const navigate = useNavigate();

  const handleSaveSuccess = (org) => {
    analytics.track("Organization Updated", {
      name: org.name,
      displayName: org.display_name,
    });
    navigate("/organization");
  };

  return (
    <div className="max-w-2xl mx-auto p-6">
      <OrganizationDetailsEdit
        schema={{
          details: {
            displayName: {
              required: true,
              maxLength: 100,
            },
            color: {
              regex: /^#[0-9A-Fa-f]{6}$/,
              errorMessage: « Saisir une couleur hexadécimale valide »,
            },
          },
        }}
        saveAction={{
          onBefore: (org) => {
            return confirm(`Save changes to "${org.display_name}"?`);
          },
          onAfter: handleSaveSuccess,
        }}
        cancelAction={{
          onBefore: () => confirm(« Abandonner les modifications non enregistrées? »),
          onAfter: () => navigate("/organization"),
        }}
        backButton={{
          onClick: () => navigate("/organization"),
        }}
        customMessages={{
          header: {
            title: « Paramètres de l'organization »,
          },
          notifications: {
            save_success: « Paramètres enregistrés avec succès! »,
          },
        }}
        styling={{
          variables: {
            common: {
              "--color-primary": "#059669",
            },
          },
          classes: {
            "OrganizationDetailsEdit-form": "shadow-xl rounded-lg",
          },
        }}
      />
    </div>
  );
}

export default function App() {
  const authDetails = {
    domain: "your-domain.auth0.com",
    clientId: "your-client-id",
  };
  return (
    <Auth0Provider
      {...authDetails}
      redirectUri={window.location.origin}
      authorizationParams={{
        redirect_uri: window.location.origin,
      }}
    >
      <Auth0ComponentProvider>
        <OrganizationSettingsPage />
      </Auth0ComponentProvider>
    </Auth0Provider>
  );
}

Propriétés

Propriétés essentielles

Les propriétés essentielles sont fondamentales pour le fonctionnement du composant. OrganizationDetailsEdit n’a pas de propriétés requises​ : il charge automatiquement les détails de l’organization actuelle à partir de l’API My Organization.

Propriétés d’affichage

Les propriétés d’affichage contrôlent la manière dont le composant s’affiche sans altérer son comportement. Veuillez les utiliser pour masquer des sections ou activer le mode lecture seule.
PropriétéTypeDescription
readOnlybooleanDésactivez toutes les entrées de formulaire. Valeur par défaut : false
hideHeaderbooleanMasquer la section d’en-tête. Valeur par défaut : false

Propriétés d’action

Les propriétés d’action gèrent les interactions des utilisateurs et définissent ce qui se produit lorsque les utilisateurs enregistrent ou annulent des modifications. Veuillez utiliser les hooks de cycle de vie (onBefore, onAfter) pour intégrer le routage et l’analyse de votre application.
PropriétéTypeDescription
saveActionComponentAction<OrganizationPrivate>Action Enregistrer les modifications. Détails
cancelActionComponentAction<OrganizationPrivate>Annuler/supprimer les modifications. Détails
backButtonObjectConfiguration du bouton Retour. Détails

saveAction

Type : ComponentAction<OrganizationPrivate> Contrôle le flux d’enregistrement lorsque les utilisateurs soumettent des modifications à l’organization. Utilisez onAfter pour quitter la page après un enregistrement réussi. Propriétés :
  • disabled – Désactiver le bouton d’enregistrement (p. ex., lorsqu’une autre opération est en cours).
  • onBefore(data) – S’exécute avant l’opération d’enregistrement. Renvoie « false » pour empêcher l’enregistrement (p. ex., pour afficher d’abord une boîte de dialogue de confirmation).
  • onAfter(data) – S’exécute une fois l’organization enregistrée. À utiliser pour quitter la page ou suivre l’événement.
Modèles courants :
// Navigate back after saving
saveAction={{
  onAfter: () => navigate("/organization"),
}}

// Add confirmation before saving
saveAction={{
  onBefore: (org) => {
    return confirm(`Save changes to "${org.display_name}"?`);
  },
  onAfter: () => navigate("/organization"),
}}

// Track analytics on save
saveAction={{
  onAfter: (org) => {
    analytics.track("Organization Updated", {
      name: org.name,
      displayName: org.display_name,
    });
    navigate("/organization");
  },
}}

cancelAction

Type : ComponentAction<OrganizationPrivate> Contrôle le flux d’annulation/suppression. Utilisez cette action pour gérer les modifications supprimées. Propriétés :
  • disabled – Désactiver le bouton d’annulation
  • onBefore(data) – S’exécute avant l’action d’annulation. Renvoie « false » pour empêcher l’annulation (p. ex., pour confirmer la suppression des modifications non enregistrées).
  • onAfter(data) – S’exécute après la confirmation de l’annulation. À utiliser pour quitter le formulaire.
Exemple :
<OrganizationDetailsEdit
  cancelAction={{
    onBefore: (org) => {
      return confirm("Discard unsaved changes?");
    },
    onAfter: () => navigate("/organization"),
  }}
/>

backButton

Type : { icon?: LucideIcon; onClick: (e: MouseEvent) => void } Configure le bouton de retour dans l’en-tête du composant. À utiliser pour revenir à la vue d’ensemble de votre organization ou à la page précédente. Propriétés :
  • icon – Composant icône Lucide personnalisé (facultatif, valeur par défaut : ArrowLeft)
  • onClick – Gestionnaire de clic pour la navigation
Exemple :
import { ChevronLeft } from "lucide-react";

<OrganizationDetailsEdit
  backButton={{
    icon: ChevronLeft,
    onClick: () => navigate("/organization"),
  }}
/>;

Propriétés de personnalisation

Les propriétés de personnalisation vous permettent d’adapter le composant à votre marque, à votre région et à vos exigences de validation sans modifier le code source.
PropriétéTypeDescription
schemaOrganizationDetailsEditSchemasRègles de validation des champs. Détails
customMessagesPartial<OrganizationDetailsEditMessages>Remplacement du texte i18n. Détails
stylingComponentStyling<OrganizationEditClasses>Variables CSS et remplacements de classe. Détails

schéma

Définir des règles de validation personnalisées pour les champs de détails de l’organization.
  Tous les champs du schéma prennent en charge : regex, errorMessage, minLength, maxLength, requireddetails.name – Nom interne de l’organization details.displayName – Nom d’affichage de l’organization details.color – Couleur de la marque (format hexadécimal) details.logoURL – URL du logo
<OrganizationDetailsEdit
  schema={{
    details: {
      name: {
        minLength: 3,
        maxLength: 50,
        regex: /^[a-zA-Z0-9-_]+$/,
        errorMessage: « Le nom doit être alphanumérique et comporter des tirets/traits de soulignement »,
      },
      displayName: {
        required: true,
        maxLength: 100,
      },
      color: {
        regex: /^#[0-9A-Fa-f]{6}$/,
        errorMessage: "Enter a valid hex color (e.g., #FF5500)",
      },
      logoURL: {
        regex: /^https:\/\/.+/,
        errorMessage: "Logo URL must use HTTPS",
      },
    },
  }}
/>

customMessages

Personaliser tous les textes et toutes les traductions. Tous les champs sont facultatifs et utilisent les valeurs par défaut s’ils ne sont pas renseignés.
en-tête – En-tête du composant
  • title, description, back_button_text
formulaire – Champs du formulaire
  • fields.name - label, placeholder, helper_text, error
  • fields.display_name - label, placeholder, helper_text, error
  • fields.color - label, placeholder, helper_text, error
  • fields.logo_url - label, placeholder, helper_text, error
actions – Étiquettes des boutons
  • save_button_text, cancel_button_text
notifications – Réponses API
  • save_success, save_error, general_error
<OrganizationDetailsEdit
  customMessages={{
    header: {
      title: « Modifier l'organization »,
      description: « Mettre à jour les paramètres de votre organization »,
    },
    form: {
      fields: {
        name: {
          label: « Identifiant de l'organization »,
          helper_text: « Identificateur interne (ne peut être modifié après la création) »,
        },
        display_name: {
          label: « Nom de l'organization »,
          placeholder: « Saisir le nom d'affichage »,
        },
      },
    },
    notifications: {
      save_success: « Organization mise à jour avec succès! »,
    },
  }}
/>

style

Personnaliser l’apparence à l’aide de variables CSS et de surcharges de classe. Prend en charge les styles adaptés aux thèmes.
Variables – Propriétés personnalisées CSS – common – Appliqué à tous les thèmes – light – Thème clair uniquement – dark – Thème sombre uniquementClasses – Surcharges de classes des composantsOrganizationDetailsEdit-headerOrganizationDetailsEdit-formOrganizationDetailsEdit-actions
<OrganizationDetailsEdit
  styling={{
    variables: {
      common: {
        "--font-size-title": "1.5rem",
      },
      light: {
        "--color-primary": "#059669",
      },
    },
    classes: {
      "OrganizationDetailsEdit-form": "shadow-lg rounded-xl p-6",
    },
  }}
/>

Personnalisation avancée

Le composant OrganizationDetailsEdit est constitué de sous-composants et de hooks plus petits. Vous pouvez les importer individuellement pour créer des flux de production d’édition d’organization personnalisés si vous utilisez shadcn.

Sous-composants disponibles

Pour les cas d’utilisation avancés, vous pouvez importer des sous-composants individuels afin de créer des interfaces d’édition personnalisées pour votre organization.
ComposantDescription
OrganizationFormComposant principal du formulaire avec tous les champs
ColorPickerFieldChamp de sélection de la couleur de la marque
LogoUploadFieldSaisie de l’URL du logo avec aperçu

Hooks disponibles

Ces hooks fournissent la logique sous-jacente sans aucune interface utilisateur. Veuillez les utiliser pour créer des interfaces entièrement personnalisées tout en tirant parti de l’intégration de l’API Auth0.
HookDescription
useOrganizationDetailsEditLogique d’édition de l’organization et intégration de l’API