Vue d'arborescence
Utilisation
Disponible bientôt.
Code
<TreeView>
<TreeNode
id="1"
label="Fruit">
<TreeNode
id="2"
label="Banana"
/>
<TreeNode
id="3"
label="Apple"
/>
</TreeNode>
<TreeNode
id="4"
label="Vegetables (coming soon!)"
/>
</TreeView>
Instruction d'importation
import { TreeView, TreeNode, TreeNodeHeader } from '@jutro/components';
Cahier des charges du composant
Assurez-vous de comprendre la surface de l'API des composants du système de conception, ainsi que les implications et les compromis. Pour en savoir plus, reportez-vous à notre introduction à l'API des composants.
Propriétés
Propriétés de la vue d’arborescence
children- Type
React.ReactNode[]DescriptionReact nodes to be rendered in a tree view. This is usually tree node components wrapped by the tree view component. Either
nodesorchildrenis required. nodes- Type
TreeNodeData[]DescriptionReact nodes to be rendered in a tree view. This is usually an array of objects with the same properties as tree node components. Either
nodesorchildrenis required. className- Type
stringDescriptionCSS class name for this component.
defaultEndIcon- Type
string | IconDescriptionDefault icon to be rendered on the last node of the tree. The value is an Icon component or an icon name. For example,
CheckIconor'gw-check'. defaultExpandIcon- Type
string | IconDescriptionDefault icon to be rendered when a tree node can be expanded. The value is an Icon component or an icon name. For example,
CheckIconor'gw-check'. defaultIcon- Type
string | IconDescriptionDefault icon component. The value is an Icon component or an icon name. For example,
CheckIconor'gw-check'. defaultParentIcon- Type
string | IconDescriptionDefault icon to be rendered when node is a parent. The value is an Icon component or an icon name. For example,
CheckIconor'gw-check'. defaultRenderChildren- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean }>DescriptionDefault children render function.
defaultRenderHeader- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean }>DescriptionDefault header render function or component.
filterCallback- Type
(value: string, query: string) => Array<{ start: number, end: number }> | undefined;DescriptionCustom comparison function, which takes translated label value as first argument and filtering query as second. It must return null if value is not matched to query, otherwise it returns an array of matching parts indices.
filterProps- Type
objectDescriptionProperties passed to filter input.
hideCollapseAll- Type
booleanDescriptionIf set to
true, the 'Collapse/Expand all' button will be hidden. onClick- Type
function (React.MouseEvent<HTMLElement>)DescriptionOn click event handler.
renderCollapseAll- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean; }>DescriptionFunction or component used to render a custom 'Collapse/Expand all' button.
renderFilter- Type
(onChange: TreeViewFilterProps['onChange']) => ReactNodeDescriptionCustom function for rendering the filter component.
renderNodes- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean }>DescriptionThe nodes render function. This is only used when using nodes config.
showFilter- Type
booleanDescriptionIf set to
true, a filter input will be visible. defaultRenderExpandIconobsolète- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean }>DescriptionDefault expand icon render function or component. Deprecated: since 10.9.0, please use
defaultExpandIconprop instead. defaultRenderIconobsolète- Type
JSXElementConstructor<{ nodeId: string, expanded: boolean, isEndNode: boolean }>DescriptionDefault icon render function or component. Deprecated: since 10.9.0, please use
defaultIconprop instead.
Propriétés des nœuds d’arborescence
idobligatoire- Type
stringDescriptionUnique identifier for the component.
labelobligatoire- TypeDescription
Text label for the node.
className- Type
stringDescriptionCSS class name for this component.
disabled- Type
booleanDescriptionIf set to
true, the node is disabled. expandIcon- Type
JSXElementConstructor<{ 'data-nodeid': string, expanded: boolean, isEndNode: boolean }>DescriptionRender function for the expand icon header render function or component.
hideIcon- Type
booleanDescriptionIf set to
true, the icon will be hidden. icon- Type
string | IconDescriptionAn Icon component to render on the component. The value must be an
Iconcomponent or the icon's name. For example,CheckIconor'gw-check'. nodeHeaderClassName- Type
stringDescriptionCSS class name for the node header.
onClick- Type
(args: { id: string, hasNodes: boolean, expanded?: boolean | undefined }) => voidDescriptionThe tree node's handler for click events.
renderChildren- Type
JSXElementConstructor<{ nodeId: string, children: ReactNode, expanded: boolean }>DescriptionThe tree node's render function or component. Used only when using nodes config.
renderHeader- Description
The tree node's header render function or component. .
renderExpandIconobsolète- Type
JSXElementConstructor<{ icon?: string | Icon, nodeId: string }>;DescriptionThe node's expand icon render function or component. Deprecated since 10.9.0, please use the
iconprop instead. renderIconobsolète- Type
JSXElementConstructor<{ icon?: string | Icon, nodeId: string }>;DescriptionThe node's header icon render function or component. Will be passed to the
renderHeaderproperty. Deprecated since 10.9.0, please use theiconprop instead.
Propriétés des en-têtes de nœud d’arborescence
idobligatoire- Type
stringDescriptionUnique identifier for the component.
labelobligatoire- Type
stringDescriptionThe header's translated label.
nodeIdobligatoire- Type
stringDescriptionThe ID for the current node.
hideIcon- Type
booleanDescriptionIf set to
true, the icon will be hidden. icon- Type
string | IconDescriptionAn Icon component to render on the component. The value must be an
Iconcomponent or the icon's name. For example,CheckIconor'gw-check'. labelMatches- Type
Array<{ start: number, end: number }>DescriptionArray of indices to highlight.
renderIconobsolète- Type
JSXElementConstructor<{ icon?: string | Icon, nodeId: string }>;DescriptionThe node's header icon render function or component. Will be passed to the
renderHeaderproperty. Deprecated since 10.9.0, please use theiconprop instead.
Crochets
Aucun crochet n'est disponible pour tree view.
Clés de traduction
Six clés de traduction sont associées au composant d’arborescence :
| Clé | Utilis ée pour |
|---|---|
| jutro-components.TreeView.filterLabel | Valeur aria-label pour le filtre de vue d’arborescence. |
| jutro-components.TreeView.filterPlaceholder | Texte d’espace réservé pour le filtre de vue d’arborescence. |
| jutro-components.TreeView.collapseAll | Étiquette de texte pour le bouton Réduire tout. |
| jutro-components.TreeView.expandAll | Étiquette de texte pour le bouton Développer tout. |
| jutro-components.TreeView.noMatchesFound | Texte affiché lorsque le filtre ne trouve aucune correspondance. |
| jutro-components.TreeView.clearFilter | Valeur aria-label pour le bouton Effacer le filtre. |
Portes de sortie
Pour en savoir plus, reportez-vous à notre documentation sur les portes de sortie.
Exemples
Consultez la section Utilisation pour découvrir comment concevoir correctement une arborescence et connaître les différentes options de configuration que nous proposons.
Exemple d’arborescence de base
Une arborescence de base est un composant TreeView qui englobe un ou plusieurs composants TreeNode. Chaque nœud de l’arborescence peut également contenir ses propres composants TreeNode imbriqués.
<TreeView>
<TreeNode
id="1"
label="Fruit">
<TreeNode
id="2"
label="Banana"
/>
<TreeNode
id="3"
label="Apple"
/>
</TreeNode>
<TreeNode
id="4"
label="Vegetables (coming soon!)"
/>
</TreeView>
Exemple de propriété de nœud
Vous pouvez utiliser la propriété nodes pour transmettre les nœuds de l’arborescence sous la forme d'une série d’objets. Consultez la table des propriétés de nœud d’arborescence pour en savoir plus sur les valeurs qui peuvent être transmises à cette propriété.
const foods = [
{
id: 'fruit',
label: { id: 'foods.Fruit', defaultMessage: 'Fruit' },
nodes: [
{
id: 'banana',
label: { id: 'foods.Banana', defaultMessage: 'Banana' },
},
{
id: 'apple',
label: { id: 'foods.Apple', defaultMessage: 'Apple' },
},
],
},
{
id: 'vegetables',
label: {
id: 'foods.Vegetables',
defaultMessage: 'Vegetables (coming soon!)',
},
},
];
<TreeView nodes={foods} />;
Exemple de nœuds de rendu
Si vous souhaitez remplacer quelque chose dans vos nœuds lors de l'utilisation des propriétés nodes, vous pouvez le faire avec la propriété renderNodes.
L'objet props de renderNodes contient les éléments suivants :
nodeId: l'idattribué au nœud de l'arborescencenodes: l'objet de nœud transmis au nœud de l'arborescence
L'objet nodes contient des nœuds d'arborescence imbriqués. Vous devez donc effectuer une itération récursive pour afficher l'arborescence entière.
Par exemple, si vous souhaitez appliquer des styles à chaque nœud, vous pouvez créer un composant personnalisé qui prend la liste des nœuds et les affiche en tant que nœuds d'arborescence de manière récursive lors de l'application du style à chacun d'eux.
const foods = [ ... ]
const TomatoNodes = ({ nodes }) => {
return (
<>
{nodes.map(({ id, label, nodes: childNodes }) => (
<TreeNode
id={id}
label={label}
style={{
backgroundColor: 'tomato',
color: 'blue',
border: '1px solid yellow',
}}>
{childNodes && <TomatoNodes nodes={childNodes} />}
</TreeNode>
))}
</>
);
};
<TreeView
nodes={foods}
renderNodes={TomatoNodes}
/>
Exemple de filtre
Si vous souhaitez inclure un champ de filtre dans votre vue d'arborescence, ajoutez la propriété showFilter. Le champ utilise une fonction de filtrage par défaut que vous pouvez remplacer à l'aide de la propriété filterCallback.
La fonction filterCallback utilise deux arguments :
- l'étiquette traduite de l'élément de l'arborescence
- la requête de filtrage saisie par l'utilisateur dans le champ de filtre
La fonction doit renvoyer une série d'indices qui affichent des plages où l'étiquette correspond à la requête, par exemple [{ start: 2, end: 4 }, { start: 7, end: 9 }].
Si la requête ne correspond pas, la fonction doit renvoyer null.
L'exemple ci-dessous ne correspond aux éléments que si l'étiquette commence par la requête (sensible à la casse).
const foods = [ ... ]
const filterFunction (value, query) => {
if (value.startsWith(query)) {
return [{ start: 0, end: query.length }];
}
return null;
}
<TreeView
showFilter
nodes={foods}
filterCallback={filterFunction}
/>
Exemple de filtre avec propriétés
Le champ de filtre correspond à un champ de saisie de texte Jutro standard. Vous pouvez transmettre des propriétés supplémentaires à l’aide de la propriété filterProps.
const foods = [ ... ]
const filterFunction (value, query) => { ... }
<TreeView
showFilter
filterCallback={filterFunction}
filterProps={{
placeholder: 'Item starts with...',
}}
/>
Journal des modifications
10.9.0
-
Une nouvelle fonctionnalité d'opt-in a été introduite pour désactiver la publication automatique des événements pour le composant TreeView. Vous pouvez activer cette fonctionnalité en ajoutant
JUTRO_DISABLE_AUTO_EVENTS_PUBLISHING=trueau fichier.envdans la racine de votre application Jutro. Lorsque cette option est activée, les composants hérités ne publient plus d'événements par défaut. Pour en savoir plus sur les événements et sur la façon d'en créer de nouveaux, reportez-vous à la documentation relative aux événements.
Types de propriétés d'icône étendus
Les types des propriétés 'defaultParentIcon' et 'defaultEndIcon' pour TreeView et la propriété icon pour TreeNode ont été étendus à string | React.ComponentType.
Obsolescences
La transmission de string en tant que valeur aux propriétés 'defaultParentIcon' et 'defaultEndIcon' pour TreeView et la propriété icon pour TreeNode sont désormais obsolètes.