diff --git a/apps/app-frontend/src/pages/project/Index.vue b/apps/app-frontend/src/pages/project/Index.vue index 1f5082b136..e16ead5cdd 100644 --- a/apps/app-frontend/src/pages/project/Index.vue +++ b/apps/app-frontend/src/pages/project/Index.vue @@ -189,13 +189,26 @@ const [allLoaders, allGameVersions] = await Promise.all([ get_game_versions().catch(handleError).then(ref), ]) +async function loadVersionsInBatches(versionIds) { + const batchSize = 200 + const batches = [] + + for (let i = 0; i < versionIds.length; i += batchSize) { + const batch = versionIds.slice(i, i + batchSize) + batches.push(get_version_many(batch, 'must_revalidate').catch(handleError)) + } + + const batchResults = await Promise.all(batches) + return batchResults.flat() +} + async function fetchProjectData() { const project = await get_project(route.params.id, 'must_revalidate').catch(handleError) data.value = project ;[versions.value, members.value, categories.value, instance.value, instanceProjects.value] = await Promise.all([ - get_version_many(project.versions, 'must_revalidate').catch(handleError), + loadVersionsInBatches(project.versions).catch(handleError), get_team(project.team).catch(handleError), get_categories().catch(handleError), route.query.i ? getInstance(route.query.i).catch(handleError) : Promise.resolve(), diff --git a/apps/frontend/src/components/ui/CommandMenu.vue b/apps/frontend/src/components/ui/CommandMenu.vue new file mode 100644 index 0000000000..825e5a140c --- /dev/null +++ b/apps/frontend/src/components/ui/CommandMenu.vue @@ -0,0 +1,456 @@ + + + + + diff --git a/apps/frontend/src/components/ui/ProjectCard.vue b/apps/frontend/src/components/ui/ProjectCard.vue index 4a71f2ee3f..86acfb83d9 100644 --- a/apps/frontend/src/components/ui/ProjectCard.vue +++ b/apps/frontend/src/components/ui/ProjectCard.vue @@ -25,9 +25,11 @@

by - - {{ author }} - + + + {{ typeof author === "object" ? author.username : author }} + +

@@ -95,6 +97,7 @@ import Categories from "~/components/ui/search/Categories.vue"; import Badge from "~/components/ui/Badge.vue"; import EnvironmentIndicator from "~/components/ui/EnvironmentIndicator.vue"; import Avatar from "~/components/ui/Avatar.vue"; +import UserHoverCard from "~/components/ui/user/UserHoverCard.vue"; export default { components: { @@ -106,6 +109,7 @@ export default { UpdatedIcon, DownloadIcon, HeartIcon, + UserHoverCard, }, props: { id: { @@ -121,7 +125,7 @@ export default { default: "Project Name", }, author: { - type: String, + type: [String, Object], default: null, }, description: { @@ -522,4 +526,20 @@ export default { } } } + +.author { + font-size: 0.9em; + color: var(--color-text-secondary); + font-weight: normal; + + a { + color: var(--color-link); + text-decoration: none; + + &:hover { + color: var(--color-link-hover); + text-decoration: underline; + } + } +} diff --git a/apps/frontend/src/components/ui/report/ReportView.vue b/apps/frontend/src/components/ui/report/ReportView.vue index ce3c2eb660..401d769334 100644 --- a/apps/frontend/src/components/ui/report/ReportView.vue +++ b/apps/frontend/src/components/ui/report/ReportView.vue @@ -7,7 +7,13 @@ :link-stack="breadcrumbsStack" />

Report details

- + + +

Messages

@@ -24,6 +30,7 @@ import Breadcrumbs from "~/components/ui/Breadcrumbs.vue"; import ConversationThread from "~/components/ui/thread/ConversationThread.vue"; import ReportInfo from "~/components/ui/report/ReportInfo.vue"; +import UserHoverCard from "~/components/ui/user/UserHoverCard.vue"; import { addReportMessage } from "~/helpers/threads.js"; const props = defineProps({ diff --git a/apps/frontend/src/components/ui/user/UserHoverCard.vue b/apps/frontend/src/components/ui/user/UserHoverCard.vue new file mode 100644 index 0000000000..406fa057f1 --- /dev/null +++ b/apps/frontend/src/components/ui/user/UserHoverCard.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index f8f7253607..bd10351661 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -578,6 +578,7 @@ +