Skip to content

Commit a0e9443

Browse files
committed
Made select not render in code block if it has no options
1 parent f6cb1f9 commit a0e9443

File tree

1 file changed

+31
-20
lines changed

1 file changed

+31
-20
lines changed

packages/core/src/blocks/Code/block.ts

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -109,35 +109,46 @@ export const createCodeBlockSpec = createBlockSpec(
109109
const pre = document.createElement("pre");
110110
const code = document.createElement("code");
111111
pre.appendChild(code);
112-
const select = document.createElement("select");
113-
const selectWrapper = document.createElement("div");
114-
const handleLanguageChange = (event: Event) => {
115-
const language = (event.target as HTMLSelectElement).value;
116112

117-
editor.updateBlock(block.id, { props: { language } });
118-
};
113+
let removeSelectChangeListener = undefined;
119114

120-
Object.entries(options.supportedLanguages ?? {}).forEach(
121-
([id, { name }]) => {
122-
const option = document.createElement("option");
115+
if (options.supportedLanguages) {
116+
const select = document.createElement("select");
123117

124-
option.value = id;
125-
option.text = name;
126-
select.appendChild(option);
127-
},
128-
);
118+
const handleLanguageChange = (event: Event) => {
119+
const language = (event.target as HTMLSelectElement).value;
120+
121+
editor.updateBlock(block.id, { props: { language } });
122+
};
123+
select.addEventListener("change", handleLanguageChange);
129124

130-
selectWrapper.contentEditable = "false";
131-
select.value = block.props.language || options.defaultLanguage || "text";
132-
wrapper.appendChild(selectWrapper);
125+
const selectWrapper = document.createElement("div");
126+
selectWrapper.contentEditable = "false";
127+
select.value =
128+
block.props.language || options.defaultLanguage || "text";
129+
130+
Object.entries(options.supportedLanguages ?? {}).forEach(
131+
([id, { name }]) => {
132+
const option = document.createElement("option");
133+
134+
option.value = id;
135+
option.text = name;
136+
select.appendChild(option);
137+
},
138+
);
139+
selectWrapper.appendChild(select);
140+
wrapper.appendChild(selectWrapper);
141+
142+
removeSelectChangeListener = () =>
143+
select.removeEventListener("change", handleLanguageChange);
144+
}
133145
wrapper.appendChild(pre);
134-
selectWrapper.appendChild(select);
135-
select.addEventListener("change", handleLanguageChange);
146+
136147
return {
137148
dom: wrapper,
138149
contentDOM: code,
139150
destroy: () => {
140-
select.removeEventListener("change", handleLanguageChange);
151+
removeSelectChangeListener?.();
141152
},
142153
};
143154
},

0 commit comments

Comments
 (0)