Расширение функциональности DataGrid

В Сuba и jmix 1.5 была возможность выбирать несколько строк с помощью клавиш shift и стрелочками выбрать нужный диапазон строк. Vaadin 24 предоставляет такую возможность адд-оном selection-grid Selection Grid - Vaadin Add-on Directory. Как правильно расширить DataGrid для адаптации с этим адд-оном (если вообще это возможно)? Прошу добавить такую фичу в следующих релизах jmix

2 симпатии

Добрый день!

Интегрировать это аддон во фреймворк не представляется возможным, потому как он не удовлетворяет стандартам кода и функциональности.

Т.к. данных аддон содержит компонент SelectionGrid, который является наследником Grid, то у вас есть несколько вариантов для того, чтобы использовать эту функциональность в своём проекте.

Вариант 1 (глобальный)

Если Вы хотите глобально изменить все компоненты DataGrid на представленный в аддоне, то вам необходимо сделать следующее:

  1. Расширить класс SelectionGrid

     public class MyDataGrid<E> extends SelectionGrid<E> {
         // code
     }
    
  2. Затем необходимо перенести код из io.jmix.flowui.component.grid.DataGrid в ваш MyDataGrid
    Это необходимо сделать для того, чтобы перенести функциональность привязки данных и остальных надстроек фреймворка Jmix в Ваш компонент. Это становится возможным, потому как реализованный во фреймворке DataGrid также, как и SelectionGrid является наследником Vaadin Grid

  3. Далее нужно заменить все компоненты DataGrid на MyDataGrid, для этого необходимо зарегистрировать:

     @Bean
     public ComponentRegistration myDataGrid() {
         return ComponentRegistrationBuilder.create("dataGrid")
                 .withComponentClass(MyDataGrid.class)
                 .withComponentLoaderClass(DataGridLoader.class)
                 .build();
     }
    

    Здесь, происходит регистрация компонента на xml-элемент dataGrid, который будет загружать класс MyDataGrid, используя стандартный DataGridLoader из фреймворка. Таким образом будет необходимо настроить selectionModel в контроллере экрана.

Вариант 2 (локальный)

Если Вам необходимо использовать этот компонент в одном месте, то Вы можете сделать следующее

  1. Создать SelectionGrid в экране

  2. Привязать в него данные вручную

  3. Также, если необходима поддержка XML Вы можете обратиться к примеру, который представлен в нашем демо-приложении: UI Samples :: Add-on integration

    В этом случае будет достаточно определить XSD схему, из которой будет определена разметка будущего компонента, в ней же Вы укажете недостающие свойства SelectionGrid
    Затем нужно будет реализовать свой MyDataGridLoader по аналогии с io.jmix.flowui.xml.layout.loader.component.DataGridLoader из фреймворка, и заменить его в регистрации, о которой я говорил выше

В приложении UI Samples Вы сможете найти другие примеры интеграции компонентов и аддонов в состав Вашего приложения.

С уважением,
Дмитрий