@mohasinac/appkit 4.13.1 → 4.14.0
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/DashboardLayoutClient.js +14 -5
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +3 -0
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +6 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.d.ts +8 -0
- package/dist/_internal/client/features/lottery/LotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/LotteryListView.d.ts +7 -0
- package/dist/_internal/client/features/lottery/LotteryListView.js +1 -1
- package/dist/_internal/client/features/lottery/PrizeDrawLotteryDetailView.js +4 -1
- package/dist/_internal/client/features/lottery/slot-collage-items.d.ts +15 -0
- package/dist/_internal/client/features/lottery/slot-collage-items.js +13 -0
- package/dist/_internal/server/features/auctions/actions.js +6 -0
- package/dist/_internal/server/features/bundles/data.d.ts +16 -0
- package/dist/_internal/server/features/bundles/data.js +26 -0
- package/dist/_internal/server/features/bundles/index.d.ts +1 -1
- package/dist/_internal/server/features/bundles/index.js +1 -1
- package/dist/_internal/server/features/checkout/actions.js +6 -0
- package/dist/_internal/server/features/checkout/locked-lines.d.ts +38 -0
- package/dist/_internal/server/features/checkout/locked-lines.js +171 -0
- package/dist/_internal/server/features/homepage/index.d.ts +0 -1
- package/dist/_internal/server/features/homepage/index.js +7 -1
- package/dist/_internal/server/features/lottery/adapters.js +4 -0
- package/dist/_internal/server/features/products/data.js +15 -37
- package/dist/_internal/server/features/products/index.d.ts +1 -1
- package/dist/_internal/server/features/products/index.js +1 -1
- package/dist/_internal/server/features/products/list-public.d.ts +46 -20
- package/dist/_internal/server/features/products/list-public.js +266 -90
- package/dist/_internal/server/features/products/listing-tab-counts.d.ts +44 -0
- package/dist/_internal/server/features/products/listing-tab-counts.js +97 -0
- package/dist/_internal/server/features/site-settings/adapters.d.ts +51 -0
- package/dist/_internal/server/features/site-settings/adapters.js +75 -0
- package/dist/_internal/server/features/site-settings/index.d.ts +1 -0
- package/dist/_internal/server/features/site-settings/index.js +1 -0
- package/dist/_internal/server/features/stores/adapters.d.ts +56 -0
- package/dist/_internal/server/features/stores/adapters.js +91 -0
- package/dist/_internal/server/features/stores/index.d.ts +1 -0
- package/dist/_internal/server/features/stores/index.js +1 -0
- package/dist/_internal/server/jobs/core/auctionSettlement.js +56 -2
- package/dist/_internal/server/jobs/core/offerExpiry.js +45 -9
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.d.ts +5 -0
- package/dist/_internal/server/jobs/core/paymentReviewAutoApprove.js +33 -1
- package/dist/_internal/server/jobs/handlers/messages.d.ts +7 -0
- package/dist/_internal/server/jobs/handlers/messages.js +10 -0
- package/dist/_internal/shared/actions/action-registry.js +15 -1
- package/dist/_internal/shared/checkout/lanes.d.ts +25 -0
- package/dist/_internal/shared/checkout/lanes.js +26 -0
- package/dist/_internal/shared/features/auctions/config.d.ts +27 -0
- package/dist/_internal/shared/features/auctions/config.js +27 -0
- package/dist/_internal/shared/features/blog/schema.d.ts +2 -2
- package/dist/_internal/shared/features/cart/schema.d.ts +12 -12
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +32 -32
- package/dist/_internal/shared/features/emi/schedule.d.ts +24 -3
- package/dist/_internal/shared/features/emi/schedule.js +20 -5
- package/dist/_internal/shared/features/events/schema.d.ts +2 -2
- package/dist/_internal/shared/features/homepage/section-gate.d.ts +14 -0
- package/dist/_internal/shared/features/homepage/section-gate.js +51 -0
- package/dist/_internal/shared/features/offers/config.d.ts +30 -0
- package/dist/_internal/shared/features/offers/config.js +59 -0
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/schema.d.ts +32 -32
- package/dist/_internal/shared/features/products/to-product-item.js +6 -0
- package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
- package/dist/_internal/shared/features/site-settings/fees.d.ts +60 -0
- package/dist/_internal/shared/features/site-settings/fees.js +39 -0
- package/dist/_internal/shared/features/site-settings/types.d.ts +40 -0
- package/dist/_internal/shared/features/site-settings/types.js +1 -0
- package/dist/_internal/shared/history/history.d.ts +66 -0
- package/dist/_internal/shared/history/history.js +158 -0
- package/dist/_internal/shared/history/index.d.ts +4 -0
- package/dist/_internal/shared/history/index.js +2 -0
- package/dist/_internal/shared/history/types.d.ts +61 -0
- package/dist/_internal/shared/history/types.js +6 -0
- package/dist/_internal/shared/listing-types/_registry.d.ts +54 -1
- package/dist/_internal/shared/listing-types/_registry.js +67 -0
- package/dist/_internal/shared/listing-types/art/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/art/config.js +5 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +13 -0
- package/dist/_internal/shared/listing-types/auction/config.js +21 -0
- package/dist/_internal/shared/listing-types/availability.d.ts +79 -0
- package/dist/_internal/shared/listing-types/availability.js +104 -0
- package/dist/_internal/shared/listing-types/capabilities.d.ts +15 -0
- package/dist/_internal/shared/listing-types/capabilities.js +12 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/classified/config.js +5 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +22 -2
- package/dist/_internal/shared/listing-types/live/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/live/config.js +5 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +19 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +11 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +15 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/standard/config.js +5 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +3 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +5 -0
- package/dist/client.d.ts +7 -5
- package/dist/client.js +2 -2
- package/dist/constants/api-endpoints.d.ts +6 -0
- package/dist/constants/api-endpoints.js +2 -0
- package/dist/constants/field-names.d.ts +49 -2
- package/dist/constants/field-names.js +53 -2
- package/dist/constants/table-keys.d.ts +17 -0
- package/dist/constants/table-keys.js +17 -0
- package/dist/errors/error-codes.d.ts +13 -1
- package/dist/errors/error-codes.js +13 -1
- package/dist/errors/error-display-map.js +12 -3
- package/dist/errors/messages.d.ts +10 -2
- package/dist/errors/messages.js +10 -2
- package/dist/features/about/components/AboutView.d.ts +3 -0
- package/dist/features/about/components/AboutView.js +3 -2
- package/dist/features/about/components/PolicyPageView.d.ts +2 -1
- package/dist/features/about/components/PolicyPageView.js +61 -23
- package/dist/features/about/components/PublicProfileView.js +5 -0
- package/dist/features/about/schemas/firestore.d.ts +3 -0
- package/dist/features/account/components/UserOrdersView.js +7 -0
- package/dist/features/account/components/index.d.ts +0 -2
- package/dist/features/account/components/index.js +0 -1
- package/dist/features/account/schemas/index.d.ts +2 -2
- package/dist/features/account/types/index.d.ts +21 -2
- package/dist/features/addresses/schemas/index.d.ts +4 -4
- package/dist/features/admin/components/AdminArtView.js +8 -3
- package/dist/features/admin/components/AdminClassifiedView.js +8 -3
- package/dist/features/admin/components/AdminDigitalCodesView.js +8 -3
- package/dist/features/admin/components/AdminFeatureFlagsView.js +1 -0
- package/dist/features/admin/components/AdminLiveView.js +8 -3
- package/dist/features/admin/components/AdminOffersView.d.ts +4 -0
- package/dist/features/admin/components/AdminOffersView.js +186 -0
- package/dist/features/admin/components/AdminOrdersView.js +10 -1
- package/dist/features/admin/components/AdminPrizeDrawsView.js +5 -0
- package/dist/features/admin/components/AdminProductsView.js +16 -29
- package/dist/features/admin/components/AdminSiteSettingsView.js +31 -13
- package/dist/features/admin/components/AdminSiteView.js +6 -2
- package/dist/features/admin/components/AdminStickersView.js +8 -3
- package/dist/features/admin/components/index.d.ts +2 -0
- package/dist/features/admin/components/index.js +1 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +86 -0
- package/dist/features/admin/constants/filter-tabs.js +55 -0
- package/dist/features/admin/schemas/firestore.d.ts +122 -3
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/auctions/actions/bid-actions.d.ts +20 -5
- package/dist/features/auctions/actions/bid-actions.js +93 -20
- package/dist/features/auctions/components/AuctionDetailPageView.js +11 -6
- package/dist/features/auctions/components/AuctionsListView.js +5 -6
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +7 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +19 -2
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +1 -2
- package/dist/features/auctions/components/PlaceBidFormClient.js +8 -4
- package/dist/features/auctions/repository/bid.repository.d.ts +13 -0
- package/dist/features/auctions/repository/bid.repository.js +23 -0
- package/dist/features/auctions/schemas/firestore.d.ts +17 -0
- package/dist/features/auctions/schemas/index.d.ts +12 -12
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +10 -1
- package/dist/features/blog/actions/blog-actions.d.ts +7 -7
- package/dist/features/blog/schemas/index.d.ts +6 -6
- package/dist/features/cart/repository/cart.repository.js +1 -0
- package/dist/features/cart/schemas/firestore.d.ts +15 -0
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/categories/components/BrandDetailPageView.js +23 -40
- package/dist/features/categories/components/BrandDetailTabs.d.ts +7 -7
- package/dist/features/categories/components/BrandDetailTabs.js +8 -12
- package/dist/features/categories/components/BundleCollage.js +1 -1
- package/dist/features/categories/components/CategoryDetailPageView.js +53 -57
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +10 -8
- package/dist/features/categories/components/CategoryDetailTabs.js +11 -16
- package/dist/features/categories/components/CategoryProductsListing.js +11 -1
- package/dist/features/categories/components/ConcernCard.js +7 -1
- package/dist/features/categories/schemas/firestore.d.ts +13 -0
- package/dist/features/categories/schemas/index.d.ts +26 -26
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +16 -1
- package/dist/features/classified/components/ClassifiedDetailPageView.js +23 -3
- package/dist/features/events/components/AdminEventsView.js +15 -11
- package/dist/features/events/components/EventFilters.d.ts +9 -1
- package/dist/features/events/components/EventFilters.js +45 -21
- package/dist/features/events/components/EventsIndexListing.d.ts +6 -1
- package/dist/features/events/components/EventsIndexListing.js +2 -2
- package/dist/features/events/components/EventsListPageView.js +13 -4
- package/dist/features/events/repository/events.repository.d.ts +17 -0
- package/dist/features/events/repository/events.repository.js +27 -0
- package/dist/features/events/schemas/firestore.d.ts +12 -0
- package/dist/features/events/schemas/firestore.js +12 -0
- package/dist/features/events/schemas/index.d.ts +50 -50
- package/dist/features/events/types/index.d.ts +11 -0
- package/dist/features/events/types/index.js +57 -1
- package/dist/features/faq/actions/faq-actions.d.ts +12 -12
- package/dist/features/faq/schemas/index.d.ts +8 -8
- package/dist/features/filters/FilterFacetSection.d.ts +7 -1
- package/dist/features/filters/FilterFacetSection.js +11 -3
- package/dist/features/grouped/schemas/index.d.ts +4 -4
- package/dist/features/homepage/components/AnnouncementBar.d.ts +7 -1
- package/dist/features/homepage/components/AnnouncementBar.js +3 -3
- package/dist/features/homepage/components/MarketplaceHomepageView.js +20 -6
- package/dist/features/homepage/hooks/homepage-query.d.ts +16 -0
- package/dist/features/homepage/hooks/homepage-query.js +45 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +10 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +28 -8
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +17 -8
- package/dist/features/homepage/hooks/useFeaturedProducts.js +15 -8
- package/dist/features/homepage/schemas/index.d.ts +2 -2
- package/dist/features/layout/AppLayoutShell.d.ts +11 -1
- package/dist/features/layout/AppLayoutShell.js +15 -14
- package/dist/features/layout/BackToTop.d.ts +9 -0
- package/dist/features/layout/BackToTop.js +10 -1
- package/dist/features/layout/BottomActions.js +28 -25
- package/dist/features/layout/BottomChrome.d.ts +34 -0
- package/dist/features/layout/BottomChrome.js +55 -0
- package/dist/features/layout/BottomNavLayout.d.ts +6 -0
- package/dist/features/layout/BottomNavLayout.js +7 -1
- package/dist/features/layout/BottomNavbar.js +15 -2
- package/dist/features/layout/FooterLayout.js +11 -1
- package/dist/features/layout/NavbarLayout.js +1 -1
- package/dist/features/layout/TitleBarLayout.d.ts +7 -0
- package/dist/features/layout/TitleBarLayout.js +28 -5
- package/dist/features/layout/index.d.ts +2 -0
- package/dist/features/layout/index.js +1 -0
- package/dist/features/lottery/types/index.d.ts +3 -0
- package/dist/features/media/MediaPickerModal.js +5 -1
- package/dist/features/messages/schemas/index.d.ts +2 -2
- package/dist/features/orders/components/OrderScopeTabs.d.ts +20 -0
- package/dist/features/orders/components/OrderScopeTabs.js +31 -0
- package/dist/features/orders/constants/order-scope.d.ts +48 -0
- package/dist/features/orders/constants/order-scope.js +111 -0
- package/dist/features/orders/repository/orders.repository.d.ts +54 -7
- package/dist/features/orders/repository/orders.repository.js +116 -22
- package/dist/features/orders/schemas/firestore.d.ts +117 -0
- package/dist/features/orders/schemas/firestore.js +30 -0
- package/dist/features/orders/schemas/index.d.ts +18 -18
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +14 -9
- package/dist/features/pre-orders/components/PreOrdersListView.js +6 -5
- package/dist/features/pre-orders/schemas/index.d.ts +1 -1
- package/dist/features/products/actions/product-actions.d.ts +14 -0
- package/dist/features/products/actions/product-actions.js +49 -11
- package/dist/features/products/api/route.d.ts +12 -0
- package/dist/features/products/api/route.js +42 -100
- package/dist/features/products/components/ArtStickersListView.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.js +13 -11
- package/dist/features/products/components/AvailabilityTabs.d.ts +11 -0
- package/dist/features/products/components/AvailabilityTabs.js +47 -0
- package/dist/features/products/components/MakeOfferButton.js +48 -49
- package/dist/features/products/components/PrizeDrawCollage.d.ts +20 -4
- package/dist/features/products/components/PrizeDrawCollage.js +9 -1
- package/dist/features/products/components/PrizeDrawsIndexListing.js +14 -12
- package/dist/features/products/components/PrizeDrawsListingView.js +2 -2
- package/dist/features/products/components/PrizeDrawsSection.d.ts +7 -1
- package/dist/features/products/components/PrizeDrawsSection.js +23 -18
- package/dist/features/products/components/ProductDetailPageView.d.ts +4 -1
- package/dist/features/products/components/ProductDetailPageView.js +18 -4
- package/dist/features/products/components/ProductForm.js +5 -2
- package/dist/features/products/components/ProductGrid.js +6 -1
- package/dist/features/products/components/ProductsIndexListing.js +22 -32
- package/dist/features/products/components/ProductsIndexPageView.js +6 -9
- package/dist/features/products/components/index.d.ts +2 -2
- package/dist/features/products/components/index.js +1 -1
- package/dist/features/products/config/listing-type-listing-config.d.ts +20 -0
- package/dist/features/products/config/listing-type-listing-config.js +22 -10
- package/dist/features/products/constants/action-defs.d.ts +2 -0
- package/dist/features/products/constants/action-defs.js +6 -0
- package/dist/features/products/hooks/useAvailabilityScope.d.ts +13 -0
- package/dist/features/products/hooks/useAvailabilityScope.js +19 -0
- package/dist/features/products/hooks/useProducts.d.ts +5 -0
- package/dist/features/products/hooks/useProducts.js +13 -2
- package/dist/features/products/repository/products.repository.d.ts +31 -2
- package/dist/features/products/repository/products.repository.js +53 -21
- package/dist/features/products/schemas/firestore.d.ts +17 -3
- package/dist/features/products/schemas/firestore.js +7 -2
- package/dist/features/products/schemas/index.d.ts +66 -66
- package/dist/features/products/schemas/product-features.validators.d.ts +6 -6
- package/dist/features/products/types/index.d.ts +16 -1
- package/dist/features/promotions/schemas/index.d.ts +2 -2
- package/dist/features/reviews/schemas/index.d.ts +16 -16
- package/dist/features/search/schemas/index.d.ts +4 -4
- package/dist/features/seller/actions/offer-actions.js +25 -2
- package/dist/features/seller/components/SellerArtView.js +5 -0
- package/dist/features/seller/components/SellerAuctionsView.js +13 -15
- package/dist/features/seller/components/SellerClassifiedView.js +5 -0
- package/dist/features/seller/components/SellerDigitalCodesView.js +5 -0
- package/dist/features/seller/components/SellerLiveView.js +5 -0
- package/dist/features/seller/components/SellerOrdersView.js +31 -9
- package/dist/features/seller/components/SellerPayoutSettingsView.js +19 -18
- package/dist/features/seller/components/SellerPreOrdersView.js +5 -0
- package/dist/features/seller/components/SellerPrizeDrawsView.js +14 -16
- package/dist/features/seller/components/SellerProductShell.js +7 -1
- package/dist/features/seller/components/SellerProductsView.js +11 -8
- package/dist/features/seller/components/SellerStickersView.js +5 -0
- package/dist/features/seller/components/index.d.ts +0 -2
- package/dist/features/seller/components/index.js +0 -1
- package/dist/features/seller/repository/offer.repository.d.ts +73 -16
- package/dist/features/seller/repository/offer.repository.js +38 -3
- package/dist/features/seller/schemas/index.d.ts +2 -2
- package/dist/features/seller/schemas/offer-forms.d.ts +25 -0
- package/dist/features/seller/schemas/offer-forms.js +21 -0
- package/dist/features/seller/server.d.ts +0 -1
- package/dist/features/seller/server.js +0 -1
- package/dist/features/shell/SectionForm.d.ts +99 -0
- package/dist/features/shell/SectionForm.js +128 -0
- package/dist/features/shell/entity-form.d.ts +109 -0
- package/dist/features/shell/entity-form.js +96 -0
- package/dist/features/shell/index.d.ts +4 -0
- package/dist/features/shell/index.js +2 -0
- package/dist/features/stores/api/[storeSlug]/route.js +2 -25
- package/dist/features/stores/components/StoreAuctionsListing.js +15 -1
- package/dist/features/stores/components/StoreClassifiedsListing.js +12 -2
- package/dist/features/stores/components/StoreDetailLayoutView.js +24 -71
- package/dist/features/stores/components/StoreDigitalCodesListing.js +12 -2
- package/dist/features/stores/components/StoreLiveItemsListing.js +12 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +12 -1
- package/dist/features/stores/components/StoreProductsListing.js +11 -1
- package/dist/features/stores/repository/store.repository.js +6 -0
- package/dist/features/stores/schemas/index.d.ts +6 -6
- package/dist/features/support/schemas/index.d.ts +4 -4
- package/dist/features/tester/actions/checklist-item-actions.d.ts +4 -4
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +119 -3
- package/dist/features/tester/seed-data/products-tester-seed-data.js +131 -1
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +105 -1
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/index.d.ts +13 -10
- package/dist/index.js +14 -9
- package/dist/next/routing/route-map.d.ts +7 -1
- package/dist/next/routing/route-map.js +5 -0
- package/dist/providers/db-firebase/base.repository.d.ts +30 -0
- package/dist/providers/db-firebase/base.repository.js +50 -1
- package/dist/providers/db-firebase/index.d.ts +1 -1
- package/dist/providers/db-firebase/index.js +1 -1
- package/dist/providers/db-firebase/sieve.d.ts +25 -0
- package/dist/providers/db-firebase/sieve.js +52 -18
- package/dist/react/hooks/useUrlTable.js +10 -1
- package/dist/schemas/registry.d.ts +68 -68
- package/dist/seed/_helpers/category-forest.d.ts +2 -0
- package/dist/seed/_helpers/category-forest.js +309 -0
- package/dist/seed/_helpers/category-tree.d.ts +27 -0
- package/dist/seed/_helpers/category-tree.js +103 -0
- package/dist/seed/catalogue-seed-data.js +12 -12
- package/dist/seed/categories-seed-data.js +177 -162
- package/dist/seed/events-seed-data.js +61 -10
- package/dist/seed/homepage-sections-seed-data.js +5 -1
- package/dist/seed/offers-seed-data.js +32 -27
- package/dist/seed/products-art-seed-data.js +50 -12
- package/dist/seed/products-auctions-seed-data.js +97 -18
- package/dist/seed/products-classifieds-seed-data.js +80 -16
- package/dist/seed/products-digital-codes-seed-data.js +66 -18
- package/dist/seed/products-live-items-seed-data.js +64 -13
- package/dist/seed/products-preorders-seed-data.d.ts +0 -1
- package/dist/seed/products-preorders-seed-data.js +52 -13
- package/dist/seed/products-prize-draws-seed-data.js +63 -14
- package/dist/seed/products-standard-seed-data.js +99 -26
- package/dist/seed/products-stickers-seed-data.js +47 -12
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/site-settings-seed-data.d.ts +1 -38
- package/dist/seed/site-settings-seed-data.js +38 -76
- package/dist/seed/stores-seed-data.js +71 -1
- package/dist/seed/users-seed-data.js +15 -5
- package/dist/server-entry.d.ts +1 -2
- package/dist/server-entry.js +4 -3
- package/dist/server.d.ts +4 -3
- package/dist/server.js +8 -4
- package/dist/styles.css +78 -12
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Button.style.css +19 -4
- package/dist/ui/components/CollapsibleSection.d.ts +17 -1
- package/dist/ui/components/CollapsibleSection.js +6 -2
- package/dist/ui/components/FilterChipGroup.d.ts +25 -1
- package/dist/ui/components/FilterChipGroup.js +21 -4
- package/dist/ui/components/HandMode.style.css +47 -0
- package/dist/ui/components/Layout.d.ts +9 -2
- package/dist/ui/components/Layout.js +1 -1
- package/dist/ui/components/ListingLayout.js +8 -8
- package/dist/ui/components/ListingLayout.style.css +8 -7
- package/dist/ui/components/StickyToolbar.d.ts +3 -1
- package/dist/ui/components/StickyToolbar.js +62 -20
- package/dist/ui/components/bottom-chrome-slot.d.ts +21 -0
- package/dist/ui/components/bottom-chrome-slot.js +29 -0
- package/dist/ui/components/index.style.css +3 -0
- package/dist/ui/forms/FormShell.d.ts +43 -13
- package/dist/ui/forms/FormShell.js +22 -11
- package/dist/ui/forms/index.d.ts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,8 @@ import { ROUTES } from "../../../constants/index";
|
|
|
10
10
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
11
11
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
12
12
|
import { SELLER_BULK_ACTIONS, ROW_ACTION_META } from "../../products/constants/action-defs";
|
|
13
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
14
|
+
const LISTING_TYPES = ["classified"];
|
|
13
15
|
const COLUMNS = [
|
|
14
16
|
{ key: "title", header: "Listing", render: (row) => _jsx(Text, { size: "sm", weight: "medium", children: row.title }) },
|
|
15
17
|
{ key: "price", header: "Price", render: (row) => _jsx(Text, { className: "tabular-nums", size: "sm", children: row.price }) },
|
|
@@ -58,6 +60,7 @@ export function SellerClassifiedView({ onCreateClick, onEditClick, onDelete, onB
|
|
|
58
60
|
else
|
|
59
61
|
window.location.href = String(ROUTES.STORE.CLASSIFIED_NEW);
|
|
60
62
|
}, [onCreateClick]);
|
|
63
|
+
const scope = useAvailabilityScope(LISTING_TYPES);
|
|
61
64
|
const config = {
|
|
62
65
|
portal: "seller",
|
|
63
66
|
title: "Classified",
|
|
@@ -92,6 +95,8 @@ export function SellerClassifiedView({ onCreateClick, onEditClick, onDelete, onB
|
|
|
92
95
|
? response.meta.total
|
|
93
96
|
: mappedRows.length,
|
|
94
97
|
buildFilters: () => "listingType==classified",
|
|
98
|
+
buildExtraParams: () => scope.extraParams,
|
|
99
|
+
renderAboveContent: scope.renderAboveContent,
|
|
95
100
|
primaryAction: { label: "New Classified", onClick: () => handleCreate() },
|
|
96
101
|
// Mirrors the "Edit" row action below so table rows and cards both navigate on click.
|
|
97
102
|
onRowClick: (row) => handleEdit(row.id),
|
|
@@ -10,6 +10,8 @@ import { ROUTES } from "../../../constants/index";
|
|
|
10
10
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
11
11
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
12
12
|
import { SELLER_BULK_ACTIONS, ROW_ACTION_META } from "../../products/constants/action-defs";
|
|
13
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
14
|
+
const LISTING_TYPES = ["digital-code"];
|
|
13
15
|
const COLUMNS = [
|
|
14
16
|
{ key: "title", header: "Product", render: (row) => _jsx(Text, { size: "sm", weight: "medium", children: row.title }) },
|
|
15
17
|
{ key: "price", header: "Price", render: (row) => _jsx(Text, { className: "tabular-nums", size: "sm", children: row.price }) },
|
|
@@ -63,6 +65,7 @@ export function SellerDigitalCodesView({ onCreateClick, onEditClick, onDelete, o
|
|
|
63
65
|
else
|
|
64
66
|
window.location.href = String(ROUTES.STORE.DIGITAL_CODES_NEW);
|
|
65
67
|
}, [onCreateClick]);
|
|
68
|
+
const scope = useAvailabilityScope(LISTING_TYPES);
|
|
66
69
|
const config = {
|
|
67
70
|
portal: "seller",
|
|
68
71
|
title: "Digital Codes",
|
|
@@ -94,6 +97,8 @@ export function SellerDigitalCodesView({ onCreateClick, onEditClick, onDelete, o
|
|
|
94
97
|
}),
|
|
95
98
|
getTotal: (response, mappedRows) => typeof response.meta?.total === "number" ? response.meta.total : mappedRows.length,
|
|
96
99
|
buildFilters: () => "listingType==digital-code",
|
|
100
|
+
buildExtraParams: () => scope.extraParams,
|
|
101
|
+
renderAboveContent: scope.renderAboveContent,
|
|
97
102
|
primaryAction: { label: "New Digital Code", onClick: () => handleCreate() },
|
|
98
103
|
// Mirrors the "Edit" row action below so table rows and cards both navigate on click.
|
|
99
104
|
onRowClick: (row) => handleEdit(row.id),
|
|
@@ -10,6 +10,8 @@ import { ROUTES } from "../../../constants/index";
|
|
|
10
10
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
11
11
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
12
12
|
import { SELLER_BULK_ACTIONS, ROW_ACTION_META } from "../../products/constants/action-defs";
|
|
13
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
14
|
+
const LISTING_TYPES = ["live"];
|
|
13
15
|
const COLUMNS = [
|
|
14
16
|
{
|
|
15
17
|
key: "title",
|
|
@@ -62,6 +64,7 @@ export function SellerLiveView({ onCreateClick, onEditClick, onDelete, onBulkDel
|
|
|
62
64
|
else
|
|
63
65
|
window.location.href = String(ROUTES.STORE.LIVE_ITEMS_NEW);
|
|
64
66
|
}, [onCreateClick]);
|
|
67
|
+
const scope = useAvailabilityScope(LISTING_TYPES);
|
|
65
68
|
const config = {
|
|
66
69
|
portal: "seller",
|
|
67
70
|
title: "Live Items",
|
|
@@ -94,6 +97,8 @@ export function SellerLiveView({ onCreateClick, onEditClick, onDelete, onBulkDel
|
|
|
94
97
|
}),
|
|
95
98
|
getTotal: (response, mappedRows) => typeof response.meta?.total === "number" ? response.meta.total : mappedRows.length,
|
|
96
99
|
buildFilters: () => "listingType==live",
|
|
100
|
+
buildExtraParams: () => scope.extraParams,
|
|
101
|
+
renderAboveContent: scope.renderAboveContent,
|
|
97
102
|
primaryAction: { label: "New Live Item", onClick: () => handleCreate() },
|
|
98
103
|
// Mirrors the "Edit" row action below so table rows and cards both navigate on click.
|
|
99
104
|
onRowClick: (row) => handleEdit(row.id),
|
|
@@ -10,6 +10,8 @@ import { useActionDispatch } from "../../../react/hooks/use-action-dispatch";
|
|
|
10
10
|
import { SELLER_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
11
11
|
import { Badge, Button, Div, FilterChipGroup, Heading, Input, Select, SideDrawer, Span, Stack, Text, useToast } from "../../../ui";
|
|
12
12
|
import { SELLER_ORDER_STATUS_TABS } from "../../admin/constants/filter-tabs";
|
|
13
|
+
import { useOrderScope } from "../../orders/components/OrderScopeTabs";
|
|
14
|
+
import { OrderStatusValues } from "../../orders/schemas/firestore";
|
|
13
15
|
import { isManualPaymentMethod } from "../../orders/constants/payment-window";
|
|
14
16
|
import { ACTIONS } from "../../../_internal/shared/actions/action-registry";
|
|
15
17
|
import { buildBulkAction } from "../../../_internal/shared/actions/bulk-helpers";
|
|
@@ -27,13 +29,20 @@ const SORT_OPTIONS = [
|
|
|
27
29
|
{ value: sortBy("createdAt", "ASC"), label: "Oldest" },
|
|
28
30
|
];
|
|
29
31
|
const STATUS_OPTIONS = SELLER_ORDER_STATUS_TABS;
|
|
32
|
+
// Keyed on the STORED lowercase values, and covering all nine. It was keyed
|
|
33
|
+
// UPPERCASE and read via `status.toUpperCase()` — the only consumer in the
|
|
34
|
+
// codebase doing that — and covered six, so `confirmed`, `return_requested`
|
|
35
|
+
// and `returned` all fell through to the neutral default badge.
|
|
30
36
|
const STATUS_BADGE_VARIANT = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
pending: "default",
|
|
38
|
+
confirmed: "info",
|
|
39
|
+
processing: "warning",
|
|
40
|
+
shipped: "info",
|
|
41
|
+
delivered: "success",
|
|
42
|
+
cancelled: "danger",
|
|
43
|
+
refunded: "danger",
|
|
44
|
+
return_requested: "warning",
|
|
45
|
+
returned: "danger",
|
|
37
46
|
};
|
|
38
47
|
const UPDATE_STATUS_OPTIONS = [
|
|
39
48
|
{ value: "", label: "— keep current —" },
|
|
@@ -168,7 +177,7 @@ export function SellerOrderDetailPanel({ orderId, apiBase, onClose, }) {
|
|
|
168
177
|
};
|
|
169
178
|
const addr = order?.shippingAddress ?? {};
|
|
170
179
|
const addrLine = [addr.addressLine1, addr.city, addr.state, addr.pincode].filter(Boolean).join(", ");
|
|
171
|
-
return (_jsxs(_Fragment, { children: [loading && (_jsx(Row, { align: "center", justify: "center", padding: "y-4xl", children: _jsx(Div, { className: "h-6 w-6 animate-spin border-2 border-[var(--appkit-color-primary)] border-t-transparent", rounded: "full" }) })), fetchError && (_jsx(Div, { textSize: "sm", className: "mx-4 mt-4 border border-error/20", color: "error", surface: "danger-surface", padding: "inline", rounded: "lg", children: fetchError })), order && !loading && (_jsxs(Stack, { gap: "none", children: [_jsxs(Stack, { className: `flex-1 ${__O.yAuto}`, gap: "5", padding: "md", children: [_jsxs(Row, { align: "center", justify: "between", children: [_jsx(Badge, { variant: STATUS_BADGE_VARIANT[order.status
|
|
180
|
+
return (_jsxs(_Fragment, { children: [loading && (_jsx(Row, { align: "center", justify: "center", padding: "y-4xl", children: _jsx(Div, { className: "h-6 w-6 animate-spin border-2 border-[var(--appkit-color-primary)] border-t-transparent", rounded: "full" }) })), fetchError && (_jsx(Div, { textSize: "sm", className: "mx-4 mt-4 border border-error/20", color: "error", surface: "danger-surface", padding: "inline", rounded: "lg", children: fetchError })), order && !loading && (_jsxs(Stack, { gap: "none", children: [_jsxs(Stack, { className: `flex-1 ${__O.yAuto}`, gap: "5", padding: "md", children: [_jsxs(Row, { align: "center", justify: "between", children: [_jsx(Badge, { variant: STATUS_BADGE_VARIANT[order.status ?? ""] ?? "default", children: order.status ?? "Unknown" }), _jsx(Text, { size: "sm", className: "text-[var(--appkit-color-text-secondary)]", children: toRelativeDate(order.createdAt) })] }), (order.items ?? []).length > 0 && (_jsxs(Div, { children: [_jsx(Text, { size: "sm", className: "text-[var(--appkit-color-text-primary)] mb-2", weight: "semibold", children: "Items" }), _jsx(Div, { className: "divide-y divide-[var(--appkit-color-border)] divide-[var(--appkit-color-border)] border border-[var(--appkit-color-border)]", rounded: "lg", children: (order.items ?? []).map((item, i) => (_jsxs(Row, { paddingY: "y-xs-tall", padding: "x-sm", align: "center", justify: "between", gap: "3", children: [_jsxs(Row, { align: "center", gap: "sm", className: "min-w-0", children: [_jsx(Div, { className: "h-10 w-10 shrink-0", rounded: "md", overflow: "hidden", children: _jsx(MediaImage, { src: item.image, alt: item.title ?? "Order item", size: "thumbnail" }) }), _jsxs(Div, { className: "min-w-0", children: [_jsx(Text, { size: "sm", className: "truncate", weight: "medium", children: item.title ?? item.productId ?? "Item" }), _jsxs(Text, { size: "xs", className: "text-[var(--appkit-color-text-secondary)]", children: ["Qty: ", item.quantity ?? 1] })] })] }), _jsx(Text, { size: "sm", className: "shrink-0", weight: "medium", children: toCurrency(item.price ?? 0) })] }, i))) })] })), _jsx(OrderAddonBadges, { order: order, variant: "detail" }), order.giftWrapAddon && (_jsxs(Div, { className: "border border-[var(--appkit-color-primary-200)] dark:border-[var(--appkit-color-primary-800)]", surface: "subtle", padding: "inline", rounded: "lg", children: [_jsx(Text, { size: "sm", weight: "semibold", children: "\uD83C\uDF81 Gift wrap requested" }), order.giftWrapMessage && (_jsxs(Text, { size: "sm", className: "mt-1 text-[var(--appkit-color-text-secondary)]", children: ["\u201C", order.giftWrapMessage, "\u201D"] }))] })), _jsxs(Row, { surface: "muted", padding: "inline", align: "center", justify: "between", rounded: "lg", children: [_jsx(Text, { size: "sm", weight: "semibold", children: "Total" }), _jsx(Text, { size: "sm", className: "text-[var(--appkit-color-primary)]", weight: "bold", children: toCurrency(order.totalAmount ?? 0) })] }), addrLine && (_jsxs(Div, { children: [_jsx(Text, { size: "sm", className: "mb-1", weight: "semibold", children: "Shipping address" }), _jsx(Text, { size: "sm", className: "text-[var(--appkit-color-text-secondary)]", children: [String(addr.fullName ?? ""), addrLine].filter(Boolean).join(" · ") })] })), order.paymentMethod && (_jsxs(Div, { children: [_jsxs(Row, { align: "center", justify: "between", className: "mb-1", gap: "3", children: [_jsx(Text, { size: "sm", weight: "semibold", children: "Payment" }), isManualPaymentMethod(order.paymentMethod) && (_jsx(Badge, { variant: sellerPaymentBadge(order).variant, children: sellerPaymentBadge(order).label }))] }), _jsx(Text, { size: "sm", className: "text-[var(--appkit-color-text-secondary)]", transform: "capitalize", children: order.paymentMethod }), isManualPaymentMethod(order.paymentMethod) && order.paymentTransactionId && (_jsxs(Text, { size: "xs", color: "muted", className: "mt-1", children: ["UTR: ", order.paymentTransactionId] }))] })), order.emiEnabled && (_jsxs(Div, { className: "border-t border-[var(--appkit-color-border)]", padding: "t-md", children: [_jsxs(Row, { align: "center", justify: "between", className: "mb-2", children: [_jsxs(Text, { size: "sm", weight: "semibold", children: ["EMI plan ", order.emiTenureMonths ? `· ${order.emiTenureMonths} months` : ""] }), _jsx(Badge, { variant: order.emiComplete ? "success" : "warning", children: order.emiComplete ? "Fully paid" : "In progress" })] }), _jsxs(Row, { align: "center", justify: "between", className: "mb-2", children: [_jsx(Text, { size: "xs", color: "muted", children: "Token collected" }), _jsx(Text, { size: "xs", weight: "medium", children: toCurrency(order.emiTokenAmount ?? 0) })] }), _jsxs(Row, { align: "center", justify: "between", className: "mb-3", children: [_jsx(Text, { size: "xs", color: "muted", children: "Remaining balance" }), _jsx(Text, { size: "xs", weight: "medium", children: toCurrency(order.emiRemainingBalance ?? 0) })] }), _jsx(Div, { className: "divide-y divide-[var(--appkit-color-border)] border border-[var(--appkit-color-border)]", rounded: "lg", children: (order.emiInstallments ?? []).map((inst) => (_jsxs(Row, { paddingY: "y-xs-tall", padding: "x-sm", align: "center", justify: "between", gap: "3", children: [_jsxs(Div, { className: "min-w-0", children: [_jsxs(Text, { size: "sm", weight: "medium", children: ["Installment ", inst.index, " \u00B7 ", toCurrency(inst.amount)] }), _jsx(Text, { size: "xs", color: "muted", children: inst.status === "paid" && inst.paidAt
|
|
172
181
|
? `Paid ${toRelativeDate(inst.paidAt)}`
|
|
173
182
|
: inst.dueDate
|
|
174
183
|
? `Due ${toRelativeDate(inst.dueDate)}`
|
|
@@ -266,7 +275,7 @@ export function SellerOrdersView({ orderDetailApiBase = SELLER_ENDPOINTS.ORDERS,
|
|
|
266
275
|
key: "status",
|
|
267
276
|
header: "Status",
|
|
268
277
|
className: "w-32",
|
|
269
|
-
render: (row) => (_jsx(Badge, { variant: STATUS_BADGE_VARIANT[row.status
|
|
278
|
+
render: (row) => (_jsx(Badge, { variant: STATUS_BADGE_VARIANT[row.status ?? ""] ?? "default", children: row.status })),
|
|
270
279
|
},
|
|
271
280
|
{
|
|
272
281
|
key: "physicalLocation",
|
|
@@ -281,6 +290,7 @@ export function SellerOrdersView({ orderDetailApiBase = SELLER_ENDPOINTS.ORDERS,
|
|
|
281
290
|
render: (row) => _jsx(Span, { size: "xs", color: "muted", children: row.updatedAt }),
|
|
282
291
|
},
|
|
283
292
|
];
|
|
293
|
+
const orderScope = useOrderScope();
|
|
284
294
|
const config = {
|
|
285
295
|
portal: "seller",
|
|
286
296
|
title: "Orders",
|
|
@@ -313,7 +323,12 @@ export function SellerOrdersView({ orderDetailApiBase = SELLER_ENDPOINTS.ORDERS,
|
|
|
313
323
|
};
|
|
314
324
|
}),
|
|
315
325
|
getTotal: (response, mappedRows) => typeof response.meta?.total === "number" ? response.meta.total : mappedRows.length,
|
|
326
|
+
// The scope narrows; the status chip drills down inside it. Both are
|
|
327
|
+
// emitted — an explicit status always wins, since picking "Delivered"
|
|
328
|
+
// while sitting on Active should show delivered orders, not nothing.
|
|
316
329
|
buildFilters: (state) => (state.status && state.status !== "All" ? sieveFilter("status", SIEVE_OP.EQ, state.status) : undefined),
|
|
330
|
+
buildExtraParams: () => orderScope.extraParams,
|
|
331
|
+
renderAboveContent: orderScope.renderAboveContent,
|
|
317
332
|
renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsx(FilterChipGroup, { label: "Status", tabs: STATUS_OPTIONS, value: pendingFilters.status ?? "", onChange: (id) => setPendingFilters((p) => ({ ...p, status: id })) })),
|
|
318
333
|
buildBulkActions: (selection) => {
|
|
319
334
|
const handlePrintPackingSlips = () => {
|
|
@@ -330,7 +345,14 @@ export function SellerOrdersView({ orderDetailApiBase = SELLER_ENDPOINTS.ORDERS,
|
|
|
330
345
|
];
|
|
331
346
|
},
|
|
332
347
|
renderRowActions: (row) => {
|
|
333
|
-
|
|
348
|
+
// Compared against the stored lowercase values, like every other
|
|
349
|
+
// consumer — the uppercase form here was a local convention that only
|
|
350
|
+
// worked because of the `.toUpperCase()` alongside it.
|
|
351
|
+
const isShippable = [
|
|
352
|
+
OrderStatusValues.PENDING,
|
|
353
|
+
OrderStatusValues.PROCESSING,
|
|
354
|
+
OrderStatusValues.CONFIRMED,
|
|
355
|
+
].includes(row.status ?? "");
|
|
334
356
|
return (_jsxs(Row, { align: "center", gap: "xs", children: [isShippable && (_jsx(Button, { variant: "ghost", size: "sm", onClick: (e) => void handleQuickShip(row, e), "aria-label": "Mark as shipped", title: "Mark shipped", isLoading: shippingRowId === row.id, disabled: shippingRowId !== null, children: _jsx(Truck, { className: "h-4 w-4" }) })), _jsx(Button, { variant: "ghost", size: "sm", onClick: (e) => { e.stopPropagation(); setSelectedOrderId(row.id); }, title: "View order details", "aria-label": "View order details", children: _jsx(Eye, { className: "h-4 w-4" }) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: (e) => {
|
|
335
357
|
e.stopPropagation();
|
|
336
358
|
void dispatch({ type: "NAVIGATE", href: String(ROUTES.STORE.ORDER_DETAIL(row.id)) });
|
|
@@ -5,7 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
import { Alert, Badge, Checkbox, Div, FormField, FormGroup, Heading, Label, Row, Stack, Text, Toggle } from "../../../ui";
|
|
6
6
|
import { StackedViewShell } from "../../../ui";
|
|
7
7
|
import { FormShellContext, useFormShellState, applyZodIssues, FormErrorSummary } from "../../../ui/forms";
|
|
8
|
-
import {
|
|
8
|
+
import { SectionForm, useSectionFormNav } from "../../shell";
|
|
9
9
|
import { SELLER_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
10
10
|
import { normalizeError } from "../../../errors/normalize";
|
|
11
11
|
const __P = {
|
|
@@ -73,12 +73,6 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
73
73
|
const [saving, setSaving] = useState(false);
|
|
74
74
|
const [error, setError] = useState(null);
|
|
75
75
|
const [success, setSuccess] = useState(false);
|
|
76
|
-
const [currentStep, setCurrentStep] = useState(0);
|
|
77
|
-
const { shellCtx, setFieldError, clearErrors, validate } = useFormShellState(payoutSettingsDraftSchema);
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
validate(draft);
|
|
80
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
81
|
-
}, [draft, validate]);
|
|
82
76
|
useEffect(() => {
|
|
83
77
|
fetch(apiBase)
|
|
84
78
|
.then((r) => r.json())
|
|
@@ -166,9 +160,17 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
166
160
|
}
|
|
167
161
|
};
|
|
168
162
|
const busy = loading || saving;
|
|
169
|
-
|
|
163
|
+
// Payout Method is the only section that must be filled for the record to be
|
|
164
|
+
// valid — the schema's superRefine rejects an empty UPI ID or bank name and
|
|
165
|
+
// nothing else. Tax Info is explicitly optional, and Preferences all have
|
|
166
|
+
// working defaults. So it is the required-first section, and the other two
|
|
167
|
+
// start collapsed.
|
|
168
|
+
const sections = useMemo(() => [
|
|
170
169
|
{
|
|
170
|
+
id: "method",
|
|
171
171
|
label: "Payout Method",
|
|
172
|
+
required: true,
|
|
173
|
+
quick: true,
|
|
172
174
|
fields: ["method", "upiId", "accountHolderName", "accountNumber", "ifscCode", "bankName", "accountType"],
|
|
173
175
|
render: ({ values, onChange }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Heading, { level: 3, className: "mb-2", children: "Payout Method" }), current && (_jsx(Row, { className: "mb-2", align: "center", gap: "sm", children: _jsx(Badge, { variant: current.isConfigured ? "success" : "warning", children: current.isConfigured ? "Payout configured" : "Not configured" }) })), current?.isConfigured && (_jsx(Alert, { variant: "info", children: current.method === "upi"
|
|
174
176
|
? `Current UPI: ${current.upiId}`
|
|
@@ -178,26 +180,25 @@ export function SellerPayoutSettingsView({ apiBase = SELLER_ENDPOINTS.PAYOUT_SET
|
|
|
178
180
|
]).map(({ value, label, desc }) => (_jsxs("label", { className: "flex items-center gap-[var(--appkit-space-3)] p-[var(--appkit-space-3)] rounded-lg border border-[var(--appkit-color-border)] cursor-pointer has-[:checked]:border-[var(--appkit-color-primary)] has-[:checked]:bg-[var(--appkit-color-primary)]/5", children: [_jsx(Checkbox, { bare: true, type: "radio", name: "payoutMethod", value: value, checked: values.method === value, onChange: () => onChange({ method: value }), className: "accent-[var(--appkit-color-primary)]", disabled: busy }), _jsxs(Div, { children: [_jsx(Text, { weight: "medium", children: label }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: desc })] })] }, value))) }), values.method === "upi" && (_jsx(FormField, { name: "upiId", label: "UPI ID (VPA)", type: "text", value: values.upiId, onChange: (v) => onChange({ upiId: v }), placeholder: "yourname@upi", helpText: "Ensure this VPA is registered and active.", disabled: busy })), values.method === "bank_transfer" && (_jsxs(Stack, { gap: "md", className: "mt-2", children: [_jsx(FormField, { name: "accountHolderName", label: "Account Holder Name", type: "text", value: values.accountHolderName, onChange: (v) => onChange({ accountHolderName: v }), placeholder: "Name as on bank account", disabled: busy }), _jsxs(FormGroup, { columns: 2, children: [_jsx(FormField, { name: "accountNumber", label: "Account Number", type: "text", value: values.accountNumber, onChange: (v) => onChange({ accountNumber: v }), placeholder: "Enter full account number", helpText: current?.bankAccount ? `Saved: ••••${current.bankAccount.accountNumberMasked?.slice(-4) ?? "••••"}` : "Stored securely, never displayed in full.", disabled: busy }), _jsx(FormField, { name: "ifscCode", label: "IFSC Code", type: "text", value: values.ifscCode, onChange: (v) => onChange({ ifscCode: v.toUpperCase() }), placeholder: "e.g. SBIN0001234", disabled: busy })] }), _jsxs(FormGroup, { columns: 2, children: [_jsx(FormField, { name: "bankName", label: "Bank Name", type: "text", value: values.bankName, onChange: (v) => onChange({ bankName: v }), placeholder: "e.g. State Bank of India", disabled: busy }), _jsxs(Div, { children: [_jsx(Text, { className: "mb-1.5", size: "sm", weight: "medium", children: "Account Type" }), _jsx(Row, { gap: "xs", children: ["savings", "current"].map((t) => (_jsxs(Label, { layout: "flex", gap: "md", className: "cursor-pointer", children: [_jsx(Checkbox, { bare: true, type: "radio", name: "accountType", value: t, checked: values.accountType === t, onChange: () => onChange({ accountType: t }), className: "accent-[var(--appkit-color-primary)]", disabled: busy }), _jsx(Text, { size: "sm", transform: "capitalize", children: t })] }, t))) })] })] })] }))] })),
|
|
179
181
|
},
|
|
180
182
|
{
|
|
183
|
+
id: "tax",
|
|
181
184
|
label: "Tax Info",
|
|
182
185
|
fields: ["gstin", "pan", "businessType"],
|
|
183
186
|
render: ({ values, onChange }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Heading, { level: 3, className: "mb-2", children: "Tax Information" }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: "Optional \u2014 required only for GST invoice generation and TDS compliance." }), _jsx(FormField, { name: "gstin", label: "GSTIN (optional)", type: "text", value: values.gstin, onChange: (v) => onChange({ gstin: v.toUpperCase() }), placeholder: "e.g. 22AAAAA0000A1Z5", helpText: "15-character Goods and Services Tax Identification Number.", disabled: busy }), _jsx(FormField, { name: "pan", label: "PAN (optional)", type: "text", value: values.pan, onChange: (v) => onChange({ pan: v.toUpperCase() }), placeholder: "e.g. ABCDE1234F", helpText: "Required for payouts above \u20B950,000 per year (TDS threshold).", disabled: busy }), _jsx(FormField, { name: "businessType", label: "Business Type (optional)", type: "text", value: values.businessType, onChange: (v) => onChange({ businessType: v }), placeholder: "e.g. Individual, Sole Proprietor, Private Limited", disabled: busy })] })),
|
|
184
187
|
},
|
|
185
188
|
{
|
|
189
|
+
id: "preferences",
|
|
186
190
|
label: "Preferences",
|
|
187
191
|
fields: ["autoPayout", "minimumThreshold", "emiEnabled"],
|
|
188
192
|
render: ({ values, onChange }) => (_jsxs(Stack, { gap: "md", children: [_jsx(Heading, { level: 3, className: "mb-2", children: "Payout Preferences" }), _jsx(Toggle, { checked: values.autoPayout, onChange: (checked) => onChange({ autoPayout: checked }), label: "Enable auto-payout \u2014 automatically transfer earnings on schedule", disabled: busy }), _jsx(FormField, { name: "minimumThreshold", label: "Minimum Payout Threshold (\u20B9)", type: "number", value: values.minimumThreshold, onChange: (v) => onChange({ minimumThreshold: v }), placeholder: "e.g. 500", helpText: "Payouts are held until your balance exceeds this amount. Leave blank for no minimum.", disabled: busy }), _jsxs(Div, { className: `${__P.p3} bg-[var(--appkit-color-surface-alt)] border border-[var(--appkit-color-border)]`, rounded: "lg", children: [_jsx(Text, { className: "mb-1", size: "sm", weight: "medium", children: "Payout Schedule" }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: "Auto-payouts run every Monday for the previous week's settled orders. Manual payouts can be requested from the Payouts page at any time." })] }), _jsx(Toggle, { checked: values.emiEnabled, onChange: (checked) => onChange({ emiEnabled: checked }), label: "Offer EMI financing on eligible orders", disabled: busy }), _jsx(Text, { className: "text-[var(--appkit-color-text-muted)]", size: "sm", children: "Only shown to buyers when platform-wide EMI is also enabled and their cart subtotal from your store exceeds the site's minimum order value. Orders on an EMI plan hold your payout until every installment is paid, unless you mark the item \"ship before EMI completes\"." })] })),
|
|
189
193
|
},
|
|
190
|
-
];
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
});
|
|
196
|
-
return map;
|
|
194
|
+
], [busy, current]);
|
|
195
|
+
const { openIds, setOpenIds, goToSection, fieldToSectionIndex, sectionMeta } = useSectionFormNav(sections, draft);
|
|
196
|
+
const { shellCtx, setFieldError, clearErrors, validate } = useFormShellState(payoutSettingsDraftSchema, { sections: sectionMeta, onGoToSection: goToSection, fieldToSectionIndex });
|
|
197
|
+
useEffect(() => {
|
|
198
|
+
validate(draft);
|
|
197
199
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
198
|
-
}, [
|
|
199
|
-
const wizardShellCtx = useMemo(() => ({ ...shellCtx, fieldToStepIndex, goToStep: (n) => setCurrentStep(n) }), [shellCtx, fieldToStepIndex, setCurrentStep]);
|
|
200
|
+
}, [draft, validate]);
|
|
200
201
|
return (_jsx(StackedViewShell, { portal: "seller", title: "Payout Settings", sections: [
|
|
201
|
-
_jsxs(Div, { children: [error && _jsx(Alert, { variant: "error", className: "mb-4", children: error }), success && _jsx(Alert, { variant: "success", className: "mb-4", children: "Payout details saved." }), _jsxs(FormShellContext.Provider, { value:
|
|
202
|
+
_jsxs(Div, { children: [error && _jsx(Alert, { variant: "error", className: "mb-4", children: error }), success && _jsx(Alert, { variant: "success", className: "mb-4", children: "Payout details saved." }), _jsxs(FormShellContext.Provider, { value: shellCtx, children: [_jsx(FormErrorSummary, {}), _jsx(SectionForm, { sections: sections, values: draft, onChange: update, onSubmit: handleSave, schema: payoutSettingsDraftSchema, openIds: openIds, onOpenChange: setOpenIds, submitLabel: "Save Payout Details", isLoading: busy })] })] }, "payout"),
|
|
202
203
|
] }));
|
|
203
204
|
}
|
|
@@ -13,6 +13,8 @@ import { ACTIONS } from "../../../_internal/shared/actions/action-registry";
|
|
|
13
13
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
14
14
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
15
15
|
import { useActionDispatch } from "../../../react/hooks/use-action-dispatch";
|
|
16
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
17
|
+
const PRE_ORDER_TYPES = ["pre-order"];
|
|
16
18
|
const PRE_ORDER_COLUMNS = [
|
|
17
19
|
{
|
|
18
20
|
key: "thumbnail",
|
|
@@ -75,6 +77,7 @@ export function SellerPreOrdersView({ children, onDelete, ...props }) {
|
|
|
75
77
|
if (React.Children.count(children) > 0) {
|
|
76
78
|
return (_jsx(ListingLayout, { portal: "seller", ...props, children: children }));
|
|
77
79
|
}
|
|
80
|
+
const scope = useAvailabilityScope(PRE_ORDER_TYPES);
|
|
78
81
|
const config = {
|
|
79
82
|
portal: "seller",
|
|
80
83
|
title: "Pre-Orders",
|
|
@@ -120,6 +123,8 @@ export function SellerPreOrdersView({ children, onDelete, ...props }) {
|
|
|
120
123
|
const status = state.status && state.status !== "All" ? sieveFilter("status", SIEVE_OP.EQ, state.status) : null;
|
|
121
124
|
return ["listingType==pre-order", status].filter(Boolean).join(",");
|
|
122
125
|
},
|
|
126
|
+
buildExtraParams: () => scope.extraParams,
|
|
127
|
+
renderAboveContent: scope.renderAboveContent,
|
|
123
128
|
rowHrefTemplate: String(ROUTES.STORE.PRE_ORDERS_EDIT("{id}")),
|
|
124
129
|
renderRowActions: (row) => (_jsx(RowActionMenu, { actions: [
|
|
125
130
|
{
|
|
@@ -4,16 +4,16 @@ import { Row, SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit/client";
|
|
|
4
4
|
import { sortBy } from "@mohasinac/appkit/client";
|
|
5
5
|
import React, { useState, useCallback } from "react";
|
|
6
6
|
import { useEntityDelete } from "../../../react/hooks/useEntityDelete";
|
|
7
|
-
import { useUrlTable } from "../../../react/hooks/useUrlTable";
|
|
8
7
|
import { Badge, ConfirmDeleteModal, Div, FilterChipGroup, ListingLayout, RowActionMenu, Span, Text } from "../../../ui";
|
|
9
8
|
import { MediaImage } from "../../media/MediaImage";
|
|
10
9
|
import { SELLER_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
11
|
-
import { TABLE_KEYS } from "../../../constants/table-keys";
|
|
12
10
|
import { SELLER_PRIZE_DRAW_STATUS_TABS } from "../../admin/constants/filter-tabs";
|
|
13
11
|
import { ROUTES } from "../../../constants";
|
|
14
12
|
import { ACTIONS } from "../../../_internal/shared/actions/action-registry";
|
|
15
13
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
16
14
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
15
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
16
|
+
const PRIZE_DRAW_TYPES = ["prize-draw"];
|
|
17
17
|
import { useActionDispatch } from "../../../react/hooks/use-action-dispatch";
|
|
18
18
|
// Real ProductStatus is draft|published|in_review|archived — "active"
|
|
19
19
|
// fixed to "published"; "ended"/"cancelled" removed since status never
|
|
@@ -64,8 +64,7 @@ export function SellerPrizeDrawsView({ children, onDelete, ...props }) {
|
|
|
64
64
|
const dispatch = useActionDispatch();
|
|
65
65
|
// Independent of DataListingView's own internal useUrlTable() — see the
|
|
66
66
|
// same pattern in SellerAuctionsView.tsx.
|
|
67
|
-
const
|
|
68
|
-
const showClosed = toggleTable.get(TABLE_KEYS.SHOW_CLOSED) === "true";
|
|
67
|
+
const scope = useAvailabilityScope(PRIZE_DRAW_TYPES);
|
|
69
68
|
const [deleteTargetId, setDeleteTargetId] = useState(null);
|
|
70
69
|
const { deletingId, handleDelete: performDelete } = useEntityDelete({
|
|
71
70
|
endpoint: SELLER_ENDPOINTS.PRODUCT_BY_ID,
|
|
@@ -85,7 +84,7 @@ export function SellerPrizeDrawsView({ children, onDelete, ...props }) {
|
|
|
85
84
|
title: "Prize Draws",
|
|
86
85
|
searchPlaceholder: "Search prize draws by name…",
|
|
87
86
|
emptyLabel: "No prize draws listed yet",
|
|
88
|
-
filterKeys: ["status"
|
|
87
|
+
filterKeys: ["status"],
|
|
89
88
|
defaultSort: sortBy("createdAt", "DESC"),
|
|
90
89
|
queryKey: ["seller", "prize-draws", "listing"],
|
|
91
90
|
endpoint: SELLER_ENDPOINTS.PRODUCTS,
|
|
@@ -115,18 +114,17 @@ export function SellerPrizeDrawsView({ children, onDelete, ...props }) {
|
|
|
115
114
|
getTotal: (response, mappedRows) => typeof response.meta?.total === "number" ? response.meta.total : mappedRows.length,
|
|
116
115
|
buildFilters: (state) => {
|
|
117
116
|
const status = state.status && state.status !== "All" ? sieveFilter("status", SIEVE_OP.EQ, state.status) : null;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
// The hide-closed clause that used to live here tested the reveal
|
|
118
|
+
// WINDOW END date, a different field from the reveal STATUS every other
|
|
119
|
+
// surface reads — so a draw the seller had closed early still showed as
|
|
120
|
+
// open here. It also pushed an inequality alongside an arbitrary sort
|
|
121
|
+
// (Root Cause #59), which `audit-listing-indices` had been reporting as
|
|
122
|
+
// QUERY_UNSATISFIABLE. The scope param now carries it, resolved from the
|
|
123
|
+
// listing-type registry.
|
|
124
|
+
return ["listingType==prize-draw", status].filter(Boolean).join(",");
|
|
122
125
|
},
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
label: "Show closed",
|
|
126
|
-
active: showClosed,
|
|
127
|
-
onChange: (next) => toggleTable.set(TABLE_KEYS.SHOW_CLOSED, next ? "true" : ""),
|
|
128
|
-
},
|
|
129
|
-
],
|
|
126
|
+
buildExtraParams: () => scope.extraParams,
|
|
127
|
+
renderAboveContent: scope.renderAboveContent,
|
|
130
128
|
rowHrefTemplate: String(ROUTES.STORE.PRIZE_DRAWS_EDIT("{id}")),
|
|
131
129
|
renderRowActions: (row) => (_jsx(RowActionMenu, { actions: [
|
|
132
130
|
{
|
|
@@ -11,6 +11,7 @@ import { StoreAddressSelectorCreate } from "../../stores/components/StoreAddress
|
|
|
11
11
|
import { QuickProductForm } from "./QuickProductForm";
|
|
12
12
|
import { BarcodeField } from "./BarcodeField";
|
|
13
13
|
import { pluginFor } from "../../../_internal/shared/listing-types/_registry";
|
|
14
|
+
import { DEFAULT_MIN_OFFER_PERCENT } from "../../../_internal/shared/features/offers/config";
|
|
14
15
|
import { normalizeError } from "../../../errors/normalize";
|
|
15
16
|
/**
|
|
16
17
|
* "bundle" is a categoryType, not a ListingType, so it can't live in
|
|
@@ -198,7 +199,12 @@ const TYPE_SPECIFIC_STEPS = {
|
|
|
198
199
|
function StepPricing({ values, onChange, listingType, }) {
|
|
199
200
|
const listingPlugin = pluginForMode(listingType);
|
|
200
201
|
const priceLabel = listingPlugin.priceLabel;
|
|
201
|
-
return (_jsxs(Stack, { gap: "md", children: [_jsx(Alert, { variant: "info", children: "All prices in Indian Rupees (\u20B9)." }), _jsxs(FormGroup, { columns: 2, children: [_jsx(FormField, { name: "price", label: priceLabel, type: "number", value: toRupeesString(values.price), onChange: (v) => onChange({ price: fromRupeesString(v) }), placeholder: "999" }), _jsx(FormField, { name: "compareAtPrice", label: "Compare-at Price (\u20B9, optional)", type: "number", value: toRupeesString(values.compareAtPrice), onChange: (v) => onChange({ compareAtPrice: v ? fromRupeesString(v) : undefined }), placeholder: "1299", helpText: "Original price shown as strikethrough" })] }), listingPlugin.showsStockQuantity && (_jsx(FormField, { name: "stockQuantity", label: "Stock Quantity", type: "number", value: String(values.stockQuantity ?? ""), onChange: (v) => onChange({ stockQuantity: Number(v) }), placeholder: "1" })), _jsxs(FormGroup, { columns: 2, children: [_jsx(Toggle, { checked: !!values.featured, onChange: (checked) => onChange({ featured: checked }), label: "Mark as Featured" }), _jsx(Toggle, { checked: !!values.isNew, onChange: (checked) => onChange({ isNew: checked }), label: "Mark as New Arrival" })] }), _jsx(Toggle, { checked: !!values.allowOffers, onChange: (checked) => onChange({
|
|
202
|
+
return (_jsxs(Stack, { gap: "md", children: [_jsx(Alert, { variant: "info", children: "All prices in Indian Rupees (\u20B9)." }), _jsxs(FormGroup, { columns: 2, children: [_jsx(FormField, { name: "price", label: priceLabel, type: "number", value: toRupeesString(values.price), onChange: (v) => onChange({ price: fromRupeesString(v) }), placeholder: "999" }), _jsx(FormField, { name: "compareAtPrice", label: "Compare-at Price (\u20B9, optional)", type: "number", value: toRupeesString(values.compareAtPrice), onChange: (v) => onChange({ compareAtPrice: v ? fromRupeesString(v) : undefined }), placeholder: "1299", helpText: "Original price shown as strikethrough" })] }), listingPlugin.showsStockQuantity && (_jsx(FormField, { name: "stockQuantity", label: "Stock Quantity", type: "number", value: String(values.stockQuantity ?? ""), onChange: (v) => onChange({ stockQuantity: Number(v) }), placeholder: "1" })), _jsxs(FormGroup, { columns: 2, children: [_jsx(Toggle, { checked: !!values.featured, onChange: (checked) => onChange({ featured: checked }), label: "Mark as Featured" }), _jsx(Toggle, { checked: !!values.isNew, onChange: (checked) => onChange({ isNew: checked }), label: "Mark as New Arrival" })] }), _jsx(Toggle, { checked: !!values.allowOffers, onChange: (checked) => onChange({
|
|
203
|
+
allowOffers: checked,
|
|
204
|
+
minOfferPercent: checked
|
|
205
|
+
? values.minOfferPercent ?? DEFAULT_MIN_OFFER_PERCENT
|
|
206
|
+
: undefined,
|
|
207
|
+
}), label: "Allow buyer offers" }), values.allowOffers && (_jsx(FormField, { name: "minOfferPercent", label: "Minimum offer (% of price)", type: "number", value: String(values.minOfferPercent ?? ""), onChange: (v) => onChange({ minOfferPercent: Number(v) }), placeholder: String(DEFAULT_MIN_OFFER_PERCENT) }))] }));
|
|
202
208
|
}
|
|
203
209
|
// ── Step: Shipping ────────────────────────────────────────────────────────
|
|
204
210
|
function StepShipping({ values, onChange, renderAddressSelector, }) {
|
|
@@ -15,6 +15,7 @@ import { SELLER_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
|
15
15
|
import { SELLER_PRODUCT_STATUS_TABS } from "../../admin/constants/filter-tabs";
|
|
16
16
|
import { ROUTES } from "../../../constants";
|
|
17
17
|
import { normalizeListingType } from "../../products/utils/listing-type";
|
|
18
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
18
19
|
import { toRecordArray, toRelativeDate, toStringValue } from "../hooks/useSellerListingData";
|
|
19
20
|
import { useListingTypeFlags } from "../../../react/hooks/useListingTypeFlags";
|
|
20
21
|
import { ALL_LISTING_TYPES } from "../../../_internal/shared/listing-types/feature-flags";
|
|
@@ -35,7 +36,6 @@ const FILTER_KEYS = [
|
|
|
35
36
|
"tags",
|
|
36
37
|
"badges",
|
|
37
38
|
"listingType",
|
|
38
|
-
"showSold",
|
|
39
39
|
];
|
|
40
40
|
const DEFAULT_SORT = "-createdAt";
|
|
41
41
|
const SORT_OPTIONS = [
|
|
@@ -117,7 +117,9 @@ export function SellerProductsView({ onDeleteProduct, onCreateClick, }) {
|
|
|
117
117
|
// own internal table also reads via `filterKeys`, so both stay in sync.
|
|
118
118
|
const sideTable = useUrlTable({ defaults: { sort: DEFAULT_SORT } });
|
|
119
119
|
const listingKind = (sideTable.get("listingType") || "all");
|
|
120
|
-
|
|
120
|
+
// The scope bar spans whichever types the type-dropdown has narrowed to, so
|
|
121
|
+
// its middle tab reads "Ended" on Auctions and "Sold" on Products.
|
|
122
|
+
const scope = useAvailabilityScope(listingKind === "all" ? ALL_LISTING_TYPES : [listingKind]);
|
|
121
123
|
const { deletingId, handleDelete: performDelete } = useEntityDelete({
|
|
122
124
|
deleteFn: onDeleteProduct,
|
|
123
125
|
onSuccess: (id) => { setDeletedIds((prev) => new Set([...prev, id])); },
|
|
@@ -204,9 +206,6 @@ export function SellerProductsView({ onDeleteProduct, onCreateClick, }) {
|
|
|
204
206
|
endpoint: SELLER_ENDPOINTS.PRODUCTS,
|
|
205
207
|
sortOptions: SORT_OPTIONS,
|
|
206
208
|
columns: PRODUCT_COLUMNS,
|
|
207
|
-
toggles: [
|
|
208
|
-
{ label: "Show sold", active: showSold, onChange: (next) => sideTable.set("showSold", next ? "true" : "") },
|
|
209
|
-
],
|
|
210
209
|
primaryAction: onCreateClick ? { label: "New Listing", onClick: onCreateClick } : undefined,
|
|
211
210
|
mapRows: (response) => {
|
|
212
211
|
const rows = toRecordArray(response.products).map((item, index) => {
|
|
@@ -252,11 +251,15 @@ export function SellerProductsView({ onDeleteProduct, onCreateClick, }) {
|
|
|
252
251
|
buildFilters: (state) => {
|
|
253
252
|
const statusFilter = state.status && state.status !== "All" ? sieveFilter("status", SIEVE_OP.EQ, state.status) : undefined;
|
|
254
253
|
const kindFilter = !state.listingType || state.listingType === "all" ? undefined : sieveFilter("listingType", SIEVE_OP.EQ, state.listingType);
|
|
255
|
-
|
|
256
|
-
|
|
254
|
+
// The hardcoded `isSold==false` that used to live here is gone: it asked
|
|
255
|
+
// a narrower question than the rest of the app (an ended auction is not
|
|
256
|
+
// `isSold`), so the seller dashboard and /auctions disagreed about the
|
|
257
|
+
// same rows. The scope param carries the per-type meaning instead.
|
|
258
|
+
return [statusFilter, kindFilter].filter(Boolean).join(",") || undefined;
|
|
257
259
|
},
|
|
258
260
|
renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsx(SellerProductsFilterFields, { pendingFilters: pendingFilters, statusOptions: STATUS_OPTIONS, onChange: setPendingFilters })),
|
|
259
|
-
|
|
261
|
+
buildExtraParams: () => scope.extraParams,
|
|
262
|
+
renderAboveContent: () => (_jsxs(Stack, { gap: "sm", children: [_jsx(TypeDropdown, { active: listingKind, onChange: handleKindChange }), scope.renderAboveContent()] })),
|
|
260
263
|
buildBulkActions: (selection) => {
|
|
261
264
|
const handleBulkPrintLabels = () => {
|
|
262
265
|
const ids = selection.selectedIds.join(",");
|
|
@@ -14,6 +14,8 @@ import { ROUTES } from "../../../constants/index";
|
|
|
14
14
|
import { toRecordArray, toRelativeDate, toCurrency, toStringValue, } from "../../admin/hooks/useAdminListingData";
|
|
15
15
|
import { DataListingView } from "../../admin/components/DataListingView";
|
|
16
16
|
import { SELLER_BULK_ACTIONS, ROW_ACTION_META } from "../../products/constants/action-defs";
|
|
17
|
+
import { useAvailabilityScope } from "../../products/hooks/useAvailabilityScope";
|
|
18
|
+
const LISTING_TYPES = ["stickers"];
|
|
17
19
|
const COLUMNS = [
|
|
18
20
|
{ key: "title", header: "Listing", render: (row) => _jsx(Text, { size: "sm", weight: "medium", children: row.title }) },
|
|
19
21
|
{ key: "price", header: "Price", render: (row) => _jsx(Text, { className: "tabular-nums", size: "sm", children: row.price }) },
|
|
@@ -57,6 +59,7 @@ export function SellerStickersView({ onCreateClick, onEditClick, onDelete, onBul
|
|
|
57
59
|
else
|
|
58
60
|
window.location.href = String(ROUTES.STORE.STICKERS_NEW);
|
|
59
61
|
}, [onCreateClick]);
|
|
62
|
+
const scope = useAvailabilityScope(LISTING_TYPES);
|
|
60
63
|
const config = {
|
|
61
64
|
portal: "seller",
|
|
62
65
|
title: "Stickers",
|
|
@@ -87,6 +90,8 @@ export function SellerStickersView({ onCreateClick, onEditClick, onDelete, onBul
|
|
|
87
90
|
}),
|
|
88
91
|
getTotal: (response, mappedRows) => typeof response.meta?.total === "number" ? response.meta.total : mappedRows.length,
|
|
89
92
|
buildFilters: () => "listingType==stickers",
|
|
93
|
+
buildExtraParams: () => scope.extraParams,
|
|
94
|
+
renderAboveContent: scope.renderAboveContent,
|
|
90
95
|
primaryAction: { label: "New Sticker Listing", onClick: () => handleCreate() },
|
|
91
96
|
// Mirrors the "Edit" row action below so table rows and cards both navigate on click.
|
|
92
97
|
onRowClick: (row) => handleEdit(row.id),
|
|
@@ -13,8 +13,6 @@ export { SellerOrdersView, SellerOrderDetailPanel } from "./SellerOrdersView";
|
|
|
13
13
|
export type { SellerOrdersViewProps } from "./SellerOrdersView";
|
|
14
14
|
export { SellerOffersView } from "./SellerOffersView";
|
|
15
15
|
export type { SellerOffersViewProps } from "./SellerOffersView";
|
|
16
|
-
export { SellerOffersPanel } from "./SellerOffersPanel";
|
|
17
|
-
export type { SellerOffersPanelProps, SellerOfferAction } from "./SellerOffersPanel";
|
|
18
16
|
export { SellerCouponsView } from "./SellerCouponsView";
|
|
19
17
|
export type { SellerCouponsViewProps } from "./SellerCouponsView";
|
|
20
18
|
export { SellerCouponEditorView } from "./SellerCouponEditorView";
|
|
@@ -6,7 +6,6 @@ export { SellerPrizeDrawsView } from "./SellerPrizeDrawsView";
|
|
|
6
6
|
export { PrintCenterView } from "./PrintCenterView";
|
|
7
7
|
export { SellerOrdersView, SellerOrderDetailPanel } from "./SellerOrdersView";
|
|
8
8
|
export { SellerOffersView } from "./SellerOffersView";
|
|
9
|
-
export { SellerOffersPanel } from "./SellerOffersPanel";
|
|
10
9
|
export { SellerCouponsView } from "./SellerCouponsView";
|
|
11
10
|
export { SellerCouponEditorView } from "./SellerCouponEditorView";
|
|
12
11
|
export { SellerBidsView } from "./SellerBidsView";
|