-
Bug
-
Resolution: Fixed
-
Major
-
6.2.43
-
None
Steps to reproduce
- app.yaml
datasource: $type: jcrDatasource sortBy: jcrName: ascending
info.magnolia.ui.contentapp.HierarchicalJcrDataProvider
private Comparator<Item> createComparator() { Comparator<Item> comparators = null; for (Map.Entry<String, SortDirection> entry : datasourceDefinition.getSortBy().entrySet()) { Comparator<Item> comparator = Comparator.comparing(item -> { if (item.isNode()) { if ("jcrPath".equals(entry.getKey())) { return NodeUtil.getPathIfPossible((Node) item); } return PropertyUtil.getString((Node) item, entry.getKey(), ""); } return ""; }); comparator = isReversed(entry.getValue()) ? comparator.reversed() : comparator; comparators = comparators == null ? comparator : comparators.thenComparing(comparator); } return comparators; }
info.magnolia.ui.contentapp.JcrQueryBuilder (ListView) already supports sortBy node name (https://jira.magnolia-cms.com/browse/MGNLUI-6725)
Fix:
info.magnolia.ui.contentapp.HierarchicalJcrDataProvider
private Comparator<Item> createComparator() { Comparator<Item> comparators = null; for (Map.Entry<String, SortDirection> entry : datasourceDefinition.getSortBy().entrySet()) { Comparator<Item> comparator = Comparator.comparing(item -> { if (item.isNode()) { if ("jcrPath".equals(entry.getKey())) { return NodeUtil.getPathIfPossible((Node) item); } if (getNodeNameProperty().equals(entry.getKey())) { return NodeUtil.getName((Node) item); } return PropertyUtil.getString((Node) item, entry.getKey(), ""); } return ""; }); comparator = isReversed(entry.getValue()) ? comparator.reversed() : comparator; comparators = comparators == null ? comparator : comparators.thenComparing(comparator); } return comparators; } private String getNodeNameProperty() { return Optional.ofNullable(datasourceDefinition.getNodeNameProperty()).orElse("jcrName"); }
Expected results
nodes are sorted based on name
Actual results
nodes are not sorted
Workaround
add additional sortBy "jcrPath"
Development notes
Acceptance criteria