@@ -6,6 +6,8 @@ import { sanitizeFields } from 'payload'
6
6
// eslint-disable-next-line payload/no-imports-from-exports-dir
7
7
import { TableFeatureClient } from '../../exports/client/index.js'
8
8
import { createServerFeature } from '../../utilities/createServerFeature.js'
9
+ import { convertLexicalNodesToHTML } from '../converters/html/converter/index.js'
10
+ import { createNode } from '../typeUtilities.js'
9
11
10
12
const fields : Field [ ] = [
11
13
{
@@ -41,15 +43,75 @@ export const EXPERIMENTAL_TableFeature = createServerFeature({
41
43
return schemaMap
42
44
} ,
43
45
nodes : [
44
- {
46
+ createNode ( {
47
+ converters : {
48
+ html : {
49
+ converter : async ( { converters, node, parent, req } ) => {
50
+ const childrenText = await convertLexicalNodesToHTML ( {
51
+ converters,
52
+ lexicalNodes : node . children ,
53
+ parent : {
54
+ ...node ,
55
+ parent,
56
+ } ,
57
+ req,
58
+ } )
59
+ return `<table class="lexical-table" style="border-collapse: collapse;">${ childrenText } </table>`
60
+ } ,
61
+ nodeTypes : [ TableNode . getType ( ) ] ,
62
+ } ,
63
+ } ,
45
64
node : TableNode ,
46
- } ,
47
- {
65
+ } ) ,
66
+ createNode ( {
67
+ converters : {
68
+ html : {
69
+ converter : async ( { converters, node, parent, req } ) => {
70
+ const childrenText = await convertLexicalNodesToHTML ( {
71
+ converters,
72
+ lexicalNodes : node . children ,
73
+ parent : {
74
+ ...node ,
75
+ parent,
76
+ } ,
77
+ req,
78
+ } )
79
+
80
+ const tagName = node . headerState > 0 ? 'th' : 'td'
81
+ const headerStateClass = `lexical-table-cell-header-${ node . headerState } `
82
+ const backgroundColor = node . backgroundColor
83
+ ? `background-color: ${ node . backgroundColor } ;`
84
+ : ''
85
+ const colSpan = node . colSpan > 1 ? `colspan="${ node . colSpan } "` : ''
86
+ const rowSpan = node . rowSpan > 1 ? `rowspan="${ node . rowSpan } "` : ''
87
+
88
+ return `<${ tagName } class="lexical-table-cell ${ headerStateClass } " style="border: 1px solid #ccc; padding: 8px; ${ backgroundColor } " ${ colSpan } ${ rowSpan } >${ childrenText } </${ tagName } >`
89
+ } ,
90
+ nodeTypes : [ TableCellNode . getType ( ) ] ,
91
+ } ,
92
+ } ,
48
93
node : TableCellNode ,
49
- } ,
50
- {
94
+ } ) ,
95
+ createNode ( {
96
+ converters : {
97
+ html : {
98
+ converter : async ( { converters, node, parent, req } ) => {
99
+ const childrenText = await convertLexicalNodesToHTML ( {
100
+ converters,
101
+ lexicalNodes : node . children ,
102
+ parent : {
103
+ ...node ,
104
+ parent,
105
+ } ,
106
+ req,
107
+ } )
108
+ return `<tr class="lexical-table-row">${ childrenText } </tr>`
109
+ } ,
110
+ nodeTypes : [ TableRowNode . getType ( ) ] ,
111
+ } ,
112
+ } ,
51
113
node : TableRowNode ,
52
- } ,
114
+ } ) ,
53
115
] ,
54
116
}
55
117
} ,
0 commit comments