Spaces:
Sleeping
Sleeping
| // 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) | |
| } | |