import { observer } from 'mobx-react-lite'; import React, { forwardRef, HTMLAttributes, MutableRefObject, useEffect, useState, } from 'react'; import { classes, st } from './NestedTableRow.st.css.js'; import { FiltersMap } from '@wix/bex-core'; import { Table } from '@wix/design-system'; import type { NestedTableDragAndDrop } from '../NestedTableDragAndDrop/NestedTableDragAndDrop'; import { NestedTableDataItem } from '../../state/NestedTableState/NestedTableNodeState'; export interface NestedTableRowProps extends HTMLAttributes { item: NestedTableDataItem; dragAndDrop?: typeof NestedTableDragAndDrop; } const _NestedTableRow = forwardRef( ( props: NestedTableRowProps & { rowData: unknown }, ref: | ((instance: HTMLTableRowElement | null) => void) | MutableRefObject | null, ) => { const { children, item, className, rowData, dragAndDrop, ...rest } = props; const [itemState] = useState(() => { return item.state.createNode({ parent: item.originalKeyedItem, }); }); useEffect(() => itemState?.init(), []); const { st: dataTableRowSt, classes: dataTableRowClasses } = Table.dataTableRowStyle; const expandable = itemState != null && !itemState._isNotExpandableWhenEmpty && !item.state._isExpandableActionDisabled(item.originalKeyedItem.item); const isRowHighlight = item.state.levelDescriptor.isRowHighlight?.( item.originalKeyedItem.item, ); const isSameEntityAsOtherLevels = itemState?.levelDescriptor.isSameEntityAsOtherLevels; let child = ( { itemState?._changeHover(true); }} onMouseLeave={() => { itemState?._changeHover(false); }} {...rest} onClick={(ev) => { rest?.onClick?.(ev); if (expandable) { itemState._toggleExpand(); itemState.bi.reportExpandCollapse(); } }} > {children} ); if (dragAndDrop) { const { NestedTableDragAndDropRow } = dragAndDrop; child = ( {child} ); } return child; }, ); export const NestedTableRow = observer(_NestedTableRow);