nuxt-users
Version:
A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools
56 lines (55 loc) • 1.77 kB
JavaScript
import { useState, useRuntimeConfig } from "#imports";
const usersState = useState("users", () => []);
const paginationState = useState("users-pagination", () => null);
export const useUsers = () => {
const { public: { nuxtUsers } } = useRuntimeConfig();
const loading = useState("users-loading", () => false);
const error = useState("users-error", () => null);
const fetchUsers = async (page = 1, limit = 100) => {
if (loading.value) return;
loading.value = true;
error.value = null;
try {
const response = await $fetch(`${nuxtUsers.apiBasePath}?page=${page}&limit=${limit}`);
usersState.value = response.users;
paginationState.value = response.pagination;
} catch (err) {
error.value = err instanceof Error ? err.message : "Failed to fetch users";
usersState.value = [];
paginationState.value = null;
} finally {
loading.value = false;
}
};
const updateUser = (updatedUser) => {
const index = usersState.value.findIndex((u) => u.id === updatedUser.id);
if (index !== -1) {
usersState.value[index] = updatedUser;
}
};
const addUser = (newUser) => {
usersState.value.unshift(newUser);
};
const removeUser = async (userId) => {
loading.value = true;
error.value = null;
try {
await $fetch(`${nuxtUsers.apiBasePath}/${userId}`, { method: "DELETE" });
usersState.value = usersState.value.filter((u) => u.id !== userId);
} catch (err) {
error.value = err instanceof Error ? err.message : "Failed to delete user";
} finally {
loading.value = false;
}
};
return {
users: usersState,
pagination: paginationState,
loading,
error,
fetchUsers,
updateUser,
addUser,
removeUser
};
};