From 13c8ee29f7a3c13863fd028d9e1919704db55ea4 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Wed, 4 Oct 2023 17:29:18 +0200 Subject: [PATCH] Refactor draggable list (#1874) --- .../__stories__/DraggableItem.stories.tsx | 36 +++++------- .../__stories__/DraggableList.stories.tsx | 57 +++++++++++++++++++ .../components/DraggableItem.tsx | 4 +- .../{DroppableList.tsx => DraggableList.tsx} | 11 ++-- .../components/MenuItemDraggable.tsx | 4 -- .../__stories__/MenuItemDraggable.stories.tsx | 1 - .../ViewFieldsVisibilityDropdownSection.tsx | 5 +- 7 files changed, 78 insertions(+), 40 deletions(-) create mode 100644 front/src/modules/ui/draggable-list/__stories__/DraggableList.stories.tsx rename front/src/modules/ui/draggable-list/components/{DroppableList.tsx => DraggableList.tsx} (79%) diff --git a/front/src/modules/ui/draggable-list/__stories__/DraggableItem.stories.tsx b/front/src/modules/ui/draggable-list/__stories__/DraggableItem.stories.tsx index e5e40606b..4667a628e 100644 --- a/front/src/modules/ui/draggable-list/__stories__/DraggableItem.stories.tsx +++ b/front/src/modules/ui/draggable-list/__stories__/DraggableItem.stories.tsx @@ -1,3 +1,4 @@ +import { DragDropContext, Droppable } from '@hello-pangea/dnd'; import { Meta, StoryObj } from '@storybook/react'; import { IconBell } from '@/ui/icon'; @@ -5,43 +6,32 @@ import { MenuItemDraggable } from '@/ui/menu-item/components/MenuItemDraggable'; import { ComponentDecorator } from '~/testing/decorators/ComponentDecorator'; import { DraggableItem } from '../components/DraggableItem'; -import { DroppableList } from '../components/DroppableList'; const meta: Meta = { - title: 'ui/draggable-list/DraggableItem', + title: 'UI/DraggableList/DraggableItem', component: DraggableItem, decorators: [ - (Story, { parameters }) => ( - } - /> + (Story) => ( + jest.fn()}> + + {(_provided) => } + + ), ComponentDecorator, ], parameters: { - droppableId: 'droppable', - onDragEnd: () => console.log('dragged'), + container: { width: 100 }, + }, + argTypes: { + itemComponent: { control: { disable: true } }, }, args: { draggableId: 'draggable-1', - key: 'key-1', index: 0, isDragDisabled: false, itemComponent: ( - <> - - - + ), }, }; diff --git a/front/src/modules/ui/draggable-list/__stories__/DraggableList.stories.tsx b/front/src/modules/ui/draggable-list/__stories__/DraggableList.stories.tsx new file mode 100644 index 000000000..0c259eba5 --- /dev/null +++ b/front/src/modules/ui/draggable-list/__stories__/DraggableList.stories.tsx @@ -0,0 +1,57 @@ +import { Meta, StoryObj } from '@storybook/react'; + +import { IconBell } from '@/ui/icon'; +import { MenuItemDraggable } from '@/ui/menu-item/components/MenuItemDraggable'; +import { ComponentDecorator } from '~/testing/decorators/ComponentDecorator'; + +import { DraggableItem } from '../components/DraggableItem'; +import { DraggableList } from '../components/DraggableList'; + +const meta: Meta = { + title: 'UI/DraggableList/DraggableList', + component: DraggableList, + decorators: [ComponentDecorator], + parameters: { + onDragEnd: () => console.log('dragged'), + }, + argTypes: { + draggableItems: { control: false }, + }, + args: { + draggableItems: ( + <> + + } + /> + + } + /> + + } + /> + + ), + }, +}; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/front/src/modules/ui/draggable-list/components/DraggableItem.tsx b/front/src/modules/ui/draggable-list/components/DraggableItem.tsx index fc62277f0..664872e4f 100644 --- a/front/src/modules/ui/draggable-list/components/DraggableItem.tsx +++ b/front/src/modules/ui/draggable-list/components/DraggableItem.tsx @@ -3,7 +3,6 @@ import { useTheme } from '@emotion/react'; import { Draggable } from '@hello-pangea/dnd'; type DraggableItemProps = { - key: string; draggableId: string; isDragDisabled?: boolean; index: number; @@ -11,7 +10,6 @@ type DraggableItemProps = { }; export const DraggableItem = ({ - key, draggableId, isDragDisabled = false, index, @@ -20,7 +18,7 @@ export const DraggableItem = ({ const theme = useTheme(); return ( { +}: DraggableListProps) => { return ( - + {(provided) => (
{draggableItems} diff --git a/front/src/modules/ui/menu-item/components/MenuItemDraggable.tsx b/front/src/modules/ui/menu-item/components/MenuItemDraggable.tsx index 30c0ab30d..ee62dc301 100644 --- a/front/src/modules/ui/menu-item/components/MenuItemDraggable.tsx +++ b/front/src/modules/ui/menu-item/components/MenuItemDraggable.tsx @@ -8,7 +8,6 @@ import { MenuItemAccent } from '../types/MenuItemAccent'; import { MenuItemIconButton } from './MenuItem'; export type MenuItemDraggableProps = { - key: string; LeftIcon: IconComponent | undefined; accent?: MenuItemAccent; iconButtons?: MenuItemIconButton[]; @@ -18,7 +17,6 @@ export type MenuItemDraggableProps = { className?: string; }; export const MenuItemDraggable = ({ - key, LeftIcon, accent = 'default', iconButtons, @@ -31,7 +29,6 @@ export const MenuItemDraggable = ({ return (
diff --git a/front/src/modules/ui/menu-item/components/__stories__/MenuItemDraggable.stories.tsx b/front/src/modules/ui/menu-item/components/__stories__/MenuItemDraggable.stories.tsx index 17f987b0b..fd22bb299 100644 --- a/front/src/modules/ui/menu-item/components/__stories__/MenuItemDraggable.stories.tsx +++ b/front/src/modules/ui/menu-item/components/__stories__/MenuItemDraggable.stories.tsx @@ -22,7 +22,6 @@ type Story = StoryObj; export const Default: Story = { args: { - key: 'key-1', LeftIcon: IconBell, accent: 'default', iconButtons: [{ Icon: IconMinus, onClick: () => console.log('Clicked') }], diff --git a/front/src/modules/ui/view-bar/components/ViewFieldsVisibilityDropdownSection.tsx b/front/src/modules/ui/view-bar/components/ViewFieldsVisibilityDropdownSection.tsx index 2a492f30f..649d06efa 100644 --- a/front/src/modules/ui/view-bar/components/ViewFieldsVisibilityDropdownSection.tsx +++ b/front/src/modules/ui/view-bar/components/ViewFieldsVisibilityDropdownSection.tsx @@ -5,7 +5,7 @@ import { } from '@hello-pangea/dnd'; import { DraggableItem } from '@/ui/draggable-list/components/DraggableItem'; -import { DroppableList } from '@/ui/draggable-list/components/DroppableList'; +import { DraggableList } from '@/ui/draggable-list/components/DraggableList'; import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer'; import { StyledDropdownMenuSubheader } from '@/ui/dropdown/components/StyledDropdownMenuSubheader'; import { IconMinus, IconPlus } from '@/ui/icon'; @@ -49,8 +49,7 @@ export const ViewFieldsVisibilityDropdownSection = ({ {title} {isDraggable && ( -