@mohasinac/appkit 2.3.2 → 2.4.1
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/client.d.ts +48 -12
- package/dist/client.js +25 -6
- package/dist/constants/api-endpoints.d.ts +380 -22
- package/dist/constants/api-endpoints.js +66 -13
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/core/hooks/useSyncManager.d.ts +1 -0
- package/dist/core/hooks/useSyncManager.js +83 -0
- package/dist/core/integration-keys.d.ts +4 -0
- package/dist/core/integration-keys.js +8 -0
- package/dist/features/about/components/FAQPageView.js +9 -11
- package/dist/features/about/components/PolicyPageView.js +32 -11
- package/dist/features/about/components/PublicProfileView.js +77 -11
- package/dist/features/account/components/AddressesIndexListing.js +63 -38
- package/dist/features/account/components/UserOffersPanel.d.ts +8 -0
- package/dist/features/account/components/UserOffersPanel.js +81 -0
- package/dist/features/account/components/UserSettingsView.d.ts +2 -1
- package/dist/features/account/components/UserSettingsView.js +2 -1
- package/dist/features/account/components/UserSidebar.d.ts +6 -1
- package/dist/features/account/components/UserSidebar.js +48 -42
- package/dist/features/account/components/index.d.ts +2 -0
- package/dist/features/account/components/index.js +1 -0
- package/dist/features/admin/actions/admin-actions.d.ts +1 -1
- package/dist/features/admin/actions/admin-actions.js +13 -3
- package/dist/features/admin/components/AdminAdEditorView.js +6 -7
- package/dist/features/admin/components/AdminAllEventEntriesView.d.ts +4 -0
- package/dist/features/admin/components/AdminAllEventEntriesView.js +102 -0
- package/dist/features/admin/components/AdminBidsView.js +94 -8
- package/dist/features/admin/components/AdminBlogEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminBlogEditorView.js +162 -0
- package/dist/features/admin/components/AdminBlogView.d.ts +4 -1
- package/dist/features/admin/components/AdminBlogView.js +61 -31
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminBrandEditorView.js +104 -0
- package/dist/features/admin/components/AdminBrandsView.d.ts +4 -0
- package/dist/features/admin/components/AdminBrandsView.js +76 -0
- package/dist/features/admin/components/AdminCarouselEditorView.d.ts +8 -0
- package/dist/features/admin/components/AdminCarouselEditorView.js +204 -0
- package/dist/features/admin/components/AdminCarouselView.js +153 -34
- package/dist/features/admin/components/AdminCartsView.d.ts +4 -0
- package/dist/features/admin/components/AdminCartsView.js +82 -0
- package/dist/features/admin/components/AdminCategoriesView.d.ts +4 -1
- package/dist/features/admin/components/AdminCategoriesView.js +66 -48
- package/dist/features/admin/components/AdminCategoryEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminCategoryEditorView.js +115 -0
- package/dist/features/admin/components/AdminContactEditorView.d.ts +11 -0
- package/dist/features/admin/components/AdminContactEditorView.js +32 -0
- package/dist/features/admin/components/AdminContactView.js +111 -20
- package/dist/features/admin/components/AdminCouponEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminCouponEditorView.js +179 -0
- package/dist/features/admin/components/AdminCouponsView.d.ts +4 -1
- package/dist/features/admin/components/AdminCouponsView.js +57 -9
- package/dist/features/admin/components/AdminDashboardView.js +3 -0
- package/dist/features/admin/components/AdminFaqEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminFaqEditorView.js +128 -0
- package/dist/features/admin/components/AdminFaqsView.d.ts +4 -1
- package/dist/features/admin/components/AdminFaqsView.js +55 -23
- package/dist/features/admin/components/AdminFeatureFlagsView.js +33 -24
- package/dist/features/admin/components/AdminListingScaffold.d.ts +7 -1
- package/dist/features/admin/components/AdminListingScaffold.js +2 -2
- package/dist/features/admin/components/AdminMediaView.js +18 -8
- package/dist/features/admin/components/AdminNavEditorView.d.ts +20 -0
- package/dist/features/admin/components/AdminNavEditorView.js +84 -0
- package/dist/features/admin/components/AdminNavigationView.d.ts +1 -7
- package/dist/features/admin/components/AdminNavigationView.js +84 -72
- package/dist/features/admin/components/AdminNewsletterView.js +102 -20
- package/dist/features/admin/components/AdminNotificationsView.d.ts +4 -0
- package/dist/features/admin/components/AdminNotificationsView.js +119 -0
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +8 -0
- package/dist/features/admin/components/AdminOrderEditorView.js +74 -0
- package/dist/features/admin/components/AdminOrdersView.js +64 -8
- package/dist/features/admin/components/AdminPayoutsView.js +122 -13
- package/dist/features/admin/components/AdminProductEditorView.d.ts +7 -0
- package/dist/features/admin/components/AdminProductEditorView.js +143 -0
- package/dist/features/admin/components/AdminProductsView.d.ts +4 -1
- package/dist/features/admin/components/AdminProductsView.js +119 -30
- package/dist/features/admin/components/AdminReturnRequestsView.d.ts +5 -0
- package/dist/features/admin/components/AdminReturnRequestsView.js +101 -0
- package/dist/features/admin/components/AdminReviewsView.js +138 -28
- package/dist/features/admin/components/AdminSectionsView.js +361 -472
- package/dist/features/admin/components/AdminSessionsView.d.ts +4 -0
- package/dist/features/admin/components/AdminSessionsView.js +119 -0
- package/dist/features/admin/components/AdminSidebar.d.ts +18 -3
- package/dist/features/admin/components/AdminSidebar.js +51 -4
- package/dist/features/admin/components/AdminSiteSettingsView.d.ts +7 -0
- package/dist/features/admin/components/AdminSiteSettingsView.js +319 -0
- package/dist/features/admin/components/AdminStoreAddressesView.d.ts +5 -0
- package/dist/features/admin/components/AdminStoreAddressesView.js +52 -0
- package/dist/features/admin/components/AdminStoreEditorView.d.ts +9 -0
- package/dist/features/admin/components/AdminStoreEditorView.js +55 -0
- package/dist/features/admin/components/AdminStoresView.js +62 -20
- package/dist/features/admin/components/AdminUserEditorView.d.ts +10 -0
- package/dist/features/admin/components/AdminUserEditorView.js +72 -0
- package/dist/features/admin/components/AdminUsersView.js +70 -36
- package/dist/features/admin/components/AdminWishlistsView.d.ts +4 -0
- package/dist/features/admin/components/AdminWishlistsView.js +53 -0
- package/dist/features/admin/components/BrandQuickCreateForm.d.ts +5 -0
- package/dist/features/admin/components/BrandQuickCreateForm.js +36 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +5 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.js +35 -0
- package/dist/features/admin/components/DataTable.d.ts +4 -2
- package/dist/features/admin/components/DataTable.js +26 -6
- package/dist/features/admin/components/index.d.ts +47 -1
- package/dist/features/admin/components/index.js +23 -0
- package/dist/features/admin/components/sections/adminSectionsBuildParse.d.ts +48 -0
- package/dist/features/admin/components/sections/adminSectionsBuildParse.js +653 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.d.ts +298 -0
- package/dist/features/admin/components/sections/adminSectionsTypes.js +278 -0
- package/dist/features/admin/schemas/firestore.d.ts +26 -0
- package/dist/features/admin/schemas/firestore.js +1 -0
- package/dist/features/admin/types/product.types.d.ts +2 -3
- package/dist/features/auctions/actions/bid-actions.js +6 -2
- package/dist/features/auctions/components/AuctionDetailPageView.d.ts +3 -1
- package/dist/features/auctions/components/AuctionDetailPageView.js +38 -12
- package/dist/features/auctions/components/AuctionFilters.d.ts +3 -1
- package/dist/features/auctions/components/AuctionFilters.js +6 -2
- package/dist/features/auctions/components/CollapsibleBidHistory.d.ts +7 -0
- package/dist/features/auctions/components/CollapsibleBidHistory.js +8 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.d.ts +4 -0
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +43 -9
- package/dist/features/auctions/components/MarketplaceAuctionGrid.js +1 -0
- package/dist/features/auctions/components/PlaceBidFormClient.d.ts +18 -0
- package/dist/features/auctions/components/PlaceBidFormClient.js +33 -0
- package/dist/features/auctions/hooks/useAuctions.d.ts +1 -0
- package/dist/features/auctions/hooks/useAuctions.js +1 -0
- package/dist/features/auctions/schemas/index.d.ts +22 -12
- package/dist/features/auth/actions/profile-actions.d.ts +5 -3
- package/dist/features/auth/actions/profile-actions.js +30 -11
- package/dist/features/auth/auth-helpers.js +1 -0
- package/dist/features/auth/components/LoginForm.js +2 -1
- package/dist/features/auth/hooks/useAuth.js +16 -4
- package/dist/features/auth/permissions/constants.d.ts +63 -0
- package/dist/features/auth/permissions/constants.js +323 -0
- package/dist/features/auth/schemas/firestore.d.ts +20 -0
- package/dist/features/auth/schemas/index.d.ts +4 -4
- package/dist/features/auth/schemas/index.js +3 -2
- package/dist/features/auth/types/index.d.ts +1 -1
- package/dist/features/before-after/schemas/index.d.ts +2 -2
- package/dist/features/blog/actions/blog-actions.d.ts +15 -15
- package/dist/features/blog/components/BlogFilters.js +1 -1
- package/dist/features/blog/components/BlogIndexListing.js +57 -5
- package/dist/features/blog/components/BlogIndexPageView.js +14 -2
- package/dist/features/blog/components/BlogPostForm.js +6 -2
- package/dist/features/blog/components/BlogPostView.js +2 -1
- package/dist/features/blog/hooks/useBlog.d.ts +2 -0
- package/dist/features/blog/hooks/useBlog.js +2 -0
- package/dist/features/blog/schemas/index.d.ts +46 -12
- package/dist/features/brands/actions/brand-actions.d.ts +2 -0
- package/dist/features/brands/actions/brand-actions.js +5 -0
- package/dist/features/brands/index.d.ts +3 -0
- package/dist/features/brands/index.js +3 -0
- package/dist/features/brands/repository/brands.repository.d.ts +13 -0
- package/dist/features/brands/repository/brands.repository.js +60 -0
- package/dist/features/brands/schemas/index.d.ts +33 -0
- package/dist/features/brands/schemas/index.js +15 -0
- package/dist/features/brands/server.d.ts +7 -0
- package/dist/features/brands/server.js +7 -0
- package/dist/features/cart/actions/cart-actions.js +2 -2
- package/dist/features/cart/components/CartDrawer.d.ts +5 -1
- package/dist/features/cart/components/CartDrawer.js +3 -3
- package/dist/features/cart/hooks/useCartCount.d.ts +3 -2
- package/dist/features/cart/hooks/useCartCount.js +4 -2
- package/dist/features/cart/hooks/useGuestCartMerge.js +1 -1
- package/dist/features/cart/index.d.ts +1 -0
- package/dist/features/cart/index.js +1 -0
- package/dist/features/cart/repository/cart.repository.d.ts +5 -1
- package/dist/features/cart/repository/cart.repository.js +36 -5
- package/dist/features/cart/schemas/firestore.d.ts +25 -6
- package/dist/features/cart/schemas/firestore.js +2 -2
- package/dist/features/cart/schemas/index.d.ts +9 -9
- package/dist/features/cart/schemas/index.js +1 -1
- package/dist/features/cart/types/index.d.ts +1 -1
- package/dist/features/cart/utils/pending-ops.d.ts +33 -0
- package/dist/features/cart/utils/pending-ops.js +102 -0
- package/dist/features/categories/components/BrandDetailPageView.d.ts +4 -0
- package/dist/features/categories/components/BrandDetailPageView.js +54 -0
- package/dist/features/categories/components/BrandDetailTabs.d.ts +10 -0
- package/dist/features/categories/components/BrandDetailTabs.js +22 -0
- package/dist/features/categories/components/CategoriesIndexListing.d.ts +3 -1
- package/dist/features/categories/components/CategoriesIndexListing.js +83 -7
- package/dist/features/categories/components/CategoryDetailPageView.js +42 -21
- package/dist/features/categories/components/CategoryDetailTabs.d.ts +7 -1
- package/dist/features/categories/components/CategoryDetailTabs.js +12 -7
- package/dist/features/categories/components/CategoryFilters.js +1 -1
- package/dist/features/categories/components/CategoryForm.js +10 -4
- package/dist/features/categories/components/CategoryProductsListing.d.ts +4 -1
- package/dist/features/categories/components/CategoryProductsListing.js +34 -5
- package/dist/features/categories/components/ConcernCard.js +1 -1
- package/dist/features/categories/hooks/useCategories.js +2 -0
- package/dist/features/categories/repository/categories.repository.js +2 -3
- package/dist/features/categories/schemas/firestore.d.ts +23 -2
- package/dist/features/categories/schemas/firestore.js +8 -0
- package/dist/features/categories/schemas/index.d.ts +8 -8
- package/dist/features/categories/types/index.d.ts +1 -0
- package/dist/features/collections/schemas/index.d.ts +2 -2
- package/dist/features/events/components/AdminEventEditorView.js +2 -2
- package/dist/features/events/components/AdminEventsView.d.ts +4 -1
- package/dist/features/events/components/AdminEventsView.js +64 -38
- package/dist/features/events/components/EventCard.js +1 -1
- package/dist/features/events/components/EventFilters.js +1 -1
- package/dist/features/events/components/EventPollWidget.d.ts +12 -0
- package/dist/features/events/components/EventPollWidget.js +62 -0
- package/dist/features/events/components/EventsIndexListing.js +57 -5
- package/dist/features/events/components/EventsListPageView.js +1 -1
- package/dist/features/events/components/index.d.ts +2 -0
- package/dist/features/events/components/index.js +1 -0
- package/dist/features/events/hooks/useEvents.d.ts +1 -0
- package/dist/features/events/hooks/useEvents.js +1 -0
- package/dist/features/events/repository/events.repository.js +3 -0
- package/dist/features/events/schemas/firestore.d.ts +1 -0
- package/dist/features/events/schemas/index.d.ts +44 -0
- package/dist/features/events/types/index.d.ts +2 -0
- package/dist/features/faq/actions/faq-actions.d.ts +16 -16
- package/dist/features/faq/hooks/useFaqList.js +1 -1
- package/dist/features/faq/schemas/firestore.d.ts +2 -2
- package/dist/features/faq/schemas/firestore.js +2 -1
- package/dist/features/faq/schemas/index.d.ts +4 -4
- package/dist/features/filters/FilterFacetSection.d.ts +1 -0
- package/dist/features/filters/FilterFacetSection.js +13 -1
- package/dist/features/filters/SwitchFilter.js +1 -1
- package/dist/features/grouped/schemas/firestore.d.ts +32 -0
- package/dist/features/grouped/schemas/firestore.js +19 -0
- package/dist/features/homepage/components/AdSlot.d.ts +1 -3
- package/dist/features/homepage/components/AdSlot.js +15 -14
- package/dist/features/homepage/components/BlogArticlesSection.d.ts +3 -1
- package/dist/features/homepage/components/BlogArticlesSection.js +2 -2
- package/dist/features/homepage/components/BrandsSection.d.ts +3 -1
- package/dist/features/homepage/components/BrandsSection.js +4 -3
- package/dist/features/homepage/components/CustomCardsSection.d.ts +3 -0
- package/dist/features/homepage/components/CustomCardsSection.js +76 -0
- package/dist/features/homepage/components/EventsSection.d.ts +3 -1
- package/dist/features/homepage/components/EventsSection.js +2 -2
- package/dist/features/homepage/components/FeaturedAuctionsSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedAuctionsSection.js +2 -2
- package/dist/features/homepage/components/FeaturedPreOrdersSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedPreOrdersSection.js +2 -2
- package/dist/features/homepage/components/FeaturedProductsSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedProductsSection.js +8 -3
- package/dist/features/homepage/components/FeaturedStoresSection.d.ts +3 -1
- package/dist/features/homepage/components/FeaturedStoresSection.js +2 -2
- package/dist/features/homepage/components/GoogleReviewsSection.d.ts +3 -0
- package/dist/features/homepage/components/GoogleReviewsSection.js +65 -0
- package/dist/features/homepage/components/HeroCarousel.js +128 -84
- package/dist/features/homepage/components/MarketplaceHomepageView.d.ts +2 -20
- package/dist/features/homepage/components/MarketplaceHomepageView.js +73 -230
- package/dist/features/homepage/components/SectionCarousel.d.ts +1 -1
- package/dist/features/homepage/components/SectionCarousel.js +2 -0
- package/dist/features/homepage/components/ShopByCategorySection.d.ts +3 -1
- package/dist/features/homepage/components/ShopByCategorySection.js +8 -4
- package/dist/features/homepage/components/SocialFeedSection.d.ts +3 -0
- package/dist/features/homepage/components/SocialFeedSection.js +86 -0
- package/dist/features/homepage/components/SocialPostCard.d.ts +7 -0
- package/dist/features/homepage/components/SocialPostCard.js +39 -0
- package/dist/features/homepage/components/StatsCounterSection.js +1 -1
- package/dist/features/homepage/components/WelcomeSection.js +1 -1
- package/dist/features/homepage/components/WhatsAppCommunitySection.js +1 -1
- package/dist/features/homepage/hooks/useActiveAd.d.ts +23 -0
- package/dist/features/homepage/hooks/useActiveAd.js +20 -0
- package/dist/features/homepage/hooks/useBlogArticles.d.ts +1 -0
- package/dist/features/homepage/hooks/useBlogArticles.js +10 -0
- package/dist/features/homepage/hooks/useFeaturedAuctions.d.ts +4 -1
- package/dist/features/homepage/hooks/useFeaturedAuctions.js +8 -4
- package/dist/features/homepage/hooks/useFeaturedPreOrders.d.ts +4 -1
- package/dist/features/homepage/hooks/useFeaturedPreOrders.js +8 -4
- package/dist/features/homepage/hooks/useFeaturedProducts.d.ts +1 -0
- package/dist/features/homepage/hooks/useFeaturedProducts.js +6 -3
- package/dist/features/homepage/hooks/useFeaturedStores.d.ts +3 -1
- package/dist/features/homepage/hooks/useFeaturedStores.js +2 -1
- package/dist/features/homepage/hooks/useHomepageEvents.d.ts +3 -1
- package/dist/features/homepage/hooks/useHomepageEvents.js +2 -1
- package/dist/features/homepage/hooks/useTopBrands.d.ts +3 -1
- package/dist/features/homepage/hooks/useTopBrands.js +2 -1
- package/dist/features/homepage/index.d.ts +2 -0
- package/dist/features/homepage/index.js +1 -0
- package/dist/features/homepage/lib/google-reviews-fetcher.d.ts +14 -0
- package/dist/features/homepage/lib/google-reviews-fetcher.js +27 -0
- package/dist/features/homepage/lib/live-stats.d.ts +14 -0
- package/dist/features/homepage/lib/live-stats.js +62 -0
- package/dist/features/homepage/lib/section-defaults.d.ts +11 -0
- package/dist/features/homepage/lib/section-defaults.js +45 -0
- package/dist/features/homepage/lib/section-helpers.d.ts +5 -0
- package/dist/features/homepage/lib/section-helpers.js +25 -0
- package/dist/features/homepage/lib/section-renderer.d.ts +33 -0
- package/dist/features/homepage/lib/section-renderer.js +164 -0
- package/dist/features/homepage/lib/social-feed-fetcher.d.ts +5 -0
- package/dist/features/homepage/lib/social-feed-fetcher.js +193 -0
- package/dist/features/homepage/schemas/firestore.d.ts +180 -29
- package/dist/features/homepage/schemas/firestore.js +5 -0
- package/dist/features/homepage/types/index.d.ts +48 -19
- package/dist/features/layout/AppLayoutShell.d.ts +6 -1
- package/dist/features/layout/AppLayoutShell.js +25 -9
- package/dist/features/layout/BottomActions.js +1 -1
- package/dist/features/layout/BottomNavbar.d.ts +15 -1
- package/dist/features/layout/BottomNavbar.js +8 -2
- package/dist/features/layout/FooterLayout.d.ts +7 -1
- package/dist/features/layout/FooterLayout.js +3 -3
- package/dist/features/layout/ListingLayout.js +2 -2
- package/dist/features/layout/MainNavbar.d.ts +6 -14
- package/dist/features/layout/MainNavbar.js +4 -16
- package/dist/features/layout/NavItem.js +1 -1
- package/dist/features/layout/NavbarLayout.d.ts +3 -1
- package/dist/features/layout/NavbarLayout.js +5 -5
- package/dist/features/layout/TitleBar.d.ts +4 -2
- package/dist/features/layout/TitleBar.js +5 -3
- package/dist/features/layout/TitleBarLayout.d.ts +3 -1
- package/dist/features/layout/TitleBarLayout.js +2 -2
- package/dist/features/layout/index.d.ts +1 -1
- package/dist/features/media/MediaPickerModal.d.ts +30 -0
- package/dist/features/media/MediaPickerModal.js +72 -0
- package/dist/features/media/index.d.ts +3 -1
- package/dist/features/media/index.js +1 -0
- package/dist/features/media/types/index.d.ts +12 -0
- package/dist/features/media/types/index.js +4 -2
- package/dist/features/media/upload/MediaUploadField.d.ts +5 -1
- package/dist/features/media/upload/MediaUploadField.js +56 -3
- package/dist/features/messages/schemas/firestore.d.ts +36 -0
- package/dist/features/messages/schemas/firestore.js +16 -0
- package/dist/features/orders/repository/orders.repository.d.ts +2 -2
- package/dist/features/orders/repository/orders.repository.js +2 -2
- package/dist/features/orders/schemas/firestore.d.ts +17 -4
- package/dist/features/orders/schemas/firestore.js +2 -2
- package/dist/features/orders/schemas/index.d.ts +18 -18
- package/dist/features/orders/schemas/index.js +3 -3
- package/dist/features/orders/types/index.d.ts +1 -1
- package/dist/features/orders/utils/order-splitter.d.ts +1 -1
- package/dist/features/orders/utils/order-splitter.js +2 -2
- package/dist/features/payments/repository/payout.repository.d.ts +4 -4
- package/dist/features/payments/repository/payout.repository.js +7 -7
- package/dist/features/payments/schemas/firestore.d.ts +6 -6
- package/dist/features/payments/schemas/firestore.js +6 -6
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +11 -10
- package/dist/features/pre-orders/components/PreOrderActionsClient.d.ts +11 -0
- package/dist/features/pre-orders/components/PreOrderActionsClient.js +28 -0
- package/dist/features/pre-orders/components/PreOrderDetailPageView.d.ts +2 -1
- package/dist/features/pre-orders/components/PreOrderDetailPageView.js +27 -9
- package/dist/features/pre-orders/components/PreOrderFilters.d.ts +3 -1
- package/dist/features/pre-orders/components/PreOrderFilters.js +9 -6
- package/dist/features/pre-orders/components/PreOrdersIndexListing.d.ts +3 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +132 -36
- package/dist/features/pre-orders/components/PreOrdersListView.js +3 -3
- package/dist/features/pre-orders/components/PreorderCard.js +1 -1
- package/dist/features/pre-orders/schemas/index.d.ts +10 -0
- package/dist/features/products/actions/product-actions.d.ts +2 -2
- package/dist/features/products/actions/product-actions.js +5 -5
- package/dist/features/products/api/[id]/route.js +5 -2
- package/dist/features/products/api/route.js +10 -14
- package/dist/features/products/columns/productTableColumns.js +2 -2
- package/dist/features/products/components/AuctionDetailView.d.ts +2 -1
- package/dist/features/products/components/AuctionDetailView.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.d.ts +3 -1
- package/dist/features/products/components/AuctionsIndexListing.js +93 -31
- package/dist/features/products/components/BidHistory.d.ts +2 -1
- package/dist/features/products/components/BidHistory.js +18 -2
- package/dist/features/products/components/MakeOfferButton.d.ts +10 -0
- package/dist/features/products/components/MakeOfferButton.js +68 -0
- package/dist/features/products/components/ProductDetailPageView.d.ts +11 -1
- package/dist/features/products/components/ProductDetailPageView.js +27 -8
- package/dist/features/products/components/ProductFilters.d.ts +7 -1
- package/dist/features/products/components/ProductFilters.js +4 -2
- package/dist/features/products/components/ProductForm.d.ts +19 -1
- package/dist/features/products/components/ProductForm.js +24 -6
- package/dist/features/products/components/ProductGrid.d.ts +10 -2
- package/dist/features/products/components/ProductGrid.js +76 -29
- package/dist/features/products/components/ProductsIndexListing.js +131 -45
- package/dist/features/products/components/RelatedProductsCarousel.js +1 -1
- package/dist/features/products/components/ShareButton.d.ts +7 -0
- package/dist/features/products/components/ShareButton.js +22 -0
- package/dist/features/products/components/index.d.ts +2 -0
- package/dist/features/products/components/index.js +1 -0
- package/dist/features/products/hooks/useProducts.d.ts +7 -0
- package/dist/features/products/hooks/useProducts.js +6 -4
- package/dist/features/products/repository/products.repository.d.ts +4 -8
- package/dist/features/products/repository/products.repository.js +17 -50
- package/dist/features/products/schemas/firestore.d.ts +11 -9
- package/dist/features/products/schemas/firestore.js +11 -3
- package/dist/features/products/schemas/index.d.ts +51 -50
- package/dist/features/products/schemas/index.js +2 -5
- package/dist/features/products/types/index.d.ts +13 -5
- package/dist/features/promotions/actions/coupon-actions.d.ts +2 -2
- package/dist/features/promotions/actions/coupon-actions.js +1 -1
- package/dist/features/promotions/actions/seller-coupon-actions.js +11 -6
- package/dist/features/promotions/api/route.js +3 -3
- package/dist/features/promotions/components/CouponCard.js +16 -7
- package/dist/features/promotions/components/CouponsIndexListing.js +3 -9
- package/dist/features/promotions/hooks/useCouponValidate.d.ts +1 -1
- package/dist/features/promotions/hooks/usePromotions.js +2 -2
- package/dist/features/promotions/repository/coupons.repository.d.ts +21 -15
- package/dist/features/promotions/repository/coupons.repository.js +97 -125
- package/dist/features/promotions/schemas/firestore.d.ts +31 -2
- package/dist/features/promotions/schemas/firestore.js +29 -0
- package/dist/features/promotions/schemas/index.d.ts +9 -12
- package/dist/features/promotions/schemas/index.js +1 -2
- package/dist/features/promotions/types/index.d.ts +1 -2
- package/dist/features/reviews/actions/review-actions.js +3 -2
- package/dist/features/reviews/components/ReviewDetailPageView.js +5 -9
- package/dist/features/reviews/components/ReviewFilters.js +1 -1
- package/dist/features/reviews/components/ReviewsIndexListing.js +58 -7
- package/dist/features/reviews/components/ReviewsList.js +2 -2
- package/dist/features/reviews/hooks/useReviews.d.ts +1 -0
- package/dist/features/reviews/hooks/useReviews.js +2 -1
- package/dist/features/reviews/repository/reviews.repository.d.ts +9 -4
- package/dist/features/reviews/repository/reviews.repository.js +18 -7
- package/dist/features/reviews/schemas/firestore.d.ts +5 -2
- package/dist/features/reviews/schemas/firestore.js +1 -0
- package/dist/features/reviews/schemas/index.d.ts +19 -16
- package/dist/features/reviews/schemas/index.js +3 -2
- package/dist/features/reviews/types/index.d.ts +3 -2
- package/dist/features/scams/actions/scam-actions.d.ts +29 -0
- package/dist/features/scams/actions/scam-actions.js +62 -0
- package/dist/features/scams/components/ScamProfileView.d.ts +10 -0
- package/dist/features/scams/components/ScamProfileView.js +51 -0
- package/dist/features/scams/components/ScamRegistryView.d.ts +6 -0
- package/dist/features/scams/components/ScamRegistryView.js +41 -0
- package/dist/features/scams/components/index.d.ts +4 -0
- package/dist/features/scams/components/index.js +2 -0
- package/dist/features/scams/constants/scam-types.d.ts +38 -0
- package/dist/features/scams/constants/scam-types.js +443 -0
- package/dist/features/scams/repository/scammer.repository.d.ts +67 -0
- package/dist/features/scams/repository/scammer.repository.js +160 -0
- package/dist/features/scams/schemas/firestore.d.ts +362 -0
- package/dist/features/scams/schemas/firestore.js +233 -0
- package/dist/features/search/components/Search.d.ts +12 -2
- package/dist/features/search/components/Search.js +26 -7
- package/dist/features/search/components/index.d.ts +1 -1
- package/dist/features/search/hooks/useNavSuggestions.d.ts +1 -1
- package/dist/features/search/hooks/useNavSuggestions.js +2 -2
- package/dist/features/search/schemas/index.d.ts +7 -7
- package/dist/features/seller/actions/offer-actions.js +52 -36
- package/dist/features/seller/actions/seller-actions.js +19 -13
- package/dist/features/seller/api/products/route.js +9 -4
- package/dist/features/seller/components/SellerAddressesView.d.ts +3 -12
- package/dist/features/seller/components/SellerAddressesView.js +144 -4
- package/dist/features/seller/components/SellerAuctionsView.js +58 -5
- package/dist/features/seller/components/SellerBidsView.d.ts +4 -0
- package/dist/features/seller/components/SellerBidsView.js +131 -0
- package/dist/features/seller/components/SellerCouponEditorView.d.ts +19 -0
- package/dist/features/seller/components/SellerCouponEditorView.js +67 -0
- package/dist/features/seller/components/SellerCouponsView.d.ts +5 -3
- package/dist/features/seller/components/SellerCouponsView.js +135 -13
- package/dist/features/seller/components/SellerCreateProductView.d.ts +4 -10
- package/dist/features/seller/components/SellerCreateProductView.js +4 -3
- package/dist/features/seller/components/SellerEditProductView.d.ts +4 -10
- package/dist/features/seller/components/SellerEditProductView.js +4 -3
- package/dist/features/seller/components/SellerOffersPanel.d.ts +20 -0
- package/dist/features/seller/components/SellerOffersPanel.js +138 -0
- package/dist/features/seller/components/SellerOffersView.js +56 -5
- package/dist/features/seller/components/SellerOrdersView.d.ts +2 -1
- package/dist/features/seller/components/SellerOrdersView.js +185 -16
- package/dist/features/seller/components/SellerPayoutRequestView.d.ts +7 -0
- package/dist/features/seller/components/SellerPayoutRequestView.js +63 -0
- package/dist/features/seller/components/SellerPayoutSettingsView.d.ts +3 -10
- package/dist/features/seller/components/SellerPayoutSettingsView.js +89 -3
- package/dist/features/seller/components/SellerPayoutsView.js +56 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +68 -0
- package/dist/features/seller/components/SellerProductShell.js +179 -0
- package/dist/features/seller/components/SellerProductsView.d.ts +2 -3
- package/dist/features/seller/components/SellerProductsView.js +194 -18
- package/dist/features/seller/components/SellerReviewsView.d.ts +5 -0
- package/dist/features/seller/components/SellerReviewsView.js +100 -0
- package/dist/features/seller/components/SellerShippingView.d.ts +3 -11
- package/dist/features/seller/components/SellerShippingView.js +87 -3
- package/dist/features/seller/components/SellerSidebar.d.ts +11 -3
- package/dist/features/seller/components/SellerSidebar.js +52 -8
- package/dist/features/seller/components/SellerStorefrontView.d.ts +26 -11
- package/dist/features/seller/components/SellerStorefrontView.js +45 -7
- package/dist/features/seller/components/index.d.ts +16 -2
- package/dist/features/seller/components/index.js +7 -0
- package/dist/features/seller/hooks/useSellerListingData.d.ts +3 -1
- package/dist/features/seller/hooks/useSellerListingData.js +6 -4
- package/dist/features/seller/repository/offer.repository.d.ts +3 -3
- package/dist/features/seller/repository/offer.repository.js +6 -6
- package/dist/features/seller/schemas/firestore.d.ts +7 -7
- package/dist/features/seller/schemas/firestore.js +4 -4
- package/dist/features/seller/schemas/index.d.ts +16 -16
- package/dist/features/shell/FormShell.d.ts +29 -0
- package/dist/features/shell/FormShell.js +103 -0
- package/dist/features/shell/QuickFormDrawer.d.ts +29 -0
- package/dist/features/shell/QuickFormDrawer.js +117 -0
- package/dist/features/shell/StepForm.d.ts +44 -0
- package/dist/features/shell/StepForm.js +81 -0
- package/dist/features/shell/index.d.ts +6 -0
- package/dist/features/shell/index.js +3 -0
- package/dist/features/stores/actions/store-query-actions.js +3 -3
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/products/route.js +1 -1
- package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
- package/dist/features/stores/components/InteractiveStoreCard.d.ts +2 -2
- package/dist/features/stores/components/InteractiveStoreCard.js +21 -7
- package/dist/features/stores/components/StoreAboutView.js +1 -1
- package/dist/features/stores/components/StoreAuctionsListing.d.ts +5 -2
- package/dist/features/stores/components/StoreAuctionsListing.js +81 -8
- package/dist/features/stores/components/StoreAuctionsPageView.js +8 -7
- package/dist/features/stores/components/StoreDetailLayoutView.d.ts +1 -0
- package/dist/features/stores/components/StoreDetailLayoutView.js +29 -5
- package/dist/features/stores/components/StoreHeader.js +2 -1
- package/dist/features/stores/components/StorePreOrdersListing.d.ts +4 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +59 -7
- package/dist/features/stores/components/StorePreOrdersPageView.js +8 -7
- package/dist/features/stores/components/StoreProductsListing.d.ts +5 -2
- package/dist/features/stores/components/StoreProductsListing.js +97 -8
- package/dist/features/stores/components/StoreProductsPageView.js +8 -7
- package/dist/features/stores/components/StoreReviewsListing.js +2 -2
- package/dist/features/stores/components/StoresIndexListing.js +74 -11
- package/dist/features/stores/components/StoresListView.js +1 -1
- package/dist/features/stores/hooks/useStores.d.ts +1 -0
- package/dist/features/stores/hooks/useStores.js +1 -0
- package/dist/features/stores/schemas/firestore.d.ts +34 -0
- package/dist/features/stores/schemas/index.d.ts +8 -8
- package/dist/features/sublisting/schemas/firestore.d.ts +30 -0
- package/dist/features/sublisting/schemas/firestore.js +19 -0
- package/dist/features/support/schemas/firestore.d.ts +113 -0
- package/dist/features/support/schemas/firestore.js +95 -0
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.d.ts +5 -0
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +143 -0
- package/dist/features/whatsapp-bot/components/index.d.ts +2 -0
- package/dist/features/whatsapp-bot/components/index.js +1 -0
- package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +23 -1
- package/dist/features/whatsapp-bot/helpers/whatsapp.js +104 -0
- package/dist/features/whatsapp-bot/server.d.ts +1 -0
- package/dist/features/whatsapp-bot/server.js +1 -0
- package/dist/features/whatsapp-bot/types/index.d.ts +49 -0
- package/dist/features/wishlist/components/WishlistView.d.ts +0 -10
- package/dist/features/wishlist/components/WishlistView.js +13 -6
- package/dist/features/wishlist/hooks/useWishlist.js +2 -0
- package/dist/features/wishlist/hooks/useWishlistCount.d.ts +11 -3
- package/dist/features/wishlist/hooks/useWishlistCount.js +89 -25
- package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +1 -1
- package/dist/features/wishlist/schemas/index.d.ts +2 -2
- package/dist/features/wishlist/types/index.d.ts +16 -0
- package/dist/http/api-handler.js +8 -1
- package/dist/index.d.ts +114 -16
- package/dist/index.js +136 -28
- package/dist/monitoring/server-logger.js +9 -3
- package/dist/next/routing/route-map.d.ts +120 -6
- package/dist/next/routing/route-map.js +53 -2
- package/dist/providers/db-firebase/realtime.d.ts +1 -1
- package/dist/react/contexts/SessionContext.js +17 -26
- package/dist/react/hooks/useBulkSelection.d.ts +7 -24
- package/dist/react/hooks/useBulkSelection.js +27 -34
- package/dist/react/hooks/useLongPress.d.ts +3 -16
- package/dist/react/hooks/useLongPress.js +6 -25
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +2 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.js +2 -0
- package/dist/seed/actions/demo-seed-actions.d.ts +2 -2
- package/dist/seed/actions/demo-seed-actions.js +1 -1
- package/dist/seed/anime-figures-seed-data.d.ts +8 -0
- package/dist/seed/anime-figures-seed-data.js +1033 -0
- package/dist/seed/beyblade-seed-data.js +206 -24
- package/dist/seed/bids-seed-data.d.ts +4 -10
- package/dist/seed/bids-seed-data.js +365 -238
- package/dist/seed/blog-posts-seed-data.d.ts +3 -2
- package/dist/seed/blog-posts-seed-data.js +250 -511
- package/dist/seed/brands-seed-data.d.ts +7 -0
- package/dist/seed/brands-seed-data.js +410 -0
- package/dist/seed/carousel-slides-seed-data.d.ts +3 -2
- package/dist/seed/carousel-slides-seed-data.js +177 -216
- package/dist/seed/cart-seed-data.d.ts +9 -9
- package/dist/seed/cart-seed-data.js +73 -73
- package/dist/seed/categories-seed-data.d.ts +4 -2
- package/dist/seed/categories-seed-data.js +720 -879
- package/dist/seed/conversations-seed-data.d.ts +8 -0
- package/dist/seed/conversations-seed-data.js +388 -0
- package/dist/seed/cosplay-accessories-seed-data.d.ts +8 -0
- package/dist/seed/cosplay-accessories-seed-data.js +647 -0
- package/dist/seed/coupon-usage-seed-data.d.ts +25 -0
- package/dist/seed/coupon-usage-seed-data.js +69 -0
- package/dist/seed/coupons-seed-data.d.ts +6 -3
- package/dist/seed/coupons-seed-data.js +375 -3
- package/dist/seed/events-seed-data.d.ts +4 -2
- package/dist/seed/events-seed-data.js +128 -430
- package/dist/seed/factories/cart.factory.d.ts +0 -1
- package/dist/seed/factories/cart.factory.js +2 -2
- package/dist/seed/faq-seed-data.d.ts +11 -18
- package/dist/seed/faq-seed-data.js +786 -1817
- package/dist/seed/grouped-listings-seed-data.d.ts +8 -0
- package/dist/seed/grouped-listings-seed-data.js +201 -0
- package/dist/seed/homepage-sections-seed-data.d.ts +3 -13
- package/dist/seed/homepage-sections-seed-data.js +228 -252
- package/dist/seed/hot-wheels-seed-data.js +285 -38
- package/dist/seed/index.d.ts +12 -11
- package/dist/seed/index.js +10 -12
- package/dist/seed/letitrip-official-seed-data.d.ts +8 -0
- package/dist/seed/letitrip-official-seed-data.js +399 -0
- package/dist/seed/manifest.d.ts +15 -0
- package/dist/seed/manifest.js +140 -0
- package/dist/seed/notifications-seed-data.d.ts +4 -2
- package/dist/seed/notifications-seed-data.js +117 -440
- package/dist/seed/orders-seed-data.d.ts +4 -2
- package/dist/seed/orders-seed-data.js +1090 -521
- package/dist/seed/payouts-seed-data.d.ts +4 -2
- package/dist/seed/payouts-seed-data.js +522 -145
- package/dist/seed/pokemon-carousel-slides-seed-data.js +6 -1
- package/dist/seed/pokemon-categories-seed-data.js +81 -81
- package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +1 -1
- package/dist/seed/pokemon-homepage-sections-seed-data.js +116 -23
- package/dist/seed/pokemon-products-seed-data.d.ts +1 -1
- package/dist/seed/pokemon-products-seed-data.js +83 -73
- package/dist/seed/pokemon-seed-bundle.d.ts +5 -1
- package/dist/seed/pokemon-seed-bundle.js +21 -2
- package/dist/seed/pokemon-stores-seed-data.js +85 -9
- package/dist/seed/pokemon-users-seed-data.js +107 -8
- package/dist/seed/products-auctions-seed-data.d.ts +10 -0
- package/dist/seed/products-auctions-seed-data.js +689 -0
- package/dist/seed/products-preorders-seed-data.d.ts +9 -0
- package/dist/seed/products-preorders-seed-data.js +483 -0
- package/dist/seed/products-seed-data.js +34 -13
- package/dist/seed/products-standard-seed-data.d.ts +8 -0
- package/dist/seed/products-standard-seed-data.js +4179 -0
- package/dist/seed/retro-gaming-seed-data.d.ts +8 -0
- package/dist/seed/retro-gaming-seed-data.js +801 -0
- package/dist/seed/reviews-seed-data.d.ts +4 -17
- package/dist/seed/reviews-seed-data.js +1043 -515
- package/dist/seed/scammers-seed-data.d.ts +17 -0
- package/dist/seed/scammers-seed-data.js +118 -0
- package/dist/seed/site-settings-seed-data.js +25 -2
- package/dist/seed/store-addresses-seed-data.js +188 -84
- package/dist/seed/stores-seed-data.d.ts +3 -9
- package/dist/seed/stores-seed-data.js +212 -102
- package/dist/seed/sublisting-categories-seed-data.d.ts +7 -0
- package/dist/seed/sublisting-categories-seed-data.js +315 -0
- package/dist/seed/transformers-seed-data.js +34 -14
- package/dist/seed/users-seed-data.d.ts +3 -2
- package/dist/seed/users-seed-data.js +531 -440
- package/dist/seed/wishlists-seed-data.js +13 -13
- package/dist/server.d.ts +9 -2
- package/dist/server.js +12 -4
- package/dist/tokens/tokens.css +76 -31
- package/dist/ui/components/Avatar.style.css +10 -12
- package/dist/ui/components/BaseListingCard.d.ts +8 -3
- package/dist/ui/components/BaseListingCard.js +17 -6
- package/dist/ui/components/BaseListingCard.style.css +3 -1
- package/dist/ui/components/BulkActionsBar.d.ts +16 -0
- package/dist/ui/components/BulkActionsBar.js +22 -0
- package/dist/ui/components/Button.style.css +23 -23
- package/dist/ui/components/Card.style.css +60 -62
- package/dist/ui/components/Checkbox.style.css +19 -21
- package/dist/ui/components/DashboardStatsCard.style.css +12 -14
- package/dist/ui/components/Drawer.style.css +18 -14
- package/dist/ui/components/Dropdown.style.css +25 -27
- package/dist/ui/components/EmptyState.style.css +2 -4
- package/dist/ui/components/HorizontalScroller.d.ts +3 -1
- package/dist/ui/components/HorizontalScroller.js +116 -21
- package/dist/ui/components/HorizontalScroller.style.css +2 -2
- package/dist/ui/components/ImageLightbox.d.ts +0 -9
- package/dist/ui/components/ImageLightbox.js +43 -9
- package/dist/ui/components/InlineCreateSelect.d.ts +38 -0
- package/dist/ui/components/InlineCreateSelect.js +70 -0
- package/dist/ui/components/ListingLayout.style.css +41 -77
- package/dist/ui/components/ListingToolbar.d.ts +54 -0
- package/dist/ui/components/ListingToolbar.js +34 -0
- package/dist/ui/components/Modal.style.css +14 -10
- package/dist/ui/components/PageLoader.d.ts +11 -0
- package/dist/ui/components/PageLoader.js +21 -0
- package/dist/ui/components/Radio.style.css +34 -36
- package/dist/ui/components/RichTextEditor.js +1 -1
- package/dist/ui/components/RowActionMenu.d.ts +1 -0
- package/dist/ui/components/RowActionMenu.js +4 -2
- package/dist/ui/components/SectionTabs.js +1 -1
- package/dist/ui/components/SectionTabs.style.css +1 -0
- package/dist/ui/components/SideModal.style.css +4 -8
- package/dist/ui/components/Slider.style.css +2 -4
- package/dist/ui/components/Tabs.style.css +8 -10
- package/dist/ui/components/Toast.style.css +22 -24
- package/dist/ui/components/Toggle.style.css +11 -13
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/rich-text/RichText.js +2 -1
- package/dist/ui/rich-text/RichText.style.css +292 -5
- package/dist/ui/rich-text/RichTextRenderer.d.ts +15 -0
- package/dist/ui/rich-text/RichTextRenderer.js +15 -0
- package/dist/utils/id-generators.d.ts +10 -0
- package/dist/utils/id-generators.js +12 -0
- package/dist/validation/schemas.d.ts +9 -9
- package/package.json +5 -1
- package/README.md +0 -116
|
@@ -16,5 +16,5 @@ export function WhatsAppCommunitySection({ title, descriptionHtml, memberCount,
|
|
|
16
16
|
if (groupLink)
|
|
17
17
|
window.open(groupLink, "_blank");
|
|
18
18
|
};
|
|
19
|
-
return (_jsx(Section, { className: `p-8 ${themed.bgSecondary} ${className}`, children: _jsx("div", { className: "w-full max-w-7xl mx-auto", "data-section": "whatsappcommunitysection-div-391", children: _jsxs("div", { className: "bg-gradient-to-br from-green-700 to-green-800 dark:from-emerald-800 dark:to-emerald-900 rounded-2xl p-8 text-white overflow-hidden relative", "data-section": "whatsappcommunitysection-div-392", children: [_jsx("div", { className: "absolute inset-0 opacity-10", "aria-hidden": true, "data-section": "whatsappcommunitysection-div-393", children: _jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsx("pattern", { id: "wa-dots", x: "0", y: "0", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: _jsx("circle", { cx: "20", cy: "20", r: "2", fill: "white" }) }) }), _jsx("rect", { width: "100%", height: "100%", fill: "url(#wa-dots)" })] }) }), _jsxs("div", { className: "relative z-10 text-center", "data-section": "whatsappcommunitysection-div-394", children: [_jsx("div", { className: `inline-flex items-center justify-center w-20 h-20 rounded-full bg-white/20 backdrop-blur-sm mb-6 mx-auto`, "data-section": "whatsappcommunitysection-div-395", children: _jsx(MessageCircle, { className: "w-10 h-10 text-white" }) }), _jsx(Heading, { level: 2, className: "mb-3 text-white", children: title }), descriptionHtml && (_jsx(RichText, { html: descriptionHtml, className: "text-lg md:text-xl mb-2 opacity-90
|
|
19
|
+
return (_jsx(Section, { className: `p-8 ${themed.bgSecondary} ${className}`, children: _jsx("div", { className: "w-full max-w-7xl mx-auto", "data-section": "whatsappcommunitysection-div-391", children: _jsxs("div", { className: "bg-gradient-to-br from-green-700 to-green-800 dark:from-emerald-800 dark:to-emerald-900 rounded-2xl p-8 text-white overflow-hidden relative", "data-section": "whatsappcommunitysection-div-392", children: [_jsx("div", { className: "absolute inset-0 opacity-10", "aria-hidden": true, "data-section": "whatsappcommunitysection-div-393", children: _jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsx("pattern", { id: "wa-dots", x: "0", y: "0", width: "40", height: "40", patternUnits: "userSpaceOnUse", children: _jsx("circle", { cx: "20", cy: "20", r: "2", fill: "white" }) }) }), _jsx("rect", { width: "100%", height: "100%", fill: "url(#wa-dots)" })] }) }), _jsxs("div", { className: "relative z-10 text-center", "data-section": "whatsappcommunitysection-div-394", children: [_jsx("div", { className: `inline-flex items-center justify-center w-20 h-20 rounded-full bg-white/20 backdrop-blur-sm mb-6 mx-auto`, "data-section": "whatsappcommunitysection-div-395", children: _jsx(MessageCircle, { className: "w-10 h-10 text-white" }) }), _jsx(Heading, { level: 2, className: "mb-3 text-white", children: title }), descriptionHtml && (_jsx(RichText, { html: descriptionHtml, proseClass: "prose max-w-none prose-invert prose-sm", className: "text-lg md:text-xl mb-2 opacity-90" })), memberCount && (_jsxs("div", { className: `${flex.center} gap-3 mb-4`, "data-section": "whatsappcommunitysection-div-396", children: [_jsx("div", { className: "flex -space-x-2", "data-section": "whatsappcommunitysection-div-397", children: ["A", "R", "S", "M", "P"].map((initial, i) => (_jsx("div", { className: `w-8 h-8 rounded-full border-2 border-white bg-green-700 ${flex.center} text-white text-xs font-bold`, "data-section": "whatsappcommunitysection-div-398", children: initial }, i))) }), _jsxs(Text, { variant: "none", className: "text-white font-bold", children: [_jsx(Span, { className: "text-xl font-extrabold", children: memberCount.toLocaleString(getDefaultLocale()) }), " ", memberCountLabel] })] })), testimonial && (_jsxs(Text, { size: "sm", variant: "none", className: "italic text-white/90 max-w-sm mx-auto mb-6", children: ["\u201C", testimonial, "\u201D"] })), benefits.length > 0 && (_jsx(Grid, { className: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 xl:grid-cols-4 2xl:grid-cols-4 max-w-2xl mx-auto my-8", children: benefits.slice(0, 4).map((benefit, index) => (_jsxs("div", { className: "flex items-start gap-3 text-left bg-white/10 backdrop-blur-sm p-4 rounded-lg", "data-section": "whatsappcommunitysection-div-399", children: [_jsx("svg", { className: "w-6 h-6 mt-0.5 flex-shrink-0", fill: "currentColor", viewBox: "0 0 20 20", children: _jsx("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }) }), _jsx(Span, { className: "text-sm md:text-base", children: benefit })] }, index))) })), groupLink && (_jsxs("div", { className: "relative inline-block", "data-section": "whatsappcommunitysection-div-400", children: [_jsx("div", { className: "absolute inset-0 rounded-full bg-lime-400/30 animate-pulse blur-md scale-110", "aria-hidden": true }), _jsxs(Button, { variant: "primary", size: "lg", "aria-label": buttonText, onClick: handleJoin, className: "relative !bg-white !text-green-700 hover:!bg-zinc-100 shadow-xl hover:shadow-2xl", children: [_jsx("svg", { className: "w-6 h-6 mr-2", fill: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z" }) }), buttonText] })] }))] })] }) }) }));
|
|
20
20
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AdSlotId } from "../ad-registry";
|
|
2
|
+
export type ActiveAdCreative = {
|
|
3
|
+
title?: string;
|
|
4
|
+
body?: string;
|
|
5
|
+
imageUrl?: string;
|
|
6
|
+
ctaLabel?: string;
|
|
7
|
+
ctaHref?: string;
|
|
8
|
+
adsenseSlot?: string;
|
|
9
|
+
thirdPartyUrl?: string;
|
|
10
|
+
};
|
|
11
|
+
export type ActiveAdRecord = {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
provider: "manual" | "adsense" | "thirdParty";
|
|
15
|
+
requiresConsent?: boolean;
|
|
16
|
+
creative: ActiveAdCreative;
|
|
17
|
+
};
|
|
18
|
+
type State = {
|
|
19
|
+
loading: boolean;
|
|
20
|
+
ad: ActiveAdRecord | null;
|
|
21
|
+
};
|
|
22
|
+
export declare function useActiveAd(slotId: AdSlotId): State;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
export function useActiveAd(slotId) {
|
|
4
|
+
const [state, setState] = useState({ loading: true, ad: null });
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
let cancelled = false;
|
|
7
|
+
fetch(`/api/ads?slot=${encodeURIComponent(slotId)}`)
|
|
8
|
+
.then((r) => r.json())
|
|
9
|
+
.then((json) => {
|
|
10
|
+
if (!cancelled)
|
|
11
|
+
setState({ loading: false, ad: json?.data ?? null });
|
|
12
|
+
})
|
|
13
|
+
.catch(() => {
|
|
14
|
+
if (!cancelled)
|
|
15
|
+
setState({ loading: false, ad: null });
|
|
16
|
+
});
|
|
17
|
+
return () => { cancelled = true; };
|
|
18
|
+
}, [slotId]);
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
@@ -5,6 +5,16 @@ const MIN_BLOG_COUNT = 4;
|
|
|
5
5
|
export function useBlogArticles(options) {
|
|
6
6
|
return useQuery({
|
|
7
7
|
queryKey: ["blog", "featured"],
|
|
8
|
+
initialData: options?.initialPosts?.length
|
|
9
|
+
? {
|
|
10
|
+
posts: options.initialPosts,
|
|
11
|
+
meta: {
|
|
12
|
+
total: options.initialPosts.length,
|
|
13
|
+
page: 1,
|
|
14
|
+
pageSize: options.initialPosts.length,
|
|
15
|
+
},
|
|
16
|
+
}
|
|
17
|
+
: undefined,
|
|
8
18
|
queryFn: async () => {
|
|
9
19
|
const featuredEndpoint = options?.endpoint ?? BLOG_ENDPOINTS.FEATURED(MIN_BLOG_COUNT);
|
|
10
20
|
const featuredResult = await apiClient.get(featuredEndpoint);
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import type { ProductItem } from "@mohasinac/appkit/features/products";
|
|
2
|
-
export declare function useFeaturedAuctions(
|
|
2
|
+
export declare function useFeaturedAuctions(options?: {
|
|
3
|
+
filterByBrand?: string;
|
|
4
|
+
initialData?: ProductItem[];
|
|
5
|
+
}): import("@tanstack/react-query").UseQueryResult<ProductItem[], Error>;
|
|
@@ -2,16 +2,20 @@ import { useQuery } from "@tanstack/react-query";
|
|
|
2
2
|
import { apiClient } from "../../../http";
|
|
3
3
|
import { PRODUCT_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
4
|
const MIN_COUNT = 12;
|
|
5
|
-
export function useFeaturedAuctions() {
|
|
5
|
+
export function useFeaturedAuctions(options) {
|
|
6
|
+
const brandFilter = options?.filterByBrand
|
|
7
|
+
? `%2Cbrand%3D%3D${encodeURIComponent(options.filterByBrand)}`
|
|
8
|
+
: "";
|
|
6
9
|
return useQuery({
|
|
7
|
-
queryKey: ["auctions", "featured"],
|
|
10
|
+
queryKey: ["auctions", "featured", options?.filterByBrand ?? "all"],
|
|
11
|
+
initialData: options?.initialData,
|
|
8
12
|
queryFn: async () => {
|
|
9
|
-
const promotedRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished%2CisPromoted%3D%3Dtrue&pageSize=18`);
|
|
13
|
+
const promotedRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished%2CisPromoted%3D%3Dtrue${brandFilter}&pageSize=18`);
|
|
10
14
|
const promoted = promotedRes?.items ?? [];
|
|
11
15
|
if (promoted.length >= MIN_COUNT)
|
|
12
16
|
return promoted;
|
|
13
17
|
const remaining = MIN_COUNT - promoted.length;
|
|
14
|
-
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + promoted.length}`);
|
|
18
|
+
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isAuction%3D%3Dtrue%2Cstatus%3D%3Dpublished${brandFilter}&sorts=-createdAt&pageSize=${remaining + promoted.length}`);
|
|
15
19
|
const latest = latestRes?.items ?? [];
|
|
16
20
|
const existingIds = new Set(promoted.map((a) => a.id));
|
|
17
21
|
const filler = latest
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import type { ProductItem } from "@mohasinac/appkit/features/products";
|
|
2
|
-
export declare function useFeaturedPreOrders(
|
|
2
|
+
export declare function useFeaturedPreOrders(options?: {
|
|
3
|
+
filterByBrand?: string;
|
|
4
|
+
initialData?: ProductItem[];
|
|
5
|
+
}): import("@tanstack/react-query").UseQueryResult<ProductItem[], Error>;
|
|
@@ -2,16 +2,20 @@ import { useQuery } from "@tanstack/react-query";
|
|
|
2
2
|
import { apiClient } from "../../../http";
|
|
3
3
|
import { PRODUCT_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
4
|
const MIN_COUNT = 12;
|
|
5
|
-
export function useFeaturedPreOrders() {
|
|
5
|
+
export function useFeaturedPreOrders(options) {
|
|
6
|
+
const brandFilter = options?.filterByBrand
|
|
7
|
+
? `%2Cbrand%3D%3D${encodeURIComponent(options.filterByBrand)}`
|
|
8
|
+
: "";
|
|
6
9
|
return useQuery({
|
|
7
|
-
queryKey: ["pre-orders", "featured"],
|
|
10
|
+
queryKey: ["pre-orders", "featured", options?.filterByBrand ?? "all"],
|
|
11
|
+
initialData: options?.initialData,
|
|
8
12
|
queryFn: async () => {
|
|
9
|
-
const featuredRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=preOrderDeliveryDate&pageSize=6`);
|
|
13
|
+
const featuredRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished${brandFilter}&sorts=preOrderDeliveryDate&pageSize=6`);
|
|
10
14
|
const featured = featuredRes?.items ?? [];
|
|
11
15
|
if (featured.length >= MIN_COUNT)
|
|
12
16
|
return featured;
|
|
13
17
|
const remaining = MIN_COUNT - featured.length;
|
|
14
|
-
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + featured.length}`);
|
|
18
|
+
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPreOrder%3D%3Dtrue%2Cstatus%3D%3Dpublished${brandFilter}&sorts=-createdAt&pageSize=${remaining + featured.length}`);
|
|
15
19
|
const latest = latestRes?.items ?? [];
|
|
16
20
|
const existingIds = new Set(featured.map((p) => p.id));
|
|
17
21
|
const filler = latest
|
|
@@ -3,15 +3,18 @@ import { apiClient } from "../../../http";
|
|
|
3
3
|
import { PRODUCT_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
4
|
const MIN_COUNT = 12;
|
|
5
5
|
export function useFeaturedProducts(options) {
|
|
6
|
+
const brandFilter = options?.filterByBrand
|
|
7
|
+
? `%2Cbrand%3D%3D${encodeURIComponent(options.filterByBrand)}`
|
|
8
|
+
: "";
|
|
6
9
|
return useQuery({
|
|
7
|
-
queryKey: ["products", "featured"],
|
|
10
|
+
queryKey: ["products", "featured", options?.filterByBrand ?? "all"],
|
|
8
11
|
queryFn: async () => {
|
|
9
|
-
const promotedRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPromoted%3D%3Dtrue%2Cstatus%3D%3Dpublished&pageSize=18`);
|
|
12
|
+
const promotedRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=isPromoted%3D%3Dtrue%2Cstatus%3D%3Dpublished${brandFilter}&pageSize=18`);
|
|
10
13
|
const promoted = promotedRes?.items ?? [];
|
|
11
14
|
if (promoted.length >= MIN_COUNT)
|
|
12
15
|
return promotedRes;
|
|
13
16
|
const remaining = MIN_COUNT - promoted.length;
|
|
14
|
-
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=status%3D%3Dpublished&sorts=-createdAt&pageSize=${remaining + promoted.length}`);
|
|
17
|
+
const latestRes = await apiClient.get(`${PRODUCT_ENDPOINTS.LIST}?filters=status%3D%3Dpublished${brandFilter}&sorts=-createdAt&pageSize=${remaining + promoted.length}`);
|
|
15
18
|
const latest = latestRes?.items ?? [];
|
|
16
19
|
const existingIds = new Set(promoted.map((p) => p.id));
|
|
17
20
|
const filler = latest
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { StoreListItem } from "../../stores/types";
|
|
2
|
-
export declare function useFeaturedStores(limit?: number
|
|
2
|
+
export declare function useFeaturedStores(limit?: number, options?: {
|
|
3
|
+
initialData?: StoreListItem[];
|
|
4
|
+
}): import("@tanstack/react-query").UseQueryResult<StoreListItem[], Error>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { useQuery } from "@tanstack/react-query";
|
|
2
2
|
import { apiClient } from "../../../http";
|
|
3
3
|
import { STORE_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
|
-
export function useFeaturedStores(limit = 8) {
|
|
4
|
+
export function useFeaturedStores(limit = 8, options) {
|
|
5
5
|
return useQuery({
|
|
6
6
|
queryKey: ["stores", "featured", String(limit)],
|
|
7
|
+
initialData: options?.initialData,
|
|
7
8
|
queryFn: async () => {
|
|
8
9
|
const res = await apiClient.get(`${STORE_ENDPOINTS.LIST}?pageSize=${limit}&sort=-averageRating`);
|
|
9
10
|
return res?.items ?? [];
|
|
@@ -3,4 +3,6 @@ export interface HomepageEventsListResponse {
|
|
|
3
3
|
items: EventItem[];
|
|
4
4
|
total: number;
|
|
5
5
|
}
|
|
6
|
-
export declare function useHomepageEvents(limit?: number
|
|
6
|
+
export declare function useHomepageEvents(limit?: number, options?: {
|
|
7
|
+
initialData?: EventItem[];
|
|
8
|
+
}): import("@tanstack/react-query").UseQueryResult<EventItem[], Error>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { useQuery } from "@tanstack/react-query";
|
|
2
2
|
import { apiClient } from "../../../http";
|
|
3
3
|
import { EVENT_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
|
-
export function useHomepageEvents(limit = 6) {
|
|
4
|
+
export function useHomepageEvents(limit = 6, options) {
|
|
5
5
|
return useQuery({
|
|
6
6
|
queryKey: ["events", "homepage", String(limit)],
|
|
7
|
+
initialData: options?.initialData,
|
|
7
8
|
queryFn: async () => {
|
|
8
9
|
const res = await apiClient.get(`${EVENT_ENDPOINTS.LIST}?filters=status%3D%3Dactive&pageSize=${limit}`);
|
|
9
10
|
return res?.items ?? [];
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { CategoryItem } from "../../categories/types";
|
|
2
|
-
export declare function useTopBrands(limit?: number
|
|
2
|
+
export declare function useTopBrands(limit?: number, options?: {
|
|
3
|
+
initialData?: CategoryItem[];
|
|
4
|
+
}): import("@tanstack/react-query").UseQueryResult<CategoryItem[], Error>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { useQuery } from "@tanstack/react-query";
|
|
2
2
|
import { apiClient } from "../../../http";
|
|
3
3
|
import { CATEGORY_ENDPOINTS } from "../../../constants/api-endpoints";
|
|
4
|
-
export function useTopBrands(limit = 12) {
|
|
4
|
+
export function useTopBrands(limit = 12, options) {
|
|
5
5
|
return useQuery({
|
|
6
6
|
queryKey: ["categories", "brands", String(limit)],
|
|
7
|
+
initialData: options?.initialData,
|
|
7
8
|
queryFn: () => apiClient.get(CATEGORY_ENDPOINTS.BRANDS(limit)),
|
|
8
9
|
staleTime: Infinity,
|
|
9
10
|
gcTime: Infinity,
|
|
@@ -10,6 +10,8 @@ export * from "./hooks/useTopBrands";
|
|
|
10
10
|
export * from "./hooks/useBlogArticles";
|
|
11
11
|
export * from "./hooks/useHomepageReviews";
|
|
12
12
|
export * from "./hooks/useNewsletter";
|
|
13
|
+
export { useActiveAd } from "./hooks/useActiveAd";
|
|
14
|
+
export type { ActiveAdRecord, ActiveAdCreative } from "./hooks/useActiveAd";
|
|
13
15
|
export * from "./hooks/useFeaturedStores";
|
|
14
16
|
export * from "./hooks/useHomepageEvents";
|
|
15
17
|
export * from "./components";
|
|
@@ -10,6 +10,7 @@ export * from "./hooks/useTopBrands";
|
|
|
10
10
|
export * from "./hooks/useBlogArticles";
|
|
11
11
|
export * from "./hooks/useHomepageReviews";
|
|
12
12
|
export * from "./hooks/useNewsletter";
|
|
13
|
+
export { useActiveAd } from "./hooks/useActiveAd";
|
|
13
14
|
export * from "./hooks/useFeaturedStores";
|
|
14
15
|
export * from "./hooks/useHomepageEvents";
|
|
15
16
|
export * from "./components";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface GoogleReview {
|
|
2
|
+
authorName: string;
|
|
3
|
+
authorPhotoUrl: string;
|
|
4
|
+
rating: number;
|
|
5
|
+
text: string;
|
|
6
|
+
time: number;
|
|
7
|
+
profileUrl: string;
|
|
8
|
+
}
|
|
9
|
+
export interface GoogleReviewsResult {
|
|
10
|
+
reviews: GoogleReview[];
|
|
11
|
+
aggregateRating: number;
|
|
12
|
+
totalRatings: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function fetchGoogleReviews(placeId: string, apiKey: string, maxReviews?: number, minRating?: number): Promise<GoogleReviewsResult>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export async function fetchGoogleReviews(placeId, apiKey, maxReviews = 5, minRating = 0) {
|
|
2
|
+
const url = new URL("https://maps.googleapis.com/maps/api/place/details/json");
|
|
3
|
+
url.searchParams.set("place_id", placeId);
|
|
4
|
+
url.searchParams.set("fields", "reviews,rating,user_ratings_total");
|
|
5
|
+
url.searchParams.set("key", apiKey);
|
|
6
|
+
const res = await fetch(url.toString(), { next: { revalidate: 3600 } });
|
|
7
|
+
if (!res.ok)
|
|
8
|
+
throw new Error(`Google Places API error: ${res.status}`);
|
|
9
|
+
const json = (await res.json());
|
|
10
|
+
const raw = Array.isArray(json.result?.reviews) ? json.result.reviews : [];
|
|
11
|
+
const reviews = raw
|
|
12
|
+
.filter((r) => (r.rating ?? 0) >= minRating)
|
|
13
|
+
.slice(0, maxReviews)
|
|
14
|
+
.map((r) => ({
|
|
15
|
+
authorName: r.author_name ?? "Anonymous",
|
|
16
|
+
authorPhotoUrl: r.profile_photo_url ?? "",
|
|
17
|
+
rating: r.rating ?? 0,
|
|
18
|
+
text: r.text ?? "",
|
|
19
|
+
time: r.time ?? 0,
|
|
20
|
+
profileUrl: r.author_url ?? "",
|
|
21
|
+
}));
|
|
22
|
+
return {
|
|
23
|
+
reviews,
|
|
24
|
+
aggregateRating: json.result?.rating ?? 0,
|
|
25
|
+
totalRatings: json.result?.user_ratings_total ?? 0,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live platform stats for the homepage stats section.
|
|
3
|
+
*
|
|
4
|
+
* Called server-side only inside MarketplaceHomepageView. Failures in any
|
|
5
|
+
* individual metric are silently swallowed — the section falls back to the
|
|
6
|
+
* static `value` from the Firestore section config.
|
|
7
|
+
*/
|
|
8
|
+
import type { LiveStatMetric } from "../schemas/firestore";
|
|
9
|
+
export type LiveStatsMap = Partial<Record<LiveStatMetric, string>>;
|
|
10
|
+
/**
|
|
11
|
+
* Fetch live stats for the requested metrics only.
|
|
12
|
+
* Pass the exact metric keys needed so unused Firestore queries are skipped.
|
|
13
|
+
*/
|
|
14
|
+
export declare function fetchLiveStats(metrics: LiveStatMetric[]): Promise<LiveStatsMap>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live platform stats for the homepage stats section.
|
|
3
|
+
*
|
|
4
|
+
* Called server-side only inside MarketplaceHomepageView. Failures in any
|
|
5
|
+
* individual metric are silently swallowed — the section falls back to the
|
|
6
|
+
* static `value` from the Firestore section config.
|
|
7
|
+
*/
|
|
8
|
+
import { productRepository, storeRepository, userRepository, reviewRepository, orderRepository, } from "../../../repositories";
|
|
9
|
+
/**
|
|
10
|
+
* Fetch live stats for the requested metrics only.
|
|
11
|
+
* Pass the exact metric keys needed so unused Firestore queries are skipped.
|
|
12
|
+
*/
|
|
13
|
+
export async function fetchLiveStats(metrics) {
|
|
14
|
+
if (metrics.length === 0)
|
|
15
|
+
return {};
|
|
16
|
+
const needed = new Set(metrics);
|
|
17
|
+
const result = {};
|
|
18
|
+
const tasks = [];
|
|
19
|
+
if (needed.has("total_listings")) {
|
|
20
|
+
tasks.push(productRepository
|
|
21
|
+
.count()
|
|
22
|
+
.then((n) => { result.total_listings = String(n); })
|
|
23
|
+
.catch(() => { }));
|
|
24
|
+
}
|
|
25
|
+
if (needed.has("verified_sellers")) {
|
|
26
|
+
tasks.push(storeRepository
|
|
27
|
+
.count()
|
|
28
|
+
.then((n) => { result.verified_sellers = String(n); })
|
|
29
|
+
.catch(() => { }));
|
|
30
|
+
}
|
|
31
|
+
if (needed.has("total_buyers")) {
|
|
32
|
+
tasks.push(userRepository
|
|
33
|
+
.countByRole("user")
|
|
34
|
+
.then((n) => { result.total_buyers = String(n); })
|
|
35
|
+
.catch(() => { }));
|
|
36
|
+
}
|
|
37
|
+
if (needed.has("total_orders")) {
|
|
38
|
+
tasks.push(orderRepository
|
|
39
|
+
.count()
|
|
40
|
+
.then((n) => { result.total_orders = String(n); })
|
|
41
|
+
.catch(() => { }));
|
|
42
|
+
}
|
|
43
|
+
if (needed.has("total_reviews") || needed.has("platform_rating")) {
|
|
44
|
+
tasks.push(reviewRepository
|
|
45
|
+
.findAll()
|
|
46
|
+
.then((res) => {
|
|
47
|
+
const all = Array.isArray(res) ? res : (res?.data ?? []);
|
|
48
|
+
// Filter to approved reviews only for rating calculation
|
|
49
|
+
const approved = all.filter((r) => !r.status || r.status === "approved");
|
|
50
|
+
if (needed.has("total_reviews")) {
|
|
51
|
+
result.total_reviews = String(approved.length);
|
|
52
|
+
}
|
|
53
|
+
if (needed.has("platform_rating") && approved.length > 0) {
|
|
54
|
+
const avg = approved.reduce((sum, r) => sum + (r.rating ?? 0), 0) / approved.length;
|
|
55
|
+
result.platform_rating = avg.toFixed(1) + "★";
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
.catch(() => { }));
|
|
59
|
+
}
|
|
60
|
+
await Promise.all(tasks);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Static default content used when Firestore section config has no override. */
|
|
2
|
+
export declare const DEFAULT_TRUST_FEATURES: {
|
|
3
|
+
iconName: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}[];
|
|
7
|
+
export declare const DEFAULT_SECURITY_ITEMS: {
|
|
8
|
+
key: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}[];
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Static default content used when Firestore section config has no override. */
|
|
2
|
+
export const DEFAULT_TRUST_FEATURES = [
|
|
3
|
+
{
|
|
4
|
+
iconName: "secure-payments",
|
|
5
|
+
title: "Secure Payments",
|
|
6
|
+
description: "Protected payments with transparent order tracking.",
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
iconName: "fast-delivery",
|
|
10
|
+
title: "Fast Delivery",
|
|
11
|
+
description: "Fast shipping with reliable nationwide logistics partners.",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
iconName: "easy-returns",
|
|
15
|
+
title: "Easy Returns",
|
|
16
|
+
description: "Hassle-free returns within the policy window.",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
iconName: "support",
|
|
20
|
+
title: "24/7 Support",
|
|
21
|
+
description: "Real help from our team across pre and post purchase.",
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
export const DEFAULT_SECURITY_ITEMS = [
|
|
25
|
+
{
|
|
26
|
+
key: "encryption",
|
|
27
|
+
title: "End-to-End Encryption",
|
|
28
|
+
description: "All sensitive data is encrypted in transit and at rest.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: "tls",
|
|
32
|
+
title: "TLS 1.3 in Transit",
|
|
33
|
+
description: "Every API call and page load is secured with modern TLS.",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "rbac",
|
|
37
|
+
title: "Role-Based Access",
|
|
38
|
+
description: "Strict role boundaries keep buyer, seller, and admin data separate.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "min-priv",
|
|
42
|
+
title: "Minimum-Privilege Tokens",
|
|
43
|
+
description: "Short-lived, scoped tokens minimise exposure on every request.",
|
|
44
|
+
},
|
|
45
|
+
];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared string helpers for homepage section rendering. */
|
|
2
|
+
/** Strip leading emoji/symbols that admins sometimes prefix onto DB titles. */
|
|
3
|
+
export declare function cleanTitle(raw: string | undefined): string | undefined;
|
|
4
|
+
/** Parse a ProseMirror/Tiptap JSON welcome description to plain text, or return as-is. */
|
|
5
|
+
export declare function parseWelcomeDescription(description: string | undefined): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Shared string helpers for homepage section rendering. */
|
|
2
|
+
/** Strip leading emoji/symbols that admins sometimes prefix onto DB titles. */
|
|
3
|
+
export function cleanTitle(raw) {
|
|
4
|
+
if (!raw)
|
|
5
|
+
return raw;
|
|
6
|
+
const cleaned = raw.replace(/^[^\p{L}\p{N}]+/u, "").trim();
|
|
7
|
+
return cleaned || raw;
|
|
8
|
+
}
|
|
9
|
+
/** Parse a ProseMirror/Tiptap JSON welcome description to plain text, or return as-is. */
|
|
10
|
+
export function parseWelcomeDescription(description) {
|
|
11
|
+
if (!description)
|
|
12
|
+
return "";
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(description);
|
|
15
|
+
const extracted = parsed.content
|
|
16
|
+
?.flatMap((node) => node.content ?? [])
|
|
17
|
+
.map((leaf) => leaf.text ?? "")
|
|
18
|
+
.join(" ")
|
|
19
|
+
.trim();
|
|
20
|
+
return extracted || description;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return description;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type LiveStatsMap } from "./live-stats";
|
|
3
|
+
import { AnnouncementBar } from "../components/AnnouncementBar";
|
|
4
|
+
import type { CarouselSlide } from "../types/index";
|
|
5
|
+
import type { HomepageSectionDocument } from "../schemas";
|
|
6
|
+
import type { ProductItem } from "../../products/types";
|
|
7
|
+
import type { StoreListItem } from "../../stores/types";
|
|
8
|
+
import type { CategoryItem } from "../../categories/types";
|
|
9
|
+
import type { BlogPost } from "../../blog/types";
|
|
10
|
+
import type { EventItem } from "../../events/types";
|
|
11
|
+
export interface SectionData {
|
|
12
|
+
products?: ProductItem[];
|
|
13
|
+
auctions?: ProductItem[];
|
|
14
|
+
preOrders?: ProductItem[];
|
|
15
|
+
stores?: StoreListItem[];
|
|
16
|
+
categories?: CategoryItem[];
|
|
17
|
+
brands?: CategoryItem[];
|
|
18
|
+
blog?: BlogPost[];
|
|
19
|
+
events?: EventItem[];
|
|
20
|
+
}
|
|
21
|
+
export interface MarketplaceHomepageViewAdSlots {
|
|
22
|
+
afterHero?: React.ReactNode;
|
|
23
|
+
afterFeaturedProducts?: React.ReactNode;
|
|
24
|
+
afterReviews?: React.ReactNode;
|
|
25
|
+
afterFAQ?: React.ReactNode;
|
|
26
|
+
}
|
|
27
|
+
export type FaqItem = {
|
|
28
|
+
id: string;
|
|
29
|
+
question: string;
|
|
30
|
+
answer: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function renderSection(section: HomepageSectionDocument, adSlots: MarketplaceHomepageViewAdSlots | undefined, newsletterFormSlot: React.ReactNode, faqItems: FaqItem[], slides: CarouselSlide[], liveStats: LiveStatsMap, sectionData?: SectionData): React.ReactNode;
|
|
33
|
+
export { AnnouncementBar };
|