mirror of https://github.com/halo-dev/halo
[release-2.19] fix: resolve error when adding tables in default editor (#6588)
This is an automated cherry-pick of #6587 /assign LIlGG ```release-note 解决在默认编辑器中添加表格报错的问题 ```pull/6608/head
parent
30d054a009
commit
a45ebb0825
|
@ -1,3 +1,4 @@
|
||||||
|
import { randomUUID } from "@/utils/id";
|
||||||
import {
|
import {
|
||||||
getExtensionField,
|
getExtensionField,
|
||||||
type AnyConfig,
|
type AnyConfig,
|
||||||
|
@ -10,12 +11,17 @@ export function useExtension() {
|
||||||
if (!extensions) {
|
if (!extensions) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const resolvedExtensions = sort(extensions);
|
||||||
const resolvedExtensions = sort(flatten(extensions));
|
|
||||||
|
|
||||||
const map = new Map<string, AnyExtension>();
|
const map = new Map<string, AnyExtension>();
|
||||||
|
|
||||||
resolvedExtensions.forEach((extension) => {
|
resolvedExtensions.forEach((extension) => {
|
||||||
|
if (!extension.name) {
|
||||||
|
console.warn(
|
||||||
|
`Extension name is missing for Extension, type: ${extension.type}.`
|
||||||
|
);
|
||||||
|
const key = randomUUID().toString();
|
||||||
|
map.set(key, extension);
|
||||||
|
return;
|
||||||
|
}
|
||||||
const key = `${extension.type}-${extension.name}`;
|
const key = `${extension.type}-${extension.name}`;
|
||||||
if (map.has(key)) {
|
if (map.has(key)) {
|
||||||
console.warn(
|
console.warn(
|
||||||
|
@ -24,42 +30,9 @@ export function useExtension() {
|
||||||
}
|
}
|
||||||
map.set(key, extension);
|
map.set(key, extension);
|
||||||
});
|
});
|
||||||
|
|
||||||
return Array.from(map.values());
|
return Array.from(map.values());
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a flattened array of extensions by traversing the `addExtensions` field.
|
|
||||||
* @param extensions An array of Tiptap extensions
|
|
||||||
* @returns A flattened array of Tiptap extensions
|
|
||||||
*/
|
|
||||||
const flatten = (extensions: Extensions): Extensions => {
|
|
||||||
return (
|
|
||||||
extensions
|
|
||||||
.map((extension) => {
|
|
||||||
const context = {
|
|
||||||
name: extension.name,
|
|
||||||
options: extension.options,
|
|
||||||
storage: extension.storage,
|
|
||||||
};
|
|
||||||
|
|
||||||
const addExtensions = getExtensionField<AnyConfig["addExtensions"]>(
|
|
||||||
extension,
|
|
||||||
"addExtensions",
|
|
||||||
context
|
|
||||||
);
|
|
||||||
|
|
||||||
if (addExtensions) {
|
|
||||||
return [extension, ...flatten(addExtensions())];
|
|
||||||
}
|
|
||||||
|
|
||||||
return extension;
|
|
||||||
})
|
|
||||||
// `Infinity` will break TypeScript so we set a number that is probably high enough
|
|
||||||
.flat(10)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort extensions by priority.
|
* Sort extensions by priority.
|
||||||
* @param extensions An array of Tiptap extensions
|
* @param extensions An array of Tiptap extensions
|
||||||
|
|
Loading…
Reference in New Issue