@payloadcms/plugin-form-builder
Version:
Form builder plugin for Payload CMS
117 lines (116 loc) • 3.02 kB
JavaScript
import escapeHTML from 'escape-html';
import { replaceDoubleCurlys } from '../replaceDoubleCurlys.js';
const isTextNode = (node)=>{
return 'text' in node;
};
export const serializeSlate = (children, submissionData)=>children?.map((node)=>{
if (isTextNode(node)) {
let text = node.text.includes('{{*') ? replaceDoubleCurlys(node.text, submissionData) : `<span>${escapeHTML(replaceDoubleCurlys(node.text, submissionData))}</span>`;
if (node.bold) {
text = `
<strong>
${text}
</strong>
`;
}
if (node.code) {
text = `
<code>
${text}
</code>
`;
}
if (node.italic) {
text = `
<em >
${text}
</em>
`;
}
return text;
}
if (!node) {
return null;
}
switch(node.type){
case 'h1':
return `
<h1>
${serializeSlate(node.children, submissionData)}
</h1>
`;
case 'h2':
return `
<h2>
${serializeSlate(node.children, submissionData)}
</h2>
`;
case 'h3':
return `
<h3>
${serializeSlate(node.children, submissionData)}
</h3>
`;
case 'h4':
return `
<h4>
${serializeSlate(node.children, submissionData)}
</h4>
`;
case 'h5':
return `
<h5>
${serializeSlate(node.children, submissionData)}
</h5>
`;
case 'h6':
return `
<h6>
${serializeSlate(node.children, submissionData)}
</h6>
`;
case 'indent':
return `
<p style="padding-left: 20px">
${serializeSlate(node.children, submissionData)}
</p>
`;
case 'li':
return `
<li>
${serializeSlate(node.children, submissionData)}
</li>
`;
case 'link':
return `
<a href={${escapeHTML(replaceDoubleCurlys(node.url, submissionData))}}>
${serializeSlate(node.children, submissionData)}
</a>
`;
case 'ol':
return `
<ol>
${serializeSlate(node.children, submissionData)}
</ol>
`;
case 'quote':
return `
<blockquote>
${serializeSlate(node.children, submissionData)}
</blockquote>
`;
case 'ul':
return `
<ul>
${serializeSlate(node.children, submissionData)}
</ul>
`;
default:
return `
<p>
${serializeSlate(node.children, submissionData)}
</p>
`;
}
}).filter(Boolean).join('');
//# sourceMappingURL=serializeSlate.js.map