From e6aff609f18d1a3937e5885585035fd82a542b98 Mon Sep 17 00:00:00 2001 From: Stanislav Khoshov Date: Sat, 6 Sep 2025 17:48:32 +0300 Subject: [PATCH] update ui --- .github/workflows/deploy_dev.yml | 4 ++++ frontend/package-lock.json | 18 ++++++++++++++++++ frontend/package.json | 1 + frontend/src/App.simple.tsx | 1 - frontend/src/App.tsx | 2 +- frontend/src/components/BookCard.tsx | 1 - frontend/src/components/BookDetailModal.tsx | 4 ++-- frontend/src/components/BookFilters.tsx | 8 +++----- frontend/src/components/BooksList.tsx | 12 +++--------- frontend/vite.config.ts | 2 +- 10 files changed, 33 insertions(+), 20 deletions(-) diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev.yml index b2b0879..69ebc1a 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev.yml @@ -28,4 +28,8 @@ jobs: sudo systemctl restart pythonbooks + cd frontend + npm i + npm run build + echo "Deployment successful!" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2630754..7a4be79 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,6 +23,7 @@ }, "devDependencies": { "@eslint/js": "^9.33.0", + "@types/node": "^24.3.1", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "^5.0.0", @@ -2160,6 +2161,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "24.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz", + "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, "node_modules/@types/react": { "version": "19.1.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", @@ -5441,6 +5452,13 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1e256cc..b77594f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,6 +25,7 @@ }, "devDependencies": { "@eslint/js": "^9.33.0", + "@types/node": "^24.3.1", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "^5.0.0", diff --git a/frontend/src/App.simple.tsx b/frontend/src/App.simple.tsx index 7c1dd2c..66864ca 100644 --- a/frontend/src/App.simple.tsx +++ b/frontend/src/App.simple.tsx @@ -1,4 +1,3 @@ -import React from 'react'; function App() { return ( diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7043f58..41dfa23 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import Layout from '@/components/Layout'; import BooksList from '@/components/BooksList'; import BookDetailModal from '@/components/BookDetailModal'; diff --git a/frontend/src/components/BookCard.tsx b/frontend/src/components/BookCard.tsx index 2d886d8..551109f 100644 --- a/frontend/src/components/BookCard.tsx +++ b/frontend/src/components/BookCard.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Calendar, User, Building, FileText } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; diff --git a/frontend/src/components/BookDetailModal.tsx b/frontend/src/components/BookDetailModal.tsx index 2439663..806eb81 100644 --- a/frontend/src/components/BookDetailModal.tsx +++ b/frontend/src/components/BookDetailModal.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { Calendar, User, Building, FileText, Barcode, ExternalLink, Heart, MessageCircle, Loader2 } from 'lucide-react'; import { Dialog, @@ -12,7 +12,7 @@ import { Textarea } from '@/components/ui/textarea'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import BookImage from './BookImage'; import { booksApi } from '@/lib/api'; -import type { Book, Comment } from '@/types'; +import type { Book } from '@/types'; interface BookDetailModalProps { bookId: number | null; diff --git a/frontend/src/components/BookFilters.tsx b/frontend/src/components/BookFilters.tsx index 11a8693..5fd61bc 100644 --- a/frontend/src/components/BookFilters.tsx +++ b/frontend/src/components/BookFilters.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Search } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; @@ -10,11 +9,11 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select'; -import type { Publisher, Tag } from '@/types'; +import { useState } from 'react'; +import type { Publisher } from '@/types'; interface BookFiltersProps { publishers: Publisher[]; - tags: Tag[]; onSearch: (query: string) => void; onCategoryChange: (category: string) => void; onPublisherChange: (publisherId: string) => void; @@ -23,13 +22,12 @@ interface BookFiltersProps { export default function BookFilters({ publishers, - tags, onSearch, onCategoryChange, onPublisherChange, onSortChange, }: BookFiltersProps) { - const [searchQuery, setSearchQuery] = React.useState(''); + const [searchQuery, setSearchQuery] = useState(''); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); diff --git a/frontend/src/components/BooksList.tsx b/frontend/src/components/BooksList.tsx index afeec22..ea2db3b 100644 --- a/frontend/src/components/BooksList.tsx +++ b/frontend/src/components/BooksList.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { Loader2 } from 'lucide-react'; import BookCard from './BookCard'; import LazyBookCard from './LazyBookCard'; @@ -6,7 +6,7 @@ import BookFilters from './BookFilters'; import { Button } from '@/components/ui/button'; import { useInfiniteScroll } from '@/hooks/useInfiniteScroll'; import { booksApi } from '@/lib/api'; -import type { Book, Publisher, Tag } from '@/types'; +import type { Book, Publisher } from '@/types'; interface BooksListProps { onBookClick: (book: Book) => void; @@ -21,7 +21,6 @@ export default function BooksList({ }: BooksListProps) { const [books, setBooks] = useState([]); const [publishers, setPublishers] = useState([]); - const [tags, setTags] = useState([]); const [loading, setLoading] = useState(true); const [loadingMore, setLoadingMore] = useState(false); const [nextPage, setNextPage] = useState(null); @@ -68,13 +67,9 @@ export default function BooksList({ const loadInitialData = async () => { try { - const [publishersResponse, tagsResponse] = await Promise.all([ - booksApi.getPublishers(), - booksApi.getTags(), - ]); + const publishersResponse = await booksApi.getPublishers(); setPublishers(publishersResponse); - setTags(tagsResponse); } catch (error) { console.error('Error loading initial data:', error); } @@ -123,7 +118,6 @@ export default function BooksList({