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

Использование

  • Точка расширения — заранее определённое место в системе, подобное «слоту», куда можно вставить пользовательскую функциональность. Активируется при наступлении определённого события или в заданном контексте.
  • Декларация точки расширения — конкретная реализация «вставки» в такой «слот». Декларация регистрируется в системе и включает сведения о типе точки расширения, уникальном идентификаторе, состоянии активности и дополнительных параметрах.

Существует список точек расширения, для которых можно создавать собственные декларации. Их можно добавлять как новые или переопределять существующие (системные) декларации. Каждая декларация точки расширения должна реализовывать тип Universe.Platform.UserExit.UserExitDeclaration, со следующими свойствами:

  • type — название точки расширения (см. список точек расширения)
  • moduleId — уникальный идентификатор декларации точки расширения, определяется пользователем
  • active — активна (включена) ли данная декларация в точку расширения
  • system — системная ли декларация точки расширения. Для пользовательских деклараций следует выставлять в false
  • resolver — функция фильтрации декларации. Полезна для случаев, когда декларацию необходимо скрывать динамически. Набор аргументов специфичен для каждой точки расширения.
  • meta — набор meta-параметров, специфичный для каждой точки расширения
  • Прочие свойства — остальной набор свойств каждая точка расширения определяет самостоятельно

Рассмотрим создание декларации на примере точки расширения Universe.App.UERightHeaderItem. Декларация точки расширения объявляется во внешнем модуле и передается в приложение через default-экспорт модуля:

import {Universe} from '@universe-dg/sdk';

const userExits: Universe.Platform.UserExit.UserExitDeclaration[] = [];

userExits.push({
moduleId: 'uniqueId',
type: 'RightHeaderItem',
active:true,
system: false,
resolver: () => true,
meta: {
order: 1,
},
component: () => (
<Universe.Platform.Uikit.Button
intent={Universe.Platform.Uikit.INTENT.DANGER}
>
{Universe.Platform.Locale.i18n.t('HeaderButton>text')}
</Universe.Platform.Uikit.Button>
),
});

export default {userExits};

Universe.Platform.UserExit.userExitManager — менеджер точек расширения. Он может быть полезен в случае, если необходимо взаимодействовать с уже объявленными декларациями точек расширения. Менеджер точек расширения предоставляет следующие возможности:

import {Universe} from '@universe-dg/sdk';

// Получить первую найденную отфильтрованную декларацию точки расширения RightHeaderItem
const rightHeaderItemDecl = Universe.Platform.UserExit.userExitManager.findResolvedModuleByType('RightHeaderItem', [
// Аргументы для фильтрации. Для каждой точки расширения они специфичны
]);

// Получить все отфильтрованные декларации точки расширения RightHeaderItem
const rightHeaderItemDecls = Universe.Platform.UserExit.userExitManager.getResolvedModulesByType('RightHeaderItem', [
// Аргументы для фильтрации. Для каждой точки расширения они специфичны
]);

Когда необходимо удостовериться в существовании той или иной декларации, можно воспользоваться методом Universe.Platform.UserExit.UserExitManager.hasModuleById

import {Universe} from '@universe-dg/sdk';

const userExits: Universe.Platform.UserExit.UserExitDeclaration[] = [];

// Существует ли декларация с идентификатором 'uniqueId'
if (!Universe.Platform.UserExit.userExitManager.hasModuleById('uniqueId')) {
// Если не существует, то добавить свою декларацию
userExits.push({
moduleId: 'uniqueId',
// ...
});
}

export default {userExits};

Возможно отключать уже объявленные декларации с помощью метода Universe.Platform.UserExit.UserExitManager.disableModuleById. Это удобно в ситуациях, когда необходимо переопределить ту или иную декларацию точки расширения:

import {Universe} from '@universe-dg/sdk';

const userExits: Universe.Platform.UserExit.UserExitDeclaration[] = [];

// Принудительно отключить декларацию с идентификатором 'uniqueId'
Universe.Platform.UserExit.userExitManager.disableModuleById('uniqueId')

// Добавить свою декларацию тем же идентификатором
userExits.push({
moduleId: 'uniqueId',
// ...
});

export default {userExits};