diff --git a/backend/product/urls.py b/backend/product/urls.py index 59cc686..3d27c64 100644 --- a/backend/product/urls.py +++ b/backend/product/urls.py @@ -6,6 +6,6 @@ urlpatterns = [ path('slider_category', ShowCaseProductsView.as_view(), name='category-products'), path('categories', AllCategories.as_view(), name='all-categories'), path('slider_categories', ShowCaseCategoryListView.as_view(), name='all-categories'), - path('', ProductView.as_view(), name='product-detail'), + path('', ProductView.as_view(), name='product-detail'), path('comments/', CommentView.as_view(), name='comment-views'), ] \ No newline at end of file diff --git a/frontend/components/products/FilterButton.vue b/frontend/components/global/FilterButton.vue similarity index 93% rename from frontend/components/products/FilterButton.vue rename to frontend/components/global/FilterButton.vue index 7b3d950..9639d4b 100644 --- a/frontend/components/products/FilterButton.vue +++ b/frontend/components/global/FilterButton.vue @@ -11,7 +11,7 @@ - + diff --git a/frontend/components/home/ProductsShowcase.vue b/frontend/components/home/ProductsShowcase.vue index cdf0e6c..788d81e 100644 --- a/frontend/components/home/ProductsShowcase.vue +++ b/frontend/components/home/ProductsShowcase.vue @@ -27,6 +27,7 @@ onMounted(() => { opacity: 1, scale: 1, // rotateX: -25, + zIndex: 1, top: 0, ease: "none", } @@ -34,6 +35,7 @@ onMounted(() => { opacity: 0, scale: 1, // rotateX: -25, + zIndex: 1, top: 20, ease: "none", }, @@ -41,6 +43,7 @@ onMounted(() => { opacity: 1, scale: 1, // rotateX: 0, + zIndex: 5, top: 0, ease: "none", }, @@ -88,10 +91,9 @@ onUnmounted(() => { class="perspective-midrange relative z-[999]" >
- { {{ slide.description }}

{
- + diff --git a/frontend/components/global/products/FilterProducts.vue b/frontend/components/products/FilterProducts.vue similarity index 99% rename from frontend/components/global/products/FilterProducts.vue rename to frontend/components/products/FilterProducts.vue index a957cfe..ae280d7 100644 --- a/frontend/components/global/products/FilterProducts.vue +++ b/frontend/components/products/FilterProducts.vue @@ -1,7 +1,7 @@ + + diff --git a/frontend/composables/api/product/useGetCategories.ts b/frontend/composables/api/categories/useGetCategories.ts similarity index 100% rename from frontend/composables/api/product/useGetCategories.ts rename to frontend/composables/api/categories/useGetCategories.ts diff --git a/frontend/composables/api/resellers/useGetResellersCategories.ts b/frontend/composables/api/resellers/useGetResellersCategories.ts new file mode 100644 index 0000000..9e97ec8 --- /dev/null +++ b/frontend/composables/api/resellers/useGetResellersCategories.ts @@ -0,0 +1,37 @@ +// imports + +import { useQuery } from "@tanstack/vue-query"; +import { API_ENDPOINTS, QUERY_KEYS } from "~/constants"; + +// types + +export type GetResellersCategoriesResponse = { + id: number; + title: string; + description: string; + link: string; + image: string; +}[]; + +const useGetResellersCategories = () => { + // state + + const { $axios: axios } = useNuxtApp(); + + // methods + + const handleGetResellersCategories = async () => { + const { data } = await axios.get( + `${API_ENDPOINTS.resellers_products.categories}` + ); + + return data; + }; + + return useQuery({ + queryKey: [QUERY_KEYS.resellers_categories], + queryFn: () => handleGetResellersCategories(), + }); +}; + +export default useGetResellersCategories; diff --git a/frontend/composables/api/resellers/useGetResellersProducts.ts b/frontend/composables/api/resellers/useGetResellersProducts.ts new file mode 100644 index 0000000..269e70e --- /dev/null +++ b/frontend/composables/api/resellers/useGetResellersProducts.ts @@ -0,0 +1,55 @@ +// imports + +import { useQuery } from "@tanstack/vue-query"; +import { API_ENDPOINTS, QUERY_KEYS } from "~/constants"; + +// types + +export type GetResellersProductsResponse = ApiPaginated; + +export type GetResellersProductsFilters = { + search?: string | undefined; + sort?: string | undefined; + category?: string | undefined; + price_gte: number; + price_lte: number; + has_discount?: boolean | undefined; + in_stock?: boolean | undefined; + page: number; +}; + +// composable + +const useGetResellersProducts = (params?: ComputedRef) => { + // state + + const { $axios: axios } = useNuxtApp(); + + // methods + + const handleGetResellersProducts = async (params?: GetResellersProductsFilters) => { + const { data } = await axios.get(`${API_ENDPOINTS.resellers_products.get_all}`, { + params: { + sort: params?.sort, + in_stock: params?.in_stock, + search: params?.search, + has_discount: params?.has_discount, + category: params?.category, + price_gte: params?.price_gte, + price_lte: params?.price_lte, + offset: Number(params?.page) * 15 - 15, + limit: 15, + }, + }); + + return data; + }; + + return useQuery({ + staleTime: 60 * 1000, + queryKey: [QUERY_KEYS.resellers_products, params], + queryFn: () => handleGetResellersProducts(params?.value), + }); +}; + +export default useGetResellersProducts; diff --git a/frontend/constants/index.ts b/frontend/constants/index.ts index 527d3c8..e039ece 100644 --- a/frontend/constants/index.ts +++ b/frontend/constants/index.ts @@ -35,6 +35,10 @@ export const API_ENDPOINTS = { get_all: "/products", categories: "/products/categories", }, + resellers_products: { + get_all: "/products/slider_category", + categories: "/products/slider_categories", + }, tickets: { get_all: "/tickets", create: "/tickets/create", @@ -71,8 +75,10 @@ export const QUERY_KEYS = { chat: "chat", product: "product", products: "products", + resellers_products: "resellers_products", account: "account", categories: "categories", + resellers_categories: "resellers_categories", addresses: "addresses", tickets: "tickets", ticket: "ticket", diff --git a/frontend/pages/category.vue b/frontend/pages/category.vue index 4c6b83d..030f634 100644 --- a/frontend/pages/category.vue +++ b/frontend/pages/category.vue @@ -1,7 +1,7 @@ + + + +