diff --git a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/PropertiesTabElements.jsx b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/PropertiesTabElements.jsx index 2e975109d2..0568b85ccd 100644 --- a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/PropertiesTabElements.jsx +++ b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/PropertiesTabElements.jsx @@ -53,6 +53,7 @@ export const PropertiesTabElements = ({ { label: 'Image', value: 'image' }, { label: 'Link', value: 'link' }, { label: 'JSON', value: 'json' }, + { label: 'Markdown', value: 'markdown' }, // Following column types are deprecated { label: 'Default', value: 'default' }, { label: 'Dropdown', value: 'dropdown' }, diff --git a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/StylesTabElements.jsx b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/StylesTabElements.jsx index 5091e56c6c..2b91a8dd15 100644 --- a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/StylesTabElements.jsx +++ b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/StylesTabElements.jsx @@ -128,6 +128,7 @@ export const StylesTabElements = ({ undefined, 'number', 'json', + 'markdown', 'boolean', 'select', 'text', diff --git a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/Table.jsx b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/Table.jsx index 3aca83b046..bb6c1d94bb 100644 --- a/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/Table.jsx +++ b/frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/Table.jsx @@ -631,6 +631,8 @@ class TableComponent extends React.Component { return 'Multiselect'; case 'json': return 'JSON'; + case 'markdown': + return 'Markdown'; default: capitalize(text ?? ''); } diff --git a/frontend/src/AppBuilder/Widgets/Table/Markdown.jsx b/frontend/src/AppBuilder/Widgets/Table/Markdown.jsx new file mode 100644 index 0000000000..abd121182a --- /dev/null +++ b/frontend/src/AppBuilder/Widgets/Table/Markdown.jsx @@ -0,0 +1,166 @@ +import React, { useState, useEffect } from 'react'; +import OverlayTrigger from 'react-bootstrap/OverlayTrigger'; +import { determineJustifyContentValue } from '@/_helpers/utils'; +import { default as ReactMarkdown } from 'react-markdown'; +import DOMPurify from 'dompurify'; + +const Markdown = ({ + isEditable, + darkMode, + handleCellValueChange, + cellTextColor, + cellValue, + column, + containerWidth, + cell, + horizontalAlignment, + isMaxRowHeightAuto, + cellSize, + maxRowHeightValue, +}) => { + const ref = React.useRef(null); + + const [hovered, setHovered] = useState(false); + const [isEditing, setIsEditing] = useState(false); + + const cellStyles = { + color: cellTextColor ?? 'inherit', + }; + + const getCellValue = (value) => { + return DOMPurify.sanitize(value); + }; + + useEffect(() => { + if (!isEditable && isEditing) { + setIsEditing(false); + } + }, [isEditable]); + + const getOverlay = () => { + return ( +