feat: clean up browse shared layout logic + introduce queuing (#6030)

* feat: clean up edge case behaviour and add queued to install logic

* fix: remove version choice modal

* feat: queued flow

* feat: standardize headers in app on proj pages

* fix: clear btn

* feat: installing floating popup

* fix: lint

* fix: onboarding/reset logic change for modpacks

* qa: big ol qa

* fix: lint

* fix: lint

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
This commit is contained in:
Calum H.
2026-05-09 19:01:23 +00:00
committed by GitHub
co-authored by Prospector
parent 671f6d264a
commit a79b8e0777
40 changed files with 3726 additions and 664 deletions
@@ -0,0 +1,43 @@
import { type Labrinth, ModrinthApiError } from '@modrinth/api-client'
import { useServerModrinthClient } from '~/server/utils/api-client'
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, 'id')
if (!id) {
throw createError({
statusCode: 400,
message: 'Missing organization',
})
}
const client = useServerModrinthClient({ event })
let organization: Labrinth.Organizations.v3.Organization
try {
organization = await client.labrinth.organizations_v3.get(id)
} catch (error) {
if (error instanceof ModrinthApiError && error.statusCode === 404) {
throw createError({
statusCode: 404,
message: 'Organization not found',
})
}
throw createError({
statusCode: 502,
message: 'Failed to resolve organization avatar',
})
}
if (!organization.icon_url) {
throw createError({
statusCode: 404,
message: 'Organization avatar not found',
})
}
setHeader(event, 'cache-control', 'public, max-age=300, s-maxage=600')
return sendRedirect(event, organization.icon_url, 302)
})
@@ -0,0 +1,43 @@
import { type Labrinth, ModrinthApiError } from '@modrinth/api-client'
import { useServerModrinthClient } from '~/server/utils/api-client'
export default defineEventHandler(async (event) => {
const username = getRouterParam(event, 'username')
if (!username) {
throw createError({
statusCode: 400,
message: 'Missing username',
})
}
const client = useServerModrinthClient({ event })
let user: Labrinth.Users.v2.User
try {
user = await client.labrinth.users_v2.get(username)
} catch (error) {
if (error instanceof ModrinthApiError && error.statusCode === 404) {
throw createError({
statusCode: 404,
message: 'User not found',
})
}
throw createError({
statusCode: 502,
message: 'Failed to resolve user avatar',
})
}
if (!user.avatar_url) {
throw createError({
statusCode: 404,
message: 'User avatar not found',
})
}
setHeader(event, 'cache-control', 'public, max-age=300, s-maxage=600')
return sendRedirect(event, user.avatar_url, 302)
})