В данном разделе описаны механизмы маршрутизации и способы их использования через SDK.
Вся базовая функциональность для работы с маршрутизацией находится в пространстве Universe.Platform.Router и предоставляет следующие возможности:
Хранилище маршрутизации Universe.Platform.Router.routerStore является основным механизмом для работы с маршрутами.
Переход на другую страницу (маршрут) возможен с помощью метода Universe.Platform.Router.RouterStoreType.setRoute, указав первым аргументом — имя маршрута, а вторым — параметры этого маршрута:
Universe.Platform.Router.routerStore.setRoute('UserSettingsPage', {tab: 'general'});
Так же сть возможность открыть страницу в новой вкладке бразера используя метод Universe.Platform.Router.RouterStoreType.openTab:
Universe.Platform.Router.routerStore.setRoute('UserSettingsPage', {tab: 'general'});
На текущий момент имеется несколько способов создания страниц:
Регистрацию/переопределение маршрутов необходимо выполнять из корня внешнего модуля, т.е. на этапе инициализации приложения
Точка расширения Universe.Platform.Router.UEPage позволяет добавить новый раздел/страницу в систему:
declare global {
namespace UniverseRouter {
interface IRouteMeta {
// Уникальное имя страницы
CustomPage: Universe.Platform.Router.BaseRouteItem;
}
}
}
export default {
userExits: [
{
type: 'Page',
moduleId: 'customPage',
active: true,
system: false,
meta: {
route: '/custom-page/',
groupName: Universe.Platform.Router.PageGroups.DATA_MANAGEMENT,
icon: 'star',
menuRoute: '/custom-page/'
},
resolver () {
return true; // контролирует регистрацию маршрута
},
async lazyComponent () {
return {
default () {
return <div>Hello!</div>;
}
};
}
}
]
} satisfies Universe.Platform.UserExit.ExternalModuleDefault;
За регистрацию маршрутов отвечает метод Universe.Platform.Router.RouterStoreType.registerRoute:
declare global {
namespace UniverseRouter {
interface IRouteMeta {
// Уникальное имя страницы
CustomPage: Universe.Platform.Router.BaseRouteItem;
}
}
}
Universe.Platform.Router.routerStore.registerRoute('CustomPage', {
route: '/custom-page/',
groupName: Universe.Platform.Router.PageGroups.DATA_MANAGEMENT,
icon: 'star',
menuRoute: '/custom-page/',
resolver () {
return true; // контролирует регистрацию маршрута
},
async lazyComponent () {
return {
default () {
return <div>Hello!</div>;
}
};
}
});
Группы, к которым может относиться страница. От значения зависит размещение страницы в меню:
administration — раздел «Администрирование»model — раздел «Модель»dataManagement — раздел «Управление данными»nongrouped — страницы вне группСоответствует Universe.Platform.Router.PageGroups.
Отключить маршрут по условию можно с помощью метода Universe.Platform.Router.RouterStoreType.addRouteDisableCondition
Universe.Platform.Router.routerStore.addRouteDisableCondition('CustomPage', () => false);
// После изменения условий пересоберите маршруты
Universe.Platform.Router.routerStore.reloadRoutes();
Проверить права доступа к маршруту можно с помощью метода Universe.Platform.Router.RouterStoreType.hasRouteAccess:
const hasAccess = Universe.Platform.Router.routerStore.hasRouteAccess('CustomPage');