feat(ldap): search box for the discovered groups/OUs list
Real directories can return many groups/OUs, making the checkbox list tedious to scroll through. Adds a client-side search input above the list that filters by name or DN substring (case-insensitive) as you type, so picking the right groups for the import filter is faster. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -81,6 +81,15 @@ export default function AdminLdapPage() {
|
|||||||
const [discovering, setDiscovering] = useState(false);
|
const [discovering, setDiscovering] = useState(false);
|
||||||
const [manualDn, setManualDn] = useState('');
|
const [manualDn, setManualDn] = useState('');
|
||||||
const [savingFilter, setSavingFilter] = useState(false);
|
const [savingFilter, setSavingFilter] = useState(false);
|
||||||
|
const [discoverSearch, setDiscoverSearch] = useState('');
|
||||||
|
|
||||||
|
const filteredDiscovered = discovered?.filter((entry) => {
|
||||||
|
const q = discoverSearch.trim().toLowerCase();
|
||||||
|
if (!q) return true;
|
||||||
|
return (
|
||||||
|
entry.name.toLowerCase().includes(q) || entry.dn.toLowerCase().includes(q)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
const hasAccess =
|
const hasAccess =
|
||||||
currentUser?.role === 'ADMIN' || currentUser?.role === 'SUPER_ADMIN';
|
currentUser?.role === 'ADMIN' || currentUser?.role === 'SUPER_ADMIN';
|
||||||
@@ -555,8 +564,17 @@ export default function AdminLdapPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{discovered && discovered.length > 0 && (
|
{discovered && discovered.length > 0 && (
|
||||||
<div className="mb-4 max-h-64 overflow-y-auto rounded-md border border-border divide-y divide-border">
|
<div className="mb-4 space-y-2">
|
||||||
{discovered.map((entry) => (
|
<input
|
||||||
|
type="text"
|
||||||
|
value={discoverSearch}
|
||||||
|
onChange={(e) => setDiscoverSearch(e.target.value)}
|
||||||
|
placeholder={t('groupFilter.searchPlaceholder')}
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm"
|
||||||
|
/>
|
||||||
|
<div className="max-h-64 overflow-y-auto rounded-md border border-border divide-y divide-border">
|
||||||
|
{filteredDiscovered && filteredDiscovered.length > 0 ? (
|
||||||
|
filteredDiscovered.map((entry) => (
|
||||||
<label
|
<label
|
||||||
key={entry.dn}
|
key={entry.dn}
|
||||||
className="flex items-center gap-3 px-4 py-2 text-sm hover:bg-muted/30 cursor-pointer"
|
className="flex items-center gap-3 px-4 py-2 text-sm hover:bg-muted/30 cursor-pointer"
|
||||||
@@ -574,7 +592,13 @@ export default function AdminLdapPage() {
|
|||||||
{entry.dn}
|
{entry.dn}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
))}
|
))
|
||||||
|
) : (
|
||||||
|
<p className="px-4 py-3 text-sm text-muted-foreground">
|
||||||
|
{t('groupFilter.noMatches')}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@@ -318,6 +318,8 @@
|
|||||||
"typeOu": "OU",
|
"typeOu": "OU",
|
||||||
"typeGroup": "Gruppe",
|
"typeGroup": "Gruppe",
|
||||||
"noneFound": "Keine Gruppen oder OUs gefunden.",
|
"noneFound": "Keine Gruppen oder OUs gefunden.",
|
||||||
|
"searchPlaceholder": "Gruppen/OUs durchsuchen...",
|
||||||
|
"noMatches": "Keine Treffer fuer diese Suche.",
|
||||||
"manualDn": "DN manuell hinzufuegen",
|
"manualDn": "DN manuell hinzufuegen",
|
||||||
"addDn": "Hinzufuegen",
|
"addDn": "Hinzufuegen",
|
||||||
"selected": "Ausgewaehlt",
|
"selected": "Ausgewaehlt",
|
||||||
|
|||||||
@@ -318,6 +318,8 @@
|
|||||||
"typeOu": "OU",
|
"typeOu": "OU",
|
||||||
"typeGroup": "Group",
|
"typeGroup": "Group",
|
||||||
"noneFound": "No groups or OUs found.",
|
"noneFound": "No groups or OUs found.",
|
||||||
|
"searchPlaceholder": "Search groups/OUs...",
|
||||||
|
"noMatches": "No matches for this search.",
|
||||||
"manualDn": "Add DN manually",
|
"manualDn": "Add DN manually",
|
||||||
"addDn": "Add",
|
"addDn": "Add",
|
||||||
"selected": "Selected",
|
"selected": "Selected",
|
||||||
|
|||||||
Reference in New Issue
Block a user