nilfam-editor
Version:
A powerful, customizable rich-text editor built with TipTap, React, and Tailwind CSS. Supports RTL/LTR text, resizable media (images/videos), tables, code blocks, font styling, and more for an enhanced content creation experience.
81 lines (70 loc) • 3.65 kB
JSX
import {t} from "../Lang/i18n.js";
import {AddColumnAfter, AddRowAfterIcon, AlignTableCenterIcon, AlignTableLeftIcon, AlignTableRightIcon, TrashIcon} from "../../assets/icons/Icons.jsx";
const MenuTable = ({editor,isTableSelected,lang}) => {
const addRowAfter = () => {
editor.chain().focus().addRowAfter().run();
};
const addColumnAfter = () => {
editor.chain().focus().addColumnAfter().run();
};
const alignTableLeft = () => {
if (editor.isActive('table')) {
editor.chain().focus().updateAttributes('table', {
class: 'w-fit border-collapse table-auto border border-gray-300 rounded-lg overflow-hidden shadow-md mr-auto'
}).run();
console.log('Updated table classes:', editor.getAttributes('table').class);
const tableNode = editor.view.dom.querySelector('table');
console.log('DOM table classes:', tableNode ? tableNode.className : 'No table in DOM');
}
};
const alignTableCenter = () => {
if (editor.isActive('table')) {
editor.chain().focus().updateAttributes('table', {
class: 'w-fit border-collapse table-auto border border-gray-300 rounded-lg overflow-hidden shadow-md mx-auto'
}).run();
console.log('Updated table classes:', editor.getAttributes('table').class);
const tableNode = editor.view.dom.querySelector('table');
console.log('DOM table classes:', tableNode ? tableNode.className : 'No table in DOM');
}
};
const alignTableRight = () => {
if (editor.isActive('table')) {
editor.chain().focus().updateAttributes('table', {
class: 'w-fit border-collapse table-auto border border-gray-300 rounded-lg overflow-hidden shadow-md ml-auto'
}).run();
console.log('Updated table classes:', editor.getAttributes('table').class);
const tableNode = editor.view.dom.querySelector('table');
console.log('DOM table classes:', tableNode ? tableNode.className : 'No table in DOM');
}
};
const deleteTable = () => {
editor.chain().focus().deleteTable().run();
};
return (
<div className="flex flex-row ">
{isTableSelected && (
<div className="flex flex-row bg-red-100 rounded">
<button className="class-button" onClick={addRowAfter} title={t('addRowAfter', lang)}>
<AddRowAfterIcon/>
</button>
<button className="class-button" onClick={addColumnAfter} title={t('addColumnAfter', lang)}>
<AddColumnAfter/>
</button>
<button className="class-button" onClick={alignTableRight} title={t('alignTableRight', lang)}>
<AlignTableRightIcon/>
</button>
<button className="class-button" onClick={alignTableCenter} title={t('alignTableCenter', lang)}>
<AlignTableCenterIcon/>
</button>
<button className="class-button" onClick={alignTableLeft} title={t('alignTableLeft', lang)}>
<AlignTableLeftIcon/>
</button>
<button className="class-button" onClick={deleteTable} title={t('delete', lang)}>
<TrashIcon/>
</button>
</div>
)}
</div>
);
};
export default MenuTable;