import React, { ReactElement, useEffect, useState } from 'react'; import { Fade, FadeProps } from '../Fade'; import { CollectionState, FiltersMap, KeyedItem } from '@wix/bex-core'; import { observer } from 'mobx-react-lite'; import { CollectionListItemProps, RowActionsColumnSlot, RowColumnSlotProps, } from '../CollectionListItem'; import { CollectionItemActions } from '../CollectionItemActions'; import { Box } from '@wix/design-system'; import { ItemActionsState } from '../../state'; import { useToolbarCollectionContext } from '../ToolbarCollectionContext'; export interface CollectionListRowProps extends Partial { fade?: boolean; dataHook?: string; collection: CollectionState; keyedItem: KeyedItem; element: ReactElement; } export const CollectionListRow = observer(function CollectionListRow< T, F extends FiltersMap = FiltersMap, >({ fade, element, collection, keyedItem, dataHook, ...rest }: CollectionListRowProps) { const toolbarState = useToolbarCollectionContext(); const [state] = useState( () => new ItemActionsState({ collection, keyedItem, fade: 'idle', reportBi: toolbarState.reportBi, }), ); const { type: CollectionListItemComponent, props: collectionListItemProps } = element; useEffect(() => { if (state.keyedItem !== keyedItem) { state.keyedItem = keyedItem; } }, [keyedItem]); const transformColumn = (columnElement: ReactElement) => { const { props } = columnElement; const overrides = RowActionsColumnSlot.isElementOf(columnElement) ? { width: 100, align: 'right' as const, value: ( ), } : { value: ( {props.children} ), }; return { ...props, ...overrides, }; }; let child = ( ); if (fade) { child = ( { state.onFadeStart(); void rest.onExiting?.(node); }} onExited={(node) => { state.onFadeDone(); void rest.onExited?.(node); }} >
{child}
); } return child; });