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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ formatMessage(messages.searchResults) }}
+
+
+
+
+
+
+ {{ formatMessage(messages.noResults) }}
+
+
+
+
+
+ {{ formatMessage(messages.startTyping) }}
+
+ {{ formatMessage(messages.searchHint) }}
+ {{ formatMessage(messages.navigationHint) }}
+
+
+
+
+
+
+
+
+
+
+
+
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
-
+
+
+
+ {{ report.reporterUser.username }}
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ userData.bio }}
+
+
+
+ {{ userData.projects_count }} projects
+
+
+
+
+
![]()
+
+
+ {{ project.title }}
+
+
+ {{ $formatNumber(project.downloads) }} downloads
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+