Юниверс DG SDK UI
v2.15.0

Маршрутизация

В данном разделе описаны механизмы маршрутизации и способы их использования через SDK.

Вся базовая функциональность для работы с маршрутизацией находится в пространстве Universe.Platform.Router и предоставляет следующие возможности:

  • Навигация между страницами
  • Регистрация и перерегистрация маршрутов
  • Отключение маршрутов
  • Контроль доступа к маршрутам
  • Доступ к текущему состоянию и URL

Хранилище маршрутизации 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');