{% extends 'base.html.twig' %} {% block title %}Sidebar - Design System - Bubul{% endblock %} {% block body %}
{# ===== EXPLICATION ===== #}
{% include '_atoms/icon/icon.html.twig' with { name: 'list', size: 'lg', color: 'white' } %}

Navigation principale

Critique

La Sidebar est l'organisme le plus important de Bubul. Presente sur 100% des pages, elle permet de naviguer entre les produits (Moodia, Serenia, Slidia, SAM) et les sections d'administration.

1

Molecule

3

Atomes

3

Roles

1

Controller

{# ===== COMPOSITION ===== #}

Composition

Molecules et atomes utilises

Molecules

  • nav-item - Elements de navigation

Atomes

  • icon - Icones des produits
  • logo - Logo Bubul
  • badge - Compteurs notifications
{# ===== USAGE ===== #}

Usage

{% verbatim %}{# Dans base.html.twig #}
{% include '_organisms/sidebar/sidebar.html.twig' %}

{# Ou avec parametres explicites #}
{% include '_organisms/sidebar/sidebar.html.twig' with {
    collapsed: app.user.settings.sidebarCollapsed|default(false),
    currentRoute: app.request.attributes.get('_route'),
    accessibleTools: accessible_tools,
    isAdmin: is_granted('ROLE_ADMIN'),
    isManager: is_granted('ROLE_COMPANY_MANAGER'),
    companyUuid: app.user.company.uuid|default(null),
    version: app_version,
    navItemSize: 'lg',
    logoSize: '2xl',
    logoSizeCollapsed: 'md'
} %}{% endverbatim %}
{# ===== STRUCTURE ===== #}

Structure

Organisation hierarchique de la sidebar

Sidebar
├── Header
│   ├── Toggle (collapse/expand)
│   └── Logo Bubul
│
├── Menu Principal
│   ├── Dashboard
│   ├── Moodia      (ou locked)
│   ├── Serenia     (ou locked)
│   ├── Slidia      (ou locked)
│   └── SAM         (conditionnel)
│
├── Section Admin   (si ROLE_ADMIN ou ROLE_COMPANY_MANAGER)
│   ├── Separateur
│   ├── Categorie "Administration"
│   ├── Entreprises / Mon entreprise
│   ├── Utilisateurs
│   ├── Contrats    (admin only)
│   └── Tokens      (manager only)
│
├── Section Beta    (si ROLE_ADMIN)
│   ├── Separateur
│   ├── Categorie "Beta"
│   ├── Feedbacks
│   ├── Design System
│   └── Beta testers
│
└── Footer
    ├── Parametres
    ├── Deconnexion
    └── Version
{# ===== DEMO ORGANISME ===== #}

Demo de l'organisme

Comparaison Expanded (260px) vs Collapsed (72px)

{# Expanded #}

Expanded

{% include '_organisms/sidebar/sidebar.html.twig' with { collapsed: false, currentRoute: 'admin_design_system', accessibleTools: ['moodia', 'serenia'], isAdmin: true, isManager: false, version: '0.9.54', interactive: false, static: true } %}
{# Collapsed #}

Collapsed

{% include '_organisms/sidebar/sidebar.html.twig' with { collapsed: true, currentRoute: 'admin_design_system', accessibleTools: ['moodia', 'serenia'], isAdmin: true, isManager: false, version: '0.9.54', interactive: false, static: true } %}
{# ===== OUTILS VERROUILLES ===== #}

Outils verrouilles

Affichage quand l'utilisateur n'a pas acces a un outil

{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Dashboard', icon: 'bubul-dashboard', href: '#', active: true } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Moodia', icon: 'bubul-moodia', href: '#' } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Serenia', icon: 'bubul-serenia', href: '#', locked: true } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Slidia', icon: 'bubul-slidia', href: '#', locked: true } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'SAM', icon: 'bubul-sam', href: '#', locked: true, disabled: true } %}

Les outils avec locked: true affichent un cadenas rouge

{# ===== SECTIONS PAR ROLE ===== #}

Sections par role

Affichage conditionnel selon les permissions

{# User #}

ROLE_USER

{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Dashboard', icon: 'bubul-dashboard', href: '#', active: true, size: 'sm' } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Moodia', icon: 'bubul-moodia', href: '#', size: 'sm' } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Serenia', icon: 'bubul-serenia', href: '#', size: 'sm' } %}

Menu principal uniquement

{# Manager #}

ROLE_COMPANY_MANAGER

{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Dashboard', icon: 'bubul-dashboard', href: '#', size: 'sm' } %}
Admin
{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Mon entreprise', icon: 'bubul-entreprise', href: '#', size: 'sm' } %} {% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Utilisateurs', icon: 'bubul-utilisateur', href: '#', size: 'sm' } %}

+ Section entreprise

{# Admin #}

ROLE_ADMIN

{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Dashboard', icon: 'bubul-dashboard', href: '#', size: 'sm' } %}
Admin
{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Entreprises', icon: 'bubul-entreprise', href: '#', size: 'sm' } %}
Beta
{% include '_molecules/nav-item/nav-item.html.twig' with { label: 'Design System', icon: 'widget-add', href: '#', size: 'sm', active: true } %}

+ Admin + Beta

{# ===== CONTROLLER STIMULUS ===== #}

Controller Stimulus

shared--sidebar

{% verbatim %}{% endverbatim %}

Actions

  • toggle - Bascule collapsed/expanded

Classes CSS

  • sidebar--collapsed - Etat reduit
{# ===== LOGIQUE METIER ===== #}

Logique metier

Variables et conditions Twig

Variable Type Description
app.user User Utilisateur connecte
app.user.settings.sidebarCollapsed bool Etat collapsed sauvegarde en BDD
accessible_tools array Liste des codes outils accessibles ['moodia', 'serenia', ...]
app.request.attributes.get('_route') string Route actuelle pour marquer l'item actif
is_granted('ROLE_ADMIN') bool Affiche sections Admin et Beta
is_granted('ROLE_COMPANY_MANAGER') bool Affiche section Mon entreprise
{# ===== PARAMETRES ===== #}

Parametres

Reference complete des parametres du composant

Parametre Type Defaut Description
collapsed bool false Etat collapsed de la sidebar (72px vs 260px)
currentRoute string _route Route actuelle pour marquer l'item actif
accessibleTools array [] Liste des codes outils accessibles ['moodia', 'serenia', ...]
isAdmin bool is_granted Affiche les sections Admin et Beta
isManager bool is_granted Affiche la section Mon entreprise
companyUuid string null UUID entreprise pour les liens manager
version string app_version Version de l'application affichee en bas
interactive bool true Active le controller Stimulus (toggle)
static bool false Mode statique (relative au lieu de fixed) pour les demos
navItemSize string 'lg' Taille des nav-items (sm, md, lg)
logoSize string '2xl' Taille du logo en mode expanded
logoSizeCollapsed string 'md' Taille du logo en mode collapsed
{# ===== FICHIER SOURCE ===== #}

Fichier source

{% include '_atoms/icon/icon.html.twig' with { name: 'check-circle', size: 'md', color: 'success' } %}

Organisme

templates/_organisms/sidebar/sidebar.html.twig

Note : L'ancienne navbar est dans templates/_components/navbar.html.twig

{% endblock %}