mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 09:38:19 +08:00
bug fixes
This commit is contained in:
11 files changed
+61
-16
No files matched your search
@@ -60,9 +60,14 @@ declare module '../../context' {
|
||||
}
|
||||
}
|
||||
|
||||
let scratchpad: ScratchpadService;
|
||||
|
||||
export default function ScratchpadContainer() {
|
||||
const store = useStore();
|
||||
ctx.set('scratchpad', new ScratchpadService(store));
|
||||
if (!scratchpad) {
|
||||
scratchpad = new ScratchpadService(store);
|
||||
ctx.set('scratchpad', scratchpad);
|
||||
}
|
||||
const [, updateState] = React.useState<any>();
|
||||
const forceUpdate = React.useCallback(() => updateState({}), []);
|
||||
React.useEffect(() => {
|
||||
|
||||
@@ -8,6 +8,7 @@ export default async function load(name: string) {
|
||||
if (lazyModules[name]) return lazyModules[name];
|
||||
const tag = document.createElement('script');
|
||||
tag.src = `/lazy/${window.lazyloadMetadata[`${name}.lazy.js`]}/${name}.lazy.js`;
|
||||
console.log('loading module: ', name);
|
||||
lazyModules[name] = new Promise((resolve, reject) => {
|
||||
tag.onerror = reject;
|
||||
const timeout = setTimeout(reject, 30000);
|
||||
@@ -19,16 +20,50 @@ export default async function load(name: string) {
|
||||
document.body.appendChild(tag);
|
||||
return lazyModules[name];
|
||||
}
|
||||
|
||||
const val: Record<string, any> = {};
|
||||
/** @deprecated */
|
||||
async function legacyLoadExternalModule(target: string) {
|
||||
if (val[target]) return val[target];
|
||||
const ele = document.createElement('script');
|
||||
ele.src = target;
|
||||
await new Promise((resolve, reject) => {
|
||||
ele.onload = resolve;
|
||||
ele.onerror = reject;
|
||||
document.head.appendChild(ele);
|
||||
});
|
||||
val[target] = window.exports;
|
||||
return val[target];
|
||||
}
|
||||
|
||||
export { load };
|
||||
export async function getFeatures(name: string) {
|
||||
const legacy = Object.keys(window.externalModules).filter((i) => i === name || i.startsWith(`${name}@`))
|
||||
.map((i) => window.externalModules[i]);
|
||||
const c = Object.keys(features).filter((i) => i === name || i.startsWith(`${name}@`))
|
||||
.map((i) => features[i]);
|
||||
console.log(legacy, c, features);
|
||||
console.log('query features for:', name, 'legacy:', legacy, 'selected:', c, 'all:', features);
|
||||
return c.concat(legacy);
|
||||
}
|
||||
|
||||
export function provideFeature(name: string, content: string | (() => Promise<any>)) {
|
||||
features[name] = content;
|
||||
export const loaded = [];
|
||||
export async function loadFeatures(name: string, ...args: any[]) {
|
||||
if (loaded.includes(name)) return;
|
||||
loaded.push(name);
|
||||
for (const item of await getFeatures(name)) {
|
||||
let apply = typeof item === 'function'
|
||||
? item
|
||||
: (item.startsWith('http') || item.startsWith('/'))
|
||||
? await legacyLoadExternalModule(item)
|
||||
: (await load(item)).apply;
|
||||
if (typeof apply !== 'function') apply = apply.default || apply.apply;
|
||||
if (typeof apply === 'function') await apply(...args);
|
||||
}
|
||||
}
|
||||
|
||||
export function provideFeature(name: string, content: string | (() => Promise<any>)) {
|
||||
console.debug('Providing feature', name);
|
||||
if (features[name]) console.warn('Feature', name, 'already provided');
|
||||
features[name] = content;
|
||||
if (loaded.includes(name)) console.warn('Feature', name, 'already loaded');
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
"cli": false
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blueprintjs/core": "^5.13.0",
|
||||
"@blueprintjs/core": "^5.13.1",
|
||||
"@cordisjs/core": "3.18.1",
|
||||
"@fontsource/dm-mono": "^5.1.0",
|
||||
"@fontsource/fira-code": "^5.1.0",
|
||||
@@ -25,8 +25,8 @@
|
||||
"@fontsource/source-code-pro": "^5.1.0",
|
||||
"@fontsource/ubuntu-mono": "^5.1.0",
|
||||
"@hydrooj/utils": "workspace:^",
|
||||
"@sentry/browser": "^8.32.0",
|
||||
"@sentry/webpack-plugin": "^2.22.4",
|
||||
"@sentry/browser": "^8.33.1",
|
||||
"@sentry/webpack-plugin": "^2.22.5",
|
||||
"@simplewebauthn/browser": "9.0.1",
|
||||
"@svgr/webpack": "^8.1.0",
|
||||
"@types/jquery": "^3.5.31",
|
||||
@@ -37,7 +37,7 @@
|
||||
"@types/nunjucks": "^3.2.6",
|
||||
"@types/pickadate": "^3.5.35",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"@types/react": "^18.3.10",
|
||||
"@types/react": "^18.3.11",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"@types/redux-logger": "^3.0.13",
|
||||
"@types/uuid": "^10.0.0",
|
||||
|
||||
Reference in new issue
Block a user