import styled from '@emotion/styled'; import { DragDropContext, Draggable, Droppable, DropResult, OnDragEndResponder, ResponderProvided, } from '@hello-pangea/dnd'; import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/StyledDropdownMenuItemsContainer'; import { StyledDropdownMenuSubheader } from '@/ui/dropdown/components/StyledDropdownMenuSubheader'; import type { ViewFieldDefinition, ViewFieldMetadata, } from '@/ui/editable-field/types/ViewField'; import { IconMinus, IconPlus } from '@/ui/icon'; import { MenuItem } from '@/ui/menu-item/components/MenuItem'; type OwnProps = { fields: Field[]; onVisibilityChange: (field: Field) => void; title: string; isDraggable: boolean; onDragEnd?: OnDragEndResponder; }; const StyledDropdownMenuItemWrapper = styled.div` width: 100%; `; export const ViewFieldsVisibilityDropdownSection = < Field extends ViewFieldDefinition, >({ fields, onVisibilityChange, title, isDraggable, onDragEnd, }: OwnProps) => { const handleOnDrag = (result: DropResult, provided: ResponderProvided) => { onDragEnd?.(result, provided); }; return ( <> {title} {isDraggable && ( {(provided) => (
{fields.map((field, index) => ( {(draggableProvided) => { const draggableStyle = draggableProvided.draggableProps.style; return (
onVisibilityChange(field), }, ]} text={field.name} />
); }}
))} {provided.placeholder}
)}
)} {!isDraggable && fields.map((field) => ( onVisibilityChange(field), }, ]} text={field.name} /> ))}
); };