mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-14 01:16:17 +02:00
544 lines
14 KiB
JavaScript
544 lines
14 KiB
JavaScript
import { FeatureToggleListContainer } from '../feature/FeatureToggleList/FeatureToggleListContainer';
|
|
import { StrategyForm } from '../strategies/StrategyForm/StrategyForm';
|
|
import { StrategyView } from '../../component/strategies/StrategyView/StrategyView';
|
|
import { StrategiesList } from '../strategies/StrategiesList/StrategiesList';
|
|
import HistoryPage from '../../page/history';
|
|
import HistoryTogglePage from '../../page/history/toggle';
|
|
import { ArchiveListContainer } from '../archive/ArchiveListContainer';
|
|
import { TagTypeList } from '../tags/TagTypeList/TagTypeList';
|
|
import { AddonList } from '../addons/AddonList/AddonList';
|
|
import Admin from '../admin';
|
|
import AdminApi from '../admin/api';
|
|
import AdminInvoice from '../admin/invoice/InvoiceAdminPage';
|
|
import AdminUsers from '../admin/users/UsersAdmin';
|
|
import { AuthSettings } from '../admin/auth/AuthSettings';
|
|
import Login from '../user/Login/Login';
|
|
import { P, C, E, EEA, RE } from '../common/flags';
|
|
import { NewUser } from '../user/NewUser/NewUser';
|
|
import ResetPassword from '../user/ResetPassword/ResetPassword';
|
|
import ForgottenPassword from '../user/ForgottenPassword/ForgottenPassword';
|
|
import ProjectListNew from '../project/ProjectList/ProjectList';
|
|
import Project from '../project/Project/Project';
|
|
import RedirectArchive from '../archive/RedirectArchive';
|
|
import EnvironmentList from '../environments/EnvironmentList/EnvironmentList';
|
|
import FeatureView from '../feature/FeatureView/FeatureView';
|
|
import ProjectRoles from '../admin/project-roles/ProjectRoles/ProjectRoles';
|
|
import CreateProjectRole from '../admin/project-roles/CreateProjectRole/CreateProjectRole';
|
|
import EditProjectRole from '../admin/project-roles/EditProjectRole/EditProjectRole';
|
|
import CreateUser from '../admin/users/CreateUser/CreateUser';
|
|
import EditUser from '../admin/users/EditUser/EditUser';
|
|
import { CreateApiToken } from '../admin/api-token/CreateApiToken/CreateApiToken';
|
|
import CreateEnvironment from '../environments/CreateEnvironment/CreateEnvironment';
|
|
import EditEnvironment from '../environments/EditEnvironment/EditEnvironment';
|
|
import CreateContext from '../context/CreateContext/CreateContext';
|
|
import EditContext from '../context/EditContext/EditContext';
|
|
import EditTagType from '../tags/EditTagType/EditTagType';
|
|
import CreateTagType from '../tags/CreateTagType/CreateTagType';
|
|
import EditProject from '../project/Project/EditProject/EditProject';
|
|
import CreateProject from '../project/Project/CreateProject/CreateProject';
|
|
import CreateFeature from '../feature/CreateFeature/CreateFeature';
|
|
import EditFeature from '../feature/EditFeature/EditFeature';
|
|
import { ApplicationEdit } from '../application/ApplicationEdit/ApplicationEdit';
|
|
import { ApplicationList } from '../application/ApplicationList/ApplicationList';
|
|
import ContextList from '../context/ContextList/ContextList';
|
|
import RedirectFeatureView from '../feature/RedirectFeatureView/RedirectFeatureView';
|
|
import { CreateAddon } from '../addons/CreateAddon/CreateAddon';
|
|
import { EditAddon } from '../addons/EditAddon/EditAddon';
|
|
import { CopyFeatureToggle } from '../feature/CopyFeature/CopyFeature';
|
|
|
|
export const routes = [
|
|
// Project
|
|
|
|
{
|
|
path: '/projects/create',
|
|
parent: '/projects',
|
|
title: 'Create',
|
|
component: CreateProject,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/edit',
|
|
parent: '/projects',
|
|
title: ':id',
|
|
component: EditProject,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/archived',
|
|
title: ':name',
|
|
parent: '/archive',
|
|
component: RedirectArchive,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/features/:name/:activeTab/copy',
|
|
parent: '/projects/:id/features/:name/:activeTab',
|
|
title: 'Copy',
|
|
component: CopyFeatureToggle,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/features/:name/:activeTab/copy',
|
|
parent: '/projects/:id/features/:name/:activeTab',
|
|
title: 'Copy',
|
|
component: CopyFeatureToggle,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:projectId/features/:featureId/settings',
|
|
parent: '/projects',
|
|
title: 'Edit Feature',
|
|
component: EditFeature,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:projectId/features/:featureId',
|
|
parent: '/projects',
|
|
title: 'FeatureView',
|
|
component: FeatureView,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
flags: E,
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/features/:name/:activeTab',
|
|
parent: '/projects',
|
|
title: ':name',
|
|
component: FeatureView,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:projectId/create-toggle',
|
|
parent: '/projects/:id/features',
|
|
title: 'Create feature toggle',
|
|
component: CreateFeature,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:projectId/features2/:name',
|
|
parent: '/features',
|
|
title: ':name',
|
|
component: RedirectFeatureView,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id/:activeTab',
|
|
parent: '/projects',
|
|
title: ':id',
|
|
component: Project,
|
|
flag: P,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects/:id',
|
|
parent: '/projects',
|
|
title: ':id',
|
|
component: Project,
|
|
flag: P,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/projects',
|
|
title: 'Projects',
|
|
component: ProjectListNew,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true },
|
|
},
|
|
|
|
// Features
|
|
{
|
|
path: '/features/:activeTab/:name',
|
|
parent: '/features',
|
|
title: ':name',
|
|
component: RedirectFeatureView,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/features',
|
|
title: 'Feature Toggles',
|
|
component: FeatureToggleListContainer,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true },
|
|
},
|
|
|
|
// Applications
|
|
{
|
|
path: '/applications/:name',
|
|
title: ':name',
|
|
parent: '/applications',
|
|
component: ApplicationEdit,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/applications',
|
|
title: 'Applications',
|
|
component: ApplicationList,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
|
|
// Context
|
|
{
|
|
path: '/context/create',
|
|
parent: '/context',
|
|
title: 'Create',
|
|
component: CreateContext,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
flag: C,
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/context/edit/:name',
|
|
parent: '/context',
|
|
title: ':name',
|
|
component: EditContext,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
flag: C,
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/context',
|
|
title: 'Context Fields',
|
|
component: ContextList,
|
|
type: 'protected',
|
|
flag: C,
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
|
|
// Strategies
|
|
{
|
|
path: '/strategies/create',
|
|
title: 'Create',
|
|
parent: '/strategies',
|
|
component: StrategyForm,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/strategies/:activeTab/:strategyName',
|
|
title: ':strategyName',
|
|
parent: '/strategies',
|
|
component: StrategyView,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/strategies',
|
|
title: 'Strategies',
|
|
component: StrategiesList,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
{
|
|
path: '/environments/create',
|
|
title: 'Environments',
|
|
component: CreateEnvironment,
|
|
parent: '/environments',
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/environments/:id',
|
|
title: 'Edit',
|
|
component: EditEnvironment,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/environments',
|
|
title: 'Environments',
|
|
component: EnvironmentList,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
flag: EEA,
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
|
|
// Tags
|
|
{
|
|
path: '/tag-types/create',
|
|
parent: '/tag-types',
|
|
title: 'Create',
|
|
component: CreateTagType,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/tag-types/edit/:name',
|
|
parent: '/tag-types',
|
|
title: ':name',
|
|
component: EditTagType,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/tag-types',
|
|
title: 'Tag types',
|
|
component: TagTypeList,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
|
|
// Addons
|
|
{
|
|
path: '/addons/create/:providerId',
|
|
parent: '/addons',
|
|
title: 'Create',
|
|
component: CreateAddon,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/addons/edit/:addonId',
|
|
parent: '/addons',
|
|
title: 'Edit',
|
|
component: EditAddon,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/addons',
|
|
title: 'Addons',
|
|
component: AddonList,
|
|
hidden: false,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
|
|
// History
|
|
{
|
|
path: '/history/:toggleName',
|
|
title: ':toggleName',
|
|
parent: '/history',
|
|
component: HistoryTogglePage,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/history',
|
|
title: 'Event History',
|
|
component: HistoryPage,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { adminSettings: true },
|
|
},
|
|
|
|
// Archive
|
|
{
|
|
path: '/archive',
|
|
title: 'Archived Toggles',
|
|
component: ArchiveListContainer,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
|
|
// Admin
|
|
{
|
|
path: '/admin/api/create-token',
|
|
parent: '/admin',
|
|
title: 'API access',
|
|
component: CreateApiToken,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/admin/create-project-role',
|
|
title: 'Create',
|
|
component: CreateProjectRole,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
flag: RE,
|
|
},
|
|
{
|
|
path: '/admin/roles/:id/edit',
|
|
title: 'Edit',
|
|
component: EditProjectRole,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
flag: RE,
|
|
},
|
|
{
|
|
path: '/admin/users/:id/edit',
|
|
title: 'Edit',
|
|
component: EditUser,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
hidden: true,
|
|
},
|
|
{
|
|
path: '/admin/api',
|
|
parent: '/admin',
|
|
title: 'API access',
|
|
component: AdminApi,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { mobile: true, advanced: true },
|
|
},
|
|
{
|
|
path: '/admin/users',
|
|
parent: '/admin',
|
|
title: 'Users',
|
|
component: AdminUsers,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { adminSettings: true },
|
|
},
|
|
{
|
|
path: '/admin/create-user',
|
|
parent: '/admin',
|
|
title: 'Users',
|
|
component: CreateUser,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/admin/auth',
|
|
parent: '/admin',
|
|
title: 'Single Sign-On',
|
|
component: AuthSettings,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { adminSettings: true },
|
|
},
|
|
{
|
|
path: '/admin-invoices',
|
|
title: 'Invoices',
|
|
component: AdminInvoice,
|
|
hidden: true,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: { adminSettings: true },
|
|
},
|
|
{
|
|
path: '/admin/roles',
|
|
parent: '/admin',
|
|
title: 'Project Roles',
|
|
component: ProjectRoles,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
flag: RE,
|
|
menu: { adminSettings: true },
|
|
},
|
|
{
|
|
path: '/admin',
|
|
title: 'Admin',
|
|
component: Admin,
|
|
hidden: false,
|
|
type: 'protected',
|
|
layout: 'main',
|
|
menu: {},
|
|
},
|
|
/* If you update this route path, make sure you update the path in SWRProvider.tsx */
|
|
|
|
{
|
|
path: '/login',
|
|
title: 'Log in',
|
|
component: Login,
|
|
type: 'unprotected',
|
|
hidden: true,
|
|
layout: 'standalone',
|
|
menu: {},
|
|
},
|
|
/* If you update this route path, make sure you update the path in SWRProvider.tsx */
|
|
{
|
|
path: '/new-user',
|
|
title: 'New user',
|
|
hidden: true,
|
|
component: NewUser,
|
|
type: 'unprotected',
|
|
layout: 'standalone',
|
|
menu: {},
|
|
},
|
|
/* If you update this route path, make sure you update the path in SWRProvider.tsx */
|
|
{
|
|
path: '/reset-password',
|
|
title: 'reset-password',
|
|
hidden: true,
|
|
component: ResetPassword,
|
|
type: 'unprotected',
|
|
layout: 'standalone',
|
|
menu: {},
|
|
},
|
|
{
|
|
path: '/forgotten-password',
|
|
title: 'reset-password',
|
|
hidden: true,
|
|
component: ForgottenPassword,
|
|
type: 'unprotected',
|
|
layout: 'standalone',
|
|
menu: {},
|
|
},
|
|
];
|
|
|
|
export const getRoute = path => routes.find(route => route.path === path);
|
|
|
|
export const baseRoutes = routes.filter(route => !route.hidden);
|
|
|
|
const computeRoutes = () => {
|
|
const mainNavRoutes = baseRoutes.filter(route => route.menu.advanced);
|
|
const adminRoutes = routes.filter(route => route.menu.adminSettings);
|
|
const mobileRoutes = routes.filter(route => route.menu.mobile);
|
|
|
|
const computedRoutes = {
|
|
mainNavRoutes,
|
|
adminRoutes,
|
|
mobileRoutes,
|
|
};
|
|
return () => {
|
|
return computedRoutes;
|
|
};
|
|
};
|
|
|
|
export const getRoutes = computeRoutes();
|