Skip to content

Commit b686f44

Browse files
committed
multi import data work arround
1 parent 9eda52e commit b686f44

File tree

4 files changed

+60
-35
lines changed

4 files changed

+60
-35
lines changed

composables/project_manager.js

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,18 @@ export function useProjectManager() {
3333
async function importProjectFile(file) {
3434
geode.start_request()
3535
try {
36-
console.log("[ProjectManager] Import start with file:", file?.name)
37-
38-
const infra = useInfraStore()
39-
await infra.create_connection()
40-
const schemaImport = back_schemas.opengeodeweb_back.import_project || {}
36+
await useInfraStore().create_connection()
4137

38+
const schemaImport = back_schemas.opengeodeweb_back.import_project
4239
const form = new FormData()
43-
form.append("file", file, file?.name || "project.zip")
40+
form.append("file", file, file?.name)
4441

4542
const result = await $fetch(schemaImport.$id, {
4643
baseURL: geode.base_url,
4744
method: "POST",
4845
body: form,
4946
})
50-
5147
const snapshot = result?.snapshot ?? {}
52-
console.log(
53-
"[ProjectManager] snapshot keys:",
54-
Object.keys(snapshot || {}),
55-
)
5648

5749
await viewer_call({
5850
schema: viewer_schemas.opengeodeweb_viewer.import_project,
@@ -65,18 +57,31 @@ export function useProjectManager() {
6557

6658
const treeviewStore = useTreeviewStore()
6759
treeviewStore.isImporting = true
68-
console.log("[ProjectManager] isImporting = true")
60+
await treeviewStore.importStores(snapshot?.treeview)
61+
62+
const hybridViewerStore = useHybridViewerStore()
63+
await hybridViewerStore.initHybridViewer()
64+
hybridViewerStore.clear()
65+
66+
const snapshotDataBase = snapshot?.dataBase?.db || {}
67+
const items = Object.entries(snapshotDataBase).map(([id, item]) => ({
68+
id,
69+
object_type: item.object_type,
70+
geode_object: item.geode_object,
71+
native_filename: item.native_filename,
72+
viewable_filename: item.viewable_filename,
73+
displayed_name: item.displayed_name,
74+
vtk_js: { binary_light_viewable: item?.vtk_js?.binary_light_viewable },
75+
}))
6976

70-
await appStore.importStores(snapshot)
71-
console.log("[ProjectManager] stores imported")
77+
await importWorkflowFromSnapshot(items)
7278

7379
const dataStyleStore = useDataStyleStore()
80+
await dataStyleStore.importStores(snapshot?.dataStyle)
7481
await dataStyleStore.applyAllStylesFromState()
75-
console.log("[ProjectManager] styles applied")
7682

7783
treeviewStore.finalizeImportSelection()
7884
treeviewStore.isImporting = false
79-
console.log("[ProjectManager] isImporting = false")
8085
} finally {
8186
geode.stop_request()
8287
}

stores/data_base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ export const useDataBaseStore = defineStore("dataBase", () => {
190190
getSurfacesUuids,
191191
getBlocksUuids,
192192
getFlatIndexes,
193-
exportStores, // maintenant défini
193+
exportStores,
194194
importStores,
195195
}
196196
})

stores/treeview.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export const useTreeviewStore = defineStore("treeview", () => {
88
const isTreeCollection = ref(false)
99
const selectedTree = ref(null)
1010
const isImporting = ref(false)
11-
// Buffer pour reconstruire la sélection après que les items soient recréés
1211
const pendingSelectionIds = ref([])
1312

1413
// /** Functions **/
@@ -24,7 +23,6 @@ export const useTreeviewStore = defineStore("treeview", () => {
2423
sensitivity: "base",
2524
}),
2625
)
27-
// Ne pas polluer la sélection pendant import; on la reconstruit ensuite
2826
if (!isImporting.value) {
2927
selection.value.push(child)
3028
}
@@ -65,28 +63,24 @@ export const useTreeviewStore = defineStore("treeview", () => {
6563
model_id: model_id.value,
6664
isTreeCollection: isTreeCollection.value,
6765
selectedTree: selectedTree.value,
68-
// Exporter uniquement les IDs pour éviter les problèmes de référence
6966
selectionIds: selection.value.map((c) => c.id),
7067
}
7168
}
7269

7370
async function importStores(snapshot) {
74-
// Charger l’état UI
7571
isAdditionnalTreeDisplayed.value =
7672
snapshot?.isAdditionnalTreeDisplayed || false
7773
panelWidth.value = snapshot?.panelWidth || 300
7874
model_id.value = snapshot?.model_id || ""
7975
isTreeCollection.value = snapshot?.isTreeCollection || false
8076
selectedTree.value = snapshot?.selectedTree || null
8177

82-
// Bufferiser les IDs de sélection (compat v1: snapshot.selection -> ids)
8378
pendingSelectionIds.value =
8479
snapshot?.selectionIds ||
8580
(snapshot?.selection || []).map((c) => c.id) ||
8681
[]
8782
}
8883

89-
// Appeler après import pour reconstruire la sélection à partir des items
9084
function finalizeImportSelection() {
9185
const ids = pendingSelectionIds.value || []
9286
const rebuilt = []

utils/file_import_workflow.js

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import { useHybridViewerStore } from "../stores/hybrid_viewer"
66

77
async function importWorkflow(files) {
88
console.log("importWorkflow", { files })
9-
const promise_array = []
10-
for (const file of files) {
11-
const { filename, geode_object } = file
9+
const results = []
10+
for (const { filename, geode_object } of files) {
1211
console.log({ filename }, { geode_object })
13-
promise_array.push(importFile(filename, geode_object))
12+
const id = await importFile(filename, geode_object)
13+
results.push(id)
1414
}
15-
return Promise.all(promise_array)
15+
return results
1616
}
1717

1818
async function importFile(filename, geode_object) {
@@ -53,12 +53,9 @@ async function importFile(filename, geode_object) {
5353
},
5454
})
5555

56-
await treeviewStore.addItem(geode_object, name, id, object_type)
57-
58-
console.log("after treeviewStore.addItem")
59-
60-
await hybridViewerStore.addItem(id)
61-
console.log("after dataBaseStore.addItem")
56+
// await treeviewStore.addItem(geode_object, name, id, object_type)
57+
// await hybridViewerStore.addItem(id)
58+
// console.log("after dataBaseStore.addItem")
6259

6360
await dataStyleStore.addDataStyle(
6461
data._value.id,
@@ -79,4 +76,33 @@ async function importFile(filename, geode_object) {
7976
return data._value.id
8077
}
8178

82-
export { importFile, importWorkflow }
79+
async function importWorkflowFromSnapshot(items) {
80+
const dataBaseStore = useDataBaseStore()
81+
const ids = []
82+
for (const item of items) {
83+
const {
84+
id,
85+
object_type,
86+
geode_object,
87+
native_filename,
88+
viewable_filename,
89+
displayed_name,
90+
vtk_js,
91+
} = item
92+
93+
await dataBaseStore.registerObject(id)
94+
await dataBaseStore.addItem(id, {
95+
object_type,
96+
geode_object,
97+
native_filename,
98+
viewable_filename,
99+
displayed_name,
100+
vtk_js,
101+
})
102+
103+
ids.push(id)
104+
}
105+
return ids
106+
}
107+
108+
export { importFile, importWorkflow, importWorkflowFromSnapshot }

0 commit comments

Comments
 (0)