@mohasinac/appkit 4.13.0 → 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 +2 -2
|
@@ -70,6 +70,33 @@ export function resolveMinBid(currentBidAmount, tiers, override, opts) {
|
|
|
70
70
|
return currentBidAmount;
|
|
71
71
|
return currentBidAmount + resolveMinBidIncrement(currentBidAmount, tiers, override);
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* The single definition of "can this auction be bought outright right now".
|
|
75
|
+
*
|
|
76
|
+
* Written once for the same reason `resolveMinBid` is: the predicate had been
|
|
77
|
+
* hand-written in five places (the bid form, three spots on the auction detail
|
|
78
|
+
* page, the marketplace card) and they disagreed — the detail page advertised
|
|
79
|
+
* "Buy Now: ₹5,999" from a two-condition check while the button beneath it used
|
|
80
|
+
* a three-condition one, so most auctions showed a price with no button under
|
|
81
|
+
* it. That is the drift shape Root Cause #30 describes.
|
|
82
|
+
*
|
|
83
|
+
* The old third condition was `!bidsHaveStarted` (eBay's rule: BIN vanishes the
|
|
84
|
+
* moment anyone bids). It is deliberately gone. Buyout now stays available for
|
|
85
|
+
* as long as it is still a better deal than the standing bid, which is the
|
|
86
|
+
* condition that actually matters — a BIN price the bidding has already passed
|
|
87
|
+
* is meaningless, and one it hasn't is still a real offer.
|
|
88
|
+
*
|
|
89
|
+
* `isSold` is optional because client callers rendering a live auction page
|
|
90
|
+
* already know it isn't sold; server callers should always pass it.
|
|
91
|
+
*/
|
|
92
|
+
export function isBuyNowAvailable({ buyNowPrice, currentBid, isEnded, isSold, }) {
|
|
93
|
+
if (isEnded || isSold === true)
|
|
94
|
+
return false;
|
|
95
|
+
if (typeof buyNowPrice !== "number" || !Number.isFinite(buyNowPrice) || buyNowPrice <= 0) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return buyNowPrice > (currentBid ?? 0);
|
|
99
|
+
}
|
|
73
100
|
/**
|
|
74
101
|
* Preset step multipliers offered by the bid form, as multiples of the
|
|
75
102
|
* effective minimum increment. With a ₹100 increment this renders
|
|
@@ -16,8 +16,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
|
|
|
16
16
|
status: "draft" | "published";
|
|
17
17
|
title: string;
|
|
18
18
|
content: string;
|
|
19
|
-
category: string;
|
|
20
19
|
slug: string;
|
|
20
|
+
category: string;
|
|
21
21
|
tags: string[];
|
|
22
22
|
isFeatured: boolean;
|
|
23
23
|
youtubeId?: string | undefined;
|
|
@@ -28,8 +28,8 @@ export declare const blogPostInputSchema: z.ZodObject<{
|
|
|
28
28
|
}, {
|
|
29
29
|
title: string;
|
|
30
30
|
content: string;
|
|
31
|
-
category: string;
|
|
32
31
|
slug: string;
|
|
32
|
+
category: string;
|
|
33
33
|
status?: "draft" | "published" | undefined;
|
|
34
34
|
youtubeId?: string | undefined;
|
|
35
35
|
tags?: string[] | undefined;
|
|
@@ -15,25 +15,25 @@ export declare const addToCartSchema: z.ZodObject<{
|
|
|
15
15
|
}, "strip", z.ZodTypeAny, {
|
|
16
16
|
currency: string;
|
|
17
17
|
storeId: string;
|
|
18
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
19
18
|
price: number;
|
|
20
|
-
|
|
19
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
21
20
|
productId: string;
|
|
22
21
|
productTitle: string;
|
|
23
22
|
quantity: number;
|
|
23
|
+
storeName: string;
|
|
24
24
|
productImage: string;
|
|
25
25
|
offerId?: string | undefined;
|
|
26
26
|
lockedPrice?: number | undefined;
|
|
27
27
|
isOffer?: boolean | undefined;
|
|
28
28
|
}, {
|
|
29
29
|
storeId: string;
|
|
30
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
31
30
|
price: number;
|
|
31
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
32
32
|
productId: string;
|
|
33
33
|
productTitle: string;
|
|
34
34
|
currency?: string | undefined;
|
|
35
|
-
storeName?: string | undefined;
|
|
36
35
|
quantity?: number | undefined;
|
|
36
|
+
storeName?: string | undefined;
|
|
37
37
|
productImage?: string | undefined;
|
|
38
38
|
offerId?: string | undefined;
|
|
39
39
|
lockedPrice?: number | undefined;
|
|
@@ -73,25 +73,25 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
73
73
|
}, "strip", z.ZodTypeAny, {
|
|
74
74
|
currency: string;
|
|
75
75
|
storeId: string;
|
|
76
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
77
76
|
price: number;
|
|
78
|
-
|
|
77
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
79
78
|
productId: string;
|
|
80
79
|
productTitle: string;
|
|
81
80
|
quantity: number;
|
|
81
|
+
storeName: string;
|
|
82
82
|
productImage: string;
|
|
83
83
|
offerId?: string | undefined;
|
|
84
84
|
lockedPrice?: number | undefined;
|
|
85
85
|
isOffer?: boolean | undefined;
|
|
86
86
|
}, {
|
|
87
87
|
storeId: string;
|
|
88
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
89
88
|
price: number;
|
|
89
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
90
90
|
productId: string;
|
|
91
91
|
productTitle: string;
|
|
92
92
|
currency?: string | undefined;
|
|
93
|
-
storeName?: string | undefined;
|
|
94
93
|
quantity?: number | undefined;
|
|
94
|
+
storeName?: string | undefined;
|
|
95
95
|
productImage?: string | undefined;
|
|
96
96
|
offerId?: string | undefined;
|
|
97
97
|
lockedPrice?: number | undefined;
|
|
@@ -101,12 +101,12 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
101
101
|
guestItems: {
|
|
102
102
|
currency: string;
|
|
103
103
|
storeId: string;
|
|
104
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
105
104
|
price: number;
|
|
106
|
-
|
|
105
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
107
106
|
productId: string;
|
|
108
107
|
productTitle: string;
|
|
109
108
|
quantity: number;
|
|
109
|
+
storeName: string;
|
|
110
110
|
productImage: string;
|
|
111
111
|
offerId?: string | undefined;
|
|
112
112
|
lockedPrice?: number | undefined;
|
|
@@ -115,13 +115,13 @@ export declare const mergeGuestCartSchema: z.ZodObject<{
|
|
|
115
115
|
}, {
|
|
116
116
|
guestItems: {
|
|
117
117
|
storeId: string;
|
|
118
|
-
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
119
118
|
price: number;
|
|
119
|
+
listingType: "classified" | "standard" | "auction" | "pre-order" | "prize-draw" | "digital-code" | "live";
|
|
120
120
|
productId: string;
|
|
121
121
|
productTitle: string;
|
|
122
122
|
currency?: string | undefined;
|
|
123
|
-
storeName?: string | undefined;
|
|
124
123
|
quantity?: number | undefined;
|
|
124
|
+
storeName?: string | undefined;
|
|
125
125
|
productImage?: string | undefined;
|
|
126
126
|
offerId?: string | undefined;
|
|
127
127
|
lockedPrice?: number | undefined;
|
|
@@ -26,35 +26,35 @@ export declare const bundleQueryRuleSchema: z.ZodDiscriminatedUnion<"type", [z.Z
|
|
|
26
26
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
27
27
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
28
28
|
}, "strip", z.ZodTypeAny, {
|
|
29
|
-
|
|
29
|
+
categorySlug?: string | undefined;
|
|
30
30
|
brandSlug?: string | undefined;
|
|
31
31
|
tags?: string[] | undefined;
|
|
32
|
-
categorySlug?: string | undefined;
|
|
33
|
-
}, {
|
|
34
32
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
categorySlug?: string | undefined;
|
|
35
35
|
brandSlug?: string | undefined;
|
|
36
36
|
tags?: string[] | undefined;
|
|
37
|
-
|
|
37
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
38
38
|
}>;
|
|
39
39
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
40
40
|
limit: z.ZodNumber;
|
|
41
41
|
}, "strip", z.ZodTypeAny, {
|
|
42
42
|
type: "dynamic";
|
|
43
43
|
filter: {
|
|
44
|
-
|
|
44
|
+
categorySlug?: string | undefined;
|
|
45
45
|
brandSlug?: string | undefined;
|
|
46
46
|
tags?: string[] | undefined;
|
|
47
|
-
|
|
47
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
48
48
|
};
|
|
49
49
|
limit: number;
|
|
50
50
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
51
51
|
}, {
|
|
52
52
|
type: "dynamic";
|
|
53
53
|
filter: {
|
|
54
|
-
|
|
54
|
+
categorySlug?: string | undefined;
|
|
55
55
|
brandSlug?: string | undefined;
|
|
56
56
|
tags?: string[] | undefined;
|
|
57
|
-
|
|
57
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
58
58
|
};
|
|
59
59
|
limit: number;
|
|
60
60
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -102,35 +102,35 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
102
102
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
103
103
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
104
104
|
}, "strip", z.ZodTypeAny, {
|
|
105
|
-
|
|
105
|
+
categorySlug?: string | undefined;
|
|
106
106
|
brandSlug?: string | undefined;
|
|
107
107
|
tags?: string[] | undefined;
|
|
108
|
-
categorySlug?: string | undefined;
|
|
109
|
-
}, {
|
|
110
108
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
109
|
+
}, {
|
|
110
|
+
categorySlug?: string | undefined;
|
|
111
111
|
brandSlug?: string | undefined;
|
|
112
112
|
tags?: string[] | undefined;
|
|
113
|
-
|
|
113
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
114
114
|
}>;
|
|
115
115
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
116
116
|
limit: z.ZodNumber;
|
|
117
117
|
}, "strip", z.ZodTypeAny, {
|
|
118
118
|
type: "dynamic";
|
|
119
119
|
filter: {
|
|
120
|
-
|
|
120
|
+
categorySlug?: string | undefined;
|
|
121
121
|
brandSlug?: string | undefined;
|
|
122
122
|
tags?: string[] | undefined;
|
|
123
|
-
|
|
123
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
124
124
|
};
|
|
125
125
|
limit: number;
|
|
126
126
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
127
127
|
}, {
|
|
128
128
|
type: "dynamic";
|
|
129
129
|
filter: {
|
|
130
|
-
|
|
130
|
+
categorySlug?: string | undefined;
|
|
131
131
|
brandSlug?: string | undefined;
|
|
132
132
|
tags?: string[] | undefined;
|
|
133
|
-
|
|
133
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
134
134
|
};
|
|
135
135
|
limit: number;
|
|
136
136
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -172,10 +172,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
172
172
|
} | {
|
|
173
173
|
type: "dynamic";
|
|
174
174
|
filter: {
|
|
175
|
-
|
|
175
|
+
categorySlug?: string | undefined;
|
|
176
176
|
brandSlug?: string | undefined;
|
|
177
177
|
tags?: string[] | undefined;
|
|
178
|
-
|
|
178
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
179
179
|
};
|
|
180
180
|
limit: number;
|
|
181
181
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -204,10 +204,10 @@ export declare const bundleCreateSchema: z.ZodObject<{
|
|
|
204
204
|
} | {
|
|
205
205
|
type: "dynamic";
|
|
206
206
|
filter: {
|
|
207
|
-
|
|
207
|
+
categorySlug?: string | undefined;
|
|
208
208
|
brandSlug?: string | undefined;
|
|
209
209
|
tags?: string[] | undefined;
|
|
210
|
-
|
|
210
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
211
211
|
};
|
|
212
212
|
limit: number;
|
|
213
213
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -250,35 +250,35 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
250
250
|
/** Eligible listing types for a dynamic bundle rule. */
|
|
251
251
|
listingType: z.ZodOptional<z.ZodEnum<["standard", "pre-order", "prize-draw"]>>;
|
|
252
252
|
}, "strip", z.ZodTypeAny, {
|
|
253
|
-
|
|
253
|
+
categorySlug?: string | undefined;
|
|
254
254
|
brandSlug?: string | undefined;
|
|
255
255
|
tags?: string[] | undefined;
|
|
256
|
-
categorySlug?: string | undefined;
|
|
257
|
-
}, {
|
|
258
256
|
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
257
|
+
}, {
|
|
258
|
+
categorySlug?: string | undefined;
|
|
259
259
|
brandSlug?: string | undefined;
|
|
260
260
|
tags?: string[] | undefined;
|
|
261
|
-
|
|
261
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
262
262
|
}>;
|
|
263
263
|
orderBy: z.ZodOptional<z.ZodEnum<["price-asc", "price-desc", "createdAt-desc"]>>;
|
|
264
264
|
limit: z.ZodNumber;
|
|
265
265
|
}, "strip", z.ZodTypeAny, {
|
|
266
266
|
type: "dynamic";
|
|
267
267
|
filter: {
|
|
268
|
-
|
|
268
|
+
categorySlug?: string | undefined;
|
|
269
269
|
brandSlug?: string | undefined;
|
|
270
270
|
tags?: string[] | undefined;
|
|
271
|
-
|
|
271
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
272
272
|
};
|
|
273
273
|
limit: number;
|
|
274
274
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
275
275
|
}, {
|
|
276
276
|
type: "dynamic";
|
|
277
277
|
filter: {
|
|
278
|
-
|
|
278
|
+
categorySlug?: string | undefined;
|
|
279
279
|
brandSlug?: string | undefined;
|
|
280
280
|
tags?: string[] | undefined;
|
|
281
|
-
|
|
281
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
282
282
|
};
|
|
283
283
|
limit: number;
|
|
284
284
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -331,10 +331,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
331
331
|
} | {
|
|
332
332
|
type: "dynamic";
|
|
333
333
|
filter: {
|
|
334
|
-
|
|
334
|
+
categorySlug?: string | undefined;
|
|
335
335
|
brandSlug?: string | undefined;
|
|
336
336
|
tags?: string[] | undefined;
|
|
337
|
-
|
|
337
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
338
338
|
};
|
|
339
339
|
limit: number;
|
|
340
340
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -362,10 +362,10 @@ export declare const bundleUpdateSchema: z.ZodObject<{
|
|
|
362
362
|
} | {
|
|
363
363
|
type: "dynamic";
|
|
364
364
|
filter: {
|
|
365
|
-
|
|
365
|
+
categorySlug?: string | undefined;
|
|
366
366
|
brandSlug?: string | undefined;
|
|
367
367
|
tags?: string[] | undefined;
|
|
368
|
-
|
|
368
|
+
listingType?: "standard" | "pre-order" | "prize-draw" | undefined;
|
|
369
369
|
};
|
|
370
370
|
limit: number;
|
|
371
371
|
orderBy?: "price-asc" | "price-desc" | "createdAt-desc" | undefined;
|
|
@@ -44,13 +44,23 @@ export interface EmiInstallmentPlan {
|
|
|
44
44
|
/** Decimal rupees. */
|
|
45
45
|
amount: number;
|
|
46
46
|
}
|
|
47
|
-
export interface EmiScheduleResult {
|
|
47
|
+
export interface EmiScheduleResult extends BuyerEmiQuote {
|
|
48
|
+
surchargeSellerShare: number;
|
|
49
|
+
surchargePlatformShare: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The buyer-visible half of an EMI schedule — everything the checkout UI
|
|
53
|
+
* renders, with the platform/seller surcharge split deliberately absent.
|
|
54
|
+
*
|
|
55
|
+
* This exists so the browser never needs `surchargeSellerSharePercent`, an
|
|
56
|
+
* internal revenue-split figure. `computeEmiSchedule` below adds the split
|
|
57
|
+
* back for the two server-side order-creation callers.
|
|
58
|
+
*/
|
|
59
|
+
export interface BuyerEmiQuote {
|
|
48
60
|
/** Down payment collected at checkout, decimal rupees. */
|
|
49
61
|
tokenAmount: number;
|
|
50
62
|
/** Total surcharge across the whole tenure, decimal rupees. */
|
|
51
63
|
surchargeAmount: number;
|
|
52
|
-
surchargeSellerShare: number;
|
|
53
|
-
surchargePlatformShare: number;
|
|
54
64
|
installments: EmiInstallmentPlan[];
|
|
55
65
|
/** Sum of all installment amounts — what's still owed after the token. */
|
|
56
66
|
remainingBalance: number;
|
|
@@ -60,4 +70,15 @@ export interface EmiScheduleResult {
|
|
|
60
70
|
* calendar month AFTER purchase, regardless of which day of the current
|
|
61
71
|
* month the purchase happens on.
|
|
62
72
|
*/
|
|
73
|
+
export declare function computeBuyerEmiQuote(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth">, purchaseDate?: Date): BuyerEmiQuote;
|
|
74
|
+
/**
|
|
75
|
+
* Server-side schedule — the buyer quote plus the platform/seller surcharge
|
|
76
|
+
* split. Order creation needs the split; the checkout UI does not, and must
|
|
77
|
+
* use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
|
|
78
|
+
* shipped to the browser.
|
|
79
|
+
*
|
|
80
|
+
* `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
|
|
81
|
+
* to 0 would let a server caller that forgot to pass it silently record a zero
|
|
82
|
+
* seller share on a real order.
|
|
83
|
+
*/
|
|
63
84
|
export declare function computeEmiSchedule(sellerSubtotal: number, tenureMonths: number, settings: Pick<EmiSettings, "tokenPercent" | "billingDay" | "surchargePercentPerMonth" | "surchargeSellerSharePercent">, purchaseDate?: Date): EmiScheduleResult;
|
|
@@ -35,12 +35,10 @@ export function checkEmiEligibility(sellerSubtotal, sellerEmiEnabled, settings)
|
|
|
35
35
|
* calendar month AFTER purchase, regardless of which day of the current
|
|
36
36
|
* month the purchase happens on.
|
|
37
37
|
*/
|
|
38
|
-
export function
|
|
38
|
+
export function computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
|
|
39
39
|
const tokenAmount = roundRupees(sellerSubtotal * (settings.tokenPercent / 100));
|
|
40
40
|
const principalRemaining = sellerSubtotal - tokenAmount;
|
|
41
41
|
const surchargeAmount = roundRupees(principalRemaining * (settings.surchargePercentPerMonth / 100) * tenureMonths);
|
|
42
|
-
const surchargeSellerShare = roundRupees(surchargeAmount * (settings.surchargeSellerSharePercent / 100));
|
|
43
|
-
const surchargePlatformShare = roundRupees(surchargeAmount - surchargeSellerShare);
|
|
44
42
|
const totalToInstall = roundRupees(principalRemaining + surchargeAmount);
|
|
45
43
|
const baseInstallment = roundRupees(Math.floor((totalToInstall / tenureMonths) * 100) / 100);
|
|
46
44
|
const remainder = roundRupees(totalToInstall - baseInstallment * tenureMonths);
|
|
@@ -55,9 +53,26 @@ export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purch
|
|
|
55
53
|
return {
|
|
56
54
|
tokenAmount,
|
|
57
55
|
surchargeAmount,
|
|
58
|
-
surchargeSellerShare,
|
|
59
|
-
surchargePlatformShare,
|
|
60
56
|
installments,
|
|
61
57
|
remainingBalance: totalToInstall,
|
|
62
58
|
};
|
|
63
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Server-side schedule — the buyer quote plus the platform/seller surcharge
|
|
62
|
+
* split. Order creation needs the split; the checkout UI does not, and must
|
|
63
|
+
* use `computeBuyerEmiQuote` so `surchargeSellerSharePercent` never has to be
|
|
64
|
+
* shipped to the browser.
|
|
65
|
+
*
|
|
66
|
+
* `surchargeSellerSharePercent` stays REQUIRED here on purpose: defaulting it
|
|
67
|
+
* to 0 would let a server caller that forgot to pass it silently record a zero
|
|
68
|
+
* seller share on a real order.
|
|
69
|
+
*/
|
|
70
|
+
export function computeEmiSchedule(sellerSubtotal, tenureMonths, settings, purchaseDate = new Date()) {
|
|
71
|
+
const quote = computeBuyerEmiQuote(sellerSubtotal, tenureMonths, settings, purchaseDate);
|
|
72
|
+
const surchargeSellerShare = roundRupees(quote.surchargeAmount * (settings.surchargeSellerSharePercent / 100));
|
|
73
|
+
return {
|
|
74
|
+
...quote,
|
|
75
|
+
surchargeSellerShare,
|
|
76
|
+
surchargePlatformShare: roundRupees(quote.surchargeAmount - surchargeSellerShare),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -58,9 +58,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
|
|
|
58
58
|
location?: string | undefined;
|
|
59
59
|
description?: string | undefined;
|
|
60
60
|
tags?: string[] | undefined;
|
|
61
|
-
maxEntries?: number | undefined;
|
|
62
61
|
startsAt?: string | undefined;
|
|
63
62
|
endsAt?: string | undefined;
|
|
63
|
+
maxEntries?: number | undefined;
|
|
64
64
|
imageUrl?: string | undefined;
|
|
65
65
|
entryFee?: number | undefined;
|
|
66
66
|
isOnline?: boolean | undefined;
|
|
@@ -70,9 +70,9 @@ export declare const eventUpdateSchema: z.ZodObject<Omit<{
|
|
|
70
70
|
location?: string | undefined;
|
|
71
71
|
description?: string | undefined;
|
|
72
72
|
tags?: string[] | undefined;
|
|
73
|
-
maxEntries?: number | undefined;
|
|
74
73
|
startsAt?: string | undefined;
|
|
75
74
|
endsAt?: string | undefined;
|
|
75
|
+
maxEntries?: number | undefined;
|
|
76
76
|
imageUrl?: string | undefined;
|
|
77
77
|
entryFee?: number | undefined;
|
|
78
78
|
isOnline?: boolean | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SectionType } from "../../../../features/homepage/schemas/firestore";
|
|
2
|
+
import type { FeatureFlagKey } from "../../../../features/admin/schemas/firestore";
|
|
3
|
+
/** Section types that require a feature flag to be enabled to show on the homepage. */
|
|
4
|
+
export declare const SECTION_FEATURE_GATE: Partial<Record<SectionType, FeatureFlagKey>>;
|
|
5
|
+
/**
|
|
6
|
+
* Drop sections whose feature flag is off.
|
|
7
|
+
*
|
|
8
|
+
* A section type with no gate entry always passes, and a MISSING flag value
|
|
9
|
+
* counts as enabled (`!== false`) — the flags map is partial, and a section
|
|
10
|
+
* must not vanish just because an admin has never opened Site Settings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function filterSectionsByFeatureFlags<T extends {
|
|
13
|
+
type: string;
|
|
14
|
+
}>(sections: readonly T[], flags: Partial<Record<FeatureFlagKey, unknown>> | null | undefined): T[];
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The only code in the repo that gated homepage sections on
|
|
3
|
+
* `siteSettings.featureFlags` lived inside `getHomepageInitial`, a
|
|
4
|
+
* function with ZERO call sites — the live homepage
|
|
5
|
+
* (`MarketplaceHomepageView`) reads `homepageSectionsRepository`
|
|
6
|
+
* directly. So turning off the `auctions` flag hid auctions everywhere
|
|
7
|
+
* except the homepage, which kept advertising them.
|
|
8
|
+
*
|
|
9
|
+
* `getHomepageInitial` itself was deleted rather than wired up: its other
|
|
10
|
+
* unique calls, `findActiveAuctions()` / `findActivePreOrders()`, are
|
|
11
|
+
* unbounded `.get()` collection scans with no `.limit()`, which Rule #6
|
|
12
|
+
* forbids. The gate is the only part worth keeping, so it moved here.
|
|
13
|
+
*
|
|
14
|
+
* EXPORTS: SECTION_FEATURE_GATE, filterSectionsByFeatureFlags
|
|
15
|
+
*
|
|
16
|
+
* @tag domain:homepage
|
|
17
|
+
* @tag layer:shared
|
|
18
|
+
* @tag pattern:none
|
|
19
|
+
* @tag access:isomorphic
|
|
20
|
+
* @tag consumers:MarketplaceHomepageView
|
|
21
|
+
* @tag sideEffects:none
|
|
22
|
+
*/
|
|
23
|
+
/** Section types that require a feature flag to be enabled to show on the homepage. */
|
|
24
|
+
export const SECTION_FEATURE_GATE = {
|
|
25
|
+
auctions: "auctions",
|
|
26
|
+
"pre-orders": "preOrders",
|
|
27
|
+
events: "events",
|
|
28
|
+
"event-raffles": "events",
|
|
29
|
+
"prize-draws": "events",
|
|
30
|
+
"blog-articles": "blog",
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Drop sections whose feature flag is off.
|
|
34
|
+
*
|
|
35
|
+
* A section type with no gate entry always passes, and a MISSING flag value
|
|
36
|
+
* counts as enabled (`!== false`) — the flags map is partial, and a section
|
|
37
|
+
* must not vanish just because an admin has never opened Site Settings.
|
|
38
|
+
*/
|
|
39
|
+
export function filterSectionsByFeatureFlags(sections,
|
|
40
|
+
// Not `Partial<Record<FeatureFlagKey, boolean>>`: two of the flag keys
|
|
41
|
+
// (`listingTypes`, `categoryTypes`) hold nested per-type objects rather than
|
|
42
|
+
// booleans. Neither is a gate key, so the `=== false` test below simply
|
|
43
|
+
// never fires for them.
|
|
44
|
+
flags) {
|
|
45
|
+
if (!flags)
|
|
46
|
+
return [...sections];
|
|
47
|
+
return sections.filter((section) => {
|
|
48
|
+
const flagKey = SECTION_FEATURE_GATE[section.type];
|
|
49
|
+
return !flagKey || flags[flagKey] !== false;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The floor, as a percentage of the listed price, below which an offer is
|
|
3
|
+
* rejected — used whenever a listing does not set its own `minOfferPercent`.
|
|
4
|
+
*
|
|
5
|
+
* 70, not 50. This resolves a real disagreement rather than picking a number:
|
|
6
|
+
* 70 is what `makeOffer` has always enforced, so a listing created through
|
|
7
|
+
* either seller editor (which seeded 50) has in practice behaved as 70 the whole
|
|
8
|
+
* time — the forms were lying to sellers. Lowering the server to 50 would
|
|
9
|
+
* silently loosen the rule on every listing that already exists; raising the
|
|
10
|
+
* forms to 70 changes only what new listings are seeded with and makes the UI
|
|
11
|
+
* honest about the rule already in force.
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_MIN_OFFER_PERCENT = 70;
|
|
14
|
+
/**
|
|
15
|
+
* The lowest amount this listing will accept as an offer.
|
|
16
|
+
*
|
|
17
|
+
* Rounded UP to the paisa, so the returned value always satisfies the
|
|
18
|
+
* percentage rule it was derived from — rounding down could return a number
|
|
19
|
+
* fractionally below the true floor, which the server would then reject while
|
|
20
|
+
* the UI displayed it as the minimum.
|
|
21
|
+
*/
|
|
22
|
+
export declare function minOfferAmount(listedPrice: number, percent?: number | null): number;
|
|
23
|
+
/**
|
|
24
|
+
* Whether `amount` is a legal offer on a listing priced at `listedPrice`.
|
|
25
|
+
*
|
|
26
|
+
* Both bounds matter and both are enforced server-side: at or above the listed
|
|
27
|
+
* price there is nothing to negotiate (the buyer should use Add to Cart), and
|
|
28
|
+
* below the floor the seller has said they don't want to hear it.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isOfferAmountValid(amount: number, listedPrice: number, percent?: number | null): boolean;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: The minimum-offer rule had four independent implementations that did not
|
|
3
|
+
* agree. `makeOffer` enforced a 70% floor rounded with
|
|
4
|
+
* `Math.ceil(price * pct / 100 * 100) / 100`; `MakeOfferButton` computed
|
|
5
|
+
* its own floor with `roundRupees()` and seeded the input from it; and both
|
|
6
|
+
* seller editors wrote `minOfferPercent ?? 50` when the toggle was flipped
|
|
7
|
+
* on. So the forms advertised a 50% floor the server would reject, and even
|
|
8
|
+
* at a matching percentage the two rounding rules could differ by a rupee —
|
|
9
|
+
* the button seeding an amount its own submit then bounced.
|
|
10
|
+
* WHAT: One percentage default and one floor function, imported by every gate.
|
|
11
|
+
* Same discipline as `resolveMinBid` in the auctions config next door.
|
|
12
|
+
*
|
|
13
|
+
* EXPORTS:
|
|
14
|
+
* DEFAULT_MIN_OFFER_PERCENT, minOfferAmount, isOfferAmountValid
|
|
15
|
+
*
|
|
16
|
+
* @tag domain:offers,seller
|
|
17
|
+
* @tag layer:shared
|
|
18
|
+
* @tag pattern:none
|
|
19
|
+
* @tag access:isomorphic
|
|
20
|
+
* @tag consumers:offer-actions,MakeOfferButton,ProductDetailPageView,ProductForm,SellerProductShell
|
|
21
|
+
* @tag sideEffects:none
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* The floor, as a percentage of the listed price, below which an offer is
|
|
25
|
+
* rejected — used whenever a listing does not set its own `minOfferPercent`.
|
|
26
|
+
*
|
|
27
|
+
* 70, not 50. This resolves a real disagreement rather than picking a number:
|
|
28
|
+
* 70 is what `makeOffer` has always enforced, so a listing created through
|
|
29
|
+
* either seller editor (which seeded 50) has in practice behaved as 70 the whole
|
|
30
|
+
* time — the forms were lying to sellers. Lowering the server to 50 would
|
|
31
|
+
* silently loosen the rule on every listing that already exists; raising the
|
|
32
|
+
* forms to 70 changes only what new listings are seeded with and makes the UI
|
|
33
|
+
* honest about the rule already in force.
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_MIN_OFFER_PERCENT = 70;
|
|
36
|
+
/**
|
|
37
|
+
* The lowest amount this listing will accept as an offer.
|
|
38
|
+
*
|
|
39
|
+
* Rounded UP to the paisa, so the returned value always satisfies the
|
|
40
|
+
* percentage rule it was derived from — rounding down could return a number
|
|
41
|
+
* fractionally below the true floor, which the server would then reject while
|
|
42
|
+
* the UI displayed it as the minimum.
|
|
43
|
+
*/
|
|
44
|
+
export function minOfferAmount(listedPrice, percent) {
|
|
45
|
+
const pct = typeof percent === "number" && Number.isFinite(percent) && percent > 0
|
|
46
|
+
? percent
|
|
47
|
+
: DEFAULT_MIN_OFFER_PERCENT;
|
|
48
|
+
return Math.ceil(listedPrice * (pct / 100) * 100) / 100;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether `amount` is a legal offer on a listing priced at `listedPrice`.
|
|
52
|
+
*
|
|
53
|
+
* Both bounds matter and both are enforced server-side: at or above the listed
|
|
54
|
+
* price there is nothing to negotiate (the buyer should use Add to Cart), and
|
|
55
|
+
* below the floor the seller has said they don't want to hear it.
|
|
56
|
+
*/
|
|
57
|
+
export function isOfferAmountValid(amount, listedPrice, percent) {
|
|
58
|
+
return amount >= minOfferAmount(listedPrice, percent) && amount < listedPrice;
|
|
59
|
+
}
|
|
@@ -24,18 +24,18 @@ export declare const createOrderSchema: z.ZodObject<{
|
|
|
24
24
|
country: z.ZodDefault<z.ZodString>;
|
|
25
25
|
}, "strip", z.ZodTypeAny, {
|
|
26
26
|
country: string;
|
|
27
|
-
phone: string;
|
|
28
|
-
city: string;
|
|
29
27
|
fullName: string;
|
|
28
|
+
phone: string;
|
|
30
29
|
addressLine1: string;
|
|
30
|
+
city: string;
|
|
31
31
|
state: string;
|
|
32
32
|
pincode: string;
|
|
33
33
|
addressLine2?: string | undefined;
|
|
34
34
|
}, {
|
|
35
|
-
phone: string;
|
|
36
|
-
city: string;
|
|
37
35
|
fullName: string;
|
|
36
|
+
phone: string;
|
|
38
37
|
addressLine1: string;
|
|
38
|
+
city: string;
|
|
39
39
|
state: string;
|
|
40
40
|
pincode: string;
|
|
41
41
|
country?: string | undefined;
|
|
@@ -47,10 +47,10 @@ export declare const createOrderSchema: z.ZodObject<{
|
|
|
47
47
|
paymentMethod: "upi" | "razorpay" | "cod";
|
|
48
48
|
shippingAddress: {
|
|
49
49
|
country: string;
|
|
50
|
-
phone: string;
|
|
51
|
-
city: string;
|
|
52
50
|
fullName: string;
|
|
51
|
+
phone: string;
|
|
53
52
|
addressLine1: string;
|
|
53
|
+
city: string;
|
|
54
54
|
state: string;
|
|
55
55
|
pincode: string;
|
|
56
56
|
addressLine2?: string | undefined;
|
|
@@ -64,10 +64,10 @@ export declare const createOrderSchema: z.ZodObject<{
|
|
|
64
64
|
}, {
|
|
65
65
|
paymentMethod: "upi" | "razorpay" | "cod";
|
|
66
66
|
shippingAddress: {
|
|
67
|
-
phone: string;
|
|
68
|
-
city: string;
|
|
69
67
|
fullName: string;
|
|
68
|
+
phone: string;
|
|
70
69
|
addressLine1: string;
|
|
70
|
+
city: string;
|
|
71
71
|
state: string;
|
|
72
72
|
pincode: string;
|
|
73
73
|
country?: string | undefined;
|