Proper handling of modpack loaders (#4940)

* fix handling modpack loader

* fix order

* increase timeout

* fix search erroring on non alphanumeric input for searching project id
This commit is contained in:
Truman Gao
2025-12-19 15:24:40 -08:00
committed by GitHub
parent 67835b04a8
commit 1e9e13aebb
6 changed files with 20 additions and 14 deletions

View File

@@ -44,10 +44,7 @@ async function openEditVersionModal(versionId: string, projectId: string, stageI
dependencies: versionData.dependencies ?? [], dependencies: versionData.dependencies ?? [],
existing_files: versionData.files ?? [], existing_files: versionData.files ?? [],
environment: versionData.environment, environment: versionData.environment,
} mrpack_loaders: versionData.mrpack_loaders,
if (projectV2.value.project_type === 'modpack' && draftVersionData.loaders.includes('mrpack')) {
draftVersionData.loaders.push(...(versionData.mrpack_loaders ?? []))
} }
openCreateVersionModal(draftVersionData, stageId) openCreateVersionModal(draftVersionData, stageId)

View File

@@ -26,7 +26,8 @@ const options = ref<DropdownOption<string>[]>([])
const { labrinth } = injectModrinthClient() const { labrinth } = injectModrinthClient()
const search = async (query: string) => { const search = async (query: string) => {
if (!query.trim()) { query = query.trim()
if (!query) {
searchLoading.value = false searchLoading.value = false
return return
} }
@@ -49,7 +50,7 @@ const search = async (query: string) => {
const resultsByProjectId = await labrinth.projects_v2.search({ const resultsByProjectId = await labrinth.projects_v2.search({
query: '', query: '',
limit: 20, limit: 20,
facets: [[`project_id:${query}`]], facets: [[`project_id:${query.replace(/[^a-zA-Z0-9]/g, '')}`]], // remove any non-alphanumeric characters
}) })
options.value = [...resultsByProjectId.hits, ...results.hits].map((hit) => ({ options.value = [...resultsByProjectId.hits, ...results.hits].map((hit) => ({

View File

@@ -5,7 +5,7 @@
<div class="flex flex-col gap-3 rounded-2xl border border-solid border-surface-5 p-4"> <div class="flex flex-col gap-3 rounded-2xl border border-solid border-surface-5 p-4">
<div class="grid gap-2.5"> <div class="grid gap-2.5">
<span class="font-semibold text-contrast">Project <span class="text-red">*</span></span> <span class="font-semibold text-contrast">Project <span class="text-red">*</span></span>
<ModSelect v-model="newDependencyProjectId" /> <DependencySelect v-model="newDependencyProjectId" />
</div> </div>
<template v-if="newDependencyProjectId"> <template v-if="newDependencyProjectId">
@@ -92,7 +92,7 @@ import {
} from '@modrinth/ui' } from '@modrinth/ui'
import type { DropdownOption } from '@modrinth/ui/src/components/base/Combobox.vue' import type { DropdownOption } from '@modrinth/ui/src/components/base/Combobox.vue'
import ModSelect from '~/components/ui/create-project-version/components/DependencySelect.vue' import DependencySelect from '~/components/ui/create-project-version/components/DependencySelect.vue'
import { injectManageVersionContext } from '~/providers/version/manage-version-modal' import { injectManageVersionContext } from '~/providers/version/manage-version-modal'
import AddedDependencyRow from '../components/AddedDependencyRow.vue' import AddedDependencyRow from '../components/AddedDependencyRow.vue'

View File

@@ -6,7 +6,7 @@
</span> </span>
<Chips <Chips
v-model="draftVersion.version_type" v-model="draftVersion.version_type"
:items="['release', 'alpha', 'beta']" :items="['release', 'beta', 'alpha']"
:never-empty="true" :never-empty="true"
:capitalize="true" :capitalize="true"
/> />
@@ -61,7 +61,7 @@
> >
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
<template <template
v-for="loader in draftVersion.loaders.map((selectedLoader) => v-for="loader in draftVersionLoaders.map((selectedLoader) =>
loaders.find((loader) => selectedLoader === loader.name), loaders.find((loader) => selectedLoader === loader.name),
)" )"
> >
@@ -175,6 +175,12 @@ const generatedState = useGeneratedState()
const loaders = computed(() => generatedState.value.loaders) const loaders = computed(() => generatedState.value.loaders)
const isModpack = computed(() => projectType.value === 'modpack') const isModpack = computed(() => projectType.value === 'modpack')
const draftVersionLoaders = computed(() =>
[
...new Set([...draftVersion.value.loaders, ...(draftVersion.value.mrpack_loaders ?? [])]),
].filter((loader) => loader !== 'mrpack'),
)
const editLoaders = () => { const editLoaders = () => {
modal.value?.setStage('from-details-loaders') modal.value?.setStage('from-details-loaders')
} }

View File

@@ -297,7 +297,7 @@ export function createManageVersionContext(
try { try {
if (!version.version_id) throw new Error('Version ID is required to save edits.') if (!version.version_id) throw new Error('Version ID is required to save edits.')
await labrinth.versions_v3.modifyVersion(version.version_id, { const data: Labrinth.Versions.v3.ModifyVersionRequest = {
name: version.name || version.version_number, name: version.name || version.version_number,
version_number: version.version_number, version_number: version.version_number,
changelog: version.changelog, changelog: version.changelog,
@@ -313,7 +313,9 @@ export function createManageVersionContext(
hash: file.hashes.sha1, hash: file.hashes.sha1,
file_type: file.file_type ?? null, file_type: file.file_type ?? null,
})), })),
}) }
await labrinth.versions_v3.modifyVersion(version.version_id, data)
if (files.length > 0) { if (files.length > 0) {
await labrinth.versions_v3.addFilesToVersion(version.version_id, files) await labrinth.versions_v3.addFilesToVersion(version.version_id, files)

View File

@@ -190,7 +190,7 @@ export class LabrinthVersionsV3Module extends AbstractModule {
version: 3, version: 3,
method: 'POST', method: 'POST',
body: formData, body: formData,
timeout: 120000, timeout: 60 * 5 * 1000,
headers: { headers: {
'Content-Type': '', 'Content-Type': '',
}, },
@@ -281,7 +281,7 @@ export class LabrinthVersionsV3Module extends AbstractModule {
version: 2, version: 2,
method: 'POST', method: 'POST',
body: formData, body: formData,
timeout: 120000, timeout: 60 * 5 * 1000,
headers: { headers: {
'Content-Type': '', 'Content-Type': '',
}, },