16 SerializedTableRowNode,
17 TableCellHeaderStates,
19 } from "@lexical/table";
20 import {createStyleMapFromDomStyles, StyleMap} from "../utils/styles";
21 import {NodeKey} from "lexical/LexicalNode";
23 export type SerializedCustomTableRowNode = Spread<{
24 styles: Record<string, string>,
25 }, SerializedTableRowNode>
27 export class CustomTableRowNode extends TableRowNode {
28 __styles: StyleMap = new Map();
30 constructor(key?: NodeKey) {
34 static getType(): string {
35 return 'custom-table-row';
38 static clone(node: CustomTableRowNode): CustomTableRowNode {
39 const cellNode = new CustomTableRowNode(node.__key);
41 cellNode.__styles = new Map(node.__styles);
45 getStyles(): StyleMap {
46 const self = this.getLatest();
47 return new Map(self.__styles);
50 setStyles(styles: StyleMap): void {
51 const self = this.getWritable();
52 self.__styles = new Map(styles);
55 createDOM(config: EditorConfig): HTMLElement {
56 const element = super.createDOM(config);
58 for (const [name, value] of this.__styles.entries()) {
59 element.style.setProperty(name, value);
65 updateDOM(prevNode: CustomTableRowNode): boolean {
66 return super.updateDOM(prevNode)
67 || this.__styles !== prevNode.__styles;
70 static importDOM(): DOMConversionMap | null {
72 tr: (node: Node) => ({
73 conversion: $convertTableRowElement,
79 static importJSON(serializedNode: SerializedCustomTableRowNode): CustomTableRowNode {
80 const node = $createCustomTableRowNode();
82 node.setStyles(new Map(Object.entries(serializedNode.styles)));
87 exportJSON(): SerializedCustomTableRowNode {
89 ...super.exportJSON(),
91 type: 'custom-table-row',
92 styles: Object.fromEntries(this.__styles),
97 export function $convertTableRowElement(domNode: Node): DOMConversionOutput {
98 const rowNode = $createCustomTableRowNode();
100 if (domNode instanceof HTMLElement) {
101 rowNode.setStyles(createStyleMapFromDomStyles(domNode.style));
104 return {node: rowNode};
107 export function $createCustomTableRowNode(): CustomTableRowNode {
108 return new CustomTableRowNode();
111 export function $isCustomTableRowNode(node: LexicalNode | null | undefined): node is CustomTableRowNode {
112 return node instanceof CustomTableRowNode;