L'introduzione di Single Directory Components (SDC) in Drupal ha inaugurato un nuovo approccio allo sviluppo frontend. Ad un anno dall'integrazione nel core, abbiamo messo alla prova SDC su progetti avanzati caratterizzati da design system complessi con un'attenzione particolare alle performance.
In questo talk esploreremo le sfide tecniche e organizzative che abbiamo affrontato, i miglioramenti in termini di efficienza e manutenibilit del codice e come l'utilizzo di uno strumento come Storybook abbia trasformato il nostro approccio allo sviluppo frontend su Drupal.
4. 4
Design
System
De鍖nisce quali sono e come sono i componenti UI di
unapplicazione.
Perch辿 utilizzare un Design System?
Aiuta a rendere coerenti i componenti tra loro;
Aiuta a strutturare il percorso di sviluppo;
5. 5
Componenti
+
Drupal
=
SDC
Single Directory Components (SDC)
Limplementazione utilizzata nel core di Drupal per lo
sviluppo di componenti.
Singola directory presente in un modulo o in un tema che
contiene tutto il necessario per rappresentare e
visualizzare un componente: HTML (twig), CSS / JS.
Storia:
Modulo contrib dal 2022;
Integrato nel core come modulo sperimentale v. 10.1
(giugno 2023);
Stabile core v. 10.3 (giugno 2024);
6. 6
E prima?
CORE
Macro e librerie;
MODULI CONTRIB:
UI Pattern 1.x;
Single File components;
Components!;
Component Libraries: Components;
Avere SDC nel core di Drupal permetter di avere un
supporto pi湛 ampio da parte della community!
9. 9
Il nostro
progetto
Piattaforma editoriale con costruzione
delle singole pagine a elementi;
Ogni elemento deve avere varianti (colori,
layout) editoriali;
Elementi annidati;
Design system ben de鍖nito, serve un
tool per documentare;
Possibilit di riutilizzare il Design
System;
Lighthouse approved;
10. 10
Tema 竪 linsieme dei 鍖les che de鍖niscono laspetto e lo
stile visivo di unapplicazione Drupal.
Organizzazione dispersiva:
Markup - templates;
Style / JS - CSS / SCSS / DIST;
Assets gra鍖ci - images;
Problemi:
Sviluppo a componenti risulta complesso;
Dif鍖cile da mantenere;
Rischio di duplicare;
Organizzare!
11. 11
SDC ci obbliga ad organizzare i componenti in directory
contenenti tutto il necessario per de鍖nire quellelemento.
Contiene o richiama ci嘆 che serve:
Creazione automatica libreria (鍖le CSS / JS);
Utilizzare librerie esterne (libraryOverrides);
Tutto ci嘆 che riguarda un determinato componente viene
gestito in un unico luogo (Principio di Singola
responsabilit).
Quella directory nel nome
12. 12
Solo dove
servono
Non pu嘆 essere tutto suddiviso a componenti!
Problema: come utilizzare elementi comuni necessari nei
componenti?
13. 13
Il nostro
approccio
occorre rispondere alla domanda dove va utilizzato?
Elementi BASE (styleguide: colori, font)
Elementi GLOBALI (griglia)
Elementi SPECIFICI (componenti)
Suddivisione rigorosa tra questi elementi!
15. 15
Il Design System potrebbe richiedere pattern di componenti simili tra loro.
Duplicare rischia di essere la strada pi湛 facile!
SDC ci aiuta:
鍖le *.component.yml permette di dichiarare le propriet;
le propriet possono essere varianti (colori, dimensioni, layout);
WIP: idea di propriet speci鍖ca: Add component variants to SDC;
le varianti di aspetto possono essere gestite editorialmente;
Varianti, non duplicati!
18. 18
Performance SDC carica le proprie librerie solo quando un elemento
竪 in pagina.
Suddivisione rigorosa degli assets;
Evitare duplicati;
Richiamare librerie esterne solo dove richiesto;
Possiamo evitare codice CSS/JS inutilizzato!
19. 19
Documenta!
Questo nuovo progetto lo documentiamo meglio
Richiesto un sistema per
Documentare visivamente il Design System;
Esplorare i singoli componenti;
Veri鍖care come si adatta cambiando il contenuto;
Un regalo per il tuo futuro
20. 20
Strumento open source per costruire,
testare e documentare componenti UI in
modo isolato.
Permette di vedere i singoli elementi
in isolamento (storie);
Possibile esplorare i vari stati e
varianti di ciascun componente;
Addons di base (Controls, Viewport,
Background, Measure) e Centinaia di
Addons aggiuntivi (accessibilit, test
regressione);
Storybook
21. 21
Perch辿 ci
piace
Flessibile nell'organizzazione delle storie;
Personalizzabile, anche nellaspetto;
Integrazione con Drupal - modulo dedicato;
Integrato con SDC - ogni componente pu嘆 avere (o
non avere) una sua storia;
23. 23
si parte!
Costruiamo ci嘆 che ci
serve per fare data
entry
Entit Drupal SDC
Ogni SDC rappresenta
unentit di Drupal
Storybook
Il risultato lo portiamo
su Storybook
(Thats the way I like it)
24. 24
Non funziona!
Organizzare SDC in base alle entit di
Drupal;
Rappresentare su Storybook la
complessit delle entit di Drupal;
La documentazione rischia di essere
posticipata;
Dif鍖cile rendere il Design System
riutilizzabile;
25. 25
Raro esemplare di Drupalis frontendus developerus intento nella risoluzione di un problema.
26. 26
Cos竪
Storybook? Storybook is a frontend workshop for building UI
components and pages in isolation. It helps you
DEVELOP and share hard-to-reach states and edge
cases without needing to run your whole app.
Thousands of teams use it for UI development, testing,
and documentation. It's open source and free.
https://storybook.js.org/docs
Un passo indietro
28. 28
Lanalisi del Design System ci dice quali sono i
componenti necessari;
SDC ci permette di trasformare in codice il Design
System
Le propriet di SDC ci obbligano a de鍖nire quali sono i
dati che ci servono e come ci servono:
Titolo = stringa;
Variante = booleano;
Link (titolo, url, target) = array;
Ci serve un tool di sviluppo!
Design
System
SDC Storybook Drupal
29. 29
Non solo documentazione!
Ogni storia pu嘆 simulare lutilizzo di un determinato
componente fornendo i dati necessari:
Le singole storie ci permettono lo sviluppo dei
componenti in isolamento;
Sfruttiamo gli addons (Controls, Viewport,
Background, Measure);
Unica o pi湛 storie per gestire varianti e
annidamenti;
Facile test al variare dei contenuti;
Design
System
SDC Storybook Drupal
30. 30
Qualsiasi entit pu嘆 essere la struttura dati di un SDC,
basta rispettare le propriet.
Design
System
SDC Storybook Drupal
31. 31
Vantaggi
Parallelizzare / anticipare / validare
Frontend e theming pu嘆 essere
parallelizzato e/o asincrono;
Storybook pu嘆 essere uno step di
validazione;
Portabilit / scalabilit
Gli elementi del Design System
diventano oggetti;
Un tema di Drupal pu嘆 diventare un
base theme estendibile;
Modi鍖che e nuovi componenti
disponibili ovunque;
Frontend indipendente dal CMS
Il frontend 竪 sviluppato in modo
autonomo, senza dipendenze dalle
entit di Drupal;
Diversi tipi di entit possono essere
rappresentate dallo stesso SDC;
32. 32
Partito come sperimentale, diversi cambiamenti;
Poca documentazione;
Integrazione con Storybook non sempre
performante;
Non 竪 stato sempre facile
35. In fase di sviluppo di logica potrebbe
essere necessario rigenerare
componenti (es. Ajax callback)
Aggiungere HTML
direttamente nel codice;
Duplicazione codice, prono
errori;
Dif鍖cile manutenzione!
35
Backend
// Dati per l'avviso
$type = 'warning';
$title = 'Attenzione!';
$message = 'Questo 竪 un messaggio di avviso importante.';
// Genera il markup HTML
$output = '<div class="alert alert-' .
htmlspecialchars($type) . '">';
$output .= '<strong>' . htmlspecialchars($title) .
'</strong> ' . htmlspecialchars($message);
$output .= '</div>';
// Stampa l'avviso
print $output;
36. 36
SDC permette di richiamare
un componente in un render
array;
Non serve scrivere markup;
Facilmente riutilizzabile e
mantenibile;
Documentazione:
https://www.drupal.org/docs/develop/theming-drupal/
using-single-directory-components/using-your-new-
single-directory-component#s-using-your-compone
nt-through-a-render-array
SDC API
$render_array = [
'#type' => 'component',
'#component' => 'sdc_demo:alert',
'#props' => [
'type' = 'warning';
'title' = 'Attenzione!';
'message' = 'Questo 竪 un messaggio di avviso
importante.';
],
];
BACKEND APPROVED!
37. 37
La famiglia
cresce
SDC Display - Permette ai Site Builders di utilizzare i
componenti dal Display delle entit;
SDC Block - Permette di inserire un componente
tramite i blocchi (core block layout, layout builder)
SDC Styleguide - Fornisce un'interfaccia rapida per
testare i componenti single-directory senza creare
contenuti sul sito.
Modules that extend Single-Directory Components
40. 40
Docs:
Using Single-Directory Components
Articoli:
SDC in Drupal core
Component-Based Design Using Single Directory Components (SDC) in
Drupal
Modules that extend Single-Directory Components
Your Drupal Site Needs a Storybook Design System
The New Storybook Module for Drupal
Links utili
41. 41
Chapter 1 - Setting Up a Local Environment
Chapter 3 - How Drupal Renders an HTML Page
Chapter 4 - Mapping the Design to Drupal Components
Chapter 11 - Single Directory Components
Chapter 15 - Building a Decoupled Frontend
Learn more
Una lettura interessante
42. Siamo una tech company di engineers,
developers e designers, capace di
accompagnare passo passo i clienti
nellera CLOUD NATIVE,
con un approccio agile e pragmatico.
Ci impegniamo per lOPEN SOURCE
e ne abbracciamo la 鍖loso鍖a nelle nostre
pratiche interne.
TECNOLOGIA,
STRATEGIA E METODO
42