Product Variants
Queries listed here are used to send requests to the Admin Product Variant API Routes.
All hooks listed require user authentication.
Product variants are the actual salable item in your store. Each variant is a combination of the different option values available on the product.
Related Guide: How to manage product variants.
Queries
useAdminVariants
This hook retrieves a list of product variants. The product variant can be filtered by fields such as id or title
passed in the query parameter. The product variant can also be paginated.
Example
To list product variants:
import React from "react"
import { useAdminVariants } from "medusa-react"
const Variants = () => {
const { variants, isLoading } = useAdminVariants()
return (
<div>
{isLoading && <span>Loading...</span>}
{variants && !variants.length && (
<span>No Variants</span>
)}
{variants && variants.length > 0 && (
<ul>
{variants.map((variant) => (
<li key={variant.id}>{variant.title}</li>
))}
</ul>
)}
</div>
)
}
export default Variants
To specify relations that should be retrieved within the product variants:
import React from "react"
import { useAdminVariants } from "medusa-react"
const Variants = () => {
const { variants, isLoading } = useAdminVariants({
expand: "options"
})
return (
<div>
{isLoading && <span>Loading...</span>}
{variants && !variants.length && (
<span>No Variants</span>
)}
{variants && variants.length > 0 && (
<ul>
{variants.map((variant) => (
<li key={variant.id}>{variant.title}</li>
))}
</ul>
)}
</div>
)
}
export default Variants
By default, only the first 100 records are retrieved. You can control pagination by specifying the limit and offset properties:
import React from "react"
import { useAdminVariants } from "medusa-react"
const Variants = () => {
const {
variants,
limit,
offset,
isLoading
} = useAdminVariants({
expand: "options",
limit: 50,
offset: 0
})
return (
<div>
{isLoading && <span>Loading...</span>}
{variants && !variants.length && (
<span>No Variants</span>
)}
{variants && variants.length > 0 && (
<ul>
{variants.map((variant) => (
<li key={variant.id}>{variant.title}</li>
))}
</ul>
)}
</div>
)
}
export default Variants
Hook Parameters
Filters and pagination configurations to apply on the retrieved product variants.
Query Returned Data
countnumberRequiredlimitnumberRequiredoffsetnumberRequireduseAdminVariant
This hook retrieves a product variant's details.
Example
A simple example that retrieves a product variant by its ID:
import React from "react"
import { useAdminVariant } from "medusa-react"
type Props = {
variantId: string
}
const Variant = ({ variantId }: Props) => {
const { variant, isLoading } = useAdminVariant(
variantId
)
return (
<div>
{isLoading && <span>Loading...</span>}
{variant && <span>{variant.title}</span>}
</div>
)
}
export default Variant
To specify relations that should be retrieved:
import React from "react"
import { useAdminVariant } from "medusa-react"
type Props = {
variantId: string
}
const Variant = ({ variantId }: Props) => {
const { variant, isLoading } = useAdminVariant(
variantId, {
expand: "options"
}
)
return (
<div>
{isLoading && <span>Loading...</span>}
{variant && <span>{variant.title}</span>}
</div>
)
}
export default Variant
Hook Parameters
idstringRequiredConfigurations to apply on the retrieved product variant.
Query Returned Data
useAdminVariantsInventory
This hook retrieves the available inventory of a product variant.
Example
import React from "react"
import { useAdminVariantsInventory } from "medusa-react"
type Props = {
variantId: string
}
const VariantInventory = ({ variantId }: Props) => {
const { variant, isLoading } = useAdminVariantsInventory(
variantId
)
return (
<div>
{isLoading && <span>Loading...</span>}
{variant && variant.inventory.length === 0 && (
<span>Variant doesn't have inventory details</span>
)}
{variant && variant.inventory.length > 0 && (
<ul>
{variant.inventory.map((inventory) => (
<li key={inventory.id}>{inventory.title}</li>
))}
</ul>
)}
</div>
)
}
export default VariantInventory
Hook Parameters
idstringRequired