|
67 | 67 | const toggle_loading = useToggle(loading) |
68 | 68 |
|
69 | 69 |
|
70 | | -function select_geode_object(object_map) { |
| 70 | + function select_geode_object(object_map) { |
71 | 71 | const object_keys = Object.keys(object_map) |
72 | 72 | if (!object_keys.length) { |
73 | 73 | return |
@@ -101,77 +101,41 @@ function select_geode_object(object_map) { |
101 | 101 | return |
102 | 102 | } |
103 | 103 |
|
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] |
120 | | - } |
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 |
133 | | - } |
134 | 104 |
|
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]) |
| 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) |
172 | 129 | } |
173 | | - toggle_loading() |
174 | 130 | } |
| 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) |
| 135 | + } |
| 136 | +
|
| 137 | + toggle_loading() |
| 138 | +} |
175 | 139 |
|
176 | 140 | function set_geode_object(input_geode_object) { |
177 | 141 | if (input_geode_object != "") { |
|
0 commit comments