diff --git a/projectSecondPart/src/model-data/PhotoApp.js b/projectSecondPart/src/model-data/PhotoApp.js deleted file mode 100644 index bc1e79f33cd23b356e73a4fe617817bb90c1ebdb..0000000000000000000000000000000000000000 --- a/projectSecondPart/src/model-data/PhotoApp.js +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Model data for PROG2053 part #2 - the photo sharing site. - * This module returns an object called PROG2053Models with the following functions: - * - * PROG2053Models.userListModel - A function that returns the list of users on the system. The - * list is returned as an array of objects containing: - * _id (string) - The ID of the user. - * first_name (string) - The first name of the user. - * last_name (string) - The last name of the user. - * location (string) - The location of the user. - * description (string) - A brief user description. - * occupation (string) - The occupation of the user. - * - * PROG2053Models.userModel - A function that returns the info of the specified user. Called - * with an user ID (id), the function returns n object containing: - * _id (string) - The ID of the user. - * first_name (string) - The first name of the user. - * last_name (string) - The last name of the user. - * location (string) - The location of the user. - * description (string) - A brief user description. - * occupation (string) - The occupation of the user. - * - * PROG2053Models.photoOfUserModel - A function that returns the photos belong to - * the specified user. Called with an user ID (id), the function returns an object containing: - * _id (string) - The ID of the photo - * date_time (date) - he date and time the picture was taken in ISO format. - * file_name (string) - The file name in the image directory of the picture. - * user_id (string) - The user id of the picture's owner. - * comments: {array of objects} - An array of comment objects containing the properties: - * _id (string) - The ID of the comment. - * date_time (date) - The date the comment was made in ISO format. - * comment (string) - The text of the comment. - * user: {object} The user info (see userMode for format) who made the comment - * photo_id: (string) - The ID of the photo the comment belongs to. - * - * PROG2053Models.schemaModel - A function that returns the test info from the fake schema. - * The function returns an object containing: - * _id (string) - The ID of the schema - * __v (number) - The version number - * load_date_time (date) - The date the schema was made in ISO format. - * - * - */ - -class PROG2053Models { - // Create fake test Schema - static schemaInfo = { - load_date_time: 'Fri Apr 29 2016 01:45:15 GMT-0700 (PDT)', - __v: 0, - _id: '57231f1b30e4351f4e9f4bf6' - }; - - // Create init users. - static im = {_id: '57231f1a30e4351f4e9f4bd7', first_name: 'Ian', last_name: 'Malcolm', - location: 'Austin, TX', description: 'Should\'ve stayed in the car.', occupation: 'Mathematician'}; - static er = {_id: '57231f1a30e4351f4e9f4bd8', first_name: 'Ellen', last_name: 'Ripley', - location: 'Nostromo', description: 'Lvl 6 rating. Pilot.', occupation: 'Warrant Officer'}; - static pt = {_id: '57231f1a30e4351f4e9f4bd9', first_name: 'Peregrin', last_name: 'Took', - location: 'Gondor', description: 'Home is behind, the world ahead... ' + - 'And there are many paths to tread. Through shadow, to the edge of night, ' + - 'until the stars are all alight... Mist and shadow, cloud and shade, ' + - 'all shall fade... all... shall... fade... ', occupation: 'Thain'}; - static rk = {_id: '57231f1a30e4351f4e9f4bda', first_name: 'Rey', last_name: 'Kenobi', - location: 'D\'Qar', description: 'Excited to be here!', occupation: 'Rebel'}; - static al = {_id: '57231f1a30e4351f4e9f4bdb', first_name: 'April', last_name: 'Ludgate', - location: 'Pawnee, IN', description: 'Witch', occupation: 'Animal Control'}; - static jo = {_id: '57231f1a30e4351f4e9f4bdc', first_name: 'John', last_name: 'Ousterhout', - location: 'Stanford, CA', description: '<i>CS142!</i>', occupation: 'Professor'}; - - static users = [ - PROG2053Models.im, - PROG2053Models.er, - PROG2053Models.pt, - PROG2053Models.rk, - PROG2053Models.al, - PROG2053Models.jo - ]; - - // Create initial photos. - static photo1 = {_id: '57231f1a30e4351f4e9f4bdd', date_time: '2012-08-30 10:44:23', file_name: 'ouster.jpg', user_id: PROG2053Models.jo._id}; - static photo2 = {_id: '57231f1a30e4351f4e9f4bde', date_time: '2009-09-13 20:00:00', file_name: 'malcolm2.jpg', user_id: PROG2053Models.im._id}; - static photo3 = {_id: '57231f1a30e4351f4e9f4bdf', date_time: '2009-09-13 20:05:03', file_name: 'malcolm1.jpg', user_id: PROG2053Models.im._id}; - static photo4 = {_id: '57231f1a30e4351f4e9f4be0', date_time: '2013-11-18 18:02:00', file_name: 'ripley1.jpg', user_id: PROG2053Models.er._id}; - static photo5 = {_id: '57231f1a30e4351f4e9f4be1', date_time: '2013-09-20 17:30:00', file_name: 'ripley2.jpg', user_id: PROG2053Models.er._id}; - static photo6 = {_id: '57231f1a30e4351f4e9f4be2', date_time: '2009-07-10 16:02:49', file_name: 'kenobi1.jpg', user_id: PROG2053Models.rk._id}; - static photo7 = {_id: '57231f1a30e4351f4e9f4be3', date_time: '2010-03-18 23:48:00', file_name: 'kenobi2.jpg', user_id: PROG2053Models.rk._id}; - static photo8 = {_id: '57231f1a30e4351f4e9f4be4', date_time: '2010-08-30 14:26:00', file_name: 'kenobi3.jpg', user_id: PROG2053Models.rk._id}; - static photo9 = {_id: '57231f1a30e4351f4e9f4be5', date_time: '2013-12-03 09:02:00', file_name: 'took1.jpg', user_id: PROG2053Models.pt._id}; - static photo10 = {_id: '57231f1a30e4351f4e9f4be6', date_time: '2013-12-03 09:03:00', file_name: 'took2.jpg', user_id: PROG2053Models.pt._id}; - static photo11 = {_id: '57231f1a30e4351f4e9f4be7', date_time: '2013-09-04 09:16:32', file_name: 'ludgate1.jpg', user_id: PROG2053Models.al._id}; - static photo12 = {_id: '57231f1a30e4351f4e9f4be8', date_time: '2008-10-16 17:12:28', file_name: 'stick.gif', user_id: PROG2053Models.rk._id}; - - static photos = [ - PROG2053Models.photo1, - PROG2053Models.photo2, - PROG2053Models.photo3, - PROG2053Models.photo4, - PROG2053Models.photo5, - PROG2053Models.photo6, - PROG2053Models.photo7, - PROG2053Models.photo8, - PROG2053Models.photo9, - PROG2053Models.photo10, - PROG2053Models.photo11, - PROG2053Models.photo12 - ]; - - // Create initial comments. - static comment1 = { - _id: '57231f1a30e4351f4e9f4be9', - date_time: '2012-09-02 14:01:00', - comment: 'Learning new programming languages is hard... ' + - 'it\'s so easy to forget a </div>!', user: PROG2053Models.jo, photo_id: PROG2053Models.photo1._id - }; - - static comment2 = { - _id: '57231f1a30e4351f4e9f4bea', - date_time: '2013-09-06 14:02:00', - comment: 'This is another comment, with a bit more text; ' + - 'if the text gets long enough, does it wrap properly ' + - 'from line to line?', user: PROG2053Models.jo, photo_id: PROG2053Models.photo1._id - }; - - static comment3 = { - _id: '57231f1a30e4351f4e9f4beb', - date_time: '2013-09-08 14:06:00', - comment: 'If you see this text in <b>boldface</b> ' + - 'then HTML escaping isn\'t working properly.', user: PROG2053Models.jo, photo_id: PROG2053Models.photo1._id - }; - - static comment4 = { - _id: '57231f1a30e4351f4e9f4bec', - date_time: '2009-09-14 18:07:00', - comment: 'If there is one thing the history of evolution has' + - ' taught us it\'s that life will not be contained. Life breaks ' + - 'free, it expands to new territories and crashes through ' + - 'barriers, painfully, maybe even dangerously, but, uh... well, ' + - 'there it is. Life finds a way.', user: PROG2053Models.im, photo_id: PROG2053Models.photo2._id - }; - - static comment5 = { - _id: '57231f1a30e4351f4e9f4bed', - date_time: '2013-11-28 17:45:13', - comment: 'Back from my trip. Did IQs just... drop sharply while I was ' + - 'away?', user: PROG2053Models.er, photo_id: PROG2053Models.photo5._id - }; - - static comment6 = { - _id: '57231f1a30e4351f4e9f4bee', - date_time: '2013-11-02 14:07:00', - comment: 'Hey Rey, great form. Love what ' + - 'you do with the scavenged tech, got any tips?', user: PROG2053Models.er, photo_id: PROG2053Models.photo7._id - }; - - static comment7 = { - _id: '57231f1a30e4351f4e9f4bef', - date_time: '2013-11-02 14:07:00', - comment: 'Definitely! I love your work! I\'m away on a trip at ' + - 'the moment, but let\'s meet up when I get back! :)', user: PROG2053Models.rk, photo_id: PROG2053Models.photo7._id - }; - - static comment8 = { - _id: '57231f1a30e4351f4e9f4bf0', - date_time: '2010-09-06 13:59:33', - comment: 'Made a new friend today! Well, they followed me ' + - 'home, anyway.', user: PROG2053Models.rk, photo_id: PROG2053Models.photo8._id - }; - - static comment9 = { - _id: '57231f1a30e4351f4e9f4bf1', - date_time: '2008-10-16 18:04:55', - comment: 'Wouldn\'t get anywhere without this beauty! ' + - 'Completely built from scraps by hand, but she goes at top ' + - 'speeds that\'ll rival any First Order piece of junk.', user: PROG2053Models.rk, photo_id: PROG2053Models.photo12._id - }; - - static comment10 = { - _id: '57231f1a30e4351f4e9f4bf2', - date_time: '2013-12-04 13:12:00', - comment: 'What do you mean you haven\'t heard of second ' + - 'breakfast?', user: PROG2053Models.pt, photo_id: PROG2053Models.photo10._id - }; - - static comment11 = { - _id: '57231f1a30e4351f4e9f4bf3', - date_time: '2013-09-04 10:14:32', - comment: 'Beautiful yet cold and aloof. Loner. Does not obey, ' + - 'occasionally chooses to cooperate. ', user: PROG2053Models.al, photo_id: PROG2053Models.photo11._id - }; - - static comment12 = { - _id: '57231f1a30e4351f4e9f4bf4', - date_time: '2016-01-04 2:00:01', - comment: 'Which one are you?', user: PROG2053Models.al, photo_id: PROG2053Models.photo9._id - }; - - static comment13 = { - _id: '57231f1a30e4351f4e9f4bf5', - date_time: '2016-01-04 2:04:01', - comment: 'The tall one.', user: PROG2053Models.pt, photo_id: PROG2053Models.photo9._id - }; - - static comments = [ - PROG2053Models.comment1, - PROG2053Models.comment2, - PROG2053Models.comment3, - PROG2053Models.comment4, - PROG2053Models.comment5, - PROG2053Models.comment6, - PROG2053Models.comment7, - PROG2053Models.comment8, - PROG2053Models.comment9, - PROG2053Models.comment10, - PROG2053Models.comment11, - PROG2053Models.comment12, - PROG2053Models.comment13 - ]; - - static populatedPhotoComments = false; - - static userListModel = () => { - return PROG2053Models.users; - }; - - static userModel = (userId) => { - for (let i = 0; i < PROG2053Models.users.length; i++) { - if (PROG2053Models.users[i]._id === userId) { - return PROG2053Models.users[i]; - } - } - return null; - }; - - static photoOfUserModel = (userId) => { - return PROG2053Models.photos.filter(function (photo) { - return (photo.user_id === userId); - }); - }; - - static schemaModel = () => { - return PROG2053Models.schemaInfo; - }; - - static populatePhotoComments = () => { - PROG2053Models.populatedPhotoComments = true; - PROG2053Models.comments.forEach(function (comment) { - const photo = PROG2053Models.photos.filter(function (photo) { - return (photo._id === comment.photo_id); - })[0]; //only one match. return the content of the match inside the array - - if (!photo.comments) { - photo.comments = []; - } - photo.comments.push(comment); - }); - }; -} - -PROG2053Models.populatePhotoComments(); - -module.exports = PROG2053Models; diff --git a/projectSecondPart/src/photo-share/PhotoShare.jsx b/projectSecondPart/src/photo-share/PhotoShare.jsx index 6a4121158aa1f3371029895adaeba89cb7029c37..0ae0d4b9f8014ef50e82ce768807d9c45561e3ef 100644 --- a/projectSecondPart/src/photo-share/PhotoShare.jsx +++ b/projectSecondPart/src/photo-share/PhotoShare.jsx @@ -3,7 +3,7 @@ import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; import { - Grid, Paper, Typography + Grid, Paper } from '@material-ui/core'; // import necessary components @@ -11,7 +11,6 @@ import TopBar from './components/top-bar/TopBar'; import UserDetail from './pages/user-detail/UserDetail'; import UserList from './pages/user-list/UserList'; import UserPhotos from './pages/user-photos/UserPhotos'; -import PROG2053Models from '../model-data/PhotoApp'; class PhotoShare extends React.Component { render() { @@ -31,17 +30,6 @@ class PhotoShare extends React.Component { <Grid item sm={9}> <Paper className="prog2053-main-grid-item"> <Switch> - <Route exact path="/photo-share"> - <Typography variant="body1"> - Welcome to your photosharing app! This <a href="https://material-ui.com/demos/paper/">Paper</a> component - displays the main content of the application. The {'sm={9}'} prop in - the <a href="https://material-ui.com/layout/grid/">Grid</a> item component makes it responsively - display 9/12 of the window. The Switch component enables us to conditionally render different - components to this part of the screen. You don't need to display anything here on the homepage, - so you should delete this Route component once you get started. - </Typography> - <img src={`/images/${PROG2053Models.photoOfUserModel('57231f1a30e4351f4e9f4bda')[3].file_name}`} alt="test"></img> - </Route> <Route path="/photo-share/users/:userId"> <UserDetail /> </Route> diff --git a/projectSecondPart/src/photo-share/components/top-bar/TopBar.jsx b/projectSecondPart/src/photo-share/components/top-bar/TopBar.jsx index a6c51820d489306ea15a6503a2b4a9c787b0ec9d..103ab59d4d44fc629adcc505e1bfea05e5f1ac04 100644 --- a/projectSecondPart/src/photo-share/components/top-bar/TopBar.jsx +++ b/projectSecondPart/src/photo-share/components/top-bar/TopBar.jsx @@ -12,7 +12,12 @@ import fetchModel from '../../../lib/fetchModelData'; class TopBar extends React.Component { constructor(props) { super(props); - this.state = {headerContext: '', name: 'Group 9'}; + this.state = {headerContext: '', name: 'Group 9', version: ''}; + } + + componentDidMount() { + this.updateHeader(this.props.location.pathname); + this.fetchInfo(); } componentDidUpdate(prevProps) { @@ -21,10 +26,6 @@ class TopBar extends React.Component { } } - componentDidMount() { - this.updateHeader(this.props.location.pathname); - } - updateHeader = (pathname) => { const path = pathname.split('/'); if (path[2] && path[3]) { @@ -44,6 +45,12 @@ class TopBar extends React.Component { } }; + fetchInfo() { + fetchModel('http://localhost:3001/test/info') + .then((value) => this.setState({version: `v.${value.data.__v}`})) + .catch((error) => console.log(error)); + } + render() { return ( <Box sx={{flexGrow: 1}}> @@ -55,6 +62,9 @@ class TopBar extends React.Component { <Typography variant="h5" color="inherit" component="div" sx={{flexGrow: 1}} id="right"> {this.state.headerContext} </Typography> + <Typography variant="h5" color="inherit" component="div" sx={{flexGrow: 1}} id="version"> + {this.state.version} + </Typography> </Toolbar> </AppBar> </Box> diff --git a/projectSecondPart/src/photo-share/pages/user-photos/UserPhotos.jsx b/projectSecondPart/src/photo-share/pages/user-photos/UserPhotos.jsx index 3a8a77315bedf4a5aa46ea4758f3d6d28c1d61b6..0e084b96861f80a55ed8d7e05505c8e9334767e8 100644 --- a/projectSecondPart/src/photo-share/pages/user-photos/UserPhotos.jsx +++ b/projectSecondPart/src/photo-share/pages/user-photos/UserPhotos.jsx @@ -1,7 +1,6 @@ import React from 'react'; import './UserPhotos.css'; import '../Global.css'; -import PROG2053Models from '../../../model-data/PhotoApp'; import {withRouter} from 'react-router'; import * as path from 'path'; import {Link} from 'react-router-dom'; @@ -14,7 +13,7 @@ import fetchModel from '../../../lib/fetchModelData'; class UserPhotos extends React.Component { constructor(props) { super(props); - this.state = {userPhotos: PROG2053Models.photoOfUserModel(this.props.match.params.userId)}; + this.state = {userPhotos: []}; } componentDidMount() { @@ -73,7 +72,7 @@ class UserPhotos extends React.Component { // eslint-disable-next-line react/jsx-key <div className="divImageItem" key={image._id}> <div className="divImage"> - <img src={path.join(__dirname, 'images', image.file_name)}/> + <img src={path.join(__dirname, 'images', image.file_name)} alt={image.file_name} /> </div> <div className="divPhotoInfo"> {this.generateComments(image)}