HTML to Slate AST converter for the Hygraph's RichTextAST format.
This package needs to have the packages slate
and slate-hyperscript
installed, and jsdom
as well if you need to run the converter in nodejs.
# for node or isomorphic usage, jsdom is required
npm install jsdom
# required peer-dependancies
npm install [email protected] [email protected]
npm install @graphcms/html-to-slate-ast
☝️ htmlToSlateAst
returns a Promise
import { htmlToSlateAST } from '@graphcms/html-to-slate-ast';
const htmlString = '<div><p>test</p></div>'; // or import from a file or database
const ast = await htmlToSlateAST(htmlString);
The output of this converstion is compatible with our RichTextAST
GraphQL type and can be used to import content in your Rich Text fields.
Example mutation:
mutation newArticle($title: String!, $content: RichTextAST) {
createArticle(data: { title: $title, content: $content }) {
id
title
content {
html
raw
}
}
}
Output generated by htmlToSlateAST
will represent the children
array of the Slate editor object. However, when creating or updating the value of a Rich text field, you are setting the value of the editor node itself. This means that the output should be transformed into a Rich text compatible object, for example:
const data = await client.request(newArticleQuery, {
title: 'Example title for an article',
content: { children: ast },
});
Here, in terms of Slate, $content
is the editor node, so the $ast
array must be assigned to the children
key in that object.
You can see the full example using graphql-request to mutate the data into Hygraph here
See the docs about the Rich Text field type and Content Api mutations
Licensed under the MIT License.
Made with 💜 by Hygraph 👋 join our community!