Устаревшая функциональность
Здесь собрано то, что помечено устаревшим в публичном API Q.Palette. Пока пометка действует, функциональность работает как прежде — переходить на замену можно в удобном темпе, но до выхода мажорной версии, в которой её удалят.
Всё перечисленное будет удалено в версии 9.0.0. В коде эти места помечены тегом @deprecated
с той же версией удаления и ссылкой на замену, поэтому подсказка видна прямо в редакторе.
Здесь только публичное API. Платформенная кухня — имена с приставкой ɵ и
всё, что импортируется не из основного пути пакета, — сюда не попадает: она меняется без
объявления устаревания, и продуктам её использовать нельзя.
Подключение библиотек: forRoot() → provideQ*()
Модули с forRoot() устарели: подключайте функциональность функциями на корневом уровне приложения.
Вызовы forRoot() после перехода не действуют и удаляются из продукта. Подробности —
в инструкции по переходу на Single Bundle.
| Было | Стало | Библиотека |
|---|---|---|
QAuthModule.forRoot() | provideQAuth() | qpalette-auth |
QCoreModule.forRoot() | provideQCore() | qpalette-core |
QHttpNotificationsModule.forRoot() | provideQHttpNotifications() | qpalette-core |
QUrlModule.forRoot() | provideQUrls() | qpalette-urls |
QUrlIdempotencyModule.forRoot() | provideQUrlIdempotency() | qpalette-urls-addons |
QFileViewerModule.forRoot() | provideQFileViewer() | qpalette-file-viewer |
QPaletteFormFlowModule.forRoot() | provideQFormFlow() | qpalette-form-flow |
QPermissionsModule.forRoot() | provideQPermissions() | qpalette-permissions |
QWebComponentModule.forRoot() | provideQWebComponent() | qpalette-visual |
QWidgetModule.forRoot() | provideQWidget() | qpalette-visual |
QWidgetLoaderModule.forRoot() | provideQWidgetLoader() | qpalette-visual |
Там же устарел прежний способ передачи провайдеров: createApplication(providers) и
bootstrapStandalone() заменяются на createApplication().bootstrap(component, providers).
Режим Single Bundle (provideSingleBundle(), константа Q_WEB_COMPONENT_SERVICES) уступает место
режиму Standalone.
Переименованные классы и сервисы
| Что устарело | Чем заменить | Библиотека | Когда удалим |
|---|---|---|---|
QReportsService | QJasperReportsService | qpalette-file-viewer | 9.0.0 |
QWrapper, QWrapperModule | QWebComponent, QWebComponentModule | qpalette-visual | 9.0.0 |
QRootEventsService | QEventsService | qpalette-visual | 9.0.0 |
QNotificationComponent | компонент p-toast из PrimeNG | qpalette-visual | 9.0.0 |
QPermissionsService | QPermissionsRbacService | qpalette-permissions | 9.0.0 |
AuthInterceptor | OAuth2Interceptor | qpalette-auth | 9.0.0 |
QMdpAuthService, QOidcAuthService, QKeycloakAuthService, QFlexterraAuthService, QIamproxyAuthService | QAuthService | qpalette-auth | 9.0.0 |
QAuthGuardService | — маршруты продукта не нужно защищать | qpalette-auth | 9.0.0 |
Компонент q-ui-grid | — | qpalette-ui-grid | 9.0.0 |
Переименованные методы и свойства
| Что устарело | Чем заменить | Библиотека | Когда удалим |
|---|---|---|---|
QAuthService.isAuthenticated() | authenticated$ | qpalette-auth | 9.0.0 |
QAuthService.checkAuthorization() | authenticated$ | qpalette-auth | 9.0.0 |
QAuthService.events | authenticated$ | qpalette-auth | 9.0.0 |
QAuthService.getUserInfo() | currentUser | qpalette-auth | 9.0.0 |
provideQAuthForShell() | provideQAuth() | qpalette-auth | 9.0.0 |
QOidcAuthService.signInRedirect() | QAuthService.signIn() | qpalette-auth | 9.0.0 |
QGlobalEventsService: event(), onEvent(), error(), warning() | QMessagesService: error(), success(), warn(), info(), getMessages() | qpalette-core | 9.0.0 |
onChangeTheme() | onThemeChange() | qpalette-visual | 9.0.0 |
Поле selectedItem в контракте виджета для q-lookup | onValueSelect | qpalette-visual | 9.0.0 |
Поле selectedAccount в контракте виджета для q-lookup | selectedValue | qpalette-visual | 9.0.0 |
openModal() в выгрузке таблицы | export() | qpalette-table-addons | 9.0.0 |
Параметр filters в шапке таблицы | qteSearchParams | qpalette-table-addons | 9.0.0 |
close(controller) | отписка средствами RxJS | qpalette-sse-client | 9.0.0 |
Настройки конфигурации
| Что устарело | Чем заменить | Библиотека | Когда удалим |
|---|---|---|---|
singlePageMode | singlePage.enable | qpalette-core | 9.0.0 |
feedback | секция plugins со слотом header | qpalette-core | 9.0.0 |
loginForm в корне конфигурации | auth.options.loginForm | qpalette-core | 9.0.0 |
loginForm.visible | режим auth.service: 'none' — авторизация выключена | qpalette-core | 9.0.0 |
auth.options.saveTabsAfterLogout | — опция ни на что не влияет, удалите её из конфигурации | qpalette-auth | 9.0.0 |
Раздача воркера pdf.js рутовым приложением
| Что устарело | Чем заменить | Когда удалим |
|---|---|---|
воркер pdf.js из ассетов рутового приложения (/assets/pdfjs-dist/pdf.worker.min.mjs) | воркер из ассетов своей сборки | 9.0.0 |
Начиная с 8.0.37 просмотрщик берёт воркер из ассетов своей сборки, и его версия всегда совпадает
с версией pdfjs-dist в вашем приложении. Рутовое приложение продолжает раздавать файл версии
5.6.205 только ради веб-компонентов, собранных до 8.0.37: с воркером 6.x их просмотрщик повисает.
Этот файл содержит CVE-2026-16633 — выполнение стороннего кода из вредоносного PDF. В линии 5.x исправления нет, оно только в 6.2.108, поэтому обновить раздаваемый файл невозможно. Единственное лечение — обновиться на 8.0.37 или новее и добавить правило копирования воркера, как описано в статье Просмотр и печать файлов.
Конфигурация серч-бокса через pbc-config
Механизм уже удалён, а не помечен устаревшим: серч-бокс не загружает config/main.js начиная
с версий 7.6.20 и 8.0.17. Если конфигурация серч-бокса до сих пор собирается приложением
pbc-config, перейдите на JSON — иначе серч-бокс останется без конфигурации.
| Что удалено | Чем заменить | Библиотека | Когда удалили |
|---|---|---|---|
конфигурация серч-бокса из бандла pbc-config (config/main.js, qPbcConfigBootstrap) | статический файл assets/search-box/<businessObject>/main.json | qpalette-visual | 7.6.20, 8.0.17 |
QPbcConfigService и утилиты pbc-config | — | qpalette-core | 7.6.20, 8.0.17 |
схематик pbc-config (генерация проекта конфигурации) | — | @diasoft/qpalette-schematics | 7.6.20, 8.0.17 |
Пошаговый переход — в статье
Серч-бокс: переход с pbc-config на JSON: как перенести конфигурацию
в main.json, подключить её через qSearchBoxEndpoint и убрать из проекта остатки pbc-config.
Как перейти
Замены, где старый и новый код устроены по-разному, — со сравнением до и после.
events, isAuthenticated(), checkAuthorization() → authenticated$
Три способа узнать состояние авторизации заменены одним. authenticated$ отличается
от потока событий тем, что имеет текущее значение: подписчик получает его сразу, а не ждёт
следующего входа или выхода. Кроме того, поток учитывает вход, выполненный соседним бандлом
на той же странице, — события такого входа не приносили.
// Было: текущее состояние отдельно, переходы отдельно
if (this.auth.isAuthenticated()) { this.load(); }
this.auth.events.subscribe((event) => {
if (event === 'logout') { this.reset(); }
});
// Стало: и то, и другое выводится из одного потока
this.auth.authenticated$.subscribe((authenticated) => {
if (authenticated) { this.load(); } else { this.reset(); }
});Если нужен именно переход, а не состояние, возьмите пару соседних значений:
this.auth.authenticated$.pipe(pairwise())
.subscribe(([was, is]) => {
if (was && !is) { this.onLogout(); }
});checkAuthorization() выглядел как «спросить провайдера, жива ли сессия», но на деле это
процедура старта приложения: у режима oidc она уводит на страницу провайдера, не найдя
сессии, у iamproxy — на страницу аутентификации при 401, у flextera — завершает
оборвавшуюся сессию. Вызов из микрофронтенда уводит со страницы всё приложение. Состояние
к моменту, когда продукт получает управление, уже известно — читайте authenticated$.
Сервисы режимов → QAuthService
Пять сервисов режимов — QMdpAuthService, QOidcAuthService, QKeycloakAuthService,
QFlexterraAuthService, QIamproxyAuthService — годились только для приведения типа:
в контейнере зависимостей все они зарегистрированы под QAuthService, поэтому инъекция
по этим токенам не работала и раньше. QAuthService даёт единый контракт независимо
от режима — продукту знать режим незачем.
// Было: приведение к типу режима ради его собственных методов
const oidc = this.auth as unknown as QOidcAuthService;
oidc.signInRedirect();
// Стало: один контракт на все режимы — signIn() сам решает,
// показать форму продукта или увести к провайдеру
this.auth.signIn();getUserInfo() → currentUser
Метод и свойство возвращают одно и то же — QUserInfo или null. Замена дословная:
const user = this.auth.currentUser; // было: this.auth.getUserInfo()Нестандартные поля из токена или профиля провайдера доступны в currentUser.extra —
разбирать ключ доступа самостоятельно не нужно. Подробности — в статье
Авторизация.
QReportsService → QJasperReportsService
Старый сервис принимал логин с паролем и требовал передавать ключ доступа в каждый метод, хотя ключ
подставляет перехватчик из @diasoft/qpalette-auth. Соответствие методов:
| Было | Стало |
|---|---|
getToken({ username, password }) | не нужен — ключ доступа подставляет перехватчик |
getReports(token, JSON.stringify(params)) | createReport(params) |
getFile(token, tempKey) | downloadFile(tempKey) |
Примеры вызовов — в статье Просмотр и печать файлов.