import { CustomColumnsPanelStateBase } from '../../state/CustomColumnsPanelStateBase'; import { FiltersMap } from '@wix/bex-core'; import { observer } from 'mobx-react-lite'; import React, { useCallback, useEffect } from 'react'; import { Column } from '../../model'; import { Box } from '@wix/design-system'; import { addEventListener } from '@wix/bex-core/util'; import { ColumnListTableListItem } from './ColumnListTableListItem'; export interface ColumnsListProps { state: CustomColumnsPanelStateBase; } function _ColumnsList(props: ColumnsListProps) { const { state } = props; const { columnsCollection, dragAndDrop } = state; const hasSearchValue = state.searchValue.trim().length > 0; useEffect(() => { if (dragAndDrop == null) { return; } const { sidePanelTransition } = state; const disposers = [ ...(sidePanelTransition ? [ addEventListener(sidePanelTransition.events, 'entered', () => { dragAndDrop.listRect._syncThrottled(); }), ] : []), dragAndDrop.listRect.init(), ]; return () => { disposers.forEach((d) => d?.()); }; }, []); const renderItem = useCallback( (column: Column, index: number, { length }: { length: number }) => { const itemContent = ( ); if (dragAndDrop && !hasSearchValue) { const { DraggableListItem } = dragAndDrop.components; return ( {itemContent} ); } return itemContent; }, [hasSearchValue], ); let child = ( {columnsCollection.result.items.map(renderItem)} ); if (dragAndDrop && !hasSearchValue) { const { ListDragAndDropContext, DraggableListItemOverlay } = dragAndDrop.components; child = ( { state.customizeColumnsInSidePanelBi({ actionName: 'reorder' }); state.dragAndDrop?._onCustomColumnsReorder( from.item.id, over.item.id, ); }} > <> {child} { const item = columnsCollection.result.items[index]; return item ? renderItem(item, index, { length: 0 }) : null; }} /> ); } return child; } export const ColumnsList = observer(_ColumnsList);