Добавлен компонент CartIcon и обновлены уведомления о добавлении товара в корзину во всех соответствующих компонентах. Изменены стили текста и иконки в уведомлениях для улучшения визуального восприятия.
This commit is contained in:
@ -606,12 +606,11 @@ export default function SearchResult() {
|
||||
return true; // Показываем загружающиеся аналоги
|
||||
}
|
||||
|
||||
const analogOffers = transformOffersForCard(
|
||||
filteredOffers.filter(o => o.isAnalog && o.articleNumber === analog.articleNumber)
|
||||
);
|
||||
// Проверяем, есть ли предложения у аналога
|
||||
const hasInternalOffers = loadedAnalogData.internalOffers && loadedAnalogData.internalOffers.length > 0;
|
||||
const hasExternalOffers = loadedAnalogData.externalOffers && loadedAnalogData.externalOffers.length > 0;
|
||||
|
||||
// Показываем аналог только если у него есть предложения
|
||||
return analogOffers.length > 0;
|
||||
return hasInternalOffers || hasExternalOffers;
|
||||
});
|
||||
|
||||
// Если нет аналогов с предложениями, не показываем секцию
|
||||
@ -625,11 +624,79 @@ export default function SearchResult() {
|
||||
const analogKey = `${analog.brand}-${analog.articleNumber}`;
|
||||
const loadedAnalogData = loadedAnalogs[analogKey];
|
||||
|
||||
const analogOffers = loadedAnalogData
|
||||
? transformOffersForCard(
|
||||
filteredOffers.filter(o => o.isAnalog && o.articleNumber === analog.articleNumber)
|
||||
)
|
||||
: [];
|
||||
// Если данные аналога загружены, формируем предложения из всех его данных
|
||||
const analogOffers = loadedAnalogData ? (() => {
|
||||
const allAnalogOffers: any[] = [];
|
||||
|
||||
// Добавляем внутренние предложения
|
||||
if (loadedAnalogData.internalOffers) {
|
||||
loadedAnalogData.internalOffers.forEach((offer: any) => {
|
||||
allAnalogOffers.push({
|
||||
...offer,
|
||||
type: 'internal',
|
||||
brand: loadedAnalogData.brand,
|
||||
articleNumber: loadedAnalogData.articleNumber,
|
||||
name: loadedAnalogData.name,
|
||||
isAnalog: true,
|
||||
deliveryDuration: offer.deliveryDays
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Добавляем внешние предложения
|
||||
if (loadedAnalogData.externalOffers) {
|
||||
loadedAnalogData.externalOffers.forEach((offer: any) => {
|
||||
allAnalogOffers.push({
|
||||
...offer,
|
||||
type: 'external',
|
||||
brand: offer.brand || loadedAnalogData.brand,
|
||||
articleNumber: offer.code || loadedAnalogData.articleNumber,
|
||||
name: offer.name || loadedAnalogData.name,
|
||||
isAnalog: true,
|
||||
deliveryDuration: offer.deliveryTime
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Применяем фильтры только если они активны
|
||||
const filteredAnalogOffers = allAnalogOffers.filter(offer => {
|
||||
// Фильтр по бренду
|
||||
if (selectedBrands.length > 0 && !selectedBrands.includes(offer.brand)) {
|
||||
return false;
|
||||
}
|
||||
// Фильтр по цене
|
||||
if (priceRange && (offer.price < priceRange[0] || offer.price > priceRange[1])) {
|
||||
return false;
|
||||
}
|
||||
// Фильтр по сроку доставки
|
||||
if (deliveryRange) {
|
||||
const deliveryDays = offer.deliveryDuration;
|
||||
if (deliveryDays < deliveryRange[0] || deliveryDays > deliveryRange[1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Фильтр по количеству наличия
|
||||
if (quantityRange) {
|
||||
const quantity = offer.quantity;
|
||||
if (quantity < quantityRange[0] || quantity > quantityRange[1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Фильтр по поисковой строке
|
||||
if (filterSearchTerm) {
|
||||
const searchTerm = filterSearchTerm.toLowerCase();
|
||||
const brandMatch = offer.brand.toLowerCase().includes(searchTerm);
|
||||
const articleMatch = offer.articleNumber.toLowerCase().includes(searchTerm);
|
||||
const nameMatch = offer.name.toLowerCase().includes(searchTerm);
|
||||
if (!brandMatch && !articleMatch && !nameMatch) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
return transformOffersForCard(filteredAnalogOffers);
|
||||
})() : [];
|
||||
|
||||
return (
|
||||
<CoreProductCard
|
||||
@ -647,20 +714,7 @@ export default function SearchResult() {
|
||||
{(() => {
|
||||
// Проверяем, есть ли еще аналоги с предложениями для загрузки
|
||||
const remainingAnalogs = result.analogs.slice(visibleAnalogsCount);
|
||||
const hasMoreAnalogsWithOffers = remainingAnalogs.some((analog: any) => {
|
||||
const analogKey = `${analog.brand}-${analog.articleNumber}`;
|
||||
const loadedAnalogData = loadedAnalogs[analogKey];
|
||||
|
||||
if (!loadedAnalogData) {
|
||||
return true; // Могут быть предложения у незагруженных аналогов
|
||||
}
|
||||
|
||||
const analogOffers = transformOffersForCard(
|
||||
filteredOffers.filter(o => o.isAnalog && o.articleNumber === analog.articleNumber)
|
||||
);
|
||||
|
||||
return analogOffers.length > 0;
|
||||
});
|
||||
const hasMoreAnalogsWithOffers = remainingAnalogs.length > 0;
|
||||
|
||||
return hasMoreAnalogsWithOffers && (
|
||||
<div className="w-layout-hflex pagination">
|
||||
|
Reference in New Issue
Block a user