multiple changes to fix the wishlist

This commit is contained in:
Luis Alvarez 2021-02-26 21:35:09 -05:00
parent 3acca7cc17
commit 751011767a
8 changed files with 19 additions and 17 deletions

View File

@ -30,7 +30,8 @@ const WishlistButton: FC<Props> = ({
const itemInWishlist = data?.items?.find( const itemInWishlist = data?.items?.find(
// @ts-ignore Wishlist is not always enabled // @ts-ignore Wishlist is not always enabled
(item) => (item) =>
item.product_id === productId && (item.variant_id as any) === variant.id item.product_id === Number(productId) &&
(item.variant_id as any) === Number(variant.id)
) )
const handleWishlistChange = async (e: any) => { const handleWishlistChange = async (e: any) => {

View File

@ -1,6 +1,11 @@
import type { ItemBody as WishlistItemBody } from '../wishlist' import type { ItemBody as WishlistItemBody } from '../wishlist'
import type { CartItemBody, OptionSelections } from '../../types' import type { CartItemBody, OptionSelections } from '../../types'
type BCWishlistItemBody = {
product_id: number
variant_id: number
}
type BCCartItemBody = { type BCCartItemBody = {
product_id: number product_id: number
variant_id: number variant_id: number
@ -8,9 +13,11 @@ type BCCartItemBody = {
option_selections?: OptionSelections option_selections?: OptionSelections
} }
export const parseWishlistItem = (item: WishlistItemBody) => ({ export const parseWishlistItem = (
product_id: item.productId, item: WishlistItemBody
variant_id: item.variantId, ): BCWishlistItemBody => ({
product_id: Number(item.productId),
variant_id: Number(item.variantId),
}) })
export const parseCartItem = (item: CartItemBody): BCCartItemBody => ({ export const parseCartItem = (item: CartItemBody): BCCartItemBody => ({

View File

@ -68,14 +68,15 @@ async function getCustomerWishlist({
const productsById = graphqlData.products.reduce<{ const productsById = graphqlData.products.reduce<{
[k: number]: ProductEdge [k: number]: ProductEdge
}>((prods, p) => { }>((prods, p) => {
prods[Number(p.node.entityId)] = p as any prods[Number(p.id)] = p as any
return prods return prods
}, {}) }, {})
// Populate the wishlist items with the graphql products // Populate the wishlist items with the graphql products
wishlist.items.forEach((item) => { wishlist.items.forEach((item) => {
const product = item && productsById[item.product_id!] const product = item && productsById[item.product_id!]
if (item && product) { if (item && product) {
item.product = product.node // @ts-ignore Fix this type when the wishlist type is properly defined
item.product = product
} }
}) })
} }

View File

@ -18,7 +18,7 @@ export const handler: SWRHook<
url: '/api/bigcommerce/wishlist', url: '/api/bigcommerce/wishlist',
method: 'GET', method: 'GET',
}, },
fetcher({ input: { customerId, includeProducts }, options, fetch }) { async fetcher({ input: { customerId, includeProducts }, options, fetch }) {
if (!customerId) return null if (!customerId) return null
// Use a dummy base as we only care about the relative path // Use a dummy base as we only care about the relative path
@ -35,7 +35,7 @@ export const handler: SWRHook<
const { data: customer } = useCustomer() const { data: customer } = useCustomer()
const response = useData({ const response = useData({
input: [ input: [
['customerId', (customer as any)?.id], ['customerId', customer?.entityId],
['includeProducts', input?.includeProducts], ['includeProducts', input?.includeProducts],
], ],
swrOptions: { swrOptions: {

View File

@ -8,7 +8,6 @@ import {
} from '../const' } from '../const'
if (!API_URL) { if (!API_URL) {
console.log(process.env)
throw new Error( throw new Error(
`The environment variable NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN is missing and it's required to access your store` `The environment variable NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN is missing and it's required to access your store`
) )

View File

@ -8,7 +8,6 @@
"analyze": "BUNDLE_ANALYZE=both yarn build", "analyze": "BUNDLE_ANALYZE=both yarn build",
"prettier-fix": "prettier --write .", "prettier-fix": "prettier --write .",
"find:unused": "next-unused", "find:unused": "next-unused",
"commerce": "node scripts/commerce.js",
"generate": "graphql-codegen", "generate": "graphql-codegen",
"generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js" "generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js"
}, },

View File

@ -1,7 +1,4 @@
import { useEffect } from 'react'
import { useRouter } from 'next/router'
import type { GetStaticPropsContext } from 'next' import type { GetStaticPropsContext } from 'next'
import { Heart } from '@components/icons' import { Heart } from '@components/icons'
import { Layout } from '@components/common' import { Layout } from '@components/common'
import { Text, Container } from '@components/ui' import { Text, Container } from '@components/ui'
@ -36,8 +33,7 @@ export async function getStaticProps({
export default function Wishlist() { export default function Wishlist() {
const { data: customer } = useCustomer() const { data: customer } = useCustomer()
// @ts-ignore Shopify - Fix this types // @ts-ignore Shopify - Fix this types
const { data, isLoading, isEmpty } = useWishlist() const { data, isLoading, isEmpty } = useWishlist({ includeProducts: true })
const router = useRouter()
return ( return (
<Container> <Container>
@ -60,7 +56,7 @@ export default function Wishlist() {
data && data &&
// @ts-ignore Shopify - Fix this types // @ts-ignore Shopify - Fix this types
data.items?.map((item) => ( data.items?.map((item) => (
<WishlistCard key={item.id} product={item as any} /> <WishlistCard key={item.id} product={item.product! as any} />
)) ))
)} )}
</div> </div>

View File

@ -1 +0,0 @@
console.log('Hello')