@geode/opengeodeweb-front 10.6.2 → 10.6.3-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +1 -1
- package/.oxlintrc.json +3 -22
- package/app/assets/geode_objects.js +26 -26
- package/app/components/Carousel.vue +62 -66
- package/app/components/CrsSelector.vue +48 -52
- package/app/components/DeleteDialog.vue +21 -37
- package/app/components/DragAndDrop.vue +35 -41
- package/app/components/ExtensionSelector.vue +50 -63
- package/app/components/FeedBack/ErrorBanner.vue +7 -10
- package/app/components/FeedBack/Snackers.vue +12 -14
- package/app/components/FetchingData.vue +1 -6
- package/app/components/FileSelector.vue +41 -47
- package/app/components/FileUploader.vue +62 -79
- package/app/components/GlassCard.vue +19 -19
- package/app/components/HybridRenderingView.vue +37 -38
- package/app/components/InfraConnected.vue +3 -3
- package/app/components/Inspector/InspectionButton.vue +27 -31
- package/app/components/Inspector/ResultPanel.vue +13 -24
- package/app/components/Launcher.vue +13 -13
- package/app/components/Loading.vue +63 -69
- package/app/components/MissingFilesSelector.vue +53 -73
- package/app/components/ObjectSelector.vue +81 -99
- package/app/components/PackagesVersions.vue +27 -30
- package/app/components/Recaptcha.vue +60 -71
- package/app/components/RemoteRenderingView.vue +102 -108
- package/app/components/Screenshot.vue +36 -42
- package/app/components/SearchBar.vue +5 -5
- package/app/components/Step.vue +37 -44
- package/app/components/Stepper.vue +29 -35
- package/app/components/VeaseViewToolbar.vue +69 -78
- package/app/components/ViewToolbar.vue +41 -45
- package/app/components/Viewer/BreadCrumb.vue +18 -30
- package/app/components/Viewer/ContextMenu.vue +176 -179
- package/app/components/Viewer/ContextMenuItem.vue +105 -117
- package/app/components/Viewer/EdgedCurve/PointsOptions.vue +6 -9
- package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +82 -93
- package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +84 -99
- package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +83 -98
- package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +62 -73
- package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +84 -108
- package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +82 -105
- package/app/components/Viewer/Generic/Model/EdgesOptions.vue +19 -23
- package/app/components/Viewer/Generic/Model/PointsOptions.vue +26 -30
- package/app/components/Viewer/Grid/2D/CellsOptions.vue +5 -5
- package/app/components/Viewer/Grid/2D/EdgesOptions.vue +6 -9
- package/app/components/Viewer/Grid/2D/PointsOptions.vue +6 -9
- package/app/components/Viewer/Grid/3D/CellsOptions.vue +5 -5
- package/app/components/Viewer/Grid/3D/EdgesOptions.vue +6 -9
- package/app/components/Viewer/Grid/3D/FacetsOptions.vue +5 -5
- package/app/components/Viewer/Grid/3D/PointsOptions.vue +6 -9
- package/app/components/Viewer/HybridSolid/EdgesOptions.vue +6 -9
- package/app/components/Viewer/HybridSolid/PointsOptions.vue +6 -9
- package/app/components/Viewer/HybridSolid/PolygonsOptions.vue +6 -9
- package/app/components/Viewer/HybridSolid/PolyhedraOptions.vue +6 -9
- package/app/components/Viewer/Options/AttributeColorBar.vue +8 -8
- package/app/components/Viewer/Options/AttributeSelector.vue +73 -78
- package/app/components/Viewer/Options/ColorMapList.vue +115 -140
- package/app/components/Viewer/Options/ColorMapPicker.vue +128 -142
- package/app/components/Viewer/Options/ColorPicker.vue +9 -9
- package/app/components/Viewer/Options/ColoringTypeSelector.vue +77 -91
- package/app/components/Viewer/Options/TextureItem.vue +54 -58
- package/app/components/Viewer/Options/TexturesSelector.vue +22 -26
- package/app/components/Viewer/Options/VisibilitySwitch.vue +1 -1
- package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +61 -68
- package/app/components/Viewer/PolygonalSurface/EdgesOptions.vue +6 -9
- package/app/components/Viewer/PolygonalSurface/PointsOptions.vue +6 -9
- package/app/components/Viewer/PolygonalSurface/SpecificPolygonsOptions.vue +83 -103
- package/app/components/Viewer/Solid/EdgesOptions.vue +6 -9
- package/app/components/Viewer/Solid/PointsOptions.vue +6 -9
- package/app/components/Viewer/Solid/PolygonsOptions.vue +6 -9
- package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +82 -105
- package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +5 -5
- package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +5 -5
- package/app/components/Viewer/Tree/ObjectTree.vue +80 -89
- package/app/components/Viewer/TreeComponent.vue +43 -49
- package/app/components/Viewer/TreeObject.vue +48 -50
- package/app/components/Viewer/TriangulatedSurface/EdgesOptions.vue +6 -9
- package/app/components/Viewer/TriangulatedSurface/PointsOptions.vue +5 -5
- package/app/components/Viewer/TriangulatedSurface/TrianglesOptions.vue +5 -5
- package/app/components/Wrapper.vue +8 -8
- package/app/components/ZScaling.vue +18 -27
- package/app/composables/project_manager.js +57 -67
- package/app/composables/run_function_when_microservices_connected.js +8 -8
- package/app/plugins/auto_store_register.js +11 -13
- package/app/stores/app.js +118 -138
- package/app/stores/data.js +52 -68
- package/app/stores/data_style.js +36 -36
- package/app/stores/feedback.js +17 -20
- package/app/stores/geode.js +54 -55
- package/app/stores/hybrid_viewer.js +164 -177
- package/app/stores/infra.js +45 -55
- package/app/stores/lambda.js +26 -26
- package/app/stores/menu.js +78 -85
- package/app/stores/treeview.js +57 -65
- package/app/stores/viewer.js +92 -104
- package/app/utils/colormap.js +3 -3
- package/app/utils/config.js +16 -22
- package/app/utils/default_styles.js +50 -62
- package/app/utils/extension.js +44 -44
- package/app/utils/file_import_workflow.js +50 -64
- package/app/utils/local/app_mode.js +2 -2
- package/app/utils/local/cleanup.js +66 -72
- package/app/utils/local/microservices.js +61 -71
- package/app/utils/local/path.js +16 -19
- package/app/utils/local/scripts.js +22 -22
- package/app/utils/recaptcha.js +6 -6
- package/app/utils/server.js +21 -24
- package/app/utils/status.js +2 -2
- package/app/utils/treeview.js +4 -4
- package/app/utils/validate_schema.js +7 -7
- package/commitlint.config.js +2 -2
- package/eslint.config.js +4 -4
- package/internal/database/database.js +38 -46
- package/internal/database/extended_database.js +9 -10
- package/internal/database/tables/data.js +2 -3
- package/internal/database/tables/model_components.js +1 -1
- package/internal/database/tables/model_components_relation.js +1 -1
- package/internal/stores/data_style/mesh/cells/cell.js +47 -63
- package/internal/stores/data_style/mesh/cells/color.js +11 -16
- package/internal/stores/data_style/mesh/cells/common.js +6 -6
- package/internal/stores/data_style/mesh/cells/index.js +37 -47
- package/internal/stores/data_style/mesh/cells/textures.js +11 -12
- package/internal/stores/data_style/mesh/cells/vertex.js +47 -58
- package/internal/stores/data_style/mesh/cells/visibility.js +11 -16
- package/internal/stores/data_style/mesh/edges/color.js +11 -16
- package/internal/stores/data_style/mesh/edges/common.js +6 -6
- package/internal/stores/data_style/mesh/edges/edge.js +47 -63
- package/internal/stores/data_style/mesh/edges/index.js +38 -52
- package/internal/stores/data_style/mesh/edges/vertex.js +47 -58
- package/internal/stores/data_style/mesh/edges/visibility.js +11 -16
- package/internal/stores/data_style/mesh/edges/width.js +11 -16
- package/internal/stores/data_style/mesh/index.js +34 -34
- package/internal/stores/data_style/mesh/points/color.js +11 -16
- package/internal/stores/data_style/mesh/points/common.js +6 -6
- package/internal/stores/data_style/mesh/points/index.js +35 -49
- package/internal/stores/data_style/mesh/points/size.js +11 -16
- package/internal/stores/data_style/mesh/points/vertex.js +47 -58
- package/internal/stores/data_style/mesh/points/visibility.js +11 -16
- package/internal/stores/data_style/mesh/polygons/color.js +11 -16
- package/internal/stores/data_style/mesh/polygons/common.js +6 -6
- package/internal/stores/data_style/mesh/polygons/index.js +36 -45
- package/internal/stores/data_style/mesh/polygons/polygon.js +45 -56
- package/internal/stores/data_style/mesh/polygons/textures.js +11 -16
- package/internal/stores/data_style/mesh/polygons/vertex.js +47 -58
- package/internal/stores/data_style/mesh/polygons/visibility.js +11 -16
- package/internal/stores/data_style/mesh/polyhedra/color.js +11 -16
- package/internal/stores/data_style/mesh/polyhedra/common.js +6 -6
- package/internal/stores/data_style/mesh/polyhedra/index.js +29 -42
- package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +43 -47
- package/internal/stores/data_style/mesh/polyhedra/vertex.js +47 -58
- package/internal/stores/data_style/mesh/polyhedra/visibility.js +11 -17
- package/internal/stores/data_style/model/blocks/color.js +21 -24
- package/internal/stores/data_style/model/blocks/common.js +6 -6
- package/internal/stores/data_style/model/blocks/index.js +13 -17
- package/internal/stores/data_style/model/blocks/visibility.js +21 -24
- package/internal/stores/data_style/model/corners/color.js +21 -24
- package/internal/stores/data_style/model/corners/common.js +6 -6
- package/internal/stores/data_style/model/corners/index.js +14 -18
- package/internal/stores/data_style/model/corners/visibility.js +21 -25
- package/internal/stores/data_style/model/edges/common.js +4 -4
- package/internal/stores/data_style/model/edges/index.js +7 -7
- package/internal/stores/data_style/model/edges/visibility.js +11 -15
- package/internal/stores/data_style/model/index.js +84 -100
- package/internal/stores/data_style/model/lines/color.js +21 -24
- package/internal/stores/data_style/model/lines/common.js +6 -6
- package/internal/stores/data_style/model/lines/index.js +13 -17
- package/internal/stores/data_style/model/lines/visibility.js +21 -24
- package/internal/stores/data_style/model/points/common.js +4 -4
- package/internal/stores/data_style/model/points/index.js +9 -9
- package/internal/stores/data_style/model/points/size.js +11 -11
- package/internal/stores/data_style/model/points/visibility.js +11 -15
- package/internal/stores/data_style/model/surfaces/color.js +21 -24
- package/internal/stores/data_style/model/surfaces/common.js +6 -6
- package/internal/stores/data_style/model/surfaces/index.js +14 -22
- package/internal/stores/data_style/model/surfaces/visibility.js +18 -22
- package/internal/stores/data_style/state.js +11 -11
- package/internal/utils/api_fetch.js +24 -34
- package/internal/utils/upload_file.js +19 -24
- package/internal/utils/viewer_call.js +23 -36
- package/nuxt.config.js +7 -11
- package/package.json +3 -3
- package/scripts/generate_geode_objects.js +14 -16
- package/server/api/app/kill.post.js +4 -4
- package/server/api/app/project_folder_path.post.js +11 -11
- package/server/api/app/run_back.post.js +12 -12
- package/server/api/app/run_viewer.post.js +12 -12
- package/server/api/extensions/run.post.js +34 -41
- package/server/api/extensions/upload.put.js +48 -62
- package/tests/integration/setup.js +43 -53
- package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +90 -116
- package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +81 -107
- package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +38 -41
- package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +85 -101
- package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +89 -113
- package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +81 -105
- package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +56 -73
- package/tests/integration/stores/data_style/model/corners.nuxt.test.js +59 -76
- package/tests/integration/stores/data_style/model/edges.nuxt.test.js +39 -42
- package/tests/integration/stores/data_style/model/index.nuxt.test.js +31 -34
- package/tests/integration/stores/data_style/model/lines.nuxt.test.js +60 -73
- package/tests/integration/stores/data_style/model/points.nuxt.test.js +52 -55
- package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +59 -80
- package/tests/integration/stores/viewer.nuxt.test.js +35 -38
- package/tests/setup_indexeddb.js +2 -2
- package/tests/unit/components/CrsSelector.nuxt.test.js +28 -28
- package/tests/unit/components/ExtensionSelector.nuxt.test.js +33 -35
- package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +23 -23
- package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +18 -18
- package/tests/unit/components/FileSelector.nuxt.test.js +57 -59
- package/tests/unit/components/FileUploader.nuxt.test.js +35 -39
- package/tests/unit/components/Inspector/InspectionButton.nuxt.test.js +28 -28
- package/tests/unit/components/Inspector/ResultPanel.nuxt.test.js +22 -27
- package/tests/unit/components/Launcher.nuxt.test.js +20 -22
- package/tests/unit/components/MissingFilesSelector.nuxt.test.js +37 -37
- package/tests/unit/components/ObjectSelector.nuxt.test.js +62 -62
- package/tests/unit/components/PackagesVersions.nuxt.test.js +16 -16
- package/tests/unit/components/Step.nuxt.test.js +18 -19
- package/tests/unit/components/Stepper.nuxt.test.js +18 -18
- package/tests/unit/composables/api_fetch.nuxt.test.js +34 -36
- package/tests/unit/composables/project_manager.nuxt.test.js +93 -112
- package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +36 -36
- package/tests/unit/composables/upload_file.nuxt.test.js +27 -29
- package/tests/unit/plugins/project_load.nuxt.test.js +31 -33
- package/tests/unit/stores/app.nuxt.test.js +90 -92
- package/tests/unit/stores/feedback.nuxt.test.js +47 -57
- package/tests/unit/stores/geode.nuxt.test.js +111 -115
- package/tests/unit/stores/infra.nuxt.test.js +148 -148
- package/tests/unit/stores/lambda.nuxt.test.js +72 -74
- package/tests/unit/stores/treeview.nuxt.test.js +19 -21
- package/tests/unit/stores/viewer.nuxt.test.js +109 -122
- package/tests/unit/utils/recaptcha.nuxt.test.js +25 -29
- package/tests/unit/utils/validate_schema.nuxt.test.js +17 -17
- package/tests/utils.js +11 -11
- package/tests/vitest.config.js +9 -9
- package/vuetify_config.js +2 -2
|
@@ -1,110 +1,100 @@
|
|
|
1
|
-
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
|
|
2
|
-
import fileDownload from "js-file-download"
|
|
3
|
-
import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
|
|
1
|
+
import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
|
|
2
|
+
import fileDownload from "js-file-download";
|
|
3
|
+
import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
|
|
4
4
|
|
|
5
|
-
import { importWorkflowFromSnapshot } from "@ogw_front/utils/file_import_workflow"
|
|
5
|
+
import { importWorkflowFromSnapshot } from "@ogw_front/utils/file_import_workflow";
|
|
6
6
|
|
|
7
|
-
import { useAppStore } from "@ogw_front/stores/app"
|
|
8
|
-
import { useDataStore } from "@ogw_front/stores/data"
|
|
9
|
-
import { useDataStyleStore } from "@ogw_front/stores/data_style"
|
|
10
|
-
import { useGeodeStore } from "@ogw_front/stores/geode"
|
|
11
|
-
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer"
|
|
12
|
-
import { useTreeviewStore } from "@ogw_front/stores/treeview"
|
|
13
|
-
import { useViewerStore } from "@ogw_front/stores/viewer"
|
|
7
|
+
import { useAppStore } from "@ogw_front/stores/app";
|
|
8
|
+
import { useDataStore } from "@ogw_front/stores/data";
|
|
9
|
+
import { useDataStyleStore } from "@ogw_front/stores/data_style";
|
|
10
|
+
import { useGeodeStore } from "@ogw_front/stores/geode";
|
|
11
|
+
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
12
|
+
import { useTreeviewStore } from "@ogw_front/stores/treeview";
|
|
13
|
+
import { useViewerStore } from "@ogw_front/stores/viewer";
|
|
14
14
|
|
|
15
15
|
export function useProjectManager() {
|
|
16
16
|
async function exportProject() {
|
|
17
|
-
console.log("[export triggered]")
|
|
18
|
-
const appStore = useAppStore()
|
|
19
|
-
const geodeStore = useGeodeStore()
|
|
20
|
-
const snapshot = await appStore.exportStores()
|
|
21
|
-
const schema = back_schemas.opengeodeweb_back.export_project
|
|
22
|
-
const defaultName = "project.vease"
|
|
17
|
+
console.log("[export triggered]");
|
|
18
|
+
const appStore = useAppStore();
|
|
19
|
+
const geodeStore = useGeodeStore();
|
|
20
|
+
const snapshot = await appStore.exportStores();
|
|
21
|
+
const schema = back_schemas.opengeodeweb_back.export_project;
|
|
22
|
+
const defaultName = "project.vease";
|
|
23
23
|
|
|
24
24
|
const result = await $fetch(schema.$id, {
|
|
25
25
|
baseURL: geodeStore.base_url,
|
|
26
26
|
method: schema.methods.find((method) => method !== "OPTIONS"),
|
|
27
27
|
body: { snapshot, filename: defaultName },
|
|
28
|
-
})
|
|
29
|
-
fileDownload(result, defaultName)
|
|
30
|
-
return { result }
|
|
28
|
+
});
|
|
29
|
+
fileDownload(result, defaultName);
|
|
30
|
+
return { result };
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
async function importProjectFile(file) {
|
|
34
|
-
const geodeStore = useGeodeStore()
|
|
35
|
-
const dataStyleStore = useDataStyleStore()
|
|
36
|
-
const viewerStore = useViewerStore()
|
|
37
|
-
const dataStore = useDataStore()
|
|
38
|
-
const treeviewStore = useTreeviewStore()
|
|
39
|
-
const hybridViewerStore = useHybridViewerStore()
|
|
34
|
+
const geodeStore = useGeodeStore();
|
|
35
|
+
const dataStyleStore = useDataStyleStore();
|
|
36
|
+
const viewerStore = useViewerStore();
|
|
37
|
+
const dataStore = useDataStore();
|
|
38
|
+
const treeviewStore = useTreeviewStore();
|
|
39
|
+
const hybridViewerStore = useHybridViewerStore();
|
|
40
40
|
|
|
41
|
-
await viewerStore.ws_connect()
|
|
41
|
+
await viewerStore.ws_connect();
|
|
42
42
|
|
|
43
|
-
const { client } = viewerStore
|
|
43
|
+
const { client } = viewerStore;
|
|
44
44
|
if (client && client.getConnection && client.getConnection().getSession) {
|
|
45
|
-
await client
|
|
46
|
-
.getConnection()
|
|
47
|
-
.getSession()
|
|
48
|
-
.call("opengeodeweb_viewer.release_database", [{}])
|
|
45
|
+
await client.getConnection().getSession().call("opengeodeweb_viewer.release_database", [{}]);
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
await viewerStore.request(
|
|
52
49
|
viewer_schemas.opengeodeweb_viewer.viewer.reset_visualization,
|
|
53
50
|
{},
|
|
54
51
|
undefined,
|
|
55
|
-
)
|
|
52
|
+
);
|
|
56
53
|
|
|
57
|
-
treeviewStore.clear()
|
|
58
|
-
dataStore.clear()
|
|
59
|
-
hybridViewerStore.clear()
|
|
54
|
+
treeviewStore.clear();
|
|
55
|
+
dataStore.clear();
|
|
56
|
+
hybridViewerStore.clear();
|
|
60
57
|
|
|
61
|
-
const schemaImport = back_schemas.opengeodeweb_back.import_project
|
|
62
|
-
const form = new FormData()
|
|
63
|
-
const originalFileName = file && file.name ? file.name : "project.vease"
|
|
58
|
+
const schemaImport = back_schemas.opengeodeweb_back.import_project;
|
|
59
|
+
const form = new FormData();
|
|
60
|
+
const originalFileName = file && file.name ? file.name : "project.vease";
|
|
64
61
|
if (!originalFileName.toLowerCase().endsWith(".vease")) {
|
|
65
|
-
throw new Error("Uploaded file must be a .vease")
|
|
62
|
+
throw new Error("Uploaded file must be a .vease");
|
|
66
63
|
}
|
|
67
|
-
form.append("file", file, originalFileName)
|
|
64
|
+
form.append("file", file, originalFileName);
|
|
68
65
|
|
|
69
66
|
const result = await $fetch(schemaImport.$id, {
|
|
70
67
|
baseURL: geodeStore.base_url,
|
|
71
68
|
method: "POST",
|
|
72
69
|
body: form,
|
|
73
|
-
})
|
|
74
|
-
const snapshot = result && result.snapshot ? result.snapshot : {}
|
|
75
|
-
|
|
76
|
-
treeviewStore.isImporting = true
|
|
77
|
-
|
|
78
|
-
const { client: client2 } = viewerStore
|
|
79
|
-
if (
|
|
80
|
-
client2
|
|
81
|
-
client2.getConnection &&
|
|
82
|
-
client2.getConnection().getSession
|
|
83
|
-
) {
|
|
84
|
-
await client2
|
|
85
|
-
.getConnection()
|
|
86
|
-
.getSession()
|
|
87
|
-
.call("opengeodeweb_viewer.import_project", [{}])
|
|
70
|
+
});
|
|
71
|
+
const snapshot = result && result.snapshot ? result.snapshot : {};
|
|
72
|
+
|
|
73
|
+
treeviewStore.isImporting = true;
|
|
74
|
+
|
|
75
|
+
const { client: client2 } = viewerStore;
|
|
76
|
+
if (client2 && client2.getConnection && client2.getConnection().getSession) {
|
|
77
|
+
await client2.getConnection().getSession().call("opengeodeweb_viewer.import_project", [{}]);
|
|
88
78
|
}
|
|
89
79
|
|
|
90
|
-
await treeviewStore.importStores(snapshot.treeview || {})
|
|
91
|
-
await hybridViewerStore.initHybridViewer()
|
|
92
|
-
await hybridViewerStore.importStores(snapshot.hybridViewer || {})
|
|
80
|
+
await treeviewStore.importStores(snapshot.treeview || {});
|
|
81
|
+
await hybridViewerStore.initHybridViewer();
|
|
82
|
+
await hybridViewerStore.importStores(snapshot.hybridViewer || {});
|
|
93
83
|
|
|
94
|
-
const items = snapshot?.data?.items || []
|
|
84
|
+
const items = snapshot?.data?.items || [];
|
|
95
85
|
|
|
96
|
-
await importWorkflowFromSnapshot(items)
|
|
97
|
-
await hybridViewerStore.importStores(snapshot.hybridViewer || {})
|
|
86
|
+
await importWorkflowFromSnapshot(items);
|
|
87
|
+
await hybridViewerStore.importStores(snapshot.hybridViewer || {});
|
|
98
88
|
{
|
|
99
|
-
await dataStyleStore.importStores(snapshot.dataStyle || {})
|
|
89
|
+
await dataStyleStore.importStores(snapshot.dataStyle || {});
|
|
100
90
|
}
|
|
101
91
|
{
|
|
102
|
-
await dataStyleStore.applyAllStylesFromState()
|
|
92
|
+
await dataStyleStore.applyAllStylesFromState();
|
|
103
93
|
}
|
|
104
94
|
|
|
105
|
-
treeviewStore.finalizeImportSelection()
|
|
106
|
-
treeviewStore.isImporting = false
|
|
95
|
+
treeviewStore.finalizeImportSelection();
|
|
96
|
+
treeviewStore.isImporting = false;
|
|
107
97
|
}
|
|
108
98
|
|
|
109
|
-
return { exportProject, importProjectFile }
|
|
99
|
+
return { exportProject, importProjectFile };
|
|
110
100
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { useInfraStore } from "@ogw_front/stores/infra"
|
|
1
|
+
import { useInfraStore } from "@ogw_front/stores/infra";
|
|
2
2
|
export function run_function_when_microservices_connected(function_to_run) {
|
|
3
|
-
const infraStore = useInfraStore()
|
|
4
|
-
const { microservices_connected } = storeToRefs(infraStore)
|
|
5
|
-
console.log("inside microservices_connected", microservices_connected.value)
|
|
3
|
+
const infraStore = useInfraStore();
|
|
4
|
+
const { microservices_connected } = storeToRefs(infraStore);
|
|
5
|
+
console.log("inside microservices_connected", microservices_connected.value);
|
|
6
6
|
if (microservices_connected.value) {
|
|
7
|
-
function_to_run()
|
|
7
|
+
function_to_run();
|
|
8
8
|
} else {
|
|
9
9
|
watch(microservices_connected, (value) => {
|
|
10
10
|
if (value) {
|
|
11
|
-
console.log("watch microservices_connected", value)
|
|
12
|
-
function_to_run()
|
|
11
|
+
console.log("watch microservices_connected", value);
|
|
12
|
+
function_to_run();
|
|
13
13
|
}
|
|
14
|
-
})
|
|
14
|
+
});
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
import { useAppStore } from "@ogw_front/stores/app"
|
|
1
|
+
import { useAppStore } from "@ogw_front/stores/app";
|
|
2
2
|
|
|
3
3
|
function autoStoreRegister({ store }) {
|
|
4
4
|
if (store.$id === "app") {
|
|
5
|
-
return
|
|
5
|
+
return;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
const appStore = useAppStore()
|
|
9
|
-
appStore.registerStore(store)
|
|
10
|
-
console.log(`[AutoRegister] Store "${store.$id}" processed`)
|
|
8
|
+
const appStore = useAppStore();
|
|
9
|
+
appStore.registerStore(store);
|
|
10
|
+
console.log(`[AutoRegister] Store "${store.$id}" processed`);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export default defineNuxtPlugin({
|
|
14
14
|
name: "auto-store-register",
|
|
15
15
|
dependsOn: ["pinia"],
|
|
16
16
|
setup(nuxtApp) {
|
|
17
|
-
const { $pinia } = nuxtApp
|
|
17
|
+
const { $pinia } = nuxtApp;
|
|
18
18
|
if (!$pinia) {
|
|
19
|
-
console.warn("Pinia instance not available.")
|
|
20
|
-
return
|
|
19
|
+
console.warn("Pinia instance not available.");
|
|
20
|
+
return;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
$pinia.use(autoStoreRegister)
|
|
24
|
-
console.log(
|
|
25
|
-
"[AUTOREGISTER PLUGIN] Loaded automatically from OpenGeodeWeb-Front",
|
|
26
|
-
)
|
|
23
|
+
$pinia.use(autoStoreRegister);
|
|
24
|
+
console.log("[AUTOREGISTER PLUGIN] Loaded automatically from OpenGeodeWeb-Front");
|
|
27
25
|
},
|
|
28
|
-
})
|
|
26
|
+
});
|
package/app/stores/app.js
CHANGED
|
@@ -1,269 +1,249 @@
|
|
|
1
|
-
import { api_fetch } from "@ogw_internal/utils/api_fetch.js"
|
|
2
|
-
import { upload_file } from "@ogw_internal/utils/upload_file.js"
|
|
1
|
+
import { api_fetch } from "@ogw_internal/utils/api_fetch.js";
|
|
2
|
+
import { upload_file } from "@ogw_internal/utils/upload_file.js";
|
|
3
3
|
|
|
4
4
|
export const useAppStore = defineStore("app", () => {
|
|
5
|
-
const stores = []
|
|
5
|
+
const stores = [];
|
|
6
6
|
|
|
7
7
|
function registerStore(store) {
|
|
8
|
-
const isAlreadyRegistered = stores.some(
|
|
9
|
-
(registeredStore) => registeredStore.$id === store.$id,
|
|
10
|
-
)
|
|
8
|
+
const isAlreadyRegistered = stores.some((registeredStore) => registeredStore.$id === store.$id);
|
|
11
9
|
if (isAlreadyRegistered) {
|
|
12
|
-
console.log(
|
|
13
|
-
|
|
14
|
-
)
|
|
15
|
-
return
|
|
10
|
+
console.log(`[AppStore] Store "${store.$id}" already registered, skipping`);
|
|
11
|
+
return;
|
|
16
12
|
}
|
|
17
|
-
console.log("[AppStore] Registering store", store.$id)
|
|
18
|
-
stores.push(store)
|
|
13
|
+
console.log("[AppStore] Registering store", store.$id);
|
|
14
|
+
stores.push(store);
|
|
19
15
|
}
|
|
20
16
|
|
|
21
17
|
async function exportStores(params = {}) {
|
|
22
|
-
const snapshot = {}
|
|
23
|
-
let exportCount = 0
|
|
18
|
+
const snapshot = {};
|
|
19
|
+
let exportCount = 0;
|
|
24
20
|
|
|
25
|
-
console.log(
|
|
26
|
-
`[AppStore] Exporting stores, total registered: ${stores.length}`,
|
|
27
|
-
)
|
|
21
|
+
console.log(`[AppStore] Exporting stores, total registered: ${stores.length}`);
|
|
28
22
|
await Promise.all(
|
|
29
23
|
stores.map(async (store) => {
|
|
30
24
|
if (!store.exportStores) {
|
|
31
|
-
return
|
|
25
|
+
return;
|
|
32
26
|
}
|
|
33
|
-
const storeId = store.$id
|
|
27
|
+
const storeId = store.$id;
|
|
34
28
|
try {
|
|
35
|
-
snapshot[storeId] = await store.exportStores(params)
|
|
36
|
-
exportCount += 1
|
|
29
|
+
snapshot[storeId] = await store.exportStores(params);
|
|
30
|
+
exportCount += 1;
|
|
37
31
|
} catch (error) {
|
|
38
|
-
console.error(`[AppStore] Error exporting store "${storeId}":`, error)
|
|
32
|
+
console.error(`[AppStore] Error exporting store "${storeId}":`, error);
|
|
39
33
|
}
|
|
40
34
|
}),
|
|
41
|
-
)
|
|
42
|
-
console.log(
|
|
43
|
-
|
|
44
|
-
Object.keys(snapshot),
|
|
45
|
-
)
|
|
46
|
-
return snapshot
|
|
35
|
+
);
|
|
36
|
+
console.log(`[AppStore] Exported ${exportCount} stores; snapshot keys:`, Object.keys(snapshot));
|
|
37
|
+
return snapshot;
|
|
47
38
|
}
|
|
48
39
|
|
|
49
40
|
async function importStores(snapshot) {
|
|
50
41
|
if (!snapshot) {
|
|
51
|
-
console.warn("[AppStore] import called with invalid snapshot")
|
|
52
|
-
return
|
|
42
|
+
console.warn("[AppStore] import called with invalid snapshot");
|
|
43
|
+
return;
|
|
53
44
|
}
|
|
54
|
-
console.log("[AppStore] Import snapshot keys:", Object.keys(snapshot || {}))
|
|
45
|
+
console.log("[AppStore] Import snapshot keys:", Object.keys(snapshot || {}));
|
|
55
46
|
|
|
56
|
-
let importedCount = 0
|
|
57
|
-
const notFoundStores = []
|
|
47
|
+
let importedCount = 0;
|
|
48
|
+
const notFoundStores = [];
|
|
58
49
|
await Promise.all(
|
|
59
50
|
stores.map(async (store) => {
|
|
60
51
|
if (!store.importStores) {
|
|
61
|
-
return
|
|
52
|
+
return;
|
|
62
53
|
}
|
|
63
|
-
const storeId = store.$id
|
|
54
|
+
const storeId = store.$id;
|
|
64
55
|
if (!snapshot[storeId]) {
|
|
65
|
-
notFoundStores.push(storeId)
|
|
66
|
-
return
|
|
56
|
+
notFoundStores.push(storeId);
|
|
57
|
+
return;
|
|
67
58
|
}
|
|
68
59
|
try {
|
|
69
|
-
await store.importStores(snapshot[storeId])
|
|
70
|
-
importedCount += 1
|
|
60
|
+
await store.importStores(snapshot[storeId]);
|
|
61
|
+
importedCount += 1;
|
|
71
62
|
} catch (error) {
|
|
72
|
-
console.error(`[AppStore] Error importing store "${storeId}":`, error)
|
|
63
|
+
console.error(`[AppStore] Error importing store "${storeId}":`, error);
|
|
73
64
|
}
|
|
74
65
|
}),
|
|
75
|
-
)
|
|
66
|
+
);
|
|
76
67
|
if (notFoundStores.length > 0) {
|
|
77
|
-
console.warn(
|
|
78
|
-
`[AppStore] Stores not found in snapshot: ${notFoundStores.join(", ")}`,
|
|
79
|
-
)
|
|
68
|
+
console.warn(`[AppStore] Stores not found in snapshot: ${notFoundStores.join(", ")}`);
|
|
80
69
|
}
|
|
81
|
-
console.log(`[AppStore] Imported ${importedCount} stores`)
|
|
70
|
+
console.log(`[AppStore] Imported ${importedCount} stores`);
|
|
82
71
|
}
|
|
83
72
|
|
|
84
|
-
const loadedExtensions = ref(new Map())
|
|
85
|
-
const extensionAPI = ref(undefined)
|
|
86
|
-
const codeTransformer = ref(undefined)
|
|
73
|
+
const loadedExtensions = ref(new Map());
|
|
74
|
+
const extensionAPI = ref(undefined);
|
|
75
|
+
const codeTransformer = ref(undefined);
|
|
87
76
|
|
|
88
77
|
function setExtensionAPI(api) {
|
|
89
|
-
extensionAPI.value = api
|
|
78
|
+
extensionAPI.value = api;
|
|
90
79
|
}
|
|
91
80
|
|
|
92
81
|
function setCodeTransformer(transformer) {
|
|
93
|
-
codeTransformer.value = transformer
|
|
82
|
+
codeTransformer.value = transformer;
|
|
94
83
|
}
|
|
95
84
|
|
|
96
85
|
function getExtension(id) {
|
|
97
|
-
return loadedExtensions.value.get(id)
|
|
86
|
+
return loadedExtensions.value.get(id);
|
|
98
87
|
}
|
|
99
88
|
|
|
100
89
|
async function loadExtension(path, backendPath = undefined) {
|
|
101
90
|
try {
|
|
102
|
-
let finalURL = path
|
|
91
|
+
let finalURL = path;
|
|
103
92
|
|
|
104
93
|
if (codeTransformer.value && path.startsWith("blob:")) {
|
|
105
|
-
const response = await fetch(path)
|
|
106
|
-
const code = await response.text()
|
|
107
|
-
const transformedCode = codeTransformer.value(code)
|
|
94
|
+
const response = await fetch(path);
|
|
95
|
+
const code = await response.text();
|
|
96
|
+
const transformedCode = codeTransformer.value(code);
|
|
108
97
|
|
|
109
98
|
const newBlob = new Blob([transformedCode], {
|
|
110
99
|
type: "application/javascript",
|
|
111
|
-
})
|
|
112
|
-
finalURL = URL.createObjectURL(newBlob)
|
|
100
|
+
});
|
|
101
|
+
finalURL = URL.createObjectURL(newBlob);
|
|
113
102
|
}
|
|
114
|
-
|
|
103
|
+
// oxlint-disable-next-line no-inline-comments
|
|
104
|
+
const extensionModule = await import(/* @vite-ignore */ finalURL);
|
|
115
105
|
|
|
116
106
|
if (finalURL !== path && finalURL.startsWith("blob:")) {
|
|
117
|
-
URL.revokeObjectURL(finalURL)
|
|
107
|
+
URL.revokeObjectURL(finalURL);
|
|
118
108
|
}
|
|
119
109
|
|
|
120
110
|
if (!extensionModule.metadata?.id) {
|
|
121
|
-
throw new Error("Extension must have metadata.id")
|
|
111
|
+
throw new Error("Extension must have metadata.id");
|
|
122
112
|
}
|
|
123
113
|
|
|
124
|
-
const extensionId = extensionModule.metadata.id
|
|
114
|
+
const extensionId = extensionModule.metadata.id;
|
|
125
115
|
|
|
126
116
|
if (loadedExtensions.value.has(extensionId)) {
|
|
127
|
-
console.warn(`[AppStore] Extension "${extensionId}" is already loaded`)
|
|
128
|
-
throw new Error(`Extension "${extensionId}" is already loaded.`)
|
|
117
|
+
console.warn(`[AppStore] Extension "${extensionId}" is already loaded`);
|
|
118
|
+
throw new Error(`Extension "${extensionId}" is already loaded.`);
|
|
129
119
|
}
|
|
130
120
|
|
|
131
121
|
if (!extensionAPI.value) {
|
|
132
|
-
throw new Error("Extension API not initialized")
|
|
122
|
+
throw new Error("Extension API not initialized");
|
|
133
123
|
}
|
|
134
124
|
|
|
135
|
-
if (typeof extensionModule.install
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const extensionData = {
|
|
139
|
-
module: extensionModule,
|
|
140
|
-
id: extensionId,
|
|
141
|
-
path,
|
|
142
|
-
backendPath,
|
|
143
|
-
loadedAt: new Date().toISOString(),
|
|
144
|
-
metadata: extensionModule.metadata,
|
|
145
|
-
enabled: true,
|
|
146
|
-
}
|
|
147
|
-
loadedExtensions.value.set(extensionId, extensionData)
|
|
148
|
-
|
|
149
|
-
console.log(`[AppStore] Extension loaded successfully: ${extensionId}`)
|
|
150
|
-
return extensionModule
|
|
151
|
-
} else {
|
|
152
|
-
throw new Error("Extension must export an install function")
|
|
125
|
+
if (typeof extensionModule.install !== "function") {
|
|
126
|
+
throw new TypeError("Extension must export an install function");
|
|
153
127
|
}
|
|
128
|
+
|
|
129
|
+
await extensionModule.install(extensionAPI.value, backendPath);
|
|
130
|
+
|
|
131
|
+
const extensionData = {
|
|
132
|
+
module: extensionModule,
|
|
133
|
+
id: extensionId,
|
|
134
|
+
path,
|
|
135
|
+
backendPath,
|
|
136
|
+
loadedAt: new Date().toISOString(),
|
|
137
|
+
metadata: extensionModule.metadata,
|
|
138
|
+
enabled: true,
|
|
139
|
+
};
|
|
140
|
+
loadedExtensions.value.set(extensionId, extensionData);
|
|
141
|
+
|
|
142
|
+
console.log(`[AppStore] Extension loaded successfully: ${extensionId}`);
|
|
143
|
+
return extensionModule;
|
|
154
144
|
} catch (error) {
|
|
155
|
-
console.error(`[AppStore] Failed to load extension from ${path}:`, error)
|
|
156
|
-
throw error
|
|
145
|
+
console.error(`[AppStore] Failed to load extension from ${path}:`, error);
|
|
146
|
+
throw error;
|
|
157
147
|
}
|
|
158
148
|
}
|
|
159
149
|
|
|
160
150
|
function getLoadedExtensions() {
|
|
161
|
-
return [...loadedExtensions.value.values()]
|
|
151
|
+
return [...loadedExtensions.value.values()];
|
|
162
152
|
}
|
|
163
153
|
|
|
164
154
|
function unloadExtension(id) {
|
|
165
|
-
const extensionData = getExtension(id)
|
|
155
|
+
const extensionData = getExtension(id);
|
|
166
156
|
if (!extensionData) {
|
|
167
|
-
return false
|
|
157
|
+
return false;
|
|
168
158
|
}
|
|
169
|
-
if (
|
|
170
|
-
extensionData.module &&
|
|
171
|
-
typeof extensionData.module.uninstall === "function"
|
|
172
|
-
) {
|
|
159
|
+
if (extensionData.module && typeof extensionData.module.uninstall === "function") {
|
|
173
160
|
try {
|
|
174
|
-
extensionData.module.uninstall(extensionAPI.value)
|
|
175
|
-
console.log(`[AppStore] Extension uninstall called: ${id}`)
|
|
161
|
+
extensionData.module.uninstall(extensionAPI.value);
|
|
162
|
+
console.log(`[AppStore] Extension uninstall called: ${id}`);
|
|
176
163
|
} catch (error) {
|
|
177
|
-
console.error(`[AppStore] Error calling uninstall for ${id}:`, error)
|
|
164
|
+
console.error(`[AppStore] Error calling uninstall for ${id}:`, error);
|
|
178
165
|
}
|
|
179
166
|
}
|
|
180
167
|
|
|
181
|
-
if (
|
|
182
|
-
extensionAPI.value
|
|
183
|
-
typeof extensionAPI.value.unregisterToolsByExtension === "function"
|
|
184
|
-
) {
|
|
185
|
-
extensionAPI.value.unregisterToolsByExtension(id)
|
|
168
|
+
if (extensionAPI.value && typeof extensionAPI.value.unregisterToolsByExtension === "function") {
|
|
169
|
+
extensionAPI.value.unregisterToolsByExtension(id);
|
|
186
170
|
}
|
|
187
171
|
|
|
188
|
-
loadedExtensions.value.delete(id)
|
|
189
|
-
console.log(`[AppStore] Extension unloaded: ${id}`)
|
|
190
|
-
return true
|
|
172
|
+
loadedExtensions.value.delete(id);
|
|
173
|
+
console.log(`[AppStore] Extension unloaded: ${id}`);
|
|
174
|
+
return true;
|
|
191
175
|
}
|
|
192
176
|
|
|
193
177
|
function toggleExtension(id) {
|
|
194
|
-
const extensionData = getExtension(id)
|
|
178
|
+
const extensionData = getExtension(id);
|
|
195
179
|
if (!extensionData) {
|
|
196
|
-
return false
|
|
180
|
+
return false;
|
|
197
181
|
}
|
|
198
|
-
extensionData.enabled = !extensionData.enabled
|
|
199
|
-
console.log(
|
|
200
|
-
|
|
201
|
-
)
|
|
202
|
-
return extensionData.enabled
|
|
182
|
+
extensionData.enabled = !extensionData.enabled;
|
|
183
|
+
console.log(`[AppStore] Extension ${extensionData.enabled ? "enabled" : "disabled"}: ${id}`);
|
|
184
|
+
return extensionData.enabled;
|
|
203
185
|
}
|
|
204
186
|
|
|
205
187
|
function setExtensionEnabled(id, enabled) {
|
|
206
|
-
const extensionData = getExtension(id)
|
|
188
|
+
const extensionData = getExtension(id);
|
|
207
189
|
if (!extensionData) {
|
|
208
|
-
return false
|
|
190
|
+
return false;
|
|
209
191
|
}
|
|
210
|
-
extensionData.enabled = enabled
|
|
211
|
-
console.log(
|
|
212
|
-
|
|
213
|
-
)
|
|
214
|
-
return true
|
|
192
|
+
extensionData.enabled = enabled;
|
|
193
|
+
console.log(`[AppStore] Extension ${enabled ? "enabled" : "disabled"}: ${id}`);
|
|
194
|
+
return true;
|
|
215
195
|
}
|
|
216
196
|
|
|
217
197
|
function getExtensionEnabled(id) {
|
|
218
|
-
return getExtension(id)?.enabled ?? false
|
|
198
|
+
return getExtension(id)?.enabled ?? false;
|
|
219
199
|
}
|
|
220
200
|
|
|
221
201
|
function upload(file, callbacks = {}) {
|
|
222
|
-
const route = "/api/extensions/upload"
|
|
223
|
-
const store = useAppStore()
|
|
202
|
+
const route = "/api/extensions/upload";
|
|
203
|
+
const store = useAppStore();
|
|
224
204
|
return upload_file(
|
|
225
205
|
store,
|
|
226
206
|
{ route, file },
|
|
227
207
|
{
|
|
228
208
|
...callbacks,
|
|
229
209
|
response_function: async (response) => {
|
|
230
|
-
console.log("[APP] Request completed:", route)
|
|
210
|
+
console.log("[APP] Request completed:", route);
|
|
231
211
|
if (callbacks.response_function) {
|
|
232
|
-
await callbacks.response_function(response)
|
|
212
|
+
await callbacks.response_function(response);
|
|
233
213
|
}
|
|
234
214
|
},
|
|
235
215
|
},
|
|
236
|
-
)
|
|
216
|
+
);
|
|
237
217
|
}
|
|
238
218
|
|
|
239
219
|
function request(schema, params, callbacks = {}) {
|
|
240
|
-
console.log("[APP] Request:", schema.$id)
|
|
220
|
+
console.log("[APP] Request:", schema.$id);
|
|
241
221
|
|
|
242
|
-
const store = useAppStore()
|
|
222
|
+
const store = useAppStore();
|
|
243
223
|
return api_fetch(
|
|
244
224
|
store,
|
|
245
225
|
{ schema, params },
|
|
246
226
|
{
|
|
247
227
|
...callbacks,
|
|
248
228
|
response_function: async (response) => {
|
|
249
|
-
console.log("[APP] Request completed:", schema.$id)
|
|
229
|
+
console.log("[APP] Request completed:", schema.$id);
|
|
250
230
|
if (callbacks.response_function) {
|
|
251
|
-
await callbacks.response_function(response)
|
|
231
|
+
await callbacks.response_function(response);
|
|
252
232
|
}
|
|
253
233
|
},
|
|
254
234
|
},
|
|
255
|
-
)
|
|
235
|
+
);
|
|
256
236
|
}
|
|
257
237
|
|
|
258
|
-
const request_counter = ref(0)
|
|
238
|
+
const request_counter = ref(0);
|
|
259
239
|
function start_request() {
|
|
260
|
-
request_counter.value += 1
|
|
240
|
+
request_counter.value += 1;
|
|
261
241
|
}
|
|
262
242
|
function stop_request() {
|
|
263
|
-
request_counter.value -= 1
|
|
243
|
+
request_counter.value -= 1;
|
|
264
244
|
}
|
|
265
245
|
|
|
266
|
-
const projectFolderPath = ref("")
|
|
246
|
+
const projectFolderPath = ref("");
|
|
267
247
|
function createProjectFolder() {
|
|
268
248
|
const schema = {
|
|
269
249
|
$id: "/api/app/project_folder_path",
|
|
@@ -272,18 +252,18 @@ export const useAppStore = defineStore("app", () => {
|
|
|
272
252
|
properties: {},
|
|
273
253
|
required: [],
|
|
274
254
|
additionalProperties: true,
|
|
275
|
-
}
|
|
255
|
+
};
|
|
276
256
|
|
|
277
257
|
return request(
|
|
278
258
|
schema,
|
|
279
259
|
{},
|
|
280
260
|
{
|
|
281
|
-
response_function:
|
|
282
|
-
console.log(`[APP] ${response.projectFolderPath} created`)
|
|
283
|
-
projectFolderPath.value = response.projectFolderPath
|
|
261
|
+
response_function: (response) => {
|
|
262
|
+
console.log(`[APP] ${response.projectFolderPath} created`);
|
|
263
|
+
projectFolderPath.value = response.projectFolderPath;
|
|
284
264
|
},
|
|
285
265
|
},
|
|
286
|
-
)
|
|
266
|
+
);
|
|
287
267
|
}
|
|
288
268
|
|
|
289
269
|
return {
|
|
@@ -308,5 +288,5 @@ export const useAppStore = defineStore("app", () => {
|
|
|
308
288
|
createProjectFolder,
|
|
309
289
|
start_request,
|
|
310
290
|
stop_request,
|
|
311
|
-
}
|
|
312
|
-
})
|
|
291
|
+
};
|
|
292
|
+
});
|