import { useEffect, useRef, useState } from "react"; import { Box, useTheme, useMediaQuery } from "@mui/material"; import { DataGrid } from "@mui/x-data-grid"; import { scrollBlock } from "@root/utils/scrollBlock"; import forwardIcon from "@root/assets/icons/forward.svg"; import type { ChangeEvent } from "react"; import type { GridColDef } from "@mui/x-data-grid"; const COLUMNS: GridColDef[] = [ { field: "date", headerName: "Дата", minWidth: 130, maxWidth: 200, flex: 1, sortable: false, }, { field: "time", headerName: "Время", minWidth: 90, maxWidth: 180, flex: 1, sortable: false, }, { field: "product", headerName: "Товар", minWidth: 200, maxWidth: 280, flex: 1, sortable: false, }, { field: "amount", headerName: "Кол-во", minWidth: 70, maxWidth: 70, flex: 1, sortable: false, }, ]; const ROWS = [ { id: "row_1", date: "19.02.2023", time: "17:01", product: "Шаблонизатор", amount: "1 шт.", }, { id: "row_2", date: "28.02.2023", time: "10:43", product: "Шаблонизатор", amount: "1 шт.", }, { id: "row_3", date: "04.03.2023", time: "21:09", product: "Сокращатель ссылок", amount: "2 шт.", }, ]; export const PurchaseTab = () => { const [canScrollToRight, setCanScrollToRight] = useState(true); const [canScrollToLeft, setCanScrollToLeft] = useState(false); const theme = useTheme(); const smallScreen = useMediaQuery(theme.breakpoints.down(830)); const gridContainer = useRef(null); useEffect(() => { const handleScroll = (nativeEvent: unknown) => { const { target } = nativeEvent as ChangeEvent; if (target.scrollLeft > 0) { setCanScrollToLeft(true); } else { setCanScrollToLeft(false); } if (target.clientWidth + target.scrollLeft >= target.scrollWidth - 1) { setCanScrollToRight(false); } else { setCanScrollToRight(true); } }; const addScrollEvent = () => { const grid = gridContainer.current?.querySelector( ".MuiDataGrid-virtualScroller" ); if (grid) { grid.addEventListener("scroll", handleScroll); return; } setTimeout(addScrollEvent, 100); }; addScrollEvent(); return () => { const grid = gridContainer.current?.querySelector( ".MuiDataGrid-virtualScroller" ); grid?.removeEventListener("scroll", handleScroll); }; }, []); const scrollDataGrid = (toStart = false) => { const grid = gridContainer.current?.querySelector( ".MuiDataGrid-virtualScroller" ); if (grid) { scrollBlock(grid, { left: toStart ? 0 : grid.scrollWidth }); } }; return ( {smallScreen && ( {canScrollToLeft && ( scrollDataGrid(true)} > forward )} {canScrollToRight && ( scrollDataGrid(false)} > forward )} )} ); };