hey-pharmacist-ecommerce 1.0.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 +269 -0
- package/dist/index.d.mts +564 -0
- package/dist/index.d.ts +564 -0
- package/dist/index.js +7541 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +7485 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +70 -0
- package/src/components/CartItem.tsx +103 -0
- package/src/components/EmptyState.tsx +27 -0
- package/src/components/Footer.tsx +147 -0
- package/src/components/Header.tsx +151 -0
- package/src/components/OrderCard.tsx +98 -0
- package/src/components/ProductCard.tsx +122 -0
- package/src/components/ui/Badge.tsx +31 -0
- package/src/components/ui/Button.tsx +61 -0
- package/src/components/ui/Input.tsx +45 -0
- package/src/components/ui/Modal.tsx +79 -0
- package/src/components/ui/Skeleton.tsx +46 -0
- package/src/hooks/useOrders.ts +98 -0
- package/src/hooks/useProducts.ts +125 -0
- package/src/index.ts +71 -0
- package/src/lib/Apis/api.ts +46 -0
- package/src/lib/Apis/apis/addresses-api.ts +1461 -0
- package/src/lib/Apis/apis/auth-api.ts +945 -0
- package/src/lib/Apis/apis/blogs-api.ts +582 -0
- package/src/lib/Apis/apis/cart-api.ts +456 -0
- package/src/lib/Apis/apis/categories-api.ts +725 -0
- package/src/lib/Apis/apis/chats-api.ts +1101 -0
- package/src/lib/Apis/apis/contact-us-api.ts +394 -0
- package/src/lib/Apis/apis/discounts-api.ts +763 -0
- package/src/lib/Apis/apis/drafts-api.ts +448 -0
- package/src/lib/Apis/apis/events-api.ts +1311 -0
- package/src/lib/Apis/apis/file-proccesor-api.ts +293 -0
- package/src/lib/Apis/apis/health-api.ts +119 -0
- package/src/lib/Apis/apis/images-api.ts +271 -0
- package/src/lib/Apis/apis/inventory-api.ts +375 -0
- package/src/lib/Apis/apis/marketing-api.ts +3099 -0
- package/src/lib/Apis/apis/notifications-api.ts +843 -0
- package/src/lib/Apis/apis/open-aiapi.ts +513 -0
- package/src/lib/Apis/apis/orders-api.ts +1343 -0
- package/src/lib/Apis/apis/payment-methods-api.ts +411 -0
- package/src/lib/Apis/apis/payments-api.ts +469 -0
- package/src/lib/Apis/apis/product-attributes-api.ts +538 -0
- package/src/lib/Apis/apis/product-favorite-list-api.ts +321 -0
- package/src/lib/Apis/apis/product-variants-api.ts +648 -0
- package/src/lib/Apis/apis/products-api.ts +1442 -0
- package/src/lib/Apis/apis/review-api.ts +1383 -0
- package/src/lib/Apis/apis/roles-api.ts +614 -0
- package/src/lib/Apis/apis/shipping-api.ts +703 -0
- package/src/lib/Apis/apis/statistics-api.ts +234 -0
- package/src/lib/Apis/apis/stores-api.ts +1519 -0
- package/src/lib/Apis/apis/sub-categories-api.ts +1208 -0
- package/src/lib/Apis/apis/user-groups-api.ts +1198 -0
- package/src/lib/Apis/apis/users-api.ts +1403 -0
- package/src/lib/Apis/apis/web-hooks-api.ts +198 -0
- package/src/lib/Apis/base.ts +70 -0
- package/src/lib/Apis/configuration.ts +75 -0
- package/src/lib/Apis/index.ts +17 -0
- package/src/lib/Apis/models/add-contact-to-list-dto.ts +33 -0
- package/src/lib/Apis/models/add-message-dto.ts +56 -0
- package/src/lib/Apis/models/address-created-request.ts +134 -0
- package/src/lib/Apis/models/address.ts +164 -0
- package/src/lib/Apis/models/allow-user-credit-dto.ts +27 -0
- package/src/lib/Apis/models/appointment.ts +75 -0
- package/src/lib/Apis/models/available-dates-dto.ts +33 -0
- package/src/lib/Apis/models/available-suggested-dates-dto.ts +33 -0
- package/src/lib/Apis/models/blog.ts +75 -0
- package/src/lib/Apis/models/browser-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/bulk-move-subcategories-dto.ts +33 -0
- package/src/lib/Apis/models/bulk-unassign-subcategories-dto.ts +27 -0
- package/src/lib/Apis/models/campaign-content-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-dto.ts +175 -0
- package/src/lib/Apis/models/campaign-draft-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-schedule-dto.ts +49 -0
- package/src/lib/Apis/models/campaign-draft-schedule-response-dto.ts +40 -0
- package/src/lib/Apis/models/campaign-draft-sending-dto.ts +43 -0
- package/src/lib/Apis/models/campaign-draft-sending-response-dto.ts +40 -0
- package/src/lib/Apis/models/cart-body-dto.ts +40 -0
- package/src/lib/Apis/models/cart-body-populated.ts +47 -0
- package/src/lib/Apis/models/cart-item-populated.ts +41 -0
- package/src/lib/Apis/models/cart-item.ts +33 -0
- package/src/lib/Apis/models/cart-response-dto.ts +70 -0
- package/src/lib/Apis/models/categories-paginated-response-dto.ts +52 -0
- package/src/lib/Apis/models/category-filters.ts +40 -0
- package/src/lib/Apis/models/category-populated.ts +106 -0
- package/src/lib/Apis/models/category-sub-category-populated.ts +51 -0
- package/src/lib/Apis/models/category.ts +99 -0
- package/src/lib/Apis/models/categorys-headlines-response-dto.ts +40 -0
- package/src/lib/Apis/models/change-user-email-dto.ts +27 -0
- package/src/lib/Apis/models/chat.ts +33 -0
- package/src/lib/Apis/models/check-notifications-response-dto.ts +33 -0
- package/src/lib/Apis/models/contact-aggregated-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-full-dto.ts +93 -0
- package/src/lib/Apis/models/contact-full-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-list-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-lists-response-dto.ts +40 -0
- package/src/lib/Apis/models/contact-us.ts +81 -0
- package/src/lib/Apis/models/country-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/create-address-dto.ts +134 -0
- package/src/lib/Apis/models/create-blog-dto.ts +45 -0
- package/src/lib/Apis/models/create-category-dto.ts +45 -0
- package/src/lib/Apis/models/create-chat-dto.ts +39 -0
- package/src/lib/Apis/models/create-contact-dto.ts +39 -0
- package/src/lib/Apis/models/create-contact-list-dto.ts +27 -0
- package/src/lib/Apis/models/create-discount-dto.ts +208 -0
- package/src/lib/Apis/models/create-draft-dto.ts +67 -0
- package/src/lib/Apis/models/create-email-template-dto.ts +51 -0
- package/src/lib/Apis/models/create-event-dto.ts +52 -0
- package/src/lib/Apis/models/create-marketing-campaign-dto.ts +81 -0
- package/src/lib/Apis/models/create-message-dto.ts +57 -0
- package/src/lib/Apis/models/create-notification-dto.ts +75 -0
- package/src/lib/Apis/models/create-product-attribute-dto.ts +33 -0
- package/src/lib/Apis/models/create-product-dto.ts +94 -0
- package/src/lib/Apis/models/create-review-dto.ts +63 -0
- package/src/lib/Apis/models/create-role-dto.ts +57 -0
- package/src/lib/Apis/models/create-single-variant-product-dto.ts +155 -0
- package/src/lib/Apis/models/create-store-address-dto.ts +134 -0
- package/src/lib/Apis/models/create-store-dto.ts +105 -0
- package/src/lib/Apis/models/create-sub-category-dto.ts +45 -0
- package/src/lib/Apis/models/create-user-dto.ts +89 -0
- package/src/lib/Apis/models/create-user-group-dto.ts +39 -0
- package/src/lib/Apis/models/create-variant-dto.ts +119 -0
- package/src/lib/Apis/models/create-zone-dto.ts +82 -0
- package/src/lib/Apis/models/custom-product-dto.ts +63 -0
- package/src/lib/Apis/models/default-payment-method-request-dto.ts +27 -0
- package/src/lib/Apis/models/delete-file-dto.ts +27 -0
- package/src/lib/Apis/models/delete-many-files-dto.ts +27 -0
- package/src/lib/Apis/models/discount-paginated-response.ts +52 -0
- package/src/lib/Apis/models/discount.ts +245 -0
- package/src/lib/Apis/models/discounts-insights-dto.ts +57 -0
- package/src/lib/Apis/models/draft.ts +79 -0
- package/src/lib/Apis/models/email-invoice-dto.ts +45 -0
- package/src/lib/Apis/models/email-template-response-dto.ts +117 -0
- package/src/lib/Apis/models/event.ts +76 -0
- package/src/lib/Apis/models/extended-product-dto.ts +204 -0
- package/src/lib/Apis/models/fileproccesor-upload-body.ts +27 -0
- package/src/lib/Apis/models/forget-password.ts +27 -0
- package/src/lib/Apis/models/frequently-bought-product-dto.ts +71 -0
- package/src/lib/Apis/models/general-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/generate-day-slots-dto.ts +51 -0
- package/src/lib/Apis/models/generate-month-slots-dto.ts +57 -0
- package/src/lib/Apis/models/generate-week-slots-dto.ts +57 -0
- package/src/lib/Apis/models/google-analytics-request-dto.ts +55 -0
- package/src/lib/Apis/models/google-analytics-response-dto.ts +39 -0
- package/src/lib/Apis/models/group-with-no-users-dto.ts +75 -0
- package/src/lib/Apis/models/group-with-users-dto.ts +76 -0
- package/src/lib/Apis/models/images-upload-body.ts +27 -0
- package/src/lib/Apis/models/index.ts +197 -0
- package/src/lib/Apis/models/inventory-paginated-response.ts +75 -0
- package/src/lib/Apis/models/link-stats-response-dto.ts +40 -0
- package/src/lib/Apis/models/login-dto.ts +33 -0
- package/src/lib/Apis/models/manual-discount.ts +49 -0
- package/src/lib/Apis/models/manual-order-dto.ts +133 -0
- package/src/lib/Apis/models/manual-shipping-dto.ts +45 -0
- package/src/lib/Apis/models/marketing-campaign-content-dto.ts +27 -0
- package/src/lib/Apis/models/marketing-list-contact-dto.ts +51 -0
- package/src/lib/Apis/models/move-subcategory-dto.ts +27 -0
- package/src/lib/Apis/models/my-favorite-list-dto.ts +52 -0
- package/src/lib/Apis/models/notification.ts +93 -0
- package/src/lib/Apis/models/object-id.ts +21 -0
- package/src/lib/Apis/models/open-api.ts +33 -0
- package/src/lib/Apis/models/order-paginated-response.ts +52 -0
- package/src/lib/Apis/models/order.ts +214 -0
- package/src/lib/Apis/models/orders-insights-dto.ts +69 -0
- package/src/lib/Apis/models/paginated-products-dto.ts +52 -0
- package/src/lib/Apis/models/payment-method-data.ts +34 -0
- package/src/lib/Apis/models/payment-method.ts +51 -0
- package/src/lib/Apis/models/payment-time-line-dto.ts +56 -0
- package/src/lib/Apis/models/payment.ts +182 -0
- package/src/lib/Apis/models/payments-insights-dto.ts +69 -0
- package/src/lib/Apis/models/payments-paginated-response.ts +52 -0
- package/src/lib/Apis/models/pick-type-class.ts +51 -0
- package/src/lib/Apis/models/populated-chat-dto.ts +95 -0
- package/src/lib/Apis/models/populated-discount.ts +246 -0
- package/src/lib/Apis/models/populated-order.ts +209 -0
- package/src/lib/Apis/models/prefered-pick-or-delivery-time-dto.ts +33 -0
- package/src/lib/Apis/models/price-range.ts +33 -0
- package/src/lib/Apis/models/product-attribute.ts +57 -0
- package/src/lib/Apis/models/product-variant.ts +167 -0
- package/src/lib/Apis/models/product.ts +136 -0
- package/src/lib/Apis/models/products-insights-dto.ts +45 -0
- package/src/lib/Apis/models/rate-dto.ts +123 -0
- package/src/lib/Apis/models/refill-request-dto.ts +75 -0
- package/src/lib/Apis/models/refill-request.ts +105 -0
- package/src/lib/Apis/models/register-or-login-with-gmail.ts +27 -0
- package/src/lib/Apis/models/reserve-appointment.ts +261 -0
- package/src/lib/Apis/models/review.ts +93 -0
- package/src/lib/Apis/models/role.ts +69 -0
- package/src/lib/Apis/models/schedule-campaign-draft-dto.ts +27 -0
- package/src/lib/Apis/models/send-test-email-dto.ts +28 -0
- package/src/lib/Apis/models/shallow-parent-category-dto.ts +33 -0
- package/src/lib/Apis/models/shipment-details-dto.ts +88 -0
- package/src/lib/Apis/models/shipment-status-dto.ts +117 -0
- package/src/lib/Apis/models/shipment-with-order.ts +105 -0
- package/src/lib/Apis/models/shipment.ts +104 -0
- package/src/lib/Apis/models/shipping-info.ts +88 -0
- package/src/lib/Apis/models/single-browser-stats-dto.ts +45 -0
- package/src/lib/Apis/models/single-contact-aggregated-stats-dto.ts +129 -0
- package/src/lib/Apis/models/single-contact-list-stats-dto.ts +117 -0
- package/src/lib/Apis/models/single-country-stats-dto.ts +39 -0
- package/src/lib/Apis/models/single-general-stats.ts +153 -0
- package/src/lib/Apis/models/single-link-stats-dto.ts +39 -0
- package/src/lib/Apis/models/single-message-populated.ts +59 -0
- package/src/lib/Apis/models/single-notification-dto.ts +99 -0
- package/src/lib/Apis/models/single-product-media.ts +74 -0
- package/src/lib/Apis/models/single-recipient-dto.ts +33 -0
- package/src/lib/Apis/models/single-suggest-attribute.ts +33 -0
- package/src/lib/Apis/models/statistic-dto.ts +171 -0
- package/src/lib/Apis/models/store-entity.ts +117 -0
- package/src/lib/Apis/models/store.ts +135 -0
- package/src/lib/Apis/models/sub-category-headlines-only-response-dto.ts +39 -0
- package/src/lib/Apis/models/sub-category.ts +93 -0
- package/src/lib/Apis/models/suggest-attributes.ts +28 -0
- package/src/lib/Apis/models/suggested-slot.ts +33 -0
- package/src/lib/Apis/models/table-cell-dto.ts +33 -0
- package/src/lib/Apis/models/table-dto.ts +34 -0
- package/src/lib/Apis/models/tadmin-session-data.ts +47 -0
- package/src/lib/Apis/models/track-dto.ts +94 -0
- package/src/lib/Apis/models/tracking-status-location-base.ts +45 -0
- package/src/lib/Apis/models/tracking-status-substatus.ts +39 -0
- package/src/lib/Apis/models/tracking-status.ts +71 -0
- package/src/lib/Apis/models/transfere-patient-request.ts +123 -0
- package/src/lib/Apis/models/transfere-patients-request-dto.ts +99 -0
- package/src/lib/Apis/models/tuser-session-data.ts +34 -0
- package/src/lib/Apis/models/update-address-dto.ts +134 -0
- package/src/lib/Apis/models/update-blog-dto.ts +45 -0
- package/src/lib/Apis/models/update-campaign-draft-content-dto.ts +27 -0
- package/src/lib/Apis/models/update-category-dto.ts +45 -0
- package/src/lib/Apis/models/update-discount-dto.ts +208 -0
- package/src/lib/Apis/models/update-event-dto.ts +52 -0
- package/src/lib/Apis/models/update-items-order-dto.ts +27 -0
- package/src/lib/Apis/models/update-marketing-camp-draft-dto.ts +81 -0
- package/src/lib/Apis/models/update-message-dto.ts +57 -0
- package/src/lib/Apis/models/update-product-attribute-dto.ts +33 -0
- package/src/lib/Apis/models/update-product-dto.ts +96 -0
- package/src/lib/Apis/models/update-product-variant-dto.ts +119 -0
- package/src/lib/Apis/models/update-refill-request-dto.ts +75 -0
- package/src/lib/Apis/models/update-review-dto.ts +63 -0
- package/src/lib/Apis/models/update-role-dto.ts +57 -0
- package/src/lib/Apis/models/update-store-dto.ts +105 -0
- package/src/lib/Apis/models/update-sub-category-dto.ts +45 -0
- package/src/lib/Apis/models/update-transfere-patients-request-dto.ts +99 -0
- package/src/lib/Apis/models/update-user-dto.ts +239 -0
- package/src/lib/Apis/models/update-user-group-dto.ts +39 -0
- package/src/lib/Apis/models/update-zone-dto.ts +82 -0
- package/src/lib/Apis/models/upload-pdf-body.ts +27 -0
- package/src/lib/Apis/models/used-by.ts +87 -0
- package/src/lib/Apis/models/user-entity.ts +220 -0
- package/src/lib/Apis/models/user-group.ts +75 -0
- package/src/lib/Apis/models/user-insights-dto.ts +39 -0
- package/src/lib/Apis/models/user-with-no-id.ts +226 -0
- package/src/lib/Apis/models/user.ts +232 -0
- package/src/lib/Apis/models/users-paginated-response.ts +52 -0
- package/src/lib/Apis/models/verify-email-dto.ts +33 -0
- package/src/lib/Apis/models/zone-single-size.ts +51 -0
- package/src/lib/Apis/models/zone.ts +106 -0
- package/src/lib/Apis/wrapper.ts +37 -0
- package/src/lib/api/auth.ts +81 -0
- package/src/lib/api/cart.ts +42 -0
- package/src/lib/api/client.ts +118 -0
- package/src/lib/api/orders.ts +53 -0
- package/src/lib/api/products.ts +51 -0
- package/src/lib/api-adapter/auth-adapter.ts +196 -0
- package/src/lib/api-adapter/cart-adapter.ts +193 -0
- package/src/lib/api-adapter/config.ts +76 -0
- package/src/lib/api-adapter/index.ts +13 -0
- package/src/lib/api-adapter/mappers.ts +147 -0
- package/src/lib/api-adapter/orders-adapter.ts +195 -0
- package/src/lib/api-adapter/products-adapter.ts +194 -0
- package/src/lib/types/index.ts +152 -0
- package/src/lib/utils/colors.ts +51 -0
- package/src/lib/utils/format.ts +48 -0
- package/src/providers/AuthProvider.tsx +117 -0
- package/src/providers/CartProvider.tsx +131 -0
- package/src/providers/EcommerceProvider.tsx +34 -0
- package/src/providers/ThemeProvider.tsx +57 -0
- package/src/screens/CartScreen.tsx +140 -0
- package/src/screens/CheckoutScreen.tsx +340 -0
- package/src/screens/CurrentOrdersScreen.tsx +85 -0
- package/src/screens/LoginScreen.tsx +149 -0
- package/src/screens/OrdersScreen.tsx +86 -0
- package/src/screens/ProductDetailScreen.tsx +255 -0
- package/src/screens/ProfileScreen.tsx +211 -0
- package/src/screens/RegisterScreen.tsx +200 -0
- package/src/screens/ShopScreen.tsx +233 -0
- package/src/styles/globals.css +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Multi-Tenant E-commerce Package
|
|
2
|
+
|
|
3
|
+
A reusable, customizable e-commerce package for Next.js with dynamic theming, built for multi-tenant applications.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🎨 **Dynamic Theming** - Customize colors, logos, and store name per deployment
|
|
8
|
+
- 🏪 **Multi-Tenant** - Automatic store ID injection in all API calls
|
|
9
|
+
- 🛍️ **Complete E-commerce** - Products, cart, checkout, orders, user accounts
|
|
10
|
+
- 💳 **Stripe Integration** - Secure checkout with Stripe payment links
|
|
11
|
+
- 🔐 **Authentication** - JWT-based auth with token refresh
|
|
12
|
+
- 📱 **Responsive Design** - Beautiful UI that works on all devices
|
|
13
|
+
- ⚡ **Performance** - Built with Next.js 14, React 18, and Tailwind CSS
|
|
14
|
+
- 🎭 **Animations** - Smooth transitions with Framer Motion
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @hey-pharmacist/ecommerce
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Peer Dependencies
|
|
23
|
+
|
|
24
|
+
Make sure you have these installed in your project:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install react@^18.0.0 react-dom@^18.0.0 next@^14.0.0
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### 1. Create Configuration
|
|
33
|
+
|
|
34
|
+
Create a configuration file for your store:
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
// ecommerce.config.ts
|
|
38
|
+
import { EcommerceConfig } from '@hey-pharmacist/ecommerce';
|
|
39
|
+
|
|
40
|
+
export const config: EcommerceConfig = {
|
|
41
|
+
storeId: 'your-store-id',
|
|
42
|
+
storeName: 'Your Store Name',
|
|
43
|
+
logo: '/logo.png',
|
|
44
|
+
colors: {
|
|
45
|
+
primary: '#3B82F6', // Blue
|
|
46
|
+
secondary: '#8B5CF6', // Purple
|
|
47
|
+
accent: '#10B981', // Green
|
|
48
|
+
},
|
|
49
|
+
apiBaseUrl: 'https://api.yourbackend.com',
|
|
50
|
+
stripePublicKey: 'pk_test_...',
|
|
51
|
+
};
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 2. Wrap Your App
|
|
55
|
+
|
|
56
|
+
In your root layout or `_app.tsx`:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// app/layout.tsx (App Router)
|
|
60
|
+
import { EcommerceProvider } from '@hey-pharmacist/ecommerce';
|
|
61
|
+
import { config } from './ecommerce.config';
|
|
62
|
+
import '@hey-pharmacist/ecommerce/styles/globals.css';
|
|
63
|
+
|
|
64
|
+
export default function RootLayout({ children }) {
|
|
65
|
+
return (
|
|
66
|
+
<html lang="en">
|
|
67
|
+
<body>
|
|
68
|
+
<EcommerceProvider config={config}>
|
|
69
|
+
{children}
|
|
70
|
+
</EcommerceProvider>
|
|
71
|
+
</body>
|
|
72
|
+
</html>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 3. Use Screens in Your Pages
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// app/shop/page.tsx
|
|
81
|
+
import { ShopScreen } from '@hey-pharmacist/ecommerce';
|
|
82
|
+
|
|
83
|
+
export default function ShopPage() {
|
|
84
|
+
return <ShopScreen />;
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Available Screens
|
|
89
|
+
|
|
90
|
+
All screens are ready-to-use React components:
|
|
91
|
+
|
|
92
|
+
- `<ShopScreen />` - Product listing with filters and search
|
|
93
|
+
- `<ProductDetailScreen productId={id} />` - Product details and add to cart
|
|
94
|
+
- `<CartScreen />` - Shopping cart management
|
|
95
|
+
- `<CheckoutScreen />` - Checkout form with Stripe integration
|
|
96
|
+
- `<LoginScreen />` - User login
|
|
97
|
+
- `<RegisterScreen />` - User registration
|
|
98
|
+
- `<ProfileScreen />` - User profile management
|
|
99
|
+
- `<OrdersScreen />` - Order history
|
|
100
|
+
- `<CurrentOrdersScreen />` - Active orders tracking
|
|
101
|
+
|
|
102
|
+
## Components
|
|
103
|
+
|
|
104
|
+
Reusable components for custom pages:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import {
|
|
108
|
+
Header,
|
|
109
|
+
Footer,
|
|
110
|
+
ProductCard,
|
|
111
|
+
CartItem,
|
|
112
|
+
OrderCard,
|
|
113
|
+
Button,
|
|
114
|
+
Input,
|
|
115
|
+
Badge,
|
|
116
|
+
Modal,
|
|
117
|
+
} from '@hey-pharmacist/ecommerce';
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Hooks
|
|
121
|
+
|
|
122
|
+
Custom hooks for data fetching:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import {
|
|
126
|
+
useAuth,
|
|
127
|
+
useCart,
|
|
128
|
+
useProducts,
|
|
129
|
+
useProduct,
|
|
130
|
+
useFeaturedProducts,
|
|
131
|
+
useCategories,
|
|
132
|
+
useOrders,
|
|
133
|
+
useCurrentOrders,
|
|
134
|
+
} from '@hey-pharmacist/ecommerce';
|
|
135
|
+
|
|
136
|
+
function MyComponent() {
|
|
137
|
+
const { user, login, logout } = useAuth();
|
|
138
|
+
const { cart, addToCart, removeFromCart } = useCart();
|
|
139
|
+
const { products, isLoading } = useProducts();
|
|
140
|
+
|
|
141
|
+
// ... your component logic
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## API Integration
|
|
146
|
+
|
|
147
|
+
The package automatically handles:
|
|
148
|
+
- Store ID injection in all requests
|
|
149
|
+
- Authentication tokens
|
|
150
|
+
- Token refresh
|
|
151
|
+
- Error handling
|
|
152
|
+
|
|
153
|
+
### Expected Backend Endpoints
|
|
154
|
+
|
|
155
|
+
Your backend should implement these endpoints:
|
|
156
|
+
|
|
157
|
+
**Products**
|
|
158
|
+
- `GET /products` - List products (with pagination, filters)
|
|
159
|
+
- `GET /products/:id` - Get product details
|
|
160
|
+
- `GET /products/featured` - Get featured products
|
|
161
|
+
- `GET /categories` - List categories
|
|
162
|
+
|
|
163
|
+
**Cart**
|
|
164
|
+
- `GET /cart` - Get user's cart
|
|
165
|
+
- `POST /cart/items` - Add item to cart
|
|
166
|
+
- `PUT /cart/items/:productId` - Update item quantity
|
|
167
|
+
- `DELETE /cart/items/:productId` - Remove item from cart
|
|
168
|
+
|
|
169
|
+
**Orders**
|
|
170
|
+
- `GET /orders` - List user's orders
|
|
171
|
+
- `GET /orders/current` - Get active orders
|
|
172
|
+
- `GET /orders/:id` - Get order details
|
|
173
|
+
- `POST /orders` - Create new order (returns Stripe checkout URL)
|
|
174
|
+
|
|
175
|
+
**Auth**
|
|
176
|
+
- `POST /auth/register` - Register new user
|
|
177
|
+
- `POST /auth/login` - Login user
|
|
178
|
+
- `GET /auth/me` - Get current user
|
|
179
|
+
- `PUT /auth/profile` - Update profile
|
|
180
|
+
- `POST /auth/logout` - Logout
|
|
181
|
+
|
|
182
|
+
All requests include:
|
|
183
|
+
- Header: `X-Store-Id: your-store-id`
|
|
184
|
+
- Header: `Authorization: Bearer <token>` (when authenticated)
|
|
185
|
+
|
|
186
|
+
## Styling
|
|
187
|
+
|
|
188
|
+
The package uses Tailwind CSS with CSS variables for dynamic theming. Include the styles:
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
import '@hey-pharmacist/ecommerce/styles/globals.css';
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Customize Tailwind
|
|
195
|
+
|
|
196
|
+
Extend the default Tailwind config if needed:
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
// tailwind.config.js
|
|
200
|
+
module.exports = {
|
|
201
|
+
content: [
|
|
202
|
+
'./app/**/*.{js,ts,jsx,tsx}',
|
|
203
|
+
'./node_modules/@hey-pharmacist/ecommerce/**/*.{js,ts,jsx,tsx}',
|
|
204
|
+
],
|
|
205
|
+
// ... your config
|
|
206
|
+
};
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Example Routes
|
|
210
|
+
|
|
211
|
+
Here's a complete routing setup:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
/shop → <ShopScreen />
|
|
215
|
+
/products/[id] → <ProductDetailScreen productId={id} />
|
|
216
|
+
/cart → <CartScreen />
|
|
217
|
+
/checkout → <CheckoutScreen />
|
|
218
|
+
/login → <LoginScreen />
|
|
219
|
+
/register → <RegisterScreen />
|
|
220
|
+
/account → <ProfileScreen />
|
|
221
|
+
/orders → <OrdersScreen />
|
|
222
|
+
/orders/current → <CurrentOrdersScreen />
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## TypeScript Support
|
|
226
|
+
|
|
227
|
+
Full TypeScript support with exported types:
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
import type {
|
|
231
|
+
EcommerceConfig,
|
|
232
|
+
Product,
|
|
233
|
+
Cart,
|
|
234
|
+
Order,
|
|
235
|
+
User,
|
|
236
|
+
} from '@hey-pharmacist/ecommerce';
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Advanced Usage
|
|
240
|
+
|
|
241
|
+
### Custom API Client
|
|
242
|
+
|
|
243
|
+
If you need to make custom API calls:
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { getApiClient } from '@hey-pharmacist/ecommerce';
|
|
247
|
+
|
|
248
|
+
const apiClient = getApiClient();
|
|
249
|
+
const response = await apiClient.get('/custom-endpoint');
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Direct API Access
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
import { productsApi, authApi, cartApi, ordersApi } from '@hey-pharmacist/ecommerce';
|
|
256
|
+
|
|
257
|
+
// Use API methods directly
|
|
258
|
+
const products = await productsApi.getProducts({ category: 'electronics' });
|
|
259
|
+
const order = await ordersApi.getOrder('order-id');
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## License
|
|
263
|
+
|
|
264
|
+
MIT
|
|
265
|
+
|
|
266
|
+
## Support
|
|
267
|
+
|
|
268
|
+
For issues and questions, please open an issue on GitHub.
|
|
269
|
+
|