kanban / webapp /src /components /table /tableGroup.tsx
Leon4gr45's picture
Upload folder using huggingface_hub
13555f3 verified
// 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<void>
showCard: (cardId?: string) => void
propertyNameChanged: (option: IPropertyOption, text: string) => Promise<void>
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 (
<div
ref={drop}
className={className}
key={group.option.id}
>
<TableGroupHeaderRow
group={group}
board={board}
activeView={activeView}
groupByProperty={groupByProperty}
hideGroup={props.hideGroup}
addCard={props.addCard}
readonly={props.readonly}
propertyNameChanged={props.propertyNameChanged}
onDrop={props.onDropToGroupHeader}
/>
{(group.cards.length > 0) &&
<TableRows
board={board}
activeView={activeView}
cards={group.cards}
selectedCardIds={props.selectedCardIds}
readonly={props.readonly}
cardIdToFocusOnRender={props.cardIdToFocusOnRender}
showCard={props.showCard}
addCard={props.addCard}
onCardClicked={props.onCardClicked}
onDrop={props.onDropToCard}
/>}
</div>
)
}
export default React.memo(TableGroup)