Skip to content

Commit 56b3608

Browse files
committed
...
1 parent ad03630 commit 56b3608

File tree

1 file changed

+139
-6
lines changed

1 file changed

+139
-6
lines changed

.github/workflows/buildbug.yml

Lines changed: 139 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,53 @@ jobs:
77
- uses: actions/setup-node@v4
88
with:
99
node-version: 23
10+
- run: |
11+
cat <<EOF > lexical.json
12+
{
13+
"editorState": {
14+
"root": {
15+
"children": [
16+
{
17+
"children": [
18+
{
19+
"detail": 0,
20+
"format": 0,
21+
"mode": "normal",
22+
"style": "",
23+
"text": "Welcome to the playground",
24+
"type": "text",
25+
"version": 1
26+
}
27+
],
28+
"direction": "ltr",
29+
"format": "",
30+
"indent": 0,
31+
"type": "heading",
32+
"version": 1,
33+
"tag": "h1"
34+
},
35+
{
36+
"detail": 0,
37+
"format": 0,
38+
"mode": "token",
39+
"style": "",
40+
"text": "🙂",
41+
"type": "emoji",
42+
"version": 1,
43+
"className": "emoji happysmile"
44+
},
45+
],
46+
"direction": "ltr",
47+
"format": "",
48+
"indent": 0,
49+
"type": "root",
50+
"version": 1
51+
}
52+
},
53+
"lastSaved": 1739541749446,
54+
"source": "Playground",
55+
"version": "0.24.0"
56+
}
1057
- run: |
1158
cat <<EOF > package.json
1259
{
@@ -35,7 +82,7 @@ jobs:
3582
3683
- run: |
3784
cat <<EOF > lexical-cli-render-tsx.ts
38-
import { EmojiNode } from "./src/nodes/EmojiNode";
85+
import { EmojiNode } from "./EmojiNode";
3986
import { TextNode, $getRoot, $selectAll } from "lexical";
4087
import { createHeadlessEditor } from "@lexical/headless";
4188
import { $generateHtmlFromNodes } from "@lexical/html";
@@ -72,13 +119,99 @@ jobs:
72119
});
73120
EOF
74121
122+
- run: |
123+
cat <<EOF > EmojiNode.tsx
124+
import type {
125+
EditorConfig,
126+
LexicalNode,
127+
NodeKey,
128+
SerializedTextNode,
129+
Spread,
130+
} from 'lexical';
131+
132+
import {$applyNodeReplacement, TextNode} from 'lexical';
133+
134+
export type SerializedEmojiNode = Spread<
135+
{
136+
className: string;
137+
},
138+
SerializedTextNode
139+
>;
140+
141+
export class EmojiNode extends TextNode {
142+
__className: string;
143+
144+
static getType(): string {
145+
return 'emoji';
146+
}
147+
148+
static clone(node: EmojiNode): EmojiNode {
149+
return new EmojiNode(node.__className, node.__text, node.__key);
150+
}
151+
152+
constructor(className: string, text: string, key?: NodeKey) {
153+
super(text, key);
154+
this.__className = className;
155+
}
156+
157+
createDOM(config: EditorConfig): HTMLElement {
158+
const dom = document.createElement('span');
159+
const inner = super.createDOM(config);
160+
dom.className = this.__className;
161+
inner.className = 'emoji-inner';
162+
dom.appendChild(inner);
163+
return dom;
164+
}
165+
166+
updateDOM(prevNode: this, dom: HTMLElement, config: EditorConfig): boolean {
167+
const inner = dom.firstChild;
168+
if (inner === null) {
169+
return true;
170+
}
171+
super.updateDOM(prevNode, inner as HTMLElement, config);
172+
return false;
173+
}
174+
175+
static importJSON(serializedNode: SerializedEmojiNode): EmojiNode {
176+
return $createEmojiNode(
177+
serializedNode.className,
178+
serializedNode.text,
179+
).updateFromJSON(serializedNode);
180+
}
181+
182+
exportJSON(): SerializedEmojiNode {
183+
return {
184+
...super.exportJSON(),
185+
className: this.getClassName(),
186+
};
187+
}
188+
189+
getClassName(): string {
190+
const self = this.getLatest();
191+
return self.__className;
192+
}
193+
}
194+
195+
export function $isEmojiNode(
196+
node: LexicalNode | null | undefined,
197+
): node is EmojiNode {
198+
return node instanceof EmojiNode;
199+
}
200+
201+
export function $createEmojiNode(
202+
className: string,
203+
emojiText: string,
204+
): EmojiNode {
205+
const node = new EmojiNode(className, emojiText).setMode('token');
206+
return $applyNodeReplacement(node);
207+
}
208+
EOF
209+
75210
- run: npm install
76211

77-
#- run: |
78-
# cat samples/playground_without_emoji.lexical.json | node lexical-cli-render.ts
79-
#
80-
# sed -i 's@"type": "module",@@' package.json
81-
# cat samples/playground.lexical.json | npx ts-node lexical-cli-render-tsx.ts
212+
- run: |
213+
sed -i 's@"type": "module",@@' package.json
214+
cat lexical.json | npx ts-node lexical-cli-render-tsx.ts
82215
#
83216
#- uses: actions/upload-artifact@v4
84217
# with:

0 commit comments

Comments
 (0)