diff --git a/index.html b/index.html
index 0c589ec..3be09e4 100644
--- a/index.html
+++ b/index.html
@@ -2,9 +2,8 @@
-
- Vite + React
+ УлЧУ
diff --git a/src/App.css b/src/App.css
index b9d355d..e69de29 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1,42 +0,0 @@
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: filter 300ms;
-}
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/src/App.jsx b/src/App.jsx
index f67355a..3466d0b 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,35 +1,12 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from '/vite.svg'
+import News from "./components/News/News"
import './App.css'
function App() {
- const [count, setCount] = useState(0)
-
return (
- <>
-
- Vite + React
-
-
-
- Edit src/App.jsx and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
- >
+
+
+
)
}
-export default App
+export default App
\ No newline at end of file
diff --git a/src/components/News/Hooks/NewsHook.jsx b/src/components/News/Hooks/NewsHook.jsx
new file mode 100644
index 0000000..15ab639
--- /dev/null
+++ b/src/components/News/Hooks/NewsHook.jsx
@@ -0,0 +1,38 @@
+import { useState } from "react"
+
+export const useNews = () => {
+ const [News, setNews] = useState([])
+
+ const addNews = (id, name, teg, description) => {
+ const newNews = {}
+ newNews.id = id
+ newNews.name = name
+ newNews.teg = teg
+ newNews.description = description
+ setNews([...News, newNews])
+ }
+
+ const editNews = (id, name, teg, description) => {
+ setNews(
+ News.map((news) => {
+ if (news.id === id) {
+ return { news, id, name, teg, description }
+ } else {
+ return news
+ }
+ })
+ )
+ }
+
+ const removeNews = (id) => {
+ setNews(News.filter((news) => news.id !== id))
+ }
+
+ const sortNews = () => {
+ const newNews = [...News]
+ newNews.reverse()
+ setNews(newNews)
+ }
+
+ return { News, addNews, editNews, removeNews, sortNews }
+}
\ No newline at end of file
diff --git a/src/components/News/News.jsx b/src/components/News/News.jsx
new file mode 100644
index 0000000..0103405
--- /dev/null
+++ b/src/components/News/News.jsx
@@ -0,0 +1,9 @@
+import NewsInfo from "./NewsItem/NewsInfo"
+
+export default function News({className = null}) {
+ return (
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/components/News/News.module.css b/src/components/News/News.module.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/News/NewsItem/NewsInfo.jsx b/src/components/News/NewsItem/NewsInfo.jsx
new file mode 100644
index 0000000..e5f94d8
--- /dev/null
+++ b/src/components/News/NewsItem/NewsInfo.jsx
@@ -0,0 +1,75 @@
+import { useState } from "react"
+import NewsItem from "./NewsItem"
+import { useNews } from "../Hooks/NewsHook"
+
+let key = 1
+
+export default function NewsInfo() {
+ const [inputs, setInputs] = useState({ id: "", name: "", teg: "", description: "" })
+ const { news, addNews, editNews, removeNews, sortNews } = useNews()
+
+ const handleClear = () => {
+ setInputs({ id: "", name: "", teg: "", description: "" })
+ }
+
+ const handleSubmit = (event) => {
+ event.preventDefault()
+ event.stopPropagation()
+
+ if (!inputs.id) {
+ addNews(key++, inputs.name, inputs.teg, inputs.description)
+ } else {
+ editNews(inputs.id, inputs.name, inputs.teg, inputs.description)
+ }
+
+ handleClear()
+ };
+
+ const handleEdit = (id) => {
+ const data = news.find((news) => news.id === id)
+ if (!data) {
+ return
+ }
+ setInputs({ ...inputs, ...data })
+ };
+
+ const handleRemove = (id) => {
+ removeNews(id)
+ handleClear()
+ };
+
+ const handleChange = (event) => {
+ setInputs({ ...inputs, [event.target.name]: event.target.value })
+ };
+
+ const newsItems = news.map((item) => {
+ return
+ })
+
+ return (
+
+
Новости
+
+
+ {newsItems}
+
+ )
+}
\ No newline at end of file
diff --git a/src/components/News/NewsItem/NewsItem.jsx b/src/components/News/NewsItem/NewsItem.jsx
new file mode 100644
index 0000000..ea725eb
--- /dev/null
+++ b/src/components/News/NewsItem/NewsItem.jsx
@@ -0,0 +1,13 @@
+export default function NewsItem({news, onEdit, onDelete}) {
+ return (
+
+
Название: {news.name}
+
Тег: {news.teg}
+
{news.description}
+
+
+
+
+
+ )
+}
\ No newline at end of file