mirror of
https://github.com/danilt2000/Alma-vid.git
synced 2025-12-09 19:49:28 +02:00
Refactored the logic for determining when the object card content needs expansion, simplifying the overflow check and improving responsiveness. Updated SCSS to use 'height' instead of 'min-height' for better transitions, adjusted collapsed content max-heights, and enhanced the appearance and behavior of the expand button. Also updated sample addresses in SliderObjects.jsx to include more detailed location information.
125 lines
3.7 KiB
JavaScript
125 lines
3.7 KiB
JavaScript
import React, { useState, useEffect } from "react";
|
||
import Slider from "react-slick";
|
||
import { useMediaQuery } from "react-responsive";
|
||
|
||
import "slick-carousel/slick/slick.css";
|
||
import "slick-carousel/slick/slick-theme.css";
|
||
import "./SliderObjects.scss";
|
||
import { Object } from "../Object/Object";
|
||
import { API_CONFIG } from "../../config/contacts";
|
||
|
||
import objectPicOne from "../../assets/images/apartaments/image-44.jpg";
|
||
import objectPicTwo from "../../assets/images/apartaments/image-45.jpg";
|
||
import objectPicThree from "../../assets/images/apartaments/image-46.jpg";
|
||
|
||
const NextArrow = ({ onClick }) => {
|
||
return (
|
||
<div
|
||
className="slider-objects__arrow slider-objects__arrow_next"
|
||
onClick={onClick}
|
||
></div>
|
||
);
|
||
};
|
||
|
||
const PrevArrow = ({ onClick }) => {
|
||
return (
|
||
<div
|
||
className="slider-objects__arrow slider-objects__arrow_prev"
|
||
onClick={onClick}
|
||
></div>
|
||
);
|
||
};
|
||
|
||
const SliderComponent = () => {
|
||
const [objects, setObjects] = useState([]);
|
||
const [loading, setLoading] = useState(true);
|
||
|
||
const isMobileResolution = useMediaQuery({ maxWidth: 768 });
|
||
|
||
// Загрузка данных с API
|
||
useEffect(() => {
|
||
const fetchObjects = async () => {
|
||
try {
|
||
const response = await fetch(
|
||
API_CONFIG.getFullURL(API_CONFIG.endpoints.rental),
|
||
{
|
||
method: "GET",
|
||
headers: {
|
||
accept: "*/*",
|
||
},
|
||
}
|
||
);
|
||
|
||
if (response.ok) {
|
||
const data = await response.json();
|
||
setObjects(data);
|
||
}
|
||
} catch (error) {
|
||
console.error("Ошибка при загрузке объектов:", error);
|
||
|
||
} finally {
|
||
setLoading(false);
|
||
}
|
||
};
|
||
|
||
fetchObjects();
|
||
}, []);
|
||
|
||
const settings = {
|
||
dots: objects.length > (isMobileResolution ? 1 : 3),
|
||
infinite: objects.length > (isMobileResolution ? 1 : 3),
|
||
speed: 500,
|
||
slidesToShow: isMobileResolution ? 1 : 3,
|
||
slidesToScroll: isMobileResolution ? 1 : 3,
|
||
arrows: true,
|
||
nextArrow: <NextArrow />,
|
||
prevArrow: <PrevArrow />,
|
||
};
|
||
|
||
|
||
if (loading || objects.length === 0) {
|
||
return (
|
||
<div className="slider-objects">
|
||
<Slider {...{ ...settings, dots: false, infinite: true }}>
|
||
<Object
|
||
image={objectPicOne}
|
||
price="2 500 000 ₽"
|
||
desc="2-комн. кв., 47 м², 1/2 этаж"
|
||
address="Челябинская область, Челябинск, Лазурная улица, 14А, район Металлургический, микрорайон Северо-Западный"
|
||
/>
|
||
<Object
|
||
image={objectPicTwo}
|
||
price="4 200 000 ₽"
|
||
desc="3-комн. кв., 77 м², 4/4 этаж"
|
||
address="Челябинская область, Челябинск, улица Ярослава Гашека, 20, район Ленинский, микрорайон Центральный"
|
||
/>
|
||
<Object
|
||
image={objectPicThree}
|
||
price="4 900 000 ₽"
|
||
desc="Квартира-студия, 27,6 м², 19/25 этаж"
|
||
address="Свердловская область, Екатеринбург, улица Студенческая, 80, район Верх-Исетский, микрорайон Уралмаш"
|
||
/>
|
||
</Slider>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
return (
|
||
<div className="slider-objects">
|
||
<Slider {...settings}>
|
||
{objects.map((object) => (
|
||
<Object
|
||
key={object.id}
|
||
image={object.photoUrl}
|
||
price={object.price}
|
||
desc={object.title}
|
||
address={object.address}
|
||
/>
|
||
))}
|
||
</Slider>
|
||
</div>
|
||
);
|
||
};
|
||
|
||
export { SliderComponent };
|