Skip to content

Commit f776da4

Browse files
committed
added function to select geode_object
1 parent 1c36b23 commit f776da4

File tree

1 file changed

+69
-74
lines changed

1 file changed

+69
-74
lines changed

components/ObjectSelector.vue

Lines changed: 69 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -66,82 +66,77 @@
6666
const allowed_objects = ref({})
6767
const toggle_loading = useToggle(loading)
6868
69-
async function get_allowed_objects() {
70-
toggle_loading()
71-
allowed_objects.value = {}
72-
const promise_array = []
73-
for (const filename of filenames) {
74-
const params = { filename, supported_feature }
75-
const promise = api_fetch({ schema, params })
76-
promise_array.push(promise)
77-
}
78-
const api_responses = await Promise.all(promise_array)
79-
const allowed_objects_list = []
80-
for (const api_response of api_responses) {
81-
allowed_objects_list.push(api_response.data.value.allowed_objects)
82-
}
83-
const all_keys = [
84-
...new Set(
85-
allowed_objects_list.flatMap((allowed_object_map) =>
86-
Object.keys(allowed_object_map),
87-
),
88-
),
89-
]
90-
const common_keys = all_keys.filter(
91-
(candidate_key) =>
92-
!allowed_objects_list.some(
93-
(allowed_object_map) =>
94-
!Object.prototype.hasOwnProperty.call(allowed_object_map, candidate_key),
95-
),
96-
)
97-
const final_object = {}
98-
for (const key of common_keys) {
99-
const load_score_list = allowed_objects_list.map(
100-
(allowed_object_map) => allowed_object_map[key].is_loadable,
101-
)
102-
const priority_list = allowed_objects_list
103-
.map((allowed_object_map) => allowed_object_map[key].object_priority)
104-
.filter((priority_value) => priority_value !== undefined && priority_value !== null)
105-
final_object[key] = { is_loadable: Math.min(...load_score_list) }
106-
if (priority_list.length) {
107-
final_object[key].object_priority = Math.max(...priority_list)
108-
}
109-
}
110-
allowed_objects.value = final_object
111-
let already_selected = false
112-
const object_keys = Object.keys(final_object)
113-
if (object_keys.length) {
114-
const highest_load_score = Math.max(
115-
...object_keys.map((k) => final_object[k].is_loadable),
116-
)
117-
if (highest_load_score > 0) {
118-
const best_score_objects = object_keys.filter(
119-
(k) => final_object[k].is_loadable === highest_load_score,
120-
)
121-
if (best_score_objects.length === 1) {
122-
set_geode_object(best_score_objects[0])
123-
already_selected = true
124-
} else {
125-
const highest_priority = Math.max(
126-
...best_score_objects.map(
127-
(k) => final_object[k].object_priority ?? -Infinity,
128-
),
129-
)
130-
const best_priority_objects = best_score_objects.filter(
131-
(k) => final_object[k].object_priority === highest_priority,
132-
)
133-
if (highest_priority !== -Infinity && best_priority_objects.length === 1) {
134-
set_geode_object(best_priority_objects[0])
135-
already_selected = true
136-
}
137-
}
138-
}
139-
}
140-
if (!already_selected && object_keys.length === 1) {
141-
set_geode_object(object_keys[0])
69+
70+
function select_geode_object(object_map) {
71+
const object_keys = Object.keys(object_map)
72+
if (!object_keys.length) {
73+
return null
74+
}
75+
const highest_load_score = Math.max(
76+
...object_keys.map((key) => object_map[key].is_loadable),
77+
)
78+
if (highest_load_score <= 0) {
79+
return null
80+
}
81+
const best_score_objects = object_keys.filter(
82+
(key) => object_map[key].is_loadable === highest_load_score,
83+
)
84+
if (best_score_objects.length === 1) {
85+
return best_score_objects[0]
86+
}
87+
const highest_priority = Math.max(
88+
...best_score_objects.map(
89+
(key) => object_map[key].object_priority ?? -Infinity,
90+
),
91+
)
92+
const best_priority_objects = best_score_objects.filter(
93+
(key) => object_map[key].object_priority === highest_priority,
94+
)
95+
if (highest_priority !== -Infinity && best_priority_objects.length === 1) {
96+
return best_priority_objects[0]
97+
}
98+
return null
99+
}
100+
101+
102+
async function get_allowed_objects() {
103+
toggle_loading()
104+
allowed_objects.value = {}
105+
const promise_array = filenames.map((filename) => {
106+
const params = { filename, supported_feature }
107+
return api_fetch({ schema, params })
108+
})
109+
const responses = await Promise.all(promise_array)
110+
const allowed_objects_list = responses.map(
111+
(response) => response.data.value.allowed_objects,
112+
)
113+
const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))]
114+
const common_keys = all_keys.filter((key) =>
115+
allowed_objects_list.every((obj) => key in obj),
116+
)
117+
const final_object = {}
118+
for (const key of common_keys) {
119+
const load_scores = allowed_objects_list.map((obj) => obj[key].is_loadable)
120+
const priorities = allowed_objects_list
121+
.map((obj) => obj[key].object_priority)
122+
.filter((p) => p !== undefined && p !== null)
123+
final_object[key] = { is_loadable: Math.min(...load_scores) }
124+
if (priorities.length) {
125+
final_object[key].object_priority = Math.max(...priorities)
142126
}
143-
toggle_loading()
144127
}
128+
allowed_objects.value = final_object
129+
let already_selected = false
130+
const selected_object = select_geode_object(final_object)
131+
if (selected_object) {
132+
set_geode_object(selected_object)
133+
already_selected = true
134+
}
135+
if (!already_selected && Object.keys(final_object).length === 1) {
136+
set_geode_object(Object.keys(final_object)[0])
137+
}
138+
toggle_loading()
139+
}
145140
146141
147142
function set_geode_object(input_geode_object) {

0 commit comments

Comments
 (0)