/**
* Utility functions for user management
* (Pure logic - Testable with unit tests)
*/
/**
* Loads the list of users from localStorage
* @returns {Array} List of users
*/
export const loadUsersFromStorage = () => {
try {
const users = localStorage.getItem('users');
return users ? JSON.parse(users) : [];
} catch (error) {
console.error('Erreur lors du chargement des utilisateurs:', error);
return [];
}
};
/**
* Saves the list of users to localStorage
* @param {Array} users - List of users to save
*/
export const saveUsersToStorage = (users) => {
try {
localStorage.setItem('users', JSON.stringify(users));
} catch (error) {
console.error('Erreur lors de la sauvegarde des utilisateurs:', error);
}
};
/**
* Add a new user to the list of users
* @param {Object} newUser - New user to add
* @param {Array} existingUsers - List of existing users
* @returns {Array} New list of users
*/
export const addUserToList = (newUser, existingUsers = []) => {
return [...existingUsers, newUser];
};
/**
* Counts the number of users
* @param {Array} users - List of users
* @returns {number} Number of users
*/
export const countUsers = (users = []) => {
return users.length;
};
/**
* Filters users by criteria
* @param {Array} users - List of users
* @param {string} searchTerm - Search term
* @returns {Array} Filtered users
*/
export const filterUsers = (users = [], searchTerm = '') => {
if (!searchTerm.trim()) return users;
const term = searchTerm.toLowerCase();
return users.filter(user => {
// Handle both formats: jsonplaceholder and legacy
const name = user.name || `${user.firstName || ''} ${user.lastName || ''}`;
const city = user.address?.city || user.city;
return name?.toLowerCase().includes(term) ||
user.email?.toLowerCase().includes(term) ||
city?.toLowerCase().includes(term);
});
};
/**
* Sorts users by name
* @param {Array} users - List of users
* @param {string} order - 'asc' or 'desc'
* @returns {Array} Sorted users
*/
export const sortUsersByName = (users = [], order = 'asc') => {
return [...users].sort((a, b) => {
// Handle both jsonplaceholder format (name) and legacy format (firstName lastName)
const nameA = (a.name || `${a.firstName || ''} ${a.lastName || ''}`).toLowerCase().trim();
const nameB = (b.name || `${b.firstName || ''} ${b.lastName || ''}`).toLowerCase().trim();
if (order === 'desc') {
return nameB.localeCompare(nameA);
}
return nameA.localeCompare(nameB);
});
};
/**
* Checks if a user already exists (by email)
* @param {string} email - Email to check
* @param {Array} users - List of existing users
* @returns {boolean} true if the user already exists
*/
export const userExists = (email, users = []) => {
return users.some(user => user.email?.toLowerCase() === email?.toLowerCase());
};
/**
* Formats the text for the user count display
* @param {number} count - Number of users
* @returns {string} Formatted text
*/
export const formatUserCountText = (count) => {
if (count === 0) {
return "Aucun utilisateur inscrit";
} else if (count === 1) {
return "1 utilisateur inscrit";
} else {
return `${count} utilisateurs inscrits`;
}
};