Skip to content
Merged

Next #223

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
7390b4b
JulienChampagnol Aug 1, 2025
ccbbe09
object_priority & test added
MaxNumerique Aug 5, 2025
d2ee03a
indent corrected
MaxNumerique Aug 5, 2025
92577bf
test
MaxNumerique Aug 5, 2025
8ba767f
feat(object_priority): changed test and new function
MaxNumerique Aug 6, 2025
a27d2f2
corrected test object_priority name
MaxNumerique Aug 6, 2025
c946c41
Apply prepare changes
MaxNumerique Aug 6, 2025
da8b1b7
renamed vars
MaxNumerique Aug 6, 2025
1c36b23
Merge branch 'feat/object_priority' of https://github.com/Geode-solut…
MaxNumerique Aug 6, 2025
6bf890d
Apply prepare changes
MaxNumerique Aug 6, 2025
f776da4
added function to select geode_object
MaxNumerique Aug 6, 2025
d58e508
Merge branch 'feat/object_priority' of https://github.com/Geode-solut…
MaxNumerique Aug 6, 2025
9ee157d
Apply prepare changes
MaxNumerique Aug 6, 2025
9a59d2f
refacto get_allowed_objects
MaxNumerique Aug 6, 2025
820702b
trigger
MaxNumerique Aug 6, 2025
765dede
Apply prepare changes
MaxNumerique Aug 6, 2025
fbeb11c
test
MaxNumerique Aug 6, 2025
b62b824
Merge branch 'feat/object_priority' of https://github.com/Geode-solut…
MaxNumerique Aug 6, 2025
a2af394
Apply prepare changes
MaxNumerique Aug 6, 2025
231f553
format
MaxNumerique Aug 6, 2025
fe60892
Merge branch 'feat/object_priority' of https://github.com/Geode-solut…
MaxNumerique Aug 6, 2025
45def89
Apply prepare changes
MaxNumerique Aug 6, 2025
55ac9de
undefined added to returns
MaxNumerique Aug 6, 2025
472dacf
Merge branch 'feat/object_priority' of https://github.com/Geode-solut…
MaxNumerique Aug 6, 2025
21322e2
Apply prepare changes
MaxNumerique Aug 6, 2025
70ec582
Merge pull request #214 from Geode-solutions/feat/object_priority
MaxNumerique Aug 7, 2025
8430121
fix(ContextMenu): moved component into viewer folder
MaxNumerique Aug 7, 2025
bcd5f2b
Merge pull request #215 from Geode-solutions/fix/ContextMenu
MaxNumerique Aug 7, 2025
6ac8726
feat(Actions): js workflows
BotellaA Aug 7, 2025
4b876ea
fix(AllowedObjects): fixed bug where truncate function was looking fo…
MaxNumerique Aug 7, 2025
5b43249
undefined is ok to use
MaxNumerique Aug 7, 2025
31f7b8c
Merge pull request #216 from Geode-solutions/fix/undefined_allowed_ob…
MaxNumerique Aug 7, 2025
e29243f
Merge branch 'next' of https://github.com/Geode-solutions/OpenGeodeWe…
BotellaA Aug 7, 2025
e41f78c
Apply prepare changes
BotellaA Aug 7, 2025
6b12409
retry
BotellaA Aug 7, 2025
be4101b
again
BotellaA Aug 7, 2025
a04b46d
trigger
BotellaA Aug 7, 2025
b25912e
again
BotellaA Aug 7, 2025
5eb0db3
test
BotellaA Aug 7, 2025
6a9fff0
retry
BotellaA Aug 7, 2025
f9bc3dc
retry
BotellaA Aug 7, 2025
0b5c8ad
Apply prepare changes
BotellaA Aug 7, 2025
3b18837
update
BotellaA Aug 8, 2025
230b3ed
JulienChampagnol Aug 8, 2025
a56ddf8
Merge pull request #217 from Geode-solutions/feat/js-actions
BotellaA Aug 8, 2025
8797d42
fix(Package): update internal dependencies
BotellaA Aug 8, 2025
9ce2c93
fix(MeshComponents): added id to params
MaxNumerique Aug 8, 2025
5bf7b6e
Apply prepare changes
MaxNumerique Aug 8, 2025
3d2b7cc
Merge pull request #218 from Geode-solutions/fix/mesh_components
BotellaA Aug 8, 2025
ead244c
feat(HybridViewer): toggle object visibility
JulienChampagnol Aug 13, 2025
847884c
Merge branch 'next' of https://github.com/Geode-solutions/OpenGeodeWe…
JulienChampagnol Aug 14, 2025
0dc7973
Merge pull request #219 from Geode-solutions/feat/toggle_visibility-i…
BotellaA Aug 14, 2025
56c60c6
feat(HybridViewer): toggle object visibility
JulienChampagnol Sep 1, 2025
f9b4999
test
JulienChampagnol Sep 1, 2025
42bc166
remove mountSuspended broken import
JulienChampagnol Sep 1, 2025
5d38e1f
empty
BotellaA Sep 1, 2025
eb03097
list true
BotellaA Sep 1, 2025
06a7cd2
Merge pull request #220 from Geode-solutions/feat/toggle_visibility_i…
BotellaA Sep 4, 2025
f668dc5
Apply prepare changes
BotellaA Sep 4, 2025
c458e03
Apply prepare changes
JulienChampagnol Sep 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions .github/workflows/Branch-protection.yml

This file was deleted.

37 changes: 0 additions & 37 deletions .github/workflows/CICD.yml

This file was deleted.

11 changes: 11 additions & 0 deletions .github/workflows/pr_update.yml
Original file line number Diff line number Diff line change
@@ -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
11 changes: 0 additions & 11 deletions .github/workflows/prepare_pr.yml

This file was deleted.

14 changes: 14 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions .github/workflows/test_pr.yml
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"categories": {
"correctness": "error",
"suspicious": "error",
"pedantic": "warn",
"perf": "error",
"style": "error",
"restriction": "error"
},
"plugins": ["import", "node", "oxc", "promise", "unicorn", "vitest"]
}
3 changes: 1 addition & 2 deletions .releaserc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
plugins: [
'@semantic-release/commit-analyzer',
'@semantic-release/release-notes-generator',
'@semantic-release/github',
'@semantic-release/npm'
'@semantic-release/github'
]
}
16 changes: 16 additions & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -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],
},
}
85 changes: 61 additions & 24 deletions components/ObjectSelector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<v-img
:src="geode_objects[key].image"
cover
:class="!value['is_loadable'] ? 'disabled' : ''"
:class="!value['is_loadable'] ? 'disabled' : undefined"
/>
</v-card>
</span>
Expand Down Expand Up @@ -66,44 +66,81 @@
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 undefined
}
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 undefined
}
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 undefined
}

async function get_allowed_objects() {
toggle_loading()
allowed_objects.value = {}
var promise_array = []
for (const filename of filenames) {
const promise_array = filenames.map((filename) => {
const params = { filename, supported_feature }
const promise = api_fetch({ schema, params })
promise_array.push(promise)
}
return api_fetch({ schema, params })
})
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 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),
)
var final_object = {}
const 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 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
if (Object.keys(allowed_objects.value).length == 1) {
set_geode_object(Object.keys(allowed_objects.value)[0])
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 != "") {
if (input_geode_object) {
emit("update_values", { input_geode_object })
emit("increment_step")
}
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 2 additions & 0 deletions internal_stores/mesh/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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)
},
},
Expand Down
2 changes: 2 additions & 0 deletions internal_stores/model/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export default function useModelStyle() {
const blocksStyleStore = useBlocksStyle()
const modelEdgesStore = useModelEdgesStyle()
const modelPointsStore = useModelPointsStyle()
const hybridViewerStore = useHybridViewerStore()

/** Getters **/
function modelVisibility(id) {
Expand Down Expand Up @@ -70,6 +71,7 @@ export default function useModelStyle() {
{
response_function: () => {
dataStyleStore.styles[id].visibility = visibility
hybridViewerStore.setVisibility(id, visibility)
console.log("setModelVisibility", visibility)
},
},
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -34,11 +35,11 @@
},
"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",
"@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",
Expand Down
1 change: 1 addition & 0 deletions stores/data_base.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export const useDataBaseStore = defineStore("dataBase", () => {
{
schema: back_schemas.opengeodeweb_back.models.mesh_components,
params: {
id,
filename: native_filename,
geode_object,
},
Expand Down
6 changes: 6 additions & 0 deletions stores/hybrid_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -183,6 +188,7 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
db,
genericRenderWindow,
addItem,
setVisibility,
setZScaling,
syncRemoteCamera,
initHybridViewer,
Expand Down
29 changes: 29 additions & 0 deletions test/components/ObjectSelector.nuxt.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,33 @@ describe("ObjectSelector.vue", async () => {
input_geode_object: geode_object_1,
})
})

test(`test object_priority when is_loadable scores equal`, 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,
}
registerEndpoint(allowed_objects.$id, {
method: allowed_objects.methods[0],
handler: () => response,
})
const wrapper = await mountSuspended(ObjectSelector, {
global: {
plugins: [vuetify, pinia],
},
props: { filenames: ["test.toto"], supported_feature: "test" },
})
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,
})
})
})
1 change: 0 additions & 1 deletion test/components/Stepper.nuxt.test.js
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading