Files
modrinth/apps/app-frontend/src/routes.js
T
Calum H. (IMB11) 32517df4a4 Merge remote-tracking branch 'origin/main' into cal/hosting-server-instances
# Conflicts:
#	apps/app-frontend/src/pages/Browse.vue
#	apps/app-frontend/src/pages/hosting/manage/Index.vue
#	apps/app-frontend/src/pages/instance/Index.vue
#	apps/app-frontend/src/pages/project/Index.vue
#	apps/app-frontend/src/routes.js
#	apps/frontend/src/locales/en-US/index.json
#	apps/frontend/src/middleware/project.global.ts
#	apps/frontend/src/pages/[type]/[project].vue
#	apps/frontend/src/pages/discover/[type]/index.vue
#	apps/frontend/src/pages/organization/[organization].vue
#	apps/frontend/src/pages/user/[user].vue
#	packages/ui/src/components/base/FloatingActionBar.vue
#	packages/ui/src/components/base/PageHeader.vue
#	packages/ui/src/components/base/StackedAdmonitions.vue
#	packages/ui/src/components/base/TeleportOverflowMenu.vue
#	packages/ui/src/components/base/index.ts
#	packages/ui/src/components/project/ProjectHeader.vue
#	packages/ui/src/components/servers/server-header/ServerManageHeader.vue
#	packages/ui/src/components/servers/server-header/index.ts
#	packages/ui/src/composables/index.ts
#	packages/ui/src/layouts/shared/browse-tab/composables/use-browse-search.ts
#	packages/ui/src/layouts/shared/browse-tab/header.vue
#	packages/ui/src/layouts/shared/browse-tab/layout.vue
#	packages/ui/src/layouts/shared/content-tab/components/ContentModpackCard.vue
#	packages/ui/src/layouts/shared/content-tab/layout.vue
#	packages/ui/src/layouts/shared/installation-settings/components/ContentDiffModal.vue
#	packages/ui/src/layouts/shared/installation-settings/providers/installation-settings.ts
#	packages/ui/src/layouts/wrapped/hosting/manage/[id]/index.vue
#	packages/ui/src/locales/cs-CZ/index.json
#	packages/ui/src/locales/de-CH/index.json
#	packages/ui/src/locales/de-DE/index.json
#	packages/ui/src/locales/es-419/index.json
#	packages/ui/src/locales/es-ES/index.json
#	packages/ui/src/locales/fr-FR/index.json
#	packages/ui/src/locales/hu-HU/index.json
#	packages/ui/src/locales/id-ID/index.json
#	packages/ui/src/locales/it-IT/index.json
#	packages/ui/src/locales/ja-JP/index.json
#	packages/ui/src/locales/ko-KR/index.json
#	packages/ui/src/locales/ms-MY/index.json
#	packages/ui/src/locales/nl-NL/index.json
#	packages/ui/src/locales/pl-PL/index.json
#	packages/ui/src/locales/pt-BR/index.json
#	packages/ui/src/locales/ru-RU/index.json
#	packages/ui/src/locales/sv-SE/index.json
#	packages/ui/src/locales/tr-TR/index.json
#	packages/ui/src/locales/uk-UA/index.json
#	packages/ui/src/locales/vi-VN/index.json
#	packages/ui/src/locales/zh-CN/index.json
#	packages/ui/src/locales/zh-TW/index.json
#	packages/ui/src/stories/base/PageHeader.stories.ts
#	packages/ui/src/utils/file-extensions.ts
2026-08-03 18:39:37 +01:00

221 lines
4.4 KiB
JavaScript

import { createRouter, createWebHistory } from 'vue-router'
import * as Pages from '@/pages'
import * as Hosting from '@/pages/hosting/manage'
import * as Instance from '@/pages/instance'
import * as Library from '@/pages/library'
import * as Project from '@/pages/project'
/**
* Configures application routing. Add page to pages/index and then add to route table here.
*/
export default new createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
name: 'Home',
component: Pages.Index,
},
{
path: '/hosting/manage/',
name: 'Servers',
component: Pages.Servers,
},
{
path: '/hosting/manage/:id',
name: 'ServerManage',
component: Hosting.Index,
children: [
{
path: '',
name: 'ServerManageOverview',
component: Hosting.Overview,
},
{
path: 'content',
name: 'ServerManageContent',
component: Hosting.Content,
},
{
path: 'instances',
name: 'ServerManageInstances',
component: Hosting.Instances,
},
{
path: 'instances/:instance_id',
name: 'ServerManageInstance',
component: Hosting.Instance,
children: [
{
path: '',
name: 'ServerManageInstanceContent',
component: Hosting.Content,
},
{
path: 'files',
name: 'ServerManageInstanceFiles',
component: Hosting.Files,
},
{
path: 'backups',
name: 'ServerManageInstanceBackups',
component: Hosting.Backups,
},
],
},
{
path: 'files',
name: 'ServerManageFiles',
component: Hosting.Files,
},
{
path: 'backups',
name: 'ServerManageBackups',
component: Hosting.Backups,
},
{
path: 'access',
name: 'ServerManageAccess',
component: Hosting.Access,
},
],
},
{
path: '/browse/:projectType',
name: 'Discover content',
component: Pages.Browse,
},
{
path: '/skins',
name: 'Skin selector',
component: Pages.Skins,
},
{
path: '/user/:user/:projectType?',
name: 'User',
component: Pages.User,
},
{
path: '/library',
name: 'Library',
component: Library.Index,
children: [
{
path: '',
name: 'Overview',
component: Library.Overview,
},
{
path: 'downloaded',
name: 'Downloaded',
component: Library.Downloaded,
},
{
path: 'modpacks',
name: 'Modpacks',
component: Library.Modpacks,
},
{
path: 'servers',
name: 'LibraryServers',
component: Library.Servers,
},
{
path: 'custom',
name: 'Custom',
component: Library.Custom,
},
],
},
{
path: '/:projectType(mod|plugin|datapack|resourcepack|shader|modpack)/:id/:rest(.*)*',
redirect: (to) => {
const rest = to.params.rest ? `/${[].concat(to.params.rest).join('/')}` : ''
return `/project/${to.params.id}${rest}${to.hash}`
},
},
{
path: '/project/:id',
name: 'Project',
component: Project.Index,
props: true,
children: [
{
path: '',
name: 'Description',
component: Project.Description,
},
{
path: 'versions',
name: 'Versions',
component: Project.Versions,
},
{
path: 'version/:version',
name: 'Version',
component: Project.Version,
props: true,
},
{
path: 'gallery',
name: 'Gallery',
component: Project.Gallery,
},
],
},
{
path: '/instance/:id',
name: 'Instance',
component: Instance.Index,
props: true,
children: [
{
path: 'worlds',
name: 'InstanceWorlds',
component: Instance.Worlds,
},
{
path: 'share',
name: 'InstanceShare',
component: Instance.Share,
},
{
path: '',
name: 'Mods',
component: Instance.Mods,
},
{
path: 'projects/:type',
name: 'ModsFilter',
component: Instance.Mods,
},
{
path: 'files',
name: 'Files',
component: Instance.Files,
},
{
path: 'logs',
name: 'Logs',
component: Instance.Logs,
meta: {
renderMode: 'fixed',
},
},
],
},
],
linkActiveClass: 'router-link-active',
linkExactActiveClass: 'router-link-exact-active',
scrollBehavior(to, from) {
if (to.path === from.path) return
// Sometimes Vue's scroll behavior is not working as expected, so we need to manually scroll to top (especially on Linux)
document.querySelector('.app-viewport')?.scrollTo(0, 0)
return {
el: '.app-viewport',
top: 0,
}
},
})