1717 <tr class =" content" >
1818 <td class =" data" >{{ instance?.loader }} {{ instance?.game_version }}</td >
1919 <td >
20- <multiselect
20+ <Combobox
2121 v-if =" versions?.length > 1"
22- v-model =" selectedVersion "
23- :options =" versions "
22+ v-model =" selectedVersionId "
23+ :options =" versionOptions "
2424 :searchable =" true"
2525 placeholder =" Select version"
26- open-direction =" top"
27- :show-labels =" false"
28- :custom-label ="
29- (version) =>
30- `${version?.name} (${version?.loaders
31- .map((name) => formatLoader(formatMessage, name))
32- .join(', ')} - ${version?.game_versions.join(', ')})`
33- "
26+ force-direction =" up"
3427 :max-height =" 150"
3528 />
3629 <span v-else >
37- <span >
38- {{ selectedVersion?.name }} ({{
39- selectedVersion?.loaders
40- .map((name) => formatLoader(formatMessage, name))
41- .join(', ')
42- }}
43- - {{ selectedVersion?.game_versions.join(', ') }})
44- </span >
30+ <span >{{ selectedVersionLabel }}</span >
4531 </span >
4632 </td >
4733 </tr >
5945
6046<script setup>
6147import { DownloadIcon , XIcon } from ' @modrinth/assets'
62- import { Button , formatLoader , injectNotificationManager , useVIntl } from ' @modrinth/ui'
63- import { ref } from ' vue'
64- import Multiselect from ' vue-multiselect'
48+ import { Button , Combobox , formatLoader , injectNotificationManager , useVIntl } from ' @modrinth/ui'
49+ import { computed , ref } from ' vue'
6550
6651import ModalWrapper from ' @/components/ui/modal/ModalWrapper.vue'
6752import { trackEvent } from ' @/helpers/analytics'
@@ -79,11 +64,35 @@ const installing = ref(false)
7964
8065const onInstall = ref (() => {})
8166
67+ const selectedVersionLabel = computed (() => {
68+ if (! selectedVersion .value ) return ' '
69+ return ` ${ selectedVersion .value .name } (${ selectedVersion .value .loaders
70+ .map ((name ) => formatLoader (formatMessage, name))
71+ .join (' , ' )} - ${ selectedVersion .value .game_versions .join (' , ' )} )`
72+ })
73+
74+ const versionOptions = computed (() =>
75+ (versions .value ?? []).map ((version ) => ({
76+ value: version .id ,
77+ label: ` ${ version .name } (${ version .loaders
78+ .map ((name ) => formatLoader (formatMessage, name))
79+ .join (' , ' )} - ${ version .game_versions .join (' , ' )} )` ,
80+ })),
81+ )
82+
83+ const selectedVersionId = computed ({
84+ get : () => selectedVersion .value ? .id ?? null ,
85+ set: (value ) => {
86+ if (! value) return
87+ selectedVersion .value = (versions .value ?? []).find ((version ) => version .id === value) ?? null
88+ },
89+ })
90+
8291defineExpose ({
8392 show : (instanceVal , projectVal , projectVersions , selected , callback ) => {
8493 instance .value = instanceVal
85- versions .value = projectVersions
86- selectedVersion .value = selected ?? projectVersions[0 ]
94+ versions .value = projectVersions ?? []
95+ selectedVersion .value = selected ?? projectVersions? . [0 ] ?? null
8796
8897 project .value = projectVal
8998
@@ -162,9 +171,5 @@ td:first-child {
162171 display: flex;
163172 flex- direction: column;
164173 gap: 1rem ;
165-
166- : deep (.animated - dropdown .options ) {
167- max- height: 13 .375rem ;
168- }
169174}
170175< / style>
0 commit comments