refactor most of the frontend and add permissive cors to backend

This commit is contained in:
Yeicor
2024-02-24 17:22:58 +01:00
parent 7dfdbdd34c
commit a72cc8dd09
13 changed files with 149 additions and 148 deletions

View File

@@ -3,13 +3,14 @@
import {defineAsyncComponent, ref, Ref} from "vue";
import Sidebar from "./misc/Sidebar.vue";
import Loading from "./misc/Loading.vue";
import ModelViewerOverlay from "./viewer/ModelViewerOverlay.vue";
import Tools from "./tools/Tools.vue";
import Models from "./models/Models.vue";
import {VLayout, VMain, VToolbarTitle, VTooltip, VBtn} from "vuetify/lib/components";
import {VLayout, VMain, VToolbarTitle} from "vuetify/lib/components";
import {settings} from "./misc/settings";
import {NetworkManager, NetworkUpdateEvent} from "./misc/network";
import {SceneMgr} from "./misc/scene";
import {Document} from "@gltf-transform/core";
import type ModelViewerWrapperT from "./viewer/ModelViewerWrapper.vue";
// NOTE: The ModelViewer library is big (THREE.js), so we split it and import it asynchronously
const ModelViewerWrapper = defineAsyncComponent({
@@ -20,12 +21,14 @@ const ModelViewerWrapper = defineAsyncComponent({
let openSidebarsByDefault: Ref<boolean> = ref(window.innerWidth > 1200);
let [refSData, sData] = SceneMgr.newData();
let sceneUrl = ref("")
let viewer: Ref<InstanceType<typeof ModelViewerWrapperT> | null> = ref(null);
let document = new Document();
// Set up the load model event listener
let networkMgr = new NetworkManager();
networkMgr.addEventListener('update', (model: NetworkUpdateEvent) => {
SceneMgr.loadModel(refSData, sData, model.name, model.url);
networkMgr.addEventListener('update', async (model: NetworkUpdateEvent) => {
document = await SceneMgr.loadModel(sceneUrl, document, model.name, model.url);
});
// Start loading all configured models ASAP
for (let model of settings.preloadModels) {
@@ -38,8 +41,7 @@ for (let model of settings.preloadModels) {
<!-- The main content of the app is the model-viewer with the SVG "2D" overlay -->
<v-main id="main">
<model-viewer-wrapper :src="refSData.viewerSrc" @load="(i) => SceneMgr.onload(refSData, i)"/>
<model-viewer-overlay v-if="refSData.viewer !== null"/>
<model-viewer-wrapper ref="viewer" :src="sceneUrl"/>
</v-main>
<!-- The left collapsible sidebar has the list of models -->
@@ -47,15 +49,15 @@ for (let model of settings.preloadModels) {
<template #toolbar>
<v-toolbar-title>Models</v-toolbar-title>
</template>
<models/>
<models :viewer="viewer"/>
</sidebar>
<!-- The right collapsible sidebar has the list of tools -->
<sidebar :opened-init="openSidebarsByDefault" side="right" :width="48 * 3 /* buttons */ + 1">
<sidebar :opened-init="openSidebarsByDefault" side="right" :width="48 * 3 /* buttons */ + 1 /* border? */">
<template #toolbar>
<v-toolbar-title>Tools</v-toolbar-title>
</template>
<tools :ref-s-data="refSData"/>
<tools :viewer="viewer"/>
</sidebar>
</v-layout>