Skip to content
This repository was archived by the owner on Jan 24, 2023. It is now read-only.

Commit d586dda

Browse files
committed
add respnsivity and error handling
1 parent 6b00f4a commit d586dda

File tree

12 files changed

+164
-103
lines changed

12 files changed

+164
-103
lines changed

src/App.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { observer, inject } from 'mobx-react'
33
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'
44
import Navbar from './components/Navbar'
55
import SearchInput from './components/SearchInput'
6-
import Images from './components/Images'
6+
import Images from './components/Images/Images'
77
import Favorites from './components/Favorites/Favorites'
88
import { withStyles } from '@material-ui/styles'
99

@@ -25,11 +25,16 @@ const theme = createMuiTheme({
2525
const styles = {
2626
container: {
2727
display: 'flex',
28-
margin: '2% 3%',
2928
justifyContent: 'space-between',
29+
'@media (max-width:1000px)': {
30+
flexDirection: 'column-reverse',
31+
},
3032
},
3133
search: {
3234
width: '65%',
35+
'@media (max-width:1000px)': {
36+
width: '100%',
37+
},
3338
},
3439
}
3540
@inject('imagesStore')

src/components/Favorites/EditDescriptionInput.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const styles = {
88
display: 'flex',
99
},
1010
input: {
11-
fontSize: '0.7em',
11+
fontSize: '0.8em',
1212
},
1313
}
1414
class EditDescriptionInput extends Component {

src/components/Favorites/Favorite.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ const styles = {
1010
display: 'flex',
1111
justifyContent: 'space-between',
1212
alignItems: 'center',
13-
margin: '3% 0',
13+
marginTop: '3%',
1414
overflow: 'hidden',
15+
width: '90%',
1516
},
1617
image: {
1718
width: '10vh',

src/components/Favorites/FavoriteActions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const styles = {
1010
container: {
1111
display: 'flex',
1212
justifyContent: 'space-between',
13-
width: '70%',
13+
width: '100%',
14+
padding: '0 3%',
1415
},
1516
description: {
1617
width: '70%',

src/components/Favorites/FavoriteDialog.js

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,39 @@
11
import React, { Component } from 'react'
2-
import { Dialog } from '@material-ui/core'
3-
import FavoriteActions from './FavoriteActions'
2+
import { Dialog, Fab } from '@material-ui/core'
43
import { withStyles } from '@material-ui/styles'
54

5+
import CloseIcon from '@material-ui/icons/Close'
6+
67
const styles = {
78
image: {
8-
width: '100%',
9-
height: '100%',
10-
},
11-
actions: {
12-
margin: '3% 0',
9+
width: '70vh',
10+
height: '70vh',
1311
display: 'flex',
14-
justifyContent: 'center',
12+
flexDirection: 'column',
13+
justifyContent: 'end',
14+
alignItems: 'flex-end',
15+
backgroundSize: '100% 100%',
16+
},
17+
icon: {
18+
margin: '1%',
19+
width: '35px',
20+
height: '30px',
21+
backgroundColor: 'rgba(52, 70, 93, 0.3)',
1522
},
1623
}
1724

1825
class FavoriteDialog extends Component {
1926
render() {
20-
const {
21-
classes,
22-
favorite,
23-
closeDialog,
24-
isDialogOpen,
25-
descriptionInput,
26-
editFavorite,
27-
handleInput,
28-
isEditModeOn,
29-
removeFavorite,
30-
showEditFavorite,
31-
} = this.props
27+
const { classes, favorite, closeDialog, isDialogOpen } = this.props
3228
return (
3329
<Dialog onClose={closeDialog} open={isDialogOpen}>
34-
<div>
35-
<img className={classes.image} src={favorite.imageURL} alt={favorite.description} />
36-
</div>
37-
<div className={classes.actions}>
38-
<FavoriteActions
39-
favorite={favorite}
40-
handleInput={handleInput}
41-
descriptionInput={descriptionInput}
42-
isEditModeOn={isEditModeOn}
43-
editFavorite={editFavorite}
44-
showEditFavorite={showEditFavorite}
45-
removeFavorite={removeFavorite}
46-
/>
30+
<div
31+
className={classes.image}
32+
style={{ backgroundImage: `url('${favorite.imageURL}')` }}
33+
>
34+
<Fab size='small' className={classes.icon} onClick={closeDialog}>
35+
<CloseIcon />
36+
</Fab>
4737
</div>
4838
</Dialog>
4939
)

src/components/Favorites/Favorites.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React, { Component } from 'react'
22
import { observer, inject } from 'mobx-react'
3-
import { toJS } from 'mobx'
43

54
import { Typography } from '@material-ui/core'
65
import { withStyles } from '@material-ui/styles'
@@ -9,13 +8,20 @@ import EmptyFavorites from './EmptyFavorites'
98

109
const styles = {
1110
container: {
12-
width: '30%',
11+
paddingTop: '2%',
12+
width: '35%',
13+
'@media (max-width:1000px)': {
14+
width: '100%',
15+
},
1316
},
1417
header: {
1518
textAlign: 'center',
1619
},
1720
favorites: {
18-
marginTop: '10.5%',
21+
marginTop: '5%',
22+
display: 'flex',
23+
flexDirection: 'column',
24+
alignItems: 'center',
1925
},
2026
}
2127

@@ -32,7 +38,6 @@ class Favorites extends Component {
3238

3339
render() {
3440
const { classes, imagesStore } = this.props
35-
console.log(toJS(imagesStore.favorites))
3641
return (
3742
<div className={classes.container}>
3843
<Typography color='secondary' className={classes.header} variant='h6'>
@@ -42,7 +47,7 @@ class Favorites extends Component {
4247
{imagesStore.favoritesLength <= 0 ? (
4348
<EmptyFavorites />
4449
) : (
45-
imagesStore.favorites.map(favorite => (
50+
imagesStore.favoritesToArray.map(favorite => (
4651
<Favorite
4752
key={favorite.id}
4853
favorite={favorite}

src/components/Images.js

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/components/Image.js renamed to src/components/Images/Image.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const styles = {
88
display: 'flex',
99
justifyContent: 'flex-end',
1010
alignItems: 'flex-end',
11-
width: '25vh',
12-
height: '25vh',
11+
width: '20vh',
12+
height: '20vh',
1313
margin: '1.5%',
1414
backgroundSize: 'cover',
1515
borderRadius: '1%',
@@ -24,9 +24,8 @@ const styles = {
2424
}
2525

2626
class Image extends Component {
27-
2827
render() {
29-
const { classes, image,saveToFavorites } = this.props
28+
const { classes, image, saveToFavorites } = this.props
3029

3130
if (image) {
3231
return (

src/components/Images/Images.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import React, { Component } from 'react'
2+
import { observer, inject } from 'mobx-react'
3+
import { toJS } from 'mobx'
4+
import { Snackbar, Slide } from '@material-ui/core'
5+
import { withStyles } from '@material-ui/styles'
6+
7+
import Image from './Image'
8+
import NoImagesMessage from './NoImagesMessage'
9+
10+
const styles = {
11+
images: {
12+
display: 'flex',
13+
flexWrap: 'wrap',
14+
justifyContent: 'center',
15+
margin: '3% 4%',
16+
},
17+
infiniteScroll: {
18+
display: 'flex',
19+
justifyContent: 'center',
20+
},
21+
}
22+
23+
@inject('imagesStore')
24+
@observer
25+
class Images extends Component {
26+
constructor() {
27+
super()
28+
this.state = {
29+
isSnackbarOpen: false,
30+
}
31+
}
32+
33+
saveToFavorites = image => {
34+
const favorites = toJS(this.props.imagesStore.favorites)
35+
const favorite = favorites[image.id]
36+
37+
if (!favorite) {
38+
this.props.imagesStore.saveToFavorites(image)
39+
} else {
40+
this.setState({ isSnackbarOpen: true })
41+
}
42+
}
43+
44+
handleClose = () => {
45+
this.setState({ isSnackbarOpen: false })
46+
}
47+
48+
render() {
49+
const { classes } = this.props
50+
const images = toJS(this.props.imagesStore.images)
51+
const { isSnackbarOpen } = this.state
52+
const { noResults } = this.props.imagesStore
53+
return (
54+
<div className={classes.images}>
55+
{noResults ? (
56+
<NoImagesMessage />
57+
) : (
58+
images.map(image => (
59+
<Image key={image.id} image={image} saveToFavorites={this.saveToFavorites} />
60+
))
61+
)}
62+
63+
<Snackbar
64+
anchorOrigin={{
65+
vertical: 'bottom',
66+
horizontal: 'left',
67+
}}
68+
open={isSnackbarOpen}
69+
autoHideDuration={2000}
70+
onClose={this.handleClose}
71+
TransitionComponent={Slide}
72+
message={<span>Image already saved to favorites</span>}
73+
/>
74+
</div>
75+
)
76+
}
77+
}
78+
export default withStyles(styles)(Images)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import React, { Component } from 'react'
2+
3+
class NoImagesMessage extends Component {
4+
render() {
5+
return (
6+
<div>
7+
<h6>No images were found</h6>
8+
</div>
9+
)
10+
}
11+
}
12+
13+
export default NoImagesMessage

0 commit comments

Comments
 (0)