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,335 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ECustomerTicketSolution,
|
|
3
|
+
ECustomerTicketStatus,
|
|
4
|
+
ECustomerTicketType,
|
|
5
|
+
EOrderRefundShipmentStatus,
|
|
6
|
+
} from '@/interfaces/orionplace/tickets/ICustomerTicketApi';
|
|
7
|
+
import type { ICustomerTicketReplyWait } from '@/interfaces/orionplace/tickets/ICustomerTicketApi';
|
|
8
|
+
|
|
9
|
+
const en = {
|
|
10
|
+
title: 'Support',
|
|
11
|
+
new: 'New conversation',
|
|
12
|
+
newAction: 'New',
|
|
13
|
+
newHint: 'New conversation',
|
|
14
|
+
ticket: 'Conversation',
|
|
15
|
+
open: 'Open',
|
|
16
|
+
closed: 'Closed',
|
|
17
|
+
statusOpen: 'Open',
|
|
18
|
+
statusClosed: 'Closed',
|
|
19
|
+
empty: 'No conversations in this category.',
|
|
20
|
+
message: 'Message',
|
|
21
|
+
images: 'Images',
|
|
22
|
+
attach: 'Attach',
|
|
23
|
+
choose: 'Choose a conversation or start a new one.',
|
|
24
|
+
back: 'Conversations',
|
|
25
|
+
backHint: 'All conversations',
|
|
26
|
+
send: 'Send',
|
|
27
|
+
create: 'Create',
|
|
28
|
+
close: 'Close',
|
|
29
|
+
closeHint: 'Close conversation',
|
|
30
|
+
closeQuestion:
|
|
31
|
+
'Close this conversation? You will no longer be able to reply here.',
|
|
32
|
+
delete: 'Delete',
|
|
33
|
+
deleteHint: 'Delete conversation',
|
|
34
|
+
deleteQuestion: 'Delete this conversation and its message?',
|
|
35
|
+
rating: 'Rate the support you received',
|
|
36
|
+
unrated: 'No rating',
|
|
37
|
+
rated: 'Your rating',
|
|
38
|
+
image: 'Attached image',
|
|
39
|
+
imageError: 'Could not load this image.',
|
|
40
|
+
removeImage: 'Remove image',
|
|
41
|
+
tooMany: 'Choose up to five images for one message.',
|
|
42
|
+
product: 'About an item in your order',
|
|
43
|
+
option: 'About an option in your order',
|
|
44
|
+
subscription: 'About your subscription',
|
|
45
|
+
common: 'Describe how we can help.',
|
|
46
|
+
unread: 'Unread messages',
|
|
47
|
+
sent: 'Sent',
|
|
48
|
+
order: 'View order',
|
|
49
|
+
refreshRequired: 'Refresh the conversation before sending another message.',
|
|
50
|
+
waitSupport: 'Wait for the support reply. You can add details after it.',
|
|
51
|
+
waitDelay:
|
|
52
|
+
'Wait for the support reply. You can send another message a few minutes after your previous one.',
|
|
53
|
+
draftLost: 'The message was saved. Refresh to see the conversation.',
|
|
54
|
+
typeCommon: 'General question',
|
|
55
|
+
typeOrder: 'Order item',
|
|
56
|
+
typeSeller: 'Seller question',
|
|
57
|
+
typeSubscription: 'Subscription',
|
|
58
|
+
refundCanceled: 'Return canceled',
|
|
59
|
+
refundCreated: 'Waiting to be sent back',
|
|
60
|
+
refundSent: 'Return sent',
|
|
61
|
+
refundReceived: 'Received by the store',
|
|
62
|
+
refundDone: 'Refund approved',
|
|
63
|
+
refundProblem: 'Refund refused',
|
|
64
|
+
refundHints: {
|
|
65
|
+
canceled: 'This return has been canceled, so no refund follows it.',
|
|
66
|
+
created: 'Send the items below back with the carrier of this return.',
|
|
67
|
+
sent: 'The return is on its way to the store.',
|
|
68
|
+
received: 'The store has received the return.',
|
|
69
|
+
done: 'The refund for the returned items has been approved.',
|
|
70
|
+
problem:
|
|
71
|
+
'The store refused the items it received back, so that money is not paid.',
|
|
72
|
+
},
|
|
73
|
+
refund: 'Return',
|
|
74
|
+
refundCarrier: 'Carrier',
|
|
75
|
+
refundTrack: 'Return tracking number',
|
|
76
|
+
refundAmount: 'Refund amount',
|
|
77
|
+
refundCarrierStatus: 'Carrier status',
|
|
78
|
+
refundItems: 'Items in this return',
|
|
79
|
+
subject: 'This conversation is about',
|
|
80
|
+
subscriptionSubject: 'This conversation is about the subscription',
|
|
81
|
+
itemUnknown: 'Item no longer available',
|
|
82
|
+
itemOption: 'Option',
|
|
83
|
+
itemQuantity: 'Quantity',
|
|
84
|
+
itemPrice: 'Paid',
|
|
85
|
+
itemPicture: 'Picture',
|
|
86
|
+
refundCounts: {
|
|
87
|
+
awaiting: 'To send back',
|
|
88
|
+
received: 'Received back',
|
|
89
|
+
approved: 'Approved for refund',
|
|
90
|
+
defect: 'Of them defective',
|
|
91
|
+
},
|
|
92
|
+
defect: 'Defect',
|
|
93
|
+
defectOptional: 'The item is defective',
|
|
94
|
+
defectOnly:
|
|
95
|
+
'The regular return period is over; a return is possible for a defect only.',
|
|
96
|
+
decision: 'Decision',
|
|
97
|
+
decisionPending: 'Under review',
|
|
98
|
+
decisionApproved: 'Approved',
|
|
99
|
+
decisionDeclined: 'Declined',
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const ru: typeof en = {
|
|
103
|
+
title: 'Поддержка',
|
|
104
|
+
new: 'Новое обращение',
|
|
105
|
+
newAction: 'Создать',
|
|
106
|
+
newHint: 'Создать обращение',
|
|
107
|
+
ticket: 'Обращение',
|
|
108
|
+
open: 'Открытые',
|
|
109
|
+
closed: 'Закрытые',
|
|
110
|
+
statusOpen: 'Открыто',
|
|
111
|
+
statusClosed: 'Закрыто',
|
|
112
|
+
empty: 'В этой категории нет обращений.',
|
|
113
|
+
message: 'Сообщение',
|
|
114
|
+
images: 'Изображения',
|
|
115
|
+
attach: 'Прикрепить',
|
|
116
|
+
choose: 'Выберите обращение или создайте новое.',
|
|
117
|
+
back: 'Обращения',
|
|
118
|
+
backHint: 'Все обращения',
|
|
119
|
+
send: 'Отправить',
|
|
120
|
+
create: 'Создать',
|
|
121
|
+
close: 'Закрыть',
|
|
122
|
+
closeHint: 'Закрыть обращение',
|
|
123
|
+
closeQuestion:
|
|
124
|
+
'Закрыть это обращение? Отправлять в него ответы больше не получится.',
|
|
125
|
+
delete: 'Удалить',
|
|
126
|
+
deleteHint: 'Удалить обращение',
|
|
127
|
+
deleteQuestion: 'Удалить это обращение и сообщение в нём?',
|
|
128
|
+
rating: 'Оцените помощь поддержки',
|
|
129
|
+
unrated: 'Без оценки',
|
|
130
|
+
rated: 'Ваша оценка',
|
|
131
|
+
image: 'Прикреплённое изображение',
|
|
132
|
+
imageError: 'Не удалось загрузить изображение.',
|
|
133
|
+
removeImage: 'Убрать изображение',
|
|
134
|
+
tooMany: 'К одному сообщению можно прикрепить до пяти изображений.',
|
|
135
|
+
product: 'По товару из заказа',
|
|
136
|
+
option: 'По дополнению к товару из заказа',
|
|
137
|
+
subscription: 'По вашей подписке',
|
|
138
|
+
common: 'Опишите, какая помощь нужна.',
|
|
139
|
+
unread: 'Непрочитанные сообщения',
|
|
140
|
+
sent: 'Отправлено',
|
|
141
|
+
order: 'Посмотреть заказ',
|
|
142
|
+
refreshRequired: 'Обновите обращение перед отправкой следующего сообщения.',
|
|
143
|
+
waitSupport: 'Дождитесь ответа поддержки. Дополнить обращение можно будет после него.',
|
|
144
|
+
waitDelay:
|
|
145
|
+
'Дождитесь ответа поддержки. Следующее сообщение можно отправить через несколько минут после предыдущего.',
|
|
146
|
+
draftLost: 'Сообщение сохранено. Обновите переписку, чтобы увидеть его.',
|
|
147
|
+
typeCommon: 'Общий вопрос',
|
|
148
|
+
typeOrder: 'Товар из заказа',
|
|
149
|
+
typeSeller: 'Вопрос продавца',
|
|
150
|
+
typeSubscription: 'Подписка',
|
|
151
|
+
refundCanceled: 'Возврат отменён',
|
|
152
|
+
refundCreated: 'Ожидает отправки обратно',
|
|
153
|
+
refundSent: 'Возврат отправлен',
|
|
154
|
+
refundReceived: 'Получен магазином',
|
|
155
|
+
refundDone: 'Выплата возврата одобрена',
|
|
156
|
+
refundProblem: 'В возврате отказано',
|
|
157
|
+
refundHints: {
|
|
158
|
+
canceled: 'Этот возврат отменён, выплаты по нему не будет.',
|
|
159
|
+
created: 'Отправьте товары ниже обратно перевозчиком этого возврата.',
|
|
160
|
+
sent: 'Возврат в пути в магазин.',
|
|
161
|
+
received: 'Магазин получил возврат.',
|
|
162
|
+
done: 'Выплата за возвращённые товары одобрена.',
|
|
163
|
+
problem:
|
|
164
|
+
'Магазин отказал в возврате полученных товаров, эти деньги не будут выплачены.',
|
|
165
|
+
},
|
|
166
|
+
refund: 'Возврат',
|
|
167
|
+
refundCarrier: 'Перевозчик',
|
|
168
|
+
refundTrack: 'Трек-номер возврата',
|
|
169
|
+
refundAmount: 'Сумма возврата',
|
|
170
|
+
refundCarrierStatus: 'Статус перевозчика',
|
|
171
|
+
refundItems: 'Товары в этом возврате',
|
|
172
|
+
subject: 'Обращение по этому товару',
|
|
173
|
+
subscriptionSubject: 'Обращение по этой подписке',
|
|
174
|
+
itemUnknown: 'Товар больше не доступен',
|
|
175
|
+
itemOption: 'Дополнение',
|
|
176
|
+
itemQuantity: 'Количество',
|
|
177
|
+
itemPrice: 'Оплачено',
|
|
178
|
+
itemPicture: 'Фото',
|
|
179
|
+
refundCounts: {
|
|
180
|
+
awaiting: 'К отправке обратно',
|
|
181
|
+
received: 'Получено обратно',
|
|
182
|
+
approved: 'Одобрено к возврату',
|
|
183
|
+
defect: 'Из них с браком',
|
|
184
|
+
},
|
|
185
|
+
defect: 'Брак',
|
|
186
|
+
defectOptional: 'Товар с браком',
|
|
187
|
+
defectOnly:
|
|
188
|
+
'Срок обычного возврата истёк; возврат возможен только по браку.',
|
|
189
|
+
decision: 'Решение',
|
|
190
|
+
decisionPending: 'На рассмотрении',
|
|
191
|
+
decisionApproved: 'Одобрено',
|
|
192
|
+
decisionDeclined: 'Отклонено',
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
export type TicketStatusIcon = 'lock' | 'unlock';
|
|
196
|
+
|
|
197
|
+
export interface TicketStatusView {
|
|
198
|
+
icon?: TicketStatusIcon;
|
|
199
|
+
text: string;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function ticketLabels(locale: string) {
|
|
203
|
+
return locale.toLowerCase().startsWith('ru') ? ru : en;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// The backend status text is not translated, so known statuses use the
|
|
207
|
+
// storefront labels; an unknown value keeps the returned text without an icon.
|
|
208
|
+
export function ticketStatusView(
|
|
209
|
+
status: { int: number; text: string },
|
|
210
|
+
labels: typeof en,
|
|
211
|
+
): TicketStatusView {
|
|
212
|
+
if (status.int === ECustomerTicketStatus.OPEN) {
|
|
213
|
+
return { icon: 'unlock', text: labels.statusOpen };
|
|
214
|
+
}
|
|
215
|
+
if (status.int === ECustomerTicketStatus.CLOSED) {
|
|
216
|
+
return { icon: 'lock', text: labels.statusClosed };
|
|
217
|
+
}
|
|
218
|
+
return { text: status.text };
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function ticketTypeText(
|
|
222
|
+
type: { int: number; text: string },
|
|
223
|
+
labels: typeof en,
|
|
224
|
+
) {
|
|
225
|
+
const known = {
|
|
226
|
+
[ECustomerTicketType.COMMON]: labels.typeCommon,
|
|
227
|
+
[ECustomerTicketType.ORDER]: labels.typeOrder,
|
|
228
|
+
[ECustomerTicketType.SELLER]: labels.typeSeller,
|
|
229
|
+
[ECustomerTicketType.SUBSCRIPTION]: labels.typeSubscription,
|
|
230
|
+
} as Record<number, string>;
|
|
231
|
+
|
|
232
|
+
return known[type.int] ?? type.text;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function refundShipmentText(
|
|
236
|
+
status: { int: number; text: string },
|
|
237
|
+
labels: typeof en,
|
|
238
|
+
) {
|
|
239
|
+
const known = {
|
|
240
|
+
[EOrderRefundShipmentStatus.CANCELED]: labels.refundCanceled,
|
|
241
|
+
[EOrderRefundShipmentStatus.CREATED]: labels.refundCreated,
|
|
242
|
+
[EOrderRefundShipmentStatus.SENT]: labels.refundSent,
|
|
243
|
+
[EOrderRefundShipmentStatus.RECIEVED]: labels.refundReceived,
|
|
244
|
+
[EOrderRefundShipmentStatus.DONE]: labels.refundDone,
|
|
245
|
+
[EOrderRefundShipmentStatus.PROBLEM]: labels.refundProblem,
|
|
246
|
+
} as Record<number, string>;
|
|
247
|
+
|
|
248
|
+
return known[status.int] ?? status.text;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export type RefundShipmentTone = 'neutral' | 'progress' | 'success' | 'danger';
|
|
252
|
+
|
|
253
|
+
export interface RefundShipmentView {
|
|
254
|
+
text: string;
|
|
255
|
+
hint: string;
|
|
256
|
+
tone: RefundShipmentTone;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// The state of the return shipment decides what the customer does next, so the
|
|
260
|
+
// short hint belongs beside it.
|
|
261
|
+
export function refundShipmentView(
|
|
262
|
+
status: { int: number; text: string },
|
|
263
|
+
labels: typeof en,
|
|
264
|
+
): RefundShipmentView {
|
|
265
|
+
const views = {
|
|
266
|
+
[EOrderRefundShipmentStatus.CANCELED]: {
|
|
267
|
+
hint: labels.refundHints.canceled,
|
|
268
|
+
tone: 'danger',
|
|
269
|
+
},
|
|
270
|
+
[EOrderRefundShipmentStatus.CREATED]: {
|
|
271
|
+
hint: labels.refundHints.created,
|
|
272
|
+
tone: 'progress',
|
|
273
|
+
},
|
|
274
|
+
[EOrderRefundShipmentStatus.SENT]: {
|
|
275
|
+
hint: labels.refundHints.sent,
|
|
276
|
+
tone: 'progress',
|
|
277
|
+
},
|
|
278
|
+
[EOrderRefundShipmentStatus.RECIEVED]: {
|
|
279
|
+
hint: labels.refundHints.received,
|
|
280
|
+
tone: 'progress',
|
|
281
|
+
},
|
|
282
|
+
[EOrderRefundShipmentStatus.DONE]: {
|
|
283
|
+
hint: labels.refundHints.done,
|
|
284
|
+
tone: 'success',
|
|
285
|
+
},
|
|
286
|
+
[EOrderRefundShipmentStatus.PROBLEM]: {
|
|
287
|
+
hint: labels.refundHints.problem,
|
|
288
|
+
tone: 'danger',
|
|
289
|
+
},
|
|
290
|
+
} as Record<number, { hint: string; tone: RefundShipmentTone }>;
|
|
291
|
+
const view = views[status.int];
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
text: refundShipmentText(status, labels),
|
|
295
|
+
hint: view?.hint ?? '',
|
|
296
|
+
tone: view?.tone ?? 'neutral',
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export function ticketSolutionText(
|
|
301
|
+
solution: { int: number; text: string },
|
|
302
|
+
labels: typeof en,
|
|
303
|
+
) {
|
|
304
|
+
const known = {
|
|
305
|
+
[ECustomerTicketSolution.SOLUTION_NO_DECISION]: labels.decisionPending,
|
|
306
|
+
[ECustomerTicketSolution.SOLUTION_APROOVED]: labels.decisionApproved,
|
|
307
|
+
[ECustomerTicketSolution.SOLUTION_DENIED]: labels.decisionDeclined,
|
|
308
|
+
} as Record<number, string>;
|
|
309
|
+
|
|
310
|
+
return known[solution.int] ?? solution.text;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export function ticketSolutionTone(solution: { int: number }) {
|
|
314
|
+
if (solution.int === ECustomerTicketSolution.SOLUTION_APROOVED) {
|
|
315
|
+
return 'success';
|
|
316
|
+
}
|
|
317
|
+
if (solution.int === ECustomerTicketSolution.SOLUTION_DENIED) {
|
|
318
|
+
return 'danger';
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return 'neutral';
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// The hint shown instead of the message form while the backend would reject
|
|
325
|
+
// a new customer message (`reply_wait` of the ticket); empty when allowed.
|
|
326
|
+
export function ticketReplyWaitText(
|
|
327
|
+
wait: ICustomerTicketReplyWait | null | undefined,
|
|
328
|
+
labels: typeof en,
|
|
329
|
+
) {
|
|
330
|
+
if (!wait) {
|
|
331
|
+
return '';
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return wait.reason === 'delay' ? labels.waitDelay : labels.waitSupport;
|
|
335
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ECustomerTicketStatus } from '@/interfaces/orionplace/tickets/ICustomerTicketApi';
|
|
2
|
+
|
|
3
|
+
// Where the support page is: the list tab, the list page and the open
|
|
4
|
+
// conversation. The page keeps it in the URL as `?status&page&ticket`, so a
|
|
5
|
+
// reload and the browser's Back button return to the same place.
|
|
6
|
+
export interface TicketLocation {
|
|
7
|
+
status: ECustomerTicketStatus;
|
|
8
|
+
page: number;
|
|
9
|
+
ticket?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type QueryValue = string | null | undefined | readonly (string | null)[];
|
|
13
|
+
|
|
14
|
+
const locationKeys = ['status', 'page', 'ticket'];
|
|
15
|
+
// A new conversation about an order item, option or subscription.
|
|
16
|
+
const subjectKeys = ['item', 'option', 'subscription', 'order'];
|
|
17
|
+
|
|
18
|
+
function first(value: QueryValue) {
|
|
19
|
+
return Array.isArray(value) ? value[0] : (value as string | null | undefined);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function positiveQueryId(value: QueryValue) {
|
|
23
|
+
const id = Number(first(value));
|
|
24
|
+
|
|
25
|
+
return Number.isSafeInteger(id) && id > 0 ? id : undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// `status` is `ECustomerTicketStatus`; any other value means Open.
|
|
29
|
+
export function ticketLocationFromQuery(
|
|
30
|
+
query: Record<string, QueryValue>,
|
|
31
|
+
): TicketLocation {
|
|
32
|
+
const closed = first(query.status) === String(ECustomerTicketStatus.CLOSED);
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
status: closed ? ECustomerTicketStatus.CLOSED : ECustomerTicketStatus.OPEN,
|
|
36
|
+
page: positiveQueryId(query.page) ?? 1,
|
|
37
|
+
ticket: positiveQueryId(query.ticket),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function sameTicketLocation(left: TicketLocation, right: TicketLocation) {
|
|
42
|
+
return (
|
|
43
|
+
left.status === right.status &&
|
|
44
|
+
left.page === right.page &&
|
|
45
|
+
left.ticket === right.ticket
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// The query of `next`: other parameters such as `locale` stay, defaults are
|
|
50
|
+
// left out, and an open conversation drops the new-conversation subject.
|
|
51
|
+
export function ticketLocationQuery(
|
|
52
|
+
query: Record<string, QueryValue>,
|
|
53
|
+
next: TicketLocation,
|
|
54
|
+
) {
|
|
55
|
+
const result: Record<string, string> = {};
|
|
56
|
+
|
|
57
|
+
for (const [key, value] of Object.entries(query)) {
|
|
58
|
+
const text = first(value);
|
|
59
|
+
if (typeof text === 'string' && !locationKeys.includes(key)) {
|
|
60
|
+
result[key] = text;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (next.ticket) {
|
|
64
|
+
for (const key of subjectKeys) {
|
|
65
|
+
delete result[key];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (next.status !== ECustomerTicketStatus.OPEN) {
|
|
69
|
+
result.status = String(next.status);
|
|
70
|
+
}
|
|
71
|
+
if (next.page > 1) {
|
|
72
|
+
result.page = String(next.page);
|
|
73
|
+
}
|
|
74
|
+
if (next.ticket) {
|
|
75
|
+
result.ticket = String(next.ticket);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export type TicketSubjectKind = 'item' | 'option' | 'subscription';
|
|
2
|
+
|
|
3
|
+
export interface TicketSubjectContext {
|
|
4
|
+
kind: TicketSubjectKind;
|
|
5
|
+
id: number;
|
|
6
|
+
orderId?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type TicketSubmitEndpoint =
|
|
10
|
+
| 'customer_tickets_add'
|
|
11
|
+
| 'customer_tickets_reply'
|
|
12
|
+
| 'customer_tickets_order_item_add'
|
|
13
|
+
| 'customer_tickets_order_option_add'
|
|
14
|
+
| 'customer_tickets_subscription_add';
|
|
15
|
+
|
|
16
|
+
export interface TicketSubmitTarget {
|
|
17
|
+
endpoint: TicketSubmitEndpoint;
|
|
18
|
+
data: Record<string, string | number | boolean>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// A return request is marked as a defect only when it is one; the backend
|
|
22
|
+
// reads a missing mark as an ordinary return.
|
|
23
|
+
export function ticketSubmitTarget(
|
|
24
|
+
text: string,
|
|
25
|
+
ticketId?: number,
|
|
26
|
+
context?: TicketSubjectContext,
|
|
27
|
+
isDefect = false,
|
|
28
|
+
): TicketSubmitTarget {
|
|
29
|
+
const data: Record<string, string | number | boolean> = {
|
|
30
|
+
ticket_body: text,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
if (ticketId !== undefined) {
|
|
34
|
+
return {
|
|
35
|
+
endpoint: 'customer_tickets_reply',
|
|
36
|
+
data: { ...data, ticket: ticketId },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (!context) {
|
|
40
|
+
return { endpoint: 'customer_tickets_add', data };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const targets = {
|
|
44
|
+
item: ['customer_tickets_order_item_add', 'order_dlf_item'],
|
|
45
|
+
option: ['customer_tickets_order_option_add', 'order_option_item'],
|
|
46
|
+
subscription: [
|
|
47
|
+
'customer_tickets_subscription_add',
|
|
48
|
+
'related_paid_subscription',
|
|
49
|
+
],
|
|
50
|
+
} as const;
|
|
51
|
+
const [endpoint, field] = targets[context.kind];
|
|
52
|
+
|
|
53
|
+
data[field] = context.id;
|
|
54
|
+
if (isDefect && context.kind !== 'subscription') {
|
|
55
|
+
data.is_defect = true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { endpoint, data };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function ticketFormData(target: TicketSubmitTarget, files: File[]) {
|
|
62
|
+
const body = new FormData();
|
|
63
|
+
|
|
64
|
+
body.append('data', JSON.stringify(target.data));
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
body.append('ticket_images', file, file.name);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return body;
|
|
70
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
IInvoice,
|
|
3
|
+
IInvoiceDirection,
|
|
4
|
+
} from '@/interfaces/orionplace/payments/IInvoice';
|
|
5
|
+
|
|
6
|
+
export type WalletRelationKind = 'order' | 'subscription';
|
|
7
|
+
|
|
8
|
+
export interface IWalletRelation {
|
|
9
|
+
kind: WalletRelationKind;
|
|
10
|
+
id: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type WalletPurpose =
|
|
14
|
+
| 'topUp'
|
|
15
|
+
| 'deduction'
|
|
16
|
+
| 'orderPayment'
|
|
17
|
+
| 'subscriptionPayment'
|
|
18
|
+
| 'bonus'
|
|
19
|
+
| 'refund';
|
|
20
|
+
|
|
21
|
+
const BONUS_SOURCES = ['promocode_benefit', 'domain_benefit'];
|
|
22
|
+
|
|
23
|
+
function recordId(value: IInvoiceDirection['parent_related_id']) {
|
|
24
|
+
return typeof value === 'number' && value > 0 ? value : null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function walletRelation(invoice: IInvoice): IWalletRelation | null {
|
|
28
|
+
const direction = invoice.transaction_direction;
|
|
29
|
+
const related =
|
|
30
|
+
recordId(invoice.order_id) ??
|
|
31
|
+
recordId(direction?.related_id) ??
|
|
32
|
+
recordId(direction?.parent_related_id);
|
|
33
|
+
|
|
34
|
+
if (!related) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (invoice.transaction_type === 'order') {
|
|
38
|
+
return { kind: 'order', id: related };
|
|
39
|
+
}
|
|
40
|
+
if (invoice.transaction_type === 'paid_sub') {
|
|
41
|
+
return { kind: 'subscription', id: related };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function walletComment(invoice: IInvoice): string | null {
|
|
48
|
+
const written =
|
|
49
|
+
typeof invoice.comment === 'string' ? invoice.comment.trim() : '';
|
|
50
|
+
|
|
51
|
+
if (!written) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const relation = walletRelation(invoice);
|
|
56
|
+
if (!relation) {
|
|
57
|
+
return written;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const printed = [invoice.id, relation.id];
|
|
61
|
+
const numbers = written.match(/\d+/g) ?? [];
|
|
62
|
+
const repeats =
|
|
63
|
+
numbers.length > 0 &&
|
|
64
|
+
numbers.every((number) => printed.includes(Number(number)));
|
|
65
|
+
|
|
66
|
+
return repeats ? null : written;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function walletPurpose(invoice: IInvoice): WalletPurpose | null {
|
|
70
|
+
const direction = invoice.transaction_direction;
|
|
71
|
+
|
|
72
|
+
if (!direction) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (direction.parent_type) {
|
|
76
|
+
return 'refund';
|
|
77
|
+
}
|
|
78
|
+
if (direction.to === 'order') {
|
|
79
|
+
return 'orderPayment';
|
|
80
|
+
}
|
|
81
|
+
if (direction.to === 'paid_sub') {
|
|
82
|
+
return 'subscriptionPayment';
|
|
83
|
+
}
|
|
84
|
+
if (direction.to === 'deduct') {
|
|
85
|
+
return 'deduction';
|
|
86
|
+
}
|
|
87
|
+
if (direction.to === 'wallet') {
|
|
88
|
+
return BONUS_SOURCES.includes(direction.from) ? 'bonus' : 'topUp';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* A payment the customer made, or a deduction: the history shows it as money
|
|
96
|
+
* going out (−$38.22) in the text colour, while top-ups, bonuses and refunds
|
|
97
|
+
* read green.
|
|
98
|
+
*/
|
|
99
|
+
export function walletOutgoing(purpose: WalletPurpose | null): boolean {
|
|
100
|
+
return (
|
|
101
|
+
purpose === 'orderPayment' ||
|
|
102
|
+
purpose === 'subscriptionPayment' ||
|
|
103
|
+
purpose === 'deduction'
|
|
104
|
+
);
|
|
105
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# React component source archive
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
The archive contains the selected component, its local imports, CSS modules,
|
|
6
|
+
shared theme and physical interfaces. Paths are relative to the React storefront
|
|
7
|
+
project root. Keep the `@/` alias pointing to that root and preserve the directory
|
|
8
|
+
structure when copying files.
|
|
9
|
+
|
|
10
|
+
Use the archive inside an application initialized with `orionplace-react`. Its
|
|
11
|
+
maintained package manifest supplies React, Next.js, Zustand and any imported
|
|
12
|
+
third-party libraries. Components use the installed `OrionplaceProvider` and,
|
|
13
|
+
where imported, `OrionplaceStorefrontProvider`. Initialize these providers from
|
|
14
|
+
Application Load in the host application; callbacks and data props remain the
|
|
15
|
+
application's responsibility. The selected component's README describes its
|
|
16
|
+
specific request handlers and data requirements.
|
|
17
|
+
|
|
18
|
+
`OrionplaceStorefrontProvider` runs the product card actions (cart, wishlist,
|
|
19
|
+
stock alerts, preorders). When a guest clicks an action that needs an account,
|
|
20
|
+
it opens the `/profile` sign-in page; pass `onSignIn={(location) => ...}` to
|
|
21
|
+
open your own sign-in dialog instead. `location` holds the sign-in `path` and
|
|
22
|
+
its `query`, including the `redirect` back to the current page.
|
|
23
|
+
|
|
24
|
+
The provider also shows the preorder dialog over the page. With
|
|
25
|
+
`preorderDialog={false}` it leaves the dialog to your page: render
|
|
26
|
+
`ProductPreorderDialog` yourself (for example inline with `modal={false}`) from
|
|
27
|
+
`preorder` (the product whose dialog is open), `preorderError` (its last
|
|
28
|
+
refusal, for the dialog's `error`), `submitPreorder(selection)` and
|
|
29
|
+
`closePreorder()` of `useOrionplaceStorefront()`; the card's preorder button
|
|
30
|
+
still opens it through `onPreorder`.
|
|
31
|
+
|
|
32
|
+
Import `app/globals.css` from the root layout. Component CSS modules and the
|
|
33
|
+
shared theme are included with their original imports. This archive contains
|
|
34
|
+
component source, not a separate application or backend configuration.
|
|
35
|
+
|
|
36
|
+
## Русский
|
|
37
|
+
|
|
38
|
+
Архив содержит выбранный компонент, его локальные зависимости, CSS-модули,
|
|
39
|
+
общую тему и физические интерфейсы. Пути указаны относительно корня проекта
|
|
40
|
+
React-магазина. Сохраните структуру каталогов и настройте `@/` на корень проекта.
|
|
41
|
+
|
|
42
|
+
Используйте архив в приложении, созданном через `orionplace-react`. Его
|
|
43
|
+
поддерживаемый список зависимостей включает React, Next.js, Zustand и необходимые
|
|
44
|
+
сторонние библиотеки. Компоненты используют установленный `OrionplaceProvider`
|
|
45
|
+
и, где он импортируется, `OrionplaceStorefrontProvider`. Приложение инициализирует
|
|
46
|
+
провайдеры данными Application Load и передаёт входящие данные и обработчики.
|
|
47
|
+
README выбранного компонента описывает нужные ему запросы и данные.
|
|
48
|
+
|
|
49
|
+
`OrionplaceStorefrontProvider` выполняет действия карточки товара (корзина,
|
|
50
|
+
избранное, уведомления о поступлении, предзаказ). Когда гость нажимает действие,
|
|
51
|
+
для которого нужен аккаунт, провайдер открывает страницу входа `/profile`;
|
|
52
|
+
передайте `onSignIn={(location) => ...}`, чтобы вместо неё открыть свой диалог
|
|
53
|
+
входа. В `location` есть путь страницы входа `path` и её параметры `query`,
|
|
54
|
+
включая `redirect` для возврата на текущую страницу.
|
|
55
|
+
|
|
56
|
+
Провайдер также показывает окно предзаказа поверх страницы. С
|
|
57
|
+
`preorderDialog={false}` он оставляет окно вашей странице: отрисуйте
|
|
58
|
+
`ProductPreorderDialog` сами (например, встроенным с `modal={false}`) по
|
|
59
|
+
`preorder` (товар, для которого открыто окно), `preorderError` (последний отказ
|
|
60
|
+
для `error` окна), `submitPreorder(selection)` и `closePreorder()` из
|
|
61
|
+
`useOrionplaceStorefront()`; кнопка предзаказа на карточке по-прежнему
|
|
62
|
+
открывает его через `onPreorder`.
|
|
63
|
+
|
|
64
|
+
Подключите `app/globals.css` в корневом макете. CSS-модули и общая тема включены
|
|
65
|
+
с исходными импортами. Архив содержит исходники компонента; конфигурация
|
|
66
|
+
подключения к API остаётся в приложении.
|