Skip to content
Snippets Groups Projects
Verified Commit bfaf1bba authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch '759-finalise-vuetify-app-as-spa' of...

Merge branch '759-finalise-vuetify-app-as-spa' of edugit.org:AlekSIS/official/AlekSIS-Core into 759-finalise-vuetify-app-as-spa
parents 5cf529b4 62d6d95c
No related branches found
No related tags found
2 merge requests!1123Resolve "Finalise Vuetify app as SPA",!1066Translations update from Weblate
Pipeline #105316 canceled
......@@ -120,3 +120,5 @@ const app = new Vue({
window.app = app;
window.router = router;
window.i18n = i18n;
import("./messages.js");
import appDetails from "aleksisAppDetails";
for (const details of Object.values(appDetails)) {
if (details.hasMessages) {
import(details.assetDir + "/messages.json").then(function(appMessages) {
window.i18n.registerLocale(appMessages);
});
}
}
......@@ -27,14 +27,16 @@ def write_vite_values(out_path: str) -> dict[str, Any]:
"static_url": settings.STATIC_URL,
}
# Write rollup entrypoints for all apps
vite_values["appEntrypoints"] = {}
vite_values["appDetails"] = {}
for app, path in get_apps_with_assets().items():
ep = os.path.join(path, "index.js")
if os.path.exists(ep):
vite_values["appEntrypoints"][app] = ep
if os.path.exists(path):
vite_values["appDetails"][app] = {}
vite_values["appDetails"][app]["name"] = app.split(".")[-1]
vite_values["appDetails"][app]["assetDir"] = path
vite_values["appDetails"][app]["hasMessages"] = os.path.exists(os.path.join(path, "messages.json"))
# Add core entrypoint
vite_values["coreEntrypoint"] = os.path.join(
settings.BASE_DIR, "aleksis", "core", "assets", "index.js"
vite_values["coreAssetDir"] = os.path.join(
settings.BASE_DIR, "aleksis", "core", "assets"
)
with open(out_path, "w") as out:
......
......@@ -10,20 +10,30 @@ const license = require("rollup-plugin-license");
const django_values = JSON.parse(fs.readFileSync("./django-vite-values.json"));
function generateAppImporter(entrypoints) {
let code = "let appObjects = {};";
for (const appPackage of Object.keys(entrypoints)) {
let appName = appPackage.split(".").slice(-1)[0];
let importAppName = appName.charAt(0).toUpperCase() + appName.substring(1);
function generateAppImporter(appDetails) {
let code = "let appObjects = {};\n";
for (const [ appPackage, appMeta ] of Object.entries(appDetails)) {
let indexPath = appMeta.assetDir + "/index.js";
let importAppName = appMeta.name.charAt(0).toUpperCase() + appMeta.name.substring(1);
code += `console.debug("Importing AlekSIS app entrypoint for ${appPackage}");\n`;
code += `import ${importAppName} from '${appPackage}';\n`;
code += `appObjects["${appName}"] = ${importAppName};\n`;
code += `import ${importAppName} from '${indexPath}';\n`;
code += `appObjects["${appMeta.name}"] = ${importAppName};\n`;
}
code += "export default appObjects;\n";
return code;
}
function generateAppDetails(appDetails) {
let code = "let messages = {};\n";
for (const [ appPackage, appMeta ] of Object.entries(appDetails)) {
code += `messages["${appMeta.name}"] = JSON.parse('${JSON.stringify(appMeta)}');\n`;
}
code += "export default messages;\n";
return code;
}
export default defineConfig({
root: path.resolve(".."),
base: django_values.static_url,
......@@ -32,7 +42,7 @@ export default defineConfig({
manifest: true,
target: ["firefox102", "chrome108", "safari16"],
rollupOptions: {
input: django_values.coreEntrypoint,
input: django_values.coreAssetDir + "/index.js",
output: {
manualChunks(id) {
// Split big libraries into own chunks
......@@ -50,10 +60,10 @@ export default defineConfig({
}
// Split each AlekSIS app in its own chunk
for (const [appPackage, ep] of Object.entries(
django_values.appEntrypoints
for (const [appPackage, ad] of Object.entries(
django_values.appDetails
)) {
if (id.includes(ep)) {
if (id.includes(ad.assetDir + "/index.js")) {
return appPackage;
}
}
......@@ -69,16 +79,15 @@ export default defineConfig({
},
fs: {
allow: [
searchForWorkspaceRoot(path.resolve("..")),
...Object.values(django_values.appEntrypoints).map((ep) =>
ep.slice(0, -8)
),
],
searchForWorkspaceRoot(path.resolve("..")),
...Object.values(django_values.appDetails).map(details => details.assetDir),
]
},
},
plugins: [
virtual({
aleksisAppImporter: generateAppImporter(django_values.appEntrypoints),
aleksisAppImporter: generateAppImporter(django_values.appDetails),
aleksisAppDetails: generateAppDetails(django_values.appDetails)
}),
vue(),
nodeResolve({ modulePaths: [path.resolve("./node_modules")] }),
......@@ -103,7 +112,6 @@ export default defineConfig({
resolve: {
alias: {
"@": path.resolve("./node_modules"),
...django_values.appEntrypoints,
},
},
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment