create source page
This commit is contained in:
parent
5956c0376d
commit
35fcb5472c
19
src/App.tsx
19
src/App.tsx
|
|
@ -10,7 +10,6 @@ import "./assets/styles/style.scss";
|
||||||
// Types
|
// Types
|
||||||
import { PostType } from "./types/posts";
|
import { PostType } from "./types/posts";
|
||||||
import { SourceType } from "./types/sources";
|
import { SourceType } from "./types/sources";
|
||||||
import { LinksAll } from "./types/links";
|
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import Login from "./pages/Login";
|
import Login from "./pages/Login";
|
||||||
|
|
@ -21,6 +20,7 @@ import Details from "./pages/Details";
|
||||||
import Post from "./pages/Post";
|
import Post from "./pages/Post";
|
||||||
import Source from "./pages/Source";
|
import Source from "./pages/Source";
|
||||||
import EditSource from "./pages/EditSource";
|
import EditSource from "./pages/EditSource";
|
||||||
|
import CreateSource from "./pages/CreateSource";
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
import { getLinks } from "./helpers/apiRequests";
|
import { getLinks } from "./helpers/apiRequests";
|
||||||
|
|
@ -28,18 +28,7 @@ import { getLinks } from "./helpers/apiRequests";
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const date = new Date("0.0.0000");
|
const date = new Date("0.0.0000");
|
||||||
const [posts, setPosts] = useState<PostType[]>([
|
const [posts, setPosts] = useState<PostType[]>();
|
||||||
{
|
|
||||||
id: -1,
|
|
||||||
category: "",
|
|
||||||
title: "",
|
|
||||||
link: "",
|
|
||||||
publish_date: date,
|
|
||||||
summary: "",
|
|
||||||
createdAt: date,
|
|
||||||
updatedAt: date,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
const [sources, setSources] = useState<SourceType[]>();
|
const [sources, setSources] = useState<SourceType[]>();
|
||||||
|
|
||||||
|
|
@ -89,6 +78,10 @@ const App = () => {
|
||||||
element={<Main child={<EditSource />} />}
|
element={<Main child={<EditSource />} />}
|
||||||
/>
|
/>
|
||||||
<Route path="/posts/:id" element={<Main child={<Post />} />} />
|
<Route path="/posts/:id" element={<Main child={<Post />} />} />
|
||||||
|
<Route
|
||||||
|
path="/source/create"
|
||||||
|
element={<Main child={<CreateSource />} />}
|
||||||
|
/>
|
||||||
|
|
||||||
<Route
|
<Route
|
||||||
path="/user_details"
|
path="/user_details"
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
input {
|
input {
|
||||||
padding: 0.7rem 1rem;
|
font-size: 1.6rem;
|
||||||
border: 0.1rem solid #cccccc;
|
padding: 1rem 1.2rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,3 +155,43 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.source {
|
||||||
|
&__link {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
max-width: 30rem;
|
||||||
|
font-size: 1.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background: $base-blue;
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
@include transition-std;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $hover-blue;
|
||||||
|
@include transition-std;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__head {
|
||||||
|
svg {
|
||||||
|
width: 4rem;
|
||||||
|
height: 4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__create {
|
||||||
|
&.inner {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4rem;
|
||||||
|
}
|
||||||
|
&__block {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
// Modules
|
||||||
|
import { useContext, useEffect, useState } from "react";
|
||||||
|
import { IconContext } from "react-icons";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { ContextType } from "../types/context";
|
||||||
|
import { PostContext } from "../context/PostContext";
|
||||||
|
|
||||||
|
// Icons
|
||||||
|
import { FaRegPlusSquare } from "react-icons/fa";
|
||||||
|
|
||||||
|
// Helpers
|
||||||
|
import { createLink, getLinks } from "../helpers/apiRequests";
|
||||||
|
import { SourceEditDataType } from "../types/sources";
|
||||||
|
|
||||||
|
const CreateSource = () => {
|
||||||
|
const { setSources } = useContext<ContextType>(PostContext).sourceValue;
|
||||||
|
const navigate = useNavigate();
|
||||||
|
const [data, setData] = useState<SourceEditDataType>({
|
||||||
|
name: "",
|
||||||
|
source: "",
|
||||||
|
});
|
||||||
|
return (
|
||||||
|
<main className="source__create">
|
||||||
|
<div className="container">
|
||||||
|
<div className="source__create inner">
|
||||||
|
<div className="dashboard__head source__head">
|
||||||
|
<IconContext.Provider value={{ color: "#8DD77F" }}>
|
||||||
|
<FaRegPlusSquare />
|
||||||
|
</IconContext.Provider>
|
||||||
|
<h1>Source</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form
|
||||||
|
onSubmit={(e: React.FormEvent<HTMLFormElement>) =>
|
||||||
|
e.preventDefault()
|
||||||
|
}
|
||||||
|
className="source__create__block"
|
||||||
|
>
|
||||||
|
<div className="source-edit__input">
|
||||||
|
<label htmlFor="name">Source name</label>
|
||||||
|
<input
|
||||||
|
placeholder="Enter name"
|
||||||
|
type="text"
|
||||||
|
id="name"
|
||||||
|
value={data.name}
|
||||||
|
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
setData({ ...data, name: e.target.value });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="source-edit__input">
|
||||||
|
<label htmlFor="source">Source link</label>
|
||||||
|
<input
|
||||||
|
placeholder="Enter link"
|
||||||
|
type="text"
|
||||||
|
id="source"
|
||||||
|
value={data.source}
|
||||||
|
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
setData({ ...data, source: e.target.value });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
className="source-edit__submit"
|
||||||
|
onClick={() => {
|
||||||
|
createLink(() => {}, data);
|
||||||
|
setTimeout(() => {
|
||||||
|
navigate("/source");
|
||||||
|
getLinks(setSources);
|
||||||
|
}, 2000);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Create new source
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CreateSource;
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
// Modules
|
// Modules
|
||||||
import React, { useContext, useState, useEffect } from "react";
|
import React, { useContext, useState, useEffect } from "react";
|
||||||
import { UserContext } from "../context/UserContext";
|
import { UserContext } from "../context/UserContext";
|
||||||
|
import { IconContext } from "react-icons";
|
||||||
|
|
||||||
// Icons
|
// Icons
|
||||||
import { CgDetailsLess } from "react-icons/cg";
|
import { FaAlignLeft } from "react-icons/fa";
|
||||||
import { userContextType } from "../types/user";
|
import { userContextType } from "../types/user";
|
||||||
|
|
||||||
const Details = () => {
|
const Details = () => {
|
||||||
|
|
@ -14,7 +15,10 @@ const Details = () => {
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="details inner">
|
<div className="details inner">
|
||||||
<div className="dashboard__head">
|
<div className="dashboard__head">
|
||||||
<CgDetailsLess className="dashboard__img" />
|
<IconContext.Provider value={{ color: "#8DD77F" }}>
|
||||||
|
<FaAlignLeft className="dashboard__img" />
|
||||||
|
</IconContext.Provider>
|
||||||
|
|
||||||
<h1>Details</h1>
|
<h1>Details</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className="details__content">
|
<div className="details__content">
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,7 @@ const Posts = () => {
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{load ? <Loader /> : null}
|
{load ? <Loader /> : null}
|
||||||
{posts[0] ? (
|
{posts ? (
|
||||||
posts[0].id !== -1 ? (
|
posts[0].id !== -1 ? (
|
||||||
showAll ? (
|
showAll ? (
|
||||||
posts.map((post: PostType) => {
|
posts.map((post: PostType) => {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { Link } from "react-router-dom";
|
||||||
import { PostContext } from "../context/PostContext";
|
import { PostContext } from "../context/PostContext";
|
||||||
|
|
||||||
// Icons
|
// Icons
|
||||||
|
import { FaRegPlusSquare } from "react-icons/fa";
|
||||||
import { FaSourcetree } from "react-icons/fa";
|
import { FaSourcetree } from "react-icons/fa";
|
||||||
import { FaRegEdit } from "react-icons/fa";
|
import { FaRegEdit } from "react-icons/fa";
|
||||||
import { FaTrash } from "react-icons/fa";
|
import { FaTrash } from "react-icons/fa";
|
||||||
|
|
@ -103,6 +104,10 @@ const Source = () => {
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<Link to="/source/create" className="source__link">
|
||||||
|
<FaRegPlusSquare />
|
||||||
|
<span>Create source</span>
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue