import { Meta } from '@storybook/react'; import { useState } from 'react'; import * as React from 'react'; import { longTree, shortTree } from 'demodata'; import { action } from '@storybook/addon-actions'; import { Tree } from '../tree/Tree'; import { StaticTreeDataProvider } from '../uncontrolledEnvironment/StaticTreeDataProvider'; import { UncontrolledTreeEnvironment } from '../uncontrolledEnvironment/UncontrolledTreeEnvironment'; import { buildTestTree } from '../../test/helpers'; import { TreeItemIndex } from '../types'; import { createDefaultRenderers } from '../renderers'; export default { title: 'Core/Basic Examples', } as Meta; export const SingleTree = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const DarkMode = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} >
); export const PredefinedViewState = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: ['Fruit'], focusedItem: 'Apple', selectedItems: ['Apple', 'Lemon', 'Berries'], }, }} > ); export const Actions = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} onStartRenamingItem={action('onStartRenamingItem')} onRenameItem={action('onRenameItem')} onAbortRenamingItem={action('onAbortRenamingItem')} onCollapseItem={action('onCollapseItem')} onExpandItem={action('onExpandItem')} onSelectItems={action('onSelectItems')} onFocusItem={action('onFocusItem')} onDrop={action('onDrop')} onPrimaryAction={action('onPrimaryAction')} onRegisterTree={action('onRegisterTree')} onUnregisterTree={action('onUnregisterTree')} onMissingItems={action('onMissingItems')} onMissingChildren={action('onMissingChildren')} > <>

In this example, action hooks trigger Storybook actions in the "Actions" tab below.

); export const SingleTreeAllCollapsed = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': {}, }} > ); export const SmallTree = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(shortTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': {}, }} > ); export const MultipleTrees = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': {}, }} >
); export const MultipleTrees2 = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: ['Meals', 'Europe'], selectedItems: ['Risotto', 'Pizza', 'Weisswurst', 'Spargel'], focusedItem: 'Spargel', }, 'tree-2': { expandedItems: ['Fruit', 'Berries'], selectedItems: ['Orange'], focusedItem: 'Orange', }, }} >
); export const DropOnEmptyTree = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider( { ...longTree.items, empty: { data: 'Empty Folder', index: 'empty', isFolder: true, }, }, (item, data) => ({ ...item, data, }) ) } getItemTitle={item => item.data} viewState={{ 'tree-1': {}, }} renderTreeContainer={({ children, containerProps, info }) => (
{children}
)} >
); export const SwitchMountedTree = () => { const [showFirstTree, setShowFirstTree] = useState(false); return ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{}} > {showFirstTree ? ( ) : ( )} ); }; export const TreeItemContextRenaming = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{}} renderItem={({ item, depth, children, title, context, arrow }) => { const InteractiveComponent = context.isRenaming ? 'div' : 'button'; const type = context.isRenaming ? undefined : 'button'; return (
  • {arrow} {title}
    {children}
  • ); }} > ); export const UnitTestTree = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(buildTestTree(), (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{}} > ); export const UnitTestTreeOpen = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(buildTestTree(), (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: Object.keys(buildTestTree()), }, }} > ); export const ReparentTestTree = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(buildTestTree(), (item, data) => ({ ...item, data, })) } getItemTitle={item => `${item.data}`} viewState={{ 'tree-1': { expandedItems: ['a', 'ad'] } }} > ); export const DisableMultiselect = () => ( canDragAndDrop canDropOnFolder canReorderItems disableMultiselect dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const NavigateAway = () => { const [navigatedAway, setNavigatedAway] = useState(false); if (navigatedAway) return
    Navigated away!
    ; return ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} onSelectItems={() => { setNavigatedAway(true); }} viewState={{ 'tree-1': { expandedItems: [], }, }} > ); }; export const AnimatedExpandingAndCollapsing = () => { const [openingItem, setOpeningItem] = useState(); const [closingItem, setClosingItem] = useState(); return ( dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} shouldRenderChildren={(item, context) => context.isExpanded || closingItem === item.index || openingItem === item.index } onExpandItem={item => { setOpeningItem(item.index); setTimeout(() => { setOpeningItem(undefined); }); }} onCollapseItem={item => { setClosingItem(item.index); setTimeout(() => { setClosingItem(undefined); }, 500); }} viewState={{ 'tree-1': {}, }} renderItemsContainer={({ children, containerProps, parentId }) => (
      {children}
    )} > ); }; export const RightToLeftRenderers = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} {...createDefaultRenderers(10, true)} > ); export const ItemContainersWithMargin = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const HotkeysDisabled = () => ( canDragAndDrop canDropOnFolder canReorderItems keyboardBindings={{ primaryAction: [], moveFocusToFirstItem: [], moveFocusToLastItem: [], expandSiblings: [], renameItem: [], abortRenameItem: [], toggleSelectItem: [], abortSearch: [], startSearch: [], selectAll: [], startProgrammaticDnd: [], abortProgrammaticDnd: [], completeProgrammaticDnd: [], }} dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > );