added sorting2

This commit is contained in:
@jcarymuhammedow
2026-04-18 12:10:38 +05:00
parent a2298dfa9c
commit 76c819848b
4 changed files with 99 additions and 41 deletions

View File

@@ -32,12 +32,24 @@ export const brandsApi = baseApi.injectEndpoints({
return `/brands/${params}/products`; return `/brands/${params}/products`;
} }
const { id, page = 1, limit } = params; const { id, page = 1, limit, sorting, min_price, max_price, brands } = params;
let url = `/brands/${id}/products?page=${page}`; let url = `/brands/${id}/products?page=${page}`;
if (limit) { if (limit) {
url += `&limit=${limit}`; url += `&limit=${limit}`;
} }
if (sorting) {
url += `&sorting=${encodeURIComponent(sorting)}`;
}
if (min_price) {
url += `&min_price=${encodeURIComponent(min_price)}`;
}
if (max_price) {
url += `&max_price=${encodeURIComponent(max_price)}`;
}
if (brands) {
url += `&brands=${encodeURIComponent(brands)}`;
}
return url; return url;
}, },

View File

@@ -19,7 +19,7 @@ const CategoryFilters = ({
onBrandSelect, onBrandSelect,
onBrandDeselect, onBrandDeselect,
onBrandSearchChange, onBrandSearchChange,
sorting = "price_amount-descending", sorting = "",
onSortingChange = () => {}, onSortingChange = () => {},
className, className,
}) => { }) => {
@@ -35,8 +35,14 @@ const CategoryFilters = ({
]; ];
const handlePricePreset = (preset) => { const handlePricePreset = (preset) => {
onMinPriceChange(preset.min.toString()); // Eğer zaten aktifse, sıfırla
onMaxPriceChange(preset.max.toString()); if (minPrice === preset.min.toString() && maxPrice === preset.max.toString()) {
onMinPriceChange("");
onMaxPriceChange("");
} else {
onMinPriceChange(preset.min.toString());
onMaxPriceChange(preset.max.toString());
}
}; };
const sortOptions = [ const sortOptions = [
@@ -173,8 +179,12 @@ const CategoryFilters = ({
key={option.value} key={option.value}
className={`${styles.sortingBtn} ${sorting === option.value ? styles.activeSorting : ""}`} className={`${styles.sortingBtn} ${sorting === option.value ? styles.activeSorting : ""}`}
onClick={() => onSortingChange(option.value)} onClick={() => onSortingChange(option.value)}
aria-pressed={sorting === option.value}
> >
{option.label} {option.label}
{sorting === option.value && (
<span style={{ marginLeft: 4, fontWeight: "bold" }}></span>
)}
</button> </button>
))} ))}
</div> </div>

View File

@@ -29,7 +29,7 @@ const CategoryPage = () => {
currentPage: 1, currentPage: 1,
minPrice: "", minPrice: "",
maxPrice: "", maxPrice: "",
sorting: "price_amount-ascending", sorting: "",
}); });
const [filterState, setFilterState] = useState({ const [filterState, setFilterState] = useState({
@@ -314,22 +314,31 @@ const CategoryPage = () => {
minPrice={pageState.minPrice} minPrice={pageState.minPrice}
maxPrice={pageState.maxPrice} maxPrice={pageState.maxPrice}
onMinPriceChange={(value) => { onMinPriceChange={(value) => {
setPageState((prev) => ({ setPageState((prev) => {
...prev, // Sadece aktif bir değer girilirse ürünleri sıfırla
minPrice: value, if (value !== "") {
currentPage: 1, setAllProducts([]);
})); setHasMore(true);
setAllProducts([]); }
setHasMore(true); return {
...prev,
minPrice: value,
currentPage: 1,
};
});
}} }}
onMaxPriceChange={(value) => { onMaxPriceChange={(value) => {
setPageState((prev) => ({ setPageState((prev) => {
...prev, if (value !== "") {
maxPrice: value, setAllProducts([]);
currentPage: 1, setHasMore(true);
})); }
setAllProducts([]); return {
setHasMore(true); ...prev,
maxPrice: value,
currentPage: 1,
};
});
}} }}
onCategorySelect={handleFilterCategorySelect} onCategorySelect={handleFilterCategorySelect}
onCategoryDeselect={handleFilterCategoryDeselect} onCategoryDeselect={handleFilterCategoryDeselect}
@@ -340,9 +349,19 @@ const CategoryPage = () => {
} }
sorting={pageState.sorting} sorting={pageState.sorting}
onSortingChange={(value) => { onSortingChange={(value) => {
setPageState((prev) => ({ ...prev, sorting: value, currentPage: 1 })); setPageState((prev) => {
setAllProducts([]); const newSorting = prev.sorting === value ? "" : value;
setHasMore(true); // Sadece aktif bir sort seçilirse ürünleri sıfırla
if (newSorting !== "") {
setAllProducts([]);
setHasMore(true);
}
return {
...prev,
sorting: newSorting,
currentPage: 1,
};
});
}} }}
/> />
</Drawer> </Drawer>
@@ -358,22 +377,30 @@ const CategoryPage = () => {
minPrice={pageState.minPrice} minPrice={pageState.minPrice}
maxPrice={pageState.maxPrice} maxPrice={pageState.maxPrice}
onMinPriceChange={(value) => { onMinPriceChange={(value) => {
setPageState((prev) => ({ setPageState((prev) => {
...prev, if (value !== "") {
minPrice: value, setAllProducts([]);
currentPage: 1, setHasMore(true);
})); }
setAllProducts([]); return {
setHasMore(true); ...prev,
minPrice: value,
currentPage: 1,
};
});
}} }}
onMaxPriceChange={(value) => { onMaxPriceChange={(value) => {
setPageState((prev) => ({ setPageState((prev) => {
...prev, if (value !== "") {
maxPrice: value, setAllProducts([]);
currentPage: 1, setHasMore(true);
})); }
setAllProducts([]); return {
setHasMore(true); ...prev,
maxPrice: value,
currentPage: 1,
};
});
}} }}
onCategorySelect={handleFilterCategorySelect} onCategorySelect={handleFilterCategorySelect}
onCategoryDeselect={handleFilterCategoryDeselect} onCategoryDeselect={handleFilterCategoryDeselect}
@@ -384,9 +411,18 @@ const CategoryPage = () => {
} }
sorting={pageState.sorting} sorting={pageState.sorting}
onSortingChange={(value) => { onSortingChange={(value) => {
setPageState((prev) => ({ ...prev, sorting: value, currentPage: 1 })); setPageState((prev) => {
setAllProducts([]); const newSorting = prev.sorting === value ? "" : value;
setHasMore(true); if (newSorting) {
setAllProducts([]);
setHasMore(true);
}
return {
...prev,
sorting: newSorting,
currentPage: 1,
};
});
}} }}
/> />

View File

@@ -11,12 +11,12 @@ const DeliveryTerms = () => {
<p>Eltip bermek hyzmaty Aşgabat şäheriniň çägi bilen bir hatarda Büzmeýine we Änew şäherine hem elýeterlidir;</p> <p>Eltip bermek hyzmaty Aşgabat şäheriniň çägi bilen bir hatarda Büzmeýine we Änew şäherine hem elýeterlidir;</p>
</div> </div>
<div className={styles.termItem}> {/* <div className={styles.termItem}>
<p> <p>
Sargydyň iň pes çägi <span className={styles.highlight}>50 manat</span> bolmaly; Sargydyň iň pes çägi <span className={styles.highlight}>50 manat</span> bolmaly;
sargydyňyz <span className={styles.highlight}>150 manatdan</span> geçse eltip bermek hyzmaty mugt; sargydyňyz <span className={styles.highlight}>150 manatdan</span> geçse eltip bermek hyzmaty mugt;
</p> </p>
</div> </div> */}
<div className={styles.termItem}> <div className={styles.termItem}>
<p>Saýtdan sargyt edeniňizden soňra operator size jaň edip sargyt tassyklar (eger hemişelik müşderi bolsaňyz sargytlaryňyz islegiňize göra awtomatik usulda hem tassyklanýar);</p> <p>Saýtdan sargyt edeniňizden soňra operator size jaň edip sargyt tassyklar (eger hemişelik müşderi bolsaňyz sargytlaryňyz islegiňize göra awtomatik usulda hem tassyklanýar);</p>