import { Meta } from '@storybook/react'; import React from 'react'; import { longTree } from 'demodata'; import { UncontrolledTreeEnvironment } from '../uncontrolledEnvironment/UncontrolledTreeEnvironment'; import { StaticTreeDataProvider } from '../uncontrolledEnvironment/StaticTreeDataProvider'; import { Tree } from '../tree/Tree'; export default { title: 'Core/Drag-and-Drop Configurability', } as Meta; export const Default = () => ( canDragAndDrop canDropOnFolder canReorderItems dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: ['Fruit'], }, }} > ); export const NoDragAndDrop = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const NoDropOnItemsAllowed = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canReorderItems getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const OnlyDropOnItemsWithChildren = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canDropOnFolder getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const OnlyDropOnItemsWithoutChildren = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canDropOnNonFolder getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const NoReorderingAllowed = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canDropOnFolder getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const AllowDraggingOnlyItemsStartingWithA = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canDropOnFolder canReorderItems canDrag={items => items .map(item => (item.data as string).startsWith('A')) .reduce((a, b) => a && b, true) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const AllowDroppingOnlyOnItemsStartingWithA = () => ( dataProvider={new StaticTreeDataProvider(longTree.items)} canDragAndDrop canDropOnFolder canReorderItems canDropAt={(items, target) => target.targetType === 'between-items' ? (target.parentItem as string).startsWith('A') : (target.targetItem as string).startsWith('A') } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: [ 'Fruit', 'Meals', 'America', 'Europe', 'Asia', 'Desserts', ], }, }} > ); export const CanDropBelowOpenFolders = () => ( canDragAndDrop canDropOnFolder canReorderItems canDropBelowOpenFolders dataProvider={ new StaticTreeDataProvider(longTree.items, (item, data) => ({ ...item, data, })) } getItemTitle={item => item.data} viewState={{ 'tree-1': { expandedItems: ['Fruit'], }, }} >

In this sample, canDropBelowOpenFolders is enabled. Try dropping Orange on the bottom part of the Fruit folder. It will be dropped in the parent folder, below the open Fruit folder. If you disable this option, it dropping there will drop at the top of the contents of the Fruit folder.

);