From 2e9ed02722d9b1a7d845b976f20abca12c29e5f4 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Sat, 16 Aug 2025 19:57:22 +0400 Subject: [PATCH] feat: swiper for boards on desktop --- .../components/desktop/Boards/Boards.tsx | 49 ++++---- .../deals/components/shared/Header/Header.tsx | 14 ++- .../dnd/FunnelDnd/FunnelDnd.module.css | 4 +- src/components/dnd/FunnelDnd/FunnelDnd.tsx | 4 +- .../dnd/SortableDnd/SortableDnd.tsx | 113 +++++++++++++----- 5 files changed, 116 insertions(+), 68 deletions(-) diff --git a/src/app/deals/components/desktop/Boards/Boards.tsx b/src/app/deals/components/desktop/Boards/Boards.tsx index 10f848b..b41e9d2 100644 --- a/src/app/deals/components/desktop/Boards/Boards.tsx +++ b/src/app/deals/components/desktop/Boards/Boards.tsx @@ -1,7 +1,7 @@ "use client"; import React from "react"; -import { Group, ScrollArea } from "@mantine/core"; +import { Group } from "@mantine/core"; import Board from "@/app/deals/components/desktop/Board/Board"; import CreateBoardButton from "@/app/deals/components/desktop/CreateBoardButton/CreateBoardButton"; import { useBoardsContext } from "@/app/deals/contexts/BoardsContext"; @@ -24,31 +24,28 @@ const Boards = () => { }; return ( - - - - - - + + + + ); }; diff --git a/src/app/deals/components/shared/Header/Header.tsx b/src/app/deals/components/shared/Header/Header.tsx index c2b6eec..1c9c87f 100644 --- a/src/app/deals/components/shared/Header/Header.tsx +++ b/src/app/deals/components/shared/Header/Header.tsx @@ -28,12 +28,14 @@ const Header = () => { wrap={"nowrap"} pr={"md"}> - - value && setSelectedProject(value)} - /> + + + value && setSelectedProject(value)} + /> + ); }; diff --git a/src/components/dnd/FunnelDnd/FunnelDnd.module.css b/src/components/dnd/FunnelDnd/FunnelDnd.module.css index 6615dc3..72b3f81 100644 --- a/src/components/dnd/FunnelDnd/FunnelDnd.module.css +++ b/src/components/dnd/FunnelDnd/FunnelDnd.module.css @@ -13,7 +13,7 @@ } } -.swiperContainer :global(.swiper-scrollbar-drag) { +.swiper-container :global(.swiper-scrollbar-drag) { @mixin dark { background-color: var(--mantine-color-dark-9); } @@ -22,6 +22,6 @@ } } -.swiperContainer :global(.swiper-slide) { +.swiper-container :global(.swiper-slide) { padding-bottom: 20px; } diff --git a/src/components/dnd/FunnelDnd/FunnelDnd.tsx b/src/components/dnd/FunnelDnd/FunnelDnd.tsx index e6efe15..4861c34 100644 --- a/src/components/dnd/FunnelDnd/FunnelDnd.tsx +++ b/src/components/dnd/FunnelDnd/FunnelDnd.tsx @@ -101,7 +101,7 @@ const FunnelDnd = < return ( = { containerStyle?: CSSProperties; vertical?: boolean; disabled?: boolean; + swiperEnabled?: boolean; }; const SortableDnd = ({ @@ -45,8 +48,9 @@ const SortableDnd = ({ onDragEnd, onItemClick, containerStyle, - vertical, + vertical = false, disabled = false, + swiperEnabled = false, }: Props) => { const [active, setActive] = useState(null); const [items, setItems] = useState([]); @@ -98,6 +102,81 @@ const SortableDnd = ({ setActive(null); }; + const renderWithSwiper = () => ( + + {items.map((item, index) => ( + { + if (!onItemClick) return; + e.stopPropagation(); + onItemClick(item); + }}> + + renderItem(item, renderDraggable) + } + renderDraggable={ + renderDraggable + ? () => renderDraggable(item) + : undefined + } + dragHandleStyle={dragHandleStyle} + /> + + ))} + + ); + + const renderWithFlex = () => ( + + {items.map((item, index) => ( + { + if (!onItemClick) return; + e.stopPropagation(); + onItemClick(item); + }}> + + renderItem(item, renderDraggable) + } + renderDraggable={ + renderDraggable + ? () => renderDraggable(item) + : undefined + } + dragHandleStyle={dragHandleStyle} + /> + + ))} + + ); + return ( ({ - - {items.map((item, index) => ( - { - if (!onItemClick) return; - e.stopPropagation(); - onItemClick(item); - }}> - - renderItem(item, renderDraggable) - } - renderDraggable={ - renderDraggable - ? () => renderDraggable(item) - : undefined - } - dragHandleStyle={dragHandleStyle} - /> - - ))} - + {swiperEnabled ? renderWithSwiper() : renderWithFlex()} {activeItem ? renderItem(activeItem, renderDraggable) : null}