Progress on dynamic imports & operators in fe

This commit is contained in:
Felix Kaspar 2024-02-04 17:01:50 +01:00
parent 50ab159abe
commit 829127c3f8
6 changed files with 86 additions and 5 deletions

View File

@ -28,7 +28,7 @@ i18next.use(LanguageDetector).use(initReactI18next).use(resourcesToBackend((lang
interpolation: { interpolation: {
escapeValue: false, escapeValue: false,
}, },
initImmediate: true // Makes loading blocking but sync initImmediate: false // Makes loading blocking but sync
}); // TODO: use i18next.config.ts instead }); // TODO: use i18next.config.ts instead
import "./general.css"; import "./general.css";

View File

@ -1,6 +1,8 @@
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { BaseSyntheticEvent } from "react"; import { BaseSyntheticEvent } from "react";
import { Operator } from "@stirling-pdf/shared-operations/src/functions";
import i18next from "i18next";
function Dynamic() { function Dynamic() {
const operators = ["impose"]; // TODO: Make this dynamic const operators = ["impose"]; // TODO: Make this dynamic
@ -8,8 +10,23 @@ function Dynamic() {
function selectionChanged(s: BaseSyntheticEvent) { function selectionChanged(s: BaseSyntheticEvent) {
const selectedValue = s.target.value; const selectedValue = s.target.value;
if(selectedValue == "none") return; if(selectedValue == "none") return;
const LoadedOperator = import(`@stirling-pdf/shared-operations/src/functions/${selectedValue}`);
LoadedOperator.then(console.log); i18next.loadNamespaces("impose", (err, t) => {
if (err) throw err;
const LoadingModule = import(`@stirling-pdf/shared-operations/src/functions/${selectedValue}`) as Promise<{ [key: string]: typeof Operator }>;
LoadingModule.then((Module) => {
const Operator = Module[capitalizeFirstLetter(selectedValue)];
const description = Operator.schema.describe(); // TODO: The browser build of joi does not include describe.
console.log(description);
// TODO: use description to generate fields
});
});
}
function capitalizeFirstLetter(string: String) {
return string.charAt(0).toUpperCase() + string.slice(1);
} }
return ( return (

61
package-lock.json generated
View File

@ -896,11 +896,45 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
} }
}, },
"node_modules/@hapi/address": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz",
"integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==",
"dependencies": {
"@hapi/hoek": "^11.0.2"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@hapi/address/node_modules/@hapi/hoek": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.4.tgz",
"integrity": "sha512-PnsP5d4q7289pS2T2EgGz147BFJ2Jpb4yrEdkpz2IhgEUzos1S7HTl7ezWh1yfYzYlj89KzLdCRkqsP6SIryeQ=="
},
"node_modules/@hapi/formula": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz",
"integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw=="
},
"node_modules/@hapi/hoek": { "node_modules/@hapi/hoek": {
"version": "9.3.0", "version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
"integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
}, },
"node_modules/@hapi/pinpoint": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz",
"integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q=="
},
"node_modules/@hapi/tlds": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.0.2.tgz",
"integrity": "sha512-JHeIUwqHw3xk1fMJNU8YL2eYhRZxTMExTOnnqHp0y0NZJAGs2UypK2Dg+QT1NPnm29wj5n2zvg5Aoi9Dq/IZGg==",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@hapi/topo": { "node_modules/@hapi/topo": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
@ -2818,6 +2852,32 @@
"vite": "^4.2.0 || ^5.0.0" "vite": "^4.2.0 || ^5.0.0"
} }
}, },
"node_modules/@vizzly/joi": {
"version": "17.11.0",
"resolved": "https://registry.npmjs.org/@vizzly/joi/-/joi-17.11.0.tgz",
"integrity": "sha512-VpLziKclrc0ul9euaxhD0C+31CXwkmrKBxg7RKNEKnZi/iy4mQPERkxBHCaYksjoZKQEOAnB/IXY7PPbF/OiUw==",
"dependencies": {
"@hapi/address": "^5.1.1",
"@hapi/formula": "^3.0.2",
"@hapi/hoek": "^11.0.2",
"@hapi/pinpoint": "^2.0.1",
"@hapi/tlds": "^1.0.2",
"@hapi/topo": "^6.0.2"
}
},
"node_modules/@vizzly/joi/node_modules/@hapi/hoek": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.4.tgz",
"integrity": "sha512-PnsP5d4q7289pS2T2EgGz147BFJ2Jpb4yrEdkpz2IhgEUzos1S7HTl7ezWh1yfYzYlj89KzLdCRkqsP6SIryeQ=="
},
"node_modules/@vizzly/joi/node_modules/@hapi/topo": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz",
"integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==",
"dependencies": {
"@hapi/hoek": "^11.0.2"
}
},
"node_modules/@wasmer/wasmfs": { "node_modules/@wasmer/wasmfs": {
"version": "0.12.0", "version": "0.12.0",
"resolved": "https://registry.npmjs.org/@wasmer/wasmfs/-/wasmfs-0.12.0.tgz", "resolved": "https://registry.npmjs.org/@wasmer/wasmfs/-/wasmfs-0.12.0.tgz",
@ -9320,6 +9380,7 @@
"version": "0.0.0", "version": "0.0.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@vizzly/joi": "^17.11.0",
"i18next-resources-to-backend": "^1.2.0", "i18next-resources-to-backend": "^1.2.0",
"image-js": "^0.35.5", "image-js": "^0.35.5",
"next-i18next": "^15.1.1", "next-i18next": "^15.1.1",

View File

@ -9,6 +9,7 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@vizzly/joi": "^17.11.0",
"i18next-resources-to-backend": "^1.2.0", "i18next-resources-to-backend": "^1.2.0",
"image-js": "^0.35.5", "image-js": "^0.35.5",
"next-i18next": "^15.1.1", "next-i18next": "^15.1.1",

View File

@ -8,7 +8,6 @@ import Joi from "joi";
import { JoiPDFFileSchema } from "../wrappers/PdfFileJoi"; import { JoiPDFFileSchema } from "../wrappers/PdfFileJoi";
import i18next from "i18next"; import i18next from "i18next";
i18next.loadNamespaces("impose", (err, t) => { if (err) throw err; });
export class Impose extends Operator { export class Impose extends Operator {
static type = "impose"; static type = "impose";

View File

@ -1,7 +1,10 @@
import { Operator } from "../functions"; import { Operator } from "../functions";
import i18next from "i18next";
// TODO: Import other Operators (could make this dynamic) // TODO: Import other Operators (should make this dynamic imports)
i18next.loadNamespaces("impose", (err, t) => { if (err) throw err; });
import { Impose } from "../functions/impose"; import { Impose } from "../functions/impose";
export const Operators = { export const Operators = {
Impose: Impose Impose: Impose
}; };