kanban / webapp /src /components /content /contentElement.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.
import {useCallback} from 'react'
import {ContentBlock} from '../../blocks/contentBlock'
import {Utils} from '../../utils'
import {useCardDetailContext} from '../cardDetail/cardDetailContext'
import {contentRegistry} from './contentRegistry'
// Need to require here to prevent webpack from tree-shaking these away
// TODO: Update webpack to avoid this
import './textElement'
import './imageElement'
import './dividerElement'
import './checkboxElement'
type Props = {
block: ContentBlock
readonly: boolean
cords: {x: number, y?: number, z?: number}
}
export default function ContentElement(props: Props): JSX.Element|null {
const {block, readonly, cords} = props
const cardDetail = useCardDetailContext()
const handler = contentRegistry.getHandler(block.type)
if (!handler) {
Utils.logError(`ContentElement, unknown content type: ${block.type}`)
return null
}
const addElement = useCallback(() => {
const index = cords.x + 1
cardDetail.addBlock(handler, index, true)
}, [cardDetail, cords, handler])
const deleteElement = useCallback(() => {
const index = cords.x
cardDetail.deleteBlock(block, index)
}, [block, cords, cardDetail])
return handler.createComponent(block, readonly, addElement, deleteElement)
}