added price filter, changed mobile filter ui

This commit is contained in:
@jcarymuhammedow
2026-02-25 20:31:49 +05:00
parent 53346b5a7b
commit 4e58062899
16 changed files with 530 additions and 536 deletions

View File

@@ -72,7 +72,7 @@ const customBaseQuery = async (args, api, extraOptions) => {
"Content-Type": "application/json",
"Api-Token": import.meta.env.VITE_API_TOKEN || "hello-mf-s",
},
}
},
);
const data = await guestTokenResponse.json();
@@ -120,5 +120,6 @@ const customBaseQuery = async (args, api, extraOptions) => {
export const baseApi = createApi({
reducerPath: "api",
baseQuery: customBaseQuery,
tagTypes: ["Favorites", "cartItems", "Orders"],
endpoints: () => ({}),
});

View File

@@ -25,20 +25,20 @@ export const brandsApi = baseApi.injectEndpoints({
query: (brandId) => `/brands/${brandId}`,
transformResponse: (response) => response.data || response,
}),
getBrandProducts: builder.query({
query: (params) => {
if (typeof params === 'string' || typeof params === 'number') {
return `/brands/${params}/products`;
}
const { id, page = 1, limit } = params;
let url = `/brands/${id}/products?page=${page}`;
if (limit) {
url += `&limit=${limit}`;
}
return url;
},
transformResponse: (response) => ({

View File

@@ -1,29 +1,36 @@
// hooks/useCart.js - YENİ DOSYA
import { useMemo } from 'react';
import { useGetCartQuery } from './cartApi';
// hooks/useCart.js
import { useMemo } from "react";
import { useGetCartQuery } from "./cartApi";
export const useCart = () => {
const { data: cartData, ...rest } = useGetCartQuery(undefined, {
const queryResult = useGetCartQuery(undefined, {
pollingInterval: 0,
refetchOnMountOrArgChange: false,
refetchOnMountOrArgChange: false, // Cache'den kullan, gereksiz GET'i engelle
refetchOnFocus: false,
refetchOnReconnect: false,
});
const { data: response = {} } = queryResult;
const cartData = response.data || {};
const cartItems = useMemo(() => {
if (!cartData?.data || typeof cartData.data !== 'object') return [];
return Object.values(cartData.data).flat();
if (!cartData || typeof cartData !== "object") return [];
return Object.values(cartData).flat();
}, [cartData]);
const cartCount = useMemo(() => {
return cartItems.reduce((total, item) => {
return total + (parseInt(item.product_quantity, 10) || 0);
const qty = parseInt(item.product_quantity, 10) || 0;
return total + qty;
}, 0);
}, [cartItems]);
const getCartItem = (productId) => {
if (!productId) return null;
const pid = String(productId);
return cartItems.find(
item => item.product?.id === productId || item.product_id === productId
(item) =>
String(item.product?.id) === pid || String(item.product_id) === pid,
);
};
@@ -32,6 +39,6 @@ export const useCart = () => {
cartItems,
cartCount,
getCartItem,
...rest
...queryResult,
};
};
};

View File

@@ -1,55 +1,12 @@
import { configureStore } from "@reduxjs/toolkit";
import { baseApi } from "./api/baseApi";
import { categoriesApi } from "./api/categories";
import { searchApi } from "./api/searchApi";
import { cartApi } from "./api/cartApi";
import { brandsApi } from "./api/brandsApi";
import { collectionsApi } from "./api/collectionsApi";
import { favoritesApi } from "./api/favoritesApi";
import { legalPagesApi } from "./api/legalPagesApi";
import { locationApi } from "./api/locationApi";
import { orderApi } from "./api/orderApi";
import { mediaApi } from "./api/bannersApi";
import { reviewsApi } from "./api/reviewApi";
import { profileApi } from "./api/myProfileApi";
import { contactApi } from "./api/contactUs";
import { filtersApi } from "./api/filtersApi";
const store = configureStore({
reducer: {
[baseApi.reducerPath]: baseApi.reducer,
[categoriesApi.reducerPath]: categoriesApi.reducer,
[searchApi.reducerPath]: searchApi.reducer,
[cartApi.reducerPath]: cartApi.reducer,
[brandsApi.reducerPath]: brandsApi.reducer,
[collectionsApi.reducerPath]: collectionsApi.reducer,
[favoritesApi.reducerPath]: favoritesApi.reducer,
[legalPagesApi.reducerPath]: legalPagesApi.reducer,
[locationApi.reducerPath]: locationApi.reducer,
[orderApi.reducerPath]: orderApi.reducer,
[mediaApi.reducerPath]: mediaApi.reducer,
[reviewsApi.reducerPath]: reviewsApi.reducer,
[profileApi.reducerPath]: profileApi.reducer,
[contactApi.reducerPath]: contactApi.reducer,
[filtersApi.reducerPath]: filtersApi.reducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(
baseApi.middleware,
categoriesApi.middleware,
searchApi.middleware,
brandsApi.middleware,
collectionsApi.middleware,
favoritesApi.middleware,
legalPagesApi.middleware,
locationApi.middleware,
orderApi.middleware,
reviewsApi.middleware,
mediaApi.middleware,
profileApi.middleware,
contactApi.middleware,
filtersApi.middleware
),
getDefaultMiddleware().concat(baseApi.middleware),
});
export default store;