@mohasinac/appkit 4.11.2 → 4.12.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/server/features/checkout/actions.d.ts +40 -3
- package/dist/_internal/server/features/checkout/actions.js +232 -47
- package/dist/_internal/server/features/checkout/data.d.ts +10 -0
- package/dist/_internal/server/features/orders/adapters.js +20 -0
- package/dist/_internal/server/features/products/data.d.ts +12 -3
- package/dist/_internal/server/features/products/data.js +55 -4
- 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 +47 -0
- package/dist/_internal/server/features/products/list-public.js +131 -6
- package/dist/_internal/server/features/reviews/data.d.ts +1 -1
- package/dist/_internal/server/features/reviews/data.js +3 -2
- package/dist/_internal/server/features/tester/visibility.js +3 -3
- package/dist/_internal/server/jobs/core/auctionSettlement.js +5 -2
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -1
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
- package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +2 -0
- package/dist/_internal/server/jobs/handlers/_helpers.js +4 -1
- package/dist/_internal/shared/checkout/lanes.d.ts +20 -0
- package/dist/_internal/shared/checkout/lanes.js +28 -0
- package/dist/_internal/shared/features/checkout/config.d.ts +4 -0
- package/dist/_internal/shared/features/checkout/config.js +8 -0
- package/dist/_internal/shared/features/promotions/schema.d.ts +0 -16
- package/dist/_internal/shared/features/promotions/schema.js +0 -2
- package/dist/_internal/shared/features/reviews/config.d.ts +8 -1
- package/dist/_internal/shared/features/reviews/config.js +8 -1
- package/dist/_internal/shared/fees/calculator.d.ts +34 -2
- package/dist/_internal/shared/fees/calculator.js +45 -1
- package/dist/_internal/shared/listing-types/_registry.d.ts +88 -1
- package/dist/_internal/shared/listing-types/_registry.js +63 -1
- package/dist/_internal/shared/listing-types/art/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/art/config.js +12 -0
- package/dist/_internal/shared/listing-types/auction/config.d.ts +53 -0
- package/dist/_internal/shared/listing-types/auction/config.js +17 -0
- package/dist/_internal/shared/listing-types/classified/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/classified/config.js +14 -0
- package/dist/_internal/shared/listing-types/digital-code/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/digital-code/config.js +12 -0
- package/dist/_internal/shared/listing-types/live/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/live/config.js +14 -0
- package/dist/_internal/shared/listing-types/pre-order/config.d.ts +110 -0
- package/dist/_internal/shared/listing-types/pre-order/config.js +14 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +44 -0
- package/dist/_internal/shared/listing-types/prize-draw/config.js +10 -0
- package/dist/_internal/shared/listing-types/standard/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/standard/config.js +9 -0
- package/dist/_internal/shared/listing-types/stickers/config.d.ts +59 -0
- package/dist/_internal/shared/listing-types/stickers/config.js +12 -0
- package/dist/client.d.ts +12 -2
- package/dist/client.js +8 -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 +12 -0
- package/dist/constants/field-names.js +12 -0
- package/dist/constants/table-keys.d.ts +2 -0
- package/dist/constants/table-keys.js +2 -0
- package/dist/features/account/components/UserOrdersView.js +27 -5
- package/dist/features/admin/components/AdminAddressesView.js +21 -11
- package/dist/features/admin/components/AdminArtView.d.ts +9 -0
- package/dist/features/admin/components/AdminArtView.js +11 -35
- package/dist/features/admin/components/AdminClassifiedView.d.ts +9 -0
- package/dist/features/admin/components/AdminClassifiedView.js +11 -35
- package/dist/features/admin/components/AdminCouponEditorView.js +1 -4
- package/dist/features/admin/components/AdminDigitalCodesView.d.ts +9 -0
- package/dist/features/admin/components/AdminDigitalCodesView.js +11 -42
- package/dist/features/admin/components/AdminLiveView.d.ts +9 -0
- package/dist/features/admin/components/AdminLiveView.js +11 -41
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +8 -1
- package/dist/features/admin/components/AdminOrderEditorView.js +4 -3
- package/dist/features/admin/components/AdminOrdersView.js +14 -1
- package/dist/features/admin/components/AdminPaymentMethodsView.js +18 -11
- package/dist/features/admin/components/AdminProductsView.js +34 -18
- package/dist/features/admin/components/AdminSiteConfigGuideView.js +1 -1
- package/dist/features/admin/components/AdminSiteSettingsView.js +4 -2
- package/dist/features/admin/components/AdminStickersView.d.ts +9 -0
- package/dist/features/admin/components/AdminStickersView.js +11 -35
- package/dist/features/admin/constants/filter-tabs.d.ts +26 -9
- package/dist/features/admin/constants/filter-tabs.js +22 -9
- package/dist/features/admin/hooks/useAdminListing.js +7 -2
- package/dist/features/admin/schemas/firestore.d.ts +5 -0
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/auctions/actions/bid-actions.js +2 -2
- package/dist/features/auctions/components/AuctionBidsTable.js +1 -1
- package/dist/features/auctions/components/AuctionBottomActions.js +1 -0
- package/dist/features/auctions/components/AuctionDetailPageView.js +13 -11
- package/dist/features/cart/components/CartDrawer.d.ts +9 -1
- package/dist/features/cart/components/CartDrawer.js +4 -3
- package/dist/features/cart/components/CartPriceBreakdown.d.ts +61 -0
- package/dist/features/cart/components/CartPriceBreakdown.js +25 -0
- package/dist/features/cart/components/StoreAddonsPicker.d.ts +47 -0
- package/dist/features/cart/components/StoreAddonsPicker.js +21 -0
- package/dist/features/cart/components/index.d.ts +4 -0
- package/dist/features/cart/components/index.js +2 -0
- package/dist/features/cart/repository/cart.repository.d.ts +20 -2
- package/dist/features/cart/repository/cart.repository.js +49 -0
- package/dist/features/cart/schemas/firestore.d.ts +26 -2
- package/dist/features/categories/components/BrandDetailTabs.js +31 -11
- package/dist/features/categories/components/CategoryDetailTabs.js +27 -7
- package/dist/features/categories/components/CategoryProductsListing.d.ts +9 -1
- package/dist/features/categories/components/CategoryProductsListing.js +5 -2
- package/dist/features/classified/components/ClassifiedDetailPageView.js +2 -1
- package/dist/features/contact/email.js +5 -1
- package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +17 -16
- package/dist/features/homepage/components/FeaturedResultsSection.js +1 -1
- package/dist/features/homepage/components/SectionCarousel.js +1 -1
- package/dist/features/homepage/components/ShopByCategorySection.js +1 -1
- package/dist/features/layout/AppLayoutShell.js +9 -2
- package/dist/features/layout/BottomActions.js +62 -6
- package/dist/features/layout/BottomActionsContext.d.ts +26 -0
- package/dist/features/layout/BottomActionsContext.js +18 -1
- package/dist/features/layout/hooks/useBottomActions.d.ts +12 -1
- package/dist/features/layout/hooks/useBottomActions.js +14 -1
- package/dist/features/layout/index.d.ts +1 -1
- package/dist/features/live/components/LiveItemDetailPageView.js +7 -6
- package/dist/features/orders/components/OrderAddonBadges.d.ts +36 -0
- package/dist/features/orders/components/OrderAddonBadges.js +28 -0
- package/dist/features/orders/components/index.d.ts +1 -0
- package/dist/features/orders/components/index.js +1 -0
- package/dist/features/orders/repository/orders.repository.d.ts +36 -0
- package/dist/features/orders/repository/orders.repository.js +18 -0
- package/dist/features/orders/types/index.d.ts +38 -0
- package/dist/features/pre-orders/components/PreOrderBottomActions.d.ts +1 -1
- package/dist/features/pre-orders/components/PreOrderBottomActions.js +3 -19
- package/dist/features/products/components/ArtStickersListView.js +5 -4
- package/dist/features/products/components/AuctionsIndexListing.js +1 -2
- package/dist/features/products/components/ListingBottomActions.d.ts +28 -0
- package/dist/features/products/components/ListingBottomActions.js +25 -0
- package/dist/features/products/components/PrizeDrawBottomActions.d.ts +1 -1
- package/dist/features/products/components/PrizeDrawBottomActions.js +3 -21
- package/dist/features/products/components/PrizeDrawsListingView.js +18 -33
- package/dist/features/products/components/ProductDetailActions.js +4 -0
- package/dist/features/products/components/ProductDetailPageView.js +7 -7
- package/dist/features/products/components/ProductsIndexListing.js +87 -11
- package/dist/features/products/components/ProductsIndexPageView.js +14 -2
- package/dist/features/products/config/listing-type-listing-config.d.ts +31 -0
- package/dist/features/products/config/listing-type-listing-config.js +74 -0
- package/dist/features/products/constants/listing-tabs.d.ts +43 -198
- package/dist/features/products/constants/listing-tabs.js +71 -58
- package/dist/features/products/constants/sieve.d.ts +104 -1
- package/dist/features/products/constants/sieve.js +27 -7
- package/dist/features/products/hooks/useProducts.js +14 -0
- package/dist/features/products/repository/products.repository.d.ts +45 -1
- package/dist/features/products/repository/products.repository.js +26 -3
- package/dist/features/products/types/index.d.ts +15 -0
- package/dist/features/products/utils/listing-badge-variant.d.ts +20 -1
- package/dist/features/products/utils/listing-badge-variant.js +26 -1
- package/dist/features/products/utils/listing-type.d.ts +24 -0
- package/dist/features/products/utils/listing-type.js +48 -0
- package/dist/features/promotions/actions/coupon-actions.d.ts +7 -0
- package/dist/features/promotions/actions/coupon-actions.js +12 -1
- package/dist/features/promotions/actions/coupon-stacking.d.ts +24 -0
- package/dist/features/promotions/actions/coupon-stacking.js +21 -0
- package/dist/features/promotions/actions/index.d.ts +1 -0
- package/dist/features/promotions/actions/index.js +1 -0
- package/dist/features/promotions/actions/seller-coupon-actions.d.ts +0 -1
- package/dist/features/promotions/actions/seller-coupon-actions.js +0 -1
- package/dist/features/promotions/components/CouponHelpDetails.d.ts +20 -0
- package/dist/features/promotions/components/CouponHelpDetails.js +17 -0
- package/dist/features/promotions/components/CouponsIndexListing.js +2 -1
- package/dist/features/promotions/components/index.d.ts +2 -0
- package/dist/features/promotions/components/index.js +1 -0
- package/dist/features/promotions/constants/coupon-help.d.ts +27 -0
- package/dist/features/promotions/constants/coupon-help.js +42 -0
- package/dist/features/promotions/repository/coupons.repository.d.ts +10 -1
- package/dist/features/promotions/repository/coupons.repository.js +22 -8
- package/dist/features/promotions/schemas/firestore.d.ts +0 -1
- package/dist/features/promotions/schemas/firestore.js +1 -1
- package/dist/features/promotions/schemas/index.d.ts +0 -20
- package/dist/features/promotions/schemas/index.js +0 -1
- package/dist/features/reviews/actions/review-actions.js +5 -1
- package/dist/features/reviews/components/ReviewDetailPageView.js +2 -1
- package/dist/features/reviews/components/ReviewFilters.d.ts +7 -1
- package/dist/features/reviews/components/ReviewFilters.js +4 -3
- package/dist/features/reviews/components/ReviewsIndexListing.d.ts +6 -0
- package/dist/features/reviews/components/ReviewsIndexListing.js +9 -109
- package/dist/features/reviews/components/ReviewsListingPanel.d.ts +41 -0
- package/dist/features/reviews/components/ReviewsListingPanel.js +226 -0
- package/dist/features/reviews/components/index.d.ts +2 -0
- package/dist/features/reviews/components/index.js +1 -0
- package/dist/features/reviews/hooks/useReviews.d.ts +8 -0
- package/dist/features/reviews/hooks/useReviews.js +14 -6
- package/dist/features/reviews/repository/reviews.repository.d.ts +29 -1
- package/dist/features/reviews/repository/reviews.repository.js +77 -41
- package/dist/features/reviews/types/index.d.ts +8 -1
- package/dist/features/seller/components/SellerOrdersView.js +2 -1
- package/dist/features/seller/components/SellerProductsCards.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +21 -18
- package/dist/features/stores/actions/store-query-actions.js +1 -1
- package/dist/features/stores/components/StoreArtStickersPageView.d.ts +21 -0
- package/dist/features/stores/components/StoreArtStickersPageView.js +30 -0
- package/dist/features/stores/components/StoreAuctionsListing.js +5 -11
- package/dist/features/stores/components/StoreAuctionsPageView.d.ts +4 -1
- package/dist/features/stores/components/StoreAuctionsPageView.js +17 -17
- package/dist/features/stores/components/StoreClassifiedsListing.js +7 -0
- package/dist/features/stores/components/StoreClassifiedsPageView.d.ts +4 -1
- package/dist/features/stores/components/StoreClassifiedsPageView.js +16 -12
- package/dist/features/stores/components/StoreDetailLayoutView.js +4 -3
- package/dist/features/stores/components/StoreDigitalCodesListing.js +5 -0
- package/dist/features/stores/components/StoreDigitalCodesPageView.d.ts +4 -1
- package/dist/features/stores/components/StoreDigitalCodesPageView.js +16 -12
- package/dist/features/stores/components/StoreLiveItemsListing.js +7 -0
- package/dist/features/stores/components/StoreLiveItemsPageView.d.ts +4 -1
- package/dist/features/stores/components/StoreLiveItemsPageView.js +16 -12
- package/dist/features/stores/components/StorePreOrdersListing.js +6 -11
- package/dist/features/stores/components/StorePreOrdersPageView.d.ts +4 -1
- package/dist/features/stores/components/StorePreOrdersPageView.js +17 -17
- package/dist/features/stores/components/StorePrizeDrawsPageView.d.ts +4 -8
- package/dist/features/stores/components/StorePrizeDrawsPageView.js +17 -22
- package/dist/features/stores/components/StoreProductsListing.d.ts +7 -1
- package/dist/features/stores/components/StoreProductsListing.js +3 -2
- package/dist/features/stores/components/StoreProductsPageView.d.ts +1 -1
- package/dist/features/stores/components/StoreProductsPageView.js +16 -21
- package/dist/features/stores/components/StoreReviewsListing.d.ts +4 -0
- package/dist/features/stores/components/StoreReviewsListing.js +7 -108
- package/dist/features/stores/schemas/index.d.ts +2 -2
- package/dist/features/tester/seed-data/coupons-tester-seed-data.js +3 -3
- package/dist/features/tester/seed-data/index.d.ts +1 -0
- package/dist/features/tester/seed-data/index.js +1 -0
- package/dist/features/tester/seed-data/offers-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +61 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +939 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.js +11 -2
- package/dist/next/routing/route-map.d.ts +2 -0
- package/dist/next/routing/route-map.js +5 -0
- package/dist/react/hooks/useListingTypeFlags.d.ts +12 -19
- package/dist/react/hooks/useListingTypeFlags.js +4 -9
- package/dist/schemas/registry.d.ts +0 -12
- package/dist/seed/claimed-coupons-seed-data.js +3 -3
- package/dist/seed/coupons-seed-data.js +29 -10
- package/dist/seed/faq-seed-data.js +2 -2
- package/dist/seed/manifest.js +2 -2
- package/dist/seed/reviews-seed-data.js +52 -0
- package/dist/server-entry.d.ts +1 -0
- package/dist/server-entry.js +1 -0
- package/dist/styles.css +55 -39
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Checkbox.d.ts +10 -1
- package/dist/ui/components/Checkbox.js +14 -2
- package/dist/ui/components/Checkbox.style.css +11 -0
- package/dist/ui/components/FilterChipGroup.d.ts +21 -3
- package/dist/ui/components/FilterChipGroup.js +33 -4
- package/dist/ui/components/HorizontalScroller.d.ts +1 -2
- package/dist/ui/components/HorizontalScroller.js +9 -5
- package/dist/ui/components/HorizontalScroller.style.css +43 -38
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2538,6 +2538,8 @@ export { COUPON_FIELDS } from "./features/promotions/index";
|
|
|
2538
2538
|
export { COUPON_TYPE_LABELS } from "./features/promotions/index";
|
|
2539
2539
|
export { COUPON_USAGE_SUBCOLLECTION } from "./features/promotions/index";
|
|
2540
2540
|
export { CouponCard } from "./features/promotions/index";
|
|
2541
|
+
export { CouponHelpDetails } from "./features/promotions/index";
|
|
2542
|
+
export type { CouponHelpDetailsProps } from "./features/promotions/index";
|
|
2541
2543
|
export { CouponsIndexListing } from "./features/promotions/index";
|
|
2542
2544
|
export type { CouponsIndexListingProps } from "./features/promotions/index";
|
|
2543
2545
|
export { DEFAULT_COUPON_DATA } from "./features/promotions/index";
|
|
@@ -2583,6 +2585,8 @@ export type { RestrictionsConfig } from "./features/promotions/index";
|
|
|
2583
2585
|
export type { TieredDiscount } from "./features/promotions/index";
|
|
2584
2586
|
export type { UsageConfig } from "./features/promotions/index";
|
|
2585
2587
|
export type { ValidityConfig } from "./features/promotions/index";
|
|
2588
|
+
export { detectCouponConflict } from "./features/promotions/server";
|
|
2589
|
+
export type { IncomingCoupon } from "./features/promotions/server";
|
|
2586
2590
|
export { getPromotions } from "./features/promotions/server";
|
|
2587
2591
|
export { promotionsGET } from "./features/promotions/server";
|
|
2588
2592
|
export { sellerCreateCoupon } from "./features/promotions/server";
|
|
@@ -3133,9 +3137,11 @@ export type { ProductFeatureAdminCreatePayload, ProductFeatureStoreCreatePayload
|
|
|
3133
3137
|
export { LISTING_PARAM_NAMES, parseListingParams, parseListingSearchParams, serializeListingParams, } from "./utils/listing-params";
|
|
3134
3138
|
export type { ListingParams } from "./utils/listing-params";
|
|
3135
3139
|
export { PRODUCT_FEATURE_CATEGORY_OPTIONS, PRODUCT_FEATURE_PRODUCT_TYPE_OPTIONS, PRODUCT_FEATURE_SCOPE_OPTIONS, PRODUCT_FEATURE_ICON_COLOR_OPTIONS, PRODUCT_FEATURE_SCOPE_TABS, PRODUCT_FEATURE_DEFAULT_DISPLAY_ORDER, PRODUCT_FEATURE_CARD_MAX_VISIBLE, PRODUCT_FEATURE_QUERY_STALE_MS, } from "./features/products/constants/product-features.constants";
|
|
3136
|
-
export { CATEGORY_PAGE_TABS, STORE_PAGE_TABS, SELLER_LISTING_TABS,
|
|
3137
|
-
export type { ListingTab, CategoryTabId, StoreTabId, SellerListingTabId,
|
|
3138
|
-
export { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, AUCTION_SORT_OPTIONS, AUCTION_PUBLIC_SORT_OPTIONS, PREORDER_SORT_OPTIONS, BUNDLE_SORT_OPTIONS, PRIZE_DRAW_SORT_OPTIONS,
|
|
3140
|
+
export { CATEGORY_PAGE_TABS, STORE_PAGE_TABS, SELLER_LISTING_TABS, PRODUCT_TYPE_FILTER_TABS, ART_STICKERS_TYPE_FILTER_TABS, GENERIC_PRODUCT_LISTING_TYPES, ART_STICKERS_LISTING_TYPES, } from "./features/products/constants/listing-tabs";
|
|
3141
|
+
export type { ListingTab, CategoryTabId, StoreTabId, SellerListingTabId, } from "./features/products/constants/listing-tabs";
|
|
3142
|
+
export { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, AUCTION_SORT_OPTIONS, AUCTION_PUBLIC_SORT_OPTIONS, PREORDER_SORT_OPTIONS, PREORDER_PUBLIC_SORT_OPTIONS, BUNDLE_SORT_OPTIONS, PRIZE_DRAW_SORT_OPTIONS, PRIZE_DRAW_PUBLIC_SORT_OPTIONS, } from "./features/products/constants/sieve";
|
|
3143
|
+
export { sortOptionsFor, commonSortOptionsFor, hideDefaultsFor, } from "./_internal/shared/listing-types/_registry";
|
|
3144
|
+
export type { ListingHideDefault } from "./_internal/shared/listing-types/_registry";
|
|
3139
3145
|
export type { SortOption } from "./features/products/constants/sieve";
|
|
3140
3146
|
export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs";
|
|
3141
3147
|
export type { AdminFilterTab } from "./features/admin/constants/filter-tabs";
|
package/dist/index.js
CHANGED
|
@@ -4583,6 +4583,8 @@ export { COUPON_USAGE_SUBCOLLECTION } from "./features/promotions/index";
|
|
|
4583
4583
|
// [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
|
|
4584
4584
|
// CouponCard - Component for coupon card.
|
|
4585
4585
|
export { CouponCard } from "./features/promotions/index";
|
|
4586
|
+
// CouponHelpDetails - Expandable "How coupons work" explainer (scoping + stacking rules).
|
|
4587
|
+
export { CouponHelpDetails } from "./features/promotions/index";
|
|
4586
4588
|
// CouponsIndexListing - Client component for browsing coupons with search/filter/sort.
|
|
4587
4589
|
export { CouponsIndexListing } from "./features/promotions/index";
|
|
4588
4590
|
// [SCHEMA]-Schema / data-shape constant â€" Zod validator, default-value object, or Firestore collection/field name constant.
|
|
@@ -4649,6 +4651,9 @@ export { useCouponValidate } from "./features/promotions/index";
|
|
|
4649
4651
|
// usePromotions - React hook for use promotions.
|
|
4650
4652
|
export { usePromotions } from "./features/promotions/index";
|
|
4651
4653
|
// ./features/promotions/server
|
|
4654
|
+
// [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
|
|
4655
|
+
// detectCouponConflict - Coupon stacking rule: one seller coupon per store + one admin coupon per cart.
|
|
4656
|
+
export { detectCouponConflict } from "./features/promotions/server";
|
|
4652
4657
|
// [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
|
|
4653
4658
|
// getPromotions - Helper for get promotions.
|
|
4654
4659
|
export { getPromotions } from "./features/promotions/server";
|
|
@@ -5534,8 +5539,12 @@ export { LISTING_PARAM_NAMES, parseListingParams, parseListingSearchParams, seri
|
|
|
5534
5539
|
// Product features UI option lists (S8 refactor â€" shared by editor + selector)
|
|
5535
5540
|
export { PRODUCT_FEATURE_CATEGORY_OPTIONS, PRODUCT_FEATURE_PRODUCT_TYPE_OPTIONS, PRODUCT_FEATURE_SCOPE_OPTIONS, PRODUCT_FEATURE_ICON_COLOR_OPTIONS, PRODUCT_FEATURE_SCOPE_TABS, PRODUCT_FEATURE_DEFAULT_DISPLAY_ORDER, PRODUCT_FEATURE_CARD_MAX_VISIBLE, PRODUCT_FEATURE_QUERY_STALE_MS, } from "./features/products/constants/product-features.constants";
|
|
5536
5541
|
// SB10-A listing tab constants
|
|
5537
|
-
export { CATEGORY_PAGE_TABS, STORE_PAGE_TABS, SELLER_LISTING_TABS,
|
|
5538
|
-
export { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, AUCTION_SORT_OPTIONS, AUCTION_PUBLIC_SORT_OPTIONS, PREORDER_SORT_OPTIONS, BUNDLE_SORT_OPTIONS, PRIZE_DRAW_SORT_OPTIONS,
|
|
5542
|
+
export { CATEGORY_PAGE_TABS, STORE_PAGE_TABS, SELLER_LISTING_TABS, PRODUCT_TYPE_FILTER_TABS, ART_STICKERS_TYPE_FILTER_TABS, GENERIC_PRODUCT_LISTING_TYPES, ART_STICKERS_LISTING_TYPES, } from "./features/products/constants/listing-tabs";
|
|
5543
|
+
export { STANDARD_SORT_OPTIONS, STANDARD_PUBLIC_SORT_OPTIONS, AUCTION_SORT_OPTIONS, AUCTION_PUBLIC_SORT_OPTIONS, PREORDER_SORT_OPTIONS, PREORDER_PUBLIC_SORT_OPTIONS, BUNDLE_SORT_OPTIONS, PRIZE_DRAW_SORT_OPTIONS, PRIZE_DRAW_PUBLIC_SORT_OPTIONS, } from "./features/products/constants/sieve";
|
|
5544
|
+
// The per-type sort lookup is DERIVED from the listing-type plugin registry
|
|
5545
|
+
// (it used to be a hand-written map here that was missing five of the nine
|
|
5546
|
+
// types and still listed the long-dead `bundle` listingType).
|
|
5547
|
+
export { sortOptionsFor, commonSortOptionsFor, hideDefaultsFor, } from "./_internal/shared/listing-types/_registry";
|
|
5539
5548
|
// SB10-C admin + seller filter-chip tab sets (S8 2026-05-13)
|
|
5540
5549
|
export { ALL_TAB, EMPTY_TAB, ADMIN_PRODUCT_STATUS_TABS, ADMIN_PRODUCT_LISTING_TYPE_TABS, ADMIN_BLOG_STATUS_TABS, ADMIN_USER_STATUS_TABS, ADMIN_USER_ROLE_TABS, ADMIN_STORE_STATUS_TABS, ADMIN_PAYOUT_STATUS_TABS, ADMIN_ORDER_STATUS_TABS, ADMIN_REVIEW_STATUS_TABS, ADMIN_REVIEW_RATING_TABS, ADMIN_BID_STATUS_TABS, ADMIN_CONTACT_STATUS_TABS, ADMIN_NEWSLETTER_STATUS_TABS, ADMIN_EVENT_ENTRY_STATUS_TABS, ADMIN_EVENT_STATUS_TABS, ADMIN_CART_OWNERSHIP_TABS, ADMIN_COUPON_TYPE_TABS, SELLER_PRODUCT_STATUS_TABS, SELLER_AUCTION_STATUS_TABS, SELLER_ORDER_STATUS_TABS, SELLER_OFFER_STATUS_TABS, SELLER_BID_STATUS_TABS, } from "./features/admin/constants/filter-tabs";
|
|
5541
5550
|
// Grouped listings feature schemas
|
|
@@ -44,6 +44,7 @@ export declare const DEFAULT_ROUTE_MAP: {
|
|
|
44
44
|
readonly STORE_CLASSIFIEDS: (storeSlug: string) => string;
|
|
45
45
|
readonly STORE_DIGITAL_CODES: (storeSlug: string) => string;
|
|
46
46
|
readonly STORE_LIVE: (storeSlug: string) => string;
|
|
47
|
+
readonly STORE_ART: (storeSlug: string) => string;
|
|
47
48
|
readonly CATEGORIES: "/categories";
|
|
48
49
|
readonly CATEGORY_DETAIL: (slug: string) => string;
|
|
49
50
|
readonly BRANDS: "/brands";
|
|
@@ -415,6 +416,7 @@ export declare const ROUTES: {
|
|
|
415
416
|
readonly STORE_CLASSIFIEDS: (storeSlug: string) => string;
|
|
416
417
|
readonly STORE_DIGITAL_CODES: (storeSlug: string) => string;
|
|
417
418
|
readonly STORE_LIVE: (storeSlug: string) => string;
|
|
419
|
+
readonly STORE_ART: (storeSlug: string) => string;
|
|
418
420
|
readonly CATEGORIES: "/categories";
|
|
419
421
|
readonly CATEGORY_DETAIL: (slug: string) => string;
|
|
420
422
|
readonly BRANDS: "/brands";
|
|
@@ -33,6 +33,11 @@ export const DEFAULT_ROUTE_MAP = {
|
|
|
33
33
|
STORE_CLASSIFIEDS: (storeSlug) => `/stores/${storeSlug}/classified`,
|
|
34
34
|
STORE_DIGITAL_CODES: (storeSlug) => `/stores/${storeSlug}/digital-codes`,
|
|
35
35
|
STORE_LIVE: (storeSlug) => `/stores/${storeSlug}/live`,
|
|
36
|
+
// Combined art + stickers, mirroring the public /art page. The store's
|
|
37
|
+
// "Art & Stickers" tab used to point at STORE_PRODUCTS, which filters to
|
|
38
|
+
// `standard` — so the tab showed a real non-zero count and then landed on
|
|
39
|
+
// a page containing none of those items.
|
|
40
|
+
STORE_ART: (storeSlug) => `/stores/${storeSlug}/art`,
|
|
36
41
|
CATEGORIES: "/categories",
|
|
37
42
|
CATEGORY_DETAIL: (slug) => `/categories/${slug}`,
|
|
38
43
|
BRANDS: "/brands",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ListingType } from "../../features/products/types/index";
|
|
1
2
|
/**
|
|
2
3
|
* W1-43 — useListingTypeFlags
|
|
3
4
|
*
|
|
@@ -8,25 +9,17 @@
|
|
|
8
9
|
* Defaults to all-enabled when settings haven't loaded yet — match the
|
|
9
10
|
* permissive default used by `DEFAULT_SITE_SETTINGS_DATA` so first paint
|
|
10
11
|
* doesn't briefly hide enabled features.
|
|
12
|
+
*
|
|
13
|
+
* KEYED ON THE UNION, NOT A HAND-WRITTEN LIST (2026-08-21). Both types below
|
|
14
|
+
* used to enumerate seven types by hand and had never been updated for `art`
|
|
15
|
+
* and `stickers` — so `isEnabled("art")` didn't even typecheck, and the seller
|
|
16
|
+
* TypeDropdown (its main consumer) could not offer either type. Deriving from
|
|
17
|
+
* `ListingType` makes a missing member a compile error, matching the same
|
|
18
|
+
* decision made for `ALL_LISTING_TYPES_MAP` in `feature-flags.ts`.
|
|
11
19
|
*/
|
|
12
|
-
export type ListingTypeFlagsShape = Partial<
|
|
13
|
-
|
|
14
|
-
auction: boolean;
|
|
15
|
-
"pre-order": boolean;
|
|
16
|
-
"prize-draw": boolean;
|
|
17
|
-
classified: boolean;
|
|
18
|
-
"digital-code": boolean;
|
|
19
|
-
live: boolean;
|
|
20
|
-
}>;
|
|
21
|
-
export interface ListingTypeFlags {
|
|
22
|
-
standard: boolean;
|
|
23
|
-
auction: boolean;
|
|
24
|
-
"pre-order": boolean;
|
|
25
|
-
"prize-draw": boolean;
|
|
26
|
-
classified: boolean;
|
|
27
|
-
"digital-code": boolean;
|
|
28
|
-
live: boolean;
|
|
20
|
+
export type ListingTypeFlagsShape = Partial<Record<ListingType, boolean>>;
|
|
21
|
+
export type ListingTypeFlags = Record<ListingType, boolean> & {
|
|
29
22
|
/** True when the listing type is enabled (or the setting hasn't loaded yet). */
|
|
30
|
-
isEnabled: (type:
|
|
31
|
-
}
|
|
23
|
+
isEnabled: (type: ListingType) => boolean;
|
|
24
|
+
};
|
|
32
25
|
export declare function useListingTypeFlags(): ListingTypeFlags;
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useSiteSettings } from "../../core/hooks/useSiteSettings";
|
|
3
|
+
import { ALL_LISTING_TYPES } from "../../_internal/shared/listing-types/feature-flags";
|
|
3
4
|
export function useListingTypeFlags() {
|
|
4
5
|
const { data } = useSiteSettings();
|
|
5
6
|
const lt = data?.featureFlags?.listingTypes;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"pre-order": lt?.["pre-order"] !== false,
|
|
10
|
-
"prize-draw": lt?.["prize-draw"] !== false,
|
|
11
|
-
classified: lt?.classified !== false,
|
|
12
|
-
"digital-code": lt?.["digital-code"] !== false,
|
|
13
|
-
live: lt?.live !== false,
|
|
14
|
-
};
|
|
7
|
+
// A type is disabled only when EXPLICITLY set to false — a missing flag (or
|
|
8
|
+
// settings that haven't loaded) means enabled.
|
|
9
|
+
const flags = Object.fromEntries(ALL_LISTING_TYPES.map((type) => [type, lt?.[type] !== false]));
|
|
15
10
|
return {
|
|
16
11
|
...flags,
|
|
17
12
|
isEnabled: (type) => flags[type],
|
|
@@ -1389,10 +1389,8 @@ export declare const SCHEMAS: {
|
|
|
1389
1389
|
excludeProducts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
1390
1390
|
excludeCategories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
1391
1391
|
firstTimeUserOnly: import("zod").ZodBoolean;
|
|
1392
|
-
combineWithSellerCoupons: import("zod").ZodBoolean;
|
|
1393
1392
|
}, "strip", import("zod").ZodTypeAny, {
|
|
1394
1393
|
firstTimeUserOnly: boolean;
|
|
1395
|
-
combineWithSellerCoupons: boolean;
|
|
1396
1394
|
applicableProducts?: string[] | undefined;
|
|
1397
1395
|
applicableCategories?: string[] | undefined;
|
|
1398
1396
|
applicableSellers?: string[] | undefined;
|
|
@@ -1400,7 +1398,6 @@ export declare const SCHEMAS: {
|
|
|
1400
1398
|
excludeCategories?: string[] | undefined;
|
|
1401
1399
|
}, {
|
|
1402
1400
|
firstTimeUserOnly: boolean;
|
|
1403
|
-
combineWithSellerCoupons: boolean;
|
|
1404
1401
|
applicableProducts?: string[] | undefined;
|
|
1405
1402
|
applicableCategories?: string[] | undefined;
|
|
1406
1403
|
applicableSellers?: string[] | undefined;
|
|
@@ -1418,7 +1415,6 @@ export declare const SCHEMAS: {
|
|
|
1418
1415
|
};
|
|
1419
1416
|
restrictions: {
|
|
1420
1417
|
firstTimeUserOnly: boolean;
|
|
1421
|
-
combineWithSellerCoupons: boolean;
|
|
1422
1418
|
applicableProducts?: string[] | undefined;
|
|
1423
1419
|
applicableCategories?: string[] | undefined;
|
|
1424
1420
|
applicableSellers?: string[] | undefined;
|
|
@@ -1438,7 +1434,6 @@ export declare const SCHEMAS: {
|
|
|
1438
1434
|
};
|
|
1439
1435
|
restrictions: {
|
|
1440
1436
|
firstTimeUserOnly: boolean;
|
|
1441
|
-
combineWithSellerCoupons: boolean;
|
|
1442
1437
|
applicableProducts?: string[] | undefined;
|
|
1443
1438
|
applicableCategories?: string[] | undefined;
|
|
1444
1439
|
applicableSellers?: string[] | undefined;
|
|
@@ -1499,7 +1494,6 @@ export declare const SCHEMAS: {
|
|
|
1499
1494
|
};
|
|
1500
1495
|
restrictions: {
|
|
1501
1496
|
firstTimeUserOnly: boolean;
|
|
1502
|
-
combineWithSellerCoupons: boolean;
|
|
1503
1497
|
applicableProducts?: string[] | undefined;
|
|
1504
1498
|
applicableCategories?: string[] | undefined;
|
|
1505
1499
|
applicableSellers?: string[] | undefined;
|
|
@@ -1540,7 +1534,6 @@ export declare const SCHEMAS: {
|
|
|
1540
1534
|
};
|
|
1541
1535
|
restrictions: {
|
|
1542
1536
|
firstTimeUserOnly: boolean;
|
|
1543
|
-
combineWithSellerCoupons: boolean;
|
|
1544
1537
|
applicableProducts?: string[] | undefined;
|
|
1545
1538
|
applicableCategories?: string[] | undefined;
|
|
1546
1539
|
applicableSellers?: string[] | undefined;
|
|
@@ -1812,10 +1805,8 @@ export declare const SCHEMAS: {
|
|
|
1812
1805
|
excludeProducts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
1813
1806
|
excludeCategories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
1814
1807
|
firstTimeUserOnly: import("zod").ZodBoolean;
|
|
1815
|
-
combineWithSellerCoupons: import("zod").ZodBoolean;
|
|
1816
1808
|
}, "strip", import("zod").ZodTypeAny, {
|
|
1817
1809
|
firstTimeUserOnly: boolean;
|
|
1818
|
-
combineWithSellerCoupons: boolean;
|
|
1819
1810
|
applicableProducts?: string[] | undefined;
|
|
1820
1811
|
applicableCategories?: string[] | undefined;
|
|
1821
1812
|
applicableSellers?: string[] | undefined;
|
|
@@ -1823,7 +1814,6 @@ export declare const SCHEMAS: {
|
|
|
1823
1814
|
excludeCategories?: string[] | undefined;
|
|
1824
1815
|
}, {
|
|
1825
1816
|
firstTimeUserOnly: boolean;
|
|
1826
|
-
combineWithSellerCoupons: boolean;
|
|
1827
1817
|
applicableProducts?: string[] | undefined;
|
|
1828
1818
|
applicableCategories?: string[] | undefined;
|
|
1829
1819
|
applicableSellers?: string[] | undefined;
|
|
@@ -1884,7 +1874,6 @@ export declare const SCHEMAS: {
|
|
|
1884
1874
|
};
|
|
1885
1875
|
restrictions: {
|
|
1886
1876
|
firstTimeUserOnly: boolean;
|
|
1887
|
-
combineWithSellerCoupons: boolean;
|
|
1888
1877
|
applicableProducts?: string[] | undefined;
|
|
1889
1878
|
applicableCategories?: string[] | undefined;
|
|
1890
1879
|
applicableSellers?: string[] | undefined;
|
|
@@ -1943,7 +1932,6 @@ export declare const SCHEMAS: {
|
|
|
1943
1932
|
};
|
|
1944
1933
|
restrictions: {
|
|
1945
1934
|
firstTimeUserOnly: boolean;
|
|
1946
|
-
combineWithSellerCoupons: boolean;
|
|
1947
1935
|
applicableProducts?: string[] | undefined;
|
|
1948
1936
|
applicableCategories?: string[] | undefined;
|
|
1949
1937
|
applicableSellers?: string[] | undefined;
|
|
@@ -30,7 +30,7 @@ export const claimedCouponsSeedData = [
|
|
|
30
30
|
type: "percentage",
|
|
31
31
|
scope: "admin",
|
|
32
32
|
discount: { value: 10, maxDiscount: 500, minPurchase: 999 },
|
|
33
|
-
restrictions: { firstTimeUserOnly: true
|
|
33
|
+
restrictions: { firstTimeUserOnly: true },
|
|
34
34
|
},
|
|
35
35
|
status: "active",
|
|
36
36
|
expiresAt: daysAhead(14),
|
|
@@ -51,7 +51,7 @@ export const claimedCouponsSeedData = [
|
|
|
51
51
|
type: "fixed",
|
|
52
52
|
scope: "admin",
|
|
53
53
|
discount: { value: 500, minPurchase: 5000 },
|
|
54
|
-
restrictions: { firstTimeUserOnly: false
|
|
54
|
+
restrictions: { firstTimeUserOnly: false },
|
|
55
55
|
},
|
|
56
56
|
status: "expired",
|
|
57
57
|
expiresAt: daysAgo(5),
|
|
@@ -72,7 +72,7 @@ export const claimedCouponsSeedData = [
|
|
|
72
72
|
type: "free_shipping",
|
|
73
73
|
scope: "admin",
|
|
74
74
|
discount: { value: 0, minPurchase: 499 },
|
|
75
|
-
restrictions: { firstTimeUserOnly: false
|
|
75
|
+
restrictions: { firstTimeUserOnly: false },
|
|
76
76
|
},
|
|
77
77
|
status: "used",
|
|
78
78
|
expiresAt: daysAhead(60),
|
|
@@ -28,7 +28,7 @@ export const couponsSeedData = [
|
|
|
28
28
|
discount: { value: 10, maxDiscount: 200, minPurchase: 500 },
|
|
29
29
|
usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 312 },
|
|
30
30
|
validity: { startDate: daysAgo(90), endDate: daysAhead(180), isActive: true },
|
|
31
|
-
restrictions: { firstTimeUserOnly: true
|
|
31
|
+
restrictions: { firstTimeUserOnly: true },
|
|
32
32
|
createdBy: "user-admin-letitrip",
|
|
33
33
|
createdAt: daysAgo(90),
|
|
34
34
|
updatedAt: daysAgo(5),
|
|
@@ -44,7 +44,7 @@ export const couponsSeedData = [
|
|
|
44
44
|
discount: { value: 500, maxDiscount: 500, minPurchase: 2000 },
|
|
45
45
|
usage: { totalLimit: 500, perUserLimit: 2, currentUsage: 187 },
|
|
46
46
|
validity: { startDate: daysAgo(30), endDate: daysAhead(60), isActive: true },
|
|
47
|
-
restrictions: { firstTimeUserOnly: false
|
|
47
|
+
restrictions: { firstTimeUserOnly: false },
|
|
48
48
|
createdBy: "user-admin-letitrip",
|
|
49
49
|
createdAt: daysAgo(30),
|
|
50
50
|
updatedAt: daysAgo(3),
|
|
@@ -60,7 +60,7 @@ export const couponsSeedData = [
|
|
|
60
60
|
discount: { value: 0, maxDiscount: 0, minPurchase: 499 },
|
|
61
61
|
usage: { totalLimit: undefined, perUserLimit: 5, currentUsage: 1024 },
|
|
62
62
|
validity: { startDate: daysAgo(60), endDate: daysAhead(120), isActive: true },
|
|
63
|
-
restrictions: { firstTimeUserOnly: false
|
|
63
|
+
restrictions: { firstTimeUserOnly: false },
|
|
64
64
|
createdBy: "user-admin-letitrip",
|
|
65
65
|
createdAt: daysAgo(60),
|
|
66
66
|
updatedAt: daysAgo(1),
|
|
@@ -76,7 +76,7 @@ export const couponsSeedData = [
|
|
|
76
76
|
discount: { value: 20, maxDiscount: 400, minPurchase: 1000 },
|
|
77
77
|
usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 89 },
|
|
78
78
|
validity: { startDate: daysAgo(14), endDate: daysAhead(90), isActive: true },
|
|
79
|
-
restrictions: { firstTimeUserOnly: true
|
|
79
|
+
restrictions: { firstTimeUserOnly: true },
|
|
80
80
|
createdBy: "user-admin-letitrip",
|
|
81
81
|
createdAt: daysAgo(14),
|
|
82
82
|
updatedAt: daysAgo(2),
|
|
@@ -92,7 +92,7 @@ export const couponsSeedData = [
|
|
|
92
92
|
discount: { value: 200, maxDiscount: 200, minPurchase: 1000 },
|
|
93
93
|
usage: { totalLimit: 1000, perUserLimit: 3, currentUsage: 456 },
|
|
94
94
|
validity: { startDate: daysAgo(45), endDate: daysAhead(45), isActive: true },
|
|
95
|
-
restrictions: { firstTimeUserOnly: false
|
|
95
|
+
restrictions: { firstTimeUserOnly: false },
|
|
96
96
|
createdBy: "user-admin-letitrip",
|
|
97
97
|
createdAt: daysAgo(45),
|
|
98
98
|
updatedAt: daysAgo(1),
|
|
@@ -110,7 +110,7 @@ export const couponsSeedData = [
|
|
|
110
110
|
discount: { value: 25, maxDiscount: 500, minPurchase: 1000 },
|
|
111
111
|
usage: { totalLimit: 200, perUserLimit: 2, currentUsage: 67 },
|
|
112
112
|
validity: { startDate: daysAgo(20), endDate: daysAhead(40), isActive: true },
|
|
113
|
-
restrictions: { firstTimeUserOnly: false
|
|
113
|
+
restrictions: { firstTimeUserOnly: false },
|
|
114
114
|
createdBy: "user-tyson-blader",
|
|
115
115
|
createdAt: daysAgo(20),
|
|
116
116
|
updatedAt: daysAgo(4),
|
|
@@ -130,7 +130,6 @@ export const couponsSeedData = [
|
|
|
130
130
|
restrictions: {
|
|
131
131
|
applicableCategories: ["category-beyblade-original", "category-beyblade-metal"],
|
|
132
132
|
firstTimeUserOnly: false,
|
|
133
|
-
combineWithSellerCoupons: false,
|
|
134
133
|
},
|
|
135
134
|
createdBy: "user-tyson-blader",
|
|
136
135
|
createdAt: daysAgo(10),
|
|
@@ -153,7 +152,7 @@ export const couponsSeedData = [
|
|
|
153
152
|
},
|
|
154
153
|
usage: { totalLimit: 100, perUserLimit: 3, currentUsage: 34 },
|
|
155
154
|
validity: { startDate: daysAgo(15), endDate: daysAhead(45), isActive: true },
|
|
156
|
-
restrictions: { firstTimeUserOnly: false
|
|
155
|
+
restrictions: { firstTimeUserOnly: false },
|
|
157
156
|
createdBy: "user-tyson-blader",
|
|
158
157
|
createdAt: daysAgo(15),
|
|
159
158
|
updatedAt: daysAgo(2),
|
|
@@ -173,7 +172,6 @@ export const couponsSeedData = [
|
|
|
173
172
|
restrictions: {
|
|
174
173
|
applicableCategories: ["category-beyblade-burst", "category-beyblade-x"],
|
|
175
174
|
firstTimeUserOnly: false,
|
|
176
|
-
combineWithSellerCoupons: false,
|
|
177
175
|
},
|
|
178
176
|
createdBy: "user-tyson-blader",
|
|
179
177
|
createdAt: daysAgo(7),
|
|
@@ -194,11 +192,32 @@ export const couponsSeedData = [
|
|
|
194
192
|
restrictions: {
|
|
195
193
|
applicableCategories: ["bundle-original-collectors-set", "bundle-metal-fusion-duo", "bundle-burst-battlers-pack", "bundle-x-series-starter"],
|
|
196
194
|
firstTimeUserOnly: false,
|
|
197
|
-
combineWithSellerCoupons: false,
|
|
198
195
|
},
|
|
199
196
|
createdBy: "user-tyson-blader",
|
|
200
197
|
createdAt: daysAgo(5),
|
|
201
198
|
updatedAt: daysAgo(1),
|
|
202
199
|
stats: { totalUses: 19, totalRevenue: 95000, totalDiscount: 11400 },
|
|
203
200
|
},
|
|
201
|
+
// ── Seller coupon (LetItRip Official) ──────────────────────────────────────
|
|
202
|
+
// Deliberately on a SECOND store: every other seller coupon above belongs to
|
|
203
|
+
// store-beyblade-arena, so without this one the "one coupon per store, plus
|
|
204
|
+
// one platform-wide coupon" stacking rule could never be demonstrated on a
|
|
205
|
+
// real multi-store cart.
|
|
206
|
+
{
|
|
207
|
+
id: "coupon-official10",
|
|
208
|
+
code: "OFFICIAL10",
|
|
209
|
+
name: "LetItRip Official — 10% Off",
|
|
210
|
+
description: "10% off anything from the LetItRip Official store. Stacks with other stores' coupons and with a platform-wide coupon.",
|
|
211
|
+
type: COUPON_FIELDS.TYPE_VALUES.PERCENTAGE,
|
|
212
|
+
scope: COUPON_FIELDS.SCOPE_VALUES.SELLER,
|
|
213
|
+
storeId: "store-letitrip-official",
|
|
214
|
+
discount: { value: 10, maxDiscount: 300, minPurchase: 500 },
|
|
215
|
+
usage: { totalLimit: 300, perUserLimit: 2, currentUsage: 41 },
|
|
216
|
+
validity: { startDate: daysAgo(15), endDate: daysAhead(45), isActive: true },
|
|
217
|
+
restrictions: { firstTimeUserOnly: false },
|
|
218
|
+
createdBy: "user-admin-letitrip",
|
|
219
|
+
createdAt: daysAgo(15),
|
|
220
|
+
updatedAt: daysAgo(2),
|
|
221
|
+
stats: { totalUses: 41, totalRevenue: 205000, totalDiscount: 20500 },
|
|
222
|
+
},
|
|
204
223
|
];
|
|
@@ -256,7 +256,7 @@ export const faqSeedData = [
|
|
|
256
256
|
{
|
|
257
257
|
id: "faq-free-shipping-available",
|
|
258
258
|
question: "Is free shipping available?",
|
|
259
|
-
answer: html(`<p>Many sellers offer free shipping on orders above a certain amount. Look for the "Free Shipping" badge on product listings. You can also use the
|
|
259
|
+
answer: html(`<p>Many sellers offer free shipping on orders above a certain amount. Look for the "Free Shipping" badge on product listings. You can also use the FREESHIP499 coupon for free shipping on orders ₹499+.</p>`),
|
|
260
260
|
category: "shipping_delivery",
|
|
261
261
|
showOnHomepage: true,
|
|
262
262
|
showInFooter: false,
|
|
@@ -543,7 +543,7 @@ export const faqSeedData = [
|
|
|
543
543
|
{
|
|
544
544
|
id: "faq-coupons-and-discounts",
|
|
545
545
|
question: "How do I use coupons and discount codes?",
|
|
546
|
-
answer: html(`<p>Enter your coupon code at checkout in the "Apply Coupon" field. Coupons
|
|
546
|
+
answer: html(`<p>Enter your coupon code at checkout in the "Apply Coupon" field. Coupons are either <strong>store coupons</strong> (issued by an individual seller) or <strong>platform-wide coupons</strong> (issued by LetItRip).</p><p><strong>Coupons stack.</strong> You can apply <strong>one coupon per store</strong> — so a cart with items from three stores can carry all three of those stores' coupons at once — <strong>plus one platform-wide coupon</strong> on top. A second coupon for the same store, or a second platform-wide coupon, is declined; remove the first one to swap it.</p><p>A store coupon only discounts that store's items. A platform-wide coupon is spread proportionally across every store in your cart. Because orders are placed per store, each store's order shows its own share of the discount.</p><p>Coupons may also have a minimum order value (measured against the items the coupon actually covers, not your whole cart), an expiry date, a per-user limit, or a total limit across all buyers. Coupons are re-checked when you place the order — if one expired or ran out while it sat in your cart, it is removed and your total is recalculated before payment.</p>`),
|
|
547
547
|
category: "orders_payment",
|
|
548
548
|
showOnHomepage: false,
|
|
549
549
|
showInFooter: false,
|
package/dist/seed/manifest.js
CHANGED
|
@@ -51,7 +51,7 @@ import { offersSeedData } from "./offers-seed-data";
|
|
|
51
51
|
import { couponUsageSeedData } from "./coupon-usage-seed-data";
|
|
52
52
|
import { claimedCouponsSeedData } from "./claimed-coupons-seed-data";
|
|
53
53
|
// Tester sandbox seed fixtures live in ../features/tester/seed-data (isolated on purpose).
|
|
54
|
-
import { testerChecklistSeedData, storesTesterSeedData, categoriesTesterSeedData, productsTesterSeedData, blogTesterSeedData, eventsTesterSeedData, couponsTesterSeedData, bidsTesterSeedData, ordersTesterSeedData, } from "../features/tester/seed-data";
|
|
54
|
+
import { testerChecklistSeedData, storesTesterSeedData, categoriesTesterSeedData, productsTesterSeedData, blogTesterSeedData, eventsTesterSeedData, couponsTesterSeedData, bidsTesterSeedData, ordersTesterSeedData, offersTesterSeedData, } from "../features/tester/seed-data";
|
|
55
55
|
function asArr(items) {
|
|
56
56
|
return items ?? [];
|
|
57
57
|
}
|
|
@@ -199,7 +199,7 @@ export const SEED_MANIFEST = {
|
|
|
199
199
|
...f,
|
|
200
200
|
name: f.label ?? f.id,
|
|
201
201
|
}))),
|
|
202
|
-
offers: pick(asArr(offersSeedData).map((o) => ({
|
|
202
|
+
offers: pick([...asArr(offersSeedData), ...asArr(offersTesterSeedData)].map((o) => ({
|
|
203
203
|
...o,
|
|
204
204
|
name: o.productTitle ?? o.id,
|
|
205
205
|
}))),
|
|
@@ -119,4 +119,56 @@ for (let i = 0; i < 65; i++) {
|
|
|
119
119
|
updatedAt: daysAgo(daysAgoCreated - 1),
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* A deliberately deep review list on ONE product, so the paginated reviews tab is
|
|
124
|
+
* actually exercisable.
|
|
125
|
+
*
|
|
126
|
+
* The round-robin above spreads 65 reviews across 14 products — 4-5 each, which is
|
|
127
|
+
* below the 10-per-page detail-page size, so pagination could never appear on a product
|
|
128
|
+
* page and the tester checklist cases for it would be untestable. This block pushes
|
|
129
|
+
* "Beyblade Original Dranzer S" to 5 + 14 = 19 approved reviews (2 pages), and spreads
|
|
130
|
+
* ratings across all five stars so the rating filter and the average/distribution
|
|
131
|
+
* summary have something real to act on.
|
|
132
|
+
*
|
|
133
|
+
* Ids and every field are derived from the loop index — no Math.random(), no Date.now()
|
|
134
|
+
* in an id — so `appkit-seed load` stays idempotent (Recurrent Root Cause #25).
|
|
135
|
+
*/
|
|
136
|
+
const DEEP_REVIEW_PRODUCT = {
|
|
137
|
+
id: "product-beyblade-original-dranzer-s",
|
|
138
|
+
title: "Beyblade Original Dranzer S",
|
|
139
|
+
store: "store-beyblade-arena",
|
|
140
|
+
};
|
|
141
|
+
for (let i = 0; i < 14; i++) {
|
|
142
|
+
const template = reviewTemplates[i % reviewTemplates.length];
|
|
143
|
+
const buyer = buyers[i % buyers.length];
|
|
144
|
+
// 1..5, cycling — guarantees every star bucket is populated for the rating filter.
|
|
145
|
+
const rating = (i % 5) + 1;
|
|
146
|
+
// Distinct from the main loop's 90-i range so the two sets interleave predictably
|
|
147
|
+
// and "newest first" is verifiable by eye.
|
|
148
|
+
const daysAgoCreated = 28 - i;
|
|
149
|
+
const hasImage = i % 4 === 0;
|
|
150
|
+
_rawReviewsSeedData.push({
|
|
151
|
+
id: `review-dranzer-deep-${i + 1}`,
|
|
152
|
+
productId: DEEP_REVIEW_PRODUCT.id,
|
|
153
|
+
productTitle: DEEP_REVIEW_PRODUCT.title,
|
|
154
|
+
storeId: DEEP_REVIEW_PRODUCT.store,
|
|
155
|
+
userId: buyer.id,
|
|
156
|
+
userName: buyer.name,
|
|
157
|
+
rating,
|
|
158
|
+
title: `${template.title} (${rating}★)`,
|
|
159
|
+
comment: template.comment,
|
|
160
|
+
images: hasImage
|
|
161
|
+
? [
|
|
162
|
+
seedExtMedia(`https://picsum.photos/seed/review-image-dranzer-deep-${i + 1}/800/800`),
|
|
163
|
+
]
|
|
164
|
+
: [],
|
|
165
|
+
hasImages: hasImage,
|
|
166
|
+
verified: i % 3 !== 2,
|
|
167
|
+
status: "approved",
|
|
168
|
+
helpfulCount: (i * 3) % 17,
|
|
169
|
+
reportCount: 0,
|
|
170
|
+
createdAt: daysAgo(daysAgoCreated),
|
|
171
|
+
updatedAt: daysAgo(daysAgoCreated),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
122
174
|
export const reviewsSeedData = _rawReviewsSeedData;
|
package/dist/server-entry.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export { StoreBundlesPageView } from "./features/stores/components/StoreBundlesP
|
|
|
44
44
|
export { StoreClassifiedsPageView } from "./features/stores/components/StoreClassifiedsPageView";
|
|
45
45
|
export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDigitalCodesPageView";
|
|
46
46
|
export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
|
|
47
|
+
export { StoreArtStickersPageView } from "./features/stores/components/StoreArtStickersPageView";
|
|
47
48
|
export { getProductForDetail, listSitemapProducts, type SitemapProduct, } from "./_internal/server/features/products/index";
|
|
48
49
|
export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, type PublicProductListInput, type PublicProductListResult, type PublicProductListOptions, type PublicProductExecutor, type PublicProductQuery, } from "./_internal/server/features/products/index";
|
|
49
50
|
export { getAuctionForDetail, getProductFeaturesForAuction, } from "./_internal/server/features/auctions/index";
|
package/dist/server-entry.js
CHANGED
|
@@ -49,6 +49,7 @@ export { StoreBundlesPageView } from "./features/stores/components/StoreBundlesP
|
|
|
49
49
|
export { StoreClassifiedsPageView } from "./features/stores/components/StoreClassifiedsPageView";
|
|
50
50
|
export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDigitalCodesPageView";
|
|
51
51
|
export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
|
|
52
|
+
export { StoreArtStickersPageView } from "./features/stores/components/StoreArtStickersPageView";
|
|
52
53
|
// S2: products data layer — deduped via React.cache()
|
|
53
54
|
export { getProductForDetail, listSitemapProducts, } from "./_internal/server/features/products/index";
|
|
54
55
|
export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, } from "./_internal/server/features/products/index";
|