orionplace-react 0.1.0 → 0.2.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/README.md +332 -38
- package/bin/orionplace-react.mjs +4 -1
- package/package.json +18 -5
- package/runtime/app.d.mts +6 -0
- package/runtime/app.mjs +48 -0
- package/runtime/marketplace.d.mts +13 -8
- package/runtime/marketplace.mjs +287 -211
- package/src/project-readme.mjs +95 -35
- package/src/setup.mjs +36 -13
- package/templates/app/StorefrontShell.tsx +435 -0
- package/templates/app/[[...path]]/page.app.tsx +11 -0
- package/templates/app/_storefront/ActivityPage.tsx +23 -0
- package/templates/app/_storefront/AddressesPage.tsx +29 -0
- package/templates/app/_storefront/AppRoutes.tsx +182 -0
- package/templates/app/_storefront/ArticlePage.tsx +81 -0
- package/templates/app/_storefront/CartPage.tsx +53 -0
- package/templates/app/_storefront/CatalogPage.tsx +37 -0
- package/templates/app/_storefront/CategoryPage.tsx +64 -0
- package/templates/app/_storefront/ContactPage.tsx +32 -0
- package/templates/app/_storefront/HomePage.tsx +140 -0
- package/templates/app/_storefront/JournalPage.tsx +36 -0
- package/templates/app/_storefront/LogoutPage.tsx +91 -0
- package/templates/app/_storefront/ManufacturersPage.tsx +64 -0
- package/templates/app/_storefront/OrdersPage.tsx +129 -0
- package/templates/app/_storefront/ProductPage.tsx +105 -0
- package/templates/app/_storefront/ProfilePage.tsx +75 -0
- package/templates/app/_storefront/PromoPage.tsx +66 -0
- package/templates/app/_storefront/PromocodesPage.tsx +17 -0
- package/templates/app/_storefront/SearchPage.tsx +220 -0
- package/templates/app/_storefront/SellersPage.tsx +160 -0
- package/templates/app/_storefront/StorefrontErrorRoute.tsx +42 -0
- package/templates/app/_storefront/StorefrontPageMetadata.tsx +74 -0
- package/templates/app/_storefront/StorefrontPageStatus.tsx +61 -0
- package/templates/app/_storefront/StoresPage.tsx +53 -0
- package/templates/app/_storefront/SubscriptionsPage.tsx +62 -0
- package/templates/app/_storefront/SupportPage.tsx +141 -0
- package/templates/app/_storefront/TariffsPage.tsx +180 -0
- package/templates/app/_storefront/UnsubscribePage.tsx +29 -0
- package/templates/app/_storefront/WalletPage.tsx +78 -0
- package/templates/app/_storefront/WishlistPage.tsx +79 -0
- package/templates/app/_storefront/storefrontRoutes.tsx +738 -0
- package/templates/app/_storefront/useAccountWallet.ts +27 -0
- package/templates/app/_storefront/useBlogComments.ts +389 -0
- package/templates/app/_storefront/useProductSearch.ts +171 -0
- package/templates/app/_storefront/useStorefrontNavigation.ts +36 -0
- package/templates/app/activity/page.tsx +9 -0
- package/templates/app/addresses/page.tsx +9 -0
- package/templates/app/api/[...orionplace]/route.ts +11 -4
- package/templates/app/browse/page.tsx +27 -0
- package/templates/app/cart/page.tsx +9 -0
- package/templates/app/catalog/page.tsx +9 -0
- package/templates/app/category/[id]/page.tsx +9 -0
- package/templates/app/contact/page.tsx +9 -0
- package/templates/app/error.tsx +7 -0
- package/templates/app/featured/page.tsx +9 -0
- package/templates/app/global-error.tsx +61 -0
- package/templates/app/globals.css +50 -2
- package/templates/app/journal/[id]/page.tsx +9 -0
- package/templates/app/journal/page.tsx +9 -0
- package/templates/app/layout.app.tsx +20 -0
- package/templates/app/layout.tsx +44 -10
- package/templates/app/logout/page.tsx +9 -0
- package/templates/app/manufacturers/page.tsx +9 -0
- package/templates/app/not-found.tsx +5 -0
- package/templates/app/orders/page.tsx +9 -0
- package/templates/app/page.module.css +12 -8
- package/templates/app/page.tsx +8 -79
- package/templates/app/product/[id]/page.tsx +9 -0
- package/templates/app/profile/page.tsx +9 -0
- package/templates/app/promo/[id]/page.tsx +9 -0
- package/templates/app/promocodes/page.tsx +9 -0
- package/templates/app/ps3/blog/[...orionplace]/route.ts +13 -0
- package/templates/app/sellers/page.tsx +9 -0
- package/templates/app/storefront.module.css +406 -0
- package/templates/app/stores/page.tsx +9 -0
- package/templates/app/subscriptions/page.tsx +9 -0
- package/templates/app/tariffs/[slug]/[id]/page.tsx +9 -0
- package/templates/app/tariffs/page.tsx +9 -0
- package/templates/app/tickets/page.tsx +9 -0
- package/templates/app/unsubscribe/page.tsx +9 -0
- package/templates/app/wallet/page.tsx +9 -0
- package/templates/app/wishlist/page.tsx +9 -0
- package/templates/components/orionplace/account/AccountActivity.README.md +70 -0
- package/templates/components/orionplace/account/AccountActivity.module.css +16 -0
- package/templates/components/orionplace/account/AccountActivity.tsx +94 -0
- package/templates/components/orionplace/account/AccountPromocodes.README.md +70 -0
- package/templates/components/orionplace/account/AccountPromocodes.module.css +92 -0
- package/templates/components/orionplace/account/AccountPromocodes.tsx +257 -0
- package/templates/components/orionplace/account/AccountSection.README.md +46 -0
- package/templates/components/orionplace/account/AccountSection.module.css +110 -0
- package/templates/components/orionplace/account/AccountSection.tsx +109 -0
- package/templates/components/orionplace/account/ProfileAvatar.README.md +48 -0
- package/templates/components/orionplace/account/ProfileAvatar.module.css +31 -0
- package/templates/components/orionplace/account/ProfileAvatar.tsx +138 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.README.md +59 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.module.css +51 -0
- package/templates/components/orionplace/account/ProfileDeleteAccount.tsx +171 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.README.md +44 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.module.css +35 -0
- package/templates/components/orionplace/account/ProfileDetailsForm.tsx +178 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.README.md +52 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.module.css +51 -0
- package/templates/components/orionplace/account/ProfileEmailSettings.tsx +276 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.README.md +45 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.module.css +43 -0
- package/templates/components/orionplace/account/ProfilePasswordForm.tsx +227 -0
- package/templates/components/orionplace/account/ProfileSignIn.README.md +64 -0
- package/templates/components/orionplace/account/ProfileSignIn.module.css +86 -0
- package/templates/components/orionplace/account/ProfileSignIn.tsx +463 -0
- package/templates/components/orionplace/account/SignInHistory.README.md +52 -0
- package/templates/components/orionplace/account/SignInHistory.module.css +81 -0
- package/templates/components/orionplace/account/SignInHistory.tsx +231 -0
- package/templates/components/orionplace/account/StorefrontLogout.README.md +48 -0
- package/templates/components/orionplace/account/StorefrontLogout.module.css +166 -0
- package/templates/components/orionplace/account/StorefrontLogout.tsx +73 -0
- package/templates/components/orionplace/account/StorefrontProfile.README.md +71 -0
- package/templates/components/orionplace/account/StorefrontProfile.module.css +65 -0
- package/templates/components/orionplace/account/StorefrontProfile.tsx +189 -0
- package/templates/components/orionplace/account/account.module.css +1180 -0
- package/templates/components/orionplace/account/profile.module.css +696 -0
- package/templates/components/orionplace/address/AddressForm.README.md +152 -0
- package/templates/components/orionplace/address/AddressForm.module.css +336 -0
- package/templates/components/orionplace/address/AddressForm.tsx +827 -0
- package/templates/components/orionplace/address/StorefrontAddresses.README.md +99 -0
- package/templates/components/orionplace/address/StorefrontAddresses.module.css +271 -0
- package/templates/components/orionplace/address/StorefrontAddresses.tsx +438 -0
- package/templates/components/orionplace/banners/MainBanner.README.md +65 -0
- package/templates/components/orionplace/banners/MainBanner.module.css +112 -0
- package/templates/components/orionplace/banners/MainBanner.tsx +159 -0
- package/templates/components/orionplace/blog/BlogArticle.README.md +143 -0
- package/templates/components/orionplace/blog/BlogArticle.module.css +304 -0
- package/templates/components/orionplace/blog/BlogArticle.tsx +371 -0
- package/templates/components/orionplace/blog/BlogCommentForm.README.md +51 -0
- package/templates/components/orionplace/blog/BlogCommentForm.module.css +93 -0
- package/templates/components/orionplace/blog/BlogCommentForm.tsx +125 -0
- package/templates/components/orionplace/blog/BlogComments.README.md +98 -0
- package/templates/components/orionplace/blog/BlogComments.module.css +151 -0
- package/templates/components/orionplace/blog/BlogComments.tsx +590 -0
- package/templates/components/orionplace/blog/BlogPostCard.README.md +51 -0
- package/templates/components/orionplace/blog/BlogPostCard.module.css +167 -0
- package/templates/components/orionplace/blog/BlogPostCard.tsx +177 -0
- package/templates/components/orionplace/blog/BlogPostGroup.README.md +49 -0
- package/templates/components/orionplace/blog/BlogPostGroup.module.css +37 -0
- package/templates/components/orionplace/blog/BlogPostGroup.tsx +129 -0
- package/templates/components/orionplace/blog/StorefrontJournal.README.md +105 -0
- package/templates/components/orionplace/blog/StorefrontJournal.module.css +387 -0
- package/templates/components/orionplace/blog/StorefrontJournal.tsx +548 -0
- package/templates/components/orionplace/branding/BrandLogos.README.md +29 -0
- package/templates/components/orionplace/branding/BrandLogos.module.css +7 -0
- package/templates/components/orionplace/branding/BrandLogos.tsx +30 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.README.md +92 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.module.css +159 -0
- package/templates/components/orionplace/cart/CartCheckoutDetails.tsx +370 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.README.md +166 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.module.css +105 -0
- package/templates/components/orionplace/cart/CartDeliverySelector.tsx +679 -0
- package/templates/components/orionplace/cart/CartItemOptions.README.md +172 -0
- package/templates/components/orionplace/cart/CartItemOptions.module.css +113 -0
- package/templates/components/orionplace/cart/CartItemOptions.tsx +503 -0
- package/templates/components/orionplace/cart/CartLineItem.README.md +138 -0
- package/templates/components/orionplace/cart/CartLineItem.module.css +57 -0
- package/templates/components/orionplace/cart/CartLineItem.tsx +263 -0
- package/templates/components/orionplace/cart/CartPreview.README.md +99 -0
- package/templates/components/orionplace/cart/CartPreview.module.css +225 -0
- package/templates/components/orionplace/cart/CartPreview.tsx +188 -0
- package/templates/components/orionplace/cart/DeliveryMap.README.md +65 -0
- package/templates/components/orionplace/cart/DeliveryMap.module.css +32 -0
- package/templates/components/orionplace/cart/DeliveryMap.tsx +131 -0
- package/templates/components/orionplace/cart/StorefrontCart.README.md +281 -0
- package/templates/components/orionplace/cart/StorefrontCart.module.css +460 -0
- package/templates/components/orionplace/cart/StorefrontCart.tsx +937 -0
- package/templates/components/orionplace/catalog/CatalogHeader.README.md +136 -0
- package/templates/components/orionplace/catalog/CatalogHeader.module.css +387 -0
- package/templates/components/orionplace/catalog/CatalogHeader.tsx +644 -0
- package/templates/components/orionplace/catalog/CatalogRepresentative.README.md +68 -0
- package/templates/components/orionplace/catalog/CatalogRepresentative.tsx +51 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.README.md +120 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.module.css +179 -0
- package/templates/components/orionplace/catalog/StorefrontCatalog.tsx +304 -0
- package/templates/components/orionplace/categories/CategoryGroup.README.md +68 -0
- package/templates/components/orionplace/categories/CategoryGroup.module.css +110 -0
- package/templates/components/orionplace/categories/CategoryGroup.tsx +123 -0
- package/templates/components/orionplace/categories/StorefrontCategory.README.md +155 -0
- package/templates/components/orionplace/categories/StorefrontCategory.module.css +148 -0
- package/templates/components/orionplace/categories/StorefrontCategory.tsx +225 -0
- package/templates/components/orionplace/contact/AboutPage.README.md +40 -0
- package/templates/components/orionplace/contact/AboutPage.module.css +216 -0
- package/templates/components/orionplace/contact/AboutPage.tsx +191 -0
- package/templates/components/orionplace/contact/ContactForm.README.md +93 -0
- package/templates/components/orionplace/contact/ContactForm.module.css +264 -0
- package/templates/components/orionplace/contact/ContactForm.tsx +382 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.README.md +67 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.module.css +94 -0
- package/templates/components/orionplace/contact/EmailUnsubscribe.tsx +130 -0
- package/templates/components/orionplace/contact/StorefrontContact.README.md +73 -0
- package/templates/components/orionplace/contact/StorefrontContact.module.css +101 -0
- package/templates/components/orionplace/contact/StorefrontContact.tsx +62 -0
- package/templates/components/orionplace/currencies/MainCurrencySwitcher.README.md +37 -0
- package/templates/components/orionplace/currencies/MainCurrencySwitcher.tsx +68 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.README.md +108 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.module.css +110 -0
- package/templates/components/orionplace/events/EventEnrollmentDialog.tsx +315 -0
- package/templates/components/orionplace/events/EventsBlock.README.md +58 -0
- package/templates/components/orionplace/events/EventsBlock.module.css +101 -0
- package/templates/components/orionplace/events/EventsBlock.tsx +109 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.README.md +46 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.module.css +196 -0
- package/templates/components/orionplace/locale/MainLanguageSwitcher.tsx +387 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.README.md +83 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.module.css +271 -0
- package/templates/components/orionplace/manufacturers/ManufacturerIndex.tsx +218 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.README.md +122 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.module.css +92 -0
- package/templates/components/orionplace/manufacturers/StorefrontManufacturers.tsx +455 -0
- package/templates/components/orionplace/orders/OrderDetails.README.md +116 -0
- package/templates/components/orionplace/orders/OrderDetails.module.css +730 -0
- package/templates/components/orionplace/orders/OrderDetails.tsx +693 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.README.md +92 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.module.css +105 -0
- package/templates/components/orionplace/orders/OrderPaymentForm.tsx +90 -0
- package/templates/components/orionplace/orders/StorefrontOrders.README.md +131 -0
- package/templates/components/orionplace/orders/StorefrontOrders.module.css +633 -0
- package/templates/components/orionplace/orders/StorefrontOrders.tsx +922 -0
- package/templates/components/orionplace/payments/PaymentPanel.README.md +114 -0
- package/templates/components/orionplace/payments/PaymentPanel.module.css +134 -0
- package/templates/components/orionplace/payments/PaymentPanel.tsx +76 -0
- package/templates/components/orionplace/products/HoverImageViewer.README.md +62 -0
- package/templates/components/orionplace/products/HoverImageViewer.module.css +88 -0
- package/templates/components/orionplace/products/HoverImageViewer.tsx +179 -0
- package/templates/components/orionplace/products/ProductCard.README.md +152 -0
- package/templates/components/orionplace/products/ProductCard.module.css +333 -0
- package/templates/components/orionplace/products/ProductCard.tsx +716 -0
- package/templates/components/orionplace/products/ProductCardActions.README.md +84 -0
- package/templates/components/orionplace/products/ProductCardActions.module.css +146 -0
- package/templates/components/orionplace/products/ProductCardActions.tsx +311 -0
- package/templates/components/orionplace/products/ProductCardBadges.README.md +44 -0
- package/templates/components/orionplace/products/ProductCardBadges.module.css +15 -0
- package/templates/components/orionplace/products/ProductCardBadges.tsx +78 -0
- package/templates/components/orionplace/products/ProductCardDescription.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardDescription.module.css +6 -0
- package/templates/components/orionplace/products/ProductCardDescription.tsx +43 -0
- package/templates/components/orionplace/products/ProductCardFavorite.README.md +52 -0
- package/templates/components/orionplace/products/ProductCardFavorite.module.css +64 -0
- package/templates/components/orionplace/products/ProductCardFavorite.tsx +90 -0
- package/templates/components/orionplace/products/ProductCardPrice.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardPrice.module.css +22 -0
- package/templates/components/orionplace/products/ProductCardPrice.tsx +50 -0
- package/templates/components/orionplace/products/ProductCardRating.README.md +33 -0
- package/templates/components/orionplace/products/ProductCardRating.module.css +7 -0
- package/templates/components/orionplace/products/ProductCardRating.tsx +56 -0
- package/templates/components/orionplace/products/ProductCardSeller.README.md +36 -0
- package/templates/components/orionplace/products/ProductCardSeller.module.css +31 -0
- package/templates/components/orionplace/products/ProductCardSeller.tsx +61 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.README.md +36 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.module.css +8 -0
- package/templates/components/orionplace/products/ProductCardStockNotice.tsx +35 -0
- package/templates/components/orionplace/products/ProductCardTitle.README.md +30 -0
- package/templates/components/orionplace/products/ProductCardTitle.module.css +13 -0
- package/templates/components/orionplace/products/ProductCardTitle.tsx +31 -0
- package/templates/components/orionplace/products/ProductCardVariants.README.md +77 -0
- package/templates/components/orionplace/products/ProductCardVariants.module.css +97 -0
- package/templates/components/orionplace/products/ProductCardVariants.tsx +350 -0
- package/templates/components/orionplace/products/ProductGroup.README.md +89 -0
- package/templates/components/orionplace/products/ProductGroup.module.css +64 -0
- package/templates/components/orionplace/products/ProductGroup.tsx +183 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.README.md +89 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.module.css +320 -0
- package/templates/components/orionplace/products/ProductPreorderDialog.tsx +346 -0
- package/templates/components/orionplace/products/ProductReviewForm.README.md +72 -0
- package/templates/components/orionplace/products/ProductReviewForm.module.css +217 -0
- package/templates/components/orionplace/products/ProductReviewForm.tsx +288 -0
- package/templates/components/orionplace/products/ProductReviewGallery.README.md +61 -0
- package/templates/components/orionplace/products/ProductReviewGallery.module.css +108 -0
- package/templates/components/orionplace/products/ProductReviewGallery.tsx +110 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.README.md +49 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.module.css +50 -0
- package/templates/components/orionplace/products/ProductReviewImageViewer.tsx +260 -0
- package/templates/components/orionplace/products/ProductReviews.README.md +137 -0
- package/templates/components/orionplace/products/ProductReviews.module.css +602 -0
- package/templates/components/orionplace/products/ProductReviews.tsx +944 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.README.md +67 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.module.css +79 -0
- package/templates/components/orionplace/products/ProductSecondaryVariantModal.tsx +324 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.README.md +52 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.module.css +138 -0
- package/templates/components/orionplace/products/ProductSpecificationsDialog.tsx +117 -0
- package/templates/components/orionplace/products/StorefrontProduct.README.md +200 -0
- package/templates/components/orionplace/products/StorefrontProduct.module.css +767 -0
- package/templates/components/orionplace/products/StorefrontProduct.tsx +1339 -0
- package/templates/components/orionplace/products/StorefrontWishlist.README.md +162 -0
- package/templates/components/orionplace/products/StorefrontWishlist.module.css +71 -0
- package/templates/components/orionplace/products/StorefrontWishlist.tsx +402 -0
- package/templates/components/orionplace/promo/PromoProducts.README.md +133 -0
- package/templates/components/orionplace/promo/PromoProducts.module.css +68 -0
- package/templates/components/orionplace/promo/PromoProducts.tsx +345 -0
- package/templates/components/orionplace/search/MainSearch.README.md +73 -0
- package/templates/components/orionplace/search/MainSearch.module.css +202 -0
- package/templates/components/orionplace/search/MainSearch.tsx +217 -0
- package/templates/components/orionplace/search/ProductSearchResults.README.md +166 -0
- package/templates/components/orionplace/search/ProductSearchResults.module.css +358 -0
- package/templates/components/orionplace/search/ProductSearchResults.tsx +308 -0
- package/templates/components/orionplace/search/SearchFilters.README.md +109 -0
- package/templates/components/orionplace/search/SearchFilters.module.css +274 -0
- package/templates/components/orionplace/search/SearchFilters.tsx +439 -0
- package/templates/components/orionplace/sellers/SellerFilters.README.md +66 -0
- package/templates/components/orionplace/sellers/SellerFilters.module.css +232 -0
- package/templates/components/orionplace/sellers/SellerFilters.tsx +201 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.README.md +72 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.module.css +314 -0
- package/templates/components/orionplace/sellers/SellerPhotoGallery.tsx +335 -0
- package/templates/components/orionplace/sellers/SellerSummary.README.md +62 -0
- package/templates/components/orionplace/sellers/SellerSummary.module.css +182 -0
- package/templates/components/orionplace/sellers/SellerSummary.tsx +107 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.README.md +120 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.module.css +147 -0
- package/templates/components/orionplace/sellers/StorefrontSellers.tsx +360 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.README.md +35 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.module.css +35 -0
- package/templates/components/orionplace/shared/OrionplaceAvatar.tsx +61 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.README.md +33 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.module.css +81 -0
- package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +91 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.README.md +37 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.module.css +126 -0
- package/templates/components/orionplace/shared/OrionplaceEmptyState.tsx +78 -0
- package/templates/components/orionplace/shared/OrionplaceImage.README.md +45 -0
- package/templates/components/orionplace/shared/OrionplaceImage.module.css +22 -0
- package/templates/components/orionplace/shared/OrionplaceImage.tsx +96 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.README.md +31 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.module.css +59 -0
- package/templates/components/orionplace/shared/OrionplaceInfoHint.tsx +126 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.README.md +39 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.module.css +79 -0
- package/templates/components/orionplace/shared/OrionplacePasswordInput.tsx +103 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.README.md +97 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.module.css +246 -0
- package/templates/components/orionplace/shared/OrionplaceSearchSelect.tsx +367 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.README.md +69 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.module.css +233 -0
- package/templates/components/orionplace/shared/OrionplaceSelect.tsx +439 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.README.md +52 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.module.css +141 -0
- package/templates/components/orionplace/shared/StorefrontErrorPage.tsx +103 -0
- package/templates/components/orionplace/shared/StorefrontPagination.README.md +39 -0
- package/templates/components/orionplace/shared/StorefrontPagination.module.css +69 -0
- package/templates/components/orionplace/shared/StorefrontPagination.tsx +102 -0
- package/templates/components/orionplace/shared/dialogs.css +36 -0
- package/templates/components/orionplace/shared/emptyStateArt.ts +231 -0
- package/templates/components/orionplace/shared/features.module.css +162 -0
- package/templates/components/orionplace/social/SocialLinks.README.md +16 -0
- package/templates/components/orionplace/social/SocialLinks.module.css +36 -0
- package/templates/components/orionplace/social/SocialLinks.tsx +59 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.README.md +59 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.module.css +159 -0
- package/templates/components/orionplace/storefront/StorefrontAccount.tsx +303 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.README.md +47 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.module.css +88 -0
- package/templates/components/orionplace/storefront/StorefrontCartButton.tsx +54 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.README.md +55 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.module.css +118 -0
- package/templates/components/orionplace/storefront/StorefrontFooter.tsx +165 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.README.md +150 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.module.css +186 -0
- package/templates/components/orionplace/storefront/StorefrontHeader.tsx +389 -0
- package/templates/components/orionplace/storefront/StorefrontHome.README.md +138 -0
- package/templates/components/orionplace/storefront/StorefrontHome.module.css +116 -0
- package/templates/components/orionplace/storefront/StorefrontHome.tsx +282 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.README.md +51 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.module.css +95 -0
- package/templates/components/orionplace/storefront/StorefrontWishlistButton.tsx +80 -0
- package/templates/components/orionplace/stores/StorefrontStores.README.md +87 -0
- package/templates/components/orionplace/stores/StorefrontStores.module.css +218 -0
- package/templates/components/orionplace/stores/StorefrontStores.tsx +396 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.README.md +183 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.module.css +347 -0
- package/templates/components/orionplace/subscriptions/StorefrontSubscriptions.tsx +884 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.README.md +111 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.module.css +311 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariff.tsx +474 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.README.md +102 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.module.css +219 -0
- package/templates/components/orionplace/subscriptions/StorefrontTariffs.tsx +350 -0
- package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.README.md +67 -0
- package/templates/components/orionplace/subscriptions/SubscriptionCancelDialog.tsx +175 -0
- package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.README.md +95 -0
- package/templates/components/orionplace/subscriptions/SubscriptionChangeDialog.tsx +634 -0
- package/templates/components/orionplace/subscriptions/SubscriptionDialog.module.css +453 -0
- package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.README.md +75 -0
- package/templates/components/orionplace/subscriptions/SubscriptionExtendDialog.tsx +384 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.README.md +116 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.module.css +168 -0
- package/templates/components/orionplace/subscriptions/SubscriptionPlanSummary.tsx +236 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.README.md +123 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.module.css +57 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRemoteDetails.tsx +101 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.README.md +109 -0
- package/templates/components/orionplace/subscriptions/SubscriptionRenewalDialog.tsx +253 -0
- package/templates/components/orionplace/support/StorefrontSupport.README.md +157 -0
- package/templates/components/orionplace/support/StorefrontSupport.tsx +1040 -0
- package/templates/components/orionplace/support/Support.module.css +1133 -0
- package/templates/components/orionplace/support/TicketConversation.README.md +105 -0
- package/templates/components/orionplace/support/TicketConversation.tsx +502 -0
- package/templates/components/orionplace/support/TicketImage.README.md +52 -0
- package/templates/components/orionplace/support/TicketImage.tsx +254 -0
- package/templates/components/orionplace/support/TicketItemCard.README.md +66 -0
- package/templates/components/orionplace/support/TicketItemCard.tsx +140 -0
- package/templates/components/orionplace/support/TicketMessageForm.README.md +88 -0
- package/templates/components/orionplace/support/TicketMessageForm.tsx +261 -0
- package/templates/components/orionplace/support/TicketSubscriptionCard.README.md +53 -0
- package/templates/components/orionplace/support/TicketSubscriptionCard.tsx +118 -0
- package/templates/components/orionplace/tariffs/TariffCard.README.md +108 -0
- package/templates/components/orionplace/tariffs/TariffCard.module.css +86 -0
- package/templates/components/orionplace/tariffs/TariffCard.tsx +218 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.README.md +40 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.module.css +72 -0
- package/templates/components/orionplace/tariffs/TariffCardDescription.tsx +58 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.README.md +58 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.module.css +60 -0
- package/templates/components/orionplace/tariffs/TariffCardFeatures.tsx +140 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.README.md +36 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.module.css +8 -0
- package/templates/components/orionplace/tariffs/TariffCardImage.tsx +32 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.README.md +74 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.module.css +142 -0
- package/templates/components/orionplace/tariffs/TariffCardPrices.tsx +181 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.README.md +32 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.module.css +9 -0
- package/templates/components/orionplace/tariffs/TariffCardTitle.tsx +29 -0
- package/templates/components/orionplace/tariffs/TariffCards.README.md +88 -0
- package/templates/components/orionplace/tariffs/TariffCards.module.css +24 -0
- package/templates/components/orionplace/tariffs/TariffCards.tsx +44 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.README.md +92 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.module.css +214 -0
- package/templates/components/orionplace/tariffs/TariffSubscriptionModal.tsx +299 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.README.md +30 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.module.css +8 -0
- package/templates/components/orionplace/theme/OrionplaceThemeProvider.tsx +32 -0
- package/templates/components/orionplace/units/UnitSwitcher.README.md +35 -0
- package/templates/components/orionplace/units/UnitSwitcher.tsx +58 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.README.md +154 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.module.css +507 -0
- package/templates/components/orionplace/wallet/StorefrontWallet.tsx +915 -0
- package/templates/components/orionplace/wallet/WalletBalance.README.md +46 -0
- package/templates/components/orionplace/wallet/WalletBalance.module.css +46 -0
- package/templates/components/orionplace/wallet/WalletBalance.tsx +51 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.README.md +54 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.module.css +152 -0
- package/templates/components/orionplace/wallet/WalletTopUpForm.tsx +181 -0
- package/templates/hooks/useAccountActivity.ts +251 -0
- package/templates/hooks/useAccountAddresses.ts +81 -0
- package/templates/hooks/useAccountPromocodes.ts +91 -0
- package/templates/hooks/useOrionplaceActionMenu.ts +118 -0
- package/templates/hooks/useOrionplaceAddressForm.ts +262 -0
- package/templates/hooks/useOrionplaceApi.ts +98 -0
- package/templates/hooks/useOrionplaceAppLoad.ts +38 -6
- package/templates/hooks/useOrionplaceBlogReading.ts +351 -0
- package/templates/hooks/useOrionplaceDialog.ts +85 -0
- package/templates/hooks/useOrionplaceHomeProducts.ts +97 -0
- package/templates/hooks/useOrionplaceMap.tsx +230 -0
- package/templates/hooks/useOrionplaceMediaFormat.ts +33 -0
- package/templates/hooks/useOrionplaceProduct.ts +28 -0
- package/templates/hooks/useOrionplaceProfile.ts +347 -0
- package/templates/hooks/useOrionplaceReviews.ts +352 -0
- package/templates/hooks/useOrionplaceStableHeight.ts +65 -0
- package/templates/hooks/useOrionplaceStorefront.tsx +575 -0
- package/templates/hooks/useOrionplaceTariffPurchase.ts +152 -0
- package/templates/interfaces/orionplace/accounts/IContact.ts +21 -0
- package/templates/interfaces/orionplace/accounts/IEmailNotificationLocale.ts +17 -0
- package/templates/interfaces/orionplace/accounts/IEmailVerification.ts +59 -0
- package/templates/interfaces/orionplace/accounts/IProfileActions.ts +38 -0
- package/templates/interfaces/orionplace/accounts/IProfileData.ts +123 -0
- package/templates/interfaces/orionplace/accounts/IProfileMedia.ts +17 -0
- package/templates/interfaces/orionplace/accounts/IStorefrontProfile.ts +54 -0
- package/templates/interfaces/orionplace/address/IAddressCitySuggestion.ts +19 -0
- package/templates/interfaces/orionplace/address/IAddressEditor.ts +9 -0
- package/templates/interfaces/orionplace/address/IAddressLocationSuggestion.ts +22 -0
- package/templates/interfaces/orionplace/address/IAddressRegionSearch.ts +30 -0
- package/templates/interfaces/orionplace/address/IAddressSuggestion.ts +20 -0
- package/templates/interfaces/orionplace/address/IUserAddress.ts +87 -0
- package/templates/interfaces/orionplace/appBase/IAppLoad.ts +4 -3
- package/templates/interfaces/orionplace/appBase/IAppLoadCommon.ts +22 -31
- package/templates/interfaces/orionplace/appBase/IApploadUserProfile.ts +1 -1
- package/templates/interfaces/orionplace/appBase/IForm.ts +1 -1
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonBanner.ts +7 -7
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonPath.ts +2 -2
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonSEO.ts +20 -7
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonTariff.ts +2 -2
- package/templates/interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonVariables.ts +1 -0
- package/templates/interfaces/orionplace/blog/IBlogApi.ts +247 -0
- package/templates/interfaces/orionplace/blog/IBlogPostPreview.ts +30 -0
- package/templates/interfaces/orionplace/cart/ICartActions.ts +67 -0
- package/templates/interfaces/orionplace/cart/ICartData.ts +382 -0
- package/templates/interfaces/orionplace/cart/ICartDeliveryActions.ts +68 -0
- package/templates/interfaces/orionplace/cart/ICartModal.ts +22 -0
- package/templates/interfaces/orionplace/cart/IDeliveryMap.ts +29 -0
- package/templates/interfaces/orionplace/catalog/ICatalogDirectory.ts +75 -0
- package/templates/interfaces/orionplace/category/ICategory.ts +2 -1
- package/templates/interfaces/orionplace/domains/IDomain.ts +2 -2
- package/templates/interfaces/orionplace/forms/ICustomerSubfilter.ts +19 -0
- package/templates/interfaces/orionplace/index.ts +64 -30
- package/templates/interfaces/orionplace/marketing/IPromoActions.ts +51 -0
- package/templates/interfaces/orionplace/orders/IOrderActions.ts +99 -0
- package/templates/interfaces/orionplace/orders/IOrderHistory.ts +259 -0
- package/templates/interfaces/orionplace/orders/IProductPreorder.ts +31 -0
- package/templates/interfaces/orionplace/payments/IInvoice.ts +147 -0
- package/templates/interfaces/orionplace/products/IProduct.ts +178 -151
- package/templates/interfaces/orionplace/products/IProductFeedbackApi.ts +218 -0
- package/templates/interfaces/orionplace/products/IProductSearchApi.ts +146 -0
- package/templates/interfaces/orionplace/products/IProductSearchFacets.ts +35 -0
- package/templates/interfaces/orionplace/products/IProductSecondaryVariantRequest.ts +15 -0
- package/templates/interfaces/orionplace/products/IProductSpecification.ts +14 -0
- package/templates/interfaces/orionplace/products/IWishlist.ts +22 -0
- package/templates/interfaces/orionplace/sellers/ISellerDirectory.ts +70 -0
- package/templates/interfaces/orionplace/shared/IBreadcrumb.ts +10 -0
- package/templates/interfaces/orionplace/shared/IStorefrontControls.ts +6 -0
- package/templates/interfaces/orionplace/state.ts +1 -1
- package/templates/interfaces/orionplace/stores/IStoreDirectory.ts +63 -0
- package/templates/interfaces/orionplace/subscribeTariff/ISubscribeTariff.ts +41 -31
- package/templates/interfaces/orionplace/subscribeTariff/ITariffSelection.ts +11 -0
- package/templates/interfaces/orionplace/subscribes/ISubscribe.ts +1 -1
- package/templates/interfaces/orionplace/subscribes/ISubscriptionApi.ts +125 -0
- package/templates/interfaces/orionplace/tickets/ICustomerTicketApi.ts +223 -0
- package/templates/interfaces/orionplace/transport.ts +7 -3
- package/templates/lib/orionplace/accountLabels.ts +22 -0
- package/templates/lib/orionplace/activityLabels.ts +65 -0
- package/templates/lib/orionplace/activityPresentation.ts +9 -0
- package/templates/lib/orionplace/addressChanges.ts +26 -0
- package/templates/lib/orionplace/addressPresentation.ts +58 -0
- package/templates/lib/orionplace/api.ts +326 -0
- package/templates/lib/orionplace/appLoadClient.ts +63 -21
- package/templates/lib/orionplace/appLoadResult.ts +75 -21
- package/templates/lib/orionplace/appLoadServer.ts +66 -21
- package/templates/lib/orionplace/blogArticle.ts +97 -0
- package/templates/lib/orionplace/blogArticleHtml.ts +370 -0
- package/templates/lib/orionplace/blogComments.ts +102 -0
- package/templates/lib/orionplace/blogJournal.ts +115 -0
- package/templates/lib/orionplace/blogLabels.ts +108 -0
- package/templates/lib/orionplace/blogPresentation.ts +67 -0
- package/templates/lib/orionplace/browseLabels.ts +98 -0
- package/templates/lib/orionplace/cartAddress.ts +86 -0
- package/templates/lib/orionplace/cartController.ts +104 -0
- package/templates/lib/orionplace/cartLabels.ts +261 -0
- package/templates/lib/orionplace/cartOptions.ts +115 -0
- package/templates/lib/orionplace/cartPreview.ts +120 -0
- package/templates/lib/orionplace/cartPromo.ts +150 -0
- package/templates/lib/orionplace/cartShipment.ts +61 -0
- package/templates/lib/orionplace/cartSnapshot.ts +21 -0
- package/templates/lib/orionplace/catalog.ts +150 -0
- package/templates/lib/orionplace/categoryLabels.ts +21 -0
- package/templates/lib/orionplace/contact.ts +47 -0
- package/templates/lib/orionplace/contactLabels.ts +102 -0
- package/templates/lib/orionplace/currency.ts +128 -0
- package/templates/lib/orionplace/deliveryMap.ts +86 -0
- package/templates/lib/orionplace/directoryLabels.ts +133 -0
- package/templates/lib/orionplace/domain.ts +11 -6
- package/templates/lib/orionplace/errorPageLabels.ts +74 -0
- package/templates/lib/orionplace/eventEnrollment.ts +22 -0
- package/templates/lib/orionplace/featureData.ts +28 -0
- package/templates/lib/orionplace/featureLabels.ts +271 -0
- package/templates/lib/orionplace/featuredLabels.ts +28 -0
- package/templates/lib/orionplace/footerLabels.ts +35 -0
- package/templates/lib/orionplace/guestSession.ts +55 -0
- package/templates/lib/orionplace/headerLabels.ts +68 -0
- package/templates/lib/orionplace/homeContent.ts +193 -0
- package/templates/lib/orionplace/homeLabels.ts +52 -0
- package/templates/lib/orionplace/htmlText.ts +51 -0
- package/templates/lib/orionplace/manufacturerDirectory.ts +71 -0
- package/templates/lib/orionplace/manufacturerIndex.ts +92 -0
- package/templates/lib/orionplace/modalWindow.ts +109 -0
- package/templates/lib/orionplace/nativeApp.ts +365 -0
- package/templates/lib/orionplace/navigation.tsx +121 -0
- package/templates/lib/orionplace/notice.ts +22 -0
- package/templates/lib/orionplace/orderLabels.ts +311 -0
- package/templates/lib/orionplace/orderPresentation.ts +574 -0
- package/templates/lib/orionplace/pageMetadata.ts +247 -0
- package/templates/lib/orionplace/pageSeo.ts +274 -0
- package/templates/lib/orionplace/paginationScroll.ts +131 -0
- package/templates/lib/orionplace/phone.ts +22 -0
- package/templates/lib/orionplace/presentation.ts +84 -0
- package/templates/lib/orionplace/productActionLabels.ts +60 -0
- package/templates/lib/orionplace/productAvailability.ts +30 -0
- package/templates/lib/orionplace/productGallery.ts +64 -0
- package/templates/lib/orionplace/productLabels.ts +82 -0
- package/templates/lib/orionplace/productPage.ts +308 -0
- package/templates/lib/orionplace/productPhotos.ts +67 -0
- package/templates/lib/orionplace/productSearch.ts +232 -0
- package/templates/lib/orionplace/productSeller.ts +56 -0
- package/templates/lib/orionplace/profile.ts +157 -0
- package/templates/lib/orionplace/profileLabels.ts +151 -0
- package/templates/lib/orionplace/promoLabels.ts +75 -0
- package/templates/lib/orionplace/promoPresentation.ts +381 -0
- package/templates/lib/orionplace/reviewLabels.ts +172 -0
- package/templates/lib/orionplace/reviewPresentation.ts +64 -0
- package/templates/lib/orionplace/reviewScope.ts +38 -0
- package/templates/lib/orionplace/searchFilters.ts +99 -0
- package/templates/lib/orionplace/searchHistory.ts +144 -0
- package/templates/lib/orionplace/sellerDirectory.ts +120 -0
- package/templates/lib/orionplace/seo.ts +52 -0
- package/templates/lib/orionplace/serverApi.ts +158 -0
- package/templates/lib/orionplace/serverLocale.ts +29 -0
- package/templates/lib/orionplace/serverMetadata.ts +86 -0
- package/templates/lib/orionplace/serverRecords.ts +25 -0
- package/templates/lib/orionplace/serverRoute.tsx +51 -0
- package/templates/lib/orionplace/sessionLabels.ts +27 -0
- package/templates/lib/orionplace/signInReturn.ts +89 -0
- package/templates/lib/orionplace/storeDirectory.ts +47 -0
- package/templates/lib/orionplace/storefrontRecords.ts +29 -0
- package/templates/lib/orionplace/subscriptionChanges.ts +120 -0
- package/templates/lib/orionplace/subscriptionLabels.ts +67 -0
- package/templates/lib/orionplace/subscriptionManageLabels.ts +306 -0
- package/templates/lib/orionplace/subscriptionPlans.ts +122 -0
- package/templates/lib/orionplace/subscriptionRemote.ts +85 -0
- package/templates/lib/orionplace/subscriptionUsage.ts +58 -0
- package/templates/lib/orionplace/tariffLabels.ts +123 -0
- package/templates/lib/orionplace/tariffPage.ts +54 -0
- package/templates/lib/orionplace/tariffVariables.ts +136 -0
- package/templates/lib/orionplace/tariffs.ts +192 -0
- package/templates/lib/orionplace/ticketItems.ts +75 -0
- package/templates/lib/orionplace/ticketLabels.ts +335 -0
- package/templates/lib/orionplace/ticketLocation.ts +79 -0
- package/templates/lib/orionplace/ticketRequests.ts +70 -0
- package/templates/lib/orionplace/walletTransaction.ts +105 -0
- package/templates/orionplace/COMPONENT-DOWNLOAD.md +66 -0
- package/templates/orionplace/COMPONENTS.md +35 -0
- package/templates/providers/OrionplaceProvider.tsx +164 -12
- package/templates/proxy.ts +8 -3
- package/templates/stores/orionplace.ts +212 -49
- package/templates/stores/orionplaceBrowse.ts +89 -0
- package/templates/stores/orionplaceCatalog.ts +144 -0
- package/templates/stores/orionplaceProducts.ts +389 -0
- package/templates/stores/orionplaceScope.ts +104 -0
- package/templates/stores/orionplaceSelections.ts +130 -0
- package/templates/themes/orionplace.ts +106 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
.search {
|
|
2
|
+
container-type: inline-size;
|
|
3
|
+
container-name: search;
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
min-width: 0;
|
|
7
|
+
align-items: center;
|
|
8
|
+
border: 1px solid var(--orionplace-border);
|
|
9
|
+
background: var(--orionplace-surface);
|
|
10
|
+
color: var(--orionplace-text);
|
|
11
|
+
font-size: 0.875rem;
|
|
12
|
+
line-height: calc(1.25 / 0.875);
|
|
13
|
+
transition: border-color 150ms ease;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.history {
|
|
17
|
+
position: absolute;
|
|
18
|
+
z-index: 60;
|
|
19
|
+
top: calc(100% + 1px);
|
|
20
|
+
right: -1px;
|
|
21
|
+
left: -1px;
|
|
22
|
+
border: 1px solid var(--orionplace-border);
|
|
23
|
+
background: var(--orionplace-surface);
|
|
24
|
+
box-shadow: 0 12px 28px rgb(0 0 0 / 12%);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.history ul {
|
|
28
|
+
padding: 0;
|
|
29
|
+
margin: 0;
|
|
30
|
+
list-style: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.history li {
|
|
34
|
+
display: flex;
|
|
35
|
+
min-width: 0;
|
|
36
|
+
align-items: center;
|
|
37
|
+
border-bottom: 1px solid var(--orionplace-border);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.history li:last-child {
|
|
41
|
+
border-bottom: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.historyQuery,
|
|
45
|
+
.historyDelete {
|
|
46
|
+
min-height: 2.5rem;
|
|
47
|
+
border: 0;
|
|
48
|
+
background: transparent;
|
|
49
|
+
color: inherit;
|
|
50
|
+
font: inherit;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.historyDelete svg {
|
|
55
|
+
width: 1rem;
|
|
56
|
+
height: 1rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.historyQuery {
|
|
60
|
+
min-width: 0;
|
|
61
|
+
flex: 1;
|
|
62
|
+
overflow: hidden;
|
|
63
|
+
padding: 0.625rem 0.875rem;
|
|
64
|
+
text-align: left;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.historyDelete {
|
|
70
|
+
flex: 0 0 2.5rem;
|
|
71
|
+
color: var(--orionplace-muted);
|
|
72
|
+
font-size: 1.25rem;
|
|
73
|
+
line-height: calc(1.75 / 1.25);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.historyQuery:focus-visible,
|
|
77
|
+
.historyDelete:focus-visible {
|
|
78
|
+
background: var(--orionplace-hover);
|
|
79
|
+
outline: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@media (hover: hover) {
|
|
83
|
+
.historyQuery:hover:not(:disabled),
|
|
84
|
+
.historyDelete:hover:not(:disabled) {
|
|
85
|
+
background: var(--orionplace-hover);
|
|
86
|
+
outline: none;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.historyStatus {
|
|
91
|
+
display: block;
|
|
92
|
+
margin: 0;
|
|
93
|
+
padding: 0.75rem 0.875rem;
|
|
94
|
+
color: var(--orionplace-muted);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.search:focus-within {
|
|
98
|
+
border-color: var(--orionplace-text);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.field {
|
|
102
|
+
display: grid;
|
|
103
|
+
min-width: 0;
|
|
104
|
+
flex: 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.input {
|
|
108
|
+
box-sizing: border-box;
|
|
109
|
+
width: 100%;
|
|
110
|
+
min-width: 0;
|
|
111
|
+
height: 2.5rem;
|
|
112
|
+
padding: 1px 0.75rem;
|
|
113
|
+
border: 0;
|
|
114
|
+
background: transparent;
|
|
115
|
+
color: inherit;
|
|
116
|
+
font: inherit;
|
|
117
|
+
font-size: 0.875rem;
|
|
118
|
+
line-height: 20px;
|
|
119
|
+
outline: none;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.input::placeholder {
|
|
123
|
+
color: var(--orionplace-muted);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.input:disabled {
|
|
127
|
+
cursor: default;
|
|
128
|
+
opacity: 0.5;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.button {
|
|
132
|
+
display: inline-flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
justify-content: center;
|
|
135
|
+
flex-shrink: 0;
|
|
136
|
+
gap: 0.5rem;
|
|
137
|
+
min-width: 2.5rem;
|
|
138
|
+
height: 2.5rem;
|
|
139
|
+
padding: 1px 0.625rem;
|
|
140
|
+
border: 0;
|
|
141
|
+
background: transparent;
|
|
142
|
+
color: inherit;
|
|
143
|
+
font: inherit;
|
|
144
|
+
font-size: 0.75rem;
|
|
145
|
+
line-height: 16px;
|
|
146
|
+
letter-spacing: 0.08em;
|
|
147
|
+
text-transform: uppercase;
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.button:focus-visible {
|
|
152
|
+
background: var(--orionplace-hover);
|
|
153
|
+
outline: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@media (hover: hover) {
|
|
157
|
+
.button:hover:not(:disabled) {
|
|
158
|
+
background: var(--orionplace-hover);
|
|
159
|
+
outline: none;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.button:disabled {
|
|
164
|
+
cursor: default;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.icon {
|
|
168
|
+
width: 1.25rem;
|
|
169
|
+
height: 1.25rem;
|
|
170
|
+
flex-shrink: 0;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.visuallyHidden {
|
|
174
|
+
position: absolute;
|
|
175
|
+
width: 1px;
|
|
176
|
+
height: 1px;
|
|
177
|
+
padding: 0;
|
|
178
|
+
margin: -1px;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
clip: rect(0, 0, 0, 0);
|
|
181
|
+
white-space: nowrap;
|
|
182
|
+
border: 0;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@container search (min-width: 480px) {
|
|
186
|
+
.input {
|
|
187
|
+
padding-right: 1rem;
|
|
188
|
+
padding-left: 1rem;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@media (prefers-reduced-motion: reduce) {
|
|
193
|
+
.search {
|
|
194
|
+
transition: none;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.historyQuery:disabled,
|
|
199
|
+
.historyDelete:disabled {
|
|
200
|
+
opacity: 0.5;
|
|
201
|
+
cursor: default;
|
|
202
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useId, useRef, useState, type FormEvent } from 'react';
|
|
4
|
+
import { usePathname, useSearchParams } from 'next/navigation';
|
|
5
|
+
import {
|
|
6
|
+
useOrionplace,
|
|
7
|
+
useOrionplaceBrowse,
|
|
8
|
+
useOrionplaceBrowseStore,
|
|
9
|
+
useOrionplaceSelections,
|
|
10
|
+
} from '@/providers/OrionplaceProvider';
|
|
11
|
+
import { selectInit } from '@/stores/orionplace';
|
|
12
|
+
import { getAvailableValueFromObject } from '@/lib/orionplace/presentation';
|
|
13
|
+
import styles from './MainSearch.module.css';
|
|
14
|
+
|
|
15
|
+
export interface MainSearchProps {
|
|
16
|
+
label?: string;
|
|
17
|
+
buttonLabel?: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
history?: readonly MainSearchHistoryItem[];
|
|
20
|
+
historyPending?: boolean;
|
|
21
|
+
historyError?: string;
|
|
22
|
+
historyDeleting?: readonly number[];
|
|
23
|
+
onSearch?: (query: string) => void;
|
|
24
|
+
onHistorySearch?: (query: string) => void;
|
|
25
|
+
onHistoryDelete?: (id: number) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface MainSearchHistoryItem {
|
|
29
|
+
id: number;
|
|
30
|
+
q: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function MainSearch({
|
|
34
|
+
label = 'Search',
|
|
35
|
+
buttonLabel = 'Find',
|
|
36
|
+
disabled = false,
|
|
37
|
+
history = [],
|
|
38
|
+
historyPending = false,
|
|
39
|
+
historyError = '',
|
|
40
|
+
historyDeleting = [],
|
|
41
|
+
onSearch,
|
|
42
|
+
onHistorySearch,
|
|
43
|
+
onHistoryDelete,
|
|
44
|
+
}: MainSearchProps) {
|
|
45
|
+
const init = useOrionplace(selectInit);
|
|
46
|
+
const locale = useOrionplaceSelections((state) => state.localeCode);
|
|
47
|
+
const query = useOrionplaceBrowse((state) => state.searchQuery);
|
|
48
|
+
const browseStore = useOrionplaceBrowseStore();
|
|
49
|
+
const pathname = usePathname();
|
|
50
|
+
const searchParams = useSearchParams();
|
|
51
|
+
const routeQuery =
|
|
52
|
+
pathname === '/browse' ? (searchParams.get('q') ?? '').trim() : '';
|
|
53
|
+
const value = query || routeQuery;
|
|
54
|
+
const hints = [
|
|
55
|
+
...new Set(
|
|
56
|
+
(init?.search_hints ?? [])
|
|
57
|
+
.map((hint) => getAvailableValueFromObject(hint, locale))
|
|
58
|
+
.filter((hint): hint is string => Boolean(hint)),
|
|
59
|
+
),
|
|
60
|
+
];
|
|
61
|
+
const id = useId();
|
|
62
|
+
const historySearch = useRef(onHistorySearch);
|
|
63
|
+
historySearch.current = onHistorySearch;
|
|
64
|
+
const [historyOpen, setHistoryOpen] = useState(false);
|
|
65
|
+
// The store's hints step aside while the history list is open: on a phone
|
|
66
|
+
// the browser's own hint list would cover it.
|
|
67
|
+
const historyVisible = historyOpen &&
|
|
68
|
+
Boolean(historyPending || history.length || historyError);
|
|
69
|
+
const removeLabel = locale.toLowerCase().startsWith('ru')
|
|
70
|
+
? 'Удалить из истории'
|
|
71
|
+
: 'Remove from history';
|
|
72
|
+
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!query && routeQuery) {
|
|
75
|
+
browseStore.getState().setSearchQuery(routeQuery);
|
|
76
|
+
}
|
|
77
|
+
}, [browseStore, query, routeQuery]);
|
|
78
|
+
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (!historyOpen || disabled || !historySearch.current) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const timeout = setTimeout(
|
|
84
|
+
() => historySearch.current?.(value.trim()),
|
|
85
|
+
250,
|
|
86
|
+
);
|
|
87
|
+
return () => clearTimeout(timeout);
|
|
88
|
+
}, [historyOpen, value, disabled]);
|
|
89
|
+
|
|
90
|
+
function submit(event: FormEvent<HTMLFormElement>) {
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
const normalized = value.trim();
|
|
93
|
+
if (!disabled && normalized) {
|
|
94
|
+
setHistoryOpen(false);
|
|
95
|
+
// A phone closes its keyboard, so the results are not covered.
|
|
96
|
+
event.currentTarget.querySelector('input')?.blur();
|
|
97
|
+
onSearch?.(normalized);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<form
|
|
103
|
+
className={styles.search}
|
|
104
|
+
data-main-search
|
|
105
|
+
onSubmit={submit}
|
|
106
|
+
onBlur={(event) => {
|
|
107
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
108
|
+
setHistoryOpen(false);
|
|
109
|
+
}
|
|
110
|
+
}}
|
|
111
|
+
>
|
|
112
|
+
<label className={styles.field}>
|
|
113
|
+
<span className={styles.visuallyHidden}>{label}</span>
|
|
114
|
+
<input
|
|
115
|
+
type="search"
|
|
116
|
+
list={historyVisible ? undefined : id}
|
|
117
|
+
value={value}
|
|
118
|
+
placeholder={label}
|
|
119
|
+
disabled={disabled}
|
|
120
|
+
className={styles.input}
|
|
121
|
+
onChange={(event) =>
|
|
122
|
+
browseStore.getState().setSearchQuery(event.target.value)
|
|
123
|
+
}
|
|
124
|
+
onFocus={() => setHistoryOpen(true)}
|
|
125
|
+
/>
|
|
126
|
+
</label>
|
|
127
|
+
<datalist id={id}>
|
|
128
|
+
{hints.map((hint) => (
|
|
129
|
+
<option
|
|
130
|
+
key={hint}
|
|
131
|
+
value={hint}
|
|
132
|
+
/>
|
|
133
|
+
))}
|
|
134
|
+
</datalist>
|
|
135
|
+
<button
|
|
136
|
+
type="submit"
|
|
137
|
+
disabled={disabled || !value.trim()}
|
|
138
|
+
className={styles.button}
|
|
139
|
+
>
|
|
140
|
+
<svg
|
|
141
|
+
viewBox="0 0 20 20"
|
|
142
|
+
fill="none"
|
|
143
|
+
stroke="currentColor"
|
|
144
|
+
strokeWidth="1.5"
|
|
145
|
+
aria-hidden="true"
|
|
146
|
+
className={styles.icon}
|
|
147
|
+
>
|
|
148
|
+
<circle
|
|
149
|
+
cx="8.5"
|
|
150
|
+
cy="8.5"
|
|
151
|
+
r="5.5"
|
|
152
|
+
/>
|
|
153
|
+
<path d="m13 13 4.5 4.5" />
|
|
154
|
+
</svg>
|
|
155
|
+
<span className={styles.visuallyHidden}>{buttonLabel}</span>
|
|
156
|
+
</button>
|
|
157
|
+
{historyVisible ? (
|
|
158
|
+
<div
|
|
159
|
+
className={styles.history}
|
|
160
|
+
data-search-history
|
|
161
|
+
>
|
|
162
|
+
{historyPending ? (
|
|
163
|
+
<span
|
|
164
|
+
className={styles.historyStatus}
|
|
165
|
+
role="status"
|
|
166
|
+
>
|
|
167
|
+
{locale.toLowerCase().startsWith('ru') ? 'Загрузка…' : 'Loading…'}
|
|
168
|
+
</span>
|
|
169
|
+
) : historyError ? (
|
|
170
|
+
<p
|
|
171
|
+
className={styles.historyStatus}
|
|
172
|
+
role="alert"
|
|
173
|
+
>
|
|
174
|
+
{historyError}
|
|
175
|
+
</p>
|
|
176
|
+
) : (
|
|
177
|
+
<ul>
|
|
178
|
+
{history.map((item) => (
|
|
179
|
+
<li key={item.id}>
|
|
180
|
+
<button
|
|
181
|
+
type="button"
|
|
182
|
+
className={styles.historyQuery}
|
|
183
|
+
disabled={disabled}
|
|
184
|
+
onClick={() => {
|
|
185
|
+
browseStore.getState().setSearchQuery(item.q);
|
|
186
|
+
setHistoryOpen(false);
|
|
187
|
+
onSearch?.(item.q);
|
|
188
|
+
}}
|
|
189
|
+
>
|
|
190
|
+
{item.q}
|
|
191
|
+
</button>
|
|
192
|
+
<button
|
|
193
|
+
type="button"
|
|
194
|
+
className={styles.historyDelete}
|
|
195
|
+
disabled={disabled || historyDeleting.includes(item.id)}
|
|
196
|
+
aria-label={`${removeLabel}: ${item.q}`}
|
|
197
|
+
onClick={() => onHistoryDelete?.(item.id)}
|
|
198
|
+
>
|
|
199
|
+
<svg
|
|
200
|
+
viewBox="0 0 20 20"
|
|
201
|
+
fill="none"
|
|
202
|
+
stroke="currentColor"
|
|
203
|
+
strokeWidth="1.5"
|
|
204
|
+
aria-hidden="true"
|
|
205
|
+
>
|
|
206
|
+
<path d="m5 5 10 10M15 5 5 15" />
|
|
207
|
+
</svg>
|
|
208
|
+
</button>
|
|
209
|
+
</li>
|
|
210
|
+
))}
|
|
211
|
+
</ul>
|
|
212
|
+
)}
|
|
213
|
+
</div>
|
|
214
|
+
) : null}
|
|
215
|
+
</form>
|
|
216
|
+
);
|
|
217
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# ProductSearchResults · React
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
Search and category result area with filters, product cards, loading, retry,
|
|
6
|
+
empty and pagination states.
|
|
7
|
+
|
|
8
|
+
## Contract and dependencies
|
|
9
|
+
|
|
10
|
+
The host owns `products_search` and passes the resulting products or their
|
|
11
|
+
cached `productIds`, pagination and request state. `products` lets a server page
|
|
12
|
+
render newly returned products before they are present in Application Load.
|
|
13
|
+
When both are supplied, `productIds` selects and orders entries from that array.
|
|
14
|
+
The component never replaces missing results with home-page products and does
|
|
15
|
+
not issue requests.
|
|
16
|
+
|
|
17
|
+
`facets` and `filters` supply the server-loaded selector set and current
|
|
18
|
+
selection to `SearchFilters`. Omitting them uses the isolated browse store.
|
|
19
|
+
The supplied pages pass the choices of the first response for the current query
|
|
20
|
+
or category (`useProductSearch().facets`), so a filtered response never removes
|
|
21
|
+
a choice.
|
|
22
|
+
Filter changes call `onChangeFilters` with the complete selection. Clear calls
|
|
23
|
+
`onClearFilters`. `hideCategories` removes a category facet for a fixed category
|
|
24
|
+
page, while `fixedFilters` hides every condition already fixed by a manufacturer,
|
|
25
|
+
seller, store or featured scope.
|
|
26
|
+
|
|
27
|
+
A defined `query` shorter than three trimmed characters displays the search
|
|
28
|
+
prompt instead of filters and results. While the first request is pending, the
|
|
29
|
+
component shows filter and product placeholders. A later pending request keeps
|
|
30
|
+
existing cards visible, disables their actions and exposes a loading status.
|
|
31
|
+
`failed` shows Retry; a loaded empty result shows the shared search empty state,
|
|
32
|
+
the relevant search or category hint, Clear when filters are selected and Home.
|
|
33
|
+
|
|
34
|
+
The filter disclosure is available in a narrow container; wider containers
|
|
35
|
+
keep filters visible. The result area retains its measured height while result
|
|
36
|
+
data shrinks and resets that retained height when facets are cleared.
|
|
37
|
+
|
|
38
|
+
Pagination appears when a previous or next page can exist. Previous is disabled
|
|
39
|
+
on page 1. Next is disabled while pending, after failure or when `hasNext` is
|
|
40
|
+
false. The buttons call `onChangePage` with the requested page and do not mutate
|
|
41
|
+
the current page themselves.
|
|
42
|
+
|
|
43
|
+
All `ProductGroup` actions and variant events are forwarded with their physical
|
|
44
|
+
payloads. Source is maintained in
|
|
45
|
+
`components/orionplace/search/ProductSearchResults.tsx`; filter interfaces are
|
|
46
|
+
in `interfaces/orionplace/products/IProductSearchFacets.ts`.
|
|
47
|
+
|
|
48
|
+
### Props
|
|
49
|
+
|
|
50
|
+
| Prop | Meaning |
|
|
51
|
+
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `products?: readonly IProduct[]` | Product records supplied for server rendering and hydration. |
|
|
53
|
+
| `productIds?: number[]` | Product IDs rendered in the supplied order. |
|
|
54
|
+
| `query?: string` | Current product or storefront search text. |
|
|
55
|
+
| `facets?: IProductSearchFacets` | Filter choices returned by the confirmed product search. |
|
|
56
|
+
| `filters?: ProductFacetSelection` | Current confirmed filter selection. |
|
|
57
|
+
| `hideCategories?: boolean` | Hides the category filter because the page already fixes the category. |
|
|
58
|
+
| `fixedFilters?: readonly string[]` | Conditions fixed by the page scope and therefore hidden from editable filters. |
|
|
59
|
+
| `emptyDescription?: string` | Explanation shown when the confirmed result is empty. |
|
|
60
|
+
| `filtersDisabled?: boolean` | Disables filter editing while keeping the current selection visible. |
|
|
61
|
+
| `page?: number` | Current result page. |
|
|
62
|
+
| `pages?: number` | Number of pages reported by the API result. |
|
|
63
|
+
| `total?: number` | Total records reported by the API result. |
|
|
64
|
+
| `hasNext?: boolean` | Whether the API result can have a following page. |
|
|
65
|
+
| `pending?: boolean` | Shows the loading state and blocks duplicate actions. |
|
|
66
|
+
| `failed?: boolean` | Marks the current load as failed and exposes the retry state. |
|
|
67
|
+
| `loaded?: boolean` | Distinguishes a confirmed empty result from data that has not loaded yet. |
|
|
68
|
+
| `productActionsDisabled?: boolean` | Disables cart, wishlist, subscription and preorder actions. |
|
|
69
|
+
| `productHref?: (productId: number) => string` | Builds the product destination from the callback arguments. |
|
|
70
|
+
| `onSelectHome?: () => void` | Called when the visitor opens the home page. The callback has no payload. |
|
|
71
|
+
| `onChangeFilters?: (selection: ProductFacetSelection) => void` | Called when the visitor changes the product filters. The callback payload is shown in its type. |
|
|
72
|
+
| `onClearFilters?: () => void` | Called when the visitor clears the product filters. The callback has no payload. |
|
|
73
|
+
| `onChangePage?: (page: number) => void` | Called when the visitor requests another result page. The callback payload is shown in its type. |
|
|
74
|
+
| `onRetry?: () => void` | Called when the visitor retries the failed request. The callback has no payload. |
|
|
75
|
+
| `onSelect?: (product: IProduct) => void` | Passes the displayed product object when its image or name is selected. The application handles product navigation. |
|
|
76
|
+
| `onSelectSeller?: (seller: IProductSeller) => void` | Passes the displayed product’s seller object when the seller is selected. The application opens the seller page. |
|
|
77
|
+
| `onSelectVariant?: (selection: ProductActionSelection & { variant: IProductVariantValue; }) => void` | Passes the previously displayed product ID in `product` and chosen primary variant in `variant`. An available variant product replaces the card; the application loads missing product data. |
|
|
78
|
+
| `onRequestSecondaryVariants?: (request: IProductSecondaryVariantRequest) => void` | Passes the product ID in `product`, product group ID in `productGroup` and primary variant in `variant` when its secondary variants need loading. The application loads them and supplies them to the product store. |
|
|
79
|
+
| `onSelectSecondaryVariant?: (selection: ProductActionSelection & { variant: IProductSecondaryVariant; }) => void` | Passes the previously displayed product ID in `product` and chosen secondary variant in `variant` after replacing the displayed product. The secondary-variant data remains available. |
|
|
80
|
+
| `onToggleFavorite?: (selection: ProductActionSelection & { selected: boolean; }) => void` | Passes the product ID in `product` and desired wishlist state in `selected` after the heart is pressed. The application confirms the change with a request and updates product data. |
|
|
81
|
+
| `onAdd?: (selection: ProductActionSelection & { quantity: number; }) => void` | Passes the product ID in `product` and the requested total quantity in `quantity` when adding an item or changing its quantity. The application sends the request and supplies confirmed product data. |
|
|
82
|
+
| `onRemove?: (selection: ProductActionSelection & { cartItem: number; }) => void` | Passes the product ID in `product` and cart item ID in `cartItem` when removing the last unit. The application removes that cart item and supplies confirmed product data. |
|
|
83
|
+
| `onSubscribe?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when an availability notification is requested. The application handles any required sign-in, sends the request and updates subscription state. |
|
|
84
|
+
| `onUnsubscribe?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when cancelling an availability notification. The application sends the request and supplies the confirmed subscription state. |
|
|
85
|
+
| `onPreorder?: (selection: ProductActionSelection) => void` | Passes the product ID in `product` when preorder is selected. The application collects the required contact details and submits the request. |
|
|
86
|
+
|
|
87
|
+
## Русский
|
|
88
|
+
|
|
89
|
+
Компонент объединяет фильтры, карточки товаров, загрузку, повтор запроса,
|
|
90
|
+
пустой результат и пагинацию для поиска и страницы категории.
|
|
91
|
+
|
|
92
|
+
Родитель управляет `products_search` и передаёт полученные товары либо их
|
|
93
|
+
сохранённые `productIds`, пагинацию и состояние запроса. `products` позволяет
|
|
94
|
+
серверной странице показать новые товары до их появления в Application Load.
|
|
95
|
+
Если переданы оба свойства, `productIds` выбирает и упорядочивает товары из
|
|
96
|
+
этого массива. Компонент не заменяет отсутствующие результаты товарами главной
|
|
97
|
+
страницы и сам не выполняет запросы.
|
|
98
|
+
|
|
99
|
+
`facets` и `filters` передают серверный набор вариантов и текущий выбор в
|
|
100
|
+
`SearchFilters`. Без них используется отдельный browse store. Готовые страницы
|
|
101
|
+
передают варианты из первого ответа для текущего запроса или категории
|
|
102
|
+
(`useProductSearch().facets`), поэтому ответ с выбранными фильтрами не убирает
|
|
103
|
+
варианты выбора. Изменение фильтра вызывает `onChangeFilters` с полным набором,
|
|
104
|
+
а сброс — `onClearFilters`. `hideCategories` скрывает категории на странице с
|
|
105
|
+
зафиксированной категорией, а `fixedFilters` скрывает условия, уже заданные
|
|
106
|
+
производителем, продавцом, магазином или режимом рекомендуемых товаров.
|
|
107
|
+
|
|
108
|
+
Если определённый `query` после удаления пробелов короче трёх символов, вместо
|
|
109
|
+
фильтров и результатов показана подсказка поиска. Во время первого запроса
|
|
110
|
+
видны заполнители фильтров и карточек. Следующее обновление сохраняет карточки,
|
|
111
|
+
блокирует их действия и сообщает о загрузке. `failed` показывает кнопку повтора.
|
|
112
|
+
Пустой подтверждённый результат использует общий вид пустого поиска, подходящую
|
|
113
|
+
подсказку поиска или категории, сброс при выбранных фильтрах и кнопку «Главная».
|
|
114
|
+
|
|
115
|
+
В узком контейнере фильтры раскрываются кнопкой, в широком остаются видимыми.
|
|
116
|
+
Область результатов сохраняет измеренную высоту при уменьшении данных и
|
|
117
|
+
сбрасывает её после очистки набора вариантов.
|
|
118
|
+
|
|
119
|
+
Пагинация появляется, когда возможна предыдущая или следующая страница.
|
|
120
|
+
«Назад» недоступна на первой странице. «Далее» недоступна во время запроса,
|
|
121
|
+
после ошибки или при `hasNext = false`. Кнопки вызывают `onChangePage` с нужной
|
|
122
|
+
страницей и сами не меняют текущее значение.
|
|
123
|
+
|
|
124
|
+
Все действия и события вариантов `ProductGroup` передаются с физическими
|
|
125
|
+
данными. Исходный файл:
|
|
126
|
+
`components/orionplace/search/ProductSearchResults.tsx`; интерфейсы фильтров:
|
|
127
|
+
`interfaces/orionplace/products/IProductSearchFacets.ts`.
|
|
128
|
+
|
|
129
|
+
### Свойства
|
|
130
|
+
|
|
131
|
+
| Свойство | Назначение |
|
|
132
|
+
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
133
|
+
| `products?: readonly IProduct[]` | Товары для серверного рендера и гидратации. |
|
|
134
|
+
| `productIds?: number[]` | ID для товара, используемые в переданном порядке. |
|
|
135
|
+
| `query?: string` | Текущий текст поиска товаров или магазина. |
|
|
136
|
+
| `facets?: IProductSearchFacets` | Варианты фильтров из подтверждённого поиска товаров. |
|
|
137
|
+
| `filters?: ProductFacetSelection` | Текущий подтверждённый набор фильтров. |
|
|
138
|
+
| `hideCategories?: boolean` | Скрывает фильтр категорий, когда категория уже задана страницей. |
|
|
139
|
+
| `fixedFilters?: readonly string[]` | Условия, заданные страницей и скрытые из редактируемых фильтров. |
|
|
140
|
+
| `emptyDescription?: string` | Пояснение для пустого подтверждённого результата. |
|
|
141
|
+
| `filtersDisabled?: boolean` | Блокирует изменение фильтров, сохраняя текущий выбор видимым. |
|
|
142
|
+
| `page?: number` | Текущая страница результата. |
|
|
143
|
+
| `pages?: number` | Число страниц в ответе API. |
|
|
144
|
+
| `total?: number` | Общее число записей в ответе API. |
|
|
145
|
+
| `hasNext?: boolean` | Есть ли у результата API следующая страница. |
|
|
146
|
+
| `pending?: boolean` | Показывает загрузку и блокирует повторные действия. |
|
|
147
|
+
| `failed?: boolean` | Отмечает неудачную загрузку и показывает возможность повторить запрос. |
|
|
148
|
+
| `loaded?: boolean` | Отличает подтверждённый пустой результат от ещё не загруженных данных. |
|
|
149
|
+
| `productActionsDisabled?: boolean` | Блокирует корзину, избранное, подписку и предзаказ. |
|
|
150
|
+
| `productHref?: (productId: number) => string` | Строит адрес ссылки товара из аргументов обработчика. |
|
|
151
|
+
| `onSelectHome?: () => void` | Вызывается, когда покупатель открывает главную страницу. Обработчик не получает данные. |
|
|
152
|
+
| `onChangeFilters?: (selection: ProductFacetSelection) => void` | Вызывается, когда покупатель изменяет фильтры товаров. Данные обработчика указаны в его типе. |
|
|
153
|
+
| `onClearFilters?: () => void` | Вызывается, когда покупатель очищает фильтры товаров. Обработчик не получает данные. |
|
|
154
|
+
| `onChangePage?: (page: number) => void` | Вызывается, когда покупатель открывает другую страницу результатов. Данные обработчика указаны в его типе. |
|
|
155
|
+
| `onRetry?: () => void` | Вызывается, когда покупатель повторяет неудачный запрос. Обработчик не получает данные. |
|
|
156
|
+
| `onSelect?: (product: IProduct) => void` | Передаёт объект отображаемого товара при выборе его изображения или названия. Приложение выполняет переход к товару. |
|
|
157
|
+
| `onSelectSeller?: (seller: IProductSeller) => void` | Передаёт объект продавца отображаемого товара при выборе продавца. Приложение открывает его страницу. |
|
|
158
|
+
| `onSelectVariant?: (selection: ProductActionSelection & { variant: IProductVariantValue; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный основной вариант в `variant`. Доступный товар выбранного варианта заменяет карточку; отсутствующие данные загружает приложение. |
|
|
159
|
+
| `onRequestSecondaryVariants?: (request: IProductSecondaryVariantRequest) => void` | Передаёт ID товара в `product`, ID группы товаров в `productGroup` и основной вариант в `variant`, когда для него нужно загрузить дополнительные варианты. Приложение загружает и передаёт их в хранилище товаров. |
|
|
160
|
+
| `onSelectSecondaryVariant?: (selection: ProductActionSelection & { variant: IProductSecondaryVariant; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный дополнительный вариант в `variant` после замены отображаемого товара. Выбор сохраняет данные дополнительных вариантов. |
|
|
161
|
+
| `onToggleFavorite?: (selection: ProductActionSelection & { selected: boolean; }) => void` | Передаёт ID товара в `product` и желаемое состояние избранного в `selected` после нажатия сердца. Приложение подтверждает изменение запросом и обновляет данные товара. |
|
|
162
|
+
| `onAdd?: (selection: ProductActionSelection & { quantity: number; }) => void` | Передаёт `product` — ID товара и `quantity` — запрошенное итоговое количество при добавлении или изменении количества. Приложение выполняет запрос и передаёт подтверждённые данные товара. |
|
|
163
|
+
| `onRemove?: (selection: ProductActionSelection & { cartItem: number; }) => void` | Передаёт ID товара в `product` и ID позиции корзины в `cartItem` при удалении последней единицы. Приложение удаляет эту позицию и передаёт подтверждённые данные товара. |
|
|
164
|
+
| `onSubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе уведомления о поступлении. Приложение выполняет вход, если он нужен, отправляет запрос и обновляет состояние подписки. |
|
|
165
|
+
| `onUnsubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при отмене уведомления о поступлении. Приложение отправляет запрос и передаёт подтверждённое состояние подписки. |
|
|
166
|
+
| `onPreorder?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе предзаказа. Приложение собирает необходимые контактные данные и отправляет запрос. |
|