@@ -21,11 +21,14 @@ import { selectDataAllInjuries } from "../../stores/casualty/casualtySlice";
2121import AccidentColumns from './AccidentColumns' ;
2222import PaginationControls from './PaginationControls' ;
2323import './detailesTable.css' ;
24+ import TableView from './TableView' ;
25+ import AccidentDetailsCard from './AccidentDetailsCard' ;
2426
2527interface IProps { }
2628
2729const AccidentsTable : React . FC < IProps > = ( ) => {
2830 const { t } = useTranslation ( ) ;
31+ const [ isSmallScreen , setIsSmallScreen ] = useState ( window . innerWidth < 600 ) ;
2932 const dataAllInjuries = useSelector ( selectDataAllInjuries ) as Accident [ ] ;
3033
3134 const [ data , setData ] = React . useState ( ( ) => [ ...dataAllInjuries ] ) ;
@@ -37,27 +40,15 @@ const AccidentsTable: React.FC<IProps> = () => {
3740 setData ( [ ...dataAllInjuries ] ) ;
3841 } , [ dataAllInjuries ] ) ;
3942
40- const allColumnsDef = React . useMemo ( ( ) => AccidentColumns ( t ) , [ t ] ) ;
41-
42- // Function to handle dynamic column layout based on window width
43- const getColumnsByWidth = ( width : number , columns : ColumnDef < Accident > [ ] ) => {
44- // Adjust logic based on width to modify columns visibility or configuration
45- if ( width < 600 ) {
46- // Example: return a smaller subset of columns for small screens
47- return columns . slice ( 0 , 4 ) ; // Adjust based on your logic
48- }
49- return columns ; // Default to all columns for larger screens
50- } ;
51-
52- const [ columns , setColumns ] = useState ( ( ) => getColumnsByWidth ( window . innerWidth , allColumnsDef ) ) ;
5343 useEffect ( ( ) => {
5444 const handleResize = ( ) => {
55- setColumns ( getColumnsByWidth ( window . innerWidth , allColumnsDef ) ) ;
45+ setIsSmallScreen ( window . innerWidth < 600 ) ;
5646 } ;
5747 window . addEventListener ( 'resize' , handleResize ) ;
5848 return ( ) => window . removeEventListener ( 'resize' , handleResize ) ;
5949 } , [ ] ) ;
6050
51+ const columns = React . useMemo ( ( ) => AccidentColumns ( t ) , [ t ] ) ;
6152 const table = useReactTable ( {
6253 columns,
6354 data,
@@ -79,51 +70,15 @@ const AccidentsTable: React.FC<IProps> = () => {
7970
8071 return (
8172 < Card className = "m-1 p-0 border-0" >
82- < TableBootstrap striped bordered hover className = "table-container" >
83- < thead >
84- { table . getHeaderGroups ( ) . map ( headerGroup => (
85- < tr key = { headerGroup . id } >
86- { headerGroup . headers . map ( header => (
87- < th key = { header . id } colSpan = { header . colSpan } >
88- < div
89- { ...{
90- className : header . column . getCanSort ( )
91- ? 'cursor-pointer select-none'
92- : '' ,
93- onClick : header . column . getToggleSortingHandler ( ) ,
94- } }
95- >
96- { flexRender ( header . column . columnDef . header , header . getContext ( ) ) }
97- { {
98- asc : ' 🔼' ,
99- desc : ' 🔽' ,
100- } [ header . column . getIsSorted ( ) as string ] ?? null }
101- { header . column . getCanFilter ( ) ? (
102- < div className = "d-flex align-items-center gap-1 filter-container" >
103- < DetailsTableFilter column = { header . column } table = { table } />
104- </ div >
105- ) : null }
106- </ div >
107- </ th >
108- ) ) }
109- </ tr >
110- ) ) }
111- </ thead >
112- < tbody className = "table-body" >
113- { table . getRowModel ( ) . rows . map ( row => (
114- < tr key = { row . id } >
115- { row . getVisibleCells ( ) . map ( cell => (
116- < td key = { cell . id } >
117- { flexRender ( cell . column . columnDef . cell , cell . getContext ( ) ) }
118- </ td >
119- ) ) }
120- </ tr >
121- ) ) }
122- </ tbody >
123- </ TableBootstrap >
124-
73+ < Card . Body >
74+ { isSmallScreen ? (
75+ < AccidentDetailsCard table = { table } />
76+ ) : (
77+ < TableView table = { table } />
78+ ) }
79+ </ Card . Body >
12580 < Card . Footer className = "bg-white p-2" >
126- < div className = "d-flex flex-wrap align-items-center gap-2" >
81+ < div className = "d-flex flex-wrap align-items-center gap-2" >
12782 < PaginationControls table = { table } />
12883 < Button onClick = { onExportClick } className = "export-btn" >
12984 { t ( 'export-to-csv' ) }
0 commit comments