This commit is contained in:
Markos Gogoulos 2025-10-29 15:25:08 +02:00
parent a320375e16
commit 3e79f5a558
2 changed files with 12 additions and 11 deletions

View File

@ -29,7 +29,7 @@ export const BulkActionPermissionModal: React.FC<BulkActionPermissionModalProps>
}) => { }) => {
const [existingUsers, setExistingUsers] = useState<string[]>([]); const [existingUsers, setExistingUsers] = useState<string[]>([]);
const [existingSearchTerm, setExistingSearchTerm] = useState(''); const [existingSearchTerm, setExistingSearchTerm] = useState('');
const [usersToAdd, setUsersToAdd] = useState<string[]>([]); const [usersToAdd, setUsersToAdd] = useState<Array<{ username: string; display: string }>>([]);
const [usersToRemove, setUsersToRemove] = useState<string[]>([]); const [usersToRemove, setUsersToRemove] = useState<string[]>([]);
const [searchResults, setSearchResults] = useState<User[]>([]); const [searchResults, setSearchResults] = useState<User[]>([]);
const [addSearchTerm, setAddSearchTerm] = useState(''); const [addSearchTerm, setAddSearchTerm] = useState('');
@ -127,15 +127,15 @@ export const BulkActionPermissionModal: React.FC<BulkActionPermissionModalProps>
const addUserToList = (username: string, name: string, email?: string) => { const addUserToList = (username: string, name: string, email?: string) => {
const userDisplay = `${name} - ${email || username}`; const userDisplay = `${name} - ${email || username}`;
if (!usersToAdd.includes(userDisplay) && !existingUsers.includes(userDisplay)) { if (!usersToAdd.some(u => u.username === username) && !existingUsers.includes(userDisplay)) {
setUsersToAdd([...usersToAdd, userDisplay]); setUsersToAdd([...usersToAdd, { username, display: userDisplay }]);
setAddSearchTerm(''); setAddSearchTerm('');
setSearchResults([]); setSearchResults([]);
} }
}; };
const removeUserFromAddList = (user: string) => { const removeUserFromAddList = (username: string) => {
setUsersToAdd(usersToAdd.filter((u) => u !== user)); setUsersToAdd(usersToAdd.filter((u) => u.username !== username));
}; };
const markUserForRemoval = (user: string) => { const markUserForRemoval = (user: string) => {
@ -149,7 +149,8 @@ export const BulkActionPermissionModal: React.FC<BulkActionPermissionModalProps>
}; };
const extractUsername = (userDisplay: string): string => { const extractUsername = (userDisplay: string): string => {
// Extract username from "Name - username" format // For existing users from API, extract username from "Name - username/email" format
// Note: This assumes the username is after the last ' - ' separator
const parts = userDisplay.split(' - '); const parts = userDisplay.split(' - ');
return parts.length > 1 ? parts[parts.length - 1] : userDisplay; return parts.length > 1 ? parts[parts.length - 1] : userDisplay;
}; };
@ -160,7 +161,7 @@ export const BulkActionPermissionModal: React.FC<BulkActionPermissionModalProps>
try { try {
// First, add users if any // First, add users if any
if (usersToAdd.length > 0) { if (usersToAdd.length > 0) {
const usernamesToAdd = usersToAdd.map(extractUsername); const usernamesToAdd = usersToAdd.map(u => u.username);
const addResponse = await fetch('/api/v1/media/user/bulk_actions', { const addResponse = await fetch('/api/v1/media/user/bulk_actions', {
method: 'POST', method: 'POST',
headers: { headers: {
@ -264,9 +265,9 @@ export const BulkActionPermissionModal: React.FC<BulkActionPermissionModalProps>
<div className="empty-message">{translateString('No users to add')}</div> <div className="empty-message">{translateString('No users to add')}</div>
) : ( ) : (
usersToAdd.map((user) => ( usersToAdd.map((user) => (
<div key={user} className="user-item"> <div key={user.username} className="user-item">
<span>{user}</span> <span>{user.display}</span>
<button className="remove-btn" onClick={() => removeUserFromAddList(user)}> <button className="remove-btn" onClick={() => removeUserFromAddList(user.username)}>
× ×
</button> </button>
</div> </div>

File diff suppressed because one or more lines are too long