From 6e3b3ef67888a1f6f59c81628fd203e2de2e1cd1 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Thu, 27 Mar 2025 12:05:11 +0100 Subject: [PATCH 01/19] fix(ping): bad request if body empty --- stores/geode.js | 1 + 1 file changed, 1 insertion(+) diff --git a/stores/geode.js b/stores/geode.js index e4b1c813..3cd36692 100644 --- a/stores/geode.js +++ b/stores/geode.js @@ -48,6 +48,7 @@ export const use_geode_store = defineStore("geode", { return useFetch(back_schemas.opengeodeweb_back.ping.$id, { baseURL: this.base_url, method: back_schemas.opengeodeweb_back.ping.methods[0], + body: {}, onRequestError({ error }) { feedback_store.server_error = true geode_store.is_running = false From ee92d5a89bdff0072dc5a32f7f53bf659d270876 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Thu, 3 Apr 2025 17:13:30 +0200 Subject: [PATCH 02/19] refactor stores wip --- components/Launcher.vue | 2 +- components/RemoteRenderingView.vue | 13 ++- stores/geode.js | 14 ++-- stores/infra.js | 85 +++++++++++--------- stores/viewer.js | 122 ++++++++++++++++------------- utils/status.js | 10 +++ 6 files changed, 143 insertions(+), 103 deletions(-) create mode 100644 utils/status.js diff --git a/components/Launcher.vue b/components/Launcher.vue index e2ca1464..36bbe6f4 100644 --- a/components/Launcher.vue +++ b/components/Launcher.vue @@ -29,7 +29,7 @@ watch(is_captcha_validated, async (value) => { if (value === true && process.client) { await infra_store.create_connexion() - await viewer_store.ws_connect() + await viewer_store.connect() } }) diff --git a/components/RemoteRenderingView.vue b/components/RemoteRenderingView.vue index ab7a8315..d8424d76 100644 --- a/components/RemoteRenderingView.vue +++ b/components/RemoteRenderingView.vue @@ -24,17 +24,16 @@ import vtkRemoteView from "@kitware/vtk.js/Rendering/Misc/RemoteView" import { useElementSize, useWindowSize } from "@vueuse/core" import viewer_schemas from "@geode/opengeodeweb-viewer/schemas.json" + import Status from "../utils/status" const viewer_store = use_viewer_store() - const { client, is_running, picking_mode } = storeToRefs(viewer_store) - const viewer = ref(null) const { width, height } = useElementSize(viewer) const { width: windowWidth, height: windowHeight } = useWindowSize() function get_x_y(event) { - if (picking_mode.value === true) { + if (viewer_store.picking_mode.value === true) { const { offsetX, offsetY } = event viewer_store.set_picked_point(offsetX, offsetY) viewer_call({ @@ -70,7 +69,7 @@ resize() }) - watch(picking_mode, (value) => { + watch(viewer_store.picking_mode, (value) => { const cursor = value ? "crosshair" : "pointer" view.getCanvasView().setCursor(cursor) }) @@ -79,7 +78,7 @@ resize() }) - watch(client, () => { + watch(viewer_store.client, () => { connect() }) @@ -91,10 +90,10 @@ }) function connect() { - if (!is_running.value) { + if (!viewer_store.status !== Status.CONNECTED) { return } - const session = client.value.getConnection().getSession() + const session = viewer_store.client.value.getConnection().getSession() view.setSession(session) view.setViewId(viewId.value) connected.value = true diff --git a/stores/geode.js b/stores/geode.js index 3cd36692..9ffcf5d4 100644 --- a/stores/geode.js +++ b/stores/geode.js @@ -1,10 +1,11 @@ import back_schemas from "@geode/opengeodeweb-back/schemas.json" +import Status from "../utils/status" export const use_geode_store = defineStore("geode", { state: () => ({ default_local_port: "5000", request_counter: 0, - is_running: false, + status: Status.NOT_CONNECTED, }), getters: { protocol() { @@ -37,7 +38,7 @@ export const use_geode_store = defineStore("geode", { actions: { ping_task() { setInterval(() => { - if (this.is_running) { + if (this.status == Status.CONNECTED) { this.do_ping() } }, 10 * 1000) @@ -51,17 +52,17 @@ export const use_geode_store = defineStore("geode", { body: {}, onRequestError({ error }) { feedback_store.server_error = true - geode_store.is_running = false + geode_store.status = Status.NOT_CONNECTED }, onResponse({ response }) { if (response.ok) { feedback_store.server_error = false - geode_store.is_running = true + geode_store.status = Status.CONNECTED } }, onResponseError({ response }) { feedback_store.server_error = true - geode_store.is_running = false + geode_store.status = Status.NOT_CONNECTED }, }) }, @@ -72,4 +73,7 @@ export const use_geode_store = defineStore("geode", { this.request_counter-- }, }, + share: { + omit: ["status"], + }, }) diff --git a/stores/infra.js b/stores/infra.js index da32c5db..7fed71ba 100644 --- a/stores/infra.js +++ b/stores/infra.js @@ -1,11 +1,12 @@ import { useStorage } from "@vueuse/core" import isElectron from "is-electron" +import Status from "../utils/status" export const use_infra_store = defineStore("infra", { state: () => ({ ID: useStorage("ID", ""), is_captcha_validated: false, - is_connexion_launched: false, + status: Status.NOT_CREATED, }), getters: { is_cloud() { @@ -34,47 +35,61 @@ export const use_infra_store = defineStore("infra", { "/createbackend" return url }, - is_running() { - return use_geode_store().is_running && use_viewer_store().is_running + microservices_connected() { + return ( + use_geode_store().status == Status.CONNECTED && + use_viewer_store().status == Status.CONNECTED + ) }, - is_busy() { + microservices_busy() { return use_geode_store().is_busy || use_viewer_store().is_busy }, }, actions: { - async create_connexion() { - if (this.is_connexion_launched) { - return - } - this.is_connexion_launched = true - return this.create_backend() - }, async create_backend() { - const geode_store = use_geode_store() - const viewer_store = use_viewer_store() - const feedback_store = use_feedback_store() - - if (isElectron()) { - const back_port = await window.electronAPI.run_back(geode_store.port) - geode_store.$patch({ default_local_port: back_port }) - const viewer_port = await window.electronAPI.run_viewer( - viewer_store.port, - ) - viewer_store.$patch({ default_local_port: viewer_port }) - } else { - const { data, error } = await useFetch(this.lambda_url, { - method: "POST", - }) - if (data.value !== null) { - this.ID = data.value.ID - localStorage.setItem("ID", data.value.ID) - } else { - feedback_store.server_error = true - return - } + if (this.status in [Status.CREATING, Status.CREATED]) { + return } - geode_store.$patch({ is_running: true }) - return geode_store.ping_task() + navigator.locks.request( + "infra.create_backend", + { mode: "shared" }, + async (lock) => { + this.status = Status.CREATING + console.log("LOCK", lock) + if (lock) { + console.log("LOCKED") + this.status = Status.CREATING + const geode_store = use_geode_store() + const viewer_store = use_viewer_store() + const feedback_store = use_feedback_store() + if (isElectron()) { + const back_port = await window.electronAPI.run_back( + geode_store.port, + ) + geode_store.$patch({ default_local_port: back_port }) + const viewer_port = await window.electronAPI.run_viewer( + viewer_store.port, + ) + viewer_store.$patch({ default_local_port: viewer_port }) + } else { + const { data, error } = await useFetch(this.lambda_url, { + method: "POST", + }) + if (data.value !== null) { + this.ID = data.value.ID + localStorage.setItem("ID", data.value.ID) + } else { + feedback_store.server_error = true + return + } + } + this.status = Status.CREATED + geode_store.ping_task() + viewer_store.connect() + return + } + }, + ) }, }, }) diff --git a/stores/viewer.js b/stores/viewer.js index 40ebb2c3..7f93ddd7 100644 --- a/stores/viewer.js +++ b/stores/viewer.js @@ -2,16 +2,17 @@ import _ from "lodash" import vtkWSLinkClient from "@kitware/vtk.js/IO/Core/WSLinkClient" import "@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry" import schemas from "@geode/opengeodeweb-viewer/schemas.json" +import Status from "../utils/status" export const use_viewer_store = defineStore("viewer", { state: () => ({ default_local_port: "1234", client: {}, config: null, - is_running: false, picking_mode: false, picked_point: { x: null, y: null }, request_counter: 0, + status: Status.NOT_CONNECTED, }), getters: { protocol() { @@ -55,71 +56,79 @@ export const use_viewer_store = defineStore("viewer", { this.picked_point.y = world_y this.picking_mode = false }, - async ws_connect() { + async connect() { if (process.env.NODE_ENV == "test") { return } - const SmartConnect = await import("wslink/src/SmartConnect") - vtkWSLinkClient.setSmartConnectClass(SmartConnect) + navigator.locks.request("viewer.connect", async (lock) => { + this.status = Status.CONNECTING + if (lock) { + this.status = Status.CONNECTING + const SmartConnect = await import("wslink/src/SmartConnect") + vtkWSLinkClient.setSmartConnectClass(SmartConnect) - const config = { application: "Viewer" } - config.sessionURL = this.base_url + const config = { application: "Viewer" } + config.sessionURL = this.base_url - const { client } = this - if (this.is_running && client.isConnected()) { - client.disconnect(-1) - this.is_running = false - } - let clientToConnect = client - if (_.isEmpty(clientToConnect)) { - clientToConnect = vtkWSLinkClient.newInstance() - } + const { client } = this + if (this.is_running && client.isConnected()) { + client.disconnect(-1) + this.is_running = false + } + let clientToConnect = client + if (_.isEmpty(clientToConnect)) { + clientToConnect = vtkWSLinkClient.newInstance() + } - // Connect to busy store - clientToConnect.onBusyChange((count) => { - this.buzy = count - }) - clientToConnect.beginBusy() + // Connect to busy store + clientToConnect.onBusyChange((count) => { + this.buzy = count + }) + clientToConnect.beginBusy() - // Error - clientToConnect.onConnectionError((httpReq) => { - const message = - (httpReq && httpReq.response && httpReq.response.error) || - `Connection error` - console.error(message) - }) + // Error + clientToConnect.onConnectionError((httpReq) => { + const message = + (httpReq && httpReq.response && httpReq.response.error) || + `Connection error` + console.error(message) + }) - // Close - clientToConnect.onConnectionClose((httpReq) => { - const message = - (httpReq && httpReq.response && httpReq.response.error) || - `Connection close` - console.error(message) - }) + // Close + clientToConnect.onConnectionClose((httpReq) => { + const message = + (httpReq && httpReq.response && httpReq.response.error) || + `Connection close` + console.error(message) + }) - // Connect - const { connectImageStream } = await import( - "@kitware/vtk.js/Rendering/Misc/RemoteView" - ) - return new Promise((resolve, reject) => { - clientToConnect - .connect(config) - .then((validClient) => { - connectImageStream(validClient.getConnection().getSession()) - this.client = validClient - clientToConnect.endBusy() + // Connect + const { connectImageStream } = await import( + "@kitware/vtk.js/Rendering/Misc/RemoteView" + ) + return new Promise((resolve, reject) => { + clientToConnect + .connect(config) + .then((validClient) => { + connectImageStream(validClient.getConnection().getSession()) + this.client = validClient + clientToConnect.endBusy() - // Now that the client is ready let's setup the server for us - viewer_call({ - schema: schemas.opengeodeweb_viewer.viewer.reset_visualization, - }) - this.is_running = true - resolve() - }) - .catch((error) => { - console.error(error) - reject(error) + // Now that the client is ready let's setup the server for us + viewer_call({ + schema: + schemas.opengeodeweb_viewer.viewer.reset_visualization, + }) + this.status = Status.CONNECTED + resolve() + }) + .catch((error) => { + console.error(error) + this.status = Status.NOT_CONNECTED + reject(error) + }) }) + } }) }, start_request() { @@ -129,4 +138,7 @@ export const use_viewer_store = defineStore("viewer", { this.request_counter-- }, }, + share: { + omit: ["status", "client"], + }, }) diff --git a/utils/status.js b/utils/status.js new file mode 100644 index 00000000..7532411e --- /dev/null +++ b/utils/status.js @@ -0,0 +1,10 @@ +const Status = { + NOT_CREATED: "NOT_CREATED", + CREATING: "CREATING", + CREATED: "CREATED", + NOT_CONNECTED: "NOT_CONNECTED", + CONNECTING: "CONNECTING", + CONNECTED: "CONNECTED", +} + +export default Status From 5a97467b93054235daa8529197193109cb536220 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 8 Apr 2025 11:59:00 +0200 Subject: [PATCH 03/19] wip unit tests --- components/Launcher.vue | 9 +- components/PackagesVersions.vue | 3 +- components/Wrapper.vue | 21 +-- .../run_function_when_infra_created.js | 15 ++ .../run_function_when_infra_running.js | 15 -- nuxt.config.js | 1 + stores/geode.js | 2 +- stores/infra.js | 77 +++++------ stores/viewer.js | 130 +++++++++--------- test/components/Launcher.nuxt.test.js | 2 +- ...n_function_when_infra_created.nuxt.test.js | 31 +++++ ...n_function_when_infra_running.nuxt.test.js | 30 ---- test/stores/Geode.nuxt.test.js | 7 +- test/stores/Infra.nuxt.test.js | 48 +++---- test/stores/Viewer.nuxt.test.js | 2 +- utils/status.js | 2 +- 16 files changed, 199 insertions(+), 196 deletions(-) create mode 100644 composables/run_function_when_infra_created.js delete mode 100644 composables/run_function_when_infra_running.js create mode 100644 test/composables/run_function_when_infra_created.nuxt.test.js delete mode 100644 test/composables/run_function_when_infra_running.nuxt.test.js diff --git a/components/Launcher.vue b/components/Launcher.vue index 36bbe6f4..25a5d749 100644 --- a/components/Launcher.vue +++ b/components/Launcher.vue @@ -11,7 +11,7 @@

Please complete the recaptcha to launch the app

- + @@ -19,16 +19,17 @@ diff --git a/stores/infra.js b/stores/infra.js index 4f7c310e..b6395874 100644 --- a/stores/infra.js +++ b/stores/infra.js @@ -47,15 +47,11 @@ export const use_infra_store = defineStore("infra", { }, actions: { async create_backend() { - console.log("create_backend", this.status) if (this.status === Status.CREATED) return - console.log("NAVIGATOR", navigator) navigator.locks.request("infra.create_backend", async (lock) => { - console.log("PASSED IN LOCK", this.status) this.status = Status.CREATING if (this.status === Status.CREATED) return - console.log("INFRA LOCK GRANTED !", lock) - console.log("INFRA STATUS", this.status) + console.log("LOCK GRANTED !", lock) const geode_store = use_geode_store() const viewer_store = use_viewer_store() const feedback_store = use_feedback_store() diff --git a/stores/viewer.js b/stores/viewer.js index 2698309c..c8e3a743 100644 --- a/stores/viewer.js +++ b/stores/viewer.js @@ -58,10 +58,7 @@ export const use_viewer_store = defineStore("viewer", { }, async ws_connect() { if (process.env.NODE_ENV == "test") return - console.log("ws_connect 1", this.status) if (this.status === Status.CONNECTED) return - console.log("ws_connect 2", this.status) - navigator.locks.request("viewer.ws_connect", async (lock) => { console.log("VIEWER STATUS", this.status) if (this.status === Status.CONNECTED) return diff --git a/test/stores/Infra.nuxt.test.js b/test/stores/Infra.nuxt.test.js index a8e5123f..ed95625d 100644 --- a/test/stores/Infra.nuxt.test.js +++ b/test/stores/Infra.nuxt.test.js @@ -9,19 +9,14 @@ const mockLockRequest = vi.fn().mockImplementation(async (name, callback) => { return callback({ name }) }) -vi.stubGlobal('navigator', { +vi.stubGlobal("navigator", { ...navigator, locks: { - request: mockLockRequest - } + request: mockLockRequest, + }, }) describe("Infra Store", () => { - // const locksMock = { - // locks: { request: vi.fn() }, - // } - // global.navigator = locksMock // here - const pinia = createTestingPinia({ stubActions: false, }) From ad05157305f6ce98db4d7d22ac7d086b7a34b0a1 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 15 Apr 2025 13:41:47 +0200 Subject: [PATCH 07/19] pr comments / coverage --- components/PackagesVersions.vue | 10 +-- ...n_function_when_microservices_connected.js | 2 - package.json | 3 +- test/components/Launcher.nuxt.test.js | 83 ++++++++++--------- 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/components/PackagesVersions.vue b/components/PackagesVersions.vue index b4333cee..9700052b 100644 --- a/components/PackagesVersions.vue +++ b/components/PackagesVersions.vue @@ -19,13 +19,13 @@ diff --git a/components/PackagesVersions.vue b/components/PackagesVersions.vue index f56a50c1..f6e132a6 100644 --- a/components/PackagesVersions.vue +++ b/components/PackagesVersions.vue @@ -19,9 +19,6 @@ diff --git a/components/Recaptcha.vue b/components/Recaptcha.vue index a2796666..0c4902d4 100644 --- a/components/Recaptcha.vue +++ b/components/Recaptcha.vue @@ -2,10 +2,10 @@ @@ -14,12 +14,10 @@ diff --git a/components/RemoteRenderingView.vue b/components/RemoteRenderingView.vue index cf55461e..7aa76884 100644 --- a/components/RemoteRenderingView.vue +++ b/components/RemoteRenderingView.vue @@ -97,7 +97,7 @@ ) function connect() { - if (!viewer_store.status !== Status.CONNECTED) { + if (viewer_store.status !== Status.CONNECTED) { return } const session = viewer_store.client.value.getConnection().getSession() diff --git a/composables/run_function_when_microservices_connected.js b/composables/run_function_when_microservices_connected.js index 98aea2d6..f861af0d 100644 --- a/composables/run_function_when_microservices_connected.js +++ b/composables/run_function_when_microservices_connected.js @@ -1,7 +1,7 @@ export function run_function_when_microservices_connected(function_to_run) { const infra_store = use_infra_store() const { microservices_connected } = storeToRefs(infra_store) - if (microservices_connected.value) { + if (microservices_connected) { function_to_run() } else { watch(microservices_connected, (value) => { diff --git a/stores/infra.js b/stores/infra.js index e9e5e795..096c0aed 100644 --- a/stores/infra.js +++ b/stores/infra.js @@ -6,7 +6,7 @@ export const use_infra_store = defineStore("infra", { state: () => ({ ID: useStorage("ID", ""), is_captcha_validated: - is_cloud() || process.env.NODE_ENV === "development" ? true : false, + !this.is_cloud() || process.env.NODE_ENV === "development", status: Status.NOT_CREATED, }), getters: { From 139eae9c3e54bbd3bf32124a78329ac654056fc8 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 14:17:19 +0200 Subject: [PATCH 12/19] fixes --- composables/run_function_when_microservices_connected.js | 2 +- stores/infra.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/composables/run_function_when_microservices_connected.js b/composables/run_function_when_microservices_connected.js index f861af0d..98aea2d6 100644 --- a/composables/run_function_when_microservices_connected.js +++ b/composables/run_function_when_microservices_connected.js @@ -1,7 +1,7 @@ export function run_function_when_microservices_connected(function_to_run) { const infra_store = use_infra_store() const { microservices_connected } = storeToRefs(infra_store) - if (microservices_connected) { + if (microservices_connected.value) { function_to_run() } else { watch(microservices_connected, (value) => { diff --git a/stores/infra.js b/stores/infra.js index 096c0aed..b6395874 100644 --- a/stores/infra.js +++ b/stores/infra.js @@ -5,8 +5,7 @@ import Status from "@/utils/status.js" export const use_infra_store = defineStore("infra", { state: () => ({ ID: useStorage("ID", ""), - is_captcha_validated: - !this.is_cloud() || process.env.NODE_ENV === "development", + is_captcha_validated: false, status: Status.NOT_CREATED, }), getters: { From 442931914b853b798c7d50c734edec3d702f4c4e Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 14:59:30 +0200 Subject: [PATCH 13/19] fix(feddbackId): add id for callback feedback delete --- components/FeedBack/Snackers.vue | 2 +- package.json | 1 + stores/feedback.js | 18 ++++++++++++------ test/stores/Feedback.nuxt.test.js | 21 +++++++++++++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/components/FeedBack/Snackers.vue b/components/FeedBack/Snackers.vue index 881e7752..a1343f85 100644 --- a/components/FeedBack/Snackers.vue +++ b/components/FeedBack/Snackers.vue @@ -51,7 +51,7 @@ variant="flat" size="20" :color="feedback.type" - @click="feedback_store.delete_feedback(index)" + @click="feedback_store.delete_feedback(feedback.id)" > diff --git a/package.json b/package.json index 677d1eed..da9d38aa 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "pinia": "^2.2.2", "sass": "^1.77.8", "semver": "^7.6.3", + "uuid": "^11.1.0", "vue-recaptcha": "^2.0.3", "vue3-carousel": "^0.3.3" }, diff --git a/stores/feedback.js b/stores/feedback.js index 0bea6c86..c8f2d8a3 100644 --- a/stores/feedback.js +++ b/stores/feedback.js @@ -1,3 +1,5 @@ +import { v4 as uuidv4 } from "uuid" + export const use_feedback_store = defineStore("feedback", { state: () => ({ feedbacks: [], @@ -6,30 +8,34 @@ export const use_feedback_store = defineStore("feedback", { }), actions: { async add_error(code, route, name, description) { + const feedbackId = uuidv4() await this.feedbacks.push({ + id: feedbackId, type: "error", code, route, name, description, }) - const feedback_index = this.feedbacks.length - 1 setTimeout(() => { - this.delete_feedback(feedback_index) + this.delete_feedback(feedbackId) }, this.feedbacks_timeout_miliseconds) }, async add_success(description) { + const feedbackId = uuidv4() await this.feedbacks.push({ + id: feedbackId, type: "success", description, }) - const feedback_index = this.feedbacks.length - 1 setTimeout(() => { - this.delete_feedback(feedback_index) + this.delete_feedback(feedbackId) }, this.feedbacks_timeout_miliseconds) }, - async delete_feedback(feedback_index) { - await this.feedbacks.splice(feedback_index, 1) + async delete_feedback(feedbackId) { + this.feedbacks = this.feedbacks.filter( + (feedback) => feedback.id !== feedbackId, + ) }, async delete_server_error() { this.server_error = false diff --git a/test/stores/Feedback.nuxt.test.js b/test/stores/Feedback.nuxt.test.js index fb5fc90b..2570dbf6 100644 --- a/test/stores/Feedback.nuxt.test.js +++ b/test/stores/Feedback.nuxt.test.js @@ -34,11 +34,32 @@ describe("Feedback Store", () => { }) }) + describe("add_error", () => { + test("test feedbacks_timeout", () => { + feedback_store.feedbacks_timeout_miliseconds = 500 + feedback_store.add_error( + 500, + "/test", + "test message", + "test description", + ) + expect(feedback_store.feedbacks.length).toBe(1) + setTimeout(() => { + expect(feedback_store.feedbacks.length).toBe(0) + }, 1000) + }) + }) + describe("add_success", () => { test("test add_success", () => { + feedback_store.feedbacks_timeout_miliseconds = 500 feedback_store.add_success("test description") expect(feedback_store.feedbacks.length).toBe(1) expect(feedback_store.feedbacks[0].type).toBe("success") + + setTimeout(() => { + expect(feedback_store.feedbacks.length).toBe(0) + }, 1000) }) }) describe("delete_feedback", () => { From 970aa995899e5f7f802b3347ca9c6a0139caafc2 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 15:06:59 +0200 Subject: [PATCH 14/19] test eslint-plugin-vue 9.33.0" --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index da9d38aa..bb0b198d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "eslint-plugin-nuxt": "^4.0.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier-vue": "^5.0.0", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-vue": "^9.33.0", "eslint-plugin-vuetify": "^2.4.0", "happy-dom": "^15.11.7", "jsdom": "^24.1.3", @@ -75,4 +75,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file From 59b31ae6afbfc87086633ff2e1c9a8693b212d10 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:07:20 +0000 Subject: [PATCH 15/19] Apply prepare changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb0b198d..dca5f599 100644 --- a/package.json +++ b/package.json @@ -75,4 +75,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} From 457168eef1d01c9cce83cd78c78a316dabc38be5 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:18:54 +0000 Subject: [PATCH 16/19] Apply prepare changes --- .eslintrc.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 9f950f6f..ec5fbe65 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,7 +7,7 @@ module.exports = { }, extends: [ "eslint:recommended", - "plugin:vue/vue3-recommended", + "plugin:vue/recommended", "plugin:vuetify/recommended", "plugin:nuxt/recommended", ], From de18f6ca59a7b46e89246e353be7f7c3e6de9ac5 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 17:20:58 +0200 Subject: [PATCH 17/19] fix(launcher): remove on mounted --- components/Launcher.vue | 6 ------ 1 file changed, 6 deletions(-) diff --git a/components/Launcher.vue b/components/Launcher.vue index b728ed07..259bbe93 100644 --- a/components/Launcher.vue +++ b/components/Launcher.vue @@ -32,10 +32,4 @@ } }, ) - - onMounted(() => { - if (infra_store.is_captcha_validated) { - infra_store.create_backend() - } - }) From 43fedda7ea0601f152a9ff40a03b63459fa417d8 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 17:21:09 +0200 Subject: [PATCH 18/19] cleanup log --- stores/viewer.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/stores/viewer.js b/stores/viewer.js index 43ae33dc..350736c5 100644 --- a/stores/viewer.js +++ b/stores/viewer.js @@ -60,7 +60,6 @@ export const use_viewer_store = defineStore("viewer", { if (process.env.NODE_ENV == "test") return if (this.status === Status.CONNECTED) return navigator.locks.request("viewer.ws_connect", async (lock) => { - console.log("VIEWER STATUS", this.status) if (this.status === Status.CONNECTED) return console.log("VIEWER LOCK GRANTED !", lock) this.status = Status.CONNECTING @@ -71,18 +70,12 @@ export const use_viewer_store = defineStore("viewer", { config.sessionURL = this.base_url const { client } = this - console.log("client", client) - console.log("status", this.status) if (this.status === Status.CONNECTED && client.isConnected()) { - console.log("disconnect") - client.disconnect(-1) this.status = Status.NOT_CONNECTED } let clientToConnect = client if (_.isEmpty(clientToConnect)) { - console.log("isEmpty") - clientToConnect = vtkWSLinkClient.newInstance() } @@ -112,13 +105,11 @@ export const use_viewer_store = defineStore("viewer", { const { connectImageStream } = await import( "@kitware/vtk.js/Rendering/Misc/RemoteView" ) - console.log("before connect") const viewer_store = this return new Promise((resolve, reject) => { clientToConnect .connect(config) .then((validClient) => { - console.log("validClient", validClient) connectImageStream(validClient.getConnection().getSession()) viewer_store.client = validClient clientToConnect.endBusy() From 392c35237a2dc8f9c144778d8efe89759ba783f9 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 16 Apr 2025 17:47:29 +0200 Subject: [PATCH 19/19] fix(client): remove value --- components/RemoteRenderingView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/RemoteRenderingView.vue b/components/RemoteRenderingView.vue index 7aa76884..04f599e9 100644 --- a/components/RemoteRenderingView.vue +++ b/components/RemoteRenderingView.vue @@ -100,7 +100,7 @@ if (viewer_store.status !== Status.CONNECTED) { return } - const session = viewer_store.client.value.getConnection().getSession() + const session = viewer_store.client.getConnection().getSession() view.setSession(session) view.setViewId(props.viewId) connected.value = true