summaryrefslogtreecommitdiff
path: root/src/lib/wishlist
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/wishlist')
-rw-r--r--src/lib/wishlist/api/createOrDeleteWishlistApi.js14
-rw-r--r--src/lib/wishlist/api/wishlistApi.js14
-rw-r--r--src/lib/wishlist/api/wishlistsApi.js13
-rw-r--r--src/lib/wishlist/components/Wishlists.jsx55
-rw-r--r--src/lib/wishlist/hooks/useWishlist.js13
-rw-r--r--src/lib/wishlist/hooks/useWishlists.js14
6 files changed, 123 insertions, 0 deletions
diff --git a/src/lib/wishlist/api/createOrDeleteWishlistApi.js b/src/lib/wishlist/api/createOrDeleteWishlistApi.js
new file mode 100644
index 00000000..617d139d
--- /dev/null
+++ b/src/lib/wishlist/api/createOrDeleteWishlistApi.js
@@ -0,0 +1,14 @@
+import odooApi from '@/core/api/odooApi'
+import { getAuth } from '@/core/utils/auth'
+
+const createOrDeleteWishlistApi = async ({ data }) => {
+ const auth = getAuth()
+ const dataWishlist = await odooApi(
+ 'POST',
+ `/api/v1/user/${auth.id}/wishlist/create-or-delete`,
+ data
+ )
+ return dataWishlist
+}
+
+export default createOrDeleteWishlistApi
diff --git a/src/lib/wishlist/api/wishlistApi.js b/src/lib/wishlist/api/wishlistApi.js
new file mode 100644
index 00000000..a8906dd4
--- /dev/null
+++ b/src/lib/wishlist/api/wishlistApi.js
@@ -0,0 +1,14 @@
+import odooApi from '@/core/api/odooApi'
+import { getAuth } from '@/core/utils/auth'
+
+const wishlistApi = async ({ productId }) => {
+ const auth = getAuth()
+ if (!auth) return { productTotal: 0, products: [] }
+ const dataWishlist = await odooApi(
+ 'GET',
+ `/api/v1/user/${auth.id}/wishlist?product_id=${productId}`
+ )
+ return dataWishlist
+}
+
+export default wishlistApi
diff --git a/src/lib/wishlist/api/wishlistsApi.js b/src/lib/wishlist/api/wishlistsApi.js
new file mode 100644
index 00000000..dfcce028
--- /dev/null
+++ b/src/lib/wishlist/api/wishlistsApi.js
@@ -0,0 +1,13 @@
+import odooApi from '@/core/api/odooApi'
+import { getAuth } from '@/core/utils/auth'
+
+const wishlistsApi = async ({ limit, offset }) => {
+ const auth = getAuth()
+ const dataWishlists = await odooApi(
+ 'GET',
+ `/api/v1/user/${auth.id}/wishlist?limit=${limit}&offset=${offset}`
+ )
+ return dataWishlists
+}
+
+export default wishlistsApi
diff --git a/src/lib/wishlist/components/Wishlists.jsx b/src/lib/wishlist/components/Wishlists.jsx
new file mode 100644
index 00000000..e61efcc3
--- /dev/null
+++ b/src/lib/wishlist/components/Wishlists.jsx
@@ -0,0 +1,55 @@
+import Alert from '@/core/components/elements/Alert/Alert'
+import Pagination from '@/core/components/elements/Pagination/Pagination'
+import Spinner from '@/core/components/elements/Spinner/Spinner'
+import ProductCard from '@/lib/product/components/ProductCard'
+import { useRouter } from 'next/router'
+import useWishlists from '../hooks/useWishlists'
+
+const Wishlists = () => {
+ const router = useRouter()
+ const { page = 1 } = router.query
+ const limit = 30
+ const { wishlists } = useWishlists({ page, limit })
+
+ const pageCount = Math.ceil(wishlists.data?.productTotal / limit)
+
+ if (wishlists.isLoading) {
+ return (
+ <div className='flex justify-center my-6'>
+ <Spinner className='w-6 text-gray_r-12/50 fill-gray_r-12' />
+ </div>
+ )
+ }
+
+ return (
+ <div className='px-4 py-6'>
+ {wishlists.data?.products?.length == 0 && (
+ <Alert
+ type='info'
+ className='text-center'
+ >
+ Wishlist anda masih kosong
+ </Alert>
+ )}
+
+ <div className='grid grid-cols-2 gap-3'>
+ {wishlists.data?.products.map((product) => (
+ <ProductCard
+ key={product.id}
+ product={product}
+ />
+ ))}
+ </div>
+
+ <div className='mt-6'>
+ <Pagination
+ currentPage={page}
+ pageCount={pageCount}
+ url={`/my/wishlist`}
+ />
+ </div>
+ </div>
+ )
+}
+
+export default Wishlists
diff --git a/src/lib/wishlist/hooks/useWishlist.js b/src/lib/wishlist/hooks/useWishlist.js
new file mode 100644
index 00000000..8580a19d
--- /dev/null
+++ b/src/lib/wishlist/hooks/useWishlist.js
@@ -0,0 +1,13 @@
+import { useQuery } from 'react-query'
+import wishlistApi from '../api/wishlistApi'
+
+const useWishlist = ({ productId }) => {
+ const fetchWishlist = async () => await wishlistApi({ productId })
+ const { data, isLoading, refetch } = useQuery(`wishlist-${productId}`, fetchWishlist)
+
+ return {
+ wishlist: { data, isLoading, refetch }
+ }
+}
+
+export default useWishlist
diff --git a/src/lib/wishlist/hooks/useWishlists.js b/src/lib/wishlist/hooks/useWishlists.js
new file mode 100644
index 00000000..169fdf46
--- /dev/null
+++ b/src/lib/wishlist/hooks/useWishlists.js
@@ -0,0 +1,14 @@
+import { useQuery } from 'react-query'
+import wishlistsApi from '../api/wishlistsApi'
+
+const useWishlists = ({ page, limit }) => {
+ const offset = (page - 1) * limit
+ const fetchWishlists = async () => await wishlistsApi({ limit, offset })
+ const { data, isLoading } = useQuery(`wishlists-${limit}-${offset}`, fetchWishlists)
+
+ return {
+ wishlists: { data, isLoading }
+ }
+}
+
+export default useWishlists