@doswiftly/cli 0.1.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 +357 -0
- package/bin/doswiftly.js +2 -0
- package/dist/commands/auth-github.d.ts +6 -0
- package/dist/commands/auth-github.d.ts.map +1 -0
- package/dist/commands/auth-github.js +89 -0
- package/dist/commands/auth-github.js.map +1 -0
- package/dist/commands/auth-token.d.ts +12 -0
- package/dist/commands/auth-token.d.ts.map +1 -0
- package/dist/commands/auth-token.js +43 -0
- package/dist/commands/auth-token.js.map +1 -0
- package/dist/commands/auth.d.ts +22 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +348 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +5 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +234 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +104 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +37 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +580 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +83 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +363 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/domain.d.ts +13 -0
- package/dist/commands/domain.d.ts.map +1 -0
- package/dist/commands/domain.js +128 -0
- package/dist/commands/domain.js.map +1 -0
- package/dist/commands/env.d.ts +25 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +228 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1028 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +12 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +162 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/migrate.d.ts +18 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +355 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/preview.d.ts +29 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +199 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/proxy.d.ts +9 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +37 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/sdk.d.ts +5 -0
- package/dist/commands/sdk.d.ts.map +1 -0
- package/dist/commands/sdk.js +82 -0
- package/dist/commands/sdk.js.map +1 -0
- package/dist/commands/template.d.ts +107 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +1309 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/types.d.ts +5 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +82 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +103 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/upgrade.d.ts +18 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +55 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/verify.d.ts +5 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +232 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/whoami.d.ts +5 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +60 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/types.d.ts +173 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +48 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +416 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-url.d.ts +14 -0
- package/dist/lib/api-url.d.ts.map +1 -0
- package/dist/lib/api-url.js +24 -0
- package/dist/lib/api-url.js.map +1 -0
- package/dist/lib/api.d.ts +67 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +36 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +39 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +195 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env-storage.d.ts +140 -0
- package/dist/lib/env-storage.d.ts.map +1 -0
- package/dist/lib/env-storage.js +464 -0
- package/dist/lib/env-storage.js.map +1 -0
- package/dist/lib/errors.d.ts +61 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +204 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/i18n.d.ts +99 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +184 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/logger.d.ts +95 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +168 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/package-manager.d.ts +91 -0
- package/dist/lib/package-manager.d.ts.map +1 -0
- package/dist/lib/package-manager.js +205 -0
- package/dist/lib/package-manager.js.map +1 -0
- package/dist/lib/proxy-server.d.ts +24 -0
- package/dist/lib/proxy-server.d.ts.map +1 -0
- package/dist/lib/proxy-server.js +173 -0
- package/dist/lib/proxy-server.js.map +1 -0
- package/dist/lib/select-with-back.d.ts +34 -0
- package/dist/lib/select-with-back.d.ts.map +1 -0
- package/dist/lib/select-with-back.js +94 -0
- package/dist/lib/select-with-back.js.map +1 -0
- package/dist/lib/shared-api-client.d.ts +40 -0
- package/dist/lib/shared-api-client.d.ts.map +1 -0
- package/dist/lib/shared-api-client.js +92 -0
- package/dist/lib/shared-api-client.js.map +1 -0
- package/dist/lib/wizard-engine.d.ts +128 -0
- package/dist/lib/wizard-engine.d.ts.map +1 -0
- package/dist/lib/wizard-engine.js +168 -0
- package/dist/lib/wizard-engine.js.map +1 -0
- package/package.json +85 -0
- package/templates/storefront-minimal/.env.example +10 -0
- package/templates/storefront-minimal/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-minimal/app/globals.css +18 -0
- package/templates/storefront-minimal/app/layout.tsx +26 -0
- package/templates/storefront-minimal/app/page.tsx +93 -0
- package/templates/storefront-minimal/lib/graphql-client.ts +23 -0
- package/templates/storefront-minimal/next.config.ts +15 -0
- package/templates/storefront-minimal/open-next.config.ts +3 -0
- package/templates/storefront-minimal/package.json +30 -0
- package/templates/storefront-minimal/postcss.config.mjs +5 -0
- package/templates/storefront-minimal/tailwind.config.ts +14 -0
- package/templates/storefront-minimal/tsconfig.json +27 -0
- package/templates/storefront-minimal/wrangler.toml +9 -0
- package/templates/storefront-nextjs/.env.example +68 -0
- package/templates/storefront-nextjs/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-nextjs/.github/workflows/deploy.yml +25 -0
- package/templates/storefront-nextjs/.github/workflows/preview.yml +22 -0
- package/templates/storefront-nextjs/README.md +520 -0
- package/templates/storefront-nextjs/app/account/orders/page.tsx +216 -0
- package/templates/storefront-nextjs/app/account/page.tsx +167 -0
- package/templates/storefront-nextjs/app/auth/login/page.tsx +135 -0
- package/templates/storefront-nextjs/app/auth/register/page.tsx +228 -0
- package/templates/storefront-nextjs/app/cart/page.tsx +263 -0
- package/templates/storefront-nextjs/app/categories/[slug]/page.tsx +200 -0
- package/templates/storefront-nextjs/app/categories/page.tsx +58 -0
- package/templates/storefront-nextjs/app/checkout/page.tsx +351 -0
- package/templates/storefront-nextjs/app/collections/[slug]/page.tsx +158 -0
- package/templates/storefront-nextjs/app/collections/page.tsx +61 -0
- package/templates/storefront-nextjs/app/globals.css +98 -0
- package/templates/storefront-nextjs/app/layout.tsx +39 -0
- package/templates/storefront-nextjs/app/page.tsx +136 -0
- package/templates/storefront-nextjs/app/products/[slug]/page.tsx +119 -0
- package/templates/storefront-nextjs/app/products/page.tsx +107 -0
- package/templates/storefront-nextjs/app/search/page.tsx +127 -0
- package/templates/storefront-nextjs/components/auth/auth-guard.tsx +94 -0
- package/templates/storefront-nextjs/components/commerce/add-to-cart-button.tsx +77 -0
- package/templates/storefront-nextjs/components/commerce/cart-icon.tsx +29 -0
- package/templates/storefront-nextjs/components/commerce/currency-selector.tsx +217 -0
- package/templates/storefront-nextjs/components/commerce/pagination.tsx +62 -0
- package/templates/storefront-nextjs/components/commerce/product-actions.tsx +135 -0
- package/templates/storefront-nextjs/components/commerce/product-filters.tsx +109 -0
- package/templates/storefront-nextjs/components/commerce/product-price.tsx +375 -0
- package/templates/storefront-nextjs/components/commerce/search-input.tsx +178 -0
- package/templates/storefront-nextjs/components/commerce/sort-select.tsx +64 -0
- package/templates/storefront-nextjs/components/commerce/variant-selector.tsx +210 -0
- package/templates/storefront-nextjs/components/layout/footer.tsx +107 -0
- package/templates/storefront-nextjs/components/layout/header.tsx +104 -0
- package/templates/storefront-nextjs/components/providers.tsx +62 -0
- package/templates/storefront-nextjs/lib/auth/routes.ts +52 -0
- package/templates/storefront-nextjs/lib/currency.tsx +140 -0
- package/templates/storefront-nextjs/lib/format.ts +159 -0
- package/templates/storefront-nextjs/lib/graphql-queries.ts +629 -0
- package/templates/storefront-nextjs/lib/hooks.ts +30 -0
- package/templates/storefront-nextjs/middleware.ts +80 -0
- package/templates/storefront-nextjs/next.config.ts +37 -0
- package/templates/storefront-nextjs/open-next.config.ts +3 -0
- package/templates/storefront-nextjs/package.dev.json +30 -0
- package/templates/storefront-nextjs/package.json +32 -0
- package/templates/storefront-nextjs/package.json.template +32 -0
- package/templates/storefront-nextjs/postcss.config.mjs +8 -0
- package/templates/storefront-nextjs/tailwind.config.ts +111 -0
- package/templates/storefront-nextjs/tsconfig.json +27 -0
- package/templates/storefront-nextjs/wrangler.toml +9 -0
- package/templates/storefront-nextjs-shadcn/.env.example +68 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/deploy.yml +25 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/preview.yml +22 -0
- package/templates/storefront-nextjs-shadcn/CART_INTEGRATION.md +282 -0
- package/templates/storefront-nextjs-shadcn/CLAUDE.md +96 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_DOCUMENT_NAMES.md +190 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_ERROR_HANDLING.md +263 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_FIXES_SUMMARY.md +135 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_INTEGRATION_COMPLETE.md +142 -0
- package/templates/storefront-nextjs-shadcn/INTEGRATION_CHECKLIST.md +448 -0
- package/templates/storefront-nextjs-shadcn/PRODUCT_DETAIL_PAGE_IMPLEMENTATION.md +307 -0
- package/templates/storefront-nextjs-shadcn/README.md +195 -0
- package/templates/storefront-nextjs-shadcn/THEME_CUSTOMIZATION.md +245 -0
- package/templates/storefront-nextjs-shadcn/app/about/page.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/app/account/addresses/page.tsx +215 -0
- package/templates/storefront-nextjs-shadcn/app/account/loyalty/page.tsx +484 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/page.tsx +128 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/tracking/page.tsx +206 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/page.tsx +80 -0
- package/templates/storefront-nextjs-shadcn/app/account/page.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/app/account/settings/page.tsx +195 -0
- package/templates/storefront-nextjs-shadcn/app/api/auth/clear-token/route.ts +87 -0
- package/templates/storefront-nextjs-shadcn/app/api/auth/set-token/route.ts +125 -0
- package/templates/storefront-nextjs-shadcn/app/auth/forgot-password/page.tsx +131 -0
- package/templates/storefront-nextjs-shadcn/app/auth/login/page.tsx +24 -0
- package/templates/storefront-nextjs-shadcn/app/auth/register/page.tsx +20 -0
- package/templates/storefront-nextjs-shadcn/app/blog/[slug]/page.tsx +323 -0
- package/templates/storefront-nextjs-shadcn/app/blog/page.tsx +159 -0
- package/templates/storefront-nextjs-shadcn/app/brands/[slug]/page.tsx +170 -0
- package/templates/storefront-nextjs-shadcn/app/brands/page.tsx +73 -0
- package/templates/storefront-nextjs-shadcn/app/cart/page.tsx +165 -0
- package/templates/storefront-nextjs-shadcn/app/categories/[slug]/page.tsx +78 -0
- package/templates/storefront-nextjs-shadcn/app/categories/page.tsx +75 -0
- package/templates/storefront-nextjs-shadcn/app/checkout/page.tsx +1752 -0
- package/templates/storefront-nextjs-shadcn/app/checkout/success/[orderId]/page.tsx +256 -0
- package/templates/storefront-nextjs-shadcn/app/collections/[handle]/page.tsx +74 -0
- package/templates/storefront-nextjs-shadcn/app/collections/page.tsx +75 -0
- package/templates/storefront-nextjs-shadcn/app/contact/page.tsx +114 -0
- package/templates/storefront-nextjs-shadcn/app/error.tsx +90 -0
- package/templates/storefront-nextjs-shadcn/app/globals.css +125 -0
- package/templates/storefront-nextjs-shadcn/app/layout.tsx +57 -0
- package/templates/storefront-nextjs-shadcn/app/not-found.tsx +68 -0
- package/templates/storefront-nextjs-shadcn/app/page.tsx +21 -0
- package/templates/storefront-nextjs-shadcn/app/products/[slug]/page.tsx +246 -0
- package/templates/storefront-nextjs-shadcn/app/products/[slug]/product-client.tsx +343 -0
- package/templates/storefront-nextjs-shadcn/app/products/page.tsx +25 -0
- package/templates/storefront-nextjs-shadcn/app/products/products-client.tsx +192 -0
- package/templates/storefront-nextjs-shadcn/app/returns/page.tsx +77 -0
- package/templates/storefront-nextjs-shadcn/app/robots.ts +53 -0
- package/templates/storefront-nextjs-shadcn/app/search/page.tsx +16 -0
- package/templates/storefront-nextjs-shadcn/app/search/search-client.tsx +47 -0
- package/templates/storefront-nextjs-shadcn/app/shipping/page.tsx +62 -0
- package/templates/storefront-nextjs-shadcn/app/sitemap.ts +144 -0
- package/templates/storefront-nextjs-shadcn/app/wishlist/page.tsx +179 -0
- package/templates/storefront-nextjs-shadcn/codegen.ts +51 -0
- package/templates/storefront-nextjs-shadcn/components/account/address-form.tsx +348 -0
- package/templates/storefront-nextjs-shadcn/components/account/address-list.tsx +144 -0
- package/templates/storefront-nextjs-shadcn/components/account/order-details.tsx +258 -0
- package/templates/storefront-nextjs-shadcn/components/account/order-history.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/components/auth/account-menu.tsx +132 -0
- package/templates/storefront-nextjs-shadcn/components/auth/login-form.tsx +188 -0
- package/templates/storefront-nextjs-shadcn/components/auth/register-form.tsx +305 -0
- package/templates/storefront-nextjs-shadcn/components/blog/blog-card.tsx +240 -0
- package/templates/storefront-nextjs-shadcn/components/blog/blog-sidebar.tsx +177 -0
- package/templates/storefront-nextjs-shadcn/components/blog/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/brand/brand-card.tsx +119 -0
- package/templates/storefront-nextjs-shadcn/components/brand/brand-grid.tsx +64 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-drawer.tsx +140 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-icon.tsx +48 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-item.tsx +112 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-summary.tsx +84 -0
- package/templates/storefront-nextjs-shadcn/components/cart/index.ts +17 -0
- package/templates/storefront-nextjs-shadcn/components/cart/promo-code-input.tsx +121 -0
- package/templates/storefront-nextjs-shadcn/components/cart/shipping-estimator.tsx +162 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/index.ts +25 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/payment-method-card.tsx +187 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/payment-step.tsx +160 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/tax-breakdown.tsx +154 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/currency-selector.tsx +225 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/pagination.tsx +62 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/product-actions.tsx +158 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/search-input.tsx +174 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/variant-selector.tsx +210 -0
- package/templates/storefront-nextjs-shadcn/components/common/category-card.tsx +97 -0
- package/templates/storefront-nextjs-shadcn/components/common/collection-card.tsx +187 -0
- package/templates/storefront-nextjs-shadcn/components/common/price-display.tsx +151 -0
- package/templates/storefront-nextjs-shadcn/components/common/social-share.tsx +166 -0
- package/templates/storefront-nextjs-shadcn/components/discount/discount-breakdown.tsx +245 -0
- package/templates/storefront-nextjs-shadcn/components/discount/discount-code-input.tsx +246 -0
- package/templates/storefront-nextjs-shadcn/components/discount/index.ts +19 -0
- package/templates/storefront-nextjs-shadcn/components/error/error-boundary.tsx +113 -0
- package/templates/storefront-nextjs-shadcn/components/error/index.ts +7 -0
- package/templates/storefront-nextjs-shadcn/components/filters/attribute-filter.tsx +153 -0
- package/templates/storefront-nextjs-shadcn/components/filters/checkbox-group-filter.tsx +167 -0
- package/templates/storefront-nextjs-shadcn/components/filters/color-swatch-filter.tsx +176 -0
- package/templates/storefront-nextjs-shadcn/components/filters/dynamic-attribute-filters.tsx +220 -0
- package/templates/storefront-nextjs-shadcn/components/filters/index.ts +36 -0
- package/templates/storefront-nextjs-shadcn/components/filters/range-slider-filter.tsx +193 -0
- package/templates/storefront-nextjs-shadcn/components/filters/toggle-filter.tsx +132 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-balance.tsx +321 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-input.tsx +309 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/index.ts +24 -0
- package/templates/storefront-nextjs-shadcn/components/home/category-grid.tsx +72 -0
- package/templates/storefront-nextjs-shadcn/components/home/featured-collections.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/components/home/featured-products.tsx +85 -0
- package/templates/storefront-nextjs-shadcn/components/home/hero-section.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/components/home/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/home/newsletter-signup.tsx +108 -0
- package/templates/storefront-nextjs-shadcn/components/layout/breadcrumbs.tsx +133 -0
- package/templates/storefront-nextjs-shadcn/components/layout/currency-selector.tsx +341 -0
- package/templates/storefront-nextjs-shadcn/components/layout/footer.tsx +128 -0
- package/templates/storefront-nextjs-shadcn/components/layout/header.tsx +147 -0
- package/templates/storefront-nextjs-shadcn/components/layout/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/components/layout/mobile-menu.tsx +211 -0
- package/templates/storefront-nextjs-shadcn/components/layout/navigation.tsx +95 -0
- package/templates/storefront-nextjs-shadcn/components/layout/theme-switcher.tsx +192 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/index.ts +11 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/points-balance.tsx +93 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/points-history.tsx +177 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/referral-section.tsx +250 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/rewards-catalog.tsx +217 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/tier-badge.tsx +106 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/tier-progress.tsx +131 -0
- package/templates/storefront-nextjs-shadcn/components/order/delivery-estimate.tsx +196 -0
- package/templates/storefront-nextjs-shadcn/components/order/index.ts +11 -0
- package/templates/storefront-nextjs-shadcn/components/order/order-tracking.tsx +200 -0
- package/templates/storefront-nextjs-shadcn/components/order/shipment-card.tsx +407 -0
- package/templates/storefront-nextjs-shadcn/components/order/tracking-status.tsx +222 -0
- package/templates/storefront-nextjs-shadcn/components/order/tracking-timeline.tsx +205 -0
- package/templates/storefront-nextjs-shadcn/components/product/add-to-cart-button.tsx +161 -0
- package/templates/storefront-nextjs-shadcn/components/product/b2b-price-display.tsx +250 -0
- package/templates/storefront-nextjs-shadcn/components/product/discount-badge.tsx +196 -0
- package/templates/storefront-nextjs-shadcn/components/product/index.ts +41 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-card.tsx +147 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-filters.tsx +217 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-gallery.tsx +143 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-grid.tsx +83 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-image.tsx +155 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-price.tsx +158 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-quantity-selector.tsx +111 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-reviews.tsx +238 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-sort.tsx +58 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-variant-selector.tsx +169 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-card.tsx +220 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-form.tsx +338 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-summary.tsx +143 -0
- package/templates/storefront-nextjs-shadcn/components/product/sale-countdown.tsx +166 -0
- package/templates/storefront-nextjs-shadcn/components/product/savings-display.tsx +213 -0
- package/templates/storefront-nextjs-shadcn/components/product/similar-products.tsx +57 -0
- package/templates/storefront-nextjs-shadcn/components/product/stock-indicator.tsx +91 -0
- package/templates/storefront-nextjs-shadcn/components/providers/currency-provider.tsx +103 -0
- package/templates/storefront-nextjs-shadcn/components/providers/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/providers/query-provider.tsx +260 -0
- package/templates/storefront-nextjs-shadcn/components/providers/theme-provider.tsx +13 -0
- package/templates/storefront-nextjs-shadcn/components/returns/index.ts +26 -0
- package/templates/storefront-nextjs-shadcn/components/returns/return-request-form.tsx +608 -0
- package/templates/storefront-nextjs-shadcn/components/returns/return-status-card.tsx +554 -0
- package/templates/storefront-nextjs-shadcn/components/search/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-bar.tsx +140 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-results.tsx +58 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-suggestions.tsx +43 -0
- package/templates/storefront-nextjs-shadcn/components/seo/index.ts +12 -0
- package/templates/storefront-nextjs-shadcn/components/seo/json-ld.tsx +56 -0
- package/templates/storefront-nextjs-shadcn/components/seo/product-json-ld.ts +167 -0
- package/templates/storefront-nextjs-shadcn/components/shipping/index.ts +16 -0
- package/templates/storefront-nextjs-shadcn/components/shipping/shipping-method-selector.tsx +337 -0
- package/templates/storefront-nextjs-shadcn/components/ui/accordion.tsx +153 -0
- package/templates/storefront-nextjs-shadcn/components/ui/alert.tsx +59 -0
- package/templates/storefront-nextjs-shadcn/components/ui/badge.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/components/ui/button.tsx +51 -0
- package/templates/storefront-nextjs-shadcn/components/ui/card.tsx +77 -0
- package/templates/storefront-nextjs-shadcn/components/ui/checkbox.tsx +30 -0
- package/templates/storefront-nextjs-shadcn/components/ui/dialog.tsx +137 -0
- package/templates/storefront-nextjs-shadcn/components/ui/empty-state.tsx +207 -0
- package/templates/storefront-nextjs-shadcn/components/ui/index.ts +67 -0
- package/templates/storefront-nextjs-shadcn/components/ui/input.tsx +65 -0
- package/templates/storefront-nextjs-shadcn/components/ui/label.tsx +26 -0
- package/templates/storefront-nextjs-shadcn/components/ui/pagination.tsx +205 -0
- package/templates/storefront-nextjs-shadcn/components/ui/radio-group.tsx +44 -0
- package/templates/storefront-nextjs-shadcn/components/ui/select.tsx +160 -0
- package/templates/storefront-nextjs-shadcn/components/ui/separator.tsx +28 -0
- package/templates/storefront-nextjs-shadcn/components/ui/skeleton.tsx +20 -0
- package/templates/storefront-nextjs-shadcn/components/ui/spinner.tsx +82 -0
- package/templates/storefront-nextjs-shadcn/components/ui/tabs.tsx +119 -0
- package/templates/storefront-nextjs-shadcn/components/ui/toast.tsx +96 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-button.tsx +148 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-icon.tsx +47 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-item.tsx +165 -0
- package/templates/storefront-nextjs-shadcn/components.json +19 -0
- package/templates/storefront-nextjs-shadcn/generated/.gitkeep +2 -0
- package/templates/storefront-nextjs-shadcn/graphql/.gitkeep +31 -0
- package/templates/storefront-nextjs-shadcn/graphql/collections.example.ts +168 -0
- package/templates/storefront-nextjs-shadcn/graphql/products.example.ts +160 -0
- package/templates/storefront-nextjs-shadcn/hooks/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-auth.ts +310 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-cart-actions.ts +286 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-cart-sync.ts +110 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.test.ts +173 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.ts +298 -0
- package/templates/storefront-nextjs-shadcn/lib/auth/cookies.ts +220 -0
- package/templates/storefront-nextjs-shadcn/lib/auth/routes.ts +57 -0
- package/templates/storefront-nextjs-shadcn/lib/config.ts +46 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/IMPLEMENTATION_SUMMARY.md +254 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/README.md +464 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.test.ts +328 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.ts +295 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/index.ts +27 -0
- package/templates/storefront-nextjs-shadcn/lib/format.test.ts +397 -0
- package/templates/storefront-nextjs-shadcn/lib/format.ts +226 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/client.ts +109 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/hooks.ts +1183 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/server.ts +267 -0
- package/templates/storefront-nextjs-shadcn/lib/hooks.ts +30 -0
- package/templates/storefront-nextjs-shadcn/lib/theme/theme-config.ts +89 -0
- package/templates/storefront-nextjs-shadcn/lib/utils.ts +6 -0
- package/templates/storefront-nextjs-shadcn/next.config.ts +47 -0
- package/templates/storefront-nextjs-shadcn/open-next.config.ts +3 -0
- package/templates/storefront-nextjs-shadcn/package.dev.json +30 -0
- package/templates/storefront-nextjs-shadcn/package.json +60 -0
- package/templates/storefront-nextjs-shadcn/package.json.template +46 -0
- package/templates/storefront-nextjs-shadcn/postcss.config.mjs +8 -0
- package/templates/storefront-nextjs-shadcn/proxy.ts +80 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/apple-pay.svg +8 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/bank-transfer.svg +10 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/blik.svg +6 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/cash-on-delivery.svg +11 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/google-pay.svg +11 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/mastercard.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/paypal.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/payu.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/przelewy24.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/stripe.svg +4 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/visa.svg +5 -0
- package/templates/storefront-nextjs-shadcn/stores/auth-store.ts +66 -0
- package/templates/storefront-nextjs-shadcn/stores/cart-store.ts +56 -0
- package/templates/storefront-nextjs-shadcn/stores/checkout-store.ts +184 -0
- package/templates/storefront-nextjs-shadcn/stores/currency-store.ts +103 -0
- package/templates/storefront-nextjs-shadcn/stores/wishlist-store.ts +291 -0
- package/templates/storefront-nextjs-shadcn/tailwind.config.ts +111 -0
- package/templates/storefront-nextjs-shadcn/tsconfig.json +27 -0
- package/templates/storefront-nextjs-shadcn/wrangler.toml +9 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Cart Integration with GraphQL
|
|
2
|
+
|
|
3
|
+
This storefront template includes full GraphQL integration for cart operations. The cart system uses a hybrid approach:
|
|
4
|
+
|
|
5
|
+
- **Local Store (Zustand)**: For immediate UI updates and optimistic rendering
|
|
6
|
+
- **GraphQL API**: For persistence and server-side cart management
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
### Using AddToCartButton
|
|
11
|
+
|
|
12
|
+
The simplest way to add products to cart is using the `AddToCartButton` component:
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { AddToCartButton } from "@/components/product/add-to-cart-button";
|
|
16
|
+
|
|
17
|
+
<AddToCartButton
|
|
18
|
+
variantId={variant.id}
|
|
19
|
+
productId={product.id}
|
|
20
|
+
productHandle={product.handle}
|
|
21
|
+
productTitle={product.title}
|
|
22
|
+
variantTitle={variant.title}
|
|
23
|
+
price={variant.price}
|
|
24
|
+
image={variant.image}
|
|
25
|
+
available={variant.available}
|
|
26
|
+
quantity={1}
|
|
27
|
+
/>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The button automatically:
|
|
31
|
+
- Creates a cart if one doesn't exist
|
|
32
|
+
- Adds the item to GraphQL cart
|
|
33
|
+
- Updates local store for immediate UI feedback
|
|
34
|
+
- Shows loading and success states
|
|
35
|
+
- Displays error toasts if something fails
|
|
36
|
+
|
|
37
|
+
### Using useCartActions Hook
|
|
38
|
+
|
|
39
|
+
For more control, use the `useCartActions` hook directly:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
'use client';
|
|
43
|
+
|
|
44
|
+
import { useCartActions } from "@/hooks/use-cart-actions";
|
|
45
|
+
|
|
46
|
+
export function MyComponent() {
|
|
47
|
+
const { addToCart, updateQuantity, removeFromCart, isLoading } = useCartActions();
|
|
48
|
+
|
|
49
|
+
const handleAdd = async () => {
|
|
50
|
+
await addToCart({
|
|
51
|
+
variantId: 'variant-123',
|
|
52
|
+
productId: 'product-456',
|
|
53
|
+
productTitle: 'T-Shirt',
|
|
54
|
+
variantTitle: 'Large / Blue',
|
|
55
|
+
price: { amount: '29.99', currencyCode: 'USD' },
|
|
56
|
+
quantity: 1
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<button onClick={handleAdd} disabled={isLoading}>
|
|
62
|
+
Add to Cart
|
|
63
|
+
</button>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Cart Store
|
|
69
|
+
|
|
70
|
+
The local cart store (`useCartStore`) provides immediate UI updates:
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import { useCartStore } from "@/stores/cart-store";
|
|
74
|
+
|
|
75
|
+
const { items, getTotalItems, getTotalPrice, isOpen, openCart } = useCartStore();
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Note**: The store is automatically synced with GraphQL operations by `useCartActions`.
|
|
79
|
+
|
|
80
|
+
## Cart Drawer
|
|
81
|
+
|
|
82
|
+
The cart drawer shows the current cart state:
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import { CartDrawer } from "@/components/cart/cart-drawer";
|
|
86
|
+
|
|
87
|
+
// In your layout or header
|
|
88
|
+
<CartDrawer />
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The drawer:
|
|
92
|
+
- Opens automatically when items are added
|
|
93
|
+
- Shows all cart items with images and prices
|
|
94
|
+
- Allows quantity updates and item removal
|
|
95
|
+
- Displays cart summary with totals
|
|
96
|
+
- Provides checkout button
|
|
97
|
+
|
|
98
|
+
## Cart Icon
|
|
99
|
+
|
|
100
|
+
Add a cart icon to your header:
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
import { CartIcon } from "@/components/cart/cart-icon";
|
|
104
|
+
|
|
105
|
+
<CartIcon />
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Shows item count badge and toggles the cart drawer.
|
|
109
|
+
|
|
110
|
+
## GraphQL Operations
|
|
111
|
+
|
|
112
|
+
The following GraphQL mutations are available:
|
|
113
|
+
|
|
114
|
+
### Create Cart
|
|
115
|
+
|
|
116
|
+
```graphql
|
|
117
|
+
mutation CartCreate($input: CartCreateInput) {
|
|
118
|
+
cartCreate(input: $input) {
|
|
119
|
+
cart {
|
|
120
|
+
id
|
|
121
|
+
# ... cart fields
|
|
122
|
+
}
|
|
123
|
+
userErrors {
|
|
124
|
+
message
|
|
125
|
+
code
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Add Lines
|
|
132
|
+
|
|
133
|
+
```graphql
|
|
134
|
+
mutation CartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {
|
|
135
|
+
cartLinesAdd(cartId: $cartId, lines: $lines) {
|
|
136
|
+
cart {
|
|
137
|
+
id
|
|
138
|
+
# ... cart fields
|
|
139
|
+
}
|
|
140
|
+
userErrors {
|
|
141
|
+
message
|
|
142
|
+
code
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Update Lines
|
|
149
|
+
|
|
150
|
+
```graphql
|
|
151
|
+
mutation CartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {
|
|
152
|
+
cartLinesUpdate(cartId: $cartId, lines: $lines) {
|
|
153
|
+
cart {
|
|
154
|
+
id
|
|
155
|
+
# ... cart fields
|
|
156
|
+
}
|
|
157
|
+
userErrors {
|
|
158
|
+
message
|
|
159
|
+
code
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Remove Lines
|
|
166
|
+
|
|
167
|
+
```graphql
|
|
168
|
+
mutation CartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {
|
|
169
|
+
cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {
|
|
170
|
+
cart {
|
|
171
|
+
id
|
|
172
|
+
# ... cart fields
|
|
173
|
+
}
|
|
174
|
+
userErrors {
|
|
175
|
+
message
|
|
176
|
+
code
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Cart Persistence
|
|
183
|
+
|
|
184
|
+
- Cart ID is stored in `localStorage` as `cartId`
|
|
185
|
+
- Cart data is persisted on the server via GraphQL
|
|
186
|
+
- Local store items are synced with server on page load
|
|
187
|
+
- Cart survives page refreshes and browser restarts
|
|
188
|
+
|
|
189
|
+
## Error Handling
|
|
190
|
+
|
|
191
|
+
All cart operations include error handling:
|
|
192
|
+
|
|
193
|
+
- Network errors show toast notifications
|
|
194
|
+
- GraphQL `userErrors` are displayed to users
|
|
195
|
+
- Failed operations revert local store changes
|
|
196
|
+
- Retry logic for transient failures
|
|
197
|
+
|
|
198
|
+
## Currency Support
|
|
199
|
+
|
|
200
|
+
Cart prices automatically use the user's selected currency:
|
|
201
|
+
|
|
202
|
+
- Currency is included in GraphQL request headers
|
|
203
|
+
- Prices are converted server-side
|
|
204
|
+
- Exchange rates are locked for 24 hours
|
|
205
|
+
- Currency changes trigger cart refetch
|
|
206
|
+
|
|
207
|
+
## Testing
|
|
208
|
+
|
|
209
|
+
To test cart functionality:
|
|
210
|
+
|
|
211
|
+
1. Add items to cart
|
|
212
|
+
2. Check browser DevTools → Application → Local Storage for `cartId`
|
|
213
|
+
3. Check Network tab for GraphQL mutations
|
|
214
|
+
4. Verify cart persists after page refresh
|
|
215
|
+
5. Test currency switching
|
|
216
|
+
|
|
217
|
+
## Troubleshooting
|
|
218
|
+
|
|
219
|
+
### Cart not persisting
|
|
220
|
+
|
|
221
|
+
- Check if `cartId` exists in localStorage
|
|
222
|
+
- Verify GraphQL API is accessible
|
|
223
|
+
- Check browser console for errors
|
|
224
|
+
|
|
225
|
+
### Items not showing in cart
|
|
226
|
+
|
|
227
|
+
- Ensure `CartDrawer` is included in layout
|
|
228
|
+
- Check if cart store is initialized
|
|
229
|
+
- Verify GraphQL mutations are successful
|
|
230
|
+
|
|
231
|
+
### Currency not updating
|
|
232
|
+
|
|
233
|
+
- Check if `CurrencyProvider` is in layout
|
|
234
|
+
- Verify currency store is initialized
|
|
235
|
+
- Check GraphQL headers include `X-Preferred-Currency`
|
|
236
|
+
|
|
237
|
+
## Advanced Usage
|
|
238
|
+
|
|
239
|
+
### Custom Cart Logic
|
|
240
|
+
|
|
241
|
+
You can extend the cart system by:
|
|
242
|
+
|
|
243
|
+
1. Adding custom fields to cart items
|
|
244
|
+
2. Implementing discount code validation
|
|
245
|
+
3. Adding shipping cost calculation
|
|
246
|
+
4. Integrating with checkout flow
|
|
247
|
+
|
|
248
|
+
### Server-Side Cart
|
|
249
|
+
|
|
250
|
+
For server-side cart operations (e.g., in API routes):
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
import { getClient } from "@/lib/graphql/server";
|
|
254
|
+
import { CartDocument } from "@/generated/graphql";
|
|
255
|
+
|
|
256
|
+
export async function GET(request: Request) {
|
|
257
|
+
const cartId = request.headers.get('x-cart-id');
|
|
258
|
+
const client = getClient();
|
|
259
|
+
|
|
260
|
+
const { cart } = await client.request(CartDocument, { id: cartId });
|
|
261
|
+
|
|
262
|
+
return Response.json({ cart });
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Migration from Local-Only Cart
|
|
267
|
+
|
|
268
|
+
If you have an existing local-only cart implementation:
|
|
269
|
+
|
|
270
|
+
1. Replace `addItem` calls with `useCartActions().addToCart`
|
|
271
|
+
2. Update `AddToCartButton` props to include all required fields
|
|
272
|
+
3. Add `Toaster` to your layout for error notifications
|
|
273
|
+
4. Test cart persistence across page refreshes
|
|
274
|
+
|
|
275
|
+
## API Reference
|
|
276
|
+
|
|
277
|
+
See the following files for detailed API documentation:
|
|
278
|
+
|
|
279
|
+
- `hooks/use-cart-actions.ts` - Cart operations hook
|
|
280
|
+
- `stores/cart-store.ts` - Local cart store
|
|
281
|
+
- `lib/graphql/hooks.ts` - GraphQL cart hooks
|
|
282
|
+
- `components/cart/` - Cart UI components
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Storefront Template - Development Guide
|
|
2
|
+
|
|
3
|
+
Ten plik jest synchronizowany do `storefronts/test-shop/` przez `pnpm sync:storefront:watch`.
|
|
4
|
+
|
|
5
|
+
## Architektura
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
app/ # Next.js 15 App Router
|
|
9
|
+
├── layout.tsx # Root layout z providers
|
|
10
|
+
├── page.tsx # Homepage
|
|
11
|
+
├── products/ # Strony produktow
|
|
12
|
+
├── collections/ # Strony kolekcji
|
|
13
|
+
├── cart/ # Koszyk
|
|
14
|
+
├── checkout/ # Checkout
|
|
15
|
+
├── account/ # Panel klienta
|
|
16
|
+
└── auth/ # Login/Register
|
|
17
|
+
|
|
18
|
+
components/
|
|
19
|
+
├── product/ # ProductCard, ProductGrid, AddToCartButton
|
|
20
|
+
├── cart/ # CartDrawer, CartItem, CartSummary
|
|
21
|
+
├── auth/ # LoginForm, RegisterForm
|
|
22
|
+
├── layout/ # Header, Footer, Navigation
|
|
23
|
+
├── ui/ # shadcn/ui components
|
|
24
|
+
└── providers/ # QueryProvider, CurrencyProvider, ThemeProvider
|
|
25
|
+
|
|
26
|
+
lib/
|
|
27
|
+
├── graphql/
|
|
28
|
+
│ ├── server.ts # SSR helpers z React cache()
|
|
29
|
+
│ ├── client.ts # Client-side GraphQL client
|
|
30
|
+
│ └── hooks.ts # React Query hooks
|
|
31
|
+
└── currency/ # Currency management
|
|
32
|
+
|
|
33
|
+
stores/ # Zustand stores
|
|
34
|
+
├── cart-store.ts # Koszyk (persist localStorage)
|
|
35
|
+
├── currency-store.ts # Waluta (persist cookies)
|
|
36
|
+
└── auth-store.ts # Autentykacja
|
|
37
|
+
|
|
38
|
+
generated/
|
|
39
|
+
└── graphql.ts # Auto-generowane typy
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Data Fetching
|
|
43
|
+
|
|
44
|
+
### Server Components (lib/graphql/server.ts):
|
|
45
|
+
```typescript
|
|
46
|
+
import { fetchProducts, fetchProduct } from '@/lib/graphql/server';
|
|
47
|
+
|
|
48
|
+
// W async Server Component
|
|
49
|
+
const { products, pageInfo } = await fetchProducts({ first: 20 });
|
|
50
|
+
const { product } = await fetchProduct(handle);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Client Components (lib/graphql/hooks.ts):
|
|
54
|
+
```typescript
|
|
55
|
+
'use client';
|
|
56
|
+
import { useProducts, useCart, useCartLinesAdd } from '@/lib/graphql/hooks';
|
|
57
|
+
|
|
58
|
+
const { data, isLoading } = useProducts({ first: 20 });
|
|
59
|
+
const addLines = useCartLinesAdd();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Zustand Stores
|
|
63
|
+
|
|
64
|
+
### Cart Store:
|
|
65
|
+
```typescript
|
|
66
|
+
import { useCartStore } from '@/stores/cart-store';
|
|
67
|
+
|
|
68
|
+
const { items, addItem, removeItem, getTotalItems, getTotalPrice } = useCartStore();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Currency Store:
|
|
72
|
+
```typescript
|
|
73
|
+
import { useCurrencyStore } from '@/stores/currency-store';
|
|
74
|
+
|
|
75
|
+
const { currency, setCurrency, supportedCurrencies } = useCurrencyStore();
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Konwencje
|
|
79
|
+
|
|
80
|
+
1. **Client vs Server**: Dodaj `"use client"` tylko gdy potrzebne (hooks, interaktywnosc)
|
|
81
|
+
2. **Typy**: Zawsze definiuj interfejsy dla props
|
|
82
|
+
3. **Styling**: Uzywaj `cn()` dla laczenia klas Tailwind
|
|
83
|
+
4. **Obrazki**: next/image z alt i priority dla LCP
|
|
84
|
+
5. **Formularze**: Zod dla walidacji
|
|
85
|
+
|
|
86
|
+
## GraphQL Operations
|
|
87
|
+
|
|
88
|
+
Operacje sa zdefiniowane w:
|
|
89
|
+
```
|
|
90
|
+
packages/backend/src/commerce/storefront-graphql/operations/
|
|
91
|
+
├── queries.graphql
|
|
92
|
+
├── mutations.graphql
|
|
93
|
+
└── fragments.graphql
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Aby poznac dostepne operacje, przeczytaj te pliki.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# GraphQL Document Names Reference
|
|
2
|
+
|
|
3
|
+
## ⚠️ WAŻNE: Konwencja nazewnictwa
|
|
4
|
+
|
|
5
|
+
**WSZYSTKIE** GraphQL dokumenty w `generated/graphql.ts` mają suffix `Document`!
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// ✅ POPRAWNIE
|
|
9
|
+
import { CustomerCreateDocument } from "@/generated/graphql";
|
|
10
|
+
client.request(CustomerCreateDocument, { input });
|
|
11
|
+
|
|
12
|
+
// ❌ BŁĄD - nie istnieje!
|
|
13
|
+
import { CustomerCreate } from "@/generated/graphql";
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 📋 Kompletna lista dostępnych dokumentów
|
|
19
|
+
|
|
20
|
+
### 🔍 Queries (Zapytania)
|
|
21
|
+
|
|
22
|
+
#### Collections & Categories
|
|
23
|
+
- ✅ `GetFeaturedCollectionsDocument` - Featured collections
|
|
24
|
+
- ✅ `GetCollectionWithProductsDocument` - Collection z produktami
|
|
25
|
+
- ✅ `GetAllCollectionsDocument` - Wszystkie collections
|
|
26
|
+
- ✅ `CollectionDocument` - Pojedyncza collection
|
|
27
|
+
- ✅ `CollectionsDocument` - Lista collections
|
|
28
|
+
- ✅ `CategoryDocument` - Pojedyncza kategoria
|
|
29
|
+
- ✅ `CategoriesDocument` - Lista kategorii
|
|
30
|
+
|
|
31
|
+
#### Products
|
|
32
|
+
- ✅ `GetFeaturedProductsDocument` - Featured produkty
|
|
33
|
+
- ✅ `GetProductWithReviewsDocument` - Produkt z recenzjami
|
|
34
|
+
- ✅ `SearchProductsWithFiltersDocument` - Wyszukiwanie z filtrami
|
|
35
|
+
- ✅ `ProductDocument` - Pojedynczy produkt
|
|
36
|
+
- ✅ `ProductsDocument` - Lista produktów
|
|
37
|
+
- ✅ `ProductSearchDocument` - Wyszukiwanie produktów
|
|
38
|
+
|
|
39
|
+
#### Cart
|
|
40
|
+
- ✅ `CartDocument` - Koszyk
|
|
41
|
+
|
|
42
|
+
#### Shop
|
|
43
|
+
- ✅ `ShopDocument` - Informacje o sklepie
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### ✏️ Mutations (Mutacje)
|
|
48
|
+
|
|
49
|
+
#### Customer Authentication
|
|
50
|
+
- ✅ `CustomerCreateDocument` - Rejestracja nowego klienta
|
|
51
|
+
- ✅ `CustomerLoginDocument` - Logowanie
|
|
52
|
+
- ✅ `CustomerLogoutDocument` - Wylogowanie
|
|
53
|
+
- ✅ `CustomerTokenRenewDocument` - Odnowienie tokenu
|
|
54
|
+
|
|
55
|
+
#### Customer Profile
|
|
56
|
+
- ✅ `CustomerUpdateDocument` - Aktualizacja profilu
|
|
57
|
+
|
|
58
|
+
#### Customer Addresses
|
|
59
|
+
- ✅ `CustomerAddressCreateDocument` - Dodanie adresu
|
|
60
|
+
- ✅ `CustomerAddressUpdateDocument` - Edycja adresu
|
|
61
|
+
- ✅ `CustomerAddressDeleteDocument` - Usunięcie adresu
|
|
62
|
+
- ✅ `CustomerDefaultAddressUpdateDocument` - Ustawienie domyślnego adresu
|
|
63
|
+
|
|
64
|
+
#### Customer Password
|
|
65
|
+
- ✅ `CustomerPasswordRecoverDocument` - Odzyskiwanie hasła (wysyłka emaila)
|
|
66
|
+
- ✅ `CustomerPasswordResetDocument` - Reset hasła (z tokenem)
|
|
67
|
+
|
|
68
|
+
#### Cart Operations
|
|
69
|
+
- ✅ `CartCreateDocument` - Utworzenie koszyka
|
|
70
|
+
- ✅ `CartLinesAddDocument` - Dodanie produktów do koszyka
|
|
71
|
+
- ✅ `CartLinesUpdateDocument` - Aktualizacja ilości w koszyku
|
|
72
|
+
- ✅ `CartLinesRemoveDocument` - Usunięcie produktów z koszyka
|
|
73
|
+
- ✅ `CartDiscountCodesUpdateDocument` - Dodanie kodu rabatowego
|
|
74
|
+
- ✅ `CartBuyerIdentityUpdateDocument` - Aktualizacja danych kupującego
|
|
75
|
+
- ✅ `CartNoteUpdateDocument` - Dodanie notatki do zamówienia
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 🎯 Przykłady użycia
|
|
80
|
+
|
|
81
|
+
### Client-side (React Query)
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { useMutation, useQuery } from "@tanstack/react-query";
|
|
85
|
+
import { getGraphQLClient } from "@/lib/graphql/client";
|
|
86
|
+
import {
|
|
87
|
+
CustomerCreateDocument,
|
|
88
|
+
CustomerLoginDocument,
|
|
89
|
+
CartCreateDocument
|
|
90
|
+
} from "@/generated/graphql";
|
|
91
|
+
|
|
92
|
+
const client = getGraphQLClient();
|
|
93
|
+
|
|
94
|
+
// Mutation
|
|
95
|
+
const registerMutation = useMutation({
|
|
96
|
+
mutationFn: async (input) => {
|
|
97
|
+
return client.request(CustomerCreateDocument, { input });
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Query
|
|
102
|
+
const { data } = useQuery({
|
|
103
|
+
queryKey: ["cart", cartId],
|
|
104
|
+
queryFn: () => client.request(CartDocument, { id: cartId }),
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Server-side (Next.js Server Components)
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { getClient } from "@/lib/graphql/server";
|
|
112
|
+
import { ProductDocument, CollectionsDocument } from "@/generated/graphql";
|
|
113
|
+
|
|
114
|
+
export async function getProduct(handle: string) {
|
|
115
|
+
const client = await getClient();
|
|
116
|
+
return client.request(ProductDocument, { handle });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export async function getCollections() {
|
|
120
|
+
const client = await getClient();
|
|
121
|
+
return client.request(CollectionsDocument, { first: 10 });
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 🔧 Najczęstsze błędy
|
|
128
|
+
|
|
129
|
+
### ❌ Błąd 1: Brak suffixu "Document"
|
|
130
|
+
```typescript
|
|
131
|
+
// BŁĄD
|
|
132
|
+
import { CustomerCreate } from "@/generated/graphql";
|
|
133
|
+
|
|
134
|
+
// POPRAWNIE
|
|
135
|
+
import { CustomerCreateDocument } from "@/generated/graphql";
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### ❌ Błąd 2: Niepoprawna nazwa dokumentu
|
|
139
|
+
```typescript
|
|
140
|
+
// BŁĄD
|
|
141
|
+
import { CustomerRecoverDocument } from "@/generated/graphql";
|
|
142
|
+
|
|
143
|
+
// POPRAWNIE
|
|
144
|
+
import { CustomerPasswordRecoverDocument } from "@/generated/graphql";
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### ❌ Błąd 3: Używanie nieistniejących dokumentów
|
|
148
|
+
```typescript
|
|
149
|
+
// BŁĄD - CheckoutCreate nie istnieje w Storefront API
|
|
150
|
+
import { CheckoutCreateDocument } from "@/generated/graphql";
|
|
151
|
+
|
|
152
|
+
// POPRAWNIE - Używaj Cart API
|
|
153
|
+
import { CartCreateDocument } from "@/generated/graphql";
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 📝 Notatki
|
|
159
|
+
|
|
160
|
+
1. **Shopify Storefront API** nie ma:
|
|
161
|
+
- ❌ `CheckoutCreateDocument` - **NIE ISTNIEJE!** Używaj `CartCreateDocument` + `cart.checkoutUrl`
|
|
162
|
+
- ❌ Bezpośredniego API dla zamówień - używaj Customer API
|
|
163
|
+
- ❌ `CheckoutDocument` - używaj `CartDocument` który zawiera `checkoutUrl`
|
|
164
|
+
|
|
165
|
+
2. **Categories vs Collections**:
|
|
166
|
+
- `CategoriesDocument` - custom kategorie (jeśli zaimplementowane)
|
|
167
|
+
- `CollectionsDocument` - natywne Shopify collections (zalecane)
|
|
168
|
+
|
|
169
|
+
3. **Password Recovery**:
|
|
170
|
+
- `CustomerPasswordRecoverDocument` - wysyła email z linkiem
|
|
171
|
+
- `CustomerPasswordResetDocument` - resetuje hasło z tokenem z emaila
|
|
172
|
+
|
|
173
|
+
4. **Cart vs Checkout**:
|
|
174
|
+
- Shopify Storefront API v2024+ używa Cart API zamiast Checkout API
|
|
175
|
+
- `CartDocument` zawiera `checkoutUrl` do przekierowania na checkout
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 🔄 Aktualizacja dokumentów
|
|
180
|
+
|
|
181
|
+
Jeśli dodajesz nowe GraphQL queries/mutations:
|
|
182
|
+
|
|
183
|
+
1. Dodaj je do `graphql/` folder
|
|
184
|
+
2. Uruchom codegen: `npm run graphql:codegen`
|
|
185
|
+
3. Sprawdź wygenerowane nazwy w `generated/graphql.ts`
|
|
186
|
+
4. Zaktualizuj tę dokumentację
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
**Ostatnia aktualizacja:** 2024-12-10
|