Страница настройки модели данных

Добавление вкладки на страницу настройки модели данных

Точка расширения UEMetaModelTab предназначена для добавления вкладок в модели типов активов/справочников.

Можно расширять существующую модель через CustomProperties или показывать дополнительную информацию по связанным сущностям.

Описание UEMetaModelTab:

type TabDisabledConfig = {
    isDisabled: boolean;
    disableReasons?: string[];
}

export type UEMetaModelTab = UeModuleBase & {
    default: {
        component: ComponentType<{
            attributesStore: AttributesStore;
            metaModel: IMetaModel;
            draftId?: DraftId;
        }>; // Компонент для рендеринга, если выбрана текущая вкладка
        meta: {
            name: string; // Ключ вкладки
            getDisplayName: () => string; // Заголовок вкладки
            getTabDisabledConfig?: (metaModel: IMetaModel) => TabDisabledConfig; // Функция проверки отключения вкладки и получения причин отключения
        };
        resolver: (metaModel: IMetaModel) => boolean;
    };
}

Пример UEMetaModelTab: вкладка "Внешний вид".

export const metaModelTabs: UEMetaModelTab[] = [
    {
        'default': {
            type: UEList.MetaModelTab,
            moduleId: 'dataCardLayoutTab',
            active: true,
            system: false,
            meta: {
                name: 'layout',
                getDisplayName: () => {
                    return i18n.t('module.meta-se>layoutTab');
                },
                getTabDisabledConfig: (metaModel: IMetaModel) => {
                    const hasPhantomAttribute = metaModel.getAttributes()
                        .some((attribute) => {
                            return attribute.getPhantom();
                        });

                    return {
                        isDisabled: hasPhantomAttribute,
                        disableReasons: [
                            i18n.t('module.meta-se>tabDisableReason')
                        ]
                    };
                }
            },
            resolver: (metaModel: IMetaModel) => {
                return metaModel ? (MetaDataTypeGuards.isEntity(metaModel) || MetaDataTypeGuards.isLookupEntity(metaModel)) : false;
            },
            component: EntityLayoutTab
        }
    }
];