|
66 | 66 | const allowed_objects = ref({}) |
67 | 67 | const toggle_loading = useToggle(loading) |
68 | 68 |
|
69 | | - |
70 | 69 | 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) { |
| 70 | + const object_keys = Object.keys(object_map) |
| 71 | + if (!object_keys.length) { |
| 72 | + return null |
| 73 | + } |
| 74 | + const highest_load_score = Math.max( |
| 75 | + ...object_keys.map((key) => object_map[key].is_loadable), |
| 76 | + ) |
| 77 | + if (highest_load_score <= 0) { |
| 78 | + return null |
| 79 | + } |
| 80 | + const best_score_objects = object_keys.filter( |
| 81 | + (key) => object_map[key].is_loadable === highest_load_score, |
| 82 | + ) |
| 83 | + if (best_score_objects.length === 1) { |
| 84 | + return best_score_objects[0] |
| 85 | + } |
| 86 | + const highest_priority = Math.max( |
| 87 | + ...best_score_objects.map( |
| 88 | + (key) => object_map[key].object_priority ?? -Infinity, |
| 89 | + ), |
| 90 | + ) |
| 91 | + const best_priority_objects = best_score_objects.filter( |
| 92 | + (key) => object_map[key].object_priority === highest_priority, |
| 93 | + ) |
| 94 | + if (highest_priority !== -Infinity && best_priority_objects.length === 1) { |
| 95 | + return best_priority_objects[0] |
| 96 | + } |
79 | 97 | return null |
80 | 98 | } |
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 | 99 |
|
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) |
| 100 | + async function get_allowed_objects() { |
| 101 | + toggle_loading() |
| 102 | + allowed_objects.value = {} |
| 103 | + const promise_array = filenames.map((filename) => { |
| 104 | + const params = { filename, supported_feature } |
| 105 | + return api_fetch({ schema, params }) |
| 106 | + }) |
| 107 | + const responses = await Promise.all(promise_array) |
| 108 | + const allowed_objects_list = responses.map( |
| 109 | + (response) => response.data.value.allowed_objects, |
| 110 | + ) |
| 111 | + const all_keys = [...new Set(allowed_objects_list.flatMap(Object.keys))] |
| 112 | + const common_keys = all_keys.filter((key) => |
| 113 | + allowed_objects_list.every((obj) => key in obj), |
| 114 | + ) |
| 115 | + const final_object = {} |
| 116 | + for (const key of common_keys) { |
| 117 | + const load_scores = allowed_objects_list.map( |
| 118 | + (obj) => obj[key].is_loadable, |
| 119 | + ) |
| 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) |
| 126 | + } |
126 | 127 | } |
| 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() |
127 | 139 | } |
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 | | -} |
140 | 140 |
|
141 | 141 | function set_geode_object(input_geode_object) { |
142 | 142 | if (input_geode_object != "") { |
|
0 commit comments