Skip to content

Commit f6c1304

Browse files
committed
Merge branch 'feat/save_and_load' of https://github.com/Geode-solutions/OpenGeodeWeb-Front into feat/save_and_load
2 parents bbfc846 + 1535343 commit f6c1304

File tree

4 files changed

+110
-8
lines changed

4 files changed

+110
-8
lines changed

composables/project_manager.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,19 @@ export function useProjectManager() {
5050
method: "POST",
5151
body: form,
5252
})
53-
console.log("[ProjectManager] snapshot keys:", Object.keys(result?.snapshot || {}))
53+
console.log(
54+
"[ProjectManager] snapshot keys:",
55+
Object.keys(result?.snapshot || {}),
56+
)
5457

55-
await viewer_call({ schema: viewer_schemas.opengeodeweb_viewer.import_project, params: {} })
56-
await viewer_call({ schema: viewer_schemas.opengeodeweb_viewer.viewer.reset_visualization, params: {} })
58+
await viewer_call({
59+
schema: viewer_schemas.opengeodeweb_viewer.import_project,
60+
params: {},
61+
})
62+
await viewer_call({
63+
schema: viewer_schemas.opengeodeweb_viewer.viewer.reset_visualization,
64+
params: {},
65+
})
5766

5867
const treeviewStore = useTreeviewStore()
5968
treeviewStore.isImporting = true

internal_stores/mesh/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,12 @@ export default function useMeshStyle() {
3939

4040
function applyMeshStyle(id) {
4141
const style = dataStyleStore.getStyle(id)
42-
console.log("[MeshStyle] applyMeshDefaultStyle for id:", id, "style:", style)
42+
console.log(
43+
"[MeshStyle] applyMeshDefaultStyle for id:",
44+
id,
45+
"style:",
46+
style,
47+
)
4348
const promise_array = []
4449
for (const [key, value] of Object.entries(style)) {
4550
if (key === "visibility") {

stores/data_base.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,30 @@ export const useDataBaseStore = defineStore("dataBase", () => {
5959
vtk_js: { binary_light_viewable },
6060
},
6161
) {
62-
console.log("[DataBase] addItem start", { id, object_type: value.object_type, geode_object: value.geode_object })
62+
console.log("[DataBase] addItem start", {
63+
id,
64+
object_type: value.object_type,
65+
geode_object: value.geode_object,
66+
})
6367
db[id] = value
68+
69+
if (value.object_type === "model") {
70+
await fetchMeshComponents(id)
71+
await fetchUuidToFlatIndexDict(id)
72+
}
73+
74+
treeview_store.addItem(
75+
value.geode_object,
76+
value.displayed_name,
77+
id,
78+
value.object_type,
79+
)
80+
console.log("[DataBase] addItem -> treeview.addItem done", id)
81+
82+
console.log("[DataBase] addItem -> hybridViewer.addItem start", id)
83+
// Ajout viewer (potentiellement asynchrone)
84+
await hybridViewerStore.addItem(id, value.vtk_js)
85+
console.log("[DataBase] addItem -> hybridViewer.addItem done", id)
6486
}
6587

6688
async function fetchMeshComponents(id) {

stores/data_style.js

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,76 @@ export const useDataStyleStore = defineStore("dataStyle", () => {
3333
if (object_type === "mesh") {
3434
return meshStyleStore.applyMeshStyle(id)
3535
} else if (object_type === "model") {
36-
return modelStyleStore.applyModelStyle(id)
37-
} else {
38-
throw new Error("Unknown object_type: " + object_type)
36+
return Promise.all([modelStyleStore.setModelVisibility(id, visible)])
3937
}
38+
return Promise.resolve([])
39+
}
40+
41+
function setModelEdgesVisibility(id, visibility) {
42+
modelStyleStore.setModelMeshComponentVisibility(
43+
id,
44+
"Edge",
45+
null,
46+
visibility,
47+
)
48+
}
49+
50+
function modelEdgesVisibility(id) {
51+
return modelStyleStore.modelMeshComponentVisibility(id, "Edge", null)
52+
}
53+
54+
function exportStores() {
55+
return { styles: dataStyleState.styles }
56+
}
57+
58+
async function importStores(snapshot) {
59+
const stylesSnapshot = snapshot?.styles || {}
60+
console.log(
61+
"[DataStyle] importStores snapshot ids:",
62+
Object.keys(stylesSnapshot),
63+
)
64+
65+
// Conserver la référence réactive -> clear + merge
66+
for (const id of Object.keys(dataStyleState.styles))
67+
delete dataStyleState.styles[id]
68+
for (const [id, style] of Object.entries(stylesSnapshot)) {
69+
dataStyleState.styles[id] = style
70+
}
71+
console.log(
72+
"[DataStyle] importStores merged ids:",
73+
Object.keys(dataStyleState.styles),
74+
)
75+
}
76+
77+
async function applyAllStylesFromState() {
78+
const ids = Object.keys(dataStyleState.styles || {})
79+
console.log("[DataStyle] applyAllStylesFromState start ids:", ids)
80+
81+
// Séquentiel par id pour mieux tracer et éviter les courses
82+
for (const id of ids) {
83+
const meta = dataBaseStore.itemMetaDatas(id)
84+
const objectType = meta?.object_type
85+
const style = dataStyleState.styles[id]
86+
if (!style || !objectType) {
87+
console.warn("[DataStyle] applyAllStylesFromState skip:", {
88+
id,
89+
hasStyle: !!style,
90+
objectType,
91+
})
92+
continue
93+
}
94+
console.log("[DataStyle] applyAllStylesFromState applying:", {
95+
id,
96+
objectType,
97+
})
98+
if (objectType === "mesh") {
99+
await meshStyleStore.applyMeshDefaultStyle(id)
100+
} else if (objectType === "model") {
101+
await modelStyleStore.applyModelDefaultStyle(id)
102+
}
103+
console.log("[DataStyle] applyAllStylesFromState applied:", id)
104+
}
105+
console.log("[DataStyle] applyAllStylesFromState finished")
40106
}
41107

42108
return {

0 commit comments

Comments
 (0)