Skip to content

Commit 820702b

Browse files
committed
trigger
2 parents 9a59d2f + 9ee157d commit 820702b

File tree

1 file changed

+68
-31
lines changed

1 file changed

+68
-31
lines changed

components/ObjectSelector.vue

Lines changed: 68 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -101,40 +101,77 @@ function select_geode_object(object_map) {
101101
return
102102
}
103103
104-
105-
async function get_allowed_objects() {
106-
toggle_loading()
107-
allowed_objects.value = {}
108-
const promise_array = filenames.map((filename) => {
109-
const params = { filename, supported_feature }
110-
return api_fetch({ schema, params })
111-
})
112-
const responses = await Promise.all(promise_array)
113-
const allowed_objects_list = responses.map(
114-
(response) => response.data.value.allowed_objects,
115-
)
116-
const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))]
117-
const common_keys = all_keys.filter((key) =>
118-
allowed_objects_list.every((obj) => key in obj),
119-
)
120-
const final_object = {}
121-
for (const key of common_keys) {
122-
const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable)
123-
const priorities = allowed_objects_list
124-
.map((obj) => obj[key].object_priority)
125-
.filter((p) => p !== undefined && p !== null)
126-
final_object[key] = { is_loadable: Math.min(...load_scores) }
127-
if (priorities.length) {
128-
final_object[key].object_priority = Math.max(...priorities)
104+
function select_geode_object(object_map) {
105+
const object_keys = Object.keys(object_map)
106+
if (!object_keys.length) {
107+
return null
108+
}
109+
const highest_load_score = Math.max(
110+
...object_keys.map((key) => object_map[key].is_loadable),
111+
)
112+
if (highest_load_score <= 0) {
113+
return null
114+
}
115+
const best_score_objects = object_keys.filter(
116+
(key) => object_map[key].is_loadable === highest_load_score,
117+
)
118+
if (best_score_objects.length === 1) {
119+
return best_score_objects[0]
129120
}
121+
const highest_priority = Math.max(
122+
...best_score_objects.map(
123+
(key) => object_map[key].object_priority ?? -Infinity,
124+
),
125+
)
126+
const best_priority_objects = best_score_objects.filter(
127+
(key) => object_map[key].object_priority === highest_priority,
128+
)
129+
if (highest_priority !== -Infinity && best_priority_objects.length === 1) {
130+
return best_priority_objects[0]
131+
}
132+
return null
130133
}
131-
allowed_objects.value = final_object
132-
const selected_object = select_geode_object(final_object)
133-
if (selected_object) {
134-
set_geode_object(selected_object)
134+
135+
async function get_allowed_objects() {
136+
toggle_loading()
137+
allowed_objects.value = {}
138+
const promise_array = filenames.map((filename) => {
139+
const params = { filename, supported_feature }
140+
return api_fetch({ schema, params })
141+
})
142+
const responses = await Promise.all(promise_array)
143+
const allowed_objects_list = responses.map(
144+
(response) => response.data.value.allowed_objects,
145+
)
146+
const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))]
147+
const common_keys = all_keys.filter((key) =>
148+
allowed_objects_list.every((obj) => key in obj),
149+
)
150+
const final_object = {}
151+
for (const key of common_keys) {
152+
const load_scores = allowed_objects_list.map(
153+
(obj) => obj[key].is_loadable,
154+
)
155+
const priorities = allowed_objects_list
156+
.map((obj) => obj[key].object_priority)
157+
.filter((p) => p !== undefined && p !== null)
158+
final_object[key] = { is_loadable: Math.min(...load_scores) }
159+
if (priorities.length) {
160+
final_object[key].object_priority = Math.max(...priorities)
161+
}
162+
}
163+
allowed_objects.value = final_object
164+
let already_selected = false
165+
const selected_object = select_geode_object(final_object)
166+
if (selected_object) {
167+
set_geode_object(selected_object)
168+
already_selected = true
169+
}
170+
if (!already_selected && Object.keys(final_object).length === 1) {
171+
set_geode_object(Object.keys(final_object)[0])
172+
}
173+
toggle_loading()
135174
}
136-
toggle_loading()
137-
}
138175
139176
function set_geode_object(input_geode_object) {
140177
if (input_geode_object != "") {

0 commit comments

Comments
 (0)