From 9170b607fe89f30a6a272c27b20f3f95ba727710 Mon Sep 17 00:00:00 2001 From: kenilkb Date: Thu, 16 Jul 2026 12:52:26 +0530 Subject: [PATCH] Fix: Sync Apply Group buttons with text input and automatically authorize group assets in backend getAssets query --- Channel-Backend/src/services/asset.service.ts | 46 ++++++++++++++----- .../src/pages/admin/DirectoryPage.tsx | 42 +++++++++++++++-- 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/Channel-Backend/src/services/asset.service.ts b/Channel-Backend/src/services/asset.service.ts index 3d7649a..c1b4da3 100644 --- a/Channel-Backend/src/services/asset.service.ts +++ b/Channel-Backend/src/services/asset.service.ts @@ -177,19 +177,43 @@ export class AssetService { return []; } - return await prisma.asset.findMany({ - where: { - status: 'published', - sharedWith: { - some: { - organizationId: user.organizationId, - OR: [ - { userId: null }, - { userId: user.id } - ] + // Support comma-separated multiple groups + const userGroups = user.partnerGroup + ? user.partnerGroup.split(',').map(s => s.trim().toLowerCase()) + : []; + + const whereClause: any = { + status: 'published', + OR: [ + { + sharedWith: { + some: { + organizationId: user.organizationId, + OR: [ + { userId: null }, + { userId: user.id } + ] + } } } - }, + ] + }; + + if (userGroups.length > 0) { + whereClause.OR.push({ + assetGroups: { + some: { + name: { + in: userGroups, + mode: 'insensitive' + } + } + } + }); + } + + return await prisma.asset.findMany({ + where: whereClause, include: { sharedWith: { include: { diff --git a/Channel-Frontend/src/pages/admin/DirectoryPage.tsx b/Channel-Frontend/src/pages/admin/DirectoryPage.tsx index c6d062b..fb67448 100644 --- a/Channel-Frontend/src/pages/admin/DirectoryPage.tsx +++ b/Channel-Frontend/src/pages/admin/DirectoryPage.tsx @@ -163,11 +163,43 @@ export const DirectoryPage: React.FC = () => { getAssetGroups().then(setAssetGroups).catch(console.error); }, []); + const handleToggleInviteGroup = (groupName: string, select: boolean) => { + setPartnerGroup(prev => { + const groups = prev ? prev.split(',').map(s => s.trim()) : []; + if (select) { + if (!groups.some(g => g.toLowerCase() === groupName.toLowerCase())) { + groups.push(groupName); + } + } else { + const filtered = groups.filter(g => g.toLowerCase() !== groupName.toLowerCase()); + return filtered.join(', '); + } + return groups.join(', '); + }); + }; + + const handleToggleEditGroup = (groupName: string, select: boolean) => { + setEditGroup(prev => { + const groups = prev ? prev.split(',').map(s => s.trim()) : []; + if (select) { + if (!groups.some(g => g.toLowerCase() === groupName.toLowerCase())) { + groups.push(groupName); + } + } else { + const filtered = groups.filter(g => g.toLowerCase() !== groupName.toLowerCase()); + return filtered.join(', '); + } + return groups.join(', '); + }); + }; + + const renderAssetSelector = ( selectedIds: string[], setSelectedIds: React.Dispatch>, searchQuery: string, - setSearchQuery: React.Dispatch> + setSearchQuery: React.Dispatch>, + onToggleGroup?: (groupName: string, select: boolean) => void ) => { const filtered = allAssets.filter(asset => asset.title.toLowerCase().includes(searchQuery.toLowerCase()) @@ -181,8 +213,6 @@ export const DirectoryPage: React.FC = () => { } }; - - return (
@@ -220,6 +250,7 @@ export const DirectoryPage: React.FC = () => { const groupAssetIds = g.assets.map(a => a.id); if (hasAll) { setSelectedIds(prev => prev.filter(id => !groupAssetIds.includes(id))); + if (onToggleGroup) onToggleGroup(g.name, false); } else { setSelectedIds(prev => { const newIds = [...prev]; @@ -228,6 +259,7 @@ export const DirectoryPage: React.FC = () => { }); return newIds; }); + if (onToggleGroup) onToggleGroup(g.name, true); } }} className={`px-2 py-0.5 rounded text-[9px] font-bold transition-all border cursor-pointer ${hasAll @@ -1233,7 +1265,7 @@ export const DirectoryPage: React.FC = () => { )}
- {renderAssetSelector(selectedAssetIds, setSelectedAssetIds, inviteAssetSearch, setInviteAssetSearch)} + {renderAssetSelector(selectedAssetIds, setSelectedAssetIds, inviteAssetSearch, setInviteAssetSearch, handleToggleInviteGroup)}
{inviteResult?.error && ( @@ -1397,7 +1429,7 @@ export const DirectoryPage: React.FC = () => { )} - {renderAssetSelector(editAssetIds, setEditAssetIds, editAssetSearch, setEditAssetSearch)} + {renderAssetSelector(editAssetIds, setEditAssetIds, editAssetSearch, setEditAssetSearch, handleToggleEditGroup)}