Advertisement
NathanielBumpp0

Test

May 19th, 2025 (edited)
506
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useEffect, useCallback } from 'react';
  2.  
  3. function Dashboard() {
  4.   const [a, setA] = useState('');
  5.   const [b, setB] = useState(false);
  6.   const [c, setC] = useState([]);
  7.   const [d, setD] = useState(null);
  8.   const [e, setE] = useState('');
  9.   const [f, setF] = useState(0);
  10.   const [g, setG] = useState({});
  11.  
  12.   useEffect(() => {
  13.     setB(true);
  14.     fetch('/api/items')
  15.       .then(res => res.json())
  16.       .then(json => {
  17.         setC(json.data);
  18.         setB(false);
  19.       })
  20.       .catch(err => {
  21.         console.log(err);
  22.         setB(false);
  23.       });
  24.   }, []);
  25.  
  26.   useEffect(() => {
  27.     fetch('/api/user')
  28.       .then(res => res.json())
  29.       .then(u => setG(u))
  30.       .catch(console.error);
  31.   }, []);
  32.  
  33.   const handleClick = useCallback((item) => {
  34.     setD(item);
  35.     setE(item.name);
  36.   }, []);
  37.  
  38.   const handleChange = useCallback((evt) => {
  39.     setA(evt.target.value);
  40.     console.log('filter changed');
  41.   }, []);
  42.  
  43.   const doSomething = () => {
  44.     let sum = 0;
  45.     for (let i = 0; i < c.length; i++) {
  46.       sum += c[i].value;
  47.     }
  48.     setF(sum);
  49.   };
  50.  
  51.   return (
  52.     <div style={{ padding: '20px' }}>
  53.       <h1>Dashboard</h1>
  54.       {b ? <p>loading...</p> : (
  55.         <>
  56.           <div style={{ marginBottom: '10px' }}>
  57.             <input
  58.               value={a}
  59.               onChange={handleChange}
  60.               placeholder="Фильтр по имени..."
  61.             />
  62.             <button onClick={doSomething}>Сумма: {f}</button>
  63.             <button onClick={() => setC([])}>Очистить список</button>
  64.           </div>
  65.           <ul>
  66.             {c.filter(item => {
  67.               if (!item.name.toLowerCase().includes(a.toLowerCase())) return false;
  68.               return true;
  69.             }).map((item, idx) => (
  70.               <li key={idx} style={{ cursor: 'pointer' }} onClick={() => handleClick(item)}>
  71.                 <strong>{item.name}</strong> - <span>{item.value}</span> - {item.active ? 'ON' : 'OFF'}
  72.                 {item.details && <div>{item.details.info}</div>}
  73.               </li>
  74.             ))}
  75.           </ul>
  76.           {d && (
  77.             <div style={{ border: '1px solid #000', padding: '10px' }}>
  78.               <h2>Selected Item</h2>
  79.               <p>Name: {d.name}</p>
  80.               <p>Description: {d.details ? d.details.desc : 'N/A'}</p>
  81.               <p>User: {g.username}</p>
  82.               <input
  83.                 value={e}
  84.                 onChange={evt => setE(evt.target.value)}
  85.               />
  86.               <button onClick={() => console.log('saved', e)}>Save</button>
  87.             </div>
  88.           )}
  89.           {c.length === 0 && <p>Нет элементов</p>}
  90.         </>
  91.       )}
  92.     </div>
  93.   );
  94. }
  95.  
  96. export default Dashboard;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement