-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 125 KB
/
.eslintcache
1
[{"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/index.js":"1","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/App.js":"2","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/reportWebVitals.js":"3","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/HomeContainer.jsx":"4","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/MovieContainer.jsx":"5","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/MovieDetails.jsx":"6","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/const.js":"7","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Welcome.jsx":"8","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/MainApp.jsx":"9","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Navbar.jsx":"10","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/AddReviewModal.jsx":"11","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/LoginContainer.jsx":"12","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/SignUpContainer.jsx":"13","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/ReviewScroll.jsx":"14","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/AddWatchlist.jsx":"15","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/login.js":"16","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/userState.js":"17","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/movieId.js":"18","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/MovieGrid.jsx":"19","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/Watchlist.jsx":"20","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/deleteReview.jsx":"21","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserProfile.jsx":"22","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/Header.jsx":"23","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/watchlist.js":"24","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/SearchContainer.jsx":"25","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FollowerModal.jsx":"26","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FolloweesModal.jsx":"27","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserWatchlist.jsx":"28","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserReviews.jsx":"29","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/FriendsWatchlist.jsx":"30","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Discover.jsx":"31","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/Popular.jsx":"32","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FriendsReviews.jsx":"33","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UpdateProfile.jsx":"34"},{"size":523,"mtime":1610916123450,"results":"35","hashOfConfig":"36"},{"size":1622,"mtime":1612916265913,"results":"37","hashOfConfig":"36"},{"size":362,"mtime":1610473992472,"results":"38","hashOfConfig":"36"},{"size":917,"mtime":1612825978275,"results":"39","hashOfConfig":"36"},{"size":1047,"mtime":1612122629084,"results":"40","hashOfConfig":"36"},{"size":8943,"mtime":1612457248496,"results":"41","hashOfConfig":"36"},{"size":877,"mtime":1612319215126,"results":"42","hashOfConfig":"36"},{"size":151,"mtime":1610558902369,"results":"43","hashOfConfig":"36"},{"size":1378,"mtime":1612730619091,"results":"44","hashOfConfig":"36"},{"size":3495,"mtime":1613515647530,"results":"45","hashOfConfig":"36"},{"size":4310,"mtime":1612918791925,"results":"46","hashOfConfig":"36"},{"size":6544,"mtime":1613512245508,"results":"47","hashOfConfig":"36"},{"size":7894,"mtime":1613512252978,"results":"48","hashOfConfig":"36"},{"size":8375,"mtime":1612918081464,"results":"49","hashOfConfig":"36"},{"size":2358,"mtime":1612456962885,"results":"50","hashOfConfig":"36"},{"size":194,"mtime":1610923694574,"results":"51","hashOfConfig":"36"},{"size":123,"mtime":1610935793907,"results":"52","hashOfConfig":"36"},{"size":131,"mtime":1610993607551,"results":"53","hashOfConfig":"36"},{"size":1850,"mtime":1613579275385,"results":"54","hashOfConfig":"36"},{"size":2782,"mtime":1614004642722,"results":"55","hashOfConfig":"36"},{"size":282,"mtime":1611071193793,"results":"56","hashOfConfig":"36"},{"size":516,"mtime":1612460524225,"results":"57","hashOfConfig":"36"},{"size":7319,"mtime":1613521203401,"results":"58","hashOfConfig":"36"},{"size":140,"mtime":1611181865370,"results":"59","hashOfConfig":"36"},{"size":4624,"mtime":1612991613146,"results":"60","hashOfConfig":"36"},{"size":2776,"mtime":1612031489908,"results":"61","hashOfConfig":"36"},{"size":2507,"mtime":1612030668651,"results":"62","hashOfConfig":"36"},{"size":2377,"mtime":1613583002470,"results":"63","hashOfConfig":"36"},{"size":4569,"mtime":1613578792749,"results":"64","hashOfConfig":"36"},{"size":2527,"mtime":1614004484126,"results":"65","hashOfConfig":"36"},{"size":2035,"mtime":1613519943727,"results":"66","hashOfConfig":"36"},{"size":2487,"mtime":1613521441087,"results":"67","hashOfConfig":"36"},{"size":4355,"mtime":1613235310050,"results":"68","hashOfConfig":"36"},{"size":6993,"mtime":1612918933751,"results":"69","hashOfConfig":"36"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},"1idy9dz",{"filePath":"73","messages":"74","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"75","usedDeprecatedRules":"72"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"80","messages":"81","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"82","usedDeprecatedRules":"72"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"85","usedDeprecatedRules":"72"},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"88","messages":"89","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"92","messages":"93","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"94","usedDeprecatedRules":"72"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"97","usedDeprecatedRules":"72"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"100","usedDeprecatedRules":"72"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"103","usedDeprecatedRules":"72"},{"filePath":"104","messages":"105","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"106","usedDeprecatedRules":"72"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"109","usedDeprecatedRules":"72"},{"filePath":"110","messages":"111","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"112","usedDeprecatedRules":"72"},{"filePath":"113","messages":"114","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"117","messages":"118","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"119","usedDeprecatedRules":"72"},{"filePath":"120","messages":"121","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"122","messages":"123","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"124"},{"filePath":"125","messages":"126","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"127","usedDeprecatedRules":"72"},{"filePath":"128","messages":"129","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"130","usedDeprecatedRules":"72"},{"filePath":"131","messages":"132","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"72"},{"filePath":"133","messages":"134","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"135","usedDeprecatedRules":"72"},{"filePath":"136","messages":"137","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"138","usedDeprecatedRules":"72"},{"filePath":"139","messages":"140","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"141","usedDeprecatedRules":"72"},{"filePath":"142","messages":"143","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"144","usedDeprecatedRules":"72"},{"filePath":"145","messages":"146","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"147","usedDeprecatedRules":"72"},{"filePath":"148","messages":"149","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"150","messages":"151","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"152","usedDeprecatedRules":"72"},{"filePath":"153","messages":"154","errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"155","usedDeprecatedRules":"72"},{"filePath":"156","messages":"157","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"158","usedDeprecatedRules":"72"},{"filePath":"159","messages":"160","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"161","usedDeprecatedRules":"72"},"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/index.js",[],["162","163"],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/App.js",["164"],"import \"./App.css\";\n\nimport { BrowserRouter as Router, Switch, Route, useHistory} from \"react-router-dom\";\nimport Welcome from \"./components/Welcome\";\nimport MainApp from \"./containers/MainApp\";\nimport LoginContainer from \"./components/LoginContainer\";\nimport SignUpContainer from \"./components/SignUpContainer\";\nimport { ThemeProvider } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\n\nimport { createMuiTheme } from \"@material-ui/core/styles\";\n\n\n\n\nexport default function App() {\n const [theme, setTheme] = useState(false);\n const history = useHistory()\n const handleUser = (userData) => {\n localStorage.setItem(\"user_id\", userData.id);\n localStorage.setItem(\"username\", userData.username);\n };\n\n \n\n const appliedTheme = createMuiTheme(localStorage.getItem('theme') === 'true' ? light : isDark);\n\n return (\n <ThemeProvider theme={appliedTheme}>\n <Router>\n <Switch>\n <Route\n path=\"/login\"\n component={(props) => (\n <LoginContainer {...props} handleUser={handleUser} />\n )}\n />\n <Route\n path=\"/signup\"\n component={(props) => (\n <SignUpContainer\n {...props}\n handleUser={handleUser}\n \n />\n )}\n />\n \n <MainApp theme={theme} history={history}\n setTheme={setTheme} /> \n </Switch>\n </Router>\n </ThemeProvider>\n );\n}\n\nexport const light = {\n palette: {\n type: \"light\",\n },\n};\n\nexport const isDark = {\n palette: {\n type: \"dark\",\n },\n};\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/reportWebVitals.js",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/HomeContainer.jsx",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/MovieContainer.jsx",["165"],"import React, { Component } from \"react\";\nimport MovieGrid from \"../components/home/MovieGrid\";\nimport { URL_LIST, API_KEY, SORT_URL } from \"../const\";\nimport Watchlist from \"../components/home/Watchlist\";\nimport FriendsWatchlist from \"../components/home/FriendsWatchlist\"\nimport Popular from \"../components/home/Popular\"\nimport { Typography } from \"@material-ui/core\";\n\nimport Paper from '@material-ui/core/Paper';\n\n\nclass MovieContainer extends Component {\n \n state = {\n movies: [],\n };\n\n \n\n componentDidMount() {\n fetch(URL_LIST + API_KEY + SORT_URL)\n .then((resp) => resp.json())\n .then((data) =>\n this.setState({\n movies: data.results,\n })\n );\n }\n\n \n render() {\n return (\n \n <Paper>\n <h4 align='center'>\n Popular\n </h4>\n <MovieGrid movies={this.state.movies} />\n <Watchlist />\n <FriendsWatchlist/>\n <h4 align='center'>Now Playing</h4>\n <Popular/>\n \n \n </Paper>\n \n );\n }\n}\n\nexport default MovieContainer;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/MovieDetails.jsx",["166","167","168","169","170","171","172","173","174","175","176","177"],"import { makeStyles } from \"@material-ui/core/styles\";\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useParams } from \"react-router-dom\";\nimport { URL_IMG, IMG_SIZE_LARGE, IMG_SIZE_SMALL } from \"../const\";\n\nimport Chip from \"@material-ui/core/Chip\";\nimport Button from \"@material-ui/core/Button\";\nimport AddReviewModal from \"./AddReviewModal\";\nimport ReviewScroll from \"./ReviewScroll\";\nimport AddWatchlist from \"./AddWatchlist\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Grid from \"@material-ui/core/Grid\";\n\nimport Discover from \"./Discover\";\nimport { Rating } from \"@material-ui/lab\";\n\nconst token = localStorage.getItem(\"token\");\n\nconst useStyles = makeStyles((theme) => ({\n mainFeaturedPost: {\n position: \"relative\",\n backgroundColor: theme.palette.grey[800],\n color: theme.palette.common.white,\n marginBottom: theme.spacing(4),\n backgroundImage: \"url(https://source.unsplash.com/random)\",\n height: 650,\n\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"left\",\n },\n overlay: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n backgroundColor: \"rgba(0,0,0,.3)\",\n },\n mainFeaturedPostContent: {\n position: \"relative\",\n padding: theme.spacing(3),\n [theme.breakpoints.up(\"md\")]: {\n padding: theme.spacing(6),\n left: 500,\n paddingRight: 0,\n },\n },\n}));\n\nconst MovieDetails = () => {\n const classes = useStyles();\n let { id } = useParams();\n const [movieInfo, handleMovieInfo] = useState([]);\n const [modal, handleModal] = useState(false);\n const [allReviews, handleAllReviews] = useState(false);\n \n const [watchProvider, handleWatchProvider] = useState(\"\");\n const [watchProviderId, handleWatchProviderId] = useState([]);\n \n useEffect(() => {\n fetch(\n `https://api.themoviedb.org/3/movie/${id}?api_key=5a9cf113085e6d11351ca2f692a38bde&language=en-US`\n )\n .then((resp) => resp.json())\n .then((data) => handleMovieInfo(data));\n }, []);\n\n const createMovie = () => {\n if (movieInfo !== \" \") {\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/movies\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n title: movieInfo.title,\n poster: movieInfo.poster_path,\n movie_id: movieInfo.id,\n }),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data));\n }\n };\n\n useEffect(() => {\n fetch(\n `https://api.themoviedb.org/3/movie/${id}/watch/providers?api_key=5a9cf113085e6d11351ca2f692a38bde`\n )\n .then((resp) => resp.json())\n .then((data) => {\n if (\n data.results.US !== undefined &&\n data.results.US.flatrate !== undefined\n ) {\n data.results.US.flatrate.map((provider) => {\n if (provider.logo_path !== null) {\n handleWatchProvider(provider.logo_path);\n handleWatchProviderId(provider);\n }\n console.log(provider.logo_path);\n });\n } else {\n console.log(\"flatrate is undefined\");\n }\n });\n }, []);\n\n useEffect(() => {\n fetch(\n `https://api.themoviedb.org/3/provider/${watchProviderId}?api_key=5a9cf113085e6d11351ca2f692a38bde`\n ).then((resp) => resp.json());\n }, []);\n\n return (\n <Paper>\n <div>\n {movieInfo !== [] ? createMovie() : null}\n <Paper\n className={classes.mainFeaturedPost}\n style={{\n backgroundImage: `url(${\n URL_IMG + IMG_SIZE_LARGE + movieInfo.poster_path\n })`,\n }}\n >\n {modal ? (\n <AddReviewModal\n // handleAddReview={handleAddReview}\n\n open={modal}\n closeModal={handleModal}\n movieId={movieInfo.id}\n />\n ) : null}\n\n {allReviews ? (\n <ReviewScroll\n handleModal={handleAllReviews}\n movieId={movieInfo.id}\n />\n ) : null}\n {\n <img\n style={{ display: \"none\" }}\n src={URL_IMG + IMG_SIZE_LARGE + movieInfo.poster_path}\n alt=\"movie\"\n />\n }\n <div className={classes.overlay} />\n <Grid container>\n <Grid item md={6}>\n <div className={classes.mainFeaturedPostContent}>\n <Button variant=\"contained\" onClick={() => handleModal(true)}>\n Review\n </Button>\n {\" \"}{\" \"}\n <Button\n variant=\"contained\"\n onClick={() => handleAllReviews(true)}\n >\n See All Reviews\n </Button>\n {movieInfo.id ? (\n <AddWatchlist\n \n movieId={movieInfo.id}\n />\n ) : null}\n <p />\n <Typography component=\"h1\" variant=\"h3\" color=\"inherit\">\n {movieInfo.title}\n </Typography>\n <Typography variant=\"h6\" color=\"inherit\" paragraph>\n {movieInfo.release_date\n ? movieInfo.release_date.split(\"-\")[0]\n : null}\n </Typography>\n <Typography variant=\"h6\" color=\"inherit\" paragraph>\n <Rating\n value={movieInfo.vote_average / 2}\n precision={0.5}\n readOnly\n ></Rating>\n <Typography variant=\"subtitle1\">\n {watchProvider.length !== 0 ? (\n watchProviderId.provider_name ===\n \"Starz Play Amazon Channel\" ? (\n <a\n href={\n \"https://www.amazon.com/Amazon-Video/b/?&node=2858778011&ref=dvm_MLP_ROWNA_US_1\"\n }\n target=\"_blank\"\n >\n <img src={URL_IMG + IMG_SIZE_SMALL + watchProvider} />\n </a>\n ) : watchProviderId.provider_name ===\n \"HBO Now Amazon Channel\" ? (\n <a\n href={\n \"https://www.amazon.com/Amazon-Video/b/?&node=2858778011&ref=dvm_MLP_ROWNA_US_1\"\n }\n target=\"_blank\"\n >\n <img src={URL_IMG + IMG_SIZE_SMALL + watchProvider} />\n </a>\n ) : /\\s/g.test(watchProviderId) ? (\n <a\n href={`http://www.${watchProviderId.provider_name.replace(\n /\\s/g,\n \"\"\n )}.com`}\n target=\"_blank\"\n >\n <img src={URL_IMG + IMG_SIZE_SMALL + watchProvider} />\n </a>\n ) : (\n <a\n href={`http://www.${watchProviderId.provider_name}.com`}\n target=\"_blank\"\n >\n <img src={URL_IMG + IMG_SIZE_SMALL + watchProvider} />\n </a>\n )\n ) : null}\n </Typography>\n </Typography>\n <Typography variant=\"subtitle1\" href=\"#\">\n {movieInfo.genres\n ? movieInfo.genres.map((genre, id) => (\n <Chip\n key={id}\n size=\"small\"\n label={genre.name}\n color=\"primary\"\n />\n ))\n : null}\n <p />\n <Typography fontWeight=\"fontWeightMedium\">\n Runtime: {movieInfo.runtime} minutes\n </Typography>\n <p />\n </Typography>\n <Typography component=\"h1\" variant=\"subtitle1\" href=\"#\">\n {movieInfo.overview}\n </Typography>\n </div>\n </Grid>\n </Grid>\n </Paper>\n {movieInfo.id !== undefined ? (\n <Paper>\n <div>\n <h4 align=\"center\">You May Also Like</h4>\n {/* <ReviewScroll movieId={movieInfo.id} reviewAdded={reviewAdded} /> */}\n <Discover movieId={movieInfo.id} />\n </div>\n </Paper>\n ) : null}\n </div>\n </Paper>\n );\n};\n\nexport default MovieDetails;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/const.js",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Welcome.jsx",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/containers/MainApp.jsx",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Navbar.jsx",["178","179"],"import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Button from \"@material-ui/core/Button\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { useHistory } from \"react-router-dom\";\nimport HomeIcon from \"@material-ui/icons/Home\";\nimport Brightness2Icon from \"@material-ui/icons/Brightness2\";\nimport Brightness5Icon from \"@material-ui/icons/Brightness5\";\nimport Paper from \"@material-ui/core/Paper\";\n\n\nconst username = localStorage.getItem(\"username\");\nconst userId = localStorage.getItem(\"user_id\");\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n toolbarTitle: {\n flex: 1,\n },\n toolbarSecondary: {\n justifyContent: \"space-between\",\n overflowX: \"auto\",\n },\n toolbarLink: {\n // padding: theme.spacing(1),\n flexShrink: 0,\n },\n}));\n\n\nexport default function Header(props) {\n const classes = useStyles();\n const { theme, setTheme } = props;\n const history = useHistory();\n\n const icon = localStorage.getItem('theme') === 'true' ? <Brightness5Icon/> : <Brightness2Icon />;\n \n const darkMode = () => {\n \n setTheme(!theme)\n localStorage.setItem('theme', theme)\n if(localStorage.getItem('theme') === 'true') {\n localStorage.setItem('theme', 'false')\n }\n localStorage.setItem('theme', !theme )\n }\n\n const logout = () => {\n localStorage.clear();\n history.push(\"/login\");\n window.location.reload()\n };\n\n const userProfile = () => {\n history.push(\"/\" + username + \"/\" + userId);\n window.location.reload()\n };\n\n const handleSearch = () => {\n history.push(\"/search\");\n \n };\n\n const goHome = () => {\n history.push(\"/\");\n \n };\n return (\n <React.Fragment>\n\n\n \n <Paper>\n <Toolbar className={classes.toolbar}>\n <IconButton onClick={() => userProfile()}>\n <Avatar size=\"small\" src=\"/broken-image.jpg\" />\n </IconButton>\n <IconButton onClick={() => goHome()}>\n <HomeIcon fontSize=\"large\" />\n </IconButton>\n <Typography\n component=\"h1\"\n variant=\"h4\"\n color=\"inherit\"\n align=\"center\"\n noWrap\n className={classes.toolbarTitle}\n >\n Cinematic\n </Typography>\n <IconButton\n edge=\"end\"\n color=\"inherit\"\n aria-label=\"mode\"\n onClick={() => darkMode()}\n\n // onClick={() => localStorage.setItem('newTheme', !theme) }\n >\n {icon}\n </IconButton>\n <IconButton onClick={() => handleSearch()}>\n <SearchIcon />\n </IconButton>\n <Button variant=\"outlined\" size=\"small\" onClick={() => logout()}>\n Logout\n </Button>\n </Toolbar>\n\n <Link\n color=\"inherit\"\n noWrap\n // key={section.title}\n variant=\"body2\"\n // href={section.url}\n className={classes.toolbarLink}\n // {sections.title}\n ></Link>\n </Paper>\n </React.Fragment>\n );\n}\n\nHeader.propTypes = {\n sections: PropTypes.array,\n title: PropTypes.string,\n};\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/AddReviewModal.jsx",["180","181"],"import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Button from \"@material-ui/core/Button\";\nimport Rating from \"@material-ui/lab/Rating\";\nimport TextareaAutosize from \"@material-ui/core/TextareaAutosize\";\nimport Alert from \"@material-ui/lab/Alert\";\n\nimport { useRecoilState } from \"recoil\";\n\nimport MovieIdState from \"../recoil/movieId\";\n\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n \n },\n\n paper: {\n position: \"absolute\",\n width: 350,\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n}));\n\nexport default function AddReviewModal({\n open,\n closeModal,\n title,\n poster,\n movieId,\n\n // handleAddReview\n}) {\n const classes = useStyles();\n const [rating, setRating] = useState(1);\n const [text, setText] = useState(\"\");\n const [backendMovieId, handleBackendMovieId] = useRecoilState(MovieIdState);\n const [hover, setHover] = React.useState(-1);\n\n \n \n\n useEffect(() => {\n const data = {};\n data.title = title;\n data.poster = poster;\n data.movie_id = movieId;\n\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/movies\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n title: title,\n poster: poster,\n movie_id: movieId,\n }),\n })\n .then((resp) => resp.json())\n .then((dataArr) => findMovie());\n }, []);\n\n const findMovie = () => {\n if (movieId !== 0) {\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/find_movie/${movieId}`)\n .then((resp) => resp.json())\n .then((data) => handleBackendMovieId(data.id));\n }\n };\n\n const handleClose = () => {\n closeModal(false);\n };\n\n const handleSubmit = (event) => {\n const movieData = {};\n movieData.movie_id = backendMovieId;\n movieData.user_id = localStorage.getItem(\"user_id\");\n movieData.rating = rating;\n movieData.likes = 0;\n movieData.body = text;\n\n event.preventDefault();\n if (text !== \"\") {\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/reviews\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(movieData),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data));\n }\n document.getElementsByTagName(\"form\")[0].reset();\n setRating(1);\n // handleAddReview(true)\n closeModal(false)\n };\n\n const body = (\n <div className={classes.paper}>\n <h2 id=\"simple-modal-title\">{title}</h2>\n {handleSubmit && text === \"\" ? (\n <Alert severity=\"warning\">Review is empty</Alert>\n ) : null}\n <form\n className={classes.root}\n noValidate\n autoComplete=\"off\"\n onSubmit={(e) => handleSubmit(e)}\n >\n <Rating\n style={{ width: 200 }}\n name=\"simple-controlled\"\n precision={1}\n defaultValue={1}\n value={rating}\n onChange={(event, newRating) => {\n setRating(newRating);\n }}\n onChangeActive={(event, newHover) => {\n setHover(newHover);\n }}\n />\n <TextareaAutosize\n aria-label=\"minimum height\"\n rowsMin={3}\n placeholder=\"\"\n onChange={(event) => setText(event.target.value)}\n />\n <Button type=\"submit\" color=\"textPrimary\" className={classes.submit}>\n Submit\n </Button>\n </form>\n </div>\n );\n\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n {/* {rating !== null && <Box ml={2}>{labels[hover !== -1 ? hover : rating]}</Box>} */}\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/LoginContainer.jsx",["182","183"],"import React, { useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Grid from \"@material-ui/core/Grid\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useHistory } from \"react-router-dom\";\nimport { useRecoilState } from \"recoil\";\nimport userState from \"../recoil/userState\";\nimport loggedInState from \"../recoil/login\";\nimport GitHubIcon from \"@material-ui/icons/GitHub\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\n\nfunction Copyright() {\n return (\n <div>\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {\"Copyright © \"}\n <Link\n color=\"inherit\"\n href=\"https://github.com/jacobkagon\"\n target=\"_blank\"\n >\n <GitHubIcon fontSize=\"small\" GitHubIcon /> Jacob\n </Link>{\" \"}\n {new Date().getFullYear()}\n {\".\"}\n </Typography>\n <a href=\"https://www.themoviedb.org/\" target=\"_blank\" color=\"inherit\">\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n API courtesy of TMDB\n </Typography>\n </a>\n </div>\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: \"100vh\",\n },\n image: {\n backgroundImage:\n \"url(https://images.unsplash.com/photo-1515634928627-2a4e0dae3ddf?ixid=MXwxMjA3fDB8MHxzZWFyY2h8MTl8fG1vdmllfGVufDB8fDB8&ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=60)\",\n backgroundRepeat: \"no-repeat\",\n backgroundColor:\n theme.palette.type === \"light\"\n ? theme.palette.grey[50]\n : theme.palette.grey[900],\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n },\n paper: {\n margin: theme.spacing(8, 4),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n toolbarTitle: {\n flex: 1,\n },\n toolbar: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nexport default function SignInSide({ handleUser }) {\n const classes = useStyles();\n const [username, setUsername] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const history = useHistory();\n const [stateUser, setUser] = useRecoilState(userState);\n const [loggedIn, setLoggedIn] = useRecoilState(loggedInState);\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/login\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({\n user: {\n username,\n password,\n },\n }),\n })\n .then((resp) => resp.json())\n .then((data) => {\n let newData = data;\n localStorage.setItem(\"token\", newData.jwt);\n if (data.user !== undefined) {\n setUser([...stateUser, data.user]);\n handleUser(newData.user);\n setLoggedIn(true);\n history.push(\"/\");\n window.location.reload()\n } else {\n alert(\"Incorrect credentials\");\n }\n });\n setUsername(\"\");\n setPassword(\"\");\n };\n\n return (\n <div>\n <Toolbar className={classes.toolbar}>\n <Typography\n component=\"h1\"\n variant=\"h3\"\n color=\"inherit\"\n align=\"center\"\n noWrap\n className={classes.toolbarTitle}\n >\n Cinematic\n </Typography>\n </Toolbar>\n <Grid container component=\"main\" className={classes.root}>\n {console.log(stateUser)}\n <CssBaseline />\n <Grid item xs={false} sm={4} md={7} className={classes.image} />\n <Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square>\n <div className={classes.paper}>\n <Avatar className={classes.avatar}>\n <LockOutlinedIcon />\n </Avatar>\n <Typography component=\"h1\" variant=\"h5\">\n Sign in\n </Typography>\n <form\n className={classes.form}\n noValidate\n onSubmit={(e) => handleSubmit(e)}\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n id=\"username\"\n label=\"Username\"\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n value={username}\n onChange={(event) => setUsername(event.target.value)}\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n <FormControlLabel\n control={<Checkbox value=\"remember\" color=\"primary\" />}\n label=\"Remember me\"\n />\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n >\n Sign In\n </Button>\n <Grid container>\n <Grid item xs></Grid>\n <Grid item container>\n <Link href=\"/signup\" variant=\"body2\" color=\"inherit\">\n {\"Don't have an account? Sign Up\"}\n </Link>\n </Grid>\n </Grid>\n <Box mt={5}>\n <Copyright />\n </Box>\n </form>\n </div>\n </Grid>\n </Grid>\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/SignUpContainer.jsx",["184","185","186","187","188","189","190"],"import React, { useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\n\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { BrowserRouter as Router, useHistory } from \"react-router-dom\";\nimport userData from \"../recoil/userState\";\nimport loggedInState from \"../recoil/login\";\nimport { useRecoilState } from \"recoil\";\nimport GitHubIcon from \"@material-ui/icons/GitHub\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\n\n// import PropTypes from 'prop-types';\n// import axios from 'axios';\n// import { createUser } from '../redux/actions/authAction';\n\nfunction Copyright() {\n return (\n <div>\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {\"Copyright © \"}\n <Link\n color=\"inherit\"\n href=\"https://github.com/jacobkagon\"\n target=\"_blank\"\n >\n <GitHubIcon fontSize=\"small\" /> Jacob\n </Link>{\" \"}\n {new Date().getFullYear()}\n {\".\"}\n </Typography>\n <a href=\"https://www.themoviedb.org/\" target=\"_blank\" color=\"inherit\">\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n API courtesy of TMDB and \n </Typography>\n </a>\n </div>\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(3),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n toolbarTitle: {\n flex: 1,\n },\n toolbar: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nexport default function SignUp({ handleUser }) {\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [username, setUsername] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [errors, setErrors] = useState([]);\n const [stateUser, setUser] = useRecoilState(userData);\n const [loggedIn, setLoggedIn] = useRecoilState(loggedInState);\n\n const history = useHistory();\n\n const classes = useStyles();\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/users\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({\n user: {\n first_name: firstName,\n last_name: lastName,\n username,\n email,\n password,\n },\n }),\n })\n .then((resp) => resp.json())\n .then((data) => {\n if (data.errors) throw data.errors;\n else return data;\n })\n .then((data) => {\n console.log(data);\n localStorage.setItem(\"token\", data.jwt);\n\n if (data.user) {\n setUser(data.user);\n setLoggedIn(true);\n handleUser(data.user);\n history.push(\"/\");\n window.location.reload()\n\n } else {\n alert(\"Please fill in empty fields or choose unique username\");\n }\n })\n .catch((errors) => {\n setErrors(errors);\n console.error(errors);\n });\n };\n\n return (\n <div>\n <Toolbar className={classes.toolbar}>\n <Typography\n component=\"h1\"\n variant=\"h3\"\n color=\"inherit\"\n align=\"center\"\n noWrap\n className={classes.toolbarTitle}\n >\n Cinematic\n </Typography>\n </Toolbar>\n\n <Container component=\"main\" maxWidth=\"xs\">\n <CssBaseline />\n <div className={classes.paper}>\n <Avatar className={classes.avatar}>\n <LockOutlinedIcon />\n </Avatar>\n <Typography component=\"h1\" variant=\"h5\">\n Sign up\n </Typography>\n <form\n className={classes.form}\n noValidate\n onSubmit={(e) => handleSubmit(e)}\n >\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6}>\n <TextField\n autoComplete=\"fname\"\n name=\"firstName\"\n variant=\"outlined\"\n required\n fullWidth\n id=\"firstName\"\n label=\"First Name\"\n autoFocus\n value={firstName}\n onChange={(event) => setFirstName(event.target.value)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"lastName\"\n label=\"Last Name\"\n name=\"lastName\"\n autoComplete=\"lname\"\n value={lastName}\n onChange={(event) => setLastName(event.target.value)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"username\"\n label=\"Username\"\n name=\"username\"\n autoComplete=\"username\"\n value={username}\n onChange={(event) => setUsername(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"email\"\n label=\"Email Address\"\n name=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}></Grid>\n </Grid>\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n >\n Sign Up\n </Button>\n <Grid container justify=\"flex-end\">\n <Grid item container>\n <Link href=\"/login\" variant=\"body2\" color=\"textSecondary\">\n Already have an account? Sign in\n </Link>\n </Grid>\n <a href=\"https://www.themoviedb.org/\" target=\"_blank\">\n <img\n align=\"right\"\n width=\"40\"\n src=\"https://pbs.twimg.com/profile_images/1243623122089041920/gVZIvphd_400x400.jpg\"\n />\n </a>\n </Grid>\n </form>\n </div>\n <Box mt={5}>\n <Copyright />\n </Box>\n </Container>\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/ReviewScroll.jsx",["191","192","193","194"],"import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Link from \"@material-ui/core/Link\";\n\nimport { deepOrange } from \"@material-ui/core/colors\";\n\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport List from \"@material-ui/core/List\";\nimport Divider from \"@material-ui/core/Divider\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Rating } from \"@material-ui/lab\";\nimport ThumbUpIcon from \"@material-ui/icons/ThumbUp\";\nimport Card from \"@material-ui/core/Card\";\nimport Container from \"@material-ui/core/Container\";\nimport ThumbUpAltRoundedIcon from \"@material-ui/icons/ThumbUpAltRounded\";\n\nconst token = localStorage.getItem(\"token\");\nconst userId = +localStorage.getItem(\"user_id\");\nlet likez;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n overflow: \"hidden\",\n backgroundColor: theme.palette.background.paper,\n },\n gridList: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n modal: {\n alignItems: \"center\",\n justifyContent: \"center\",\n\n position: \"absolute\",\n\n display: \"grid\",\n\n overflow: \"scroll\",\n },\n\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n\n h3: {\n align: \"center\",\n },\n strong: {\n fontWeight: theme.typography.fontWeightBold,\n },\n}));\n\nexport default function ReviewScroll({ handleModal, movieId }) {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n const [movieReviews, handleMovieReviews] = useState([]);\n const [addReview, handleAddReview] = useState(false);\n const [sort, handleSort] = useState(\"review date\");\n\n const handleClose = () => {\n setOpen(false);\n handleModal(false);\n };\n\n useEffect(() => {\n // error i'm getting is movieReviews is not a function.\n //You must create a ternary to prevent data from going to state.\n\n fetch(\n `https://cinematic-backend.herokuapp.com/api/v1/movie_review/${movieId}`,\n {\n Authorization: `Bearer ${token}`,\n }\n )\n .then((resp) => resp.json())\n .then((data) => {\n handleMovieReviews(data);\n });\n handleAddReview(false);\n }, [addReview]);\n\n const addLike = (review) => {\n let userLikes;\n\n review.likes.map((like) => {\n if (like.user_id !== userId) {\n userLikes = true;\n } else {\n userLikes = false;\n }\n });\n\n if (userLikes === true || review.likes.length >= 0) {\n const data = {};\n data.user_id = userId;\n data.review_id = review.id;\n if (review !== null) {\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/like\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n\n body: JSON.stringify(data),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data));\n handleAddReview(true);\n }\n } else {\n console.log(\"you've already liked this\");\n }\n };\n\n const compare = (a, b) => {\n return a > b ? -1 : a < b ? 1 : 0;\n };\n\n const filterReviews = () => {\n let sortedReviews = movieReviews;\n if (sort === \"Review Date\") {\n sortedReviews = sortedReviews.sort((reviewA, reviewB) =>\n compare(reviewA.created_at, reviewB.created_at)\n );\n } else if (sort === \"Rating\") {\n sortedReviews = sortedReviews.sort((reviewA, reviewB) =>\n compare(reviewA.rating, reviewB.rating)\n );\n } else {\n sortedReviews = sortedReviews.sort((reviewA, reviewB) =>\n compare(reviewA.likes, reviewB.likes)\n );\n }\n return sortedReviews;\n };\n\n const body = (\n <List className={classes.paper}>\n <Typography\n color=\"textPrimary\"\n variant=\"h5\"\n align=\"center\"\n id=\"simple-modal-title\"\n ></Typography>\n <div>\n {movieReviews.length !== 0 ? (\n <div>\n <Typography align=\"center\" color=\"textPrimary\" variant=\"h5\">\n Reviews\n </Typography>\n <Container align=\"center\">\n <label>Sort By:</label>\n <label>\n <input\n type=\"radio\"\n value=\"Rating\"\n name=\"Sort\"\n onChange={() => handleSort(\"Rating\")}\n />\n Rating\n </label>\n <label>\n <input\n type=\"radio\"\n value=\"Helpfullness\"\n name=\"Sort\"\n onChange={() => handleSort(\"Helpfullness\")}\n />\n Helpfullness\n </label>\n <label>\n <input\n type=\"radio\"\n value=\"Review Date\"\n name=\"Sort\"\n onChange={() => handleSort(\"Review Date\")}\n />\n Review Date\n </label>\n </Container>\n {filterReviews().map((review) => (\n <Card>\n <ListItem key={review.id} alignItems=\"flex-start\">\n <ListItemAvatar></ListItemAvatar>\n <ListItemText\n secondary={\n <React.Fragment>\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.inline}\n color=\"textPrimary\"\n ></Typography>\n <Link\n color=\"inherit\"\n href={`/${review.user.username}/${review.user.id}`}\n >\n <Typography color=\"textPrimary\">\n {review.user.username}\n </Typography>\n </Link>\n <Typography>\n <Rating\n name=\"read-only\"\n value={review.rating}\n readOnly\n ></Rating>\n </Typography>\n <Typography color=\"textPrimary\">\n {review.body}\n </Typography>\n <Typography color=\"textPrimary\">\n {new Date(review.created_at).toDateString()}\n </Typography>\n </React.Fragment>\n }\n />\n <div style={{ margin: \"6px\" }}>\n {review.likes.length}\n\n {\"\"}\n </div>\n\n {review.likes.map((like) => {\n like.user_id !== userId ? (likez = true) : (likez = false);\n })}\n\n {likez === true || review.likes.length === 0 ? (\n <ThumbUpIcon onClick={() => addLike(review)} />\n ) : (\n <ThumbUpIcon color=\"primary\" />\n )}\n </ListItem>\n </Card>\n ))}\n\n <Divider variant=\"inset\" component=\"li\" />\n </div>\n ) : (\n <Typography variant=\"h5\" color=\"textPrimary\">\n No Reviews\n </Typography>\n )}\n </div>\n </List>\n );\n\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/AddWatchlist.jsx",["195","196","197"],"import React, { useEffect, useState } from \"react\";\nimport { useRecoilState } from \"recoil\";\nimport movieIdState from \"../recoil/movieId\";\nimport Button from \"@material-ui/core/Button\";\n\nconst token = localStorage.getItem(\"token\");\nconst userId = localStorage.getItem(\"user_id\");\n\nconst AddWatchlist = ({ movieId }) => {\n const [backendMovieId, handleBackendMovieId] = useRecoilState(movieIdState);\n\n const [isIn, isReallyIn] = useState(false);\n\n useEffect(() => {\n fetch(\n `https://cinematic-backend.herokuapp.com/api/v1/find_movie/${movieId}`,\n {\n headers: { Authorization: `Bearer ${token}` },\n }\n )\n .then((resp) => resp.json())\n .then((data) => {\n if (data !== null) {\n handleBackendMovieId(data.id);\n }\n });\n }, []);\n\n useEffect(async () => {\n let movies = [];\n await fetch(\n `https://cinematic-backend.herokuapp.com/api/v1/user_watchlist/${userId}`,\n {\n headers: { Authorization: `Bearer ${token}` },\n }\n )\n .then((resp) => resp.json())\n .then((data) => data.map((data) => movies.push(data.movie.id)));\n\n if (movies.includes(backendMovieId)) {\n isReallyIn(true);\n }\n });\n\n const removeFromWatchlist = async () => {\n await fetch(\n `https://cinematic-backend.herokuapp.com/api/v1/watchlist/${userId}/${backendMovieId}`,\n {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${token}` },\n }\n );\n };\n\n const addToWatchlist = async () => {\n await fetch(\"https://cinematic-backend.herokuapp.com/api/v1/watchlist\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n user_id: userId,\n movie_id: backendMovieId,\n }),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data))\n\n .catch((error) => console.log(error));\n };\n\n return (\n <div>\n <br />\n {isIn === false ? (\n <Button variant=\"contained\" onClick={() => addToWatchlist()}>\n Add to Watchlist\n </Button>\n ) : (\n <Button variant=\"contained\" onClick={() => removeFromWatchlist()}>\n Remove from Watchlist\n </Button>\n )}\n </div>\n );\n};\n\nexport default AddWatchlist;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/login.js",["198","199"],"import {atom} from 'recoil'\nimport {selector, useRecoilState} from 'recoil'\n\nconst loggedInState = atom({\n key: \"loggedInState\",\n default: false\n});\n\nexport default loggedInState;\n\n\n\n\n\n\n\n\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/userState.js",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/movieId.js",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/MovieGrid.jsx",["200","201","202","203","204","205"],"import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridList from \"@material-ui/core/GridList\";\nimport GridListTile from \"@material-ui/core/GridListTile\";\nimport IconButton from \"@material-ui/core/IconButton\";\n\nimport GridListTileBar from \"@material-ui/core/GridListTileBar\";\nimport InfoIcon from \"@material-ui/icons/Info\";\n\nimport Link from \"@material-ui/core/Link\";\n\nimport { URL_IMG, IMG_SIZE_LARGE } from \"../../const\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n overflow: \"hidden\",\n backgroundColor: theme.palette.background.paper,\n },\n\n gridList: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900,\n height: 320,\n },\n gridListTile: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900,\n height: 320,\n display: \"flex\",\n borderRadius: \"20%\",\n },\n\n icon: {\n color: \"rgba(255, 255, 255, 0.54)\",\n },\n}));\n\nexport default function MovieGrid({ movies }) {\n const classes = useStyles();\n const [movieShow, handleMovieShow] = React.useState(false);\n\n const body = \"hello\";\n\n return (\n <div className={classes.root}>\n <GridList className={classes.gridList} cols={4.5}>\n {movies.map((movie, id) => (\n <GridListTile key={id} style={{ height: \"300px\" }}>\n <Link href={\"/movie/\" + movie.id}>\n <img\n src={URL_IMG + IMG_SIZE_LARGE + movie.poster_path}\n alt={movie.title}\n />\n </Link>\n </GridListTile>\n ))}\n </GridList>\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/Watchlist.jsx",["206","207","208","209","210","211","212","213"],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/deleteReview.jsx",[],["214","215"],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserProfile.jsx",["216","217","218"],"import React, {useEffect, useState} from 'react';\nimport {useParams} from 'react-router-dom'\nimport Header from './Header'\nimport Paper from \"@material-ui/core/Paper\";\n\n\n\nconst token = localStorage.getItem('token')\n\n\n const UserProfile = () => {\n \n const currentUser = localStorage.getItem('user_id')\n \n let { user_id } = useParams();\n \n return (\n <Paper>\n <div>\n <Header userId={user_id} currentUser={currentUser}/>\n </div>\n </Paper>\n );\n}\n\nexport default UserProfile\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/Header.jsx",["219","220","221","222"],"import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport Button from \"@material-ui/core/Button\";\n\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport FollowerModal from \"./FollowerModal\";\nimport FollowingModal from \"./FolloweesModal\";\nimport UserWatchlist from \"./UserWatchlist\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport UserReviews from \"./UserReviews\";\nimport FriendsReviews from \"./FriendsReviews\";\nimport UpdateProfile from \"./UpdateProfile\";\n\nconst token = localStorage.getItem(\"token\");\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n toolbarTitle: {\n flex: 1,\n },\n toolbarSecondary: {\n justifyContent: \"space-between\",\n overflowX: \"auto\",\n },\n toolbarLink: {\n padding: theme.spacing(1),\n flexShrink: 0,\n },\n mainFeaturedPost: {\n position: \"relative\",\n backgroundColor: theme.palette.grey[800],\n color: theme.palette.common.white,\n marginBottom: theme.spacing(4),\n backgroundImage: \"url(https://source.unsplash.com/random)\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n },\n overlay: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n backgroundColor: \"rgba(0,0,0,.3)\",\n },\n mainFeaturedPostContent: {\n position: \"relative\",\n padding: theme.spacing(1),\n [theme.breakpoints.up(\"md\")]: {\n padding: theme.spacing(8),\n paddingRight: 0,\n },\n },\n}));\n\nexport default function Header(props) {\n const classes = useStyles();\n const { userId, currentUser } = props;\n const [userData, handleUserData] = useState([]);\n const [isFollowing, handleIsFollowing] = useState(false);\n const [followerModal, handleFollowerModal] = useState(false);\n const [followingModal, handleFollowingModal] = useState(false);\n const [userReviews, handleUserReviews] = useState(false);\n const [friendsReviews, handleFriendsReviews] = useState(false);\n const [updateProfile, handleProfileUpdate] = useState(false);\n const [closeUpdateModal, handleClose] = useState(false);\n\n useEffect(() => {\n let followerIds = [];\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/users/${userId}`, {\n headers: { Authorization: `Bearer ${token}` },\n })\n .then((resp) => resp.json())\n .then((data) => {\n handleUserData(data);\n data.followers.map((follower) => followerIds.push(follower.id));\n followerIds.includes(+currentUser)\n ? handleIsFollowing(true)\n : handleIsFollowing(false);\n });\n }, [isFollowing]);\n\n \n\n const followUser = () => {\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/friendships`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n follower_id: currentUser,\n followee_id: userId,\n }),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data));\n handleIsFollowing(true)\n };\n\n const unfollowUser = () => {\n fetch(\n `https://cinematic-backend.herokuapp.com/api/v1/friendships/${currentUser}/${userId}`,\n {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${token}` },\n }\n );\n handleIsFollowing(false)\n };\n\n return (\n \n <React.Fragment>\n <Paper\n className={classes.mainFeaturedPost}\n style={{ backgroundImage: null }}\n >\n {/* Increase the priority of the hero background image */}\n {<img style={{ display: \"none\" }} src=\"\" alt=\"\" />}\n <div className={classes.overlay} />\n <Grid container>\n <Grid item md={6}>\n <div className={classes.mainFeaturedPostContent}>\n {userId != currentUser ? (\n isFollowing ? (\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => unfollowUser()}\n >\n Following\n </Button>\n ) : (\n <Button\n size=\"small\"\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => followUser()}\n >\n Follow\n </Button>\n )\n ) : null}\n\n <Typography\n component=\"h1\"\n variant=\"h3\"\n color=\"inherit\"\n gutterBottom\n >\n {userData.username}{\" \"}\n {userId === currentUser ? (\n <SettingsIcon onClick={() => handleProfileUpdate(true)} />\n ) : null}\n </Typography>\n\n <Typography variant=\"h5\" color=\"inherit\">\n <Link color=\"inherit\" onClick={() => handleFollowerModal(true)}>\n {userData.followers_count} Followers\n </Link>\n </Typography>\n\n <Typography variant=\"h5\" color=\"inherit\">\n <Link\n color=\"inherit\"\n onClick={() => handleFollowingModal(true)}\n >\n {userData.followee_count} Following\n </Link>\n </Typography>\n <Typography variant=\"h5\" color=\"inherit\">\n <Link color=\"inherit\" onClick={() => handleUserReviews(true)}>\n {currentUser === userId ? \"Your Reviews\" : \"Reviews\"}\n </Link>\n </Typography>\n {currentUser === userId ? (\n <Typography variant=\"h5\" color=\"inherit\">\n <Link\n color=\"inherit\"\n onClick={() => handleFriendsReviews(true)}\n >\n Friends Reviews\n </Link>\n </Typography>\n ) : null}\n </div>\n </Grid>\n </Grid>\n </Paper>\n {updateProfile ? <UpdateProfile open={updateProfile} handleCloseModal={handleProfileUpdate} /> : null}\n {followerModal === true ? (\n <FollowerModal\n followers={userData.followers}\n handleFollowerModal={handleFollowerModal}\n />\n ) : null}\n {followingModal === true ? (\n <FollowingModal\n followees={userData.followees}\n handleFollowingModal={handleFollowingModal}\n />\n ) : null}\n {userReviews === true ? (\n <UserReviews\n handleUserReviews={handleUserReviews}\n currentUser={userId}\n userId={currentUser}\n reviews={userData.reviews}\n />\n ) : null}\n {friendsReviews === true ? (\n <FriendsReviews handleFriendsReviews={handleFriendsReviews} />\n ) : null}\n {userData.watchlists ? (\n <UserWatchlist userId={userId} watchlists={userData.watchlists} />\n ) : null}\n </React.Fragment>\n \n );\n}\n\nHeader.propTypes = {\n sections: PropTypes.array,\n title: PropTypes.string,\n};\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/recoil/watchlist.js",[],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/SearchContainer.jsx",["223"],"import React, { useEffect, useState } from \"react\";\nimport SearchBar from \"material-ui-search-bar\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardMedia from \"@material-ui/core/CardMedia\";\n\nimport Grid from \"@material-ui/core/Grid\";\n\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Link from \"@material-ui/core/Link\";\nimport Button from \"@material-ui/core/Button\";\nimport { URL_IMG, IMG_SIZE_LARGE } from \"../const\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Paper from \"@material-ui/core/Paper\";\n\nlet handleUser = 0;\n// import Link from 'react-router-dom'\n\nconst token = localStorage.getItem(\"token\");\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n marginRight: theme.spacing(2),\n },\n heroContent: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(8, 0, 6),\n },\n heroButtons: {\n marginTop: theme.spacing(4),\n },\n cardGrid: {\n paddingTop: theme.spacing(8),\n paddingBottom: theme.spacing(8),\n },\n card: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n cardMedia: {\n paddingTop: \"100%\", // 16:9\n },\n cardContent: {\n flexGrow: 1,\n },\n footer: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(6),\n },\n}));\n\nconst SearchContainer = () => {\n const classes = useStyles();\n const [input, handleInput] = useState(\"\");\n const [movieData, handleMovieData] = useState([]);\n const [userData, handleUserData] = useState([]);\n\n useEffect(() => {\n fetch(\n `https://api.themoviedb.org/3/search/movie?api_key=5a9cf113085e6d11351ca2f692a38bde&language=en-US&query=${input}&page=1&include_adult=false`\n )\n .then((resp) => resp.json())\n .then((data) => (data.errors ? null : handleMovieData(data.results)));\n }, [input]);\n\n useEffect(() => {\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/users\", {\n headers: { Authorization: `Bearer ${token}` },\n })\n .then((resp) => resp.json())\n .then((data) => handleUserData(data));\n }, []);\n\n return (\n <Paper>\n <div>\n <SearchBar\n value={input}\n onChange={(newInput) => handleInput(newInput)}\n onRequestSearch={() => console.log(\"hello\")} //you can probs delete\n />\n {input !== \"\" && movieData !== undefined ? (\n <Container className={classes.cardGrid} maxWidth=\"md\">\n {/* End hero unit */}\n {userData.map((user) =>\n user.username.toLowerCase() === input ||\n user.username === input ? (\n <div>\n <h3>Users:</h3>\n <Link color=\"inherit\" href={`/${user.username}/${user.id}`}>\n <Button variant=\"contained\">\n <ListItemText primary={user.username} />\n </Button>\n </Link>\n </div>\n ) :null)}\n {userData.map(user => \n\n input === \"users\" || input === \"Users\" ? (\n <div>\n <br/>\n <Link color=\"inherit\" href={`/${user.username}/${user.id}`}>\n <Button variant=\"contained\">\n <ListItemText primary={user.username} />\n </Button>\n </Link>\n </div>\n ) : null\n )}\n <br />\n <br />\n <Grid container spacing={4}>\n {movieData.map((movie, id) => (\n <Grid item key={id} xs={12} sm={6} md={4}>\n <Card className={classes.card}>\n <Link href={\"/movie/\" + movie.id}>\n <CardMedia\n className={classes.cardMedia}\n image={URL_IMG + IMG_SIZE_LARGE + movie.poster_path}\n title={movie.title}\n />\n </Link>\n <CardContent className={classes.cardContent}>\n <Typography gutterBottom variant=\"h4\" component=\"h2\">\n {movie.title}\n </Typography>\n </CardContent>\n\n <CardActions></CardActions>\n </Card>\n </Grid>\n ))}\n </Grid>\n </Container>\n ) : null}\n </div>\n </Paper>\n );\n};\n\nexport default SearchContainer;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FollowerModal.jsx",["224","225","226"],"import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { deepOrange, deepPurple } from \"@material-ui/core/colors\";\nimport Link from \"@material-ui/core/Link\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport List from '@material-ui/core/List';\nimport Divider from '@material-ui/core/Divider';\nimport ListItem from '@material-ui/core/ListItem';\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n root: {\n width: '100%',\n maxWidth: '36ch',\n backgroundColor: theme.palette.background.paper,\n },\n inline: {\n display: 'inline',\n },\n}));\n\nconst FollowerModal = ({ handleFollowerModal, followers }) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n handleFollowerModal(false)\n };\n\n const body = (\n <List className={classes.paper}>\n \n \n <Typography color='textPrimary' variant='h5' id=\"simple-modal-title\">Followers</Typography>\n {followers.map((follower, id) => (\n <ListItem key={id}>\n <ListItemAvatar>\n \n <Avatar alt={follower.username[0]} className={classes.orange}>\n {follower.username[0]}\n </Avatar>\n \n </ListItemAvatar>\n <Link color=\"inherit\" href={`/${follower.username}/${follower.id}`}>\n <Typography color='textPrimary'>{follower.username}</Typography>\n </Link>\n </ListItem>\n ))}\n <Divider variant=\"inset\" component=\"li\" />\n \n </List>\n );\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n};\n\nexport default FollowerModal;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FolloweesModal.jsx",["227","228","229"],"import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { deepOrange, deepPurple } from \"@material-ui/core/colors\";\nimport Link from \"@material-ui/core/Link\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport List from '@material-ui/core/List';\nimport Divider from '@material-ui/core/Divider';\nimport ListItem from '@material-ui/core/ListItem';\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n}));\n\n\n\nconst FollowingModal = ({ handleFollowingModal, followees }) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n handleFollowingModal(false)\n };\n\n const body = (\n <List className={classes.paper}>\n <Typography color='textPrimary'variant='h5' id=\"simple-modal-title\">Following</Typography>\n \n {followees.map((followee) => (\n <ListItem>\n <ListItemAvatar>\n <Avatar className={classes.orange}>{followee.username[0]}</Avatar>\n </ListItemAvatar>\n\n <Link color=\"inherit\" href={`/${followee.username}/${followee.id}`}>\n <Typography color='textPrimary' >{followee.username}</Typography>\n </Link>\n </ListItem>\n ))}\n <Divider variant=\"inset\" component=\"li\"/>\n </List>\n );\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n};\n\nexport default FollowingModal;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserWatchlist.jsx",["230","231","232","233","234","235","236","237"],"import React, { useEffect, useState } from \"react\";\nimport watchlistIdState from \"../../recoil/watchlist\";\nimport { useRecoilState } from \"recoil\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridList from \"@material-ui/core/GridList\";\nimport GridListTile from \"@material-ui/core/GridListTile\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport GridListTileBar from \"@material-ui/core/GridListTileBar\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { Link } from \"react-router-dom\";\nimport Paper from \"@material-ui/core/Paper\";\n\nimport { URL_IMG, IMG_SIZE_LARGE } from \"../../const\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n overflow: \"hidden\",\n backgroundColor: theme.palette.background.paper,\n marginTop: 75,\n height: 475,\n },\n paper: {\n display: \"flex\",\n },\n\n gridList: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900,\n height: 320,\n },\n\n icon: {\n color: \"rgba(255, 255, 255, 0.54)\",\n },\n}));\n\nconst UserWatchlist = ({ watchlists, userId }) => {\n const classes = useStyles();\n const [film, setFilm] = useState([]);\n\n useEffect(() => {\n const token = localStorage.getItem(\"token\");\n fetch(\n `https://cinematic-backend.herokuapp.com/api/v1//user_watchlist/${userId}`,\n {\n headers: { Authorization: `Bearer ${token}` },\n }\n )\n .then((resp) => resp.json())\n .then((data) => setFilm(data));\n }, []);\n\n return (\n <div>\n <h3 style={{ marginBottom: \"21\" }} align=\"center\">\n Watchlist\n </h3>\n\n <div className={classes.root}>\n <GridList className={classes.gridList} cols={4.5}>\n \n {film.map((movie, id) => (\n <GridListTile key={id} style={{ height: \"300px\" }}>\n <Link to={\"/movie/\" + movie.movie.movie_id}>\n <img\n src={URL_IMG + IMG_SIZE_LARGE + movie.movie.poster}\n alt={movie.title}\n />\n </Link>\n </GridListTile>\n ))}\n \n </GridList>\n \n </div>\n </div>\n );\n};\n\nexport default UserWatchlist;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UserReviews.jsx",["238","239","240","241","242","243"],"import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\n\nimport { deepOrange } from \"@material-ui/core/colors\";\n\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport Divider from \"@material-ui/core/Divider\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Rating } from \"@material-ui/lab\";\nimport Link from \"@material-ui/core/Link\";\nconst token = localStorage.getItem(\"token\");\n\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"grid\",\n overflow: \"scroll\",\n },\n\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n h3: {\n align: \"center\",\n },\n modal: {\n alignItems: \"center\",\n justifyContent: \"center\",\n \n position:'absolute',\n \n display: 'grid',\n overflow:'scroll',\n\n },\n}));\n\nconst UserReviews = ({ handleUserReviews,currentUser, userId }) => {\n let date = \"\"\n let newDate = \"\"\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n const [reviews, handleReviews] = useState([]);\n const [deleteReviews, handleDeleteReviews] = useState(false)\n\n const handleClose = () => {\n setOpen(false);\n handleUserReviews(false)\n };\n\n useEffect(() => {\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/user_reviews/${currentUser}`)\n .then((resp) => resp.json())\n .then((data) => handleReviews(data));\n }, []);\n\n const deleteReview = (event) => {\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/reviews/${event}`, {\n method: \"DELETE\",\n headers: { Authorization: `Bearer ${token}` },\n });\n handleDeleteReviews(true)\n };\n\n const body = (\n \n <List className={classes.paper}>\n <Typography\n variant=\"h5\"\n color=\"textPrimary\"\n align=\"center\"\n id=\"simple-modal-title\"\n >\n {reviews.length !== 0 ? \"Reviews\" : \"No Reviews\"}\n </Typography>\n {reviews.map((review) => (\n <ListItem key={review.id} alignItems=\"flex-start\">\n \n \n <ListItemAvatar></ListItemAvatar>\n <ListItemText\n secondary={\n <React.Fragment>\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.inline}\n color=\"textPrimary\"\n ></Typography>\n <Link href={'/movie/'+review.movie.movie_id}>\n <Typography color=\"textPrimary\" variant=\"h6\">\n {review.movie.title}\n </Typography>\n </Link>\n <Typography>\n <Rating\n name=\"read-only\"\n value={review.rating}\n readOnly\n ></Rating>\n </Typography>\n <Typography color='textPrimary'>\n {review.body}\n </Typography>\n <Typography color='textPrimary'>\n {new Date(review.created_at).toDateString()}\n </Typography>\n {userId === currentUser ? (\n <Typography\n id={review.id}\n onClick={(event) => deleteReview(event.currentTarget.id)}\n color=\"secondary\"\n >\n Delete\n </Typography>\n ) : null}\n </React.Fragment>\n }\n />\n </ListItem>\n ))}\n <Divider variant=\"inset\" component=\"li\" />\n </List>\n );\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n};\n\nexport default UserReviews;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/FriendsWatchlist.jsx",["244","245","246","247"],"/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/Discover.jsx",["248","249","250","251","252","253","254","255"],"import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridList from \"@material-ui/core/GridList\";\nimport GridListTile from \"@material-ui/core/GridListTile\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport GridListTileBar from \"@material-ui/core/GridListTileBar\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { Rating } from \"@material-ui/lab\";\nimport StarBorderIcon from \"@material-ui/icons/StarBorder\";\nimport Link from \"@material-ui/core/Link\";\nimport MovieDetails from \"./MovieDetails\";\n\nimport { URL_IMG, IMG_SIZE_LARGE, API_KEY } from \"../const\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n overflow: \"hidden\",\n backgroundColor: theme.palette.background.paper,\n },\n\n gridList: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900,\n height: 320,\n },\n\n icon: {\n color: \"rgba(255, 255, 255, 0.54)\",\n },\n}));\n\nexport default function Discover({ movieId }) {\n const classes = useStyles();\n\n const [movies, handleMovie] = useState([]);\n\n useEffect(() => {\n fetch(\n `https://api.themoviedb.org/3/movie/${movieId}/recommendations${API_KEY}&language=en-US&page=1`\n )\n .then((resp) => resp.json())\n .then((data) => handleMovie(data.results));\n }, []);\n\n return (\n <div className={classes.root}>\n <GridList className={classes.gridList} cols={4.5}>\n \n {movies.map((movie) => (\n <GridListTile key={movie.id} style={{ height: \"300px\" }}>\n <Link href={\"/movie/\" + movie.id}>\n <img\n src={URL_IMG + IMG_SIZE_LARGE + movie.poster_path}\n alt={movie.title}\n />\n \n </Link>\n </GridListTile>\n ))}\n </GridList>\n </div>\n );\n}\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/home/Popular.jsx",["256","257","258","259","260","261","262","263","264"],"import React, { useEffect, useState } from \"react\";\nimport watchlistIdState from \"../../recoil/watchlist\";\nimport { useRecoilState } from \"recoil\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridList from \"@material-ui/core/GridList\";\nimport GridListTile from \"@material-ui/core/GridListTile\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport GridListTileBar from \"@material-ui/core/GridListTileBar\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport Link from '@material-ui/core/Link';\nimport Box from '@material-ui/core/Box';\n\n\nimport { URL_IMG, IMG_SIZE_LARGE, API_KEY } from \"../../const\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n overflow: \"hidden\",\n backgroundColor: theme.palette.background.paper,\n },\n\n gridList: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900, \n height: 320,\n display: \"flex\",\n \n },\n gridListTile: {\n flexWrap: \"nowrap\",\n // Promote the list into his own layer on Chrome. This cost memory but helps keeping high FPS.\n transform: \"translateZ(0)\",\n width: 900,\n height: 320,\n display: \"flex\",\n borderRadius: '20%'\n },\n\n\n icon: {\n color: \"rgba(255, 255, 255, 0.54)\",\n },\n}));\n\nconst Popular = () => {\n const classes = useStyles();\n const [film, setFilm] = useState([]);\n\n useEffect(() => {\n const userId = localStorage.getItem(\"user_id\");\n const token = localStorage.getItem(\"token\");\n fetch(`https://api.themoviedb.org/3/movie/now_playing${API_KEY}&language=en-US&page=1`)\n .then((resp) => resp.json())\n .then((data) => setFilm(data.results));\n }, []);\n\n return (\n \n <div className={classes.root}>\n \n {film? \n \n \n <GridList className={classes.gridList} cols={4.5} >\n \n {film.map((movie, id) => (\n \n <GridListTile key={id} className={classes.gridListTile} style={{ height: \"300px\" }}>\n <Link href={\"/movie/\" + movie.id}>\n <img \n src={URL_IMG + IMG_SIZE_LARGE + movie.poster_path}\n alt={movie.title}\n />\n \n </Link>\n </GridListTile>\n \n ))}\n </GridList> : null\n }\n </div> \n \n );\n};\n\nexport default Popular;","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/FriendsReviews.jsx",["265","266","267","268","269"],"import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { deepOrange, deepPurple } from \"@material-ui/core/colors\";\nimport Link from \"@material-ui/core/Link\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport List from \"@material-ui/core/List\";\nimport Divider from \"@material-ui/core/Divider\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Rating } from \"@material-ui/lab\";\nimport ThumbUpIcon from \"@material-ui/icons/ThumbUp\";\nimport Card from \"@material-ui/core/Card\";\n\nconst token = localStorage.getItem(\"token\");\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n alignItems: \"center\",\n justifyContent: \"center\",\n\n position: \"absolute\",\n\n display: \"grid\",\n overflow: \"scroll\",\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n h3: {\n align: \"center\",\n },\n}));\n\nconst FriendsReviews = ({ handleFriendsReviews }) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n const [reviews, handleReviews] = useState([]);\n const [addLikes, handleAddLike] = useState(false);\n const [addReview, handleAddReview] = useState(false);\n \n useEffect(() => {\n fetch(\"https://cinematic-backend.herokuapp.com/api/v1/followee_reviews\", {\n method: \"GET\",\n headers: { Authorization: `Bearer ${token}` },\n })\n .then((resp) => resp.json())\n .then((data) => handleReviews(data));\n handleAddReview(false);\n }, [addReview]);\n const handleClose = () => {\n setOpen(false);\n handleFriendsReviews(false);\n };\n\n const body = (\n <List className={classes.paper}>\n <Typography\n color=\"textPrimary\"\n variant=\"h5\"\n align=\"center\"\n id=\"simple-modal-title\"\n >\n {reviews.length !== 0 ? \" Friends' Reviews\" : \"No Reviews\"}\n </Typography>\n {reviews.map((review) => (\n <Card>\n <ListItem key={review.id} alignItems=\"flex-start\">\n <ListItemAvatar></ListItemAvatar>\n <ListItemText\n secondary={\n <React.Fragment>\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.inline}\n color=\"textPrimary\"\n ></Typography>\n <Link href={'/movie/'+review.movie.movie_id}>\n <Typography color=\"textPrimary\" variant=\"h6\">\n {review.movie.title}\n </Typography>\n </Link>\n <Typography color=\"textPrimary\">\n {review.user.username}\n </Typography>\n <Typography>\n <Rating\n name=\"read-only\"\n value={review.rating}\n readOnly\n ></Rating>\n </Typography>\n <Typography color=\"textPrimary\">{review.body}</Typography>\n <Typography color=\"textPrimary\">\n {new Date(review.created_at).toDateString()}\n </Typography>\n </React.Fragment>\n }\n />\n <div style={{ margin: \"6px\" }}>{\"\"}</div>\n </ListItem>\n </Card>\n ))}\n <Divider variant=\"inset\" component=\"li\" />\n </List>\n );\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n};\n\nexport default FriendsReviews;\n","/Users/jacobkagon/Flatiron/code/cinematic/cinematic-frontend/src/components/userProfile/UpdateProfile.jsx",["270","271","272","273","274","275","276","277"],"import React, { useEffect, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { deepOrange, deepPurple } from \"@material-ui/core/colors\";\nimport Link from \"@material-ui/core/Link\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\nimport List from \"@material-ui/core/List\";\nimport Divider from \"@material-ui/core/Divider\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport { Typography } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Container from \"@material-ui/core/Container\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\n\nconst userId = localStorage.getItem(\"user_id\");\nconst token = localStorage.getItem(\"token\");\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n paper: {\n backgroundColor: theme.palette.background.paper,\n border: \"2px solid #000\",\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n toolbarTitle: {\n flex: 1,\n },\n}));\n\nconst UpdateProfile = ({ handleCloseModal}) => {\n const classes = useStyles();\n const [open, setOpen] = useState(true);\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [username, setUsername] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n useEffect(() => {\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/users/${userId}`, {\n headers: {Authorization: `Bearer ${token}`}\n })\n .then((resp) => resp.json())\n .then((data) => {\n setFirstName(data.first_name);\n setLastName(data.last_name);\n setEmail(data.email);\n setUsername(data.username)\n setPassword(data.password)\n console.log(data)\n });\n }, []);\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n handleCloseModal(false)\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n let data = {};\n data.first_name = firstName;\n data.lastName = lastName;\n data.username = username;\n data.email = email;\n data.password = password;\n\n fetch(`https://cinematic-backend.herokuapp.com/api/v1/users/${userId}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n })\n .then((resp) => resp.json())\n .then((data) => console.log(data));\n\n handleCloseModal(false)\n };\n\n const body = (\n <List className={classes.paper}>\n <Toolbar className={classes.toolbar}>\n <Typography\n component=\"h1\"\n variant=\"h3\"\n color=\"inherit\"\n align=\"center\"\n noWrap\n className={classes.toolbarTitle}\n >\n Update Account\n </Typography>\n </Toolbar>\n <br />\n <Container component=\"main\" maxWidth=\"xs\">\n <CssBaseline />\n <div className={classes.paper}>\n <form\n className={classes.form}\n noValidate\n onSubmit={(e) => handleSubmit(e)}\n >\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6}>\n <TextField\n autoComplete=\"fname\"\n name=\"firstName\"\n variant=\"outlined\"\n required\n fullWidth\n id=\"firstName\"\n label=\"First Name\"\n autoFocus\n value={firstName}\n onChange={(event) => setFirstName(event.target.value)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"lastName\"\n label=\"Last Name\"\n name=\"lastName\"\n autoComplete=\"lname\"\n value={lastName}\n onChange={(event) => setLastName(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"username\"\n label=\" Username\"\n name=\"username\"\n autoComplete=\"username\"\n value={username}\n onChange={(event) => setUsername(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n id=\"email\"\n label=\"Email Address\"\n name=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth\n name=\"password\"\n label=\"New Password\"\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}></Grid>\n </Grid>\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n >\n Update\n </Button>\n <Grid container justify=\"flex-end\">\n <Grid item container></Grid>\n </Grid>\n </form>\n </div>\n <Box mt={5}></Box>\n </Container>\n </List>\n );\n return (\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={open}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={open}>{body}</Fade>\n </Modal>\n </div>\n );\n};\n\nexport default UpdateProfile;\n",{"ruleId":"278","replacedBy":"279"},{"ruleId":"280","replacedBy":"281"},{"ruleId":"282","severity":1,"message":"283","line":4,"column":8,"nodeType":"284","messageId":"285","endLine":4,"endColumn":15},{"ruleId":"282","severity":1,"message":"286","line":7,"column":10,"nodeType":"284","messageId":"285","endLine":7,"endColumn":20},{"ruleId":"287","severity":1,"message":"288","line":70,"column":6,"nodeType":"289","endLine":70,"endColumn":8,"suggestions":"290"},{"ruleId":"291","severity":1,"message":"292","line":102,"column":51,"nodeType":"293","messageId":"294","endLine":102,"endColumn":53},{"ruleId":"287","severity":1,"message":"288","line":113,"column":6,"nodeType":"289","endLine":113,"endColumn":8,"suggestions":"295"},{"ruleId":"287","severity":1,"message":"296","line":119,"column":6,"nodeType":"289","endLine":119,"endColumn":8,"suggestions":"297"},{"ruleId":"298","severity":1,"message":"299","line":195,"column":25,"nodeType":"300","endLine":200,"endColumn":26},{"ruleId":"301","severity":1,"message":"302","line":201,"column":27,"nodeType":"300","endLine":201,"endColumn":81},{"ruleId":"298","severity":1,"message":"299","line":205,"column":25,"nodeType":"300","endLine":210,"endColumn":26},{"ruleId":"301","severity":1,"message":"302","line":211,"column":27,"nodeType":"300","endLine":211,"endColumn":81},{"ruleId":"298","severity":1,"message":"299","line":214,"column":25,"nodeType":"300","endLine":220,"endColumn":26},{"ruleId":"301","severity":1,"message":"302","line":221,"column":27,"nodeType":"300","endLine":221,"endColumn":81},{"ruleId":"298","severity":1,"message":"299","line":224,"column":25,"nodeType":"300","endLine":227,"endColumn":26},{"ruleId":"301","severity":1,"message":"302","line":228,"column":27,"nodeType":"300","endLine":228,"endColumn":81},{"ruleId":"282","severity":1,"message":"303","line":1,"column":17,"nodeType":"284","messageId":"285","endLine":1,"endColumn":26},{"ruleId":"282","severity":1,"message":"304","line":1,"column":28,"nodeType":"284","messageId":"285","endLine":1,"endColumn":36},{"ruleId":"282","severity":1,"message":"305","line":47,"column":10,"nodeType":"284","messageId":"285","endLine":47,"endColumn":15},{"ruleId":"287","severity":1,"message":"306","line":69,"column":6,"nodeType":"289","endLine":69,"endColumn":8,"suggestions":"307"},{"ruleId":"298","severity":1,"message":"299","line":37,"column":7,"nodeType":"300","endLine":37,"endColumn":77},{"ruleId":"282","severity":1,"message":"308","line":92,"column":10,"nodeType":"284","messageId":"285","endLine":92,"endColumn":18},{"ruleId":"282","severity":1,"message":"309","line":14,"column":27,"nodeType":"284","messageId":"285","endLine":14,"endColumn":33},{"ruleId":"298","severity":1,"message":"299","line":40,"column":7,"nodeType":"300","endLine":40,"endColumn":77},{"ruleId":"282","severity":1,"message":"310","line":81,"column":10,"nodeType":"284","messageId":"285","endLine":81,"endColumn":16},{"ruleId":"282","severity":1,"message":"311","line":82,"column":10,"nodeType":"284","messageId":"285","endLine":82,"endColumn":19},{"ruleId":"282","severity":1,"message":"308","line":83,"column":10,"nodeType":"284","messageId":"285","endLine":83,"endColumn":18},{"ruleId":"298","severity":1,"message":"299","line":248,"column":15,"nodeType":"300","endLine":248,"endColumn":69},{"ruleId":"301","severity":1,"message":"302","line":249,"column":17,"nodeType":"300","endLine":253,"endColumn":19},{"ruleId":"282","severity":1,"message":"312","line":20,"column":8,"nodeType":"284","messageId":"285","endLine":20,"endColumn":29},{"ruleId":"287","severity":1,"message":"313","line":96,"column":6,"nodeType":"289","endLine":96,"endColumn":17,"suggestions":"314"},{"ruleId":"291","severity":1,"message":"292","line":101,"column":29,"nodeType":"293","messageId":"294","endLine":101,"endColumn":31},{"ruleId":"291","severity":1,"message":"292","line":240,"column":44,"nodeType":"293","messageId":"294","endLine":240,"endColumn":46},{"ruleId":"287","severity":1,"message":"315","line":27,"column":6,"nodeType":"289","endLine":27,"endColumn":8,"suggestions":"316"},{"ruleId":"287","severity":1,"message":"317","line":29,"column":3,"nodeType":"284","endLine":29,"endColumn":12,"suggestions":"318"},{"ruleId":"287","severity":1,"message":"319","line":29,"column":13,"nodeType":"293","endLine":43,"endColumn":4},{"ruleId":"282","severity":1,"message":"320","line":2,"column":9,"nodeType":"284","messageId":"285","endLine":2,"endColumn":17},{"ruleId":"282","severity":1,"message":"321","line":2,"column":19,"nodeType":"284","messageId":"285","endLine":2,"endColumn":33},{"ruleId":"282","severity":1,"message":"322","line":5,"column":8,"nodeType":"284","messageId":"285","endLine":5,"endColumn":18},{"ruleId":"282","severity":1,"message":"323","line":7,"column":8,"nodeType":"284","messageId":"285","endLine":7,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":16},{"ruleId":"282","severity":1,"message":"325","line":47,"column":10,"nodeType":"284","messageId":"285","endLine":47,"endColumn":19},{"ruleId":"282","severity":1,"message":"326","line":47,"column":21,"nodeType":"284","messageId":"285","endLine":47,"endColumn":36},{"ruleId":"282","severity":1,"message":"327","line":49,"column":9,"nodeType":"284","messageId":"285","endLine":49,"endColumn":13},{"ruleId":"282","severity":1,"message":"328","line":1,"column":10,"nodeType":"284","messageId":"285","endLine":1,"endColumn":29},{"ruleId":"282","severity":1,"message":"329","line":5,"column":10,"nodeType":"284","messageId":"285","endLine":5,"endColumn":17},{"ruleId":"282","severity":1,"message":"322","line":10,"column":8,"nodeType":"284","messageId":"285","endLine":10,"endColumn":18},{"ruleId":"282","severity":1,"message":"330","line":11,"column":8,"nodeType":"284","messageId":"285","endLine":11,"endColumn":21},{"ruleId":"282","severity":1,"message":"323","line":12,"column":8,"nodeType":"284","messageId":"285","endLine":12,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":13,"column":8,"nodeType":"284","messageId":"285","endLine":13,"endColumn":16},{"ruleId":"282","severity":1,"message":"331","line":52,"column":10,"nodeType":"284","messageId":"285","endLine":52,"endColumn":21},{"ruleId":"282","severity":1,"message":"332","line":52,"column":23,"nodeType":"284","messageId":"285","endLine":52,"endColumn":37},{"ruleId":"278","replacedBy":"333"},{"ruleId":"280","replacedBy":"334"},{"ruleId":"282","severity":1,"message":"303","line":1,"column":16,"nodeType":"284","messageId":"285","endLine":1,"endColumn":25},{"ruleId":"282","severity":1,"message":"304","line":1,"column":27,"nodeType":"284","messageId":"285","endLine":1,"endColumn":35},{"ruleId":"282","severity":1,"message":"335","line":8,"column":7,"nodeType":"284","messageId":"285","endLine":8,"endColumn":12},{"ruleId":"282","severity":1,"message":"336","line":74,"column":10,"nodeType":"284","messageId":"285","endLine":74,"endColumn":26},{"ruleId":"282","severity":1,"message":"337","line":74,"column":28,"nodeType":"284","messageId":"285","endLine":74,"endColumn":39},{"ruleId":"287","severity":1,"message":"338","line":89,"column":6,"nodeType":"289","endLine":89,"endColumn":19,"suggestions":"339"},{"ruleId":"340","severity":1,"message":"341","line":134,"column":23,"nodeType":"342","messageId":"343","endLine":134,"endColumn":25},{"ruleId":"282","severity":1,"message":"344","line":19,"column":5,"nodeType":"284","messageId":"285","endLine":19,"endColumn":15},{"ruleId":"282","severity":1,"message":"345","line":7,"column":22,"nodeType":"284","messageId":"285","endLine":7,"endColumn":32},{"ruleId":"282","severity":1,"message":"346","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":20},{"ruleId":"282","severity":1,"message":"347","line":46,"column":9,"nodeType":"284","messageId":"285","endLine":46,"endColumn":19},{"ruleId":"282","severity":1,"message":"345","line":7,"column":22,"nodeType":"284","messageId":"285","endLine":7,"endColumn":32},{"ruleId":"282","severity":1,"message":"346","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":20},{"ruleId":"282","severity":1,"message":"347","line":40,"column":9,"nodeType":"284","messageId":"285","endLine":40,"endColumn":19},{"ruleId":"282","severity":1,"message":"348","line":2,"column":8,"nodeType":"284","messageId":"285","endLine":2,"endColumn":24},{"ruleId":"282","severity":1,"message":"321","line":3,"column":10,"nodeType":"284","messageId":"285","endLine":3,"endColumn":24},{"ruleId":"282","severity":1,"message":"322","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":18},{"ruleId":"282","severity":1,"message":"330","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":21},{"ruleId":"282","severity":1,"message":"323","line":10,"column":8,"nodeType":"284","messageId":"285","endLine":10,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":11,"column":8,"nodeType":"284","messageId":"285","endLine":11,"endColumn":16},{"ruleId":"282","severity":1,"message":"349","line":13,"column":8,"nodeType":"284","messageId":"285","endLine":13,"endColumn":13},{"ruleId":"287","severity":1,"message":"350","line":58,"column":6,"nodeType":"289","endLine":58,"endColumn":8,"suggestions":"351"},{"ruleId":"352","severity":1,"message":"353","line":25,"column":5,"nodeType":"354","messageId":"343","endLine":25,"endColumn":12},{"ruleId":"352","severity":1,"message":"355","line":42,"column":3,"nodeType":"354","messageId":"343","endLine":42,"endColumn":8},{"ruleId":"282","severity":1,"message":"356","line":55,"column":8,"nodeType":"284","messageId":"285","endLine":55,"endColumn":12},{"ruleId":"282","severity":1,"message":"357","line":56,"column":7,"nodeType":"284","messageId":"285","endLine":56,"endColumn":14},{"ruleId":"282","severity":1,"message":"358","line":60,"column":10,"nodeType":"284","messageId":"285","endLine":60,"endColumn":23},{"ruleId":"287","severity":1,"message":"359","line":71,"column":6,"nodeType":"289","endLine":71,"endColumn":8,"suggestions":"360"},{"ruleId":"282","severity":1,"message":"322","line":6,"column":8,"nodeType":"284","messageId":"285","endLine":6,"endColumn":18},{"ruleId":"282","severity":1,"message":"323","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":16},{"ruleId":"282","severity":1,"message":"361","line":50,"column":11,"nodeType":"284","messageId":"285","endLine":50,"endColumn":17},{"ruleId":"282","severity":1,"message":"322","line":5,"column":8,"nodeType":"284","messageId":"285","endLine":5,"endColumn":18},{"ruleId":"282","severity":1,"message":"330","line":6,"column":8,"nodeType":"284","messageId":"285","endLine":6,"endColumn":21},{"ruleId":"282","severity":1,"message":"323","line":7,"column":8,"nodeType":"284","messageId":"285","endLine":7,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":16},{"ruleId":"282","severity":1,"message":"362","line":9,"column":10,"nodeType":"284","messageId":"285","endLine":9,"endColumn":16},{"ruleId":"282","severity":1,"message":"363","line":10,"column":8,"nodeType":"284","messageId":"285","endLine":10,"endColumn":22},{"ruleId":"282","severity":1,"message":"364","line":12,"column":8,"nodeType":"284","messageId":"285","endLine":12,"endColumn":20},{"ruleId":"287","severity":1,"message":"313","line":49,"column":6,"nodeType":"289","endLine":49,"endColumn":8,"suggestions":"365"},{"ruleId":"282","severity":1,"message":"348","line":2,"column":8,"nodeType":"284","messageId":"285","endLine":2,"endColumn":24},{"ruleId":"282","severity":1,"message":"321","line":3,"column":10,"nodeType":"284","messageId":"285","endLine":3,"endColumn":24},{"ruleId":"282","severity":1,"message":"322","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":18},{"ruleId":"282","severity":1,"message":"330","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":21},{"ruleId":"282","severity":1,"message":"323","line":10,"column":8,"nodeType":"284","messageId":"285","endLine":10,"endColumn":23},{"ruleId":"282","severity":1,"message":"324","line":11,"column":8,"nodeType":"284","messageId":"285","endLine":11,"endColumn":16},{"ruleId":"282","severity":1,"message":"366","line":13,"column":8,"nodeType":"284","messageId":"285","endLine":13,"endColumn":11},{"ruleId":"282","severity":1,"message":"361","line":57,"column":11,"nodeType":"284","messageId":"285","endLine":57,"endColumn":17},{"ruleId":"282","severity":1,"message":"335","line":58,"column":11,"nodeType":"284","messageId":"285","endLine":58,"endColumn":16},{"ruleId":"282","severity":1,"message":"367","line":6,"column":8,"nodeType":"284","messageId":"285","endLine":6,"endColumn":14},{"ruleId":"282","severity":1,"message":"345","line":7,"column":22,"nodeType":"284","messageId":"285","endLine":7,"endColumn":32},{"ruleId":"282","severity":1,"message":"368","line":16,"column":8,"nodeType":"284","messageId":"285","endLine":16,"endColumn":19},{"ruleId":"282","severity":1,"message":"369","line":50,"column":10,"nodeType":"284","messageId":"285","endLine":50,"endColumn":18},{"ruleId":"282","severity":1,"message":"370","line":50,"column":20,"nodeType":"284","messageId":"285","endLine":50,"endColumn":33},{"ruleId":"282","severity":1,"message":"367","line":6,"column":8,"nodeType":"284","messageId":"285","endLine":6,"endColumn":14},{"ruleId":"282","severity":1,"message":"345","line":7,"column":22,"nodeType":"284","messageId":"285","endLine":7,"endColumn":32},{"ruleId":"282","severity":1,"message":"371","line":8,"column":8,"nodeType":"284","messageId":"285","endLine":8,"endColumn":12},{"ruleId":"282","severity":1,"message":"346","line":9,"column":8,"nodeType":"284","messageId":"285","endLine":9,"endColumn":20},{"ruleId":"282","severity":1,"message":"372","line":10,"column":8,"nodeType":"284","messageId":"285","endLine":10,"endColumn":22},{"ruleId":"282","severity":1,"message":"373","line":12,"column":8,"nodeType":"284","messageId":"285","endLine":12,"endColumn":15},{"ruleId":"282","severity":1,"message":"374","line":13,"column":8,"nodeType":"284","messageId":"285","endLine":13,"endColumn":16},{"ruleId":"282","severity":1,"message":"347","line":71,"column":9,"nodeType":"284","messageId":"285","endLine":71,"endColumn":19},"no-native-reassign",["375"],"no-negated-in-lhs",["376"],"no-unused-vars","'Welcome' is defined but never used.","Identifier","unusedVar","'Typography' is defined but never used.","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'id'. Either include it or remove the dependency array.","ArrayExpression",["377"],"array-callback-return","Array.prototype.map() expects a return value from arrow function.","ArrowFunctionExpression","expectedInside",["378"],"React Hook useEffect has a missing dependency: 'watchProviderId'. Either include it or remove the dependency array.",["379"],"react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" is a security risk: see https://html.spec.whatwg.org/multipage/links.html#link-type-noopener","JSXOpeningElement","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","'useEffect' is defined but never used.","'useState' is defined but never used.","'hover' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'findMovie', 'movieId', 'poster', and 'title'. Either include them or remove the dependency array.",["380"],"'loggedIn' is assigned a value but never used.","'Router' is defined but never used.","'errors' is assigned a value but never used.","'stateUser' is assigned a value but never used.","'ThumbUpAltRoundedIcon' is defined but never used.","React Hook useEffect has a missing dependency: 'movieId'. Either include it or remove the dependency array.",["381"],"React Hook useEffect has missing dependencies: 'handleBackendMovieId' and 'movieId'. Either include them or remove the dependency array.",["382"],"React Hook useEffect contains a call to 'isReallyIn'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass [backendMovieId] as a second argument to the useEffect Hook.",["383"],"Effect callbacks are synchronous to prevent race conditions. Put the async function inside:\n\nuseEffect(() => {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching","'selector' is defined but never used.","'useRecoilState' is defined but never used.","'IconButton' is defined but never used.","'GridListTileBar' is defined but never used.","'InfoIcon' is defined but never used.","'movieShow' is assigned a value but never used.","'handleMovieShow' is assigned a value but never used.","'body' is assigned a value but never used.","'responsiveFontSizes' is defined but never used.","'borders' is defined but never used.","'ListSubheader' is defined but never used.","'watchlistId' is assigned a value but never used.","'setWatchlistId' is assigned a value but never used.",["375"],["376"],"'token' is assigned a value but never used.","'closeUpdateModal' is assigned a value but never used.","'handleClose' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'currentUser' and 'userId'. Either include them or remove the dependency array.",["384"],"eqeqeq","Expected '!==' and instead saw '!='.","BinaryExpression","unexpected","'handleUser' is assigned a value but never used.","'deepPurple' is defined but never used.","'ListItemText' is defined but never used.","'handleOpen' is assigned a value but never used.","'watchlistIdState' is defined but never used.","'Paper' is defined but never used.","React Hook useEffect has a missing dependency: 'userId'. Either include it or remove the dependency array.",["385"],"no-dupe-keys","Duplicate key 'display'.","ObjectExpression","Duplicate key 'modal'.","'date' is assigned a value but never used.","'newDate' is assigned a value but never used.","'deleteReviews' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'currentUser'. Either include it or remove the dependency array.",["386"],"'userId' is assigned a value but never used.","'Rating' is defined but never used.","'StarBorderIcon' is defined but never used.","'MovieDetails' is defined but never used.",["387"],"'Box' is defined but never used.","'Avatar' is defined but never used.","'ThumbUpIcon' is defined but never used.","'addLikes' is assigned a value but never used.","'handleAddLike' is assigned a value but never used.","'Link' is defined but never used.","'ListItemAvatar' is defined but never used.","'Divider' is defined but never used.","'ListItem' is defined but never used.","no-global-assign","no-unsafe-negation",{"desc":"388","fix":"389"},{"desc":"388","fix":"390"},{"desc":"391","fix":"392"},{"desc":"393","fix":"394"},{"desc":"395","fix":"396"},{"desc":"397","fix":"398"},{"desc":"399","fix":"400"},{"desc":"401","fix":"402"},{"desc":"403","fix":"404"},{"desc":"405","fix":"406"},{"desc":"407","fix":"408"},"Update the dependencies array to be: [id]",{"range":"409","text":"410"},{"range":"411","text":"410"},"Update the dependencies array to be: [watchProviderId]",{"range":"412","text":"413"},"Update the dependencies array to be: [findMovie, movieId, poster, title]",{"range":"414","text":"415"},"Update the dependencies array to be: [addReview, movieId]",{"range":"416","text":"417"},"Update the dependencies array to be: [handleBackendMovieId, movieId]",{"range":"418","text":"419"},"Add dependencies array: [backendMovieId]",{"range":"420","text":"421"},"Update the dependencies array to be: [currentUser, isFollowing, userId]",{"range":"422","text":"423"},"Update the dependencies array to be: [userId]",{"range":"424","text":"425"},"Update the dependencies array to be: [currentUser]",{"range":"426","text":"427"},"Update the dependencies array to be: [movieId]",{"range":"428","text":"429"},[2040,2042],"[id]",[3298,3300],[3481,3483],"[watchProviderId]",[1734,1736],"[findMovie, movieId, poster, title]",[2800,2811],"[addReview, movieId]",[788,790],"[handleBackendMovieId, movieId]",[1199,1199],", [backendMovieId]",[2813,2826],"[currentUser, isFollowing, userId]",[1684,1686],"[userId]",[1985,1987],"[currentUser]",[1538,1540],"[movieId]"]