sort base and component ui classes
This commit is contained in:
parent
2fc60efbca
commit
30ada91aa3
22 changed files with 54 additions and 131 deletions
|
@ -16,6 +16,7 @@
|
|||
|
||||
package com.faendir.acra.ui.base;
|
||||
|
||||
import com.faendir.acra.ui.component.Path;
|
||||
import com.vaadin.flow.component.UI;
|
||||
import com.vaadin.flow.router.AfterNavigationEvent;
|
||||
import com.vaadin.flow.router.BeforeEvent;
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.faendir.acra.ui.base;
|
|||
import com.faendir.acra.i18n.Messages;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.component.FlexLayout;
|
||||
import com.faendir.acra.ui.component.Path;
|
||||
import com.vaadin.flow.component.AttachEvent;
|
||||
import com.vaadin.flow.component.Component;
|
||||
import com.vaadin.flow.component.Composite;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base;
|
||||
package com.faendir.acra.ui.component;
|
||||
|
||||
import com.faendir.acra.i18n.Messages;
|
||||
import com.faendir.acra.model.User;
|
|
@ -1,75 +0,0 @@
|
|||
/*
|
||||
* (C) Copyright 2018 Lukas Morawietz (https://github.com/F43nd1r)
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.component;
|
||||
|
||||
import com.vaadin.flow.component.Component;
|
||||
import com.vaadin.flow.component.HasComponents;
|
||||
import com.vaadin.flow.component.PropertyDescriptor;
|
||||
import com.vaadin.flow.component.PropertyDescriptors;
|
||||
import com.vaadin.flow.component.Tag;
|
||||
import com.vaadin.flow.component.dependency.HtmlImport;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author lukas
|
||||
* @since 15.11.18
|
||||
*/
|
||||
@Tag("simple-dropdown")
|
||||
@HtmlImport("bower_components/simple-dropdown/simple-dropdown.html")
|
||||
public class DropdownMenu extends Component implements HasComponents, HasSize, HasStyle {
|
||||
private static final String ORIGIN = "origin";
|
||||
private static PropertyDescriptor<Boolean, Boolean> ACTIVE_DESCRIPTOR = PropertyDescriptors.propertyWithDefault("active", false);
|
||||
private static PropertyDescriptor<String, String> LABEL_DESCRIPTOR = PropertyDescriptors.propertyWithDefault("label", "");
|
||||
|
||||
public DropdownMenu() {
|
||||
}
|
||||
|
||||
public DropdownMenu(Component... components) {
|
||||
this();
|
||||
add(components);
|
||||
}
|
||||
|
||||
public enum Origin {
|
||||
LEFT, TOP, RIGHT, BOTTOM, CENTER;
|
||||
}
|
||||
|
||||
public void setOpen(boolean open) {
|
||||
set(ACTIVE_DESCRIPTOR, open);
|
||||
}
|
||||
|
||||
public boolean isOpen() {
|
||||
return get(ACTIVE_DESCRIPTOR);
|
||||
}
|
||||
|
||||
public void setOrigin(Origin... origin) {
|
||||
getElement().setProperty(ORIGIN, Stream.of(origin).map(Origin::name).map(String::toLowerCase).collect(Collectors.joining(" ")));
|
||||
}
|
||||
|
||||
public Origin[] getOrigin() {
|
||||
return Stream.of(getElement().getProperty(ORIGIN).split(" ")).map(String::toUpperCase).map(Origin::valueOf).toArray(Origin[]::new);
|
||||
}
|
||||
|
||||
public void setLabel(String label) {
|
||||
set(LABEL_DESCRIPTOR, label);
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return get(LABEL_DESCRIPTOR);
|
||||
}
|
||||
}
|
|
@ -14,16 +14,14 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base;
|
||||
package com.faendir.acra.ui.component;
|
||||
|
||||
import com.faendir.acra.dataprovider.QueryDslDataProvider;
|
||||
import com.faendir.acra.ui.component.HasSize;
|
||||
import com.querydsl.core.types.Expression;
|
||||
import com.vaadin.flow.component.Component;
|
||||
import com.vaadin.flow.component.ComponentEventListener;
|
||||
import com.vaadin.flow.component.Composite;
|
||||
import com.vaadin.flow.component.grid.FooterRow;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.grid.GridSortOrder;
|
||||
import com.vaadin.flow.component.grid.ItemClickEvent;
|
||||
import com.vaadin.flow.data.renderer.Renderer;
|
||||
|
@ -48,11 +46,11 @@ import java.util.stream.Stream;
|
|||
* @author lukas
|
||||
* @since 13.07.18
|
||||
*/
|
||||
public class MyGrid<T> extends Composite<Grid<T>> implements LocaleChangeObserver, HasSize {
|
||||
public class Grid<T> extends Composite<com.vaadin.flow.component.grid.Grid<T>> implements LocaleChangeObserver, HasSize {
|
||||
private final QueryDslDataProvider<T> dataProvider;
|
||||
private final Map<Grid.Column<T>, Pair<String, Object[]>> columnCaptions;
|
||||
private final Map<com.vaadin.flow.component.grid.Grid.Column<T>, Pair<String, Object[]>> columnCaptions;
|
||||
|
||||
public MyGrid(QueryDslDataProvider<T> dataProvider) {
|
||||
public Grid(QueryDslDataProvider<T> dataProvider) {
|
||||
this.dataProvider = dataProvider;
|
||||
getContent().setDataProvider(dataProvider);
|
||||
getContent().setSizeFull();
|
||||
|
@ -62,38 +60,38 @@ public class MyGrid<T> extends Composite<Grid<T>> implements LocaleChangeObserve
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public Grid.Column<T> addColumn(@NonNull ValueProvider<T, ?> valueProvider, @NonNull String captionId, Object... params) {
|
||||
public com.vaadin.flow.component.grid.Grid.Column<T> addColumn(@NonNull ValueProvider<T, ?> valueProvider, @NonNull String captionId, Object... params) {
|
||||
return setupColumn(getContent().addColumn(valueProvider), captionId, params);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Grid.Column<T> addColumn(@NonNull ValueProvider<T, ?> valueProvider, @NonNull Expression<? extends Comparable> sort, @NonNull String captionId, Object... params) {
|
||||
public com.vaadin.flow.component.grid.Grid.Column<T> addColumn(@NonNull ValueProvider<T, ?> valueProvider, @NonNull Expression<? extends Comparable> sort, @NonNull String captionId, Object... params) {
|
||||
return setupSortableColumn(addColumn(valueProvider, captionId, params), sort);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Grid.Column<T> addColumn(@NonNull Renderer<T> renderer) {
|
||||
public com.vaadin.flow.component.grid.Grid.Column<T> addColumn(@NonNull Renderer<T> renderer) {
|
||||
return getContent().addColumn(renderer).setResizable(true).setAutoWidth(true).setFlexGrow(0);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Grid.Column<T> addColumn(@NonNull Renderer<T> renderer, @NonNull String captionId, Object... params) {
|
||||
public com.vaadin.flow.component.grid.Grid.Column<T> addColumn(@NonNull Renderer<T> renderer, @NonNull String captionId, Object... params) {
|
||||
return setupColumn(getContent().addColumn(renderer), captionId, params);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Grid.Column<T> addColumn(@NonNull Renderer<T> renderer, @NonNull Expression<? extends Comparable> sort, @NonNull String captionId, Object... params) {
|
||||
public com.vaadin.flow.component.grid.Grid.Column<T> addColumn(@NonNull Renderer<T> renderer, @NonNull Expression<? extends Comparable> sort, @NonNull String captionId, Object... params) {
|
||||
return setupSortableColumn(addColumn(renderer, captionId, params), sort);
|
||||
}
|
||||
|
||||
private Grid.Column<T> setupColumn(@NonNull Grid.Column<T> column, @NonNull String captionId, Object... params) {
|
||||
private com.vaadin.flow.component.grid.Grid.Column<T> setupColumn(@NonNull com.vaadin.flow.component.grid.Grid.Column<T> column, @NonNull String captionId, Object... params) {
|
||||
String caption = getTranslation(captionId, params);
|
||||
column = column.setHeader(caption).setResizable(true).setAutoWidth(true).setFlexGrow(0);
|
||||
columnCaptions.put(column, Pair.of(captionId, params));
|
||||
return column;
|
||||
}
|
||||
|
||||
private Grid.Column<T> setupSortableColumn(@NonNull Grid.Column<T> column, @NonNull Expression<? extends Comparable> sort) {
|
||||
private com.vaadin.flow.component.grid.Grid.Column<T> setupSortableColumn(@NonNull com.vaadin.flow.component.grid.Grid.Column<T> column, @NonNull Expression<? extends Comparable> sort) {
|
||||
column.setSortOrderProvider(direction -> Stream.of(new QueryDslDataProvider.QueryDslSortOrder(sort, direction)));
|
||||
column.setSortable(true);
|
||||
return column;
|
||||
|
@ -107,11 +105,11 @@ public class MyGrid<T> extends Composite<Grid<T>> implements LocaleChangeObserve
|
|||
getContent().addItemClickListener(e -> getUI().ifPresent(e.getButton() == 1 ? (ui -> ui.getPage().executeJavaScript("window.open(\"" + RouteConfiguration.forSessionScope().getUrl(target, parameterTransformer.apply(e.getItem())) + "\", \"blank\", \"\");")) : (ui -> ui.navigate(target, parameterTransformer.apply(e.getItem())))));
|
||||
}
|
||||
|
||||
public Registration addSelectionListener(SelectionListener<Grid<T>, T> listener) {
|
||||
public Registration addSelectionListener(SelectionListener<com.vaadin.flow.component.grid.Grid<T>, T> listener) {
|
||||
return getContent().addSelectionListener(listener);
|
||||
}
|
||||
|
||||
public void setSelectionMode(Grid.SelectionMode selectionMode) {
|
||||
public void setSelectionMode(com.vaadin.flow.component.grid.Grid.SelectionMode selectionMode) {
|
||||
getContent().setSelectionMode(selectionMode);
|
||||
}
|
||||
|
||||
|
@ -135,7 +133,7 @@ public class MyGrid<T> extends Composite<Grid<T>> implements LocaleChangeObserve
|
|||
return getContent().appendFooterRow();
|
||||
}
|
||||
|
||||
public List<Grid.Column<T>> getColumns() {
|
||||
public List<com.vaadin.flow.component.grid.Grid.Column<T>> getColumns() {
|
||||
return getContent().getColumns();
|
||||
}
|
||||
|
|
@ -14,8 +14,10 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base;
|
||||
package com.faendir.acra.ui.component;
|
||||
|
||||
import com.faendir.acra.ui.base.HasRoute;
|
||||
import com.faendir.acra.ui.base.TranslatableText;
|
||||
import com.faendir.acra.ui.component.HasSize;
|
||||
import com.faendir.acra.ui.component.HasStyle;
|
||||
import com.faendir.acra.ui.component.SubTabs;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base;
|
||||
package com.faendir.acra.ui.component;
|
||||
|
||||
import com.faendir.acra.dataprovider.QueryDslDataProvider;
|
||||
import com.faendir.acra.i18n.Messages;
|
||||
|
@ -24,11 +24,11 @@ import com.faendir.acra.model.QReport;
|
|||
import com.faendir.acra.model.Report;
|
||||
import com.faendir.acra.security.SecurityUtils;
|
||||
import com.faendir.acra.service.AvatarService;
|
||||
import com.faendir.acra.ui.component.Grid;
|
||||
import com.faendir.acra.ui.component.dialog.FluentDialog;
|
||||
import com.faendir.acra.ui.view.report.ReportView;
|
||||
import com.faendir.acra.util.TimeSpanRenderer;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.grid.GridSortOrder;
|
||||
import com.vaadin.flow.component.icon.Icon;
|
||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||
|
@ -41,12 +41,12 @@ import java.util.function.Consumer;
|
|||
* @author lukas
|
||||
* @since 17.09.18
|
||||
*/
|
||||
public class ReportList extends MyGrid<Report>{
|
||||
public class ReportList extends Grid<Report> {
|
||||
public ReportList(@NonNull App app, @NonNull QueryDslDataProvider<Report> dataProvider, @NonNull AvatarService avatarService, @NonNull Consumer<Report> reportDeleter) {
|
||||
super(dataProvider);
|
||||
setSelectionMode(Grid.SelectionMode.NONE);
|
||||
setSelectionMode(com.vaadin.flow.component.grid.Grid.SelectionMode.NONE);
|
||||
addColumn(new ComponentRenderer<>(avatarService::getAvatar) , QReport.report.installationId, Messages.USER);
|
||||
Grid.Column<Report> dateColumn = addColumn(new TimeSpanRenderer<>(Report::getDate), QReport.report.date, Messages.DATE);
|
||||
com.vaadin.flow.component.grid.Grid.Column<Report> dateColumn = addColumn(new TimeSpanRenderer<>(Report::getDate), QReport.report.date, Messages.DATE);
|
||||
sort(GridSortOrder.desc(dateColumn).build());
|
||||
addColumn(report -> report.getStacktrace().getVersion().getCode(), QReport.report.stacktrace.version.code, Messages.APP_VERSION);
|
||||
addColumn(Report::getAndroidVersion, QReport.report.androidVersion, Messages.ANDROID_VERSION);
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.faendir.acra.ui.base.statistics;
|
||||
package com.faendir.acra.ui.component.statistics;
|
||||
|
||||
import com.faendir.acra.ui.component.Card;
|
||||
import com.faendir.acra.ui.component.HasSize;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base.statistics;
|
||||
package com.faendir.acra.ui.component.statistics;
|
||||
|
||||
import com.faendir.acra.i18n.Messages;
|
||||
import com.faendir.acra.util.LocalSettings;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.faendir.acra.ui.base.statistics;
|
||||
package com.faendir.acra.ui.component.statistics;
|
||||
|
||||
import com.faendir.acra.model.App;
|
||||
import com.faendir.acra.service.DataService;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.faendir.acra.ui.base.statistics;
|
||||
package com.faendir.acra.ui.component.statistics;
|
||||
|
||||
import com.faendir.acra.i18n.Messages;
|
||||
import com.faendir.acra.model.App;
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.faendir.acra.ui.base.statistics;
|
||||
package com.faendir.acra.ui.component.statistics;
|
||||
|
||||
import com.faendir.acra.i18n.Messages;
|
||||
import com.faendir.acra.util.LocalSettings;
|
|
@ -21,7 +21,7 @@ import com.faendir.acra.model.User;
|
|||
import com.faendir.acra.security.SecurityUtils;
|
||||
import com.faendir.acra.service.UserService;
|
||||
import com.faendir.acra.ui.base.ParentLayout;
|
||||
import com.faendir.acra.ui.base.Path;
|
||||
import com.faendir.acra.ui.component.Path;
|
||||
import com.faendir.acra.ui.component.FlexLayout;
|
||||
import com.faendir.acra.ui.component.Label;
|
||||
import com.faendir.acra.ui.component.Tab;
|
||||
|
@ -37,7 +37,6 @@ import com.vaadin.flow.component.applayout.AppLayout;
|
|||
import com.vaadin.flow.component.applayout.DrawerToggle;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.dependency.CssImport;
|
||||
import com.vaadin.flow.component.dependency.JsModule;
|
||||
import com.vaadin.flow.component.html.Div;
|
||||
import com.vaadin.flow.component.html.Image;
|
||||
|
|
|
@ -24,9 +24,9 @@ import com.faendir.acra.model.User;
|
|||
import com.faendir.acra.model.view.VApp;
|
||||
import com.faendir.acra.security.SecurityUtils;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.ConfigurationLabel;
|
||||
import com.faendir.acra.ui.component.ConfigurationLabel;
|
||||
import com.faendir.acra.ui.base.HasAcrariumTitle;
|
||||
import com.faendir.acra.ui.base.MyGrid;
|
||||
import com.faendir.acra.ui.component.Grid;
|
||||
import com.faendir.acra.ui.base.TranslatableText;
|
||||
import com.faendir.acra.ui.component.dialog.FluentDialog;
|
||||
import com.faendir.acra.ui.component.dialog.ValidatedField;
|
||||
|
@ -36,7 +36,6 @@ import com.faendir.acra.util.ImportResult;
|
|||
import com.vaadin.flow.component.AttachEvent;
|
||||
import com.vaadin.flow.component.ComponentEventListener;
|
||||
import com.vaadin.flow.component.checkbox.Checkbox;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||
import com.vaadin.flow.component.textfield.NumberField;
|
||||
|
@ -65,9 +64,9 @@ public class Overview extends VerticalLayout implements ComponentEventListener<A
|
|||
@Override
|
||||
public void onComponentEvent(AttachEvent event) {
|
||||
removeAll();
|
||||
MyGrid<VApp> grid = new MyGrid<>(dataService.getAppProvider());
|
||||
grid.setSelectionMode(Grid.SelectionMode.NONE);
|
||||
Grid.Column<VApp> appColumn = grid.addColumn(VApp::getName, QApp.app.name, Messages.NAME).setFlexGrow(1);
|
||||
Grid<VApp> grid = new Grid<>(dataService.getAppProvider());
|
||||
grid.setSelectionMode(com.vaadin.flow.component.grid.Grid.SelectionMode.NONE);
|
||||
com.vaadin.flow.component.grid.Grid.Column<VApp> appColumn = grid.addColumn(VApp::getName, QApp.app.name, Messages.NAME).setFlexGrow(1);
|
||||
grid.addColumn(VApp::getBugCount, QBug.bug.countDistinct(), Messages.BUGS);
|
||||
grid.addColumn(VApp::getReportCount, QReport.report.count(), Messages.REPORTS);
|
||||
grid.addOnClickNavigation(BugTab.class, VApp::getId);
|
||||
|
|
|
@ -27,8 +27,8 @@ import com.faendir.acra.model.Version;
|
|||
import com.faendir.acra.security.SecurityUtils;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.service.UserService;
|
||||
import com.faendir.acra.ui.base.ConfigurationLabel;
|
||||
import com.faendir.acra.ui.base.MyGrid;
|
||||
import com.faendir.acra.ui.component.ConfigurationLabel;
|
||||
import com.faendir.acra.ui.component.Grid;
|
||||
import com.faendir.acra.ui.component.dialog.FluentDialog;
|
||||
import com.faendir.acra.ui.component.Box;
|
||||
import com.faendir.acra.ui.component.Card;
|
||||
|
@ -95,7 +95,7 @@ public class AdminTab extends AppTab<Div> {
|
|||
@Override
|
||||
protected void init(App app) {
|
||||
layout.removeAll();
|
||||
MyGrid<Version> versionGrid = new MyGrid<>(getDataService().getVersionProvider(app));
|
||||
Grid<Version> versionGrid = new Grid<>(getDataService().getVersionProvider(app));
|
||||
versionGrid.setMinHeight(280, HasSize.Unit.PIXEL);
|
||||
versionGrid.setHeight(100, HasSize.Unit.PERCENTAGE);
|
||||
versionGrid.addColumn(Version::getCode, QVersion.version.code, Messages.VERSION_CODE).setFlexGrow(1);
|
||||
|
|
|
@ -26,7 +26,7 @@ import com.faendir.acra.model.view.VBug;
|
|||
import com.faendir.acra.security.SecurityUtils;
|
||||
import com.faendir.acra.service.BugMerger;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.MyGrid;
|
||||
import com.faendir.acra.ui.component.Grid;
|
||||
import com.faendir.acra.ui.component.dialog.FluentDialog;
|
||||
import com.faendir.acra.ui.component.Translatable;
|
||||
import com.faendir.acra.ui.view.app.AppView;
|
||||
|
@ -35,7 +35,6 @@ import com.faendir.acra.util.TimeSpanRenderer;
|
|||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.checkbox.Checkbox;
|
||||
import com.vaadin.flow.component.grid.FooterRow;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.grid.GridSortOrder;
|
||||
import com.vaadin.flow.component.notification.Notification;
|
||||
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
||||
|
@ -72,8 +71,8 @@ public class BugTab extends AppTab<VerticalLayout> {
|
|||
protected void init(App app) {
|
||||
getContent().setAlignItems(FlexComponent.Alignment.START);
|
||||
Translatable<Checkbox> hideSolved = Translatable.createCheckbox(true, Messages.HIDE_SOLVED);
|
||||
MyGrid<VBug> bugs = new MyGrid<>(getDataService().getBugProvider(app, () -> hideSolved.getContent().getValue()));
|
||||
bugs.setSelectionMode(Grid.SelectionMode.MULTI);
|
||||
Grid<VBug> bugs = new Grid<>(getDataService().getBugProvider(app, () -> hideSolved.getContent().getValue()));
|
||||
bugs.setSelectionMode(com.vaadin.flow.component.grid.Grid.SelectionMode.MULTI);
|
||||
hideSolved.getContent().addValueChangeListener(e -> getUI().ifPresent(ui -> ui.access(() -> {
|
||||
bugs.deselectAll();
|
||||
bugs.getDataProvider().refreshAll();
|
||||
|
@ -93,14 +92,14 @@ public class BugTab extends AppTab<VerticalLayout> {
|
|||
Notification.show(Messages.ONLY_ONE_BUG_SELECTED);
|
||||
}
|
||||
}, Messages.MERGE_BUGS);
|
||||
Grid.Column<VBug> countColumn = bugs.addColumn(VBug::getReportCount, QReport.report.count(), Messages.REPORTS);
|
||||
Grid.Column<VBug> dateColumn = bugs.addColumn(new TimeSpanRenderer<>(VBug::getLastReport), QReport.report.date.max(), Messages.LATEST_REPORT);
|
||||
com.vaadin.flow.component.grid.Grid.Column<VBug> countColumn = bugs.addColumn(VBug::getReportCount, QReport.report.count(), Messages.REPORTS);
|
||||
com.vaadin.flow.component.grid.Grid.Column<VBug> dateColumn = bugs.addColumn(new TimeSpanRenderer<>(VBug::getLastReport), QReport.report.date.max(), Messages.LATEST_REPORT);
|
||||
bugs.sort(GridSortOrder.desc(dateColumn).build());
|
||||
bugs.addColumn(VBug::getHighestVersionCode, QReport.report.stacktrace.version.code.max(), Messages.LATEST_VERSION);
|
||||
bugs.addColumn(VBug::getUserCount, QReport.report.installationId.countDistinct(), Messages.AFFECTED_USERS);
|
||||
bugs.addColumn(bug -> bug.getBug().getTitle(), QBug.bug.title, Messages.TITLE).setAutoWidth(false).setFlexGrow(1);
|
||||
List<Version> versions = getDataService().findAllVersions(app);
|
||||
Grid.Column<VBug> solvedColumn = bugs.addColumn(new ComponentRenderer<>((VBug bug) -> {
|
||||
com.vaadin.flow.component.grid.Grid.Column<VBug> solvedColumn = bugs.addColumn(new ComponentRenderer<>((VBug bug) -> {
|
||||
Select<Version> versionSelect = new Select<>(versions.toArray(new Version[0]));
|
||||
versionSelect.setTextRenderer(Version::getName);
|
||||
versionSelect.setEmptySelectionAllowed(true);
|
||||
|
|
|
@ -19,7 +19,7 @@ package com.faendir.acra.ui.view.app.tabs;
|
|||
import com.faendir.acra.model.App;
|
||||
import com.faendir.acra.service.AvatarService;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.ReportList;
|
||||
import com.faendir.acra.ui.component.ReportList;
|
||||
import com.faendir.acra.ui.view.app.AppView;
|
||||
import com.vaadin.flow.component.html.Div;
|
||||
import com.vaadin.flow.router.Route;
|
||||
|
|
|
@ -18,7 +18,7 @@ package com.faendir.acra.ui.view.app.tabs;
|
|||
|
||||
import com.faendir.acra.model.App;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.statistics.Statistics;
|
||||
import com.faendir.acra.ui.component.statistics.Statistics;
|
||||
import com.faendir.acra.ui.view.app.AppView;
|
||||
import com.faendir.acra.util.LocalSettings;
|
||||
import com.vaadin.flow.component.html.Div;
|
||||
|
|
|
@ -19,7 +19,7 @@ package com.faendir.acra.ui.view.bug.tabs;
|
|||
import com.faendir.acra.model.Bug;
|
||||
import com.faendir.acra.service.AvatarService;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.ReportList;
|
||||
import com.faendir.acra.ui.component.ReportList;
|
||||
import com.faendir.acra.ui.view.bug.BugView;
|
||||
import com.vaadin.flow.component.html.Div;
|
||||
import com.vaadin.flow.router.Route;
|
||||
|
|
|
@ -19,7 +19,7 @@ package com.faendir.acra.ui.view.bug.tabs;
|
|||
import com.faendir.acra.model.Bug;
|
||||
import com.faendir.acra.model.QReport;
|
||||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.statistics.Statistics;
|
||||
import com.faendir.acra.ui.component.statistics.Statistics;
|
||||
import com.faendir.acra.ui.view.bug.BugView;
|
||||
import com.faendir.acra.util.LocalSettings;
|
||||
import com.vaadin.flow.component.html.Div;
|
||||
|
|
|
@ -22,7 +22,7 @@ import com.faendir.acra.service.AvatarService;
|
|||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.ui.base.HasRoute;
|
||||
import com.faendir.acra.ui.base.HasSecureParameter;
|
||||
import com.faendir.acra.ui.base.Path;
|
||||
import com.faendir.acra.ui.component.Path;
|
||||
import com.faendir.acra.ui.component.Card;
|
||||
import com.faendir.acra.ui.component.CssGrid;
|
||||
import com.faendir.acra.ui.component.HasSize;
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.faendir.acra.security.SecurityUtils;
|
|||
import com.faendir.acra.service.DataService;
|
||||
import com.faendir.acra.service.UserService;
|
||||
import com.faendir.acra.ui.base.HasAcrariumTitle;
|
||||
import com.faendir.acra.ui.base.MyGrid;
|
||||
import com.faendir.acra.ui.component.Grid;
|
||||
import com.faendir.acra.ui.base.TranslatableText;
|
||||
import com.faendir.acra.ui.component.dialog.FluentDialog;
|
||||
import com.faendir.acra.ui.component.dialog.ValidatedField;
|
||||
|
@ -37,7 +37,6 @@ import com.vaadin.flow.component.Composite;
|
|||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.checkbox.Checkbox;
|
||||
import com.vaadin.flow.component.combobox.ComboBox;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.textfield.PasswordField;
|
||||
import com.vaadin.flow.component.textfield.TextField;
|
||||
import com.vaadin.flow.data.renderer.ComponentRenderer;
|
||||
|
@ -70,9 +69,9 @@ public class UserManager extends Composite<FlexLayout> implements HasAcrariumTit
|
|||
protected void onAttach(AttachEvent attachEvent) {
|
||||
super.onAttach(attachEvent);
|
||||
getContent().removeAll();
|
||||
MyGrid<User> userGrid = new MyGrid<>(userService.getUserProvider());
|
||||
Grid<User> userGrid = new Grid<>(userService.getUserProvider());
|
||||
userGrid.setWidthFull();
|
||||
userGrid.setSelectionMode(Grid.SelectionMode.NONE);
|
||||
userGrid.setSelectionMode(com.vaadin.flow.component.grid.Grid.SelectionMode.NONE);
|
||||
userGrid.addColumn(User::getUsername, QUser.user.username, Messages.USERNAME).setFlexGrow(1);
|
||||
userGrid.addColumn(new ComponentRenderer<>(user -> {
|
||||
Checkbox checkbox = new Checkbox(user.getRoles().contains(User.Role.ADMIN));
|
||||
|
|
Loading…
Reference in a new issue