From 98fe38ecb479a53fa3822918f5fe4f1132fde61a Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav <r.z.8102.80@gmail.com> Date: Tue, 5 Dec 2023 00:10:23 +0400 Subject: [PATCH] lab4 some minor fixes --- .../src/components/navigation/Navigation.jsx | 6 +-- ReactLibrary/src/main.jsx | 11 +++++ ReactLibrary/src/pages/AuthorEdit.jsx | 2 +- ReactLibrary/src/pages/BookEdit.jsx | 2 +- ReactLibrary/src/pages/CategoryEdit.jsx | 2 +- ReactLibrary/src/pages/MainPage.jsx | 2 +- ReactLibrary/src/pages/SearchForm.jsx | 45 +++++++++++++++++++ ReactLibrary/src/pages/SearchResults.jsx | 28 ++++++++++++ 8 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 ReactLibrary/src/pages/SearchForm.jsx create mode 100644 ReactLibrary/src/pages/SearchResults.jsx diff --git a/ReactLibrary/src/components/navigation/Navigation.jsx b/ReactLibrary/src/components/navigation/Navigation.jsx index 46470e4..be61903 100644 --- a/ReactLibrary/src/components/navigation/Navigation.jsx +++ b/ReactLibrary/src/components/navigation/Navigation.jsx @@ -10,7 +10,7 @@ const Navigation = ({ routes }) => { const pages = routes.filter((route) => Object.prototype.hasOwnProperty.call(route, 'title')); return ( <header> - <Navbar expand='md' bg='light' data-bs-theme='light' className='my-navbar'> + <Navbar expand='lg' bg='light' data-bs-theme='light' className='my-navbar'> <Container fluid> <Navbar.Brand as={Link} to={indexPageLink?.path ?? '/'} className='logo'> <BookHalf className='d-inline-block align-top me-1 logoImage' /> @@ -18,7 +18,7 @@ const Navigation = ({ routes }) => { </Navbar.Brand> <Navbar.Toggle aria-controls='main-navbar' /> <Navbar.Collapse id='main-navbar'> - <Nav className='me-auto link' activeKey={location.pathname}> + <Nav className='ms-auto link' activeKey={location.pathname}> { pages.map((page) => <Nav.Link as={Link} key={page.path} eventKey={page.path} to={page.path ?? '/'}> @@ -28,7 +28,7 @@ const Navigation = ({ routes }) => { </Nav> </Navbar.Collapse> </Container> - </Navbar > + </Navbar> </header> ); }; diff --git a/ReactLibrary/src/main.jsx b/ReactLibrary/src/main.jsx index b4e60ba..329c988 100644 --- a/ReactLibrary/src/main.jsx +++ b/ReactLibrary/src/main.jsx @@ -18,6 +18,8 @@ import LoginPage from './pages/LoginPage.jsx'; import BookEdit from './pages/BookEdit.jsx'; import CategoryEdit from './pages/CategoryEdit.jsx'; import AuthorEdit from './pages/AuthorEdit.jsx'; +import SearchForm from './pages/SearchForm.jsx'; +import SearchResults from './pages/SearchResults.jsx'; const routes = [ { @@ -36,6 +38,11 @@ const routes = [ element: <UserPage/>, title: 'Личный кабинет', }, + { + path: '/search-form', + element: <SearchForm/>, + title: 'Поиск', + }, { path: '/admin-page', element: <AdminPage/>, @@ -76,6 +83,10 @@ const routes = [ path: '/author-edit', element: <AuthorEdit/>, }, + { + path: '/search-results', + element: <SearchResults/>, + }, ]; const router = createBrowserRouter([ diff --git a/ReactLibrary/src/pages/AuthorEdit.jsx b/ReactLibrary/src/pages/AuthorEdit.jsx index e6db72d..4d52c6b 100644 --- a/ReactLibrary/src/pages/AuthorEdit.jsx +++ b/ReactLibrary/src/pages/AuthorEdit.jsx @@ -49,7 +49,7 @@ const AuthorEdit = () => { </Form.Group> <div className="d-grid gap-2 mt-4 d-md-flex justify-content-md-center"> <Button className="lib-btn" onClick={() => navigate(-1)}>Назад</Button> - <Button className="lib-btn" type="submit" variant="primary">Сохранить</Button> + <Button className="lib-btn" type="submit">Сохранить</Button> </div> </Form> </> diff --git a/ReactLibrary/src/pages/BookEdit.jsx b/ReactLibrary/src/pages/BookEdit.jsx index 69b3da8..703aaf4 100644 --- a/ReactLibrary/src/pages/BookEdit.jsx +++ b/ReactLibrary/src/pages/BookEdit.jsx @@ -46,7 +46,7 @@ const BookEdit = () => { </Form.Group> <div className="d-grid gap-2 mt-4 d-md-flex justify-content-md-center"> <Button className="lib-btn" onClick={() => navigate(-1)}>Назад</Button> - <Button className="lib-btn" type="submit" variant="primary">Сохранить</Button> + <Button className="lib-btn" type="submit">Сохранить</Button> </div> </Form> </> diff --git a/ReactLibrary/src/pages/CategoryEdit.jsx b/ReactLibrary/src/pages/CategoryEdit.jsx index 7e0c5b5..f9a327e 100644 --- a/ReactLibrary/src/pages/CategoryEdit.jsx +++ b/ReactLibrary/src/pages/CategoryEdit.jsx @@ -29,7 +29,7 @@ const CategoryEdit = () => { </Form.Group> <div className="d-grid gap-2 mt-4 d-md-flex justify-content-md-center"> <Button className="lib-btn" onClick={() => navigate(-1)}>Назад</Button> - <Button className="lib-btn" type="submit" variant="primary">Сохранить</Button> + <Button className="lib-btn" type="submit">Сохранить</Button> </div> </Form> </> diff --git a/ReactLibrary/src/pages/MainPage.jsx b/ReactLibrary/src/pages/MainPage.jsx index bdddfe1..4baf3c4 100644 --- a/ReactLibrary/src/pages/MainPage.jsx +++ b/ReactLibrary/src/pages/MainPage.jsx @@ -16,7 +16,7 @@ const MainPage = () => { </p> <div className="d-grid gap-2 mt-2 d-md-flex justify-content-md-start"> <Button as={Link} to="/user-page" className='lib-btn'>Личный кабинет</Button> - <Button as={Link} to="/search" className='lib-btn'>Поиск</Button> + <Button as={Link} to="/search-form" className='lib-btn'>Поиск</Button> </div> </> ); diff --git a/ReactLibrary/src/pages/SearchForm.jsx b/ReactLibrary/src/pages/SearchForm.jsx new file mode 100644 index 0000000..6c4ce13 --- /dev/null +++ b/ReactLibrary/src/pages/SearchForm.jsx @@ -0,0 +1,45 @@ +import { useState } from 'react'; +import { Button, Form } from 'react-bootstrap'; +import { useNavigate } from 'react-router-dom'; + +const SearchForm = () => { + const [validated, setValidated] = useState(false); + const navigate = useNavigate(); + const handleSubmit = (event) => { + const form = event.currentTarget; + if (form.checkValidity() === false) { + event.preventDefault(); + event.stopPropagation(); + } + setValidated(true); + }; + return ( + <> + <h1 className='mt-2 text-center'> + Параметры поиска. + </h1> + <Form id="books-form" noValidate validated={validated} onSubmit={handleSubmit}> + <Form.Group className="mb-2" controlId="author"> + <Form.Label htmlFor="author" className="form-label">Автор</Form.Label> + <Form.Select name='selected' required> + </Form.Select> + </Form.Group> + <Form.Group className="mb-2" controlId="name"> + <Form.Label>Название</Form.Label> + <Form.Control type="text" name="name" required/> + </Form.Group> + <Form.Group className="mb-2" controlId="category"> + <Form.Label htmlFor="category" className="form-label">Категория</Form.Label> + <Form.Select name='selected' required> + </Form.Select> + </Form.Group> + <div className="d-grid gap-2 mt-4 d-md-flex justify-content-md-center"> + <Button className="lib-btn" onClick={() => navigate(-1)}>Назад</Button> + <Button className="lib-btn" type="submit">Поиск</Button> + </div> + </Form> + </> + ); +}; + +export default SearchForm; diff --git a/ReactLibrary/src/pages/SearchResults.jsx b/ReactLibrary/src/pages/SearchResults.jsx new file mode 100644 index 0000000..5415db4 --- /dev/null +++ b/ReactLibrary/src/pages/SearchResults.jsx @@ -0,0 +1,28 @@ +import { Button, Table } from 'react-bootstrap'; +import { useNavigate } from 'react-router-dom'; + +const SearchResults = () => { +const navigate = useNavigate(); + return ( + <> + <h1 className='mt-2 text-md-start text-center'> + Результаты поиска. + </h1> + <Button className="lib-btn" onClick={() => navigate(-1)}>Назад</Button> + <Table className="mt-2 lib-table" striped> + <thead> + <th scope="col">№</th> + <th scope="col" className="w-25">Автор</th> + <th scope="col" className="w-25">Название</th> + <th scope="col" className="w-25">Категория</th> + <th scope="col" className="w-25">Год издания</th> + <th scope="col"></th> + <th scope="col"></th> + </thead> + <tbody></tbody> + </Table> + </> + ); +}; + +export default SearchResults;