Files
plane/apps/web/app/routes/core.ts
chuan 8ebde8aa05
Some checks failed
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Admin Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Codespell / Check for spelling errors (push) Has been cancelled
Sync Repositories / sync_changes (push) Has been cancelled
Initial commit: Plane
Synced from upstream: 8853637e981ed7d8a6cff32bd98e7afe20f54362
2025-11-07 00:00:52 +08:00

430 lines
19 KiB
TypeScript

import { index, layout, route } from "@react-router/dev/routes";
import type { RouteConfig, RouteConfigEntry } from "@react-router/dev/routes";
export const coreRoutes: RouteConfigEntry[] = [
// ========================================================================
// USER MANAGEMENT ROUTES
// ========================================================================
// Home - Sign In
layout("./(home)/layout.tsx", [index("./(home)/page.tsx")]),
// Sign Up
layout("./(all)/sign-up/layout.tsx", [route("sign-up", "./(all)/sign-up/page.tsx")]),
// Account Routes - Password Management
layout("./(all)/accounts/forgot-password/layout.tsx", [
route("accounts/forgot-password", "./(all)/accounts/forgot-password/page.tsx"),
]),
layout("./(all)/accounts/reset-password/layout.tsx", [
route("accounts/reset-password", "./(all)/accounts/reset-password/page.tsx"),
]),
layout("./(all)/accounts/set-password/layout.tsx", [
route("accounts/set-password", "./(all)/accounts/set-password/page.tsx"),
]),
// Create Workspace
layout("./(all)/create-workspace/layout.tsx", [route("create-workspace", "./(all)/create-workspace/page.tsx")]),
// Onboarding
layout("./(all)/onboarding/layout.tsx", [route("onboarding", "./(all)/onboarding/page.tsx")]),
// Invitations
layout("./(all)/invitations/layout.tsx", [route("invitations", "./(all)/invitations/page.tsx")]),
// Workspace Invitations
layout("./(all)/workspace-invitations/layout.tsx", [
route("workspace-invitations", "./(all)/workspace-invitations/page.tsx"),
]),
// ========================================================================
// ALL APP ROUTES
// ========================================================================
layout("./(all)/layout.tsx", [
// ======================================================================
// WORKSPACE-SCOPED ROUTES
// ======================================================================
layout("./(all)/[workspaceSlug]/layout.tsx", [
// ====================================================================
// PROJECTS APP SECTION - WORKSPACE LEVEL ROUTES
// ====================================================================
layout("./(all)/[workspaceSlug]/(projects)/layout.tsx", [
// --------------------------------------------------------------------
// WORKSPACE LEVEL ROUTES
// --------------------------------------------------------------------
// Workspace Home
route(":workspaceSlug", "./(all)/[workspaceSlug]/(projects)/page.tsx"),
// Active Cycles
layout("./(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx", [
route(":workspaceSlug/active-cycles", "./(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx"),
]),
// Analytics
layout("./(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx", [
route(":workspaceSlug/analytics/:tabId", "./(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx"),
]),
// Browse
layout("./(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx", [
route(":workspaceSlug/browse/:workItem", "./(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx"),
]),
// Drafts
layout("./(all)/[workspaceSlug]/(projects)/drafts/layout.tsx", [
route(":workspaceSlug/drafts", "./(all)/[workspaceSlug]/(projects)/drafts/page.tsx"),
]),
// Notifications
layout("./(all)/[workspaceSlug]/(projects)/notifications/layout.tsx", [
route(":workspaceSlug/notifications", "./(all)/[workspaceSlug]/(projects)/notifications/page.tsx"),
]),
// Profile
layout("./(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx", [
route(":workspaceSlug/profile/:userId", "./(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx"),
route(
":workspaceSlug/profile/:userId/:profileViewId",
"./(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx"
),
route(
":workspaceSlug/profile/:userId/activity",
"./(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx"
),
]),
// Stickies
layout("./(all)/[workspaceSlug]/(projects)/stickies/layout.tsx", [
route(":workspaceSlug/stickies", "./(all)/[workspaceSlug]/(projects)/stickies/page.tsx"),
]),
// Workspace Views
layout("./(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx", [
route(":workspaceSlug/workspace-views", "./(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx"),
route(
":workspaceSlug/workspace-views/:globalViewId",
"./(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx"
),
]),
// ====================================================================
// PROJECT LEVEL ROUTES
// ====================================================================
// --------------------------------------------------------------------
// PROJECT LEVEL ROUTES
// --------------------------------------------------------------------
// Project List
layout("./(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx", [
route(":workspaceSlug/projects", "./(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx"),
]),
// Project Detail
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx", [
// Archived Projects
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx", [
route(
":workspaceSlug/projects/archives",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx"
),
]),
// Project Issues
// Issues List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/issues",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx"
),
]),
// Issue Detail
route(
":workspaceSlug/projects/:projectId/issues/:issueId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx"
),
// Project Cycles
// Cycles List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/cycles",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx"
),
]),
// Cycle Detail
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/cycles/:cycleId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx"
),
]),
// Project Modules
// Modules List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/modules",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx"
),
]),
// Module Detail
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/modules/:moduleId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx"
),
]),
// Project Views
// Views List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/views",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx"
),
]),
// View Detail
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/views/:viewId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx"
),
]),
// Project Pages
// Pages List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/pages",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx"
),
]),
// Page Detail
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/pages/:pageId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx"
),
]),
// Project Intake
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/intake",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx"
),
]),
// Project Archives - Issues, Cycles, Modules
// Project Archives - Issues - List
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/archives/issues",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx"
),
]),
// Project Archives - Issues - Detail
layout(
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx",
[
route(
":workspaceSlug/projects/:projectId/archives/issues/:archivedIssueId",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx"
),
]
),
// Project Archives - Cycles
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/archives/cycles",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx"
),
]),
// Project Archives - Modules
layout("./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx", [
route(
":workspaceSlug/projects/:projectId/archives/modules",
"./(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx"
),
]),
]),
]),
// ====================================================================
// SETTINGS SECTION
// ====================================================================
layout("./(all)/[workspaceSlug]/(settings)/layout.tsx", [
// --------------------------------------------------------------------
// WORKSPACE SETTINGS
// --------------------------------------------------------------------
layout("./(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx", [
route(":workspaceSlug/settings", "./(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx"),
route(
":workspaceSlug/settings/members",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx"
),
route(
":workspaceSlug/settings/billing",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx"
),
route(
":workspaceSlug/settings/integrations",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx"
),
route(
":workspaceSlug/settings/imports",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx"
),
route(
":workspaceSlug/settings/exports",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx"
),
route(
":workspaceSlug/settings/webhooks",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx"
),
route(
":workspaceSlug/settings/webhooks/:webhookId",
"./(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx"
),
]),
// --------------------------------------------------------------------
// ACCOUNT SETTINGS
// --------------------------------------------------------------------
layout("./(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx", [
route(":workspaceSlug/settings/account", "./(all)/[workspaceSlug]/(settings)/settings/account/page.tsx"),
route(
":workspaceSlug/settings/account/activity",
"./(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx"
),
route(
":workspaceSlug/settings/account/preferences",
"./(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx"
),
route(
":workspaceSlug/settings/account/notifications",
"./(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx"
),
route(
":workspaceSlug/settings/account/security",
"./(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx"
),
route(
":workspaceSlug/settings/account/api-tokens",
"./(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx"
),
]),
// --------------------------------------------------------------------
// PROJECT SETTINGS
// --------------------------------------------------------------------
layout("./(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx", [
// CORE Routes
// Project Settings
route(":workspaceSlug/settings/projects", "./(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx"),
route(
":workspaceSlug/settings/projects/:projectId",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx"
),
// Project Members
route(
":workspaceSlug/settings/projects/:projectId/members",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx"
),
// Project Features
route(
":workspaceSlug/settings/projects/:projectId/features",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx"
),
// Project States
route(
":workspaceSlug/settings/projects/:projectId/states",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx"
),
// Project Labels
route(
":workspaceSlug/settings/projects/:projectId/labels",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx"
),
// Project Estimates
route(
":workspaceSlug/settings/projects/:projectId/estimates",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx"
),
// Project Automations
layout("./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/layout.tsx", [
route(
":workspaceSlug/settings/projects/:projectId/automations",
"./(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx"
),
]),
]),
]),
]),
// ======================================================================
// STANDALONE ROUTES (outside workspace context)
// ======================================================================
// --------------------------------------------------------------------
// PROFILE SETTINGS
// --------------------------------------------------------------------
layout("./(all)/profile/layout.tsx", [
route("profile", "./(all)/profile/page.tsx"),
route("profile/activity", "./(all)/profile/activity/page.tsx"),
route("profile/appearance", "./(all)/profile/appearance/page.tsx"),
route("profile/notifications", "./(all)/profile/notifications/page.tsx"),
route("profile/security", "./(all)/profile/security/page.tsx"),
]),
]),
// ========================================================================
// REDIRECT ROUTES
// ========================================================================
// Legacy URL redirects for backward compatibility
// --------------------------------------------------------------------
// REDIRECT ROUTES
// --------------------------------------------------------------------
// Project settings redirect: /:workspaceSlug/projects/:projectId/settings/:path*
// → /:workspaceSlug/settings/projects/:projectId/:path*
route(":workspaceSlug/projects/:projectId/settings/*", "routes/redirects/core/project-settings.tsx"),
// Analytics redirect: /:workspaceSlug/analytics → /:workspaceSlug/analytics/overview
route(":workspaceSlug/analytics", "routes/redirects/core/analytics.tsx"),
// API tokens redirect: /:workspaceSlug/settings/api-tokens
// → /:workspaceSlug/settings/account/api-tokens
route(":workspaceSlug/settings/api-tokens", "routes/redirects/core/api-tokens.tsx"),
// Inbox redirect: /:workspaceSlug/projects/:projectId/inbox
// → /:workspaceSlug/projects/:projectId/intake
route(":workspaceSlug/projects/:projectId/inbox", "routes/redirects/core/inbox.tsx"),
// Sign-up redirects
route("accounts/sign-up", "routes/redirects/core/accounts-signup.tsx"),
// Sign-in redirects (all redirect to home page)
route("sign-in", "routes/redirects/core/sign-in.tsx"),
route("signin", "routes/redirects/core/signin.tsx"),
route("login", "routes/redirects/core/login.tsx"),
// Register redirect
route("register", "routes/redirects/core/register.tsx"),
] satisfies RouteConfig;