diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java index ef571e45..403d94e3 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java @@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.actions.metadata; import java.util.ArrayList; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -150,14 +151,21 @@ public class MetaDataAction } metaDataOutput.setWidgets(widgets); + /////////////////////////////////////////////////////// + // sort apps - by sortOrder (integer), then by label // + /////////////////////////////////////////////////////// + List sortedApps = metaDataInput.getInstance().getApps().values().stream() + .sorted(Comparator.comparing((QAppMetaData a) -> a.getSortOrder()) + .thenComparing((QAppMetaData a) -> a.getLabel())) + .toList(); + /////////////////////////////////// // map apps to frontend metadata // /////////////////////////////////// Map apps = new LinkedHashMap<>(); - for(Map.Entry entry : metaDataInput.getInstance().getApps().entrySet()) + for(QAppMetaData app : sortedApps) { - String appName = entry.getKey(); - QAppMetaData app = entry.getValue(); + String appName = app.getName(); PermissionCheckResult permissionResult = PermissionsHelper.getPermissionCheckResult(metaDataInput, app); if(permissionResult.equals(PermissionCheckResult.DENY_HIDE)) @@ -191,7 +199,7 @@ public class MetaDataAction // organize app tree nodes by their hierarchy // //////////////////////////////////////////////// List appTree = new ArrayList<>(); - for(QAppMetaData appMetaData : metaDataInput.getInstance().getApps().values()) + for(QAppMetaData appMetaData : sortedApps) { if(appMetaData.getParentAppName() == null) { diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/layout/QAppMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/layout/QAppMetaData.java index 0ad7335c..80725635 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/layout/QAppMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/layout/QAppMetaData.java @@ -43,6 +43,8 @@ public class QAppMetaData implements QAppChildMetaData, MetaDataWithPermissionRu private String name; private String label; + private Integer sortOrder = 500; + private QPermissionRules permissionRules; private List children; @@ -426,4 +428,36 @@ public class QAppMetaData implements QAppChildMetaData, MetaDataWithPermissionRu { qInstance.addApp(this); } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public QAppMetaData withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + }