From 5b81286ae79bab7ee66c1c1916d39c04f644f4a2 Mon Sep 17 00:00:00 2001 From: VividTruthKeeper Date: Mon, 12 Sep 2022 20:45:30 +0500 Subject: [PATCH] links --- src/assets/styles/_category.scss | 46 ++++++ src/assets/styles/_general.scss | 12 ++ src/helpers/apiRequests.ts | 53 ++++++- src/pages/Category.tsx | 246 ++++++++++++++++++++++++++++++- src/pages/Posts.tsx | 1 - src/types/links.ts | 6 + 6 files changed, 360 insertions(+), 4 deletions(-) create mode 100644 src/types/links.ts diff --git a/src/assets/styles/_category.scss b/src/assets/styles/_category.scss index 5d53671..ecbc42d 100644 --- a/src/assets/styles/_category.scss +++ b/src/assets/styles/_category.scss @@ -58,4 +58,50 @@ } } } + + &__table { + &__wrapper { + display: flex; + flex-direction: column; + gap: 1rem; + + h3 { + font-size: 2rem; + font-weight: normal; + } + } + &__head { + min-height: unset !important; + background: #dbdbdb !important; + } + tr { + min-height: 7rem; + padding: 1rem; + display: grid; + grid-template-columns: 1fr 5fr; + gap: 1rem; + background: #f2f0fd; + &:nth-child(2n) { + background: #fafafa; + } + } + + td { + text-align: center; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + justify-self: center; + font-size: 1.2rem; + align-self: center; + } + + tbody { + max-height: 70vh; + overflow-y: auto; + display: flex; + flex-direction: column; + } + } } diff --git a/src/assets/styles/_general.scss b/src/assets/styles/_general.scss index ed38116..639e76f 100644 --- a/src/assets/styles/_general.scss +++ b/src/assets/styles/_general.scss @@ -53,6 +53,18 @@ a { text-decoration: none; } +.green { + color: green; + font-size: 1.6rem; + font-weight: bold; +} + +.red { + color: red; + font-size: 1.6rem; + font-weight: bold; +} + @mixin transition-std { transition: 0.3s all ease; } diff --git a/src/helpers/apiRequests.ts b/src/helpers/apiRequests.ts index 684cf0d..ef832d3 100644 --- a/src/helpers/apiRequests.ts +++ b/src/helpers/apiRequests.ts @@ -1,14 +1,65 @@ // Modules import axios from "axios"; +import React from "react"; // Types import { PostType } from "../types/posts"; +import { LinksAll } from "../types/links"; export const getPosts = (setPosts: React.Dispatch) => { axios .get("http://95.85.124.41:8080/posts") .then((res) => { - setPosts(res.data); + setPosts(res.data.data); }) .catch((err) => {}); }; + +export const deleteLink = (setSuccess: React.Dispatch, id: number) => { + axios + .delete(`http://95.85.124.41:8080/link/delete/${id}`) + .then((res) => { + setSuccess(res.data.message); + }) + .catch((err) => { + setSuccess("error"); + }); +}; + +export const getLinks = (setLinks: React.Dispatch) => { + axios + .get("http://95.85.124.41:8080/links/all") + .then((res) => { + setLinks(res.data.data); + }) + .catch((err) => {}); +}; + +export const createLink = ( + setSuccess: React.Dispatch, + data: { link: string } +) => { + axios + .post("http://95.85.124.41:8080/link/create", { link: data.link }) + .then((res) => { + setSuccess(res.data.message); + }) + .catch((err) => { + setSuccess("error"); + }); +}; + +export const updateLink = ( + setSuccess: React.Dispatch, + id: number, + data: { link: string } +) => { + axios + .put(`http://95.85.124.41:8080/link/update/${id}`, { link: data.link }) + .then((res) => { + setSuccess(res.data.message); + }) + .catch((err) => { + setSuccess("error"); + }); +}; diff --git a/src/pages/Category.tsx b/src/pages/Category.tsx index 4877be3..9072cf9 100644 --- a/src/pages/Category.tsx +++ b/src/pages/Category.tsx @@ -1,7 +1,66 @@ +// Modules +import { v4 as uuidv4 } from "uuid"; +import { useState, useEffect } from "react"; + // Icons import { IoIosCreate } from "react-icons/io"; +import { + createLink, + deleteLink, + getLinks, + updateLink, +} from "../helpers/apiRequests"; +import { capitalizeFirstLetter } from "../helpers/stringMethods"; +import { LinksAll } from "../types/links"; + +interface dataType { + create: string; + delete: number; + updateId: number; + updateData: string; +} + +interface successType { + create: string; + delete: string; + update: string; + hasCreateUpdated: boolean; + hasDeleteUpdated: boolean; + hasUpdateUpdated: boolean; +} const Category = () => { + const [data, setData] = useState({ + create: "", + delete: 0, + updateId: 0, + updateData: "", + }); + + const [success, setSuccess] = useState({ + create: "", + delete: "", + update: "", + hasCreateUpdated: false, + hasDeleteUpdated: false, + hasUpdateUpdated: false, + }); + + const defaultDate = new Date("00-00-00"); + + const [all, setAll] = useState([ + { + id: -1, + link: "", + createdAt: defaultDate, + updatedAt: defaultDate, + }, + ]); + + useEffect(() => { + getLinks(setAll); + }, []); + return (
@@ -10,6 +69,27 @@ const Category = () => {

Category

+
+

All links

+ + + + + + + {all[0].id !== -1 + ? all.map((link: LinksAll) => { + return ( + + + + + ); + }) + : ""} + +
IDLink
{link.id}{link.link}
+
) => @@ -17,14 +97,176 @@ const Category = () => { } >
- + ) => { + setData({ + ...data, + create: capitalizeFirstLetter(e.target.value.toLowerCase()), + }); + }} /> + {success.hasCreateUpdated ? ( + success.create === "success" ? ( + Category added successfuly + ) : ( + Failed to add category + ) + ) : ( + "" + )}
- + +
+
) => + e.preventDefault() + } + > +
+ + ) => { + if (e.target.value.length === 0) { + setData({ + ...data, + updateId: 0, + }); + } else { + setData({ + ...data, + updateId: parseInt(e.target.value), + }); + } + }} + /> + ) => { + setData({ + ...data, + updateData: capitalizeFirstLetter( + e.target.value.toLowerCase() + ), + }); + }} + /> + {success.hasUpdateUpdated ? ( + success.update === "success" ? ( + Category updated successfuly + ) : ( + Failed to update category + ) + ) : ( + "" + )} +
+ +
+
) => + e.preventDefault() + } + > +
+ + ) => { + if (e.target.value.length === 0) { + setData({ + ...data, + delete: 0, + }); + } else { + setData({ + ...data, + delete: parseInt(e.target.value), + }); + } + }} + /> + {success.hasDeleteUpdated ? ( + success.delete === "success" ? ( + Category deleted successfuly + ) : ( + Failed to delete category + ) + ) : ( + "" + )} +
+
diff --git a/src/pages/Posts.tsx b/src/pages/Posts.tsx index b673cb5..2294039 100644 --- a/src/pages/Posts.tsx +++ b/src/pages/Posts.tsx @@ -42,7 +42,6 @@ const Posts = () => { return categoriesTemp.indexOf(element) === index; }); setCategories(categoriesTempUnique); - console.log(categoriesTempUnique); } }, [posts]); diff --git a/src/types/links.ts b/src/types/links.ts new file mode 100644 index 0000000..f5f8f5f --- /dev/null +++ b/src/types/links.ts @@ -0,0 +1,6 @@ +export interface LinksAll { + id: number; + link: string; + createdAt: Date; + updatedAt: Date; +}