diff --git a/src/components/complexPage/ComplexTopPanel.tsx b/src/components/complexPage/ComplexTopPanel.tsx
index 4632815..e079656 100644
--- a/src/components/complexPage/ComplexTopPanel.tsx
+++ b/src/components/complexPage/ComplexTopPanel.tsx
@@ -11,6 +11,8 @@ import InfoIcon from "../icons/InfoIcon";
import useFullScreen from "../../store/useFullScreen";
import ActiveResizeIcon from "../icons/ActiveResizeIcon";
import useWingSidebar from "../../store/useWingSidebar";
+import { MobileModalWrapper } from "../modals/mobile/MobileModalWrapper";
+import MasterplanFiltersModal from "../modals/mobile/MasterplanFiltersModal";
const ComplexTopPanel = () => {
const { setModal } = useModal();
@@ -26,6 +28,14 @@ const ComplexTopPanel = () => {
setModal();
};
+ const handleOnMobileFiltersClick = () => {
+ setModal(
+
+
+
+ );
+ };
+
const handleOnBackClick = () => {
if (isSidebar) {
setIsSidebar(false);
@@ -60,11 +70,19 @@ const ComplexTopPanel = () => {
onClick={handleOnBackClick}
/>
}
buttonType="primary"
text="Filters"
onClick={handleOnFiltersClick}
/>
+ }
+ buttonType="primary"
+ text="Filters"
+ onClick={handleOnMobileFiltersClick}
+ />
}
buttonType="primary"
diff --git a/src/components/modals/mobile/MasterplanFiltersModal.tsx b/src/components/modals/mobile/MasterplanFiltersModal.tsx
new file mode 100644
index 0000000..756bfb6
--- /dev/null
+++ b/src/components/modals/mobile/MasterplanFiltersModal.tsx
@@ -0,0 +1,165 @@
+import { useContext, useState } from "react";
+import useModal from "../../../store/useModal";
+import Button from "../../Button";
+import CrossIcon from "../../icons/CrossIcon";
+import { MobileModalWrapperContext } from "./MobileModalWrapper";
+import Checkbox from "../../Checkbox";
+import MultiRangeSlider from "../../MultiRangeSlider";
+import Switch from "../../Switch";
+import ResetIcon from "../../icons/ResetIcon";
+import { useSwipeable } from "react-swipeable";
+import {
+ initialCheckboxes,
+ initialSliders,
+ initialSwitchers,
+} from "../../../consts/initialMasterplanFilters";
+
+const MasterplanFiltersModal = () => {
+ const { setModal } = useModal();
+ const { setIsAnimate } = useContext(MobileModalWrapperContext);
+ const [apartmentTypeCheckboxes, setApartmentTypeCheckboxes] =
+ useState(initialCheckboxes);
+ const [switchers, setSwitchers] = useState(initialSwitchers);
+ const [multirangeSliders, setMultirangeSliders] = useState(initialSliders);
+ const handlers = useSwipeable({
+ onSwipedDown: () => handleOnCrossClick(),
+ });
+
+ const handleOnCrossClick = () => {
+ if (setIsAnimate) {
+ setIsAnimate(false);
+ const timeout = setTimeout(() => {
+ setModal(null);
+ clearTimeout(timeout);
+ }, 300);
+ }
+ };
+
+ const handleOnCheckboxApartmentTypeClick = (checkboxId: string) => {
+ const updatedCheckboxes = apartmentTypeCheckboxes.map((cbox) => {
+ if (checkboxId !== cbox.id) return cbox;
+ const isSelected = !cbox.selected;
+
+ return { ...cbox, selected: isSelected };
+ });
+
+ setApartmentTypeCheckboxes(updatedCheckboxes);
+ };
+
+ const handleOnSwitcherClick = (switcherId: string) => {
+ const updatedSwitchers = switchers.map((switcher) => {
+ if (switcherId !== switcher.id) return switcher;
+ const { isSwitched } = switcher;
+
+ return { ...switcher, isSwitched: !isSwitched };
+ });
+
+ setSwitchers(updatedSwitchers);
+ };
+
+ const handleOnSliderValueChange = (
+ sliderId: string,
+ e: [a: number, b: number]
+ ) => {
+ const updatedSliders = multirangeSliders.map((slider) => {
+ if (sliderId !== slider.id) return slider;
+
+ return { ...slider, startValue: e[0], endValue: e[1] };
+ });
+
+ setMultirangeSliders(updatedSliders);
+ };
+
+ const handleOnShowApartmentClick = () => {
+ if (setIsAnimate) {
+ setIsAnimate(false);
+ const timeout = setTimeout(() => {
+ setModal(null);
+ clearTimeout(timeout);
+ }, 300);
+ }
+ };
+
+ const handleOnResetClick = () => {
+ setSwitchers(initialSwitchers);
+ setMultirangeSliders(initialSliders);
+ setApartmentTypeCheckboxes(initialCheckboxes);
+ };
+
+ return (
+
+
+
+ Filters
+
+ }
+ className="text-[#0D1922B2]"
+ onClick={handleOnCrossClick}
+ />
+
+
+
+ Apartment type
+
+
+ {apartmentTypeCheckboxes.map((checkbox) => (
+
+ ))}
+
+
+
+ {multirangeSliders.map((slider) => (
+
+
+
+ {slider.title}
+
+
+ {slider.unit}
+
+
+
+
+ ))}
+
+ {switchers.map((switcher) => (
+
+ ))}
+
+
+
+
195 apartments found
+
}
+ text="Reset filters"
+ buttonType="tertiary"
+ onClick={handleOnResetClick}
+ />
+
+
+
+ );
+};
+
+export default MasterplanFiltersModal;
diff --git a/src/components/modals/mobile/SearchFiltersModal.tsx b/src/components/modals/mobile/SearchFiltersModal.tsx
index 7fdb639..76de6bb 100644
--- a/src/components/modals/mobile/SearchFiltersModal.tsx
+++ b/src/components/modals/mobile/SearchFiltersModal.tsx
@@ -9,6 +9,12 @@ import MultiRangeSlider from "../../MultiRangeSlider";
import Switch from "../../Switch";
import ResetIcon from "../../icons/ResetIcon";
import { useSwipeable } from "react-swipeable";
+import {
+ initialApartmentTypeCheckboxes,
+ initialRoveHomeCheckboxes,
+ initialSliders,
+ initialSwitchers,
+} from "../../../consts/initialSearchFilters";
const SearchFiltersModal = () => {
const { setModal } = useModal();
@@ -93,6 +99,13 @@ const SearchFiltersModal = () => {
}
};
+ const handleOnResetClick = () => {
+ setMultirangeSliders(initialSliders);
+ setApartmentTypeCheckboxes(initialApartmentTypeCheckboxes);
+ setRoveHomeTypeCheckboxes(initialRoveHomeCheckboxes);
+ setSwitchers(initialSwitchers);
+ };
+
return (
{
icon={}
text="Reset filters"
buttonType="tertiary"
+ onClick={handleOnResetClick}
/>