Выпуски Q.Palette

Выпуски Q.Palette

️‼️

Начиная с версии qpalette@6.4.1 необходимо в своем проекте в папке assets/data создать файл menu.ru.json, если этого не было сделано ранее. **Это необходимо для корректной работы меню рутового приложения. **. Содержимое можно скопировать из файла menu.json.
️С этого релиза чтение меню происходит именно из menu.ru.json

Актуальная версия Q.Palette 7: 7.4.2
Актуальный выпущенный образ Q.Palette: registry-new.diasoft.ru/release/qpalette:25050614

7.4.2

@diasoft/qpalette-prime

Переработаны стили типографики для компонента p-editor:

  • Компонент теперь использует отступы и стили Q.Palette вместо встроенных.
  • Переработана страница документации в соответствии с новыми реалиями.

@diasoft/qpalette-visual

Исправления ошибок:

  • Исправлен баг с некорректным расположением лейбла в некоторых инпутах.
  • Исправлены проблемы с перескакиванием курсора на стартовую позицию.
  • Устранена ошибка JSON.parse в presetValue search-box.

Новые возможности:

  • Доработан компонент QCalendarMask - теперь поддерживается ввод минут и секунд по маске.

@diasoft/qpalette-auth

  • Устранен баг, приводивший к некорректной работе KeyCloak.

@diasoft/qpalette-react

  • Улучшен компонент QSearchbox.
  • Стилизация компонентов приведена в соответствие со стилями Angular.

7.3.18

@diasoft/qpalette-visual-react

  • q-filter-wrapper исправлены стили, которые изменяли вёрстку angular.

7.3.17

@diasoft/qpalette-visual

  • Доработан компонент q-side-panel. Теперь он соответствует стандартам проектирования.

    • Теперь можно добавлять тултипы к свернутому состоянию q-side-panel и управлять их отображением через свойства tooltip и tooltipPosition.
    • Если поле tooltip не заполнено, оно автоматически возьмется из поля label.
    • Добавлено необязательное поле id.
    • Добавлено необязательное поле routerLink для навигации через Router внутри компонента.
    • Добавлено необязательное поле disabled для отключения пунктов меню при необходимости.
    • Добавлена иконка-фоллбэк, если пользователь не указал иконку в меню q-side-panel.
    • Обновлена документация компонента.
  • Добавлен новый компонент q-icon-selector.

    • Компонент позволяет выбирать необходимую иконку и видеть ее превью.
    • Можно искать иконку в самом компоненте. Нет необходимости идти в документацию.
    • Учтены разные размеры компонента: small, normal, medium, float-label (large).
    • Учтены различные состояния компонента: disabled, active, focus, и тд.

7.3.16

Рутовое приложение

  • Исправлено поведение кнопки главной страницы: теперь открывается пункт меню с установленным флагом default вместо дашборда, либо дашборд, если такого пункта меню нет.

@diasoft/qpalette-core

Исправления

  • Исправлено поведение HTTP-перехватчика больших чисел: если передан body в виде объекта и в запросе отсутствует Content-Type, он будет установлен в application/json.
  • Доработан алгоритм обработки чисел: теперь корректно распознаются как большие любые дробные числа и числа с плавающей точкой

@diasoft/qpalette-visual

  • Доработан компонент Q.Drawer. Теперь доступен не только накладной режим но и "Резиновый".
  • QLayout теперь умеет выстраивать интерфейс в зависимости от @container query.
  • Ограниченно доступен новый компонент Q.TaskCard
  • Выпущен полностью отрефакторенный Q.Searchbox
    • Переработана верстка
    • Доступен мультирежим без чипсов (управление только через диалоговое окно)
    • Изолирование стилей
    • Проработаны все состояния (hover, focus, disable, valid, invalid, active, readonly, shapeshifted)
    • Доступны все размерности
    • Доступна работа фильтрм
    • Доступны серчбоксы в серчбоксах

7.3.13

@diasoft/qpalette-core

Новые возможности

  • Теперь доступно автоматическое преобразование больших чисел в QBigInt и обратно при запросах к серверу с помощью HttpClient в формате JSON. Также возможно ручное преобразование JSON без потерь. См. Обработка больших чисел.

@diasoft/qpalette-visual

Новые возможности

  • Добавлен компонент q-drawer.
  • Добавлены классы для адаптивного поведения q-layout.

Исправления

  • Возвращена отправка события ready компонента q-web-component для обратной совместимости.

Лукап-директива

  • Исправлена ошибка: "Cannot read properties of undefined (reading 'previousValue')" лукап-директивы.

@diasoft/qpalette-visual-react

Новые возможности

  • Доработан компонент QIcon, теперь реализована возможность менять фон иконок.

@diasoft/qpalette-react-wrapper

Новые возможности

  • Доработан QpaletteWebComponent, теперь можно передавать свойства в веб-компонент.

Исправления

  • Исправлен баг при передаче данных в QWidget.

qpalette-prime

Новые возможности

  • Добавлен стиль p-accordion__settings для стилизации аккордеона в соответствии со стандартами проектирования.

Исправления

  • Обновлён p-editor. Теперь он использует актуальную версию библиотеки quill (2.0.3). Эта версия устраняет множество багов и добавляет привычные горячие клавиши при работе с WYSIWYG-редактором.
  • Увеличена область клика на шеврон компонента p-tree.
  • Исправлен баг состояния required для p-inputnumber.
  • Исправлен стилевой баг p-tabview.

7.3.11

Рутовое

Исправления

  • Исправлен ложный вывод сообщений о наличии новой версии бандла для проксированных бандлов.
  • Отключен вывод имени источника в сообщениях о наличии новой версии бандла.

@diasoft/qpalette-visual

Исправления

  • Исправлена передача фильтров и других данных в лукап-директивы.
  • Метод QWebComponentDataService.getData() больше не возвращает пустого значения при подписке.
  • BREAKING CHANGE: QWebComponentModule.forRoot() бросает исключение при повторном вызове (см. детали ниже).
  • BREAKING CHANGE: QWebComponentDataService.getData() теперь возвращает целиком тот объект, который был передан в поле [data] компонента q-web-component, а не только его payload (которого, к тому же, может не быть).
  • BREAKING CHANGE: QWebComponentDataService.getData() больше не возвращает данные из endpoint.properties, только из поля data. Для получения properties используйте либо устаревший QWebComponentModule.endpoint.properties, либо QWebComponentProperties (см. детали в анонсе 7.3.9).

BREAKING CHANGES

QWebComponentModule.forRoot() бросает исключение при повторном вызове

Если в приложении дважды вызван QWebComponentModule.forRoot(), в консоли будет выброшено исключение, а компонент не загрузится. По цепочке вызовов можно увидеть, какой модуль вызвал ошибку. Например:

assets/docs/release/for-root-error.png

В данном случае это библиотека @diasoft/qversionui-lib. Для решения проблемы необходимо избавиться от повторного вызова QWebComponentModule.forRoot() внутри всех модулей, кроме основного модуля вашего продукта.

7.3.10

Рутовое

  • Исправлен ложный вывод в рутовом сообщений о наличии новой версии бандла.
  • Исправлен вывод сообщений в журнале: уровень логирования вместо цифры выводится строкой.

New Features

Динамическое включение/выключение логирования

Реализованы глобальные функции setLoggerLevel и resetLoggerLevel для динамической смены уровня логирования.

Чтобы включить debug-режим, можно в консоли разработчика (например, Console в Chrome (opens in a new tab)) выполнить:

    qpalette.setLoggerLevel("debug")

Чтобы вернуть настройки обратно:

    qpalette.resetLoggerLevel()

Как работать с журналом – см. анонс выпуска 7.3.8 ниже.

💡

Это предпочтительный способ включения логирования по сравнению с включением через конфигурацию стенда, так как изолирован одной сессией работы в браузере и не забивает память других пользователей.

🚫

Не забудьте выключить логирование после того, как получили детальные логи, иначе память быстро засорится, что может привести к зависанию при активной работе в интерфейсе.

7.3.9

Рутовое

  • Исправлен вывод тостов в области рутового.

@diasoft/qpalette-visual

  • q-web-component
    • Исправлена передача данных в веб-компонент (см. ниже Deprecations).

Deprecations

provideSingleBundle()

Для корректной работы в режиме Single Bundle необходимо предоставить функцию provideSingleBundle() из пакета @diasoft/qpalette-visual в разделе providers главного компонента. Константа Q_WEB_COMPONENT_SERVICES из @diasoft/qpalette-visual больше не нужна и будет удалена в будущих версиях. Пример компонента можно посмотреть тут (opens in a new tab).

import { QWebComponent, provideSingleBundle } from '@diasoft/qpalette-visual';
 
@Component({
    //...
    providers: [
        provideSingleBundle()
    ]
})
export class AppComponent extends QWebComponent {
    //...
}

Получение данных, передаваемых в веб-компоненты

Получение данных через QWebComponentModule.endpoint.properties является устаревшим вариантом, статическое поле endpoint в будущем будет удалено. Более того, такой способ возвращает только первое установленное значение.

  • Для однократного получения параметров используйте сервис QWebComponentProperties из пакета @diasoft/qpalette-visual.
  • Если требуется многократное получение данных, используйте метод getData() сервиса QWebComponentDataService из пакета @diasoft/qpalette-visual.

Передача данных в веб-компонент по-прежнему доступна как через endpoint.properties, так и через поле data компонента q-web-component. При этом QWebComponentProperties возвращает данные из endpoint.properties, а QWebComponentDataService – как из endpoint.properties, так и из поля data.

Примеры:

import { QWebComponentDataService, QWebComponentProperties } from '@diasoft/qpalette-visual';
import {Component} from "@angular/core";
 
@Component({/*...*/})
export class GetPropertiesComponent {
    constructor(
        private readonly dataService: QWebComponentDataService,
        private readonly properties: QWebComponentProperties,
    ) {
        // теперь параметры стали реактивными (могут меняться в режиме реального времени)
        this.dataService.inputData.subscribe(params => {
            console.log(params); // { param1: 'value1', param2: 'value2' }
        });
 
        // если нужно получить параметры единоразово
        console.log(this.properties) // { param1: 'value1', param2: 'value2' }
    }
}

Демо-примеры разных способов получения данных можно посмотреть тут (opens in a new tab) (исходники тут (opens in a new tab)).

7.3.8

@diasoft/qpalette-visual

  • q-web-component
    • Исправлена загрузка бандлов устаревших версий

New Features

Логирование

Cтала доступна опция детального логирования, включить ее можно настройкой в конфигурации (config.base.json или другой, используемый при сборке):

"common": {
    "logger": {
        "logLevel": "debug"
    }
}

Для наиболее полного логирования также рекомендуется подключить модуль QCoreModule на уровне главного модуля приложения. Например:

import { DoBootstrap, NgModule } from '@angular/core';
import { QCoreModule, QCoreService } from '@diasoft/qpalette-core';
 
@NgModule({
    imports: [
        QCoreModule.forRoot(QCoreService.config.common)
    ]
})
export class AppModule implements DoBootstrap {/**/}
⚠️

На текущий момент доступно только детальное логирование процесса загрузки бандла и общения между веб-компонентами.

После включения debug-режима в консоли будет детальный журнал для отладки.

Для его получения нужно:

  1. Открыть Console в инструментах разработчика браузера (например, DevTools в Chrome).
  2. Очистить консоль.
  3. Перезагрузить страницу.
  4. Воспроизвести ошибку.
  5. Экспортировать журнал в файл (например, в Chrome: правой кнопкой мыши в области консоли, далее Save as...).
  6. Отправить его нам (qpalette@diasoft.ru).

Мы поможем разобраться.

⚠️

В связи с большой загрузкой команды Q.Palette можем не сразу рассмотреть обращение. Большая просьба попробовать разобраться самостоятельно, прежде чем обращаться к нам за помощью.

🚫

Не включайте режим "debug" без лишней надобности, так как это очень быстро засорит память, что может привести к зависанию у пользователей при активной работе в интерфейсе. Включайте только на некоторое время, чтобы отловить ошибку. После формирования журнала, сохраните его для дальнейшего анализа и выключите логирование на стенде.

Single Bundle

  • Router.navigate() и Router.navigateByUrl() теперь работают стандартно: без указания дополнительных параметров в state.
  • ActivatedRoute лучше не использовать. Если вам нужен текущий URL, включая параметры, подписывайтесь на Router.events.

Полный фикс, где решены оставшиеся проблемы, уже готовится к выпуску.

7.3.6

@diasoft/qpalette-visual

  • q-web-component
    • Реализованы проверки окружения внутри веб-компонента.
    • Исправлен мелкий баг подсветки фильтров в активном состоянии.

BREAKING CHANGES

Логика навигации вынесена в QWebComponent.ngOnInit(). Если в вашем компоненте, который наследует QWebComponent, переопределен метод ngOnInit(), убедитесь в том, что в нем есть вызов super.ngOnInit(), иначе компонент не отобразится.

То же самое касается других хуков Angular – убедитесь, что для каждого someHook вызван super.someHook().

  • QSearchBox
    • Новый шаблон диалогового окна QSearchBox.
    • Новая верстка инпута QSearchBox.
    • Другие доработки верстки.
    • Различные размеры QSearchBox (xs, sm, md, lg).
    • Поддержка FloatLabel.
    • Предустановка фильтров, в том числе и скрытых.
    • Сортировка данных внутри таблицы по-умолчанию.
    • Исправлены баги с reset formControl.
    • Переработаны фильтры, поддержка как асинхронных данных через бек, так и через статичные значения, указанные в конфиге.
    • Фикс ошибки с автоматическим выпаданием календаря в фильтрах.
    • Поддержка всех типов фильтров, за исключением qLookupDirective (поддержан как фильтр не будет).
    • Лоадер в таблице при запросах.
    • Рефакторинг вложенных QSearchBox.
    • Оптимизация запросов и emit значений в прикладной formControl.
    • Destroy вложенных QSearchBox.
  • QFilterWrapper
    • Исправлен баг, когда незаполненный лукап подсвечивался синим

7.3.5

@diasoft/qpalette-visual

  • Исправление работы лукап-директив:
    • Адаптирована инициализация загрузки бандла для корректной работы компонента
    • Добавлена проверка на изменение endpoint-а перед инициализацией виджетов, чтобы избежать некорректного поведения
    • Улучшена стабильность и управление visual.q-lookup
  • Оптимизация веб-компонентов:
    • Исправлена логика загрузки бандлов: добавлена обратная совместимость для режимов с сингл-бандлом и без него
    • Реализовано отображение спиннера загрузки до получения соответствующего события, чтобы минимизировать ощущения задержки для пользователей
    • Оптимизирован процесс инициализации и загрузки q-web-component для повышения скорости и более гладкой работы

BREAKING CHANGES

  • Добавлена логика регистрации веб-компонента в метод QWebComponentModule.forRoot(). Проверьте, что в ваших продуктах и подключаемых библиотеках этот метод вызывается лишь один раз (на уровне главного модуля вашего продукта). Иначе продукт может не загрузиться!

Как понять, что метод вызван дважды?

  1. Закройте все продукты и перезагрузите страницу.
  2. Откройте страницу продукта.
  3. Откройте консоль разработчика в браузере и введите qpalette.webComponentRepository.
  4. Если в выведенном массиве ваш компонент представлен больше, чем один раз (без учета дополнительных виджетов и библиотечных PBC) – значит, QWebComponentModule.forRoot() был вызван дважды.

7.3.3

Рутовое приложение

  • Исправление изменения properties веб-компонента в режиме реального времени

7.3.2

Рутовое приложение

  • Исправление ошибки "No provider for QRootEventsService!"

7.3.1

Рутовое приложение

  • Добавлена возможность динамической подгрузки пунктов меню. Смотрите документацию тут (opens in a new tab).
  • Доработана технология SSE
  • Исправлена проверка версий бандлов: теперь нет ложных срабатываний.
  • Исправлено дублирование сообщений в рутовом: теперь одинаковые сообщения выводятся не чаще одного раза в 5 секунд.

@diasoft/qpalette-visual

  • Выбранные фильтры подсвечиваются синим
  • Исправлен баг с appendTo у q-side-dialog

@diasoft/qpalette-permissions:

  • Вернули флаг enable в конфигурацию QPermissions.
  • Исправление работы в режиме ABAC, если бекенд не возвращает serviceSysName. В случае, если в запросе переданы объекты с разными serviceSysName, а в ответе serviceSysName не указан, будет ошибка в консоли.

@diasoft/qpalette-react-wrapper:

  • Реализован механизм Single Bundle.
  • Удалён параметр useEffect из RoutesWrapper.
  • Исправлена отписка виджетов от эвентов.
  • Добавлена константа appendToWebComponent, которую можно использовать для ваших компонентов, которые рендерятся в body.

7.2.16

qpalette-visual

Серчбокс

  • Исправлен непроизвольный вылет попапа при загрузке страницы.
  • Исправлен баг с прокидыванием плейсхолдера в фильтр-автокомплит.

qpalette-prime

  • Исправлен баг, когда кнопки в p-dialog были не на одной линии и имели лишний отступ.

qpalette-updater

  • Исправлена публикация апдейтера.

Рутовое приложение

  • Исправлен баг роутинга в библиотечных PBC.

7.2.15

Рутовое приложение

  • При каждом открытии новой вкладки или добавлении веб-компонента на страницу происходит проверка обновлений бандла на сервере. Если бандл обновился, пользователю будет предложено обновить страницу. Уведомления будут всплывать до тех пор, пока страница не будет обновлена. Это сделано для того, чтобы не нарушать текущую работу пользователя и не загружать потенциально конфликтующие с предыдущими версиями бандлы в рутовое.

qpalette-visual

Серчбокс

  • Исправлен disabled
  • Исправлен float-label, который не поднимался
  • Исправлена рекурсивная ошибка при использовании вложенных серчбоксов в цифровом профиле
  • Исправлена проблема валидации компонента

7.2.14

  • Исправлен баг, когда при открытии первой вкладки компонента в режиме Single Bundle и Keycloak страница пустая
  • Breaking Change - Все бандлы, которые используют Single Bundle, должны быть переведены на последнюю версию qpalette
    • При открытии первой вкладки компонента в режиме Single Bundle в некоторых случаях веб-компонент не успевал зарегистрироваться
    • В режиме Single Bundle в некоторых случаях начальная навигация по маршруту не выполнялась
    • Удален костыль singleBundleModeEnabled, который должен был поддерживать обратную совместимость с бандлами старых версий (по факту оказался нерабочим вариантом: в режиме Keycloak бандлы в режиме SB не успевали зарегистрироваться, в итоге страница была пустой при первом открытии вкладки)
    • Теперь веб-компоненты добавляют себя в глобальный реестр сами

7.1.3

Рутовое приложение

  • Исправлен баг, когда открывался некорректный роут при перезагрузке страницы
  • Исправлен баг при переключении между маршрутами продукта в режиме Single Bundle React
  • Исправлено отображение SideDialog
  • Исправлено визуальное отображение всех инпутов с атрибутом required
  • Исправлены селекты в компоненте MultiSelect и TreeSelect
  • Исправлен лоадер в компоненте Lookup
  • Добавлена поддержка компонента Password

7.1.0

Рутовое приложение и все библиотеки

  • Поддержан Angular 17
  • Поддержан PrimeNG 17
  • Поддержана технология SingleBundle
  • Поддержана обратная совместимость с версиями Q.Palette 6
  • Контекстное меню Основного приложения (рутового) было заменено на p-context-menu
  • Устранен баг, когда лукап-директива при повторном открытии не отображалась
  • Синхронизированы версии Angular и React, теперь все версии выпускаются с одинаковым индексом
  • Устранены некоторые критические зависимости
  • Исправлен баг, когда p-tooltip непроизвольно показывал скроллинг
  • Мелкие исправления