From ccbbe09544b280148cdb7798f99d8e5c6957def8 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 5 Aug 2025 22:34:44 +0200 Subject: [PATCH 01/43] object_priority & test added --- components/ObjectSelector.vue | 34 +++++++++++++++- test/components/ObjectSelector.nuxt.test.js | 45 +++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index a6b09fc8..95e64784 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -94,8 +94,38 @@ } } } - - allowed_objects.value = final_object + if (Object.keys(final_object).length > 0) { + const max_loadability_score = Math.max( + ...Object.values(final_object).map(obj => obj.is_loadable ? 1 : 0) + ) + + const best_objects = Object.fromEntries( + Object.entries(final_object).filter( + ([object_name, object_info]) => (object_info.is_loadable ? 1 : 0) === max_loadability_score + ) + ) + + if (Object.keys(best_objects).length > 1) { + const priorities = {} + for (const object_name of Object.keys(best_objects)) { + const priority_response = await api_fetch({ + schema: schemas.opengeodeweb_back.object_priority, + params: { object_name, filename: filenames[0] } + }) + priorities[object_name] = priority_response.data.value.priority + } + + const best_object_name = Object.keys(best_objects).reduce((a, b) => + priorities[a] > priorities[b] ? a : b + ) + + allowed_objects.value = { [best_object_name]: final_object[best_object_name] } + } else { + allowed_objects.value = best_objects + } + } else { + allowed_objects.value = final_object + } if (Object.keys(allowed_objects.value).length == 1) { set_geode_object(Object.keys(allowed_objects.value)[0]) } diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index 91b8001a..3718d899 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -82,5 +82,50 @@ describe("ObjectSelector.vue", async () => { expect(wrapper.emitted().update_values[0][0]).toEqual({ input_geode_object: geode_object_1, }) + + test(`test object_priority with equal is_loadable scores`, async () => { + var response = { + allowed_objects: {}, + } + const geode_object_1 = "BRep" + const geode_object_2 = "EdgedCurve3D" + const geode_object_3 = "PolygonalSurface3D" + response["allowed_objects"][geode_object_1] = { is_loadable: true } + response["allowed_objects"][geode_object_2] = { is_loadable: true } + response["allowed_objects"][geode_object_3] = { is_loadable: true } + registerEndpoint(allowed_objects.$id, { + method: allowed_objects.methods[0], + handler: () => response, + }) + const object_priority_schema = schemas.opengeodeweb_back.object_priority + registerEndpoint(object_priority_schema.$id, { + method: object_priority_schema.methods[0], + handler: ({ body }) => { + const { object_name } = body + const priorities = { + "BRep": 10, + "EdgedCurve3D": 5, + "PolygonalSurface3D": 8 + } + return { priority: priorities[object_name] || 0 } + } + }) + const wrapper = await mountSuspended(ObjectSelector, { + global: { + plugins: [vuetify, pinia], + }, + props: { filenames: ["test.toto"], supported_feature: "test" }, + }) + await flushPromises() + const v_cards = wrapper.findAllComponents(components.VCard) + expect(v_cards).toHaveLength(1) + const v_img = v_cards[0].findComponent(components.VImg) + expect(v_img.vm.src).toContain(`${geode_object_1}.svg`) + expect(wrapper.emitted()).toHaveProperty("update_values") + expect(wrapper.emitted().update_values).toHaveLength(1) + expect(wrapper.emitted().update_values[0][0]).toEqual({ + input_geode_object: geode_object_1, + }) + }) }) }) From d2ee03aa50f2865b43a5e32af4e74a56491a813c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 5 Aug 2025 22:40:58 +0200 Subject: [PATCH 02/43] indent corrected --- test/components/ObjectSelector.nuxt.test.js | 86 ++++++++++----------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index 3718d899..58f048d4 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -82,50 +82,50 @@ describe("ObjectSelector.vue", async () => { expect(wrapper.emitted().update_values[0][0]).toEqual({ input_geode_object: geode_object_1, }) + }) - test(`test object_priority with equal is_loadable scores`, async () => { - var response = { - allowed_objects: {}, - } - const geode_object_1 = "BRep" - const geode_object_2 = "EdgedCurve3D" - const geode_object_3 = "PolygonalSurface3D" - response["allowed_objects"][geode_object_1] = { is_loadable: true } - response["allowed_objects"][geode_object_2] = { is_loadable: true } - response["allowed_objects"][geode_object_3] = { is_loadable: true } - registerEndpoint(allowed_objects.$id, { - method: allowed_objects.methods[0], - handler: () => response, - }) - const object_priority_schema = schemas.opengeodeweb_back.object_priority - registerEndpoint(object_priority_schema.$id, { - method: object_priority_schema.methods[0], - handler: ({ body }) => { - const { object_name } = body - const priorities = { - "BRep": 10, - "EdgedCurve3D": 5, - "PolygonalSurface3D": 8 - } - return { priority: priorities[object_name] || 0 } + test(`test object_priority with equal is_loadable scores`, async () => { + var response = { + allowed_objects: {}, + } + const geode_object_1 = "BRep" + const geode_object_2 = "EdgedCurve3D" + const geode_object_3 = "PolygonalSurface3D" + response["allowed_objects"][geode_object_1] = { is_loadable: true } + response["allowed_objects"][geode_object_2] = { is_loadable: true } + response["allowed_objects"][geode_object_3] = { is_loadable: true } + registerEndpoint(allowed_objects.$id, { + method: allowed_objects.methods[0], + handler: () => response, + }) + const object_priority_schema = schemas.opengeodeweb_back.object_priority + registerEndpoint(object_priority_schema.$id, { + method: object_priority_schema.methods[0], + handler: ({ body }) => { + const { object_name } = body + const priorities = { + "BRep": 10, + "EdgedCurve3D": 5, + "PolygonalSurface3D": 8 } - }) - const wrapper = await mountSuspended(ObjectSelector, { - global: { - plugins: [vuetify, pinia], - }, - props: { filenames: ["test.toto"], supported_feature: "test" }, - }) - await flushPromises() - const v_cards = wrapper.findAllComponents(components.VCard) - expect(v_cards).toHaveLength(1) - const v_img = v_cards[0].findComponent(components.VImg) - expect(v_img.vm.src).toContain(`${geode_object_1}.svg`) - expect(wrapper.emitted()).toHaveProperty("update_values") - expect(wrapper.emitted().update_values).toHaveLength(1) - expect(wrapper.emitted().update_values[0][0]).toEqual({ - input_geode_object: geode_object_1, - }) + return { priority: priorities[object_name] || 0 } + } + }) + const wrapper = await mountSuspended(ObjectSelector, { + global: { + plugins: [vuetify, pinia], + }, + props: { filenames: ["test.toto"], supported_feature: "test" }, + }) + await flushPromises() + const v_cards = wrapper.findAllComponents(components.VCard) + expect(v_cards).toHaveLength(1) + const v_img = v_cards[0].findComponent(components.VImg) + expect(v_img.vm.src).toContain(`${geode_object_1}.svg`) + expect(wrapper.emitted()).toHaveProperty("update_values") + expect(wrapper.emitted().update_values).toHaveLength(1) + expect(wrapper.emitted().update_values[0][0]).toEqual({ + input_geode_object: geode_object_1, }) }) -}) +}) \ No newline at end of file From 92577bf6bc83352217a2fa98ae398e41bfac41c0 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 5 Aug 2025 23:17:28 +0200 Subject: [PATCH 03/43] test --- test/components/ObjectSelector.nuxt.test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index 58f048d4..d85c3891 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -98,7 +98,11 @@ describe("ObjectSelector.vue", async () => { method: allowed_objects.methods[0], handler: () => response, }) - const object_priority_schema = schemas.opengeodeweb_back.object_priority + + const object_priority_schema = { + $id: "object_priority", + methods: ["POST"] + } registerEndpoint(object_priority_schema.$id, { method: object_priority_schema.methods[0], handler: ({ body }) => { From 8ba767f51734aaa67289c2ddb0786128df63fa81 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 11:08:04 +0200 Subject: [PATCH 04/43] feat(object_priority): changed test and new function --- components/ObjectSelector.vue | 96 ++++++++++----------- test/components/ObjectSelector.nuxt.test.js | 36 ++------ 2 files changed, 50 insertions(+), 82 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 95e64784..03aa9922 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -69,65 +69,59 @@ async function get_allowed_objects() { toggle_loading() allowed_objects.value = {} - var promise_array = [] - for (const filename of filenames) { - const params = { filename, supported_feature } - const promise = api_fetch({ schema, params }) - promise_array.push(promise) - } - const responses = await Promise.all(promise_array) - let values = [] - for (const response of responses) { - values.push(response.data.value.allowed_objects) - } - const all_keys = [...new Set(values.flatMap((value) => Object.keys(value)))] - const common_keys = all_keys.filter( - (i) => !values.some((j) => !Object.keys(j).includes(i)), + const responses = await Promise.all( + filenames.map((filename) => + api_fetch({ schema, params: { filename, supported_feature } }), + ) ) - var final_object = {} - for (const key of common_keys) { - for (const value of values) { - if (value[key].is_loadable == false) { - final_object[key] = { is_loadable: false } - } else { - final_object[key] = { is_loadable: true } - } + const values = responses.map((r) => r.data.value.allowed_objects) + const allKeys = [...new Set(values.flatMap((v) => Object.keys(v)))] + const commonKeys = allKeys.filter( + (key) => !values.some((obj) => !Object.prototype.hasOwnProperty.call(obj, key)), + ) + const finalObject = {} + for (const key of commonKeys) { + const loadScores = values.map((obj) => obj[key].is_loadable) + const priorities = values + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + finalObject[key] = { is_loadable: Math.min(...loadScores) } + if (priorities.length) { + finalObject[key].object_priority = Math.max(...priorities) } } - if (Object.keys(final_object).length > 0) { - const max_loadability_score = Math.max( - ...Object.values(final_object).map(obj => obj.is_loadable ? 1 : 0) + allowed_objects.value = finalObject + let alreadySelected = false + const objectKeys = Object.keys(finalObject) + if (objectKeys.length) { + const highestLoadScore = Math.max( + ...objectKeys.map((key) => finalObject[key].is_loadable) ) - - const best_objects = Object.fromEntries( - Object.entries(final_object).filter( - ([object_name, object_info]) => (object_info.is_loadable ? 1 : 0) === max_loadability_score + if (highestLoadScore > 0) { + const bestScoreObjects = objectKeys.filter( + (key) => finalObject[key].is_loadable === highestLoadScore ) - ) - - if (Object.keys(best_objects).length > 1) { - const priorities = {} - for (const object_name of Object.keys(best_objects)) { - const priority_response = await api_fetch({ - schema: schemas.opengeodeweb_back.object_priority, - params: { object_name, filename: filenames[0] } - }) - priorities[object_name] = priority_response.data.value.priority + if (bestScoreObjects.length === 1) { + set_geode_object(bestScoreObjects[0]) + alreadySelected = true + } else { + const highestPriority = Math.max( + ...bestScoreObjects.map( + (key) => finalObject[key].object_priority ?? -Infinity + ) + ) + const bestPriorityObjects = bestScoreObjects.filter( + (key) => finalObject[key].object_priority === highestPriority + ) + if (highestPriority !== -Infinity && bestPriorityObjects.length === 1) { + set_geode_object(bestPriorityObjects[0]) + alreadySelected = true + } } - - const best_object_name = Object.keys(best_objects).reduce((a, b) => - priorities[a] > priorities[b] ? a : b - ) - - allowed_objects.value = { [best_object_name]: final_object[best_object_name] } - } else { - allowed_objects.value = best_objects } - } else { - allowed_objects.value = final_object } - if (Object.keys(allowed_objects.value).length == 1) { - set_geode_object(Object.keys(allowed_objects.value)[0]) + if (!alreadySelected && objectKeys.length === 1) { + set_geode_object(objectKeys[0]) } toggle_loading() } diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index d85c3891..488f5762 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -84,52 +84,26 @@ describe("ObjectSelector.vue", async () => { }) }) - test(`test object_priority with equal is_loadable scores`, async () => { - var response = { - allowed_objects: {}, - } + test(`test object_priority when is_loadablescores equal`, async () => { + var response = { allowed_objects: {} } const geode_object_1 = "BRep" const geode_object_2 = "EdgedCurve3D" - const geode_object_3 = "PolygonalSurface3D" - response["allowed_objects"][geode_object_1] = { is_loadable: true } - response["allowed_objects"][geode_object_2] = { is_loadable: true } - response["allowed_objects"][geode_object_3] = { is_loadable: true } + response["allowed_objects"][geode_object_1] = { is_loadable: 1.0, object_priority: 2 } + response["allowed_objects"][geode_object_2] = { is_loadable: 1.0, object_priority: 1 } registerEndpoint(allowed_objects.$id, { method: allowed_objects.methods[0], handler: () => response, }) - - const object_priority_schema = { - $id: "object_priority", - methods: ["POST"] - } - registerEndpoint(object_priority_schema.$id, { - method: object_priority_schema.methods[0], - handler: ({ body }) => { - const { object_name } = body - const priorities = { - "BRep": 10, - "EdgedCurve3D": 5, - "PolygonalSurface3D": 8 - } - return { priority: priorities[object_name] || 0 } - } - }) const wrapper = await mountSuspended(ObjectSelector, { global: { plugins: [vuetify, pinia], }, props: { filenames: ["test.toto"], supported_feature: "test" }, }) - await flushPromises() - const v_cards = wrapper.findAllComponents(components.VCard) - expect(v_cards).toHaveLength(1) - const v_img = v_cards[0].findComponent(components.VImg) - expect(v_img.vm.src).toContain(`${geode_object_1}.svg`) expect(wrapper.emitted()).toHaveProperty("update_values") expect(wrapper.emitted().update_values).toHaveLength(1) expect(wrapper.emitted().update_values[0][0]).toEqual({ input_geode_object: geode_object_1, }) }) -}) \ No newline at end of file +}) From a27d2f2b17c02a1ba2e8bd1ba94545639a949121 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 11:16:28 +0200 Subject: [PATCH 05/43] corrected test object_priority name --- test/components/ObjectSelector.nuxt.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index 488f5762..db037e0f 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -84,7 +84,7 @@ describe("ObjectSelector.vue", async () => { }) }) - test(`test object_priority when is_loadablescores equal`, async () => { + test(`test object_priority when is_loadable scores equal`, async () => { var response = { allowed_objects: {} } const geode_object_1 = "BRep" const geode_object_2 = "EdgedCurve3D" From c946c4184ca58cd9fc7428dc6629533138bef060 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 09:19:52 +0000 Subject: [PATCH 06/43] Apply prepare changes --- components/ObjectSelector.vue | 20 ++++++++++++-------- test/components/ObjectSelector.nuxt.test.js | 10 ++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 03aa9922..03fb725d 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -72,12 +72,13 @@ const responses = await Promise.all( filenames.map((filename) => api_fetch({ schema, params: { filename, supported_feature } }), - ) + ), ) const values = responses.map((r) => r.data.value.allowed_objects) const allKeys = [...new Set(values.flatMap((v) => Object.keys(v)))] const commonKeys = allKeys.filter( - (key) => !values.some((obj) => !Object.prototype.hasOwnProperty.call(obj, key)), + (key) => + !values.some((obj) => !Object.prototype.hasOwnProperty.call(obj, key)), ) const finalObject = {} for (const key of commonKeys) { @@ -95,11 +96,11 @@ const objectKeys = Object.keys(finalObject) if (objectKeys.length) { const highestLoadScore = Math.max( - ...objectKeys.map((key) => finalObject[key].is_loadable) + ...objectKeys.map((key) => finalObject[key].is_loadable), ) if (highestLoadScore > 0) { const bestScoreObjects = objectKeys.filter( - (key) => finalObject[key].is_loadable === highestLoadScore + (key) => finalObject[key].is_loadable === highestLoadScore, ) if (bestScoreObjects.length === 1) { set_geode_object(bestScoreObjects[0]) @@ -107,13 +108,16 @@ } else { const highestPriority = Math.max( ...bestScoreObjects.map( - (key) => finalObject[key].object_priority ?? -Infinity - ) + (key) => finalObject[key].object_priority ?? -Infinity, + ), ) const bestPriorityObjects = bestScoreObjects.filter( - (key) => finalObject[key].object_priority === highestPriority + (key) => finalObject[key].object_priority === highestPriority, ) - if (highestPriority !== -Infinity && bestPriorityObjects.length === 1) { + if ( + highestPriority !== -Infinity && + bestPriorityObjects.length === 1 + ) { set_geode_object(bestPriorityObjects[0]) alreadySelected = true } diff --git a/test/components/ObjectSelector.nuxt.test.js b/test/components/ObjectSelector.nuxt.test.js index db037e0f..f6fb9369 100644 --- a/test/components/ObjectSelector.nuxt.test.js +++ b/test/components/ObjectSelector.nuxt.test.js @@ -88,8 +88,14 @@ describe("ObjectSelector.vue", async () => { var response = { allowed_objects: {} } const geode_object_1 = "BRep" const geode_object_2 = "EdgedCurve3D" - response["allowed_objects"][geode_object_1] = { is_loadable: 1.0, object_priority: 2 } - response["allowed_objects"][geode_object_2] = { is_loadable: 1.0, object_priority: 1 } + response["allowed_objects"][geode_object_1] = { + is_loadable: 1.0, + object_priority: 2, + } + response["allowed_objects"][geode_object_2] = { + is_loadable: 1.0, + object_priority: 1, + } registerEndpoint(allowed_objects.$id, { method: allowed_objects.methods[0], handler: () => response, From da8b1b74e1b101cd11ae5d461ec5e975500791df Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 14:52:09 +0200 Subject: [PATCH 07/43] renamed vars --- components/ObjectSelector.vue | 100 ++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 41 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 03aa9922..1dc512f7 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -69,63 +69,81 @@ async function get_allowed_objects() { toggle_loading() allowed_objects.value = {} - const responses = await Promise.all( - filenames.map((filename) => - api_fetch({ schema, params: { filename, supported_feature } }), - ) - ) - const values = responses.map((r) => r.data.value.allowed_objects) - const allKeys = [...new Set(values.flatMap((v) => Object.keys(v)))] - const commonKeys = allKeys.filter( - (key) => !values.some((obj) => !Object.prototype.hasOwnProperty.call(obj, key)), + const promise_array = [] + for (const filename of filenames) { + const params = { filename, supported_feature } + const promise = api_fetch({ schema, params }) + promise_array.push(promise) + } + const api_responses = await Promise.all(promise_array) + const allowed_objects_list = [] + for (const api_response of api_responses) { + allowed_objects_list.push(api_response.data.value.allowed_objects) + } + const all_keys = [ + ...new Set( + allowed_objects_list.flatMap((allowed_object_map) => + Object.keys(allowed_object_map), + ), + ), + ] + const common_keys = all_keys.filter( + (candidate_key) => + !allowed_objects_list.some( + (allowed_object_map) => + !Object.prototype.hasOwnProperty.call(allowed_object_map, candidate_key), + ), ) - const finalObject = {} - for (const key of commonKeys) { - const loadScores = values.map((obj) => obj[key].is_loadable) - const priorities = values - .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) - finalObject[key] = { is_loadable: Math.min(...loadScores) } - if (priorities.length) { - finalObject[key].object_priority = Math.max(...priorities) + const final_object = {} + for (const key of common_keys) { + const load_score_list = allowed_objects_list.map( + (allowed_object_map) => allowed_object_map[key].is_loadable, + ) + const priority_list = allowed_objects_list + .map((allowed_object_map) => allowed_object_map[key].object_priority) + .filter((priority_value) => priority_value !== undefined && priority_value !== null) + final_object[key] = { is_loadable: Math.min(...load_score_list) } + if (priority_list.length) { + final_object[key].object_priority = Math.max(...priority_list) } } - allowed_objects.value = finalObject - let alreadySelected = false - const objectKeys = Object.keys(finalObject) - if (objectKeys.length) { - const highestLoadScore = Math.max( - ...objectKeys.map((key) => finalObject[key].is_loadable) + allowed_objects.value = final_object + let already_selected = false + const object_keys = Object.keys(final_object) + if (object_keys.length) { + const highest_load_score = Math.max( + ...object_keys.map((k) => final_object[k].is_loadable), ) - if (highestLoadScore > 0) { - const bestScoreObjects = objectKeys.filter( - (key) => finalObject[key].is_loadable === highestLoadScore + if (highest_load_score > 0) { + const best_score_objects = object_keys.filter( + (k) => final_object[k].is_loadable === highest_load_score, ) - if (bestScoreObjects.length === 1) { - set_geode_object(bestScoreObjects[0]) - alreadySelected = true + if (best_score_objects.length === 1) { + set_geode_object(best_score_objects[0]) + already_selected = true } else { - const highestPriority = Math.max( - ...bestScoreObjects.map( - (key) => finalObject[key].object_priority ?? -Infinity - ) + const highest_priority = Math.max( + ...best_score_objects.map( + (k) => final_object[k].object_priority ?? -Infinity, + ), ) - const bestPriorityObjects = bestScoreObjects.filter( - (key) => finalObject[key].object_priority === highestPriority + const best_priority_objects = best_score_objects.filter( + (k) => final_object[k].object_priority === highest_priority, ) - if (highestPriority !== -Infinity && bestPriorityObjects.length === 1) { - set_geode_object(bestPriorityObjects[0]) - alreadySelected = true + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { + set_geode_object(best_priority_objects[0]) + already_selected = true } } } } - if (!alreadySelected && objectKeys.length === 1) { - set_geode_object(objectKeys[0]) + if (!already_selected && object_keys.length === 1) { + set_geode_object(object_keys[0]) } toggle_loading() } + function set_geode_object(input_geode_object) { if (input_geode_object != "") { emit("update_values", { input_geode_object }) From 6bf890d3f05d54325eee51363cb9db363021e0ca Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:53:58 +0000 Subject: [PATCH 08/43] Apply prepare changes --- components/ObjectSelector.vue | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 1dc512f7..5ab6910c 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -91,7 +91,10 @@ (candidate_key) => !allowed_objects_list.some( (allowed_object_map) => - !Object.prototype.hasOwnProperty.call(allowed_object_map, candidate_key), + !Object.prototype.hasOwnProperty.call( + allowed_object_map, + candidate_key, + ), ), ) const final_object = {} @@ -101,7 +104,10 @@ ) const priority_list = allowed_objects_list .map((allowed_object_map) => allowed_object_map[key].object_priority) - .filter((priority_value) => priority_value !== undefined && priority_value !== null) + .filter( + (priority_value) => + priority_value !== undefined && priority_value !== null, + ) final_object[key] = { is_loadable: Math.min(...load_score_list) } if (priority_list.length) { final_object[key].object_priority = Math.max(...priority_list) @@ -130,7 +136,10 @@ const best_priority_objects = best_score_objects.filter( (k) => final_object[k].object_priority === highest_priority, ) - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { + if ( + highest_priority !== -Infinity && + best_priority_objects.length === 1 + ) { set_geode_object(best_priority_objects[0]) already_selected = true } @@ -143,7 +152,6 @@ toggle_loading() } - function set_geode_object(input_geode_object) { if (input_geode_object != "") { emit("update_values", { input_geode_object }) From f776da4905b950572449105e157222c03852eeee Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 14:55:13 +0200 Subject: [PATCH 09/43] added function to select geode_object --- components/ObjectSelector.vue | 143 ++++++++++++++++------------------ 1 file changed, 69 insertions(+), 74 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 1dc512f7..b073117c 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -66,82 +66,77 @@ const allowed_objects = ref({}) const toggle_loading = useToggle(loading) - async function get_allowed_objects() { - toggle_loading() - allowed_objects.value = {} - const promise_array = [] - for (const filename of filenames) { - const params = { filename, supported_feature } - const promise = api_fetch({ schema, params }) - promise_array.push(promise) - } - const api_responses = await Promise.all(promise_array) - const allowed_objects_list = [] - for (const api_response of api_responses) { - allowed_objects_list.push(api_response.data.value.allowed_objects) - } - const all_keys = [ - ...new Set( - allowed_objects_list.flatMap((allowed_object_map) => - Object.keys(allowed_object_map), - ), - ), - ] - const common_keys = all_keys.filter( - (candidate_key) => - !allowed_objects_list.some( - (allowed_object_map) => - !Object.prototype.hasOwnProperty.call(allowed_object_map, candidate_key), - ), - ) - const final_object = {} - for (const key of common_keys) { - const load_score_list = allowed_objects_list.map( - (allowed_object_map) => allowed_object_map[key].is_loadable, - ) - const priority_list = allowed_objects_list - .map((allowed_object_map) => allowed_object_map[key].object_priority) - .filter((priority_value) => priority_value !== undefined && priority_value !== null) - final_object[key] = { is_loadable: Math.min(...load_score_list) } - if (priority_list.length) { - final_object[key].object_priority = Math.max(...priority_list) - } - } - allowed_objects.value = final_object - let already_selected = false - const object_keys = Object.keys(final_object) - if (object_keys.length) { - const highest_load_score = Math.max( - ...object_keys.map((k) => final_object[k].is_loadable), - ) - if (highest_load_score > 0) { - const best_score_objects = object_keys.filter( - (k) => final_object[k].is_loadable === highest_load_score, - ) - if (best_score_objects.length === 1) { - set_geode_object(best_score_objects[0]) - already_selected = true - } else { - const highest_priority = Math.max( - ...best_score_objects.map( - (k) => final_object[k].object_priority ?? -Infinity, - ), - ) - const best_priority_objects = best_score_objects.filter( - (k) => final_object[k].object_priority === highest_priority, - ) - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { - set_geode_object(best_priority_objects[0]) - already_selected = true - } - } - } - } - if (!already_selected && object_keys.length === 1) { - set_geode_object(object_keys[0]) + + function select_geode_object(object_map) { + const object_keys = Object.keys(object_map) + if (!object_keys.length) { + return null + } + const highest_load_score = Math.max( + ...object_keys.map((key) => object_map[key].is_loadable), + ) + if (highest_load_score <= 0) { + return null + } + const best_score_objects = object_keys.filter( + (key) => object_map[key].is_loadable === highest_load_score, + ) + if (best_score_objects.length === 1) { + return best_score_objects[0] + } + const highest_priority = Math.max( + ...best_score_objects.map( + (key) => object_map[key].object_priority ?? -Infinity, + ), + ) + const best_priority_objects = best_score_objects.filter( + (key) => object_map[key].object_priority === highest_priority, + ) + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { + return best_priority_objects[0] + } + return null +} + + +async function get_allowed_objects() { + toggle_loading() + allowed_objects.value = {} + const promise_array = filenames.map((filename) => { + const params = { filename, supported_feature } + return api_fetch({ schema, params }) + }) + const responses = await Promise.all(promise_array) + const allowed_objects_list = responses.map( + (response) => response.data.value.allowed_objects, + ) + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] + const common_keys = all_keys.filter((key) => + allowed_objects_list.every((obj) => key in obj), + ) + const final_object = {} + for (const key of common_keys) { + const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) + const priorities = allowed_objects_list + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + final_object[key] = { is_loadable: Math.min(...load_scores) } + if (priorities.length) { + final_object[key].object_priority = Math.max(...priorities) } - toggle_loading() } + allowed_objects.value = final_object + let already_selected = false + const selected_object = select_geode_object(final_object) + if (selected_object) { + set_geode_object(selected_object) + already_selected = true + } + if (!already_selected && Object.keys(final_object).length === 1) { + set_geode_object(Object.keys(final_object)[0]) + } + toggle_loading() +} function set_geode_object(input_geode_object) { From 9ee157d1d59f49b6866b57e2c1122e24be393a34 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:56:03 +0000 Subject: [PATCH 10/43] Apply prepare changes --- components/ObjectSelector.vue | 130 +++++++++++++++++----------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 4436e937..292218e1 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -66,77 +66,77 @@ const allowed_objects = ref({}) const toggle_loading = useToggle(loading) - function select_geode_object(object_map) { - const object_keys = Object.keys(object_map) - if (!object_keys.length) { - return null - } - const highest_load_score = Math.max( - ...object_keys.map((key) => object_map[key].is_loadable), - ) - if (highest_load_score <= 0) { + const object_keys = Object.keys(object_map) + if (!object_keys.length) { + return null + } + const highest_load_score = Math.max( + ...object_keys.map((key) => object_map[key].is_loadable), + ) + if (highest_load_score <= 0) { + return null + } + const best_score_objects = object_keys.filter( + (key) => object_map[key].is_loadable === highest_load_score, + ) + if (best_score_objects.length === 1) { + return best_score_objects[0] + } + const highest_priority = Math.max( + ...best_score_objects.map( + (key) => object_map[key].object_priority ?? -Infinity, + ), + ) + const best_priority_objects = best_score_objects.filter( + (key) => object_map[key].object_priority === highest_priority, + ) + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { + return best_priority_objects[0] + } return null } - const best_score_objects = object_keys.filter( - (key) => object_map[key].is_loadable === highest_load_score, - ) - if (best_score_objects.length === 1) { - return best_score_objects[0] - } - const highest_priority = Math.max( - ...best_score_objects.map( - (key) => object_map[key].object_priority ?? -Infinity, - ), - ) - const best_priority_objects = best_score_objects.filter( - (key) => object_map[key].object_priority === highest_priority, - ) - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { - return best_priority_objects[0] - } - return null -} - -async function get_allowed_objects() { - toggle_loading() - allowed_objects.value = {} - const promise_array = filenames.map((filename) => { - const params = { filename, supported_feature } - return api_fetch({ schema, params }) - }) - const responses = await Promise.all(promise_array) - const allowed_objects_list = responses.map( - (response) => response.data.value.allowed_objects, - ) - const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] - const common_keys = all_keys.filter((key) => - allowed_objects_list.every((obj) => key in obj), - ) - const final_object = {} - for (const key of common_keys) { - const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) - const priorities = allowed_objects_list - .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) - final_object[key] = { is_loadable: Math.min(...load_scores) } - if (priorities.length) { - final_object[key].object_priority = Math.max(...priorities) + async function get_allowed_objects() { + toggle_loading() + allowed_objects.value = {} + const promise_array = filenames.map((filename) => { + const params = { filename, supported_feature } + return api_fetch({ schema, params }) + }) + const responses = await Promise.all(promise_array) + const allowed_objects_list = responses.map( + (response) => response.data.value.allowed_objects, + ) + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] + const common_keys = all_keys.filter((key) => + allowed_objects_list.every((obj) => key in obj), + ) + const final_object = {} + for (const key of common_keys) { + const load_scores = allowed_objects_list.map( + (obj) => obj[key].is_loadable, + ) + const priorities = allowed_objects_list + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + final_object[key] = { is_loadable: Math.min(...load_scores) } + if (priorities.length) { + final_object[key].object_priority = Math.max(...priorities) + } } + allowed_objects.value = final_object + let already_selected = false + const selected_object = select_geode_object(final_object) + if (selected_object) { + set_geode_object(selected_object) + already_selected = true + } + if (!already_selected && Object.keys(final_object).length === 1) { + set_geode_object(Object.keys(final_object)[0]) + } + toggle_loading() } - allowed_objects.value = final_object - let already_selected = false - const selected_object = select_geode_object(final_object) - if (selected_object) { - set_geode_object(selected_object) - already_selected = true - } - if (!already_selected && Object.keys(final_object).length === 1) { - set_geode_object(Object.keys(final_object)[0]) - } - toggle_loading() -} function set_geode_object(input_geode_object) { if (input_geode_object != "") { From 9a59d2f88f6d70c41fcb22bf4d53bef56e0ad374 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 16:02:25 +0200 Subject: [PATCH 11/43] refacto get_allowed_objects --- components/ObjectSelector.vue | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 4436e937..3fa9ede3 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -66,17 +66,20 @@ const allowed_objects = ref({}) const toggle_loading = useToggle(loading) - - function select_geode_object(object_map) { + +function select_geode_object(object_map) { const object_keys = Object.keys(object_map) if (!object_keys.length) { - return null + return + } + if (object_keys.length === 1 && object_map[object_keys[0]].is_loadable > 0) { + return object_keys[0] } const highest_load_score = Math.max( ...object_keys.map((key) => object_map[key].is_loadable), ) if (highest_load_score <= 0) { - return null + return } const best_score_objects = object_keys.filter( (key) => object_map[key].is_loadable === highest_load_score, @@ -95,7 +98,7 @@ if (highest_priority !== -Infinity && best_priority_objects.length === 1) { return best_priority_objects[0] } - return null + return } @@ -126,14 +129,9 @@ async function get_allowed_objects() { } } allowed_objects.value = final_object - let already_selected = false const selected_object = select_geode_object(final_object) if (selected_object) { set_geode_object(selected_object) - already_selected = true - } - if (!already_selected && Object.keys(final_object).length === 1) { - set_geode_object(Object.keys(final_object)[0]) } toggle_loading() } From 765dedef26e6e9b4057f956211d3ce4a6305c4f2 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:10:43 +0000 Subject: [PATCH 12/43] Apply prepare changes --- components/ObjectSelector.vue | 66 ++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index d46de699..95537a05 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -66,40 +66,42 @@ const allowed_objects = ref({}) const toggle_loading = useToggle(loading) - -function select_geode_object(object_map) { - const object_keys = Object.keys(object_map) - if (!object_keys.length) { - return - } - if (object_keys.length === 1 && object_map[object_keys[0]].is_loadable > 0) { - return object_keys[0] - } - const highest_load_score = Math.max( - ...object_keys.map((key) => object_map[key].is_loadable), - ) - if (highest_load_score <= 0) { + function select_geode_object(object_map) { + const object_keys = Object.keys(object_map) + if (!object_keys.length) { + return + } + if ( + object_keys.length === 1 && + object_map[object_keys[0]].is_loadable > 0 + ) { + return object_keys[0] + } + const highest_load_score = Math.max( + ...object_keys.map((key) => object_map[key].is_loadable), + ) + if (highest_load_score <= 0) { + return + } + const best_score_objects = object_keys.filter( + (key) => object_map[key].is_loadable === highest_load_score, + ) + if (best_score_objects.length === 1) { + return best_score_objects[0] + } + const highest_priority = Math.max( + ...best_score_objects.map( + (key) => object_map[key].object_priority ?? -Infinity, + ), + ) + const best_priority_objects = best_score_objects.filter( + (key) => object_map[key].object_priority === highest_priority, + ) + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { + return best_priority_objects[0] + } return } - const best_score_objects = object_keys.filter( - (key) => object_map[key].is_loadable === highest_load_score, - ) - if (best_score_objects.length === 1) { - return best_score_objects[0] - } - const highest_priority = Math.max( - ...best_score_objects.map( - (key) => object_map[key].object_priority ?? -Infinity, - ), - ) - const best_priority_objects = best_score_objects.filter( - (key) => object_map[key].object_priority === highest_priority, - ) - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { - return best_priority_objects[0] - } - return -} function select_geode_object(object_map) { const object_keys = Object.keys(object_map) From fbeb11cdce89022c67371101d68898165d8a09dd Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 16:11:31 +0200 Subject: [PATCH 13/43] test --- components/ObjectSelector.vue | 102 +++++++++++----------------------- 1 file changed, 33 insertions(+), 69 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index d46de699..3229552d 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -67,7 +67,7 @@ const toggle_loading = useToggle(loading) -function select_geode_object(object_map) { + function select_geode_object(object_map) { const object_keys = Object.keys(object_map) if (!object_keys.length) { return @@ -101,77 +101,41 @@ function select_geode_object(object_map) { return } - function select_geode_object(object_map) { - const object_keys = Object.keys(object_map) - if (!object_keys.length) { - return null - } - const highest_load_score = Math.max( - ...object_keys.map((key) => object_map[key].is_loadable), - ) - if (highest_load_score <= 0) { - return null - } - const best_score_objects = object_keys.filter( - (key) => object_map[key].is_loadable === highest_load_score, - ) - if (best_score_objects.length === 1) { - return best_score_objects[0] - } - const highest_priority = Math.max( - ...best_score_objects.map( - (key) => object_map[key].object_priority ?? -Infinity, - ), - ) - const best_priority_objects = best_score_objects.filter( - (key) => object_map[key].object_priority === highest_priority, - ) - if (highest_priority !== -Infinity && best_priority_objects.length === 1) { - return best_priority_objects[0] - } - return null - } - async function get_allowed_objects() { - toggle_loading() - allowed_objects.value = {} - const promise_array = filenames.map((filename) => { - const params = { filename, supported_feature } - return api_fetch({ schema, params }) - }) - const responses = await Promise.all(promise_array) - const allowed_objects_list = responses.map( - (response) => response.data.value.allowed_objects, - ) - const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] - const common_keys = all_keys.filter((key) => - allowed_objects_list.every((obj) => key in obj), - ) - const final_object = {} - for (const key of common_keys) { - const load_scores = allowed_objects_list.map( - (obj) => obj[key].is_loadable, - ) - const priorities = allowed_objects_list - .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) - final_object[key] = { is_loadable: Math.min(...load_scores) } - if (priorities.length) { - final_object[key].object_priority = Math.max(...priorities) - } - } - allowed_objects.value = final_object - let already_selected = false - const selected_object = select_geode_object(final_object) - if (selected_object) { - set_geode_object(selected_object) - already_selected = true - } - if (!already_selected && Object.keys(final_object).length === 1) { - set_geode_object(Object.keys(final_object)[0]) +async function get_allowed_objects() { + toggle_loading() + allowed_objects.value = {} + const promise_array = filenames.map((filename) => { + const params = { filename, supported_feature } + return api_fetch({ schema, params }) + }) + const responses = await Promise.all(promise_array) + const allowed_objects_list = responses.map( + (response) => response.data.value.allowed_objects, + ) + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] + const common_keys = all_keys.filter((key) => + allowed_objects_list.every((obj) => key in obj), + ) + const final_object = {} + for (const key of common_keys) { + const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) + const priorities = allowed_objects_list + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + final_object[key] = { is_loadable: Math.min(...load_scores) } + if (priorities.length) { + final_object[key].object_priority = Math.max(...priorities) } - toggle_loading() } + allowed_objects.value = final_object + const selected_object = select_geode_object(final_object) + if (selected_object) { + set_geode_object(selected_object) + } + + toggle_loading() +} function set_geode_object(input_geode_object) { if (input_geode_object != "") { From a2af394a2192fc14bd4ee3896ba98c6edee1eaa0 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:12:43 +0000 Subject: [PATCH 14/43] Apply prepare changes --- components/ObjectSelector.vue | 67 ++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 7e16ffca..57f12fd1 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -103,41 +103,42 @@ return } - -async function get_allowed_objects() { - toggle_loading() - allowed_objects.value = {} - const promise_array = filenames.map((filename) => { - const params = { filename, supported_feature } - return api_fetch({ schema, params }) - }) - const responses = await Promise.all(promise_array) - const allowed_objects_list = responses.map( - (response) => response.data.value.allowed_objects, - ) - const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] - const common_keys = all_keys.filter((key) => - allowed_objects_list.every((obj) => key in obj), - ) - const final_object = {} - for (const key of common_keys) { - const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) - const priorities = allowed_objects_list - .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) - final_object[key] = { is_loadable: Math.min(...load_scores) } - if (priorities.length) { - final_object[key].object_priority = Math.max(...priorities) + async function get_allowed_objects() { + toggle_loading() + allowed_objects.value = {} + const promise_array = filenames.map((filename) => { + const params = { filename, supported_feature } + return api_fetch({ schema, params }) + }) + const responses = await Promise.all(promise_array) + const allowed_objects_list = responses.map( + (response) => response.data.value.allowed_objects, + ) + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] + const common_keys = all_keys.filter((key) => + allowed_objects_list.every((obj) => key in obj), + ) + const final_object = {} + for (const key of common_keys) { + const load_scores = allowed_objects_list.map( + (obj) => obj[key].is_loadable, + ) + const priorities = allowed_objects_list + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + final_object[key] = { is_loadable: Math.min(...load_scores) } + if (priorities.length) { + final_object[key].object_priority = Math.max(...priorities) + } + } + allowed_objects.value = final_object + const selected_object = select_geode_object(final_object) + if (selected_object) { + set_geode_object(selected_object) } - } - allowed_objects.value = final_object - const selected_object = select_geode_object(final_object) - if (selected_object) { - set_geode_object(selected_object) - } - toggle_loading() -} + toggle_loading() + } function set_geode_object(input_geode_object) { if (input_geode_object != "") { From 231f5534cc6757dbf7b28ffa82154fec87e94d94 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 16:12:56 +0200 Subject: [PATCH 15/43] format --- components/ObjectSelector.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 7e16ffca..d7492daf 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -135,7 +135,6 @@ async function get_allowed_objects() { if (selected_object) { set_geode_object(selected_object) } - toggle_loading() } From 45def896fdb815d6ea1a44629a776dc3c6edd08a Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:18:03 +0000 Subject: [PATCH 16/43] Apply prepare changes --- components/ObjectSelector.vue | 65 ++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index d7492daf..fdc79ce0 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -103,40 +103,41 @@ return } - -async function get_allowed_objects() { - toggle_loading() - allowed_objects.value = {} - const promise_array = filenames.map((filename) => { - const params = { filename, supported_feature } - return api_fetch({ schema, params }) - }) - const responses = await Promise.all(promise_array) - const allowed_objects_list = responses.map( - (response) => response.data.value.allowed_objects, - ) - const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] - const common_keys = all_keys.filter((key) => - allowed_objects_list.every((obj) => key in obj), - ) - const final_object = {} - for (const key of common_keys) { - const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable) - const priorities = allowed_objects_list - .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) - final_object[key] = { is_loadable: Math.min(...load_scores) } - if (priorities.length) { - final_object[key].object_priority = Math.max(...priorities) + async function get_allowed_objects() { + toggle_loading() + allowed_objects.value = {} + const promise_array = filenames.map((filename) => { + const params = { filename, supported_feature } + return api_fetch({ schema, params }) + }) + const responses = await Promise.all(promise_array) + const allowed_objects_list = responses.map( + (response) => response.data.value.allowed_objects, + ) + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] + const common_keys = all_keys.filter((key) => + allowed_objects_list.every((obj) => key in obj), + ) + const final_object = {} + for (const key of common_keys) { + const load_scores = allowed_objects_list.map( + (obj) => obj[key].is_loadable, + ) + const priorities = allowed_objects_list + .map((obj) => obj[key].object_priority) + .filter((p) => p !== undefined && p !== null) + final_object[key] = { is_loadable: Math.min(...load_scores) } + if (priorities.length) { + final_object[key].object_priority = Math.max(...priorities) + } } + allowed_objects.value = final_object + const selected_object = select_geode_object(final_object) + if (selected_object) { + set_geode_object(selected_object) + } + toggle_loading() } - allowed_objects.value = final_object - const selected_object = select_geode_object(final_object) - if (selected_object) { - set_geode_object(selected_object) - } - toggle_loading() -} function set_geode_object(input_geode_object) { if (input_geode_object != "") { From 55ac9de6eaaed0e6356b651641248f15f47d1af0 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 6 Aug 2025 17:11:29 +0200 Subject: [PATCH 17/43] undefined added to returns --- components/ObjectSelector.vue | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index d7492daf..b37172c1 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -69,19 +69,16 @@ function select_geode_object(object_map) { const object_keys = Object.keys(object_map) if (!object_keys.length) { - return + return undefined } - if ( - object_keys.length === 1 && - object_map[object_keys[0]].is_loadable > 0 - ) { + if (object_keys.length === 1 && object_map[object_keys[0]].is_loadable > 0) { return object_keys[0] } const highest_load_score = Math.max( ...object_keys.map((key) => object_map[key].is_loadable), ) if (highest_load_score <= 0) { - return + return undefined } const best_score_objects = object_keys.filter( (key) => object_map[key].is_loadable === highest_load_score, @@ -100,7 +97,7 @@ if (highest_priority !== -Infinity && best_priority_objects.length === 1) { return best_priority_objects[0] } - return + return undefined } From 21322e2032a0ca9831f626ca448b1d21585377de Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:12:02 +0000 Subject: [PATCH 18/43] Apply prepare changes --- components/ObjectSelector.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 5a4e3031..5b2dce86 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -71,7 +71,10 @@ if (!object_keys.length) { return undefined } - if (object_keys.length === 1 && object_map[object_keys[0]].is_loadable > 0) { + if ( + object_keys.length === 1 && + object_map[object_keys[0]].is_loadable > 0 + ) { return object_keys[0] } const highest_load_score = Math.max( From 84301214dde73a1da91892eb57fe8d2ca70a505b Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 7 Aug 2025 10:49:56 +0200 Subject: [PATCH 19/43] fix(ContextMenu): moved component into viewer folder --- components/{ => Viewer}/ContextMenu.vue | 0 components/{ => Viewer}/ContextMenuItem.vue | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename components/{ => Viewer}/ContextMenu.vue (100%) rename components/{ => Viewer}/ContextMenuItem.vue (100%) diff --git a/components/ContextMenu.vue b/components/Viewer/ContextMenu.vue similarity index 100% rename from components/ContextMenu.vue rename to components/Viewer/ContextMenu.vue diff --git a/components/ContextMenuItem.vue b/components/Viewer/ContextMenuItem.vue similarity index 100% rename from components/ContextMenuItem.vue rename to components/Viewer/ContextMenuItem.vue From 6ac872675f245a11ad3ff119db9b3efbf1abd910 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 16:00:58 +0200 Subject: [PATCH 20/43] feat(Actions): js workflows --- .github/workflows/Branch-protection.yml | 11 ----------- .github/workflows/deploy.yml | 9 +++++++++ .github/workflows/merge_request.yml | 9 +++++++++ .github/workflows/pr_update.yml | 11 +++++++++++ .github/workflows/prepare_deploy.yml | 9 +++++++++ .github/workflows/prepare_pr.yml | 11 ----------- .github/workflows/test.yml | 14 ++++++++++++++ .github/workflows/test_pr.yml | 12 ++++++++++++ package.json | 7 ++++--- 9 files changed, 68 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/Branch-protection.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/merge_request.yml create mode 100644 .github/workflows/pr_update.yml create mode 100644 .github/workflows/prepare_deploy.yml delete mode 100644 .github/workflows/prepare_pr.yml create mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/test_pr.yml diff --git a/.github/workflows/Branch-protection.yml b/.github/workflows/Branch-protection.yml deleted file mode 100644 index bd471369..00000000 --- a/.github/workflows/Branch-protection.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Check branch origin - -on: - pull_request: - -jobs: - check-branch-protection: - uses: Geode-solutions/actions/.github/workflows/branch-protection.yml@master - with: - branch_from: "next" - branch_to: "master" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..47793db5 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,9 @@ +name: Deploy + +on: + workflow_dispatch: + +jobs: + deploy: + uses: Geode-solutions/actions/.github/workflows/js-deploy.yml@master + secrets: inherit diff --git a/.github/workflows/merge_request.yml b/.github/workflows/merge_request.yml new file mode 100644 index 00000000..80b745e3 --- /dev/null +++ b/.github/workflows/merge_request.yml @@ -0,0 +1,9 @@ +name: Merge request + +on: + workflow_dispatch: + +jobs: + release: + uses: Geode-solutions/actions/.github/workflows/js-merge-request.yml@master + secrets: inherit diff --git a/.github/workflows/pr_update.yml b/.github/workflows/pr_update.yml new file mode 100644 index 00000000..9743601e --- /dev/null +++ b/.github/workflows/pr_update.yml @@ -0,0 +1,11 @@ +name: Pull request + +on: + pull_request: + types: [opened, reopened] + branches: + - master + +jobs: + update-branch: + uses: Geode-solutions/actions/.github/workflows/update-branch.yml@master \ No newline at end of file diff --git a/.github/workflows/prepare_deploy.yml b/.github/workflows/prepare_deploy.yml new file mode 100644 index 00000000..7e68b91d --- /dev/null +++ b/.github/workflows/prepare_deploy.yml @@ -0,0 +1,9 @@ +name: Prepare deploy + +on: + workflow_dispatch: + +jobs: + prepare: + uses: Geode-solutions/actions/.github/workflows/js-prepare-deploy.yml@master + secrets: inherit diff --git a/.github/workflows/prepare_pr.yml b/.github/workflows/prepare_pr.yml deleted file mode 100644 index d02abb35..00000000 --- a/.github/workflows/prepare_pr.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Prepare PR - -on: - pull_request: - branches: - - next - -jobs: - prepare: - uses: Geode-solutions/actions/.github/workflows/web-prepare-pr.yml@master - secrets: inherit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..943798b5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,14 @@ +name: Test + +on: + push: + branches-ignore: + - master + - next + +jobs: + test: + uses: Geode-solutions/actions/.github/workflows/js-test.yml@master + with: + repos: ${{ vars.REPOS }} + secrets: inherit diff --git a/.github/workflows/test_pr.yml b/.github/workflows/test_pr.yml new file mode 100644 index 00000000..b9d9425e --- /dev/null +++ b/.github/workflows/test_pr.yml @@ -0,0 +1,12 @@ +name: Test PR + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + test: + uses: Geode-solutions/actions/.github/workflows/js-test-pr.yml@master + with: + repos: ${{ vars.REPOS }} + secrets: inherit diff --git a/package.json b/package.json index 65cf9853..a2ddd4b4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "lint": "eslint --fix --ext .js,.vue --ignore-path .gitignore .", "test": "vitest", "coverage": "vitest run --coverage", - "geode_objects": "node scripts/generate_geode_objects.js && prettier ./assets/geode_objects.js --write" + "geode_objects": "node scripts/generate_geode_objects.js && prettier ./assets/geode_objects.js --write", + "build": "" }, "devDependencies": { "@nuxt/test-utils": "3.18.0", @@ -34,7 +35,7 @@ }, "description": "OpenSource Vue/Vuetify framework for web applications", "type": "module", - "version": "0.0.0-semantically-released", + "version": "0.0.0", "main": "./nuxt.config.js", "dependencies": { "@geode/opengeodeweb-back": "5.8.7", @@ -75,4 +76,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file From 4b876ea0f0a6e6697d9d711b95d6aeb80bd2403e Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 7 Aug 2025 16:42:43 +0200 Subject: [PATCH 21/43] fix(AllowedObjects): fixed bug where truncate function was looking for string but undefined was provided --- components/ObjectSelector.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 5b2dce86..a61ce699 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -69,7 +69,7 @@ function select_geode_object(object_map) { const object_keys = Object.keys(object_map) if (!object_keys.length) { - return undefined + return '' } if ( object_keys.length === 1 && @@ -81,7 +81,7 @@ ...object_keys.map((key) => object_map[key].is_loadable), ) if (highest_load_score <= 0) { - return undefined + return '' } const best_score_objects = object_keys.filter( (key) => object_map[key].is_loadable === highest_load_score, @@ -100,7 +100,7 @@ if (highest_priority !== -Infinity && best_priority_objects.length === 1) { return best_priority_objects[0] } - return undefined + return '' } async function get_allowed_objects() { @@ -125,7 +125,7 @@ ) const priorities = allowed_objects_list .map((obj) => obj[key].object_priority) - .filter((p) => p !== undefined && p !== null) + .filter((p) => p !== '' && p !== null) final_object[key] = { is_loadable: Math.min(...load_scores) } if (priorities.length) { final_object[key].object_priority = Math.max(...priorities) @@ -139,8 +139,8 @@ toggle_loading() } - function set_geode_object(input_geode_object) { - if (input_geode_object != "") { + function set_geode_object(input_geode_object) { + if (input_geode_object) { emit("update_values", { input_geode_object }) emit("increment_step") } From 5b43249114075268f42b0c7e3ac0f70ccf169626 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 7 Aug 2025 16:53:20 +0200 Subject: [PATCH 22/43] undefined is ok to use --- components/ObjectSelector.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index a61ce699..9a8600e2 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -24,7 +24,7 @@ @@ -69,7 +69,7 @@ function select_geode_object(object_map) { const object_keys = Object.keys(object_map) if (!object_keys.length) { - return '' + return undefined } if ( object_keys.length === 1 && @@ -81,7 +81,7 @@ ...object_keys.map((key) => object_map[key].is_loadable), ) if (highest_load_score <= 0) { - return '' + return undefined } const best_score_objects = object_keys.filter( (key) => object_map[key].is_loadable === highest_load_score, @@ -100,7 +100,7 @@ if (highest_priority !== -Infinity && best_priority_objects.length === 1) { return best_priority_objects[0] } - return '' + return undefined } async function get_allowed_objects() { @@ -125,7 +125,7 @@ ) const priorities = allowed_objects_list .map((obj) => obj[key].object_priority) - .filter((p) => p !== '' && p !== null) + .filter((p) => p !== undefined && p !== null) final_object[key] = { is_loadable: Math.min(...load_scores) } if (priorities.length) { final_object[key].object_priority = Math.max(...priorities) From e41f78c18f6dbc04161af67148867392f29ed2ae Mon Sep 17 00:00:00 2001 From: BotellaA <3213882+BotellaA@users.noreply.github.com> Date: Thu, 7 Aug 2025 19:10:23 +0000 Subject: [PATCH 23/43] Apply prepare changes --- .github/workflows/pr_update.yml | 2 +- .releaserc | 3 +-- components/ObjectSelector.vue | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr_update.yml b/.github/workflows/pr_update.yml index 9743601e..fd9d76ee 100644 --- a/.github/workflows/pr_update.yml +++ b/.github/workflows/pr_update.yml @@ -8,4 +8,4 @@ on: jobs: update-branch: - uses: Geode-solutions/actions/.github/workflows/update-branch.yml@master \ No newline at end of file + uses: Geode-solutions/actions/.github/workflows/update-branch.yml@master diff --git a/.releaserc b/.releaserc index 37dc70c2..bf47fdf5 100644 --- a/.releaserc +++ b/.releaserc @@ -6,7 +6,6 @@ plugins: [ '@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator', - '@semantic-release/github', - '@semantic-release/npm' + '@semantic-release/github' ] } diff --git a/components/ObjectSelector.vue b/components/ObjectSelector.vue index 9a8600e2..72e05618 100644 --- a/components/ObjectSelector.vue +++ b/components/ObjectSelector.vue @@ -139,7 +139,7 @@ toggle_loading() } - function set_geode_object(input_geode_object) { + function set_geode_object(input_geode_object) { if (input_geode_object) { emit("update_values", { input_geode_object }) emit("increment_step") diff --git a/package.json b/package.json index a2ddd4b4..0d83d5c1 100644 --- a/package.json +++ b/package.json @@ -76,4 +76,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} From 6b12409d5e4b55b15ab5b957358476fb56573de0 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:17:21 +0200 Subject: [PATCH 24/43] retry --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1d50e39..7b35712e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@geode/opengeodeweb-front", - "version": "0.0.0-semantically-released", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@geode/opengeodeweb-front", - "version": "0.0.0-semantically-released", + "version": "0.0.0", "license": "MIT", "dependencies": { "@geode/opengeodeweb-back": "5.8.7", From be4101b9088ad309b75d76cb3d771f3d2b53e448 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:30:01 +0200 Subject: [PATCH 25/43] again From a04b46d595fc93d18ab5200de2a94c910728649b Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:41:04 +0200 Subject: [PATCH 26/43] trigger From b25912ec90299f7d4e915c946156b92a5d8224cd Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:46:26 +0200 Subject: [PATCH 27/43] again From 5eb0db3376c10cc78e2235bed17f4d37d7a79547 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:55:18 +0200 Subject: [PATCH 28/43] test From 6a9fff03ea22c656670ecc2fef7aaf2d0365e945 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 21:57:29 +0200 Subject: [PATCH 29/43] retry From f9bc3dc715588c44c994dcd7b8c9dc9705117c29 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Thu, 7 Aug 2025 22:05:24 +0200 Subject: [PATCH 30/43] retry From 0b5c8ad60be8e9dcc4b8f0924abe038d4ee1e600 Mon Sep 17 00:00:00 2001 From: BotellaA <3213882+BotellaA@users.noreply.github.com> Date: Thu, 7 Aug 2025 20:05:47 +0000 Subject: [PATCH 31/43] Apply prepare changes --- commitlint.config.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 commitlint.config.js diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..3a29484e --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,16 @@ +export default { + extends: ["@commitlint/config-angular"], + rules: { + "scope-empty": [2, "never"], + "subject-empty": [2, "never"], + "subject-max-length": [0], + "body-leading-blank": [0], + "footer-leading-blank": [0], + "header-max-length": [0], + "scope-case": [0], + "subject-case": [0], + "subject-full-stop": [0], + "type-case": [0], + "type-empty": [0], + }, +} From 3b18837de7ffcd72818721e3705a37b7ad068960 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Fri, 8 Aug 2025 08:50:54 +0200 Subject: [PATCH 32/43] update --- .github/workflows/CICD.yml | 37 ------------------------------------ .github/workflows/deploy.yml | 2 ++ 2 files changed, 2 insertions(+), 37 deletions(-) delete mode 100644 .github/workflows/CICD.yml diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml deleted file mode 100644 index 9c0b4749..00000000 --- a/.github/workflows/CICD.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: CICD - -on: - push: - -jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Unit tests - run: | - npm ci - npm run test - - build: - runs-on: ubuntu-latest - needs: test - if: github.ref == 'refs/heads/next' || github.ref == 'refs/heads/master' - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Semantic Release - uses: cycjimmy/semantic-release-action@v3 - id: semantic - env: - GITHUB_TOKEN: ${{ secrets.TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: Merge master -> next - if: github.ref == 'refs/heads/master' - uses: devmasx/merge-branch@master - with: - type: now - from_branch: master - target_branch: next - github_token: ${{ secrets.TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 47793db5..556a2343 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,4 +6,6 @@ on: jobs: deploy: uses: Geode-solutions/actions/.github/workflows/js-deploy.yml@master + with: + repos: ${{ vars.REPOS }} secrets: inherit From 8797d42119e6b42dcfa503e54463d091d9e4af7e Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Fri, 8 Aug 2025 11:38:27 +0200 Subject: [PATCH 33/43] fix(Package): update internal dependencies --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0d83d5c1..cd6b8769 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,8 @@ "version": "0.0.0", "main": "./nuxt.config.js", "dependencies": { - "@geode/opengeodeweb-back": "5.8.7", - "@geode/opengeodeweb-viewer": "1.10.1", + "@geode/opengeodeweb-back": "latest", + "@geode/opengeodeweb-viewer": "latest", "@kitware/vtk.js": "33.3.0", "@mdi/font": "7.4.47", "@pinia/nuxt": "0.5.4", @@ -76,4 +76,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file From 9ce2c93b18f8f8d81fa194f0ac6273dfa812c081 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 8 Aug 2025 14:21:24 +0200 Subject: [PATCH 34/43] fix(MeshComponents): added id to params --- stores/data_base.js | 1 + 1 file changed, 1 insertion(+) diff --git a/stores/data_base.js b/stores/data_base.js index 4e836046..c8751e05 100644 --- a/stores/data_base.js +++ b/stores/data_base.js @@ -74,6 +74,7 @@ export const useDataBaseStore = defineStore("dataBase", () => { { schema: back_schemas.opengeodeweb_back.models.mesh_components, params: { + id, filename: native_filename, geode_object, }, From 5bf7b6e2c596e8f3fd4dad56ed635ef3bcbb6bed Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Fri, 8 Aug 2025 12:22:46 +0000 Subject: [PATCH 35/43] Apply prepare changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cd6b8769..f3afded1 100644 --- a/package.json +++ b/package.json @@ -76,4 +76,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} From ead244c27598f3a81a1a7c46e4c2c7f1c884adaf Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 13 Aug 2025 15:26:18 +0200 Subject: [PATCH 36/43] feat(HybridViewer): toggle object visibility --- internal_stores/mesh/index.js | 2 ++ internal_stores/model/index.js | 2 ++ stores/hybrid_viewer.js | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/internal_stores/mesh/index.js b/internal_stores/mesh/index.js index e827a75c..b65966bd 100644 --- a/internal_stores/mesh/index.js +++ b/internal_stores/mesh/index.js @@ -10,6 +10,7 @@ export default function useMeshStyle() { const edgesStyleStore = useMeshEdgesStyle() const polygonsStyleStore = useMeshPolygonsStyle() const polyhedraStyleStore = useMeshPolyhedraStyle() + const hybridViewerStore = useHybridViewerStore() function setMeshVisibility(id, visibility) { viewer_call( @@ -20,6 +21,7 @@ export default function useMeshStyle() { { response_function: () => { dataStyleStore.styles[id].visibility = visibility + hybridViewerStore.setVisibility(id, visibility) console.log("setMeshVisibility", dataStyleStore.styles[id].visibility) }, }, diff --git a/internal_stores/model/index.js b/internal_stores/model/index.js index 93a3b403..c4360267 100644 --- a/internal_stores/model/index.js +++ b/internal_stores/model/index.js @@ -16,6 +16,7 @@ export default function useModelStyle() { const blocksStyleStore = useBlocksStyle() const modelEdgesStore = useModelEdgesStyle() const modelPointsStore = useModelPointsStyle() + const hybridViewerStore = useHybridViewerStore() /** Getters **/ function modelVisibility(id) { @@ -70,6 +71,7 @@ export default function useModelStyle() { { response_function: () => { dataStyleStore.styles[id].visibility = visibility + hybridViewerStore.setVisibility(id, visibility) console.log("setModelVisibility", visibility) }, }, diff --git a/stores/hybrid_viewer.js b/stores/hybrid_viewer.js index 75a2e017..43e8d099 100644 --- a/stores/hybrid_viewer.js +++ b/stores/hybrid_viewer.js @@ -66,6 +66,11 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => { db[id] = { actor, polydata, mapper } } + async function setVisibility(id, visibility) { + db[id].actor.setVisibility(visibility) + const renderWindow = genericRenderWindow.value.getRenderWindow() + renderWindow.render() + } async function setZScaling(z_scale) { zScale.value = z_scale const renderer = genericRenderWindow.value.getRenderer() @@ -183,6 +188,7 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => { db, genericRenderWindow, addItem, + setVisibility, setZScaling, syncRemoteCamera, initHybridViewer, From 56c60c6915a662c4d54d9e3d23d05e270cc9cfca Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 1 Sep 2025 14:19:06 +0200 Subject: [PATCH 37/43] feat(HybridViewer): toggle object visibility From f9b4999bdb6007f37539bf00e8ea549802b16475 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 1 Sep 2025 14:29:29 +0200 Subject: [PATCH 38/43] test From 42bc166270797be787267cf58b21987efc76b9a9 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 1 Sep 2025 14:31:17 +0200 Subject: [PATCH 39/43] remove mountSuspended broken import --- test/components/Stepper.nuxt.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/components/Stepper.nuxt.test.js b/test/components/Stepper.nuxt.test.js index 36c81c83..0f8af9c3 100644 --- a/test/components/Stepper.nuxt.test.js +++ b/test/components/Stepper.nuxt.test.js @@ -1,5 +1,4 @@ import { describe, expect, test } from "vitest" -import { mountSuspended } from "@vue/test-utils" import { createVuetify } from "vuetify" import * as components from "vuetify/components" From 5d38e1f798b1f7fa4c0a5bff31294a18a7faefb4 Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Mon, 1 Sep 2025 14:41:58 +0200 Subject: [PATCH 40/43] empty From eb03097640052af6e94cfd2bef44313ad35c3c0c Mon Sep 17 00:00:00 2001 From: Arnaud Botella Date: Mon, 1 Sep 2025 14:45:49 +0200 Subject: [PATCH 41/43] list true From f668dc57f8f343e5a53bafdb6877fb5f69dcbccb Mon Sep 17 00:00:00 2001 From: BotellaA <3213882+BotellaA@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:05:55 +0000 Subject: [PATCH 42/43] Apply prepare changes --- .oxlintrc.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .oxlintrc.json diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 00000000..76a03178 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,11 @@ +{ + "categories": { + "correctness": "error", + "suspicious": "error", + "pedantic": "warning", + "perf": "error", + "style": "error", + "restriction": "error" + }, + "plugins": ["import", "node", "oxc", "promise", "unicorn", "vitest"] +} From c458e03e0b6bc182f95078964ab64b44962d9f3c Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Fri, 5 Sep 2025 14:23:43 +0000 Subject: [PATCH 43/43] Apply prepare changes --- .oxlintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 76a03178..79c1bdc1 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -2,7 +2,7 @@ "categories": { "correctness": "error", "suspicious": "error", - "pedantic": "warning", + "pedantic": "warn", "perf": "error", "style": "error", "restriction": "error"