diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json index f91c60de95..90fa15eb31 100644 --- a/apps/frontend/src/locales/en-US/index.json +++ b/apps/frontend/src/locales/en-US/index.json @@ -554,6 +554,9 @@ "dashboard.affiliate-links.create.button": { "message": "Create affiliate link" }, + "dashboard.affiliate-links.empty.no-codes": { + "message": "No affiliate codes found." + }, "dashboard.affiliate-links.error.title": { "message": "Error loading affiliate links" }, @@ -572,6 +575,15 @@ "dashboard.affiliate-links.search": { "message": "Search affiliate links..." }, + "dashboard.analytics.from-projects": { + "message": "from {count} {count, plural, one {project} other {projects}}" + }, + "dashboard.analytics.total-downloads": { + "message": "Total downloads" + }, + "dashboard.analytics.total-followers": { + "message": "Total followers" + }, "dashboard.collections.button.create-new": { "message": "Create new" }, @@ -596,6 +608,18 @@ "dashboard.collections.long-title": { "message": "Your collections" }, + "dashboard.collections.placeholder.search": { + "message": "Search collections..." + }, + "dashboard.collections.sort.name-ascending": { + "message": "Name (A-Z)" + }, + "dashboard.collections.sort.recently-created": { + "message": "Recently Created" + }, + "dashboard.collections.sort.recently-updated": { + "message": "Recently Updated" + }, "dashboard.creator-tax-form-modal.confirmation.download-button": { "message": "Download {formType}" }, @@ -848,6 +872,168 @@ "dashboard.creator-withdraw-modal.withdraw-limit-used": { "message": "You've used up your {withdrawLimit} withdrawal limit. You must complete a tax form to withdraw more." }, + "dashboard.head-title": { + "message": "Dashboard" + }, + "dashboard.notifications.button.mark-all-as-read": { + "message": "Mark all as read" + }, + "dashboard.notifications.button.view-history": { + "message": "View history" + }, + "dashboard.notifications.empty.no-unread": { + "message": "You don't have any unread notifications." + }, + "dashboard.notifications.error.loading": { + "message": "Error loading notifications:" + }, + "dashboard.notifications.history.label": { + "message": "History" + }, + "dashboard.notifications.history.title": { + "message": "Notification history" + }, + "dashboard.notifications.link.see-all": { + "message": "See all" + }, + "dashboard.notifications.link.view-history": { + "message": "View notification history" + }, + "dashboard.notifications.link.view-more": { + "message": "View {extraNotifs} more {extraNotifs, plural, one {notification} other {notifications}}" + }, + "dashboard.notifications.loading": { + "message": "Loading notifications..." + }, + "dashboard.organizations.button.create": { + "message": "Create organization" + }, + "dashboard.organizations.empty.cta": { + "message": "Make an organization!" + }, + "dashboard.organizations.error.fetch": { + "message": "Failed to fetch organizations" + }, + "dashboard.organizations.member-count": { + "message": "{count} {count, plural, one {member} other {members}}" + }, + "dashboard.organizations.title": { + "message": "Organizations" + }, + "dashboard.projects.bulk-edit-hint": { + "message": "You can edit multiple projects at once by selecting them below." + }, + "dashboard.projects.bulk-edit.server-disabled": { + "message": "Server projects do not support bulk editing" + }, + "dashboard.projects.empty": { + "message": "You don't have any projects yet. Click the green button above to begin." + }, + "dashboard.projects.head-title": { + "message": "Projects" + }, + "dashboard.projects.links.and-more": { + "message": "and {count} more..." + }, + "dashboard.projects.links.button.clear-link": { + "message": "Clear link" + }, + "dashboard.projects.links.button.edit": { + "message": "Edit links" + }, + "dashboard.projects.links.changes-applied": { + "message": "Changes will be applied to {count} {count, plural, one {project} other {projects}}." + }, + "dashboard.projects.links.description": { + "message": "Any links you specify below will be overwritten on each of the selected projects. Any you leave blank will be ignored. You can clear a link from all selected projects using the trash can button." + }, + "dashboard.projects.links.discord-invite.description": { + "message": "An invitation link to your Discord server." + }, + "dashboard.projects.links.discord-invite.label": { + "message": "Discord invite" + }, + "dashboard.projects.links.issue-tracker.description": { + "message": "A place for users to report bugs, issues, and concerns about your project." + }, + "dashboard.projects.links.issue-tracker.label": { + "message": "Issue tracker" + }, + "dashboard.projects.links.placeholder.cleared": { + "message": "Existing link will be cleared" + }, + "dashboard.projects.links.placeholder.valid-discord-url": { + "message": "Enter a valid Discord invite URL" + }, + "dashboard.projects.links.placeholder.valid-url": { + "message": "Enter a valid URL" + }, + "dashboard.projects.links.show-all-projects": { + "message": "Show all projects" + }, + "dashboard.projects.links.source-code.description": { + "message": "A page/repository containing the source code for your project" + }, + "dashboard.projects.links.source-code.label": { + "message": "Source code" + }, + "dashboard.projects.links.wiki-page.description": { + "message": "A page containing information, documentation, and help for the project." + }, + "dashboard.projects.links.wiki-page.label": { + "message": "Wiki page" + }, + "dashboard.projects.notification.bulk-edit-success": { + "message": "Bulk edited selected project's links." + }, + "dashboard.projects.project.icon-alt": { + "message": "Icon for {title}" + }, + "dashboard.projects.project.moderator-message-aria": { + "message": "Project has a message from the moderators. View the project to see more." + }, + "dashboard.projects.project.review-environment-metadata": { + "message": "Please review environment metadata" + }, + "dashboard.projects.sort.ascending": { + "message": "Ascending" + }, + "dashboard.projects.sort.descending": { + "message": "Descending" + }, + "dashboard.projects.sort.option.name": { + "message": "Name" + }, + "dashboard.projects.sort.option.status": { + "message": "Status" + }, + "dashboard.projects.sort.option.type": { + "message": "Type" + }, + "dashboard.projects.table.icon": { + "message": "Icon" + }, + "dashboard.projects.table.id": { + "message": "ID" + }, + "dashboard.projects.table.name": { + "message": "Name" + }, + "dashboard.projects.table.status": { + "message": "Status" + }, + "dashboard.projects.table.type": { + "message": "Type" + }, + "dashboard.report.title": { + "message": "Report {id}" + }, + "dashboard.reports.active-title": { + "message": "Active reports" + }, + "dashboard.reports.title": { + "message": "Reports" + }, "dashboard.revenue.available-now": { "message": "Available now" }, @@ -884,6 +1070,9 @@ "dashboard.revenue.transactions.btn.download-csv": { "message": "Download as CSV" }, + "dashboard.revenue.transactions.head-title": { + "message": "Transaction history" + }, "dashboard.revenue.transactions.header": { "message": "Transactions" }, @@ -893,9 +1082,18 @@ "dashboard.revenue.transactions.none.desc": { "message": "Your payouts and withdrawals will appear here." }, + "dashboard.revenue.transactions.period.last-month": { + "message": "Last month" + }, + "dashboard.revenue.transactions.period.this-month": { + "message": "This month" + }, "dashboard.revenue.transactions.see-all": { "message": "See all" }, + "dashboard.revenue.transactions.year.all": { + "message": "All years" + }, "dashboard.revenue.withdraw.blocked-tin-mismatch": { "message": "Your withdrawals are temporarily locked because your TIN or SSN didn't match IRS records. Please contact support to reset and resubmit your tax form." }, @@ -908,6 +1106,33 @@ "dashboard.revenue.withdraw.header": { "message": "Withdraw" }, + "dashboard.sidebar.label.activeReports": { + "message": "Active reports" + }, + "dashboard.sidebar.label.analytics": { + "message": "Analytics" + }, + "dashboard.sidebar.label.creators": { + "message": "Creators" + }, + "dashboard.sidebar.label.dashboard": { + "message": "Dashboard" + }, + "dashboard.sidebar.label.notifications": { + "message": "Notifications" + }, + "dashboard.sidebar.label.organizations": { + "message": "Organizations" + }, + "dashboard.sidebar.label.overview": { + "message": "Overview" + }, + "dashboard.sidebar.label.projects": { + "message": "Projects" + }, + "dashboard.sidebar.label.revenue": { + "message": "Revenue" + }, "dashboard.withdraw.completion.account": { "message": "Account" }, diff --git a/apps/frontend/src/pages/dashboard.vue b/apps/frontend/src/pages/dashboard.vue index de3797c3d7..2be324416d 100644 --- a/apps/frontend/src/pages/dashboard.vue +++ b/apps/frontend/src/pages/dashboard.vue @@ -3,26 +3,47 @@
@@ -43,7 +64,7 @@ import { OrganizationIcon, ReportIcon, } from '@modrinth/assets' -import { commonMessages, useVIntl } from '@modrinth/ui' +import { commonMessages, defineMessages, useVIntl } from '@modrinth/ui' import { type User, UserBadge } from '@modrinth/utils' import NavStack from '~/components/ui/NavStack.vue' @@ -56,6 +77,45 @@ const isAffiliate = computed(() => { const { formatMessage } = useVIntl() +const messages = defineMessages({ + dashboard: { + id: 'dashboard.sidebar.label.dashboard', + defaultMessage: 'Dashboard', + }, + overview: { + id: 'dashboard.sidebar.label.overview', + defaultMessage: 'Overview', + }, + notifications: { + id: 'dashboard.sidebar.label.notifications', + defaultMessage: 'Notifications', + }, + activeReports: { + id: 'dashboard.sidebar.label.activeReports', + defaultMessage: 'Active reports', + }, + creators: { + id: 'dashboard.sidebar.label.creators', + defaultMessage: 'Creators', + }, + projects: { + id: 'dashboard.sidebar.label.projects', + defaultMessage: 'Projects', + }, + organizations: { + id: 'dashboard.sidebar.label.organizations', + defaultMessage: 'Organizations', + }, + analytics: { + id: 'dashboard.sidebar.label.analytics', + defaultMessage: 'Analytics', + }, + revenue: { + id: 'dashboard.sidebar.label.revenue', + defaultMessage: 'Revenue', + }, +}) + definePageMeta({ middleware: 'auth', }) diff --git a/apps/frontend/src/pages/dashboard/affiliate-links.vue b/apps/frontend/src/pages/dashboard/affiliate-links.vue index 708f0d0592..a02b7fea4d 100644 --- a/apps/frontend/src/pages/dashboard/affiliate-links.vue +++ b/apps/frontend/src/pages/dashboard/affiliate-links.vue @@ -44,7 +44,7 @@ v-else-if="!filteredAffiliates || filteredAffiliates.length === 0" class="py-8 text-center" > -No affiliate codes found.
+{{ formatMessage(messages.noAffiliateCodesFound) }}