diff --git a/api/endpoints/orders/postOrdersCreate.ts b/api/endpoints/orders/postOrdersCreate.ts index d39eef0..396b8f2 100644 --- a/api/endpoints/orders/postOrdersCreate.ts +++ b/api/endpoints/orders/postOrdersCreate.ts @@ -1,4 +1,4 @@ import api from '~/api/instance' -export const postOrdersCreate = async (parent_id: number | undefined) => - await api.wc.v3OrdersCreate({ parent_id }) +export const postOrdersCreate = async (line_items: object[]) => + await api.wc.v3OrdersCreate({ line_items }) diff --git a/api/mutations/usePostOrdersCreate.ts b/api/mutations/usePostOrdersCreate.ts index a928b24..6903a56 100644 --- a/api/mutations/usePostOrdersCreate.ts +++ b/api/mutations/usePostOrdersCreate.ts @@ -7,12 +7,12 @@ export const usePostOrdersCreate = () => { const queryClient = useQueryClient() return useMutation({ - mutationFn: (params: { parent_id: MaybeRef }) => - postOrdersCreate(unref(params.parent_id)), + mutationFn: (params: { line_items: MaybeRef }) => + postOrdersCreate(unref(params.line_items)), onSuccess: (data, variables) => { queryClient.invalidateQueries({ - queryKey: ['post-orders-create', unref(variables.parent_id)], + queryKey: ['post-orders-create', unref(variables.line_items)], }) }, }) diff --git a/components/ProductDescription.vue b/components/ProductDescription.vue index d72e94b..05476cd 100644 --- a/components/ProductDescription.vue +++ b/components/ProductDescription.vue @@ -39,9 +39,13 @@ class="justify-content-center" label="Добавить в корзину" size="xl" - @click="addToCartBtn" + @click="addToCartBtn()" /> + currentSize +
+    {{ currentSize }}
+    
@@ -51,7 +55,7 @@ import ProductVariations from '~/components/ProductVariations.vue' import { useCurrentProduct, useProduct } from '~/composables' const { t } = useI18n() -const { addToCart } = useCart() +const { cartAddItem } = useCart() const { productsData, colors, getAttribute } = useProduct() const { currentVariant, currentColor, currentMaterial } = useCurrentProduct() @@ -87,7 +91,7 @@ const items = computed(() => [ ]) function addToCartBtn() { - addToCart(currentSize?.value?.id) + cartAddItem({ variation_id: currentSize?.value?.id }) } diff --git a/components/cart/CartItem.vue b/components/cart/CartItem.vue new file mode 100644 index 0000000..8b33b92 --- /dev/null +++ b/components/cart/CartItem.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/composables/useCart.ts b/composables/useCart.ts index c896075..de9e3dc 100644 --- a/composables/useCart.ts +++ b/composables/useCart.ts @@ -1,19 +1,30 @@ +import { useStorage } from '@vueuse/core' + +export interface ICartItem { + variation_id: number +} + +export interface ICart { + line_items: ICartItem[] +} + export const useCart = () => { - const addToCart = (item: any) => { - if (process.client) { - localStorage.setItem('cart', JSON.stringify(item)) - } + const cart = useStorage('cart', { line_items: [] }) + + const cartAddItem = (item: ICartItem) => { + cart.value.line_items.push(item) } - const getCart = () => { - if (process.client) { - return localStorage.getItem('cart') - } - return null + const cartRemoveItem = (item: ICartItem) => { + cart?.value?.line_items + ?.splice(cart?.value?.line_items + ?.findIndex((cartItem: ICartItem) => + cartItem?.variation_id === item?.variation_id), 1) } return { - addToCart, - getCart, + cart, + cartAddItem, + cartRemoveItem, } } diff --git a/composables/useProduct.ts b/composables/useProduct.ts index 5acb445..1881baa 100644 --- a/composables/useProduct.ts +++ b/composables/useProduct.ts @@ -1,8 +1,8 @@ import { useGetProductsDetail, useGetProductsVariationsList } from '~/api/queries' -export const useProduct = () => { +export const useProduct = (variantId) => { const route = useRoute() - const currentId = ref(route.params.id) + const currentId = ref(route.params.id ?? variantId) const { data: productsData } = useGetProductsDetail(currentId) const { data: productsVariationsData } = useGetProductsVariationsList(currentId) @@ -24,6 +24,10 @@ export const useProduct = () => { const materials = computed(() => getAttribute(productsData?.value?.attributes, 'material')?.options) const sizes = computed(() => getAttribute(productsData?.value?.attributes, 'size')?.options) + const color = computed(() => getAttribute(productsData?.value?.attributes, 'color')?.option) + const material = computed(() => getAttribute(productsData?.value?.attributes, 'material')?.option) + const size = computed(() => getAttribute(productsData?.value?.attributes, 'size')?.option) + function getIdentifier(productVariant) { const color = getAttribute(productVariant?.attributes, 'color')?.option const material = getAttribute(productVariant?.attributes, 'material')?.option @@ -60,6 +64,10 @@ export const useProduct = () => { materials, sizes, + color, + material, + size, + variations, getAttribute, diff --git a/pages/cart.vue b/pages/cart.vue index c92a9fa..386774d 100644 --- a/pages/cart.vue +++ b/pages/cart.vue @@ -1,9 +1,16 @@