fix(medusa): Implement listAndCount for UserService and update list endpoint (#6190)

This commit is contained in:
Kasper Fabricius Kristensen
2024-01-24 10:41:35 +01:00
committed by GitHub
parent eb498c500e
commit d68089b2aa
13 changed files with 633 additions and 198 deletions

View File

@@ -1,4 +1,8 @@
import { AdminUserRes, AdminUsersListRes } from "@medusajs/medusa"
import {
AdminGetUsersParams,
AdminUserRes,
AdminUsersListRes,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useQuery } from "@tanstack/react-query"
import { useMedusa } from "../../../contexts"
@@ -13,14 +17,17 @@ type UserQueryKeys = typeof adminUserKeys
/**
* This hook retrieves all admin users.
*
*
* @example
* To list users:
*
* ```tsx
* import React from "react"
* import { useAdminUsers } from "medusa-react"
*
*
* const Users = () => {
* const { users, isLoading } = useAdminUsers()
*
*
* return (
* <div>
* {isLoading && <span>Loading...</span>}
@@ -35,23 +42,60 @@ type UserQueryKeys = typeof adminUserKeys
* </div>
* )
* }
*
*
* export default Users
*
* ```
*
* By default, only the first `20` records are retrieved. You can control pagination by specifying the `limit` and `offset` properties:
*
* ```tsx
* import React from "react"
* import { useAdminUsers } from "medusa-react"
*
* const Users = () => {
* const {
* users,
* limit,
* offset,
* isLoading
* } = useAdminUsers({
* limit: 20,
* offset: 0
* })
*
* return (
* <div>
* {isLoading && <span>Loading...</span>}
* {users && !users.length && <span>No Users</span>}
* {users && users.length > 0 && (
* <ul>
* {users.map((user) => (
* <li key={user.id}>{user.email}</li>
* ))}
* </ul>
* )}
* </div>
* )
* }
*
* export default Users
* ```
*
* @customNamespace Hooks.Admin.Users
* @category Queries
*/
export const useAdminUsers = (
query?: AdminGetUsersParams,
options?: UseQueryOptionsWrapper<
Response<AdminUsersListRes>,
Error,
ReturnType<UserQueryKeys["lists"]>
ReturnType<UserQueryKeys["list"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminUserKeys.lists(),
() => client.admin.users.list(),
adminUserKeys.list(query),
() => client.admin.users.list(query),
options
)
return { ...data, ...rest } as const
@@ -59,20 +103,20 @@ export const useAdminUsers = (
/**
* This hook retrieves an admin user's details.
*
*
* @example
* import React from "react"
* import { useAdminUser } from "medusa-react"
*
*
* type Props = {
* userId: string
* }
*
*
* const User = ({ userId }: Props) => {
* const { user, isLoading } = useAdminUser(
* userId
* )
*
*
* return (
* <div>
* {isLoading && <span>Loading...</span>}
@@ -80,9 +124,9 @@ export const useAdminUsers = (
* </div>
* )
* }
*
*
* export default User
*
*
* @customNamespace Hooks.Admin.Users
* @category Queries
*/