From 825c746d0e62ab2557013726d728fdf1232f59f0 Mon Sep 17 00:00:00 2001 From: alphaeusmote <41258468-alphaeusmote@users.noreply.replit.com> Date: Thu, 10 Apr 2025 15:12:16 +0000 Subject: [PATCH] Improve dynamic group condition builder UI and fix LDAP filter generation. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 705f2157-ef97-4fbd-89e4-8c7f2ecaea90 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7ed01c5f-a82d-405a-b728-b2e3d127c60c/2b3dd059-5776-4ece-bced-b6e25e25634b.jpg --- .../dynamic-groups/condition-builder.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/client/src/components/dynamic-groups/condition-builder.tsx b/client/src/components/dynamic-groups/condition-builder.tsx index 8a5648e..ded5114 100644 --- a/client/src/components/dynamic-groups/condition-builder.tsx +++ b/client/src/components/dynamic-groups/condition-builder.tsx @@ -175,7 +175,7 @@ const ConditionBuilder: React.FC = ({ // Keep the condition if its ID is not in our removal list // and its parent ID is not in our removal list return !idsToRemove.has(c.id) && - !idsToRemove.has(c.parentId); + !(c.parentId !== null && idsToRemove.has(c.parentId)); }); onChange(newConditions); @@ -242,7 +242,7 @@ const ConditionBuilder: React.FC = ({ return (
0 ? `${level * 20}px` : '0' }} >
@@ -341,7 +341,7 @@ const ConditionBuilder: React.FC = ({ // Regular condition return (
0 ? `${level * 20}px` : '0' }} >
@@ -603,21 +603,28 @@ const generateLdapFilter = (conditions: Condition[]): string => { const operator = logicalOp === 'AND' ? '&' : '|'; let groupFilter = `(${operator}`; + // Track if we've added any conditions to this group + let hasAddedCondition = false; + // Process regular conditions in this group for (const condition of childConditions) { if (!condition.isGroup) { const filter = generateRegularFilter(condition); - if (filter) groupFilter += filter; + if (filter) { + groupFilter += filter; + hasAddedCondition = true; + } } } // Process subgroups in this group for (const condition of childConditions) { - if (condition.isGroup && condition.id) { + if (condition.isGroup && condition.id !== undefined) { // Use another group filter here const subGroupFilter = generateGroupFilter(condition.id); if (subGroupFilter !== '(objectClass=*)') { groupFilter += subGroupFilter; + hasAddedCondition = true; } } } @@ -625,7 +632,7 @@ const generateLdapFilter = (conditions: Condition[]): string => { groupFilter += ')'; // If there are no actual conditions, return a default - if (groupFilter === `(${operator})`) { + if (!hasAddedCondition) { return '(objectClass=*)'; }