diff --git a/functions/handlers/post.js b/functions/handlers/post.js index 2f5ce4f..788c64e 100644 --- a/functions/handlers/post.js +++ b/functions/handlers/post.js @@ -56,7 +56,7 @@ exports.getallPostsforUser = (req, res) => { .catch(function(err) { return res .status(500) - .json("Failed to retrieve user's posts from database.", err); + .json({message: "Failed to retrieve user's posts from database.", error: err}); }); }; diff --git a/twistter-frontend/src/Writing_Microblogs.js b/twistter-frontend/src/Writing_Microblogs.js index 70b67d0..2b31bb5 100644 --- a/twistter-frontend/src/Writing_Microblogs.js +++ b/twistter-frontend/src/Writing_Microblogs.js @@ -8,6 +8,7 @@ import TextField from '@material-ui/core/TextField'; // import Typography from '@material-ui/core/Typography'; import Button from '@material-ui/core/Button'; import withStyles from "@material-ui/styles/withStyles"; +import CircularProgress from "@material-ui/core/CircularProgress"; const styles = { container: { @@ -21,6 +22,13 @@ const styles = { }, textField: { marginBottom: 15 + }, + progress: { + position: "absolute" + }, + button: { + positon: "relative", + marginBottom: 30 } } @@ -31,7 +39,8 @@ class Writing_Microblogs extends Component { value: "", title: "", topics: "", - characterCount: 250 + characterCount: 250, + loading: false }; this.handleChange = this.handleChange.bind(this); @@ -56,11 +65,15 @@ class Writing_Microblogs extends Component { microBlogTitle: this.state.title, microBlogTopics: this.state.topics.split(", ") }; + + this.setState({ + loading: true + }) const headers = { headers: { "Content-Type": "application/json" } }; - axios + let postPromise = axios .post("/putPost", postData, headers) // TODO: add topics .then(res => { // alert("Post was shared successfully!"); @@ -71,8 +84,9 @@ class Writing_Microblogs extends Component { console.error(err); }); console.log(postData.microBlogTopics); + let topicPromises = []; postData.microBlogTopics.forEach(topic => { - axios + topicPromises.push(axios .post("/putTopic", { following: topic }) @@ -81,10 +95,24 @@ class Writing_Microblogs extends Component { }) .catch(err => { console.error(err); - }); + }) + ) }); event.preventDefault(); - this.setState({ value: "", title: "", characterCount: 250, topics: "" }); + topicPromises.push(postPromise); + Promise.all(topicPromises) + .then(() => { + this.setState({ + value: "", + title: "", + characterCount: 250, + topics: "", + loading: false + }); + }) + .catch((error) => { + console.log(error); + }) } handleChangeforPost(event) { @@ -149,12 +177,14 @@ class Writing_Microblogs extends Component { autoComplete='off' /> diff --git a/twistter-frontend/src/pages/Home.js b/twistter-frontend/src/pages/Home.js index 55cc7a8..44ae553 100644 --- a/twistter-frontend/src/pages/Home.js +++ b/twistter-frontend/src/pages/Home.js @@ -35,11 +35,13 @@ const styles = { class Home extends Component { state = { likes: [], + loading: false, following: null, topics: null }; componentDidMount() { + this.setState({loading: true}); axios .get("/user") .then(res => { @@ -55,7 +57,8 @@ class Home extends Component { .then(res => { // console.log(res.data); this.setState({ - posts: res.data + posts: res.data, + loading: false }); }) .catch(err => console.log(err)); @@ -175,7 +178,9 @@ class Home extends Component {

Loading post...

); - return authenticated ? ( + return ( + authenticated ? ( + this.state.loading ? () : @@ -183,23 +188,19 @@ class Home extends Component { {postMarkup} - - ) : loading ? ( - - ) : ( -
-
- logo -
-
- Welcome to Twistter! -
-
- See the most interesting topics people are following right now. -
+ + ) : loading ? + () + : + ( +
+
+ logo +

+ Welcome to Twistter! +

+ See the most interesting topics people are following right now. +


diff --git a/twistter-frontend/src/pages/otherUser.js b/twistter-frontend/src/pages/otherUser.js index a7b4935..a9ec494 100644 --- a/twistter-frontend/src/pages/otherUser.js +++ b/twistter-frontend/src/pages/otherUser.js @@ -22,6 +22,7 @@ import AddCircle from "@material-ui/icons/AddCircle"; import TextField from "@material-ui/core/TextField"; import VerifiedIcon from "@material-ui/icons/CheckSharp"; import DoneIcon from "@material-ui/icons/Done"; +import CircularProgress from "@material-ui/core/CircularProgress"; // component import "../App.css"; @@ -77,7 +78,8 @@ class user extends Component { user: null, following: null, posts: null, - myTopics: null + myTopics: null, + loading: false }; } @@ -114,7 +116,8 @@ class user extends Component { }; componentDidMount() { - axios + this.setState({loading: true}); + let otherUserPromise = axios .post("/getUserDetails", { handle: this.state.profile }) @@ -126,7 +129,7 @@ class user extends Component { }) .catch(err => console.log(err)); - axios + let userPromise = axios .get("/user") .then(res => { this.setState({ @@ -138,7 +141,7 @@ class user extends Component { }) .catch(err => console.log(err)); - axios + let posts = axios .post("/getOtherUsersPosts", { handle: this.state.profile }) @@ -149,6 +152,14 @@ class user extends Component { }); }) .catch(err => console.log(err)); + + Promise.all([otherUserPromise, userPromise, posts]) + .then(() => { + this.setState({loading: false}); + }) + .catch((error) => { + console.log(error); + }) } render() { @@ -254,6 +265,7 @@ class user extends Component { ); return ( + this.state.loading ? : {imageMarkup} diff --git a/twistter-frontend/src/pages/user.js b/twistter-frontend/src/pages/user.js index 6a189b6..59c096e 100644 --- a/twistter-frontend/src/pages/user.js +++ b/twistter-frontend/src/pages/user.js @@ -13,6 +13,7 @@ import CardMedia from "@material-ui/core/CardMedia"; import CardContent from "@material-ui/core/CardContent"; import Button from "@material-ui/core/Button"; import Grid from "@material-ui/core/Grid"; +import CircularProgress from "@material-ui/core/CircularProgress"; import Chip from "@material-ui/core/Chip"; import Typography from "@material-ui/core/Typography"; @@ -76,7 +77,8 @@ class user extends Component { profile: null, imageUrl: null, topics: null, - newTopic: "" + newTopic: "", + loading: false }; } @@ -127,7 +129,8 @@ class user extends Component { } componentDidMount() { - axios + this.setState({loading: true}) + let userPromise = axios .get("/user") .then(res => { this.setState({ @@ -141,7 +144,7 @@ class user extends Component { }) .catch(err => console.log(err)); - axios + let postsPromise = axios .get("/getallPostsforUser") .then(res => { // console.log(res.data); @@ -150,6 +153,14 @@ class user extends Component { }); }) .catch(err => console.log(err)); + + Promise.all([userPromise, postsPromise]) + .then(() => { + this.setState({loading: false}); + }) + .catch((error) => { + console.log(error) + }) } formatDate(dateString) { @@ -259,6 +270,7 @@ class user extends Component { ) : null; return ( + this.state.loading ? :
{/* */}