// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. /* eslint-disable max-lines */ import React from 'react' import {useDrop} from 'react-dnd' import {Board, IPropertyOption, IPropertyTemplate, BoardGroup} from '../../blocks/board' import {BoardView} from '../../blocks/boardView' import {Card} from '../../blocks/card' import TableGroupHeaderRow from './tableGroupHeaderRow' import TableRows from './tableRows' type Props = { board: Board activeView: BoardView groupByProperty?: IPropertyTemplate group: BoardGroup readonly: boolean selectedCardIds: string[] cardIdToFocusOnRender: string hideGroup: (groupByOptionId: string) => void addCard: (groupByOptionId?: string) => Promise showCard: (cardId?: string) => void propertyNameChanged: (option: IPropertyOption, text: string) => Promise onCardClicked: (e: React.MouseEvent, card: Card) => void onDropToGroupHeader: (srcOption: IPropertyOption, dstOption?: IPropertyOption) => void onDropToCard: (srcCard: Card, dstCard: Card) => void onDropToGroup: (srcCard: Card, groupID: string, dstCardID: string) => void } const TableGroup = (props: Props): JSX.Element => { const {board, activeView, group, onDropToGroup, groupByProperty} = props const groupId = group.option.id const [{isOver}, drop] = useDrop(() => ({ accept: 'card', collect: (monitor) => ({ isOver: monitor.isOver(), }), drop: (item: Card, monitor) => { if (monitor.isOver({shallow: true})) { onDropToGroup(item, groupId, '') } }, }), [onDropToGroup, groupId]) let className = 'octo-table-group' if (isOver) { className += ' dragover' } return (
{(group.cards.length > 0) && }
) } export default React.memo(TableGroup)