Fix store item variant defaults and listing sorting

Auto-select first option in variation modals and sort store items by availability, then update time.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-18 11:26:20 +03:30
co-authored by Cursor
parent b861ab3dc1
commit 5f4b0b4f92
20 changed files with 409 additions and 64 deletions
@@ -41,6 +41,7 @@ export function PickStoreSpecialItemsModal({
const [isLoading, setIsLoading] = useState(false)
const [error, setError] = useState('')
const [selectedIds, setSelectedIds] = useState<string[]>([])
const [selectOpen, setSelectOpen] = useState(false)
const existingSet = useMemo(() => new Set(existingStoreItemIds), [existingStoreItemIds])
@@ -85,15 +86,28 @@ export function PickStoreSpecialItemsModal({
const items = await listAllStoreItems(signal)
const listings = groupStoreItemsByProduct(items)
const nextOptions = listings
.map((listing) => {
.map(
(listing): StoreItemSearchOption | null => {
const storeItemId = listing.representative.storeItemId ?? listing.representative.id
const firstPricedVariant = listing.variants.find((v) => v.price !== null) ?? null
const price = firstPricedVariant?.price ?? null
const hasPrice = listing.variants.some((v) => v.price !== null)
const hasInStock = listing.variants.some(
(v) => v.stockQuantity === null || v.stockQuantity > 0,
)
if (!hasPrice && !hasInStock) return null
return {
id: storeItemId,
title: listing.productTitle,
nameFa: listing.productNameFa,
image: listing.productImage,
price,
}
})
},
)
.filter((option): option is StoreItemSearchOption => option !== null)
.filter((option) => !existingSet.has(option.id))
setOptions(nextOptions)
@@ -133,7 +147,11 @@ export function PickStoreSpecialItemsModal({
return createPortal(
<div
className={`${modalStyles.overlay} ${closing ? modalStyles.overlayOut : modalStyles.overlayIn}`}
onClick={(e) => e.target === e.currentTarget && onClose()}
onClick={(e) => {
if (e.target !== e.currentTarget) return
if (selectOpen) return
onClose()
}}
role="presentation"
>
<div
@@ -175,6 +193,7 @@ export function PickStoreSpecialItemsModal({
onToggle={toggleSelection}
placeholder={t('website.specialItems.pickSearch')}
disabled={isSubmitting}
onOpenChange={setSelectOpen}
/>
)}