@mohasinac/appkit 2.8.3 → 2.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/layout/SidebarCollapseToggle.js +2 -0
- package/dist/_internal/shared/listing-types/action-tracker.js +0 -2
- package/dist/client.d.ts +2 -0
- package/dist/client.js +2 -0
- package/dist/core/hooks/useSiteSettings.d.ts +1 -1
- package/dist/core/unit-of-work.js +0 -1
- package/dist/features/account/components/NotificationBell.js +1 -0
- package/dist/features/account/components/UserOffersPanel.js +1 -0
- package/dist/features/account/components/UserSidebar.js +3 -1
- package/dist/features/account/hooks/useAccount.d.ts +2 -2
- package/dist/features/account/hooks/useAddressSelector.d.ts +1 -1
- package/dist/features/account/hooks/useAddresses.d.ts +2 -2
- package/dist/features/account/hooks/useNotifications.d.ts +1 -1
- package/dist/features/account/hooks/useProfile.d.ts +1 -1
- package/dist/features/account/hooks/usePublicProfile.d.ts +2 -2
- package/dist/features/admin/components/AdminAllEventEntriesView.js +5 -3
- package/dist/features/admin/components/AdminBidsView.js +6 -4
- package/dist/features/admin/components/AdminBlogView.js +6 -4
- package/dist/features/admin/components/AdminBrandsView.js +8 -6
- package/dist/features/admin/components/AdminBundlesView.js +10 -8
- package/dist/features/admin/components/AdminCarouselEditorView.js +3 -1
- package/dist/features/admin/components/AdminCartsView.js +6 -4
- package/dist/features/admin/components/AdminCategoriesView.js +7 -5
- package/dist/features/admin/components/AdminClassifiedView.js +4 -3
- package/dist/features/admin/components/AdminContactView.js +6 -4
- package/dist/features/admin/components/AdminCouponsView.js +6 -4
- package/dist/features/admin/components/AdminDigitalCodesView.js +4 -3
- package/dist/features/admin/components/AdminFaqsView.js +5 -3
- package/dist/features/admin/components/AdminFeaturesView.js +5 -4
- package/dist/features/admin/components/AdminGroupedListingsView.js +4 -3
- package/dist/features/admin/components/AdminHistoryView.js +4 -3
- package/dist/features/admin/components/AdminLiveView.js +4 -3
- package/dist/features/admin/components/AdminNewsletterView.js +5 -3
- package/dist/features/admin/components/AdminNotificationsView.js +6 -4
- package/dist/features/admin/components/AdminOrdersView.js +6 -4
- package/dist/features/admin/components/AdminPayoutsView.js +7 -5
- package/dist/features/admin/components/AdminPrizeDrawsView.js +6 -4
- package/dist/features/admin/components/AdminProductsView.js +7 -5
- package/dist/features/admin/components/AdminReturnRequestsView.js +4 -3
- package/dist/features/admin/components/AdminReviewsView.js +8 -6
- package/dist/features/admin/components/AdminScammersView.js +8 -6
- package/dist/features/admin/components/AdminSessionsView.js +6 -4
- package/dist/features/admin/components/AdminSidebar.js +3 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +3 -1
- package/dist/features/admin/components/AdminStoreAddressesView.js +2 -1
- package/dist/features/admin/components/AdminStoresView.js +6 -4
- package/dist/features/admin/components/AdminSublistingCategoriesView.js +6 -5
- package/dist/features/admin/components/AdminSupportTicketDetailView.js +0 -3
- package/dist/features/admin/components/AdminSupportTicketsView.js +8 -6
- package/dist/features/admin/components/AdminTeamView.js +6 -4
- package/dist/features/admin/components/AdminUsersView.js +6 -4
- package/dist/features/admin/components/AdminWishlistsView.js +4 -3
- package/dist/features/admin/components/DashboardStats.js +5 -1
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +3 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +5 -1
- package/dist/features/admin/constants/filter-tabs.d.ts +1 -1
- package/dist/features/admin/constants/filter-tabs.js +0 -11
- package/dist/features/admin/hooks/useAdmin.d.ts +1 -1
- package/dist/features/admin/hooks/useAdminSectionsListing.d.ts +1 -1
- package/dist/features/admin/hooks/useChat.d.ts +1 -1
- package/dist/features/admin/hooks/useChat.js +1 -0
- package/dist/features/admin/types/index.d.ts +1 -1
- package/dist/features/auctions/actions/bid-actions.js +4 -2
- package/dist/features/auctions/components/AuctionBidsTable.js +5 -1
- package/dist/features/auctions/components/AuctionsListView.js +7 -6
- package/dist/features/auctions/hooks/useAuctions.d.ts +8 -8
- package/dist/features/auth/hooks/useAuth.d.ts +2 -2
- package/dist/features/auth/hooks/useAuth.js +1 -0
- package/dist/features/blog/actions/blog-actions.js +3 -2
- package/dist/features/blog/components/BlogFeaturedCard.js +3 -1
- package/dist/features/blog/components/BlogListView.js +5 -1
- package/dist/features/blog/components/BlogPostView.js +3 -1
- package/dist/features/cart/components/CartDrawer.js +3 -1
- package/dist/features/cart/hooks/useCart.d.ts +1 -1
- package/dist/features/cart/hooks/useCartQuery.d.ts +1 -1
- package/dist/features/cart/hooks/useCheckoutReadQueries.d.ts +2 -2
- package/dist/features/cart/hooks/useOrder.d.ts +2 -2
- package/dist/features/categories/components/BrandDetailPageView.js +15 -9
- package/dist/features/categories/components/CategoriesIndexListing.js +1 -1
- package/dist/features/categories/components/CategoriesIndexPageView.js +5 -4
- package/dist/features/categories/components/CategoryBundlesListing.js +5 -4
- package/dist/features/categories/components/CategoryDetailPageView.js +15 -11
- package/dist/features/categories/components/CategoryFilters.d.ts +12 -12
- package/dist/features/categories/components/CategoryFilters.js +13 -12
- package/dist/features/categories/components/CategoryGrid.js +5 -1
- package/dist/features/categories/components/CategoryTableColumns.js +6 -2
- package/dist/features/categories/components/CategoryTree.d.ts +1 -1
- package/dist/features/categories/components/CategoryTree.js +4 -2
- package/dist/features/categories/components/ConcernCard.js +3 -1
- package/dist/features/categories/hooks/useCategories.d.ts +3 -3
- package/dist/features/categories/hooks/useCategorySelector.d.ts +3 -3
- package/dist/features/categories/hooks/useCategoryTree.d.ts +1 -1
- package/dist/features/categories/schemas/firestore.d.ts +2 -2
- package/dist/features/checkout/actions/checkout-actions.d.ts +1 -1
- package/dist/features/checkout/actions/checkout-actions.js +1 -1
- package/dist/features/checkout/hooks/useCheckoutApi.d.ts +2 -2
- package/dist/features/classified/components/ClassifiedListView.js +6 -5
- package/dist/features/collections/components/CollectionCard.js +3 -1
- package/dist/features/collections/hooks/useCollections.d.ts +2 -2
- package/dist/features/cron/jobs/auction-expiry.job.d.ts +2 -2
- package/dist/features/cron/jobs/auction-expiry.job.js +2 -1
- package/dist/features/cron/jobs/preorder-reminder.job.d.ts +1 -1
- package/dist/features/cron/jobs/preorder-reminder.job.js +2 -1
- package/dist/features/digital-codes/components/DigitalCodesListView.js +4 -3
- package/dist/features/events/actions/event-actions.js +6 -4
- package/dist/features/events/components/AdminEventEditorView.js +1 -1
- package/dist/features/events/components/AdminEventsView.js +7 -5
- package/dist/features/events/components/EventCard.js +3 -1
- package/dist/features/events/components/EventFilters.d.ts +4 -4
- package/dist/features/events/components/EventFilters.js +2 -2
- package/dist/features/events/components/EventRafflesSection.js +4 -2
- package/dist/features/events/hooks/useEvent.d.ts +3 -3
- package/dist/features/events/hooks/useEvents.d.ts +1 -1
- package/dist/features/faq/actions/faq-actions.js +4 -2
- package/dist/features/faq/components/FAQPageContent.js +2 -1
- package/dist/features/faq/hooks/useFAQs.d.ts +1 -1
- package/dist/features/faq/hooks/useFaqList.d.ts +15 -15
- package/dist/features/forms/Slider.js +3 -1
- package/dist/features/history/hooks/useHistory.js +1 -0
- package/dist/features/homepage/components/AdSlot.js +6 -2
- package/dist/features/homepage/components/AdvertisementBanner.js +3 -1
- package/dist/features/homepage/components/BeforeAfterCard.js +5 -1
- package/dist/features/homepage/components/CustomCardsSection.js +5 -1
- package/dist/features/homepage/components/HowItWorksSection.js +3 -1
- package/dist/features/homepage/components/MarketplaceHomepageView.js +4 -2
- package/dist/features/homepage/components/NewsletterBanner.js +6 -2
- package/dist/features/homepage/components/SecurityHighlightsSection.js +3 -1
- package/dist/features/homepage/components/StatsCounterSection.js +3 -1
- package/dist/features/homepage/components/TrustFeaturesSection.js +3 -1
- package/dist/features/homepage/hooks/useBlogArticles.d.ts +1 -1
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +1 -1
- package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +1 -1
- package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +1 -1
- package/dist/features/homepage/hooks/useFeaturedStores.d.ts +1 -1
- package/dist/features/homepage/hooks/useHeroCarousel.d.ts +1 -1
- package/dist/features/homepage/hooks/useHomepageEvents.d.ts +1 -1
- package/dist/features/homepage/hooks/useHomepageReviews.d.ts +1 -1
- package/dist/features/homepage/hooks/useHomepageSections.d.ts +1 -1
- package/dist/features/homepage/hooks/useTopBrands.d.ts +1 -1
- package/dist/features/homepage/hooks/useTopCategories.d.ts +1 -1
- package/dist/features/layout/AppLayoutShell.js +3 -1
- package/dist/features/layout/BottomActions.js +0 -27
- package/dist/features/layout/BottomActionsContext.d.ts +0 -36
- package/dist/features/layout/BottomActionsContext.js +1 -39
- package/dist/features/layout/BottomNavbar.js +1 -1
- package/dist/features/live/components/LiveItemsListView.js +6 -5
- package/dist/features/loyalty/hooks/useLoyaltyBalance.d.ts +1 -1
- package/dist/features/media/MediaLightbox.js +9 -3
- package/dist/features/media/modals/ImageEditor.js +6 -2
- package/dist/features/media/upload/MediaUploadField.js +1 -1
- package/dist/features/messages/hooks/useConversation.js +2 -0
- package/dist/features/messages/hooks/useConversations.js +1 -0
- package/dist/features/orders/components/OrdersList.js +3 -1
- package/dist/features/orders/hooks/useOrders.d.ts +2 -2
- package/dist/features/payments/hooks/usePayments.d.ts +1 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +1 -1
- package/dist/features/pre-orders/components/PreOrdersListView.js +5 -4
- package/dist/features/pre-orders/hooks/usePreOrders.d.ts +2 -2
- package/dist/features/products/actions/product-actions.js +17 -15
- package/dist/features/products/columns/index.d.ts +1 -1
- package/dist/features/products/columns/index.js +1 -1
- package/dist/features/products/components/CompareOverlay.js +5 -1
- package/dist/features/products/components/FeatureBadge.js +3 -1
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +1 -1
- package/dist/features/products/components/PrizeDrawCollage.js +0 -14
- package/dist/features/products/components/PrizeDrawsListingView.js +5 -4
- package/dist/features/products/components/PrizeDrawsSection.js +4 -2
- package/dist/features/products/components/ProductGrid.js +3 -1
- package/dist/features/products/constants/sieve.d.ts +2 -2
- package/dist/features/products/constants/sieve.js +2 -2
- package/dist/features/products/hooks/useProductDetail.d.ts +1 -1
- package/dist/features/products/hooks/useRelatedProducts.d.ts +1 -1
- package/dist/features/products/hooks/useRelatedProducts.js +5 -4
- package/dist/features/promotions/hooks/usePromotions.d.ts +2 -2
- package/dist/features/reviews/actions/review-actions.js +2 -1
- package/dist/features/reviews/components/ReviewDetailShell.js +8 -2
- package/dist/features/reviews/components/ReviewModal.js +5 -1
- package/dist/features/reviews/components/ReviewSummary.js +3 -1
- package/dist/features/reviews/components/ReviewsIndexPageView.js +7 -6
- package/dist/features/reviews/components/ReviewsList.js +5 -1
- package/dist/features/reviews/hooks/useReviews.d.ts +2 -2
- package/dist/features/scams/actions/scam-actions.js +3 -2
- package/dist/features/scams/components/ScamRegistryView.js +5 -4
- package/dist/features/search/actions/search-actions.js +7 -6
- package/dist/features/search/components/Search.js +3 -1
- package/dist/features/search/hooks/useSearch.d.ts +2 -2
- package/dist/features/seller/components/CouponInlineSelect.js +2 -1
- package/dist/features/seller/components/PhysicalLocationModal.js +1 -1
- package/dist/features/seller/components/SellerAddressesView.js +2 -1
- package/dist/features/seller/components/SellerAuctionsView.js +7 -5
- package/dist/features/seller/components/SellerBidsView.js +8 -4
- package/dist/features/seller/components/SellerBundlesView.js +7 -6
- package/dist/features/seller/components/SellerClassifiedView.js +6 -5
- package/dist/features/seller/components/SellerCouponEditorView.js +3 -1
- package/dist/features/seller/components/SellerCouponsView.js +6 -4
- package/dist/features/seller/components/SellerDigitalCodesView.js +5 -4
- package/dist/features/seller/components/SellerGroupedListingsView.js +5 -4
- package/dist/features/seller/components/SellerLiveView.js +6 -5
- package/dist/features/seller/components/SellerOffersPanel.js +1 -0
- package/dist/features/seller/components/SellerOffersView.js +6 -4
- package/dist/features/seller/components/SellerOrdersView.js +5 -3
- package/dist/features/seller/components/SellerPayoutMethodsView.js +4 -2
- package/dist/features/seller/components/SellerPayoutsView.js +6 -4
- package/dist/features/seller/components/SellerPreOrdersView.js +6 -4
- package/dist/features/seller/components/SellerPrizeDrawsView.js +6 -4
- package/dist/features/seller/components/SellerProductsView.js +14 -8
- package/dist/features/seller/components/SellerReviewsView.js +1 -0
- package/dist/features/seller/components/SellerShippingConfigsView.js +4 -2
- package/dist/features/seller/components/SellerSidebar.js +12 -4
- package/dist/features/seller/components/SellerStoreCategoriesView.js +5 -3
- package/dist/features/seller/components/SellerTemplatesView.js +5 -3
- package/dist/features/seller/components/SublistingInlineSelect.js +2 -1
- package/dist/features/seller/hooks/useSellerPayouts.d.ts +3 -3
- package/dist/features/seller/hooks/useSellerStore.d.ts +6 -6
- package/dist/features/seller/hooks/useSellerStorefront.d.ts +2 -2
- package/dist/features/shell/FormShell.js +10 -2
- package/dist/features/shell/QuickFormDrawer.js +5 -2
- package/dist/features/stores/actions/store-query-actions.js +3 -2
- package/dist/features/stores/components/StoreAuctionsPageView.js +4 -2
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -1
- package/dist/features/stores/components/StoreDetailLayoutView.js +7 -6
- package/dist/features/stores/components/StoreHeader.js +5 -1
- package/dist/features/stores/components/StorePreOrdersPageView.js +4 -2
- package/dist/features/stores/components/StorePrizeDrawsPageView.js +4 -2
- package/dist/features/stores/components/StoreProductsPageView.js +2 -1
- package/dist/features/stores/components/StoreProductsView.js +5 -4
- package/dist/features/stores/components/StoresIndexListing.js +4 -3
- package/dist/features/stores/hooks/useStoreAddressSelector.d.ts +1 -1
- package/dist/features/stores/hooks/useStores.d.ts +6 -6
- package/dist/features/wishlist/components/WishlistPage.js +3 -1
- package/dist/features/wishlist/components/WishlistView.js +4 -3
- package/dist/features/wishlist/hooks/useUserWishlist.d.ts +15 -15
- package/dist/features/wishlist/hooks/useWishlist.d.ts +1 -1
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/providers/db-firebase/admin.js +0 -1
- package/dist/ui/DataTable.js +6 -2
- package/dist/ui/components/AvatarDisplay.js +3 -1
- package/dist/ui/components/BackgroundRenderer.js +4 -2
- package/dist/ui/components/Card.js +6 -2
- package/dist/ui/components/ImageGallery.js +3 -1
- package/dist/ui/components/ImageLightbox.js +3 -1
- package/dist/ui/components/PasswordStrengthIndicator.js +3 -1
- package/dist/ui/components/Progress.js +6 -2
- package/dist/ui/components/RowActionMenu.js +3 -1
- package/dist/ui/components/SiteLogo.js +7 -1
- package/dist/ui/components/Skeleton.js +3 -1
- package/dist/ui/components/Slider.js +3 -1
- package/dist/ui/components/TabStrip.js +3 -1
- package/package.json +1 -1
|
@@ -12,7 +12,9 @@ const __O = {
|
|
|
12
12
|
};
|
|
13
13
|
const CLS_REMOVE_BTN = "self-start text-zinc-400 dark:text-zinc-400 transition hover:text-red-500";
|
|
14
14
|
export function CartItemRow({ item, onQtyChange, onRemove, href, isOutOfStock = false }) {
|
|
15
|
-
return (_jsxs(Div, { surface: "card", padding: "sm", className: `flex gap-4 transition-opacity ${isOutOfStock ? "opacity-60" : ""}`, children: [_jsx(Div, { className: `h-20 w-20 flex-shrink-0 ${__O.hidden} rounded-lg bg-neutral-100 dark:bg-slate-800`, children: item.meta.image && (_jsx(Div, { role: "img", "aria-label": item.meta.title, className: "h-full w-full bg-center bg-cover",
|
|
15
|
+
return (_jsxs(Div, { surface: "card", padding: "sm", className: `flex gap-4 transition-opacity ${isOutOfStock ? "opacity-60" : ""}`, children: [_jsx(Div, { className: `h-20 w-20 flex-shrink-0 ${__O.hidden} rounded-lg bg-neutral-100 dark:bg-slate-800`, children: item.meta.image && (_jsx(Div, { role: "img", "aria-label": item.meta.title, className: "h-full w-full bg-center bg-cover",
|
|
16
|
+
// audit-inline-style-ok: dynamic image URL
|
|
17
|
+
style: { backgroundImage: `url(${item.meta.image})` } })) }), _jsxs(Div, { className: "flex flex-1 flex-col justify-between", children: [_jsxs(Div, { className: "flex items-start gap-1.5", children: [href ? (_jsx("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: `font-medium text-neutral-900 dark:text-zinc-100 hover:underline underline-offset-2 ${THEME_CONSTANTS.utilities.textClamp2}`, children: item.meta.title })) : (_jsx(Text, { className: `font-medium text-neutral-900 dark:text-zinc-100 ${THEME_CONSTANTS.utilities.textClamp2}`, children: item.meta.title })), isOutOfStock && (_jsx(Span, { weight: "semibold", className: "flex-shrink-0 rounded bg-error-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-error", children: "Out of Stock" }))] }), item.meta.attributes &&
|
|
16
18
|
Object.keys(item.meta.attributes).length > 0 && (_jsx(Text, { className: "text-xs text-neutral-500 dark:text-zinc-400", children: Object.entries(item.meta.attributes)
|
|
17
19
|
.map(([k, v]) => `${k}: ${v}`)
|
|
18
20
|
.join(", ") })), _jsxs(Row, { justify: "between", children: [_jsx(Text, { className: "font-semibold text-neutral-900 dark:text-zinc-100", children: formatCurrency(item.meta.price * item.quantity, item.meta.currency) }), onQtyChange && !isOutOfStock && (_jsxs(Row, { className: "gap-2", children: [_jsx(Button, { onClick: () => onQtyChange(item.id, item.quantity - 1), disabled: item.quantity <= 1, variant: "outline", size: "sm", className: "flex h-7 w-7 items-center justify-center rounded-full border border-neutral-200 dark:border-slate-600 text-sm disabled:opacity-40", children: "\u2212" }), _jsx(Span, { size: "sm", className: "min-w-[1.5rem] text-center", children: item.quantity }), _jsx(Button, { onClick: () => onQtyChange(item.id, item.quantity + 1), variant: "outline", size: "sm", className: "flex h-7 w-7 items-center justify-center rounded-full border border-neutral-200 dark:border-slate-600 text-sm", children: "+" })] })), isOutOfStock && (_jsxs(Span, { size: "xs", className: "text-zinc-400 dark:text-zinc-400", children: ["Qty: ", item.quantity] }))] })] }), onRemove && (_jsx(Button, { onClick: () => onRemove(item.id), variant: "ghost", size: "sm", "aria-label": ACTIONS.CART["remove-item"].ariaLabel, className: CLS_REMOVE_BTN, children: "\u2715" }))] }));
|
|
@@ -12,6 +12,6 @@ export declare function useCart(userIdOrSession: string, opts?: UseCartOptions):
|
|
|
12
12
|
itemCount: number;
|
|
13
13
|
isLoading: boolean;
|
|
14
14
|
error: Error | null;
|
|
15
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<
|
|
15
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<CartData, Error>>;
|
|
16
16
|
};
|
|
17
17
|
export {};
|
|
@@ -4,5 +4,5 @@ interface UseCartQueryOptions<TData> {
|
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
initialData?: TData;
|
|
6
6
|
}
|
|
7
|
-
export declare function useCartQuery<TData = unknown>(options: UseCartQueryOptions<TData>): import("@tanstack/react-query").UseQueryResult<NoInfer<TData>, Error>;
|
|
7
|
+
export declare function useCartQuery<TData = unknown>(options: UseCartQueryOptions<TData>): import("@tanstack/react-query").UseQueryResult<import("@tanstack/query-core").NoInfer<TData>, Error>;
|
|
8
8
|
export {};
|
|
@@ -8,7 +8,7 @@ interface UseCheckoutReadQueriesOptions<TAddress, TCart> {
|
|
|
8
8
|
initialCart?: TCart;
|
|
9
9
|
}
|
|
10
10
|
export declare function useCheckoutReadQueries<TAddress = unknown, TCart = unknown>(options: UseCheckoutReadQueriesOptions<TAddress, TCart>): {
|
|
11
|
-
addressQuery: import("@tanstack/react-query").UseQueryResult<
|
|
12
|
-
cartQuery: import("@tanstack/react-query").UseQueryResult<NoInfer<TCart>, Error>;
|
|
11
|
+
addressQuery: import("@tanstack/react-query").UseQueryResult<TAddress[], Error>;
|
|
12
|
+
cartQuery: import("@tanstack/react-query").UseQueryResult<import("@tanstack/query-core").NoInfer<TCart>, Error>;
|
|
13
13
|
};
|
|
14
14
|
export {};
|
|
@@ -5,9 +5,9 @@ interface UseOrderOptions<TOrder> {
|
|
|
5
5
|
initialData?: TOrder | null;
|
|
6
6
|
}
|
|
7
7
|
export declare function useOrder<TOrder = unknown>(orderId: string | null, options?: UseOrderOptions<TOrder>): {
|
|
8
|
-
order: NonNullable<NoInfer<TOrder | null>> | null;
|
|
8
|
+
order: NonNullable<import("@tanstack/query-core").NoInfer<TOrder | null>> | null;
|
|
9
9
|
isLoading: boolean;
|
|
10
10
|
error: Error | null;
|
|
11
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<NoInfer<TOrder | null>, Error>>;
|
|
11
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").NoInfer<TOrder | null>, Error>>;
|
|
12
12
|
};
|
|
13
13
|
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { sieveFilter, sieveAnd, SIEVE_OP } from "@mohasinac/appkit";
|
|
3
|
+
import { sortBy } from "@mohasinac/appkit";
|
|
2
4
|
import Link from "next/link";
|
|
3
5
|
import { categoriesRepository, productRepository, } from "../../../repositories";
|
|
4
6
|
import { ROUTES } from "../../../next";
|
|
@@ -16,8 +18,8 @@ export async function BrandDetailPageView({ slug, initialBrand }) {
|
|
|
16
18
|
brandName
|
|
17
19
|
? productRepository
|
|
18
20
|
.list({
|
|
19
|
-
filters:
|
|
20
|
-
sorts: "
|
|
21
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), sieveFilter("brand", SIEVE_OP.EQ, brandName), sieveFilter("listingType", SIEVE_OP.EQ, "standard")),
|
|
22
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
21
23
|
page: 1,
|
|
22
24
|
pageSize: 24,
|
|
23
25
|
})
|
|
@@ -26,8 +28,8 @@ export async function BrandDetailPageView({ slug, initialBrand }) {
|
|
|
26
28
|
brandName
|
|
27
29
|
? productRepository
|
|
28
30
|
.list({
|
|
29
|
-
filters:
|
|
30
|
-
sorts: "auctionEndDate",
|
|
31
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), sieveFilter("brand", SIEVE_OP.EQ, brandName), sieveFilter("listingType", SIEVE_OP.EQ, "auction")),
|
|
32
|
+
sorts: sortBy("auctionEndDate", "ASC"),
|
|
31
33
|
page: 1,
|
|
32
34
|
pageSize: 1,
|
|
33
35
|
})
|
|
@@ -36,8 +38,8 @@ export async function BrandDetailPageView({ slug, initialBrand }) {
|
|
|
36
38
|
brandName
|
|
37
39
|
? productRepository
|
|
38
40
|
.list({
|
|
39
|
-
filters:
|
|
40
|
-
sorts: "
|
|
41
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), sieveFilter("brand", SIEVE_OP.EQ, brandName), sieveFilter("listingType", SIEVE_OP.EQ, "pre-order")),
|
|
42
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
41
43
|
page: 1,
|
|
42
44
|
pageSize: 1,
|
|
43
45
|
})
|
|
@@ -46,8 +48,8 @@ export async function BrandDetailPageView({ slug, initialBrand }) {
|
|
|
46
48
|
brandName
|
|
47
49
|
? productRepository
|
|
48
50
|
.list({
|
|
49
|
-
filters:
|
|
50
|
-
sorts: "
|
|
51
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), sieveFilter("brand", SIEVE_OP.EQ, brandName), sieveFilter("listingType", SIEVE_OP.EQ, "prize-draw")),
|
|
52
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
51
53
|
page: 1,
|
|
52
54
|
pageSize: 1,
|
|
53
55
|
})
|
|
@@ -84,5 +86,9 @@ export async function BrandDetailPageView({ slug, initialBrand }) {
|
|
|
84
86
|
counts.preOrders +
|
|
85
87
|
counts.prizeDraws +
|
|
86
88
|
counts.bundles;
|
|
87
|
-
return (_jsxs(Main, { children: [_jsxs(Section, { className: `relative ${__O.hidden} ${hasCover ? "min-h-[220px] md:min-h-[280px]" : "bg-zinc-50 dark:bg-zinc-900"}`, children: [hasCover && (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute inset-0 bg-center bg-cover",
|
|
89
|
+
return (_jsxs(Main, { children: [_jsxs(Section, { className: `relative ${__O.hidden} ${hasCover ? "min-h-[220px] md:min-h-[280px]" : "bg-zinc-50 dark:bg-zinc-900"}`, children: [hasCover && (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute inset-0 bg-center bg-cover",
|
|
90
|
+
// audit-inline-style-ok: dynamic image URL
|
|
91
|
+
style: { backgroundImage: `url(${coverImage})` } }), _jsx(Div, { className: "absolute inset-0 bg-black/55" })] })), !hasCover && (_jsx("div", { className: "absolute inset-0 opacity-10",
|
|
92
|
+
// audit-inline-style-ok: runtime theme color
|
|
93
|
+
style: { backgroundColor: brandColor } })), _jsxs(Div, { className: `relative z-10 max-w-7xl mx-auto px-4 ${hasCover ? "py-12" : "py-8"}`, children: [_jsxs(Nav, { className: "flex items-center gap-1.5 text-sm mb-4", "aria-label": "Breadcrumb", children: [_jsx(Link, { href: String(ROUTES.HOME), className: hasCover ? "text-white/70 hover:text-white transition-colors" : "text-zinc-500 dark:text-zinc-400 hover:text-primary-600 transition-colors", children: "Home" }), _jsx(Span, { className: hasCover ? "text-white/40" : "text-zinc-400", children: "/" }), _jsx(Link, { href: String(ROUTES.PUBLIC.BRANDS ?? "/brands"), className: hasCover ? "text-white/70 hover:text-white transition-colors" : "text-zinc-500 dark:text-zinc-400 hover:text-primary-600 transition-colors", children: "Brands" }), _jsx(Span, { className: hasCover ? "text-white/40" : "text-zinc-400", children: "/" }), _jsx(Span, { weight: "medium", className: hasCover ? "text-white" : "text-zinc-900 dark:text-zinc-100", children: brand?.name ?? slug })] }), _jsxs(Div, { className: "flex items-center gap-4 mb-3", children: [brand?.display?.icon && (_jsx(Span, { className: "text-5xl leading-none", children: brand.display.icon })), _jsxs(_Fragment, { children: [_jsx(Heading, { level: 1, className: `text-3xl md:text-4xl font-bold ${hasCover ? "text-white" : "text-zinc-900 dark:text-zinc-50"}`, children: brand?.name ?? slug }), brand?.description && typeof brand.description === "string" && !brand.description.startsWith("{") && (_jsx(Text, { className: `text-base max-w-2xl mt-1 ${hasCover ? "text-white/80" : "text-zinc-600 dark:text-zinc-400"}`, children: brand.description }))] })] }), _jsxs(Div, { className: "flex flex-wrap gap-2 mt-3", children: [counts.products > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-primary/10 text-primary-700 dark:text-primary-400"}`, children: [counts.products.toLocaleString(), " ", counts.products === 1 ? "product" : "products"] })), counts.auctions > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400"}`, children: [counts.auctions.toLocaleString(), " ", counts.auctions === 1 ? "auction" : "auctions"] })), counts.preOrders > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-400"}`, children: [counts.preOrders.toLocaleString(), " ", counts.preOrders === 1 ? "pre-order" : "pre-orders"] })), totalItems === 0 && (_jsx(Span, { size: "sm", className: hasCover ? "text-white/60" : "text-zinc-400", children: "No items listed yet" }))] })] })] }), _jsx(Section, { className: "py-6", children: _jsx(Container, { size: "xl", children: brandName ? (_jsx(BrandDetailTabs, { brandName: brandName, initialProductsData: productsResult ?? undefined, initialBundles: brandBundles, counts: counts })) : (_jsx(Text, { className: "py-12 text-center text-sm text-zinc-500 dark:text-zinc-400", children: "Brand not found." })) }) })] }));
|
|
88
94
|
}
|
|
@@ -43,7 +43,7 @@ const FILTER_KEYS = [TABLE_KEYS.IS_FEATURED, "isBrand", "rootOnly", "tier", "min
|
|
|
43
43
|
const SORT_OPTIONS = [
|
|
44
44
|
{ value: sortBy(CATEGORY_FIELDS.NAME, "ASC"), label: "Name A–Z" },
|
|
45
45
|
{ value: sortBy(CATEGORY_FIELDS.NAME), label: "Name Z–A" },
|
|
46
|
-
{ value: "
|
|
46
|
+
{ value: sortBy("productCount", "DESC"), label: "Most Products" },
|
|
47
47
|
];
|
|
48
48
|
export function CategoriesIndexListing({ initialData: _, brandsOnly = false }) {
|
|
49
49
|
const table = useUrlTable({ defaults: { pageSize: String(PAGE_SIZE), sort: DEFAULT_SORT } });
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { sieveFilter, SIEVE_OP } from "@mohasinac/appkit";
|
|
2
3
|
import { categoriesRepository } from "../../../repositories";
|
|
3
4
|
import { Container, Heading, Main, Section } from "../../../ui";
|
|
4
5
|
import { AdSlot } from "../../homepage/components/AdSlot";
|
|
@@ -21,16 +22,16 @@ function buildCategoryFilters(params) {
|
|
|
21
22
|
const minItemCount = sp(params, "minItemCount");
|
|
22
23
|
const maxItemCount = sp(params, "maxItemCount");
|
|
23
24
|
if (minItemCount)
|
|
24
|
-
parts.push(
|
|
25
|
+
parts.push(sieveFilter("metrics.totalItemCount", SIEVE_OP.GTE, minItemCount));
|
|
25
26
|
if (maxItemCount)
|
|
26
|
-
parts.push(
|
|
27
|
+
parts.push(sieveFilter("metrics.totalItemCount", SIEVE_OP.LTE, maxItemCount));
|
|
27
28
|
const tier = sp(params, "tier");
|
|
28
29
|
if (tier) {
|
|
29
30
|
const values = tier.split("|").filter(Boolean);
|
|
30
31
|
if (values.length === 1)
|
|
31
|
-
parts.push(
|
|
32
|
+
parts.push(sieveFilter("tier", SIEVE_OP.EQ, values[0]));
|
|
32
33
|
else if (values.length > 1)
|
|
33
|
-
parts.push(
|
|
34
|
+
parts.push(sieveFilter("tier", SIEVE_OP.EQ, values.join("|")));
|
|
34
35
|
}
|
|
35
36
|
return parts.join(",");
|
|
36
37
|
}
|
|
@@ -8,6 +8,7 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
|
8
8
|
* All data is server-fetched; this component owns URL-state driven
|
|
9
9
|
* sort/search/filter/pagination on top of the initial snapshot.
|
|
10
10
|
*/
|
|
11
|
+
import { sortBy } from "@mohasinac/appkit";
|
|
11
12
|
import { useMemo, useCallback, useState } from "react";
|
|
12
13
|
import { Div, Span, Text } from "../../../ui";
|
|
13
14
|
import { ListingToolbar, Pagination, FilterDrawer } from "../../../ui";
|
|
@@ -21,10 +22,10 @@ const __P = {
|
|
|
21
22
|
const PAGE_SIZE = 12;
|
|
22
23
|
const FILTER_KEYS = ["showOutOfStock"];
|
|
23
24
|
const SORT_OPTIONS = [
|
|
24
|
-
{ value: "
|
|
25
|
-
{ value: "createdAt", label: "Oldest First" },
|
|
26
|
-
{ value: "price", label: "Price: Low to High" },
|
|
27
|
-
{ value: "
|
|
25
|
+
{ value: sortBy("createdAt", "DESC"), label: "Newest First" },
|
|
26
|
+
{ value: sortBy("createdAt", "ASC"), label: "Oldest First" },
|
|
27
|
+
{ value: sortBy("price", "ASC"), label: "Price: Low to High" },
|
|
28
|
+
{ value: sortBy("price", "DESC"), label: "Price: High to Low" },
|
|
28
29
|
];
|
|
29
30
|
const DEFAULT_SORT = "-createdAt";
|
|
30
31
|
export function CategoryBundlesListing({ initialBundles, brandName, onBuyNow, }) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { sieveAnd, sieveFilter, SIEVE_OP } from "@mohasinac/appkit";
|
|
3
|
+
import { sortBy } from "@mohasinac/appkit";
|
|
2
4
|
import Link from "next/link";
|
|
3
5
|
import { categoriesRepository, productRepository, storeRepository, } from "../../../repositories";
|
|
4
6
|
import { ROUTES } from "../../../next";
|
|
@@ -14,13 +16,13 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
14
16
|
.catch(() => undefined);
|
|
15
17
|
// Use categorySlugs@=<id> (array-contains) — products store category FK in
|
|
16
18
|
// the categorySlugs[] array, not the legacy `category` string field.
|
|
17
|
-
const catFilter = category?.id ?
|
|
19
|
+
const catFilter = category?.id ? sieveFilter("categorySlugs", SIEVE_OP.CONTAINS, category.id) : null;
|
|
18
20
|
const [productsResult, auctionsCountResult, preOrdersCountResult, prizeDrawsCountResult, bundlesResult, childCategories] = await Promise.all([
|
|
19
21
|
catFilter
|
|
20
22
|
? productRepository
|
|
21
23
|
.list({
|
|
22
|
-
filters:
|
|
23
|
-
sorts: "
|
|
24
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), catFilter, sieveFilter("listingType", SIEVE_OP.EQ, "standard")),
|
|
25
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
24
26
|
page: 1,
|
|
25
27
|
pageSize: 24,
|
|
26
28
|
})
|
|
@@ -29,8 +31,8 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
29
31
|
catFilter
|
|
30
32
|
? productRepository
|
|
31
33
|
.list({
|
|
32
|
-
filters:
|
|
33
|
-
sorts: "auctionEndDate",
|
|
34
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), catFilter, sieveFilter("listingType", SIEVE_OP.EQ, "auction")),
|
|
35
|
+
sorts: sortBy("auctionEndDate", "ASC"),
|
|
34
36
|
page: 1,
|
|
35
37
|
pageSize: 1,
|
|
36
38
|
})
|
|
@@ -39,8 +41,8 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
39
41
|
catFilter
|
|
40
42
|
? productRepository
|
|
41
43
|
.list({
|
|
42
|
-
filters:
|
|
43
|
-
sorts: "
|
|
44
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), catFilter, sieveFilter("listingType", SIEVE_OP.EQ, "pre-order")),
|
|
45
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
44
46
|
page: 1,
|
|
45
47
|
pageSize: 1,
|
|
46
48
|
})
|
|
@@ -49,8 +51,8 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
49
51
|
catFilter
|
|
50
52
|
? productRepository
|
|
51
53
|
.list({
|
|
52
|
-
filters:
|
|
53
|
-
sorts: "
|
|
54
|
+
filters: sieveAnd(sieveFilter("status", SIEVE_OP.EQ, "published"), catFilter, sieveFilter("listingType", SIEVE_OP.EQ, "prize-draw")),
|
|
55
|
+
sorts: sortBy("createdAt", "DESC"),
|
|
54
56
|
page: 1,
|
|
55
57
|
pageSize: 1,
|
|
56
58
|
})
|
|
@@ -73,7 +75,7 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
73
75
|
...childCategories.map((c) => c.slug).filter(Boolean),
|
|
74
76
|
];
|
|
75
77
|
const storeResults = await Promise.all(storeCategorySlugs.map((catSlug) => storeRepository
|
|
76
|
-
.listStores({ filters:
|
|
78
|
+
.listStores({ filters: sieveFilter("storeCategory", SIEVE_OP.EQ, catSlug), page: 1, pageSize: 50 }, true)
|
|
77
79
|
.catch(() => null)));
|
|
78
80
|
const seen = new Set();
|
|
79
81
|
const categoryStores = storeResults
|
|
@@ -110,7 +112,9 @@ export async function CategoryDetailPageView({ slug }) {
|
|
|
110
112
|
const totalCount = productCount + auctionCount + preOrderCount + prizeDrawCount + bundleCount + storeCount;
|
|
111
113
|
const coverImage = category?.display?.coverImage;
|
|
112
114
|
const hasCover = Boolean(coverImage);
|
|
113
|
-
return (_jsxs(Main, { children: [_jsxs(Section, { className: `relative ${__O.hidden} ${hasCover ? "min-h-[220px] md:min-h-[280px]" : "bg-zinc-50 dark:bg-zinc-900"}`, children: [hasCover && (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute inset-0 bg-center bg-cover",
|
|
115
|
+
return (_jsxs(Main, { children: [_jsxs(Section, { className: `relative ${__O.hidden} ${hasCover ? "min-h-[220px] md:min-h-[280px]" : "bg-zinc-50 dark:bg-zinc-900"}`, children: [hasCover && (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute inset-0 bg-center bg-cover",
|
|
116
|
+
// audit-inline-style-ok: dynamic image URL
|
|
117
|
+
style: { backgroundImage: `url(${coverImage})` } }), _jsx(Div, { className: "absolute inset-0 bg-black/55" })] })), _jsxs(Div, { className: `relative z-10 max-w-7xl mx-auto px-4 ${hasCover ? "py-12" : "py-8"}`, children: [_jsxs(Nav, { className: "flex items-center gap-1.5 text-sm mb-4", "aria-label": "Breadcrumb", children: [_jsx(Link, { href: String(ROUTES.HOME), className: hasCover ? "text-white/70 hover:text-white transition-colors" : "text-zinc-500 dark:text-zinc-400 hover:text-primary-600 transition-colors", children: "Home" }), _jsx(Span, { className: hasCover ? "text-white/40" : "text-zinc-400", children: "/" }), _jsx(Link, { href: String(ROUTES.PUBLIC.CATEGORIES), className: hasCover ? "text-white/70 hover:text-white transition-colors" : "text-zinc-500 dark:text-zinc-400 hover:text-primary-600 transition-colors", children: "Categories" }), _jsx(Span, { className: hasCover ? "text-white/40" : "text-zinc-400", children: "/" }), _jsx(Span, { weight: "medium", className: hasCover ? "text-white" : "text-zinc-900 dark:text-zinc-100", children: category?.name ?? slug })] }), _jsx(Heading, { level: 1, className: `text-3xl md:text-4xl font-bold mb-2 ${hasCover ? "text-white" : "text-zinc-900 dark:text-zinc-50"}`, children: category?.name ?? slug }), category?.description && typeof category.description === "string" && !category.description.startsWith("{") && (_jsx(Text, { className: `text-base max-w-2xl mb-4 ${hasCover ? "text-white/80" : "text-zinc-600 dark:text-zinc-400"}`, children: category.description })), _jsxs(Div, { className: "flex flex-wrap gap-2", children: [productCount > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-primary/10 text-primary-700 dark:text-primary-400"}`, children: [productCount.toLocaleString(), " ", productCount === 1 ? "product" : "products"] })), auctionCount > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400"}`, children: [auctionCount.toLocaleString(), " ", auctionCount === 1 ? "auction" : "auctions"] })), preOrderCount > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-400"}`, children: [preOrderCount.toLocaleString(), " ", preOrderCount === 1 ? "pre-order" : "pre-orders"] })), storeCount > 0 && (_jsxs(Span, { size: "xs", weight: "medium", className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full ${hasCover ? "bg-white/20 text-white backdrop-blur-sm" : "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400"}`, children: [storeCount.toLocaleString(), " ", storeCount === 1 ? "store" : "stores"] }))] })] })] }), childCategories.length > 0 && (_jsx(Section, { surface: "default", className: "border-b border-zinc-100 dark:border-zinc-800", children: _jsxs(Div, { className: "max-w-7xl mx-auto px-4 py-3", children: ["// audit-inline-style-ok: dynamic CSS", _jsx(Div, { className: `flex gap-2.5 ${__O.xAuto} pb-1`, style: { scrollbarWidth: "none" }, children: childCategories.map((child) => (_jsxs(Link, { href: String(ROUTES.PUBLIC.CATEGORY_DETAIL(child.slug)), className: "flex-shrink-0 flex items-center gap-1.5 rounded-full border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-800 px-4 py-1.5 text-sm font-medium text-zinc-700 dark:text-zinc-200 hover:border-primary hover:text-primary transition-colors whitespace-nowrap", children: [child.display?.icon && (_jsx(Span, { className: "leading-none", children: child.display.icon })), child.name, (child.metrics?.productCount ?? 0) > 0 && (_jsx(Span, { size: "xs", className: "text-zinc-400 dark:text-zinc-400", children: (child.metrics?.productCount ?? 0).toLocaleString() }))] }, child.id))) })] }) })), _jsx(Section, { className: "py-6", children: _jsx(Container, { size: "xl", children: _jsx(CategoryDetailTabs, { categorySlug: slug, categoryId: category?.id, initialProductsData: productsResult ?? undefined, initialBundles: bundlesResult ?? [], initialStores: categoryStores, counts: {
|
|
114
118
|
products: productCount,
|
|
115
119
|
auctions: auctionCount,
|
|
116
120
|
preOrders: preOrderCount,
|
|
@@ -9,51 +9,51 @@ export declare const CATEGORY_ADMIN_SORT_OPTIONS: readonly [{
|
|
|
9
9
|
readonly value: "order";
|
|
10
10
|
readonly label: "Order Asc";
|
|
11
11
|
}, {
|
|
12
|
-
readonly value:
|
|
12
|
+
readonly value: string;
|
|
13
13
|
readonly label: "Order Desc";
|
|
14
14
|
}, {
|
|
15
|
-
readonly value:
|
|
15
|
+
readonly value: string;
|
|
16
16
|
readonly label: "Name A-Z";
|
|
17
17
|
}, {
|
|
18
|
-
readonly value:
|
|
18
|
+
readonly value: string;
|
|
19
19
|
readonly label: "Name Z-A";
|
|
20
20
|
}, {
|
|
21
21
|
readonly value: "tier";
|
|
22
22
|
readonly label: "Tier Low to High";
|
|
23
23
|
}, {
|
|
24
|
-
readonly value:
|
|
24
|
+
readonly value: string;
|
|
25
25
|
readonly label: "Tier High to Low";
|
|
26
26
|
}, {
|
|
27
|
-
readonly value:
|
|
27
|
+
readonly value: string;
|
|
28
28
|
readonly label: "Most Items";
|
|
29
29
|
}, {
|
|
30
|
-
readonly value:
|
|
30
|
+
readonly value: string;
|
|
31
31
|
readonly label: "Newest First";
|
|
32
32
|
}];
|
|
33
33
|
export declare const CATEGORY_SELLER_SORT_OPTIONS: readonly [{
|
|
34
34
|
readonly value: "order";
|
|
35
35
|
readonly label: "Order Asc";
|
|
36
36
|
}, {
|
|
37
|
-
readonly value:
|
|
37
|
+
readonly value: string;
|
|
38
38
|
readonly label: "Name A-Z";
|
|
39
39
|
}, {
|
|
40
|
-
readonly value:
|
|
40
|
+
readonly value: string;
|
|
41
41
|
readonly label: "Name Z-A";
|
|
42
42
|
}, {
|
|
43
|
-
readonly value:
|
|
43
|
+
readonly value: string;
|
|
44
44
|
readonly label: "Most Items";
|
|
45
45
|
}];
|
|
46
46
|
export declare const CATEGORY_PUBLIC_SORT_OPTIONS: readonly [{
|
|
47
47
|
readonly value: "order";
|
|
48
48
|
readonly label: "Recommended";
|
|
49
49
|
}, {
|
|
50
|
-
readonly value:
|
|
50
|
+
readonly value: string;
|
|
51
51
|
readonly label: "Name A-Z";
|
|
52
52
|
}, {
|
|
53
|
-
readonly value:
|
|
53
|
+
readonly value: string;
|
|
54
54
|
readonly label: "Name Z-A";
|
|
55
55
|
}, {
|
|
56
|
-
readonly value:
|
|
56
|
+
readonly value: string;
|
|
57
57
|
readonly label: "Most Items";
|
|
58
58
|
}];
|
|
59
59
|
export declare function getCategoryFilterKeys(variant: CategoryFilterVariant): readonly string[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { sortBy } from "@mohasinac/appkit";
|
|
3
4
|
import { useTranslations } from "next-intl";
|
|
4
5
|
import { FilterFacetSection } from "../../filters/FilterFacetSection";
|
|
5
6
|
import { RangeFilter } from "../../filters/RangeFilter";
|
|
@@ -19,25 +20,25 @@ export const CATEGORY_FILTER_KEYS = {
|
|
|
19
20
|
};
|
|
20
21
|
export const CATEGORY_ADMIN_SORT_OPTIONS = [
|
|
21
22
|
{ value: "order", label: "Order Asc" },
|
|
22
|
-
{ value: "
|
|
23
|
-
{ value: "name", label: "Name A-Z" },
|
|
24
|
-
{ value: "
|
|
23
|
+
{ value: sortBy("order", "DESC"), label: "Order Desc" },
|
|
24
|
+
{ value: sortBy("name", "ASC"), label: "Name A-Z" },
|
|
25
|
+
{ value: sortBy("name", "DESC"), label: "Name Z-A" },
|
|
25
26
|
{ value: "tier", label: "Tier Low to High" },
|
|
26
|
-
{ value: "
|
|
27
|
-
{ value: "
|
|
28
|
-
{ value: "
|
|
27
|
+
{ value: sortBy("tier", "DESC"), label: "Tier High to Low" },
|
|
28
|
+
{ value: sortBy("metrics.totalItemCount", "DESC"), label: "Most Items" },
|
|
29
|
+
{ value: sortBy("createdAt", "DESC"), label: "Newest First" },
|
|
29
30
|
];
|
|
30
31
|
export const CATEGORY_SELLER_SORT_OPTIONS = [
|
|
31
32
|
{ value: "order", label: "Order Asc" },
|
|
32
|
-
{ value: "name", label: "Name A-Z" },
|
|
33
|
-
{ value: "
|
|
34
|
-
{ value: "
|
|
33
|
+
{ value: sortBy("name", "ASC"), label: "Name A-Z" },
|
|
34
|
+
{ value: sortBy("name", "DESC"), label: "Name Z-A" },
|
|
35
|
+
{ value: sortBy("metrics.totalItemCount", "DESC"), label: "Most Items" },
|
|
35
36
|
];
|
|
36
37
|
export const CATEGORY_PUBLIC_SORT_OPTIONS = [
|
|
37
38
|
{ value: "order", label: "Recommended" },
|
|
38
|
-
{ value: "name", label: "Name A-Z" },
|
|
39
|
-
{ value: "
|
|
40
|
-
{ value: "
|
|
39
|
+
{ value: sortBy("name", "ASC"), label: "Name A-Z" },
|
|
40
|
+
{ value: sortBy("name", "DESC"), label: "Name Z-A" },
|
|
41
|
+
{ value: sortBy("metrics.totalItemCount", "DESC"), label: "Most Items" },
|
|
41
42
|
];
|
|
42
43
|
export function getCategoryFilterKeys(variant) {
|
|
43
44
|
return CATEGORY_FILTER_KEYS[variant];
|
|
@@ -12,7 +12,11 @@ const __O = {
|
|
|
12
12
|
const CLS_FEATURED_DOT = "absolute left-2 top-2 rounded-full bg-amber-400 p-1 leading-none";
|
|
13
13
|
export function CategoryCard({ category, href, onClick, className = "", }) {
|
|
14
14
|
const productCount = category.metrics?.productCount ?? category.productCount ?? 0;
|
|
15
|
-
const inner = (_jsxs(Div, { className: "flex h-full flex-col", children: [_jsxs(Div, { className: `relative aspect-[4/3] w-full ${__O.hidden} bg-gradient-to-br from-neutral-100 to-neutral-200 dark:from-zinc-800 dark:to-zinc-700 flex-shrink-0`, children: [category.display?.coverImage ? (_jsx(Div, { role: "img", "aria-label": category.name, className: "h-full w-full bg-center bg-cover transition-transform duration-300 group-hover:scale-105",
|
|
15
|
+
const inner = (_jsxs(Div, { className: "flex h-full flex-col", children: [_jsxs(Div, { className: `relative aspect-[4/3] w-full ${__O.hidden} bg-gradient-to-br from-neutral-100 to-neutral-200 dark:from-zinc-800 dark:to-zinc-700 flex-shrink-0`, children: [category.display?.coverImage ? (_jsx(Div, { role: "img", "aria-label": category.name, className: "h-full w-full bg-center bg-cover transition-transform duration-300 group-hover:scale-105",
|
|
16
|
+
// audit-inline-style-ok: dynamic image URL
|
|
17
|
+
style: { backgroundImage: `url(${category.display.coverImage})` } })) : category.display?.color ? (_jsx(Div, { className: "h-full w-full opacity-80",
|
|
18
|
+
// audit-inline-style-ok: runtime theme color
|
|
19
|
+
style: { backgroundColor: category.display.color } })) : null, category.display?.icon && (_jsx(Div, { className: "absolute inset-0 flex items-center justify-center text-4xl", children: category.display.icon })), category.isFeatured && (_jsx(Span, { size: "xs", className: CLS_FEATURED_DOT, children: "\u2605" }))] }), _jsxs(Div, { className: `flex flex-1 flex-col ${__P.p3}.5`, children: [_jsx(Text, { className: `font-semibold text-sm leading-snug ${THEME_CONSTANTS.utilities.textClamp2} text-neutral-900 dark:text-white`, children: category.name }), category.description && (_jsx(Text, { className: `mt-1 text-xs ${THEME_CONSTANTS.utilities.textClamp2} text-neutral-500 dark:text-zinc-400 flex-1`, children: category.description })), _jsxs(Div, { className: "mt-2 flex items-center justify-between gap-2", children: [_jsxs(Text, { className: "text-xs text-zinc-400 dark:text-zinc-400", children: [productCount.toLocaleString(), " ", productCount === 1 ? "item" : "items"] }), _jsxs(Span, { size: "xs", weight: "medium", className: "inline-flex items-center gap-1 rounded-md border border-zinc-200 dark:border-zinc-700 px-2.5 py-1 text-zinc-600 dark:text-zinc-300 group-hover:bg-primary group-hover:border-primary group-hover:text-white transition-colors", children: ["Browse ", _jsx(ArrowRight, { className: "h-3 w-3" })] })] })] })] }));
|
|
16
20
|
const cardClass = `group relative flex flex-col overflow-hidden rounded-xl border border-neutral-200 bg-white dark:border-zinc-700 dark:bg-zinc-900 shadow-sm transition hover:shadow-md h-full ${className}`;
|
|
17
21
|
if (href) {
|
|
18
22
|
return (_jsx(Link, { href: href, className: cardClass, children: inner }));
|
|
@@ -22,13 +22,17 @@ export function getCategoryTableColumns(onEdit, onDelete, labels = {}) {
|
|
|
22
22
|
{
|
|
23
23
|
key: "image",
|
|
24
24
|
header: "",
|
|
25
|
-
render: (cat) => (_jsx(Div, { className: `relative w-9 h-9 rounded ${__O.hidden} flex-shrink-0`, children: cat.display?.coverImage ? (_jsx(MediaImage, { src: cat.display.coverImage, alt: "", size: "thumbnail", className: "w-full h-full object-cover" })) : (_jsx(Div, { className: "w-full h-full flex items-center justify-center text-base",
|
|
25
|
+
render: (cat) => (_jsx(Div, { className: `relative w-9 h-9 rounded ${__O.hidden} flex-shrink-0`, children: cat.display?.coverImage ? (_jsx(MediaImage, { src: cat.display.coverImage, alt: "", size: "thumbnail", className: "w-full h-full object-cover" })) : (_jsx(Div, { className: "w-full h-full flex items-center justify-center text-base",
|
|
26
|
+
// audit-inline-style-ok: runtime theme color
|
|
27
|
+
style: { backgroundColor: cat.display?.color ?? "#94a3b8", color: "#fff" }, children: cat.display?.icon ?? "🗂️" })) })),
|
|
26
28
|
},
|
|
27
29
|
{
|
|
28
30
|
key: "name",
|
|
29
31
|
header: L.colName,
|
|
30
32
|
sortable: true,
|
|
31
|
-
render: (cat) => (
|
|
33
|
+
render: (cat) => (
|
|
34
|
+
// audit-inline-style-ok: computed pixel offset
|
|
35
|
+
_jsxs(Div, { style: { paddingLeft: `${cat.tier * 20}px` }, children: [cat.name, cat.tier > 0 && (_jsxs(Span, { size: "xs", className: "text-zinc-400 dark:text-zinc-400 ml-2", children: ["(Tier ", cat.tier, ")"] }))] })),
|
|
32
36
|
},
|
|
33
37
|
{
|
|
34
38
|
key: "slug",
|
|
@@ -10,6 +10,6 @@ export interface CategoryTreeProps {
|
|
|
10
10
|
* CategoryTree — hierarchical expandable navigation for categories.
|
|
11
11
|
*
|
|
12
12
|
* Builds a tree from a flat list by grouping on `rootId` and `parentIds`.
|
|
13
|
-
* Root-level nodes have
|
|
13
|
+
* Root-level nodes have sieveFilter("tier", SIEVE_OP.EQ, "= 0") or no `parentIds`.
|
|
14
14
|
*/
|
|
15
15
|
export declare function CategoryTree({ categories, activeId, onSelect, className, }: CategoryTreeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -19,13 +19,15 @@ function CategoryTreeNode({ item, children = [], activeId, onSelect, depth = 0,
|
|
|
19
19
|
setExpanded((p) => !p);
|
|
20
20
|
onSelect?.(item);
|
|
21
21
|
}, className: `flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-sm transition select-none
|
|
22
|
-
${isActive ? "bg-primary-50 font-semibold text-primary-700 dark:bg-primary-900/30 dark:text-primary-400" : "text-neutral-700 hover:bg-neutral-50 dark:text-zinc-300 dark:hover:bg-zinc-800"}`,
|
|
22
|
+
${isActive ? "bg-primary-50 font-semibold text-primary-700 dark:bg-primary-900/30 dark:text-primary-400" : "text-neutral-700 hover:bg-neutral-50 dark:text-zinc-300 dark:hover:bg-zinc-800"}`,
|
|
23
|
+
// audit-inline-style-ok: computed pixel offset
|
|
24
|
+
style: { paddingLeft: `${8 + indent}px` }, children: [hasChildren && (_jsx(Span, { size: "xs", "aria-hidden": "true", className: `text-zinc-400 dark:text-zinc-400 transition-transform duration-150 ${expanded ? "rotate-90" : ""}`, children: "\u25B6" })), !hasChildren && _jsx(Span, { className: "w-3" }), item.display?.icon && (_jsx(Span, { size: "base", "aria-hidden": "true", className: "flex-shrink-0", children: item.display.icon })), _jsx(Text, { className: "flex-1 truncate", children: item.name }), item.metrics && (_jsx(Span, { size: "xs", className: "ml-auto flex-shrink-0 text-zinc-400 dark:text-zinc-400 tabular-nums", children: item.metrics.productCount }))] }), hasChildren && expanded && (_jsx(Div, { role: "group", children: children.map((child) => (_jsx(CategoryTreeNode, { item: child, activeId: activeId, onSelect: onSelect, depth: depth + 1 }, child.id))) }))] }));
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* CategoryTree — hierarchical expandable navigation for categories.
|
|
26
28
|
*
|
|
27
29
|
* Builds a tree from a flat list by grouping on `rootId` and `parentIds`.
|
|
28
|
-
* Root-level nodes have
|
|
30
|
+
* Root-level nodes have sieveFilter("tier", SIEVE_OP.EQ, "= 0") or no `parentIds`.
|
|
29
31
|
*/
|
|
30
32
|
export function CategoryTree({ categories, activeId, onSelect, className = "", }) {
|
|
31
33
|
// Group children by parent
|
|
@@ -2,5 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Button, Div, Heading, Text } from "../../../ui";
|
|
3
3
|
import { THEME_CONSTANTS } from "../../../tokens";
|
|
4
4
|
export function ConcernCard({ concern, onClick, className = "", }) {
|
|
5
|
-
return (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onClick?.(concern), className: `group flex flex-col items-center gap-3 rounded-xl border border-neutral-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-4 text-center shadow-sm transition hover:border-primary dark:hover:border-primary-400 hover:shadow-md ${className}`, children: [concern.display?.coverImage && (_jsx(Div, { role: "img", "aria-label": concern.name, className: "h-16 w-16 rounded-full bg-center bg-cover",
|
|
5
|
+
return (_jsxs(Button, { type: "button", variant: "outline", onClick: () => onClick?.(concern), className: `group flex flex-col items-center gap-3 rounded-xl border border-neutral-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-4 text-center shadow-sm transition hover:border-primary dark:hover:border-primary-400 hover:shadow-md ${className}`, children: [concern.display?.coverImage && (_jsx(Div, { role: "img", "aria-label": concern.name, className: "h-16 w-16 rounded-full bg-center bg-cover",
|
|
6
|
+
// audit-inline-style-ok: dynamic image URL
|
|
7
|
+
style: { backgroundImage: `url(${concern.display.coverImage})` } })), _jsxs(Div, { children: [_jsx(Heading, { level: 3, className: "text-sm font-semibold text-neutral-900 dark:text-zinc-100 group-hover:text-primary dark:group-hover:text-primary-400", children: concern.name }), concern.description && (_jsx(Text, { className: `mt-1 text-xs ${THEME_CONSTANTS.utilities.textClamp2} text-neutral-500 dark:text-zinc-400`, children: concern.description }))] })] }));
|
|
6
8
|
}
|
|
@@ -4,7 +4,7 @@ interface UseCategoriesListOptions {
|
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
}
|
|
6
6
|
export declare function useCategoriesList(opts?: UseCategoriesListOptions): {
|
|
7
|
-
categories:
|
|
7
|
+
categories: CategoryItem[];
|
|
8
8
|
total: number;
|
|
9
9
|
isLoading: boolean;
|
|
10
10
|
error: Error | null;
|
|
@@ -37,8 +37,8 @@ interface UseCategoryDetailOptions {
|
|
|
37
37
|
childrenEndpoint?: string;
|
|
38
38
|
}
|
|
39
39
|
export declare function useCategoryDetail(slug: string, opts?: UseCategoryDetailOptions): {
|
|
40
|
-
category:
|
|
41
|
-
children:
|
|
40
|
+
category: CategoryItem | null;
|
|
41
|
+
children: CategoryItem[];
|
|
42
42
|
isLoading: boolean;
|
|
43
43
|
childrenLoading: boolean;
|
|
44
44
|
error: Error | null;
|
|
@@ -8,16 +8,16 @@ export interface UseCategorySelectorOptions {
|
|
|
8
8
|
export declare function useCategorySelector(options?: UseCategorySelectorOptions): {
|
|
9
9
|
categories: CategoryItem[];
|
|
10
10
|
isLoading: boolean;
|
|
11
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<
|
|
11
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<CategoryItem[], Error>>;
|
|
12
12
|
createCategory: import("@tanstack/react-query").UseMutateFunction<CategoryItem, Error, Record<string, unknown>, unknown>;
|
|
13
13
|
isCreating: boolean;
|
|
14
14
|
};
|
|
15
15
|
export declare function useCategories(options?: {
|
|
16
16
|
endpoint?: string;
|
|
17
17
|
}): {
|
|
18
|
-
categories:
|
|
18
|
+
categories: CategoryItem[];
|
|
19
19
|
isLoading: boolean;
|
|
20
|
-
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<
|
|
20
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<CategoryItem[], Error>>;
|
|
21
21
|
};
|
|
22
22
|
export declare function useCreateCategory(options?: {
|
|
23
23
|
endpoint?: string;
|
|
@@ -7,7 +7,7 @@ import type { CategoryItem } from "../types";
|
|
|
7
7
|
export declare function useCategoryTree(opts?: {
|
|
8
8
|
enabled?: boolean;
|
|
9
9
|
}): {
|
|
10
|
-
categories:
|
|
10
|
+
categories: CategoryItem[];
|
|
11
11
|
isLoading: boolean;
|
|
12
12
|
};
|
|
13
13
|
/** Convert category tree to FacetOption[] with indentation prefix for tier > 0. */
|
|
@@ -36,7 +36,7 @@ export type BundleQueryRule = {
|
|
|
36
36
|
/**
|
|
37
37
|
* Per-member metadata stored alongside `bundleProductIds`.
|
|
38
38
|
* `drawCount` — only meaningful when the member product has
|
|
39
|
-
*
|
|
39
|
+
* sieveFilter("listingType", SIEVE_OP.EQ, "= "prize-draw""). Represents how many draw entries
|
|
40
40
|
* the buyer receives for that product when they purchase the bundle
|
|
41
41
|
* (e.g. drawCount=5 means 5 raffle entries, not 5 copies of the draw).
|
|
42
42
|
*/
|
|
@@ -195,7 +195,7 @@ export declare const categoryQueryHelpers: {
|
|
|
195
195
|
/** @deprecated Use byCategoryType("brand"). */
|
|
196
196
|
readonly brands: () => readonly ["isBrand", "==", true];
|
|
197
197
|
/** SB-UNI B + C + D — discriminator-based listing. */
|
|
198
|
-
readonly byCategoryType: (type: import("../types").CategoryType) => readonly ["categoryType", "==", import("
|
|
198
|
+
readonly byCategoryType: (type: import("../types").CategoryType) => readonly ["categoryType", "==", import("@mohasinac/appkit").CategoryType];
|
|
199
199
|
readonly sublistings: () => readonly ["categoryType", "==", "sublisting"];
|
|
200
200
|
readonly brandPages: () => readonly ["categoryType", "==", "brand"];
|
|
201
201
|
readonly active: () => readonly ["isActive", "==", true];
|
|
@@ -25,7 +25,7 @@ export declare function grantCheckoutConsentViaSms(userId: string, userPhone: st
|
|
|
25
25
|
* `verifiedVia: "admin_bypass"` marker prevents bypass-credit grants.
|
|
26
26
|
*
|
|
27
27
|
* Security: callers MUST verify the requesting user is an admin AND that
|
|
28
|
-
*
|
|
28
|
+
* sieveFilter("siteSettings.featureFlags.adminCheckoutBypass", SIEVE_OP.EQ, "= true") before calling this.
|
|
29
29
|
*/
|
|
30
30
|
export declare function grantAdminCheckoutBypass(userId: string, addressId: string, bypassingAdminUid: string): Promise<void>;
|
|
31
31
|
export { userRepository };
|
|
@@ -103,7 +103,7 @@ export async function grantCheckoutConsentViaSms(userId, userPhone, addressId) {
|
|
|
103
103
|
* `verifiedVia: "admin_bypass"` marker prevents bypass-credit grants.
|
|
104
104
|
*
|
|
105
105
|
* Security: callers MUST verify the requesting user is an admin AND that
|
|
106
|
-
*
|
|
106
|
+
* sieveFilter("siteSettings.featureFlags.adminCheckoutBypass", SIEVE_OP.EQ, "= true") before calling this.
|
|
107
107
|
*/
|
|
108
108
|
export async function grantAdminCheckoutBypass(userId, addressId, bypassingAdminUid) {
|
|
109
109
|
const address = await findUserAddress(userId, addressId);
|
|
@@ -62,8 +62,8 @@ interface UseCheckoutOptions<TAddress = any, TCart = any> {
|
|
|
62
62
|
initialCart?: CartApiResponse<TCart>;
|
|
63
63
|
}
|
|
64
64
|
export declare function useCheckout<TAddress = any, TCart = any>(options?: UseCheckoutOptions<TAddress, TCart>): {
|
|
65
|
-
addressQuery: import("@tanstack/react-query").UseQueryResult<
|
|
66
|
-
cartQuery: import("@tanstack/react-query").UseQueryResult<
|
|
65
|
+
addressQuery: import("@tanstack/react-query").UseQueryResult<TAddress[], Error>;
|
|
66
|
+
cartQuery: import("@tanstack/react-query").UseQueryResult<CartApiResponse<TCart>, Error>;
|
|
67
67
|
preflightMutation: import("@tanstack/react-query").UseMutationResult<PreflightResponse, Error, string, unknown>;
|
|
68
68
|
placeCodOrderMutation: import("@tanstack/react-query").UseMutationResult<PlaceOrderResponse, Error, PlaceOrderPayload, unknown>;
|
|
69
69
|
createPaymentOrderMutation: import("@tanstack/react-query").UseMutationResult<CreatePaymentOrderResponse, Error, CreatePaymentOrderPayload, unknown>;
|