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
-