This commit is contained in:
GokaPek 2023-12-25 16:08:33 +04:00
parent 6391a3e109
commit dec9484d3c
4 changed files with 106 additions and 51 deletions

View File

@ -0,0 +1,29 @@
import PropTypes from 'prop-types';
import { Heart } from 'react-bootstrap-icons';
import '../lines/table/LinesTableRow.css';
const Direction = ({ index, line, onAddCart }) => {
const handleAnchorClick = (event, action) => {
event.preventDefault();
action();
};
return (
<tr>
<th scope="row">{index + 1}</th>
<td>{line.book_name}</td>
<td>{line.type.name}</td>
<td>{line.author_name}</td>
<td>{parseFloat(line.price).toFixed(2)}</td>
<td><img src={line.image} id='image' alt={line.book_name} /></td>
<td><a href="#" onClick={(event) => handleAnchorClick(event, onAddCart)}><Heart /></a></td>
</tr>
);
};
Direction.propTypes = {
index: PropTypes.number,
line: PropTypes.object,
onAddCart: PropTypes.func,
};
export default Direction;

View File

@ -0,0 +1,45 @@
import { useState } from 'react';
import TableDirect from './TableDirect.jsx';
import Select from '../input/Select.jsx';
import Direction from './Direction.jsx';
import useLines from '../lines/hooks/LinesHook';
import useCart from '../cart/CartHook';
import Input from '../input/Input.jsx';
import useTypeFilter from '../lines/hooks/LinesFilterHook';
const Directions = () => {
const { types, currentFilter, handleFilterChange } = useTypeFilter();
const { lines } = useLines(currentFilter);
const [searchValue, setSearchValue] = useState('');
const { addToCart } = useCart();
return (
<>
<div className='d-flex justify-content-center m-4'>
<Input className='justify-content-center w-50 mt-2 p-1' name='search' value={searchValue} onChange={(e) => setSearchValue(e.target.value)}
type='text' required />
<Select className='mt-2 p-1' values={types}
value={currentFilter} onChange={handleFilterChange} />
</div>
<div className='justify-content-center'>
<TableDirect>
{
lines.map((line, index) => {
if (searchValue === ''
|| line.book_name?.toLowerCase().includes(searchValue.toLowerCase())
|| line.author?.toLowerCase().includes(searchValue.toLowerCase())) {
return <Direction key={line.id}
index={index}
line={line}
onAddCart={() => addToCart(line)} />;
}
return null;
})
}
</TableDirect>
</div>
</>
);
};
export default Directions;

View File

@ -0,0 +1,27 @@
import PropTypes from 'prop-types';
import { Table } from 'react-bootstrap';
const TableDirect = ({ children }) => {
return (
<Table className='mt-2' striped responsive>
<thead>
<tr>
<th scope='col'></th>
<th scope='col' className='w-25'>Name</th>
<th scope='col' className='w-25'>Category</th>
<th scope='col' className='w-25'>Author</th>
<th scope='col' className='w-25'>Price</th>
</tr>
</thead>
<tbody>
{children}
</tbody >
</Table >
);
};
TableDirect.propTypes = {
children: PropTypes.node,
};
export default TableDirect;

View File

@ -1,57 +1,11 @@
import { import './pages.css';
Form, InputGroup, FormControl, Button, Dropdown, Table, import Directions from '../components/directions/Directions.jsx';
} from 'react-bootstrap';
const Search = () => { const Search = () => {
return ( return (
<Form className="form-inlinecustom-search mx-auto mt-3 pt-5" id="big-search"> <>
<InputGroup> <Directions/>
<FormControl type="search" placeholder="Search" aria-label="Search" className="mb-3" /> </>
<Dropdown >
<Dropdown.Toggle variant="success" id="dropdown-basic" className="mb-3">
Choose category...
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item>1</Dropdown.Item>
<Dropdown.Item>2</Dropdown.Item>
<Dropdown.Item>3</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
<Button variant="outline-success" className="mb-3">Search</Button>
</InputGroup>
<div className="scroll-panel-favour">
<Table striped bordered hover>
<thead>
<tr>
<th>#</th>
<th>Book</th>
<th>Author</th>
<th>Gener</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Capital</td>
<td>Marks K.</td>
<td>Philosofy</td>
</tr>
<tr>
<td>2</td>
<td>Capital</td>
<td>Marks K.</td>
<td>Philosofy</td>
</tr>
<tr>
<td>3</td>
<td>Capital</td>
<td>Marks K.</td>
<td>Philosofy</td>
</tr>
</tbody>
</Table>
</div>
</Form>
); );
}; };