notifications

This commit is contained in:
VividTruthKeeper 2022-09-22 00:23:17 +05:00
parent 8e9f2715ba
commit fd0d2b12c3
7 changed files with 94 additions and 40 deletions

View File

@ -33,9 +33,12 @@ const App = () => {
const navigate = useNavigate();
const [posts, setPosts] = useState<PostType[]>();
const [popup, setPopup] = useState<PopupType>({
message: "Link created successfully",
success: false,
pop: false,
remove: false,
message: {
success: "Success",
failure: "Failure",
},
});
const [sources, setSources] = useState<SourceType[]>();

View File

@ -4,27 +4,30 @@ import { useContext } from "react";
import { PostContext } from "../context/PostContext";
// Icons
import { FaCheck } from "react-icons/fa";
import { FaRegThumbsUp } from "react-icons/fa";
import { FaRegThumbsDown } from "react-icons/fa";
// Types
import { ContextType } from "../types/context";
const Popup = () => {
const { pop, remove, message } =
const { pop, message, success } =
useContext<ContextType>(PostContext).popupValue.popup;
return (
<div className="popup__wrapper">
<div className="popup__wrapper__inner">
<div
className={
remove ? "popup active disabled" : pop ? "popup active" : "popup"
}
>
<IconContext.Provider value={{ color: "#8DD77F" }}>
<FaCheck />
</IconContext.Provider>
<span>{message}</span>
<div className={pop ? "popup active" : "popup"}>
{success ? (
<IconContext.Provider value={{ color: "#8DD77F" }}>
<FaRegThumbsUp />
</IconContext.Provider>
) : (
<IconContext.Provider value={{ color: "red" }}>
<FaRegThumbsDown />
</IconContext.Provider>
)}
<span>{success ? message.success : message.failure}</span>
</div>
</div>
</div>

View File

@ -1,10 +1,11 @@
// Modules
import axios from "axios";
import React from "react";
import React, { SetStateAction } from "react";
// Types
import { PostType } from "../types/posts";
import { LinksAll } from "../types/links";
import { PopupType } from "../types/popup";
export const getPosts = (
setLoad: React.Dispatch<boolean>,
@ -21,14 +22,27 @@ export const getPosts = (
.finally(() => setLoad(false));
};
export const deleteLink = (setSuccess: React.Dispatch<boolean>, id: number) => {
export const deleteLink = (
setSuccess: React.Dispatch<boolean>,
popup: PopupType,
setPopup: React.Dispatch<SetStateAction<PopupType>>,
id: number
) => {
axios
.delete(`http://95.85.124.41:8080/link/delete/${id}`)
.then((res) => {
setSuccess(true);
setPopup({ ...popup, success: true, pop: true });
setTimeout(() => {
setPopup({ ...popup, pop: false });
}, 2000);
})
.catch((err) => {
setSuccess(false);
setPopup({ ...popup, success: false, pop: true });
setTimeout(() => {
setPopup({ ...popup, pop: false });
}, 2000);
});
};
@ -42,8 +56,11 @@ export const getLinks = (setLinks: React.Dispatch<LinksAll[]>) => {
};
export const createLink = (
setSuccess: React.Dispatch<string>,
data: { name: string; source: string }
popup: PopupType,
setPopup: React.Dispatch<SetStateAction<PopupType>>,
data: { name: string; source: string },
navigate: () => void,
getLinks: () => void
) => {
axios
.post("http://95.85.124.41:8080/link/create", {
@ -51,24 +68,43 @@ export const createLink = (
source: data.source,
})
.then((res) => {
setSuccess(res.data.message);
setPopup({ ...popup, success: true, pop: true });
navigate();
setTimeout(() => {
setPopup({ ...popup, pop: false });
getLinks();
}, 2000);
})
.catch((err) => {
setSuccess("error");
setPopup({ ...popup, success: false, pop: true });
setTimeout(() => {
setPopup({ ...popup, pop: false });
}, 2000);
});
};
export const updateLink = (
setSuccess: React.Dispatch<string>,
popup: PopupType,
setPopup: React.Dispatch<SetStateAction<PopupType>>,
navigate: () => void,
getLinks: () => void,
id: number,
data: { name: string; source: string }
) => {
axios
.put(`http://95.85.124.41:8080/link/update/${id}`, data)
.then((res) => {
setSuccess(res.data.message);
setPopup({ ...popup, success: true, pop: true });
navigate();
setTimeout(() => {
setPopup({ ...popup, pop: false });
getLinks();
}, 2000);
})
.catch((err) => {
setSuccess("error");
setPopup({ ...popup, success: false, pop: true });
setTimeout(() => {
setPopup({ ...popup, pop: false });
}, 2000);
});
};

View File

@ -15,7 +15,7 @@ import { SourceEditDataType } from "../types/sources";
const CreateSource = () => {
const { setSources } = useContext<ContextType>(PostContext).sourceValue;
const { popup, setPopup } = useContext<ContextType>(PostContext).popupValue;
// const navigate = useNavigate();
const navigate = useNavigate();
const [data, setData] = useState<SourceEditDataType>({
name: "",
source: "",
@ -65,14 +65,13 @@ const CreateSource = () => {
disabled={!(data.name.length > 0 && data.source.length > 0)}
className="source-edit__submit"
onClick={() => {
createLink(() => {}, data);
setPopup({ ...popup, pop: true });
setTimeout(() => {
// navigate("/source");
getLinks(setSources);
}, 2000);
setTimeout(() => setPopup({ ...popup, remove: true }), 2000);
createLink(
popup,
setPopup,
data,
() => navigate("/source"),
() => getLinks(setSources)
);
}}
>
Create new source

View File

@ -19,6 +19,7 @@ const EditSource = () => {
const navigate = useNavigate();
const { sources, setSources } =
useContext<ContextType>(PostContext).sourceValue;
const { popup, setPopup } = useContext<ContextType>(PostContext).popupValue;
const [source, setSource] = useState<SourceType>();
useEffect(() => {
if (sources) {
@ -60,7 +61,7 @@ const EditSource = () => {
readOnly
type="text"
id="id"
value={source ? source.name : ""}
value={source ? source.id : ""}
/>
</div>
<div className="source-edit__input">
@ -113,11 +114,14 @@ const EditSource = () => {
disabled={!(data.name.length > 0 && data.source.length > 0)}
className="source-edit__submit"
onClick={() => {
updateLink(() => {}, id ? parseInt(id) : 0, data);
setTimeout(() => {
navigate("/source");
getLinks(setSources);
}, 2000);
updateLink(
popup,
setPopup,
() => navigate("/source"),
() => getLinks(setSources),
id ? parseInt(id) : 0,
data
);
}}
>
Update source

View File

@ -23,6 +23,7 @@ import { ContextType } from "../types/context";
const Source = () => {
const { sources, setSources } =
useContext<ContextType>(PostContext).sourceValue;
const { popup, setPopup } = useContext<ContextType>(PostContext).popupValue;
const [deleted, setDeleted] = useState<boolean>(false);
useEffect(() => {
@ -79,7 +80,12 @@ const Source = () => {
<div className="source-action__block">
<button
onClick={() => {
deleteLink(setDeleted, source.id);
deleteLink(
setDeleted,
popup,
setPopup,
source.id
);
}}
>
<span>Delete</span>

View File

@ -1,5 +1,8 @@
export interface PopupType {
message: string;
message: {
success: string;
failure: string;
};
success: boolean;
pop: boolean;
remove: boolean;
}