4
0
forked from crowetic/commerce
Chris Vibert d8b42acfa2
Commerce.js Provider ()
* commercejs: Initial commit with basic product list

* ui: Handle no variants on product

* commercejs: Support individual product pages

* commercejs: Use separate sdkFetch function

* commercejs: Show option hex colors based on option name

* commercejs: Support product search and filter

* commercejs: Enable carts feature

* commercejs: Remove unused API endpoints

* commercejs: Fix adding variants to cart

* commercejs: Fix types for update cart hook

* commercejs: Update README

* commercejs: Add sorting to product search

* commercejs: Add generic types to cart actions

* commercejs: Better cart normalization

* commercejs: Provide typing for sdkFetch function

* commercejs: Refactor product search logic

* commercejs: Update commercejs types package and export types from local directory

* commercejs: Remove unused checkout hooks

* commercejs: Enhance fetcher to allow custom API routes

* commercejs: Fix product types

* commercejs: Add checkout functionality

* commercejs: Add commercejs to README list of providers

* commercejs: Add login/logout auth hooks

* commercejs: Adds comment to sdkFetch function

* commercejs: Bring back empty useSignup hook to fix build

* commercejs: Refactor useCheckout hook logic

* commercejs: Add errors to fetcher function if using invalid resource/method

* commercejs: Remove use of hex colors for color variants

* ui: Fix undefined error when no variants

* commercejs: Handle add to cart when no variants

* commercejs: Enable customer auth feature

* commercejs: Rename public key env variable as commercejs

* commercejs: Remove duplicate customer fields

* commercejs: Use variants API to generate product variants

* commercejs: Fetch all products using sort order

* commercejs: Fix use of normalizeProduct function

* commercejs: Disable customer auth

* commercejs: Show selected variant details in cart view

* commercejs: Update to latest commercejs types

* commercejs: Fix login email

* commercejs: Remove unnecessary ts-ignore

* api: Allow parameter to be passed to login API

* api: Allow login handler to accept GET requests

* commercejs: Add login API for login callback email link

* commercejs: Remove unused argument to API

* commercejs: Add hook to fetch logged in customer

* commercejs: Rename token to match SDK name

* commercejs: Enable logout

* commercejs: Fix VERCEL_URL env variable

* commercejs: Fix using vercel deployment url

* commercejs: Add deployment url env vars to templates

* Replace yarn with npm

* commercejs: Allow checkout submit even without card/address details

* ui: Add loading and cart refresh to checkout

* commercejs: Leave link to issue on TODO comment

* Update docs/README/env.template for commercejs provider

* ui: Prevent toggle loading after component unmount

* commercejs: Handle product without images

* ui: Explicity set loading to false after checkout

* Revert "api: Allow parameter to be passed to login API"

This reverts commit c3713ec6e23f1b423a071a31221069995d419486.

* commercejs: Handle login using API redirect

* commercejs: Adds shipping and billing details to checkout data

* commercejs: Fix types for fetcher and submit checkout

* commercejs: Update README with demo url

* commercejs: Update checkout hooks to use checkout context

* commercejs: Update checkout logic to use customer fields

* ui: Clear checkout fields context after checkout

* commercejs: Remove unused clear checkout function

* commercejs: Import constants directly
2021-12-16 16:06:52 -03:00

75 lines
1.5 KiB
TypeScript

import type {
Cart,
LineItem,
CommercejsCart,
CommercejsLineItem,
} from '../types/cart'
type CommercejsLineItemType = CommercejsLineItem & { image: { url: string } }
const normalizeLineItem = (
commercejsLineItem: CommercejsLineItemType
): LineItem => {
const {
id,
sku,
quantity,
price,
product_id,
product_name,
permalink,
variant,
image,
selected_options,
} = commercejsLineItem
return {
id,
variantId: variant?.id ?? '',
productId: product_id,
name: product_name,
quantity,
discounts: [],
path: permalink,
options: selected_options?.map(({ group_name, option_name }) => ({
name: group_name,
value: option_name,
})),
variant: {
id: variant?.id ?? id,
sku: variant?.sku ?? sku,
name: product_name,
requiresShipping: false,
price: variant?.price?.raw ?? price.raw,
listPrice: variant?.price?.raw ?? price.raw,
image: {
url: image?.url,
},
},
}
}
export const normalizeCart = (commercejsCart: CommercejsCart): Cart => {
const {
id,
created,
subtotal: { raw: rawPrice },
currency,
line_items,
} = commercejsCart
return {
id,
createdAt: new Date(created * 1000).toISOString(),
currency: {
code: currency.code,
},
taxesIncluded: false,
lineItems: line_items.map((item) => {
return normalizeLineItem(item as CommercejsLineItemType)
}),
lineItemsSubtotalPrice: rawPrice,
subtotalPrice: rawPrice,
totalPrice: rawPrice,
}
}