orionplace-react 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +276 -35
- 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,155 @@
|
|
|
1
|
+
# StorefrontCategory · React
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
`StorefrontCategory` renders one public category from the catalog store. The
|
|
6
|
+
page includes its localized name, plain-text description, optional logo,
|
|
7
|
+
breadcrumb path, immediate public subcategories and `ProductSearchResults`.
|
|
8
|
+
A missing ID or a private category shows the category-not-found state.
|
|
9
|
+
|
|
10
|
+
Pass `products` to include the current server search result in guest HTML. The
|
|
11
|
+
matching `facets` and `filters` properties keep the first filter view consistent
|
|
12
|
+
with those products. The component passes the remaining loading, failure,
|
|
13
|
+
pagination and product-action properties to `ProductSearchResults`, fixes the
|
|
14
|
+
category scope by hiding the category facet, and never starts a search request.
|
|
15
|
+
|
|
16
|
+
`homeHref` and `categoryHref(categoryId)` turn breadcrumb and category choices
|
|
17
|
+
into real links. With a matching callback, a normal click calls
|
|
18
|
+
`onSelectHome()` or `onSelectCategory(category)` and leaves routing to the
|
|
19
|
+
application. A modifier click retains the browser's link behavior. Without a
|
|
20
|
+
callback, a normal link navigates directly. Without a valid path, the control is
|
|
21
|
+
a button. Product, filter, pagination and retry callbacks retain the exact
|
|
22
|
+
`ProductSearchResults` contract.
|
|
23
|
+
|
|
24
|
+
The supplied `/category/:id` page searches the category together with its
|
|
25
|
+
public subcategories (`catalogBranchIds`), so a parent category lists the
|
|
26
|
+
products of its whole branch.
|
|
27
|
+
|
|
28
|
+
The maintained source is
|
|
29
|
+
`components/orionplace/categories/StorefrontCategory.tsx`; category data uses
|
|
30
|
+
`interfaces/orionplace/category/ICategory.ts`. The result and filter contracts
|
|
31
|
+
are in `interfaces/orionplace/products/IProduct.ts` and
|
|
32
|
+
`interfaces/orionplace/products/IProductSearchFacets.ts`.
|
|
33
|
+
|
|
34
|
+
### Props
|
|
35
|
+
|
|
36
|
+
| Prop | Meaning |
|
|
37
|
+
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| `categoryId: number` | ID of the category handled by StorefrontCategory. |
|
|
39
|
+
| `homeHref?: string` | Destination used by the home link. |
|
|
40
|
+
| `categoryHref?: (categoryId: number) => string` | Builds the category destination from the callback arguments. |
|
|
41
|
+
| `onSelectHome?: () => void` | Called when the visitor opens the home page. The callback has no payload. |
|
|
42
|
+
| `onSelectCategory?: (category: ICategory) => void` | Called when the visitor chooses a category. The callback payload is shown in its type. |
|
|
43
|
+
| `loaded?: boolean` | Distinguishes a confirmed empty result from data that has not loaded yet. |
|
|
44
|
+
| `pending?: boolean` | Shows the loading state and blocks duplicate actions. |
|
|
45
|
+
| `onSelect?: (product: IProduct) => void` | Passes the displayed product object when its image or name is selected. The application handles product navigation. |
|
|
46
|
+
| `onSelectSeller?: (seller: IProductSeller) => void` | Passes the displayed product’s seller object when the seller is selected. The application opens the seller page. |
|
|
47
|
+
| `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. |
|
|
48
|
+
| `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. |
|
|
49
|
+
| `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. |
|
|
50
|
+
| `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. |
|
|
51
|
+
| `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. |
|
|
52
|
+
| `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. |
|
|
53
|
+
| `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. |
|
|
54
|
+
| `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. |
|
|
55
|
+
| `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. |
|
|
56
|
+
| `productActionsDisabled?: boolean` | Disables cart, wishlist, subscription and preorder actions. |
|
|
57
|
+
| `products?: readonly IProduct[]` | Product records supplied for server rendering and hydration. |
|
|
58
|
+
| `productIds?: number[]` | Product IDs rendered in the supplied order. |
|
|
59
|
+
| `query?: string` | Current product or storefront search text. |
|
|
60
|
+
| `facets?: IProductSearchFacets` | Filter choices returned by the confirmed product search. |
|
|
61
|
+
| `filters?: ProductFacetSelection` | Current confirmed filter selection. |
|
|
62
|
+
| `fixedFilters?: readonly string[]` | Conditions fixed by the page scope and therefore hidden from editable filters. |
|
|
63
|
+
| `emptyDescription?: string` | Explanation shown when the confirmed result is empty. |
|
|
64
|
+
| `filtersDisabled?: boolean` | Disables filter editing while keeping the current selection visible. |
|
|
65
|
+
| `page?: number` | Current result page. |
|
|
66
|
+
| `pages?: number` | Number of pages reported by the API result. |
|
|
67
|
+
| `total?: number` | Total records reported by the API result. |
|
|
68
|
+
| `hasNext?: boolean` | Whether the API result can have a following page. |
|
|
69
|
+
| `failed?: boolean` | Marks the current load as failed and exposes the retry state. |
|
|
70
|
+
| `productHref?: (productId: number) => string` | Builds the product destination from the callback arguments. |
|
|
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
|
+
|
|
76
|
+
## Русский
|
|
77
|
+
|
|
78
|
+
`StorefrontCategory` показывает одну общедоступную категорию из store каталога.
|
|
79
|
+
Страница содержит локализованное название, текстовое описание без HTML,
|
|
80
|
+
необязательный логотип, путь к категории, непосредственные общедоступные
|
|
81
|
+
подкатегории и `ProductSearchResults`. Для неизвестного ID или закрытой
|
|
82
|
+
категории показывается состояние «Категория не найдена».
|
|
83
|
+
|
|
84
|
+
Передайте `products`, чтобы товары текущего серверного поиска вошли в гостевой
|
|
85
|
+
HTML. Свойства `facets` и `filters` сохраняют соответствие первого набора
|
|
86
|
+
фильтров этим товарам. Остальные свойства загрузки, ошибки, пагинации и действий
|
|
87
|
+
с товаром передаются в `ProductSearchResults`. Компонент скрывает фильтр
|
|
88
|
+
категории, потому что категория уже выбрана, и сам не выполняет поисковый
|
|
89
|
+
запрос.
|
|
90
|
+
|
|
91
|
+
`homeHref` и `categoryHref(categoryId)` превращают элементы пути и категории в
|
|
92
|
+
настоящие ссылки. Если передан соответствующий обработчик, обычный щелчок
|
|
93
|
+
вызывает `onSelectHome()` или `onSelectCategory(category)`, а переход выполняет
|
|
94
|
+
приложение. Щелчок с модификатором сохраняет стандартное поведение браузера.
|
|
95
|
+
Без обработчика обычная ссылка открывается напрямую. Без допустимого адреса
|
|
96
|
+
показывается кнопка. События товара, фильтров, пагинации и повторной загрузки
|
|
97
|
+
сохраняют точный контракт `ProductSearchResults`.
|
|
98
|
+
|
|
99
|
+
Готовая страница `/category/:id` ищет товары категории вместе с её
|
|
100
|
+
общедоступными подкатегориями (`catalogBranchIds`), поэтому родительская
|
|
101
|
+
категория показывает товары всей ветки.
|
|
102
|
+
|
|
103
|
+
Поддерживаемый исходный файл:
|
|
104
|
+
`components/orionplace/categories/StorefrontCategory.tsx`; данные категории
|
|
105
|
+
описывает `interfaces/orionplace/category/ICategory.ts`. Контракты результатов и
|
|
106
|
+
фильтров находятся в `interfaces/orionplace/products/IProduct.ts` и
|
|
107
|
+
`interfaces/orionplace/products/IProductSearchFacets.ts`.
|
|
108
|
+
|
|
109
|
+
### Свойства
|
|
110
|
+
|
|
111
|
+
| Свойство | Назначение |
|
|
112
|
+
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
113
|
+
| `categoryId: number` | ID категории, с которым работает StorefrontCategory. |
|
|
114
|
+
| `homeHref?: string` | Адрес ссылки главной страницы. |
|
|
115
|
+
| `categoryHref?: (categoryId: number) => string` | Строит адрес ссылки категории из аргументов обработчика. |
|
|
116
|
+
| `onSelectHome?: () => void` | Вызывается, когда покупатель открывает главную страницу. Обработчик не получает данные. |
|
|
117
|
+
| `onSelectCategory?: (category: ICategory) => void` | Вызывается, когда покупатель выбирает категорию. Данные обработчика указаны в его типе. |
|
|
118
|
+
| `loaded?: boolean` | Отличает подтверждённый пустой результат от ещё не загруженных данных. |
|
|
119
|
+
| `pending?: boolean` | Показывает загрузку и блокирует повторные действия. |
|
|
120
|
+
| `onSelect?: (product: IProduct) => void` | Передаёт объект отображаемого товара при выборе его изображения или названия. Приложение выполняет переход к товару. |
|
|
121
|
+
| `onSelectSeller?: (seller: IProductSeller) => void` | Передаёт объект продавца отображаемого товара при выборе продавца. Приложение открывает его страницу. |
|
|
122
|
+
| `onSelectVariant?: (selection: ProductActionSelection & { variant: IProductVariantValue; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный основной вариант в `variant`. Доступный товар выбранного варианта заменяет карточку; отсутствующие данные загружает приложение. |
|
|
123
|
+
| `onRequestSecondaryVariants?: (request: IProductSecondaryVariantRequest) => void` | Передаёт ID товара в `product`, ID группы товаров в `productGroup` и основной вариант в `variant`, когда для него нужно загрузить дополнительные варианты. Приложение загружает и передаёт их в хранилище товаров. |
|
|
124
|
+
| `onSelectSecondaryVariant?: (selection: ProductActionSelection & { variant: IProductSecondaryVariant; }) => void` | Передаёт ID ранее отображаемого товара в `product` и выбранный дополнительный вариант в `variant` после замены отображаемого товара. Выбор сохраняет данные дополнительных вариантов. |
|
|
125
|
+
| `onToggleFavorite?: (selection: ProductActionSelection & { selected: boolean; }) => void` | Передаёт ID товара в `product` и желаемое состояние избранного в `selected` после нажатия сердца. Приложение подтверждает изменение запросом и обновляет данные товара. |
|
|
126
|
+
| `onAdd?: (selection: ProductActionSelection & { quantity: number; }) => void` | Передаёт `product` — ID товара и `quantity` — запрошенное итоговое количество при добавлении или изменении количества. Приложение выполняет запрос и передаёт подтверждённые данные товара. |
|
|
127
|
+
| `onRemove?: (selection: ProductActionSelection & { cartItem: number; }) => void` | Передаёт ID товара в `product` и ID позиции корзины в `cartItem` при удалении последней единицы. Приложение удаляет эту позицию и передаёт подтверждённые данные товара. |
|
|
128
|
+
| `onSubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе уведомления о поступлении. Приложение выполняет вход, если он нужен, отправляет запрос и обновляет состояние подписки. |
|
|
129
|
+
| `onUnsubscribe?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при отмене уведомления о поступлении. Приложение отправляет запрос и передаёт подтверждённое состояние подписки. |
|
|
130
|
+
| `onPreorder?: (selection: ProductActionSelection) => void` | Передаёт ID товара в `product` при выборе предзаказа. Приложение собирает необходимые контактные данные и отправляет запрос. |
|
|
131
|
+
| `productActionsDisabled?: boolean` | Блокирует корзину, избранное, подписку и предзаказ. |
|
|
132
|
+
| `products?: readonly IProduct[]` | Товары для серверного рендера и гидратации. |
|
|
133
|
+
| `productIds?: number[]` | ID для товара, используемые в переданном порядке. |
|
|
134
|
+
| `query?: string` | Текущий текст поиска товаров или магазина. |
|
|
135
|
+
| `facets?: IProductSearchFacets` | Варианты фильтров из подтверждённого поиска товаров. |
|
|
136
|
+
| `filters?: ProductFacetSelection` | Текущий подтверждённый набор фильтров. |
|
|
137
|
+
| `fixedFilters?: readonly string[]` | Условия, заданные страницей и скрытые из редактируемых фильтров. |
|
|
138
|
+
| `emptyDescription?: string` | Пояснение для пустого подтверждённого результата. |
|
|
139
|
+
| `filtersDisabled?: boolean` | Блокирует изменение фильтров, сохраняя текущий выбор видимым. |
|
|
140
|
+
| `page?: number` | Текущая страница результата. |
|
|
141
|
+
| `pages?: number` | Число страниц в ответе API. |
|
|
142
|
+
| `total?: number` | Общее число записей в ответе API. |
|
|
143
|
+
| `hasNext?: boolean` | Есть ли у результата API следующая страница. |
|
|
144
|
+
| `failed?: boolean` | Отмечает неудачную загрузку и показывает возможность повторить запрос. |
|
|
145
|
+
| `productHref?: (productId: number) => string` | Строит адрес ссылки товара из аргументов обработчика. |
|
|
146
|
+
| `onChangeFilters?: (selection: ProductFacetSelection) => void` | Вызывается, когда покупатель изменяет фильтры товаров. Данные обработчика указаны в его типе. |
|
|
147
|
+
| `onClearFilters?: () => void` | Вызывается, когда покупатель очищает фильтры товаров. Обработчик не получает данные. |
|
|
148
|
+
| `onChangePage?: (page: number) => void` | Вызывается, когда покупатель открывает другую страницу результатов. Данные обработчика указаны в его типе. |
|
|
149
|
+
| `onRetry?: () => void` | Вызывается, когда покупатель повторяет неудачный запрос. Обработчик не получает данные. |
|
|
150
|
+
|
|
151
|
+
## Category visibility / Видимость категорий
|
|
152
|
+
|
|
153
|
+
Navigation omits categories with `exclude_from_tree: true` and all their descendants. The full published catalog remains available for product main-category names, links and breadcrumbs.
|
|
154
|
+
|
|
155
|
+
В навигации скрываются категории с `exclude_from_tree: true` и все их подкатегории. Полный каталог опубликованных категорий сохраняется для названий, ссылок и цепочек основной категории товара.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/* The page frame follows its own width: a size container around <main>,
|
|
2
|
+
so the docs tabs and every placement show the same padding. */
|
|
3
|
+
.page {
|
|
4
|
+
container: page / inline-size;
|
|
5
|
+
width: 100%;
|
|
6
|
+
min-width: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.root {
|
|
10
|
+
display: grid;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
width: min(100%, 90rem);
|
|
13
|
+
min-width: 0;
|
|
14
|
+
gap: 2rem;
|
|
15
|
+
margin: 0 auto;
|
|
16
|
+
padding: 1.5rem 1rem;
|
|
17
|
+
color: var(--orionplace-text);
|
|
18
|
+
font: inherit;
|
|
19
|
+
container-type: inline-size;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.breadcrumbs,
|
|
23
|
+
.breadcrumbItem {
|
|
24
|
+
display: flex;
|
|
25
|
+
min-width: 0;
|
|
26
|
+
flex-wrap: wrap;
|
|
27
|
+
align-items: center;
|
|
28
|
+
gap: 0.25rem 0.5rem;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* The separator is a glyph; only the words are uppercase, as in Nuxt. */
|
|
32
|
+
.breadcrumbItem > [aria-hidden='true'] {
|
|
33
|
+
text-transform: none;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.breadcrumbs {
|
|
37
|
+
color: var(--orionplace-muted);
|
|
38
|
+
font-size: 0.75rem;
|
|
39
|
+
line-height: 1rem;
|
|
40
|
+
text-transform: uppercase;
|
|
41
|
+
letter-spacing: 0.08em;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.crumb {
|
|
45
|
+
padding: 0;
|
|
46
|
+
border: 0;
|
|
47
|
+
color: inherit;
|
|
48
|
+
background: transparent;
|
|
49
|
+
font: inherit;
|
|
50
|
+
text-decoration: none;
|
|
51
|
+
text-transform: inherit;
|
|
52
|
+
letter-spacing: inherit;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
outline: none;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.crumb:focus-visible {
|
|
58
|
+
color: var(--orionplace-text);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@media (hover: hover) {
|
|
62
|
+
.crumb:hover {
|
|
63
|
+
color: var(--orionplace-text);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.current {
|
|
68
|
+
color: var(--orionplace-text);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.header {
|
|
72
|
+
display: flex;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: space-between;
|
|
76
|
+
gap: 1.5rem;
|
|
77
|
+
padding-bottom: 1.5rem;
|
|
78
|
+
border-bottom: 1px solid var(--orionplace-border);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.header > div {
|
|
82
|
+
min-width: 0;
|
|
83
|
+
max-width: 48rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.header h1 {
|
|
87
|
+
margin: 0;
|
|
88
|
+
overflow-wrap: anywhere;
|
|
89
|
+
font-size: 1.5rem;
|
|
90
|
+
font-weight: 500;
|
|
91
|
+
line-height: calc(2 / 1.5);
|
|
92
|
+
text-transform: uppercase;
|
|
93
|
+
letter-spacing: 0.04em;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.header p {
|
|
97
|
+
margin: 0.75rem 0 0;
|
|
98
|
+
color: var(--orionplace-muted);
|
|
99
|
+
font-size: 0.875rem;
|
|
100
|
+
line-height: 1.5rem;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.logo {
|
|
104
|
+
box-sizing: border-box;
|
|
105
|
+
width: 5rem;
|
|
106
|
+
height: 5rem;
|
|
107
|
+
flex: 0 0 5rem;
|
|
108
|
+
padding: 0.5rem;
|
|
109
|
+
object-fit: contain;
|
|
110
|
+
background: var(--orionplace-surface);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.children {
|
|
114
|
+
min-width: 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.children h2 {
|
|
118
|
+
margin: 0 0 1rem;
|
|
119
|
+
font-size: 0.875rem;
|
|
120
|
+
line-height: 1.25rem;
|
|
121
|
+
font-weight: 500;
|
|
122
|
+
text-transform: uppercase;
|
|
123
|
+
letter-spacing: 0.08em;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@container page (min-width: 640px) {
|
|
127
|
+
.root {
|
|
128
|
+
padding: 2rem 1.5rem;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* 80px, 96px from 640px, as Nuxt's h-20 and h-24. */
|
|
132
|
+
.logo {
|
|
133
|
+
width: 6rem;
|
|
134
|
+
height: 6rem;
|
|
135
|
+
flex-basis: 6rem;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@container page (min-width: 1024px) {
|
|
140
|
+
.root {
|
|
141
|
+
padding-inline: 2rem;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* The title follows the component's own width, as in the other packages. */
|
|
146
|
+
@container (min-width: 592px) {
|
|
147
|
+
.header h1 { font-size: 1.875rem; line-height: calc(2.25 / 1.875); }
|
|
148
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import type { MouseEvent } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
useOrionplaceCatalog,
|
|
6
|
+
useOrionplaceSelections,
|
|
7
|
+
} from '@/providers/OrionplaceProvider';
|
|
8
|
+
import type { ICategory } from '@/interfaces/orionplace/category/ICategory';
|
|
9
|
+
import {
|
|
10
|
+
catalogTrailToCategory,
|
|
11
|
+
findCatalogCategory,
|
|
12
|
+
findNavigationCategory,
|
|
13
|
+
navigationCatalogCategories,
|
|
14
|
+
} from '@/lib/orionplace/catalog';
|
|
15
|
+
import { categoryLabels } from '@/lib/orionplace/categoryLabels';
|
|
16
|
+
import {
|
|
17
|
+
getAvailableNestedValueFromObject,
|
|
18
|
+
plainText,
|
|
19
|
+
safePublicUrl,
|
|
20
|
+
} from '@/lib/orionplace/presentation';
|
|
21
|
+
import { OrionplaceEmptyState } from '@/components/orionplace/shared/OrionplaceEmptyState';
|
|
22
|
+
import { OrionplaceImage } from '@/components/orionplace/shared/OrionplaceImage';
|
|
23
|
+
import {
|
|
24
|
+
ProductSearchResults,
|
|
25
|
+
type ProductSearchResultsProps,
|
|
26
|
+
} from '@/components/orionplace/search/ProductSearchResults';
|
|
27
|
+
import { CategoryGroup } from './CategoryGroup';
|
|
28
|
+
import styles from './StorefrontCategory.module.css';
|
|
29
|
+
|
|
30
|
+
export interface StorefrontCategoryProps extends Omit<
|
|
31
|
+
ProductSearchResultsProps,
|
|
32
|
+
'hideCategories' | 'onSelectHome'
|
|
33
|
+
> {
|
|
34
|
+
categoryId: number;
|
|
35
|
+
homeHref?: string;
|
|
36
|
+
categoryHref?: (categoryId: number) => string;
|
|
37
|
+
onSelectHome?: () => void;
|
|
38
|
+
onSelectCategory?: (category: ICategory) => void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function StorefrontCategory({
|
|
42
|
+
categoryId,
|
|
43
|
+
homeHref,
|
|
44
|
+
categoryHref,
|
|
45
|
+
onSelectHome,
|
|
46
|
+
onSelectCategory,
|
|
47
|
+
emptyDescription,
|
|
48
|
+
...results
|
|
49
|
+
}: StorefrontCategoryProps) {
|
|
50
|
+
const catalog = useOrionplaceCatalog((state) => state.catalog);
|
|
51
|
+
const locale = useOrionplaceSelections((state) => state.localeCode);
|
|
52
|
+
const labels = categoryLabels(locale);
|
|
53
|
+
const category = findCatalogCategory(catalog, categoryId);
|
|
54
|
+
const trail = catalogTrailToCategory(catalog, categoryId);
|
|
55
|
+
const children = navigationCatalogCategories(
|
|
56
|
+
findNavigationCategory(catalog, categoryId)?.childs,
|
|
57
|
+
);
|
|
58
|
+
const safeHomeHref = safePublicUrl(homeHref);
|
|
59
|
+
const catalogHref = `/catalog?locale=${encodeURIComponent(locale)}`;
|
|
60
|
+
const description = plainText(
|
|
61
|
+
getAvailableNestedValueFromObject(
|
|
62
|
+
category?.locale,
|
|
63
|
+
locale,
|
|
64
|
+
'cg_description',
|
|
65
|
+
),
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
function categoryName(item: ICategory) {
|
|
69
|
+
return (
|
|
70
|
+
getAvailableNestedValueFromObject(item.locale, locale, 'cg_name') ||
|
|
71
|
+
`${labels.category} ${item.id}`
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function selectLink(
|
|
76
|
+
event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>,
|
|
77
|
+
href: string,
|
|
78
|
+
action: (() => void) | undefined,
|
|
79
|
+
) {
|
|
80
|
+
const modified =
|
|
81
|
+
event.button > 0 ||
|
|
82
|
+
event.metaKey ||
|
|
83
|
+
event.ctrlKey ||
|
|
84
|
+
event.shiftKey ||
|
|
85
|
+
event.altKey;
|
|
86
|
+
if (href && (modified || !action)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
action?.();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function breadcrumb(
|
|
95
|
+
label: string,
|
|
96
|
+
href: string,
|
|
97
|
+
action: (() => void) | undefined,
|
|
98
|
+
current = false,
|
|
99
|
+
) {
|
|
100
|
+
if (current) {
|
|
101
|
+
return (
|
|
102
|
+
<span
|
|
103
|
+
aria-current="page"
|
|
104
|
+
className={styles.current}
|
|
105
|
+
>
|
|
106
|
+
{label}
|
|
107
|
+
</span>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (href) {
|
|
112
|
+
return (
|
|
113
|
+
<a
|
|
114
|
+
href={href}
|
|
115
|
+
className={styles.crumb}
|
|
116
|
+
onClick={(event) => selectLink(event, href, action)}
|
|
117
|
+
>
|
|
118
|
+
{label}
|
|
119
|
+
</a>
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return (
|
|
124
|
+
<button
|
|
125
|
+
type="button"
|
|
126
|
+
className={styles.crumb}
|
|
127
|
+
onClick={(event) => selectLink(event, '', action)}
|
|
128
|
+
>
|
|
129
|
+
{label}
|
|
130
|
+
</button>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return (
|
|
135
|
+
<div className={styles.page}>
|
|
136
|
+
<main
|
|
137
|
+
className={styles.root}
|
|
138
|
+
data-storefront-category
|
|
139
|
+
>
|
|
140
|
+
<nav
|
|
141
|
+
aria-label={labels.breadcrumb}
|
|
142
|
+
className={styles.breadcrumbs}
|
|
143
|
+
data-category-breadcrumbs
|
|
144
|
+
>
|
|
145
|
+
{breadcrumb(labels.home, safeHomeHref, onSelectHome)}
|
|
146
|
+
<span className={styles.breadcrumbItem}>
|
|
147
|
+
<span aria-hidden="true">/</span>
|
|
148
|
+
{breadcrumb(labels.catalog, catalogHref, undefined)}
|
|
149
|
+
</span>
|
|
150
|
+
{trail.map((item, index) => {
|
|
151
|
+
const current = index === trail.length - 1;
|
|
152
|
+
const href = current ? '' : safePublicUrl(categoryHref?.(item.id));
|
|
153
|
+
return (
|
|
154
|
+
<span
|
|
155
|
+
key={item.id}
|
|
156
|
+
className={styles.breadcrumbItem}
|
|
157
|
+
>
|
|
158
|
+
<span aria-hidden="true">/</span>
|
|
159
|
+
{breadcrumb(
|
|
160
|
+
categoryName(item),
|
|
161
|
+
href,
|
|
162
|
+
onSelectCategory ? () => onSelectCategory(item) : undefined,
|
|
163
|
+
current,
|
|
164
|
+
)}
|
|
165
|
+
</span>
|
|
166
|
+
);
|
|
167
|
+
})}
|
|
168
|
+
</nav>
|
|
169
|
+
|
|
170
|
+
{category ? (
|
|
171
|
+
<>
|
|
172
|
+
<header className={styles.header}>
|
|
173
|
+
<div>
|
|
174
|
+
<h1>{categoryName(category)}</h1>
|
|
175
|
+
{description ? <p>{description}</p> : null}
|
|
176
|
+
</div>
|
|
177
|
+
{category.logo_image ? (
|
|
178
|
+
<OrionplaceImage
|
|
179
|
+
src={category.logo_image}
|
|
180
|
+
alt={categoryName(category)}
|
|
181
|
+
width={96}
|
|
182
|
+
height={96}
|
|
183
|
+
className={styles.logo}
|
|
184
|
+
/>
|
|
185
|
+
) : null}
|
|
186
|
+
</header>
|
|
187
|
+
|
|
188
|
+
{children.length ? (
|
|
189
|
+
<section
|
|
190
|
+
aria-label={labels.subcategories}
|
|
191
|
+
data-category-part="CategoryGroup"
|
|
192
|
+
className={styles.children}
|
|
193
|
+
>
|
|
194
|
+
<h2>{labels.subcategories}</h2>
|
|
195
|
+
<CategoryGroup
|
|
196
|
+
parentId={categoryId}
|
|
197
|
+
categoryHref={categoryHref}
|
|
198
|
+
onSelect={onSelectCategory}
|
|
199
|
+
/>
|
|
200
|
+
</section>
|
|
201
|
+
) : null}
|
|
202
|
+
|
|
203
|
+
<div data-category-part="ProductSearchResults">
|
|
204
|
+
<ProductSearchResults
|
|
205
|
+
key={categoryId}
|
|
206
|
+
{...results}
|
|
207
|
+
hideCategories
|
|
208
|
+
emptyDescription={emptyDescription}
|
|
209
|
+
onSelectHome={onSelectHome}
|
|
210
|
+
/>
|
|
211
|
+
</div>
|
|
212
|
+
</>
|
|
213
|
+
) : (
|
|
214
|
+
<OrionplaceEmptyState
|
|
215
|
+
kind="search"
|
|
216
|
+
size="large"
|
|
217
|
+
messageTag="h1"
|
|
218
|
+
message={labels.missing}
|
|
219
|
+
description={labels.missingHint}
|
|
220
|
+
/>
|
|
221
|
+
)}
|
|
222
|
+
</main>
|
|
223
|
+
</div>
|
|
224
|
+
);
|
|
225
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# AboutPage · React
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
`AboutPage` displays the company details supplied by Application Load
|
|
6
|
+
`init.contact`. Empty values are omitted. It shows `company_name`, a different
|
|
7
|
+
`company_legal_name`, `company_contact_address`, `company_contact_phone`,
|
|
8
|
+
`company_tax_id` and `company_organization_id`. A formatted phone number becomes
|
|
9
|
+
a `tel:` link containing only its dialable characters.
|
|
10
|
+
|
|
11
|
+
The first server HTML contains all available text and the phone link. Copy
|
|
12
|
+
controls appear after hydration when the Clipboard API is available. Each
|
|
13
|
+
control copies the exact displayed value, announces success to assistive
|
|
14
|
+
technology and shows a local fallback beside the value if writing to the
|
|
15
|
+
clipboard fails. The component performs no browser work during server
|
|
16
|
+
rendering.
|
|
17
|
+
|
|
18
|
+
Source is maintained in `components/orionplace/contact/AboutPage.tsx`; the
|
|
19
|
+
physical contact interface is
|
|
20
|
+
`interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonContact.ts`.
|
|
21
|
+
|
|
22
|
+
## Русский
|
|
23
|
+
|
|
24
|
+
`AboutPage` показывает реквизиты компании из `init.contact` ответа Application
|
|
25
|
+
Load. Пустые значения пропускаются. Компонент выводит `company_name`, отличающееся
|
|
26
|
+
от него `company_legal_name`, `company_contact_address`,
|
|
27
|
+
`company_contact_phone`, `company_tax_id` и `company_organization_id`.
|
|
28
|
+
Отформатированный телефон становится ссылкой `tel:`, которая содержит только
|
|
29
|
+
символы, нужные для набора номера.
|
|
30
|
+
|
|
31
|
+
Первый серверный HTML содержит весь доступный текст и ссылку телефона. Кнопки
|
|
32
|
+
копирования появляются после гидратации, если доступен Clipboard API. Каждая
|
|
33
|
+
кнопка копирует точное показанное значение, сообщает об успехе вспомогательным
|
|
34
|
+
технологиям и показывает рядом со значением подсказку при ошибке записи в буфер
|
|
35
|
+
обмена. Во время серверного рендеринга компонент не выполняет браузерных
|
|
36
|
+
действий.
|
|
37
|
+
|
|
38
|
+
Поддерживаемый исходный файл:
|
|
39
|
+
`components/orionplace/contact/AboutPage.tsx`; физический интерфейс контактов:
|
|
40
|
+
`interfaces/orionplace/appBase/appLoadCommon/IAppLoadCommonContact.ts`.
|