11import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json"
22import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json"
33import fileDownload from "js-file-download"
4- import { useAppStore } from "../stores/app.js"
5- import { useGeodeStore } from "../stores/geode.js"
6- import { useInfraStore } from "../stores/infra.js"
7- import { viewer_call } from "./viewer_call.js"
8- import { api_fetch } from "./api_fetch.js"
4+
95
106export function useProjectManager ( ) {
11- const appStore = useAppStore ( )
127 const geode = useGeodeStore ( )
8+ const appStore = useAppStore ( )
139
1410 async function exportProject ( ) {
1511 geode . start_request ( )
@@ -41,83 +37,19 @@ export function useProjectManager() {
4137 const infra = useInfraStore ( )
4238 await infra . create_connection ( )
4339
44- const isJson = ( file . name || "" ) . toLowerCase ( ) . endsWith ( ".json" )
45- if ( isJson ) {
46- const snapshot = JSON . parse ( await file . text ( ) )
47- await viewer_call ( {
48- schema : viewer_schemas . opengeodeweb_viewer . import_project ,
49- params : { } ,
50- } )
51- await viewer_call ( {
52- schema : viewer_schemas . opengeodeweb_viewer . viewer . reset_visualization ,
53- params : { } ,
54- } )
55- await appStore . importStores ( snapshot )
56- return
57- }
58-
59- // Import ZIP → multipart/form-data
6040 const form = new FormData ( )
6141 form . append ( "file" , file , file . name || "project.zip" )
6242
63- const importId =
43+ const importPath =
6444 back_schemas . opengeodeweb_back . import_project ?. $id ||
6545 "opengeodeweb_back/import_project"
66- const importURL = new URL (
67- "/" + String ( importId ) ,
68- infra ?. base_url || window . location . origin ,
69- ) . toString ( )
7046
71- let result
72- try {
73- result = await $fetch ( importURL , { method : "POST" , body : form } )
74- } catch ( error ) {
75- const status = error ?. response ?. status ?? error ?. status
76- const data = error ?. response ?. _data ?? error ?. data
77- if ( status === 423 ) {
78- await viewer_call ( {
79- schema :
80- viewer_schemas . opengeodeweb_viewer . viewer . reset_visualization ,
81- params : { } ,
82- } )
83- result = await $fetch ( importURL , { method : "POST" , body : form } )
84- } else {
85- console . error ( "Backend import_project erreur:" , data ?? error )
86- }
87- }
88-
89- // Si le backend renvoie un snapshot, on met à jour les stores
90- if ( result ?. snapshot ) {
91- await appStore . importStores ( result . snapshot )
92- }
93-
94- // Si pas de viewables prêts, on tente des conversions courantes
95- const needsViewables = result ?. viewables_ready === false || result == null
96- if ( needsViewables ) {
97- const candidates = [
98- { input_geode_object : "BRep" , filename : "native/main.og_brep" } ,
99- {
100- input_geode_object : "SurfaceMesh" ,
101- filename : "native/main.og_mesh" ,
102- } ,
103- ]
104- for ( const c of candidates ) {
105- try {
106- await api_fetch ( {
107- schema : back_schemas . opengeodeweb_back . save_viewable_file ,
108- params : {
109- input_geode_object : c . input_geode_object ,
110- filename : c . filename ,
111- } ,
112- } )
113- break
114- } catch ( _ ) {
115- // On ignore et on essaie le candidat suivant
116- }
117- }
118- }
47+ const result = await $fetch ( importPath , {
48+ baseURL : geode . base_url ,
49+ method : "POST" ,
50+ body : form ,
51+ } )
11952
120- // Synchronisation Viewer
12153 await viewer_call ( {
12254 schema : viewer_schemas . opengeodeweb_viewer . import_project ,
12355 params : { } ,
@@ -126,10 +58,45 @@ export function useProjectManager() {
12658 schema : viewer_schemas . opengeodeweb_viewer . viewer . reset_visualization ,
12759 params : { } ,
12860 } )
61+
62+ await appStore . importStores ( result . snapshot )
63+
64+ const dataBaseStore = useDataBaseStore ( )
65+ for ( const [ id , item ] of Object . entries ( dataBaseStore . items ) ) {
66+ const registerSchema =
67+ item . object_type === "model"
68+ ? viewer_schemas . opengeodeweb_viewer . model . register
69+ : viewer_schemas . opengeodeweb_viewer . mesh . register
70+ await viewer_call ( { schema : registerSchema , params : { id } } )
71+
72+ if ( item . vtk_js ?. binary_light_viewable ) {
73+ await viewer_call ( {
74+ schema : viewer_schemas . opengeodeweb_viewer . viewer . update_data ,
75+ params : {
76+ id,
77+ vtk_js : {
78+ binary_light_viewable : item . vtk_js . binary_light_viewable ,
79+ } ,
80+ } ,
81+ } )
82+ }
83+
84+ if ( item . viewable_filename ) {
85+ await viewer_call ( {
86+ schema : viewer_schemas . opengeodeweb_viewer . viewer . update_data ,
87+ params : {
88+ id,
89+ vtk_js : { viewable_file_name : item . viewable_filename } ,
90+ } ,
91+ } )
92+ }
93+ }
12994 } finally {
13095 geode . stop_request ( )
13196 }
13297 }
13398
13499 return { exportProject, importProjectFile }
135100}
101+
102+ export default useProjectManager
0 commit comments