forked from Transparency/kgroad-frontend2
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| "use client";
 | ||
| 
 | ||
| import "./StatisticsTable.scss";
 | ||
| import Image from "next/image";
 | ||
| import arrow_down_icon from "./icons/arrow-down-icon.svg";
 | ||
| import arrow_up_icon from "./icons/arrow-up-icon.svg";
 | ||
| import Link from "next/link";
 | ||
| import chevron_down from "./icons/chevron-down.svg";
 | ||
| import { useStatistics } from "./statistics.store";
 | ||
| import { useEffect, useState } from "react";
 | ||
| 
 | ||
| const StatisticsTable = () => {
 | ||
|   const [location, setLocation] = useState("village");
 | ||
|   const [locationMenu, setLocationMenu] = useState(false);
 | ||
|   const { data, getStatistics } = useStatistics();
 | ||
| 
 | ||
|   const locations = [
 | ||
|     { id: 1, name: "Регион", type: "state" },
 | ||
|     { id: 2, name: "Город", type: "city" },
 | ||
|     { id: 3, name: "Деревня", type: "village" },
 | ||
|   ];
 | ||
| 
 | ||
|   useEffect(() => {
 | ||
|     getStatistics();
 | ||
|   }, []);
 | ||
| 
 | ||
|   return (
 | ||
|     <div className="statistics-table">
 | ||
|       {locationMenu && (
 | ||
|         <ul
 | ||
|           onClick={(e) => e.stopPropagation()}
 | ||
|           className="statistics-table__location"
 | ||
|         >
 | ||
|           {locations.map((loc) => (
 | ||
|             <li
 | ||
|               key={loc.id}
 | ||
|               id={
 | ||
|                 location === loc.type
 | ||
|                   ? "statistics-table__location_active"
 | ||
|                   : ""
 | ||
|               }
 | ||
|             >
 | ||
|               <button
 | ||
|                 onClick={() => {
 | ||
|                   setLocation(loc.type);
 | ||
|                   getStatistics(loc.type);
 | ||
|                   setLocationMenu(false);
 | ||
|                 }}
 | ||
|               >
 | ||
|                 {loc.name}
 | ||
|               </button>
 | ||
|             </li>
 | ||
|           ))}
 | ||
|         </ul>
 | ||
|       )}
 | ||
|       <div className="statistics-table__wrapper">
 | ||
|         <table cellSpacing={0}>
 | ||
|           <thead>
 | ||
|             <tr>
 | ||
|               <th
 | ||
|                 tabIndex={1}
 | ||
|                 onClick={() => setLocationMenu((prev) => !prev)}
 | ||
|               >
 | ||
|                 <div>
 | ||
|                   Город
 | ||
|                   <Image src={chevron_down} alt="Chevron Icon" />
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   Добавлено дорог
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   Локальных дефектов
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   Очагов аварийности
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   Локальных дефектов исправлено
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   В планах ремонта
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|               <th tabIndex={1}>
 | ||
|                 <div className="statistics-table__header">
 | ||
|                   Отремонтировано
 | ||
|                   <div>
 | ||
|                     <Image
 | ||
|                       src={arrow_down_icon}
 | ||
|                       alt="Arrow Down Icon"
 | ||
|                     />
 | ||
|                     <Image src={arrow_up_icon} alt="Arrow Up Icon" />
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </th>
 | ||
|             </tr>
 | ||
|           </thead>
 | ||
| 
 | ||
|           <tbody>
 | ||
|             {data.length !== 0 ? (
 | ||
|               data.map((statistic) => (
 | ||
|                 <tr>
 | ||
|                   <td>{statistic.name}</td>
 | ||
|                   <td>{statistic.broken_road_1}</td>
 | ||
|                   <td>{statistic.local_defect_3}</td>
 | ||
|                   <td>{statistic.hotbed_of_accidents_2}</td>
 | ||
|                   <td>{statistic.local_defect_fixed_6}</td>
 | ||
|                   <td>{statistic.repair_plans_4}</td>
 | ||
|                   <td>{statistic.repaired_5}</td>
 | ||
|                 </tr>
 | ||
|               ))
 | ||
|             ) : (
 | ||
|               <tr>
 | ||
|                 <td style={{ textAlign: "center" }} colSpan={7}>
 | ||
|                   Looks like there is no data for {location}
 | ||
|                 </td>
 | ||
|               </tr>
 | ||
|             )}
 | ||
|           </tbody>
 | ||
|         </table>
 | ||
|       </div>
 | ||
|     </div>
 | ||
|   );
 | ||
| };
 | ||
| 
 | ||
| export default StatisticsTable;
 |