Skip to content

Commit

Permalink
fix: use hierarchical route as key for collecting client menus
Browse files Browse the repository at this point in the history
Fixes #2460
  • Loading branch information
taefi committed May 23, 2024
1 parent 30cefb3 commit 1c5179b
Showing 1 changed file with 23 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.vaadin.hilla.route.records.ClientViewConfig;
import org.jsoup.nodes.DataNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -138,21 +139,28 @@ protected Map<String, AvailableViewInfo> collectClientViews(
deploymentConfiguration);
}

return clientRouteRegistry.getAllRoutes().values().stream()
.filter(config -> config.getRouteParameters() == null
|| config.getRouteParameters().isEmpty()
|| config.getRouteParameters().values().stream()
.noneMatch(
param -> param == RouteParamType.REQUIRED))
.filter(config -> routeUtil.isRouteAllowed(isUserInRole,
isUserAuthenticated, config))
.map(config -> new AvailableViewInfo(config.getTitle(),
config.getRolesAllowed(), config.isLoginRequired(),
config.getRoute(), config.isLazy(),
config.isAutoRegistered(), config.menu(),
config.getRouteParameters()))
.collect(Collectors.toMap(AvailableViewInfo::route,
Function.identity()));
return clientRouteRegistry.getAllRoutes().entrySet().stream()
.filter(viewMapping -> !hasRequiredParameter(
viewMapping.getValue().getRouteParameters()))
.filter(viewMapping -> routeUtil.isRouteAllowed(isUserInRole,
isUserAuthenticated, viewMapping.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey,
viewMapping -> toAvailableViewInfo(
viewMapping.getValue())));
}

private boolean hasRequiredParameter(
Map<String, RouteParamType> routeParameters) {
return routeParameters != null && !routeParameters.isEmpty()
&& routeParameters.values().stream().anyMatch(
paramType -> paramType == RouteParamType.REQUIRED);
}

private AvailableViewInfo toAvailableViewInfo(ClientViewConfig config) {
return new AvailableViewInfo(config.getTitle(),
config.getRolesAllowed(), config.isLoginRequired(),
config.getRoute(), config.isLazy(), config.isAutoRegistered(),
config.menu(), config.getRouteParameters());
}

protected Map<String, AvailableViewInfo> collectServerViews(
Expand Down

0 comments on commit 1c5179b

Please sign in to comment.