Fixed Error
This commit is contained in:
@@ -4,12 +4,10 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "npm-run-all --parallel backend vite",
|
"start": "npm-run-all --parallel vite",
|
||||||
"vite": "vite",
|
"vite": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"serve": "http-server -p 3000 ./dist/",
|
"prod": "npm-run-all build --parallel",
|
||||||
"backend": "json-server database/data.json -p 5174",
|
|
||||||
"prod": "npm-run-all build --parallel backend serve",
|
|
||||||
"lint": "eslint ."
|
"lint": "eslint ."
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pteg {
|
.ptag {
|
||||||
color: #ff0000;
|
color: #ff0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const URL = "http://localhost:5174/";
|
const URL = "http://localhost:8080/api/1.0/";
|
||||||
|
|
||||||
const makeRequest = async (path, params, vars, method = "GET", data = null) => {
|
const makeRequest = async (path, params, vars, method = "GET", data = null) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ import "./Header.modul.css"
|
|||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
return (
|
return (
|
||||||
<header class="header">
|
<header className="header">
|
||||||
<div class="div">
|
<div className="div">
|
||||||
<img src="logo.png" alt="Логотип УлЧУ" class="logo"/>
|
<img src="logo.png" alt="Логотип УлЧУ" className="logo"/>
|
||||||
<label class="nameBuild">Ульяновский Частный Университет</label>
|
<label className="nameBuild">Ульяновский Частный Университет</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="navBar">
|
<div className="navBar">
|
||||||
<NavLink className="nav-link" to="/">Главная</NavLink>
|
<NavLink className="nav-link" to="/">Главная</NavLink>
|
||||||
<NavLink className="nav-link" to="/info">Об университете</NavLink>
|
<NavLink className="nav-link" to="/info">Об университете</NavLink>
|
||||||
<NavLink className="nav-link" to="/education">Образование</NavLink>
|
<NavLink className="nav-link" to="/education">Образование</NavLink>
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ export const useNews = (id) => {
|
|||||||
} else {
|
} else {
|
||||||
await updateItem(PATH, newsId, news);
|
await updateItem(PATH, newsId, news);
|
||||||
}
|
}
|
||||||
const result = await getNews(newsId);
|
getNews(newsId).then((value) => setNews(value))
|
||||||
setNews(result);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateNews = (key, value) => {
|
const updateNews = (key, value) => {
|
||||||
|
|||||||
12
src/components/News/Hooks/NewsTagHook.jsx
Normal file
12
src/components/News/Hooks/NewsTagHook.jsx
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { getAllItems } from "../../Api/client";
|
||||||
|
|
||||||
|
export default function NewsTagHook() {
|
||||||
|
const [tags, setTags] = useState(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getAllItems("tags").then((value) => setTags(value))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
};
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
import { useEffect, useState } from "react";
|
|
||||||
import { getAllItems } from "../../Api/client";
|
|
||||||
|
|
||||||
export default function NewsTegHook() {
|
|
||||||
const [tegs, setTegs] = useState(null);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
getAllItems("tegs").then((value) => setTegs(value))
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return tegs;
|
|
||||||
};
|
|
||||||
@@ -19,8 +19,7 @@ export default function useNewss() {
|
|||||||
throw new Error("News id is not defined");
|
throw new Error("News id is not defined");
|
||||||
}
|
}
|
||||||
await deleteItem(PATH, id)
|
await deleteItem(PATH, id)
|
||||||
const newNewss = getNews()
|
getNews().then((value) => setNews(value))
|
||||||
setNews(newNewss)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return { news, deleteNews }
|
return { news, deleteNews }
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Link, useNavigate } from "react-router-dom"
|
import { Link, useNavigate } from "react-router-dom"
|
||||||
import NewsBoard from "./NewsBoard/NewsBoard"
|
import NewsBoard from "./NewsBoard/NewsBoard"
|
||||||
import useNewsTeg from "./Hooks/NewsTegHook"
|
import useNewsTag from "./Hooks/NewsTagHook"
|
||||||
import useNewss from "./Hooks/NewssHook"
|
import useNewss from "./Hooks/NewssHook"
|
||||||
|
|
||||||
export default function News() {
|
export default function News() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { news, deleteNews } = useNewss()
|
const { news, deleteNews } = useNewss()
|
||||||
const tegs = useNewsTeg()
|
const tags = useNewsTag()
|
||||||
|
|
||||||
function handleUpdate(id) { navigate(`/news/edit/${id}`) }
|
function handleUpdate(id) { navigate(`/news/edit/${id}`) }
|
||||||
function handleDelete(id) { deleteNews(id) }
|
function handleDelete(id) { deleteNews(id) }
|
||||||
@@ -14,7 +14,7 @@ export default function News() {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Link to="/news/edit"><button>Добавить новость</button></Link>
|
<Link to="/news/edit"><button>Добавить новость</button></Link>
|
||||||
<NewsBoard data={news} tegs={tegs} onUpdate={handleUpdate} onDelete={handleDelete} />
|
<NewsBoard data={news} tags={tags} onUpdate={handleUpdate} onDelete={handleDelete} />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
export default function NewsBoard({ data, tegs, onUpdate, onDelete}) {
|
export default function NewsBoard({ data, tags, onUpdate, onDelete}) {
|
||||||
const body = data?.map((news) => {
|
const body = data?.map((news) => {
|
||||||
return (
|
return (
|
||||||
<div className="newsItem">
|
<div className="newsItem" key={news.id}>
|
||||||
<p className="pname">{news.name}</p>
|
<p className="pname">{news.name}</p>
|
||||||
<p className="pteg">{tegs?.find((teg) => teg.id === news.tegId).name}</p>
|
<p className="ptag">{tags?.find((tag) => tag.id === news.tagId).name}</p>
|
||||||
<p>{news.bdate}</p>
|
<p>{news.bdate}</p>
|
||||||
<p>{news.description}</p>
|
<p>{news.description}</p>
|
||||||
<div className="buttonsDiv">
|
<div className="buttonsDiv">
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
import { useParams } from "react-router-dom"
|
import { useParams } from "react-router-dom"
|
||||||
import useNewsTeg from "../Hooks/NewsTegHook"
|
import useNewsTag from "../Hooks/NewsTagHook"
|
||||||
import { useNews } from "../Hooks/NewsHook"
|
import { useNews } from "../Hooks/NewsHook"
|
||||||
|
|
||||||
const newsModel = {
|
const newsModel = {
|
||||||
name: ["Название", "text"],
|
name: ["Название", "text"],
|
||||||
tegId: ["Тег", "text"],
|
tagId: ["Тег", "text"],
|
||||||
bdate: ["Дата", "date"],
|
bdate: ["Дата", "date"],
|
||||||
description: ["Описание", "text"]
|
description: ["Описание", "text"]
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function NewsForm() {
|
export default function NewsForm() {
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
const tegs = useNewsTeg()
|
const tags = useNewsTag()
|
||||||
const { news, updateNews, saveNews, clearNews } = useNews(params.newsId)
|
const { news, updateNews, saveNews, clearNews } = useNews(params.newsId)
|
||||||
|
|
||||||
async function handleSave(event) {
|
async function handleSave(event) {
|
||||||
@@ -19,20 +19,18 @@ export default function NewsForm() {
|
|||||||
event.stopPropagation()
|
event.stopPropagation()
|
||||||
try {
|
try {
|
||||||
await saveNews()
|
await saveNews()
|
||||||
setError(false)
|
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
setError(err)
|
console.log(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleChange(event) {
|
function handleChange(event) {
|
||||||
console.log(event.target.name, event.target.value)
|
|
||||||
updateNews(event.target.name, event.target.value)
|
updateNews(event.target.name, event.target.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
const inputs = Object.keys(newsModel).map((field) => {
|
const inputs = Object.keys(newsModel).map((field) => {
|
||||||
if (field === "tegId") return
|
if (field === "tagId") return
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={field} className="input">
|
<div key={field} className="input">
|
||||||
@@ -48,10 +46,10 @@ export default function NewsForm() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
const tegOptions = tegs?.map((teg) => {
|
const tagOptions = tags?.map((tag) => {
|
||||||
return (
|
return (
|
||||||
<option key={teg.id} value={teg.id}>
|
<option key={tag.id} value={tag.id}>
|
||||||
{teg.name}
|
{tag.name}
|
||||||
</option>
|
</option>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -60,15 +58,15 @@ export default function NewsForm() {
|
|||||||
<form className="card" onSubmit={handleSave}>
|
<form className="card" onSubmit={handleSave}>
|
||||||
{inputs}
|
{inputs}
|
||||||
<div className="input">
|
<div className="input">
|
||||||
<label htmlFor="tegId">Тег:</label>
|
<label htmlFor="tagId">Тег:</label>
|
||||||
<select
|
<select
|
||||||
id="tegId"
|
id="tagId"
|
||||||
name="tegId"
|
name="tagId"
|
||||||
value={news === null ? 0 : news.tegId}
|
value={news === null ? 0 : news.tagId}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
>
|
>
|
||||||
<option value="">Выберите тег</option>
|
<option value="">Выберите тег</option>
|
||||||
{tegOptions}
|
{tagOptions}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ export default function ContactsPage() {
|
|||||||
<>
|
<>
|
||||||
<h1>Список контактов:</h1>
|
<h1>Список контактов:</h1>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Телефон: <strong class="numb">8-800-476-92-84</strong></li>
|
<li>Телефон: <strong className="numb">8-800-476-92-84</strong></li>
|
||||||
<li>E-mail: <strong>info@ulchu.ru</strong></li>
|
<li>E-mail: <strong>info@ulchu.ru</strong></li>
|
||||||
<li>Адрес: 432027, г. Ульяновск, ул. Северный Венец, д. 32</li>
|
<li>Адрес: 432027, г. Ульяновск, ул. Северный Венец, д. 32</li>
|
||||||
<li>Официальный телеграмм канал: <strong>https://t.me/UlCHU</strong></li>
|
<li>Официальный телеграмм канал: <strong>https://t.me/UlCHU</strong></li>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ export default function EducationPage() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<h1>Доступные направления обучения: </h1>
|
<h1>Доступные направления обучения: </h1>
|
||||||
<div class="educItem">
|
<div className="educItem">
|
||||||
<p>Экономика и управление:</p>
|
<p>Экономика и управление:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Управление предприятиями</li>
|
<li>Управление предприятиями</li>
|
||||||
@@ -11,7 +11,7 @@ export default function EducationPage() {
|
|||||||
<li>Предпринемательская деятельность</li>
|
<li>Предпринемательская деятельность</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="educItem">
|
<div className="educItem">
|
||||||
<p>Информационные технологии:</p>
|
<p>Информационные технологии:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Программная инженерия</li>
|
<li>Программная инженерия</li>
|
||||||
@@ -21,7 +21,7 @@ export default function EducationPage() {
|
|||||||
<li>Веб-дизайнер</li>
|
<li>Веб-дизайнер</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="educItem">
|
<div className="educItem">
|
||||||
<p>Гуманитарные науки:</p>
|
<p>Гуманитарные науки:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Психология</li>
|
<li>Психология</li>
|
||||||
@@ -31,7 +31,7 @@ export default function EducationPage() {
|
|||||||
<li>Журналист</li>
|
<li>Журналист</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="educItem">
|
<div className="educItem">
|
||||||
<p>Международные отношения и право:</p>
|
<p>Международные отношения и право:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Правоведение</li>
|
<li>Правоведение</li>
|
||||||
@@ -39,7 +39,7 @@ export default function EducationPage() {
|
|||||||
<li>Международный бизнес</li>
|
<li>Международный бизнес</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="educItem">
|
<div className="educItem">
|
||||||
<p>Экология и устойчивое развитие:</p>
|
<p>Экология и устойчивое развитие:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Специалист по охране окружающей среды</li>
|
<li>Специалист по охране окружающей среды</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user