Refactor search page, migrate to /discover/ (#4862)

This commit is contained in:
Prospector
2025-12-09 14:25:45 -08:00
committed by GitHub
parent 251e89fe5a
commit 1d64b2e22a
22 changed files with 1252 additions and 973 deletions

View File

@@ -361,6 +361,122 @@ export namespace Labrinth {
}
}
export namespace Versions {
export namespace v2 {
export type VersionType = 'release' | 'beta' | 'alpha'
export type VersionStatus =
| 'listed'
| 'archived'
| 'draft'
| 'unlisted'
| 'scheduled'
| 'unknown'
export type DependencyType = 'required' | 'optional' | 'incompatible' | 'embedded'
export type FileType = 'required-resource-pack' | 'optional-resource-pack' | 'unknown'
export type VersionFile = {
hashes: Record<string, string>
url: string
filename: string
primary: boolean
size: number
file_type?: FileType
}
export type Dependency = {
file_name?: string
dependency_type: DependencyType
} & (
| {
project_id: string
}
| {
version_id: string
project_id?: string
}
)
export type Version = {
id: string
project_id: string
author_id: string
featured: boolean
name: string
version_number: string
changelog: string
changelog_url?: string | null
date_published: string
downloads: number
version_type: VersionType
status: VersionStatus
requested_status?: VersionStatus | null
files: VersionFile[]
dependencies: Dependency[]
game_versions: string[]
loaders: string[]
}
}
export namespace v3 {
export type VersionType = 'release' | 'beta' | 'alpha'
export type VersionStatus =
| 'listed'
| 'archived'
| 'draft'
| 'unlisted'
| 'scheduled'
| 'unknown'
export type DependencyType = 'required' | 'optional' | 'incompatible' | 'embedded'
export type FileType = 'required-resource-pack' | 'optional-resource-pack' | 'unknown'
export type VersionFile = {
hashes: Record<string, string>
url: string
filename: string
primary: boolean
size: number
file_type?: FileType
}
export type Dependency = {
version_id?: string
project_id?: string
file_name?: string
dependency_type: DependencyType
}
export type Version = {
id: string
project_id: string
author_id: string
featured: boolean
name: string
version_number: string
project_types: string[]
games: string[]
changelog: string
date_published: string
downloads: number
version_type: VersionType
status: VersionStatus
requested_status?: VersionStatus | null
files: VersionFile[]
dependencies: Dependency[]
loaders: string[]
ordering?: number | null
game_versions?: string[]
mrpack_loaders?: string[]
environment?: string
}
}
}
export namespace Tags {
export namespace v2 {
export interface Category {

View File

@@ -56,6 +56,16 @@ const emit = defineEmits(['onOpen', 'onClose'])
const slots = useSlots()
watch(
() => props.openByDefault,
(newValue) => {
if (newValue !== toggledOpen.value) {
toggledOpen.value = newValue
}
},
{ immediate: true },
)
function open() {
toggledOpen.value = true
emit('onOpen')

View File

@@ -55,7 +55,6 @@ onUnmounted(() => {
}
})
function updateFade(scrollTop, offsetHeight, scrollHeight) {
console.log(scrollTop, offsetHeight, scrollHeight)
scrollableAtBottom.value = Math.ceil(scrollTop + offsetHeight) >= scrollHeight
scrollableAtTop.value = scrollTop <= 0
}

View File

@@ -560,6 +560,15 @@
"project-type.resourcepack.lowercase": {
"defaultMessage": "{count, plural, one {resource pack} other {resource packs}}"
},
"project-type.server.capital": {
"defaultMessage": "{count, plural, one {Server} other {Servers}}"
},
"project-type.server.category": {
"defaultMessage": "Servers"
},
"project-type.server.lowercase": {
"defaultMessage": "{count, plural, one {server} other {servers}}"
},
"project-type.shader.capital": {
"defaultMessage": "{count, plural, one {Shader} other {Shaders}}"
},

View File

@@ -433,6 +433,10 @@ export const commonProjectTypeCategoryMessages = defineMessages({
id: 'project-type.shader.category',
defaultMessage: 'Shaders',
},
server: {
id: 'project-type.server.category',
defaultMessage: 'Servers',
},
})
export const commonProjectTypeTitleMessages = defineMessages({
@@ -460,6 +464,10 @@ export const commonProjectTypeTitleMessages = defineMessages({
id: 'project-type.shader.capital',
defaultMessage: '{count, plural, one {Shader} other {Shaders}}',
},
server: {
id: 'project-type.server.capital',
defaultMessage: '{count, plural, one {Server} other {Servers}}',
},
})
export const commonProjectTypeSentenceMessages = defineMessages({
@@ -487,6 +495,10 @@ export const commonProjectTypeSentenceMessages = defineMessages({
id: 'project-type.shader.lowercase',
defaultMessage: '{count, plural, one {shader} other {shaders}}',
},
server: {
id: 'project-type.server.lowercase',
defaultMessage: '{count, plural, one {server} other {servers}}',
},
})
export const commonSettingsMessages = defineMessages({

View File

@@ -1,3 +1,4 @@
import type { Labrinth } from '@modrinth/api-client'
import { ClientIcon, ServerIcon } from '@modrinth/assets'
import { formatCategory, formatCategoryHeader, sortByNameOrNumber } from '@modrinth/utils'
import { defineMessage, useVIntl } from '@vintl/vintl'
@@ -67,25 +68,10 @@ const ALL_PROJECT_TYPES: ProjectType[] = [
'plugin',
]
export interface Platform {
name: string
icon: string
supported_project_types: ProjectType[]
default: boolean
formatted_name: string
}
export interface Category {
icon: string
name: string
project_type: ProjectType
header: string
}
export interface Tags {
gameVersions: GameVersion[]
loaders: Platform[]
categories: Category[]
gameVersions: Labrinth.Tags.v2.GameVersion[]
loaders: Labrinth.Tags.v2.Loader[]
categories: Labrinth.Tags.v2.Category[]
}
export interface SortType {

View File

@@ -287,7 +287,7 @@ export const formatVersions = (versionArray, gameVersions) => {
return (output.length === 0 ? versionArray : output).join(', ')
}
export function cycleValue(value, values) {
export function cycleValue<T extends string>(value: T, values: T[]): T {
const index = values.indexOf(value) + 1
return values[index % values.length]
}