diff --git a/src/components/BlogComponent.tsx b/src/components/BlogComponent.tsx index c4f76e0..69d6e5d 100644 --- a/src/components/BlogComponent.tsx +++ b/src/components/BlogComponent.tsx @@ -1,6 +1,7 @@ import React from "react"; import Avatar from 'react-avatar'; import { useSelector } from "react-redux"; +import { getW3link } from "utils/helper"; interface IBlogComponent { blog: IBlog; @@ -13,7 +14,7 @@ const BlogComponent = (props: IBlogComponent) => { return (
- +
{users[blog.Creator]?.Name || blog.Creator}
{blog.Date?.toLocaleString() || ""}
diff --git a/src/components/Loader.tsx b/src/components/Loader.tsx index f80af02..d795d6b 100644 --- a/src/components/Loader.tsx +++ b/src/components/Loader.tsx @@ -1,15 +1,15 @@ import React from 'react'; -import ClipLoader from 'react-spinners/ClipLoader'; +import ReactLoader from 'react-spinners/GridLoader'; interface IProps {} const Loader = (props: IProps) => { return (
-
); diff --git a/src/components/NewBlog.tsx b/src/components/NewBlog.tsx index 7cef7ea..801851d 100644 --- a/src/components/NewBlog.tsx +++ b/src/components/NewBlog.tsx @@ -6,6 +6,7 @@ import { AppDispatch } from "slices/store"; import { NotificationManager } from "./Notification"; import { v4 as uuidv4 } from "uuid"; import { useNavigate } from "react-router-dom"; +import { setLoading } from "slices/viewState"; interface INewBlog {} @@ -25,6 +26,7 @@ const NewBlog = (props: INewBlog) => { return; } + dispatch(setLoading(true)); const blog: IBlog = { Type: "ADD_BLOG", UUID: uuidv4(), @@ -41,10 +43,12 @@ const NewBlog = (props: INewBlog) => { NotificationManager.success(`"${blog.Title}" Created`, "Blog Created"); navigate("/main"); console.log({blog}); + dispatch(setLoading(false)); }) .catch((rejectedValueOrSerializedError) => { // handle error here console.log({rejectedValueOrSerializedError}); + dispatch(setLoading(false)); }); }; diff --git a/src/components/Profile.tsx b/src/components/Profile.tsx index e2fd8b7..bd6a518 100644 --- a/src/components/Profile.tsx +++ b/src/components/Profile.tsx @@ -1,10 +1,13 @@ -import { Button, TextField } from '@mui/material'; -import React, { useState } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { createUser } from "slices/dbSlice"; +import { Button, Grid, TextField } from "@mui/material"; +import React, { useState, useEffect } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { createUser, uploadImage } from "slices/dbSlice"; import { AppDispatch } from "slices/store"; import { NotificationManager } from "./Notification"; import { useNavigate } from "react-router-dom"; +import Avatar from "react-avatar"; +import { setLoading } from "slices/viewState"; +import { getW3link } from "utils/helper"; interface IProfile {} @@ -18,70 +21,116 @@ const Profile = (props: IProfile) => { ); const [avatar, setAvatar] = useState(null); - const onCreate = () => { + const users = useSelector( + (state) => state.db.Users + ); + const [currentUser, setCurrentUser] = useState(null); + + useEffect(() => { + setCurrentUser(account ? users[account] : null); + }, [account, users]); + + useEffect(() => { + setName(currentUser?.Name || ""); + setBio(currentUser?.Bio || ""); + console.log({user: currentUser}); + setAvatar(null); + }, [currentUser]); + + const onSave = async () => { if (!account) { NotificationManager.warning("Please connect to the wallet", "Warn"); return; } - const user: IUser = { - Type: "ADD_USER", - Name: name, - Wallet: account, - Bio: bio - }; + try { + dispatch(setLoading(true)); + + // save avatar + let imageUrl: any = null; + if (avatar) { + imageUrl = await dispatch(uploadImage(avatar)).unwrap(); + console.log({imageUrl}); + } else if (currentUser?.Image) { + imageUrl = currentUser?.Image; + } + - dispatch(createUser(user)) - .unwrap() - .then((user) => { - // handle result here - NotificationManager.success(`"${user.Name}" Created`, "User Created"); - navigate("/main"); - console.log({user: user}); - }) - .catch((rejectedValueOrSerializedError) => { - // handle error here - console.log({rejectedValueOrSerializedError}); - }); + const user: IUser = { + Type: "ADD_USER", + Name: name, + Wallet: account, + Bio: bio, + }; + + if (imageUrl) { + user.Image = imageUrl; + } + + dispatch(createUser(user)) + .unwrap() + .then((user) => { + // handle result here + NotificationManager.success("", "Saved"); + navigate("/main"); + console.log({ user: user }); + dispatch(setLoading(false)); + }) + .catch((rejectedValueOrSerializedError) => { + // handle error here + console.log({ rejectedValueOrSerializedError }); + dispatch(setLoading(false)); + }); + } catch (ex) {} }; const onFile = (e: any) => { setAvatar(e.target.files[0]); - } + }; return ( -
-

Profile

-