-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 36.9 KB
/
.eslintcache
1
[{"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\index.js":"1","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\App.js":"2","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\nav\\MainHeader.js":"3","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\layout\\Layout.js":"4","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\LoadingSpinner.js":"5","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\FoodDB.js":"6","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\SearchRecipes.js":"7","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\search-context.js":"8","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\SearchBar.js":"9","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\searchRecipes\\RecipesList.js":"10","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\searchRecipes\\RecipesListItem.js":"11","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\filterItems.js":"12","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\RecipeDetails.js":"13","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\auth-context.js":"14","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\AuthPage.js":"15","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\ProfilePage.js":"16","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\Auth\\AuthForm.js":"17","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\Profile\\UserProfile.js":"18","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\SliderFilter.js":"19","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\GridLayout.js":"20"},{"size":485,"mtime":1628135616231,"results":"21","hashOfConfig":"22"},{"size":1610,"mtime":1634096047271,"results":"23","hashOfConfig":"22"},{"size":1369,"mtime":1631560617391,"results":"24","hashOfConfig":"22"},{"size":166,"mtime":1626063492317,"results":"25","hashOfConfig":"22"},{"size":227,"mtime":1626067891003,"results":"26","hashOfConfig":"22"},{"size":73,"mtime":1626102477403,"results":"27","hashOfConfig":"22"},{"size":335,"mtime":1626157010356,"results":"28","hashOfConfig":"22"},{"size":1619,"mtime":1634097604024,"results":"29","hashOfConfig":"22"},{"size":7694,"mtime":1634097852085,"results":"30","hashOfConfig":"22"},{"size":2920,"mtime":1634101781751,"results":"31","hashOfConfig":"22"},{"size":2042,"mtime":1629169222935,"results":"32","hashOfConfig":"22"},{"size":1642,"mtime":1628181240675,"results":"33","hashOfConfig":"22"},{"size":8204,"mtime":1634101781751,"results":"34","hashOfConfig":"22"},{"size":3893,"mtime":1634102314632,"results":"35","hashOfConfig":"22"},{"size":137,"mtime":1628135616233,"results":"36","hashOfConfig":"22"},{"size":154,"mtime":1628135616233,"results":"37","hashOfConfig":"22"},{"size":3585,"mtime":1631571309932,"results":"38","hashOfConfig":"22"},{"size":2107,"mtime":1631571423643,"results":"39","hashOfConfig":"22"},{"size":2873,"mtime":1628181240673,"results":"40","hashOfConfig":"22"},{"size":182,"mtime":1628181240670,"results":"41","hashOfConfig":"22"},{"filePath":"42","messages":"43","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"iq3arw",{"filePath":"44","messages":"45","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"46"},{"filePath":"47","messages":"48","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"49","messages":"50","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"51","messages":"52","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"53","messages":"54","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"55","messages":"56","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"57","messages":"58","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"59","messages":"60","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"61"},{"filePath":"62","messages":"63","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"64"},{"filePath":"65","messages":"66","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"69","messages":"70","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"71"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"82"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\index.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\App.js",["87"],"/**\r\n **Project Console: \r\n * https://console.firebase.google.com/project/food-api-f23bf/overview\r\n * \r\n **Hosting URL: \r\n * https://food-api-f23bf.web.app\r\n */\r\n\r\nimport './App.css';\r\nimport MainHeader from './components/nav/MainHeader';\r\nimport Layout from './components/layout/Layout';\r\nimport { Fragment, useContext } from 'react';\r\nimport { Route, Redirect, Switch } from 'react-router-dom';\r\nimport SearchRecipes from './pages/SearchRecipes';\r\nimport FoodDB from './pages/FoodDB';\r\nimport RecipeDetails from './pages/RecipeDetails';\r\nimport ProfilePage from './pages/ProfilePage';\r\nimport AuthPage from './pages/AuthPage';\r\nimport AuthContext from './store/auth-context';\r\n\r\n\r\nfunction App() {\r\n\tconst { isLoggedIn } = useContext(AuthContext);\r\n\r\n\treturn (\r\n\t\t<Fragment>\r\n\t\t\t<MainHeader />\r\n\t\t\t<Layout>\r\n\t\t\t\t<Switch>\r\n\r\n\t\t\t\t\t<Route path={`/search-recipes/:recipeId`} exact>\r\n\t\t\t\t\t\t<RecipeDetails />\r\n\t\t\t\t\t</Route>\r\n\t\t\t\t\t<Route path=\"/\" exact>\r\n\t\t\t\t\t\t<Redirect to=\"/search-recipes\" />\r\n\t\t\t\t\t</Route>\r\n\t\t\t\t\t<Route path=\"/search-recipes\" exact>\r\n\t\t\t\t\t\t<SearchRecipes />\r\n\t\t\t\t\t</Route>\r\n\t\t\t\t\t{/* <Route path=\"/fooddb\" exact>\r\n\t\t\t\t\t\t<FoodDB />\r\n\t\t\t\t\t</Route> */}\r\n\t\t\t\t\t{/**(7) method 1 - simply NO access*/ !isLoggedIn && (\r\n\t\t\t\t\t\t<Route path=\"/auth\">\r\n\t\t\t\t\t\t\t<AuthPage />\r\n\t\t\t\t\t\t</Route>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{/**(7) method 2 - Redirect */}\r\n\t\t\t\t\t<Route path=\"/profile\">\r\n\t\t\t\t\t\t{isLoggedIn && <ProfilePage />}\r\n\t\t\t\t\t\t{!isLoggedIn && <Redirect to=\"/auth\" />}\r\n\t\t\t\t\t</Route>\r\n\t\t\t\t\t<Route path=\"*\">\r\n\t\t\t\t\t\t<Redirect to=\"/\" />\r\n\t\t\t\t\t</Route>\r\n\t\t\t\t</Switch>\r\n\t\t\t</Layout>\r\n\t\t</Fragment>\r\n\t);\r\n}\r\n\r\nexport default App;\r\n","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\nav\\MainHeader.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\layout\\Layout.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\LoadingSpinner.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\FoodDB.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\SearchRecipes.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\search-context.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\SearchBar.js",["88","89"],"import classes from './SearchBar.module.css';\r\nimport { Fragment, useContext, useState, useEffect, useCallback } from 'react';\r\nimport SearchContext from '../../store/search-context';\r\nimport _ from 'lodash';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport Select from 'react-select';\r\n\r\nimport SliderFilter from './SliderFilter';\r\n\r\nconst serialize = function(obj) {\r\n\tvar str = [];\r\n\tfor (var p in obj)\r\n\t\tif (obj.hasOwnProperty(p)) {\r\n\t\t\tstr.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));\r\n\t\t}\r\n\treturn str.join('&');\r\n};\r\n\r\nfunction SearchBar(props) {\r\n\tconst { buttonText } = props;\r\n const {\r\n initialLoad,\r\n setInitialLoad,\r\n\t\tsetSearching,\r\n\t\tsearchQuery,\r\n\t\tsetSearchQuery,\r\n\t\tview,\r\n\t\tsetView,\r\n\t\tadvancedSearchOptions,\r\n\t\tsetAdvancedSearchOptions,\r\n\t\tfilterItems,\r\n\t\tfilterRangedItems\r\n\t} = useContext(SearchContext);\r\n\r\n\tconst selectorItems = Object.keys(filterItems).map((key) => {\r\n\t\treturn {\r\n\t\t\t[key]: filterItems[key].map((value) => {\r\n\t\t\t\treturn { value: value, label: value };\r\n\t\t\t})\r\n\t\t};\r\n\t});\r\n\r\n\tconst [ advancedSearchOn, setAdvancedSearchOn ] = useState(false);\r\n\r\n //* ON LOAD, do a default search for beef recipes\r\n\tconst url = useHistory();\r\n\tuseEffect(\r\n () => {\r\n console.log(initialLoad)\r\n\t\t\tif (!initialLoad) {\r\n\t\t\t\turl.push(`/search-recipes?q=beef`);\r\n\t\t\t\tsetInitialLoad(true);\r\n\t\t\t} \r\n\t\t},\r\n\t\t[ initialLoad ]\r\n\t);\r\n\r\n\t//* ON LOAD, check query parameters & update seachQuery & advancedSearchOptions - START\r\n\tconst location = useLocation();\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tlet search = location.search.substring(1);\r\n\t\t\tif (search) {\r\n\t\t\t\tlet queryParams = JSON.parse('{\"' + search.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}', function(\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\tvalue\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn key === '' ? value : decodeURIComponent(value);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (queryParams.q) {\r\n\t\t\t\t\tsetSearchQuery(queryParams.q);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetAdvancedSearchOptions(queryParams);\r\n\t\t\t\tsetSearching(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ setSearchQuery, setAdvancedSearchOptions, setSearching, location.search ]\r\n\t);\r\n\t//! ON LOAD, check query parameters & update seachQuery & advancedSearchOptions - END\r\n\r\n\t//begin search upon submit & updated query params in URL to match\r\n\tconst history = useHistory();\r\n\tfunction submitHandler(e) {\r\n\t\te.preventDefault();\r\n\r\n\t\thistory.push(`/search-recipes?${serialize({ ...advancedSearchOptions, q: searchQuery })}`); //add query Parameters to URL upon search\r\n\t\tsetSearching(true);\r\n\t}\r\n\r\n\tfunction searchInputChangeHandler(e) {\r\n\t\tsetSearchQuery(e.target.value);\r\n\t}\r\n\r\n\tfunction toogleAdvancedSearch() {\r\n\t\tsetAdvancedSearchOn((prev) => {\r\n\t\t\tif (!prev === false) {\r\n\t\t\t\tresetSearchOptions();\r\n\t\t\t}\r\n\t\t\treturn !prev;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction advancedOptHandler(e, category) {\r\n\t\tif (!e) {\r\n\t\t\tsetAdvancedSearchOptions((prev) => {\r\n\t\t\t\tconst newValue = { ...prev };\r\n\t\t\t\tdelete newValue[_.camelCase(category)];\r\n\t\t\t\treturn newValue;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetAdvancedSearchOptions((prev) => {\r\n\t\t\t\treturn { ...prev, [_.camelCase(category)]: e.value };\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//* RANGED FILTERS - START ----------------------------------------------------------------------\r\n\tconst [ rangedFilters, setRangedFilters ] = useState(\r\n\t\tfilterRangedItems.map((categoryObj) => {\r\n\t\t\treturn { [categoryObj.category]: categoryObj.range };\r\n\t\t})\r\n\t); //i.e. [{time: [0,300]},{calories: [0,5000]}]\r\n\tconst [ selRangeCat, setSelRanCat ] = useState(null);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (selRangeCat) {\r\n\t\t\t\tconst selRange = rangedFilters.find((categoryObj) => selRangeCat in categoryObj)[selRangeCat];\r\n\t\t\t\tconst selBaseRange = filterRangedItems.find((catObj) => catObj.category === selRangeCat).range;\r\n\r\n\t\t\t\tsetAdvancedSearchOptions((prev) => {\r\n\t\t\t\t\tif (selRange[0] === selBaseRange[0] && selRange[1] === selBaseRange[1]) {\r\n\t\t\t\t\t\t//* min range 0, range max range hit -> delete parameter\r\n\r\n\t\t\t\t\t\tconst newValue = { ...prev };\r\n\t\t\t\t\t\tdelete newValue[_.camelCase(selRangeCat)];\r\n\t\t\t\t\t\tconsole.log(newValue);\r\n\t\t\t\t\t\treturn newValue;\r\n\t\t\t\t\t} else if (selRange[1] === selBaseRange[1]) {\r\n\t\t\t\t\t\t//* min range & max range=max -> 'minRange+'\r\n\r\n\t\t\t\t\t\tif (prev && selRangeCat in prev && prev[selRangeCat] === `${selRange[0]}+`) return prev;\r\n\t\t\t\t\t\tconsole.log(`${selRange[0]}+`);\r\n\t\t\t\t\t\treturn { ...prev, [selRangeCat]: `${selRange[0]}+` };\r\n\t\t\t\t\t} else if (selRange[0] === selBaseRange[0]) {\r\n\t\t\t\t\t\t//* min range=min & max range -> 'maxRange'\r\n\r\n\t\t\t\t\t\tif (prev && selRangeCat in prev && prev[selRangeCat] === `${selRange[1]}`) return prev;\r\n\t\t\t\t\t\tconsole.log(`${selRange[1]}`);\r\n\t\t\t\t\t\treturn { ...prev, [selRangeCat]: `${selRange[1]}` };\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//* min range & max range -> 'minRange-maxRange'\r\n\r\n\t\t\t\t\t\tif (prev && selRangeCat in prev && prev[selRangeCat] === `${selRange[0]}-${selRange[1]}`)\r\n\t\t\t\t\t\t\treturn prev;\r\n\t\t\t\t\t\tconsole.log(`${selRange[0]}-${selRange[1]}`);\r\n\t\t\t\t\t\treturn { ...prev, [selRangeCat]: `${selRange[0]}-${selRange[1]}` };\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ selRangeCat, rangedFilters, filterRangedItems, setAdvancedSearchOptions ]\r\n\t);\r\n\t//* RANGED FILTERS - END ----------------------------------------------------------------------\r\n\r\n\tfunction resetSearchOptions() {\r\n\t\tsetAdvancedSearchOptions({});\r\n\t\tsetRangedFilters(\r\n\t\t\tfilterRangedItems.map((categoryObj) => {\r\n\t\t\t\treturn { [categoryObj.category]: categoryObj.range };\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Fragment>\r\n\t\t\t<div className={classes.searchBar}>\r\n\t\t\t\t<div className={classes.searchBarFind}>\r\n\t\t\t\t\t<form onSubmit={submitHandler} className={classes.inputSection}>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tonChange={searchInputChangeHandler}\r\n\t\t\t\t\t\t\t\tplaceholder={buttonText}\r\n\t\t\t\t\t\t\t\tid=\"search\"\r\n\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\tvalue={searchQuery}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button id=\"submitButton\" type=\"submit\">\r\n\t\t\t\t\t\t\t\t<i className=\"fas fa-search\" />\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</form>\r\n\t\t\t\t\t<div className={classes.view}>\r\n\t\t\t\t\t\t<button className={view === 'grid' ? classes.viewSelected : ''} onClick={() => setView('grid')}>\r\n\t\t\t\t\t\t\t<i className=\"fas fa-th-large\" />\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button className={view === 'list' ? classes.viewSelected : ''} onClick={() => setView('list')}>\r\n\t\t\t\t\t\t\t<i className=\"fas fa-bars\" />\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button onClick={toogleAdvancedSearch} className={classes.filter}>\r\n\t\t\t\t\t{!advancedSearchOn ? 'Filter ' : 'Reset Filter '}\r\n\t\t\t\t\t{!advancedSearchOn ? <i className=\"fas fa-caret-down\" /> : <i className=\"fas fa-caret-up\" />}\r\n\t\t\t\t</button>\r\n\t\t\t\t{advancedSearchOn && (\r\n\t\t\t\t\t<div className={classes.advancedSearch}>\r\n\t\t\t\t\t\t{selectorItems.map((categoryObj) => {\r\n\t\t\t\t\t\t\treturn Object.keys(categoryObj).map((key) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<div key={key} className={classes.categoryWrapper}>\r\n\t\t\t\t\t\t\t\t\t\t<label htmlFor=\"\">{_.startCase(key)}</label>\r\n\t\t\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\t\t\tclassName={classes.select}\r\n\t\t\t\t\t\t\t\t\t\t\toptions={categoryObj[key]}\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Select...\"\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => advancedOptHandler(e, key)}\r\n\t\t\t\t\t\t\t\t\t\t\tisClearable\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t<div className={classes.rangeItems}>\r\n\t\t\t\t\t\t\t{filterRangedItems.map((categoryObj) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<SliderFilter\r\n\t\t\t\t\t\t\t\t\t\tkey={categoryObj.category}\r\n\t\t\t\t\t\t\t\t\t\tinfo={categoryObj}\r\n\t\t\t\t\t\t\t\t\t\tcurrentRange={\r\n\t\t\t\t\t\t\t\t\t\t\trangedFilters.find((obj) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn categoryObj.category in obj;\r\n\t\t\t\t\t\t\t\t\t\t\t})[categoryObj.category]\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tsetRangedFilters={setRangedFilters}\r\n\t\t\t\t\t\t\t\t\t\tsetSelRanCat={setSelRanCat}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t</Fragment>\r\n\t);\r\n}\r\n\r\nexport default SearchBar;\r\n","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\searchRecipes\\RecipesList.js",["90"],"import { useEffect, useCallback, useContext, useState } from 'react';\r\nimport RecipesListItem from './RecipesListItem';\r\nimport { Fragment } from 'react';\r\nimport classes from './RecipesList.module.css';\r\nimport SearchContext from '../../store/search-context';\r\nimport LoadingSpinner from '../ui/LoadingSpinner';\r\nimport GridLayout from '../ui/GridLayout';\r\n\r\n// Proxy to bypass CORS blocking policy - see link for details -> https://stackoverflow.com/questions/43871637/no-access-control-allow-origin-header-is-present-on-the-requested-resource-whe\r\nconst proxy = process.env.REACT_APP_PROXY;\r\nconst edamamRecipeBaseURL = `https://api.edamam.com/api/recipes/v2`;\r\nconst baseURL = `${proxy}${edamamRecipeBaseURL}`;\r\n\r\nfunction Viewer(props) {\r\n\tconst { view } = useContext(SearchContext);\r\n\tlet content = <GridLayout GridLayout> {props.children}</GridLayout>;\r\n\tif (view !== 'grid') {\r\n\t\tcontent = <div className={classes.listView}>{props.children}</div>;\r\n\t}\r\n\treturn content;\r\n}\r\n\r\nfunction RecipesList() {\r\n\tconst {\r\n\t\tsearching,\r\n\t\tsetSearching,\r\n\t\tsearchRecipeResults,\r\n\t\tsetSearchRecipeResults,\r\n\t\tsearchQuery,\r\n\t\tview,\r\n\t\tadvancedSearchOptions\r\n\t} = useContext(SearchContext);\r\n\tconst [ initialSearch, setInitialSearch ] = useState(false);\r\n\r\n\tconst recipeSearch = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst preParams = {\r\n\t\t\t\ttype: 'public',\r\n\t\t\t\tapp_id: process.env.REACT_APP_EDAMAN_API_ID,\r\n\t\t\t\tapp_key: process.env.REACT_APP_EDAMAN_API_KEY,\r\n\t\t\t\tq: searchQuery\r\n\t\t\t};\r\n\r\n\t\t\tObject.assign(preParams, advancedSearchOptions);\r\n\t\t\t// console.log(preParams);\r\n\t\t\tconst params = new URLSearchParams(preParams);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(`${baseURL}?${params.toString()}`);\r\n\r\n\t\t\t\tconst data = await response.json();\r\n\t\t\t\tsetSearchRecipeResults(data.hits);\r\n\t\t\t\t// console.log(data.hits);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.log(err.message);\r\n\t\t\t}\r\n\r\n\t\t\tsetSearching(false);\r\n\t\t},\r\n\t\t[ searchQuery, setSearching, setSearchRecipeResults, advancedSearchOptions ]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (searching === true) {\r\n\t\t\t\tsetInitialSearch(true);\r\n\t\t\t\trecipeSearch();\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ searching, recipeSearch, setInitialSearch ]\r\n\t);\r\n\r\n\tconst Content = (\r\n\t\t<Viewer>\r\n\t\t\t{searchRecipeResults &&\r\n\t\t\t\tsearchRecipeResults.length > 0 &&\r\n\t\t\t\t!searching &&\r\n\t\t\t\tsearchRecipeResults.map((recipe, index) => (\r\n\t\t\t\t\t<RecipesListItem\r\n\t\t\t\t\t\tclassName={classes.recipe}\r\n\t\t\t\t\t\trecipe={recipe.recipe}\r\n\t\t\t\t\t\trecipeId={recipe._links.self.href.replace(`${edamamRecipeBaseURL}/`, '').split('?')[0]} //recipe id from API\r\n\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t/>\r\n\t\t\t\t))}\r\n\t\t</Viewer>\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Fragment>\r\n\t\t\t{searching && <LoadingSpinner />}\r\n\t\t\t{!searching && initialSearch && Content}\r\n\t\t\t{searchRecipeResults &&\r\n\t\t\tsearchRecipeResults.length === 0 &&\r\n\t\t\tinitialSearch &&\r\n\t\t\t!searching && <h2>Sorry, no results came up. Try modifying your search</h2>}\r\n\t\t</Fragment>\r\n\t);\r\n}\r\n\r\nexport default RecipesList;\r\n","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\searchRecipes\\RecipesListItem.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\filterItems.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\RecipeDetails.js",["91","92"],"import { useParams } from 'react-router-dom';\r\nimport { useContext, useCallback, useEffect, Fragment, useState } from 'react';\r\nimport SearchContext from '../store/search-context';\r\nimport classes from './RecipeDetails.module.css';\r\nimport LoadingSpinner from '../components/ui/LoadingSpinner';\r\nimport AuthContext from '../store/auth-context';\r\n\r\nfunction RecipeDetails() {\r\n\tconst recipeId = useParams().recipeId;\r\n\r\n\tconst { email, isLoggedIn } = useContext(AuthContext);\r\n\tconst {\r\n\t\tsearching,\r\n\t\tsetSearching,\r\n\t\tsearchRecipeResults,\r\n\t\tsetSearchRecipeResults\r\n\t\t// savedRecipes,\r\n\t\t// setSavedRecipes\r\n\t} = useContext(SearchContext);\r\n\r\n\tconst [ searchedRecipe, setSearchedRecipe ] = useState(false);\r\n\tconst [ searchedFavourited, setSearchedFavourited ] = useState(false);\r\n\tconst [ favourited, setFavourited ] = useState(false);\r\n\r\n\tconst {\r\n\t\tcalories,\r\n\t\tcautions,\r\n\t\tcuisineType,\r\n\t\tdietLabels,\r\n\t\t// digest,\r\n\t\tdishType,\r\n\t\t// healthLabels,\r\n\t\timage,\r\n\t\tingredientLines,\r\n\t\tlabel,\r\n\t\ttotalTime,\r\n\t\tyield: serves,\r\n\t\turl\r\n\t} = searchRecipeResults;\r\n\r\n\t// Proxy to bypass CORS blocking policy - see link for details -> https://stackoverflow.com/questions/43871637/no-access-control-allow-origin-header-is-present-on-the-requested-resource-whe\r\n\tconst proxy = process.env.REACT_APP_PROXY;\r\n\tconst edamamRecipeBaseURL = `https://api.edamam.com/api/recipes/v2`;\r\n\tconst baseURL = `${proxy}${edamamRecipeBaseURL}`;\r\n\r\n\tconst recipeSearch = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst params = new URLSearchParams({\r\n\t\t\t\ttype: 'public',\r\n\t\t\t\tapp_id: process.env.REACT_APP_EDAMAN_API_ID,\r\n\t\t\t\tapp_key: process.env.REACT_APP_EDAMAN_API_KEY\r\n\t\t\t});\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(`${baseURL}/${recipeId}?${params.toString()}`);\r\n\r\n\t\t\t\tconst data = await response.json();\r\n\t\t\t\t// console.log(data.recipe);\r\n\t\t\t\tsetSearchRecipeResults(data.recipe);\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.log(err.message);\r\n\t\t\t}\r\n\r\n\t\t\tsetSearchedRecipe(true);\r\n\t\t},\r\n\t\t[ searchedRecipe, recipeId, setSearchRecipeResults ]\r\n\t);\r\n\r\n\tconst checkDB = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst response = await fetch(`${process.env.REACT_APP_FIREBASE_BASE_URL}/saved-recipes/${recipeId}.json`);\r\n\t\t\tconst data = await response.json();\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\t[ recipeId ]\r\n\t);\r\n\tconst checkIfFavourited = useCallback(\r\n\t\tasync () => {\r\n\t\t\tconst recipeData = await checkDB();\r\n\t\t\tif (recipeData && recipeData.favouritedAccounts.includes(email)) {\r\n\t\t\t\tsetFavourited(true);\r\n\t\t\t}\r\n\t\t\tsetSearchedFavourited(true);\r\n\t\t},\r\n\t\t[ checkDB, setFavourited, setSearchedFavourited ]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tsetSearching(true);\r\n\t\t\trecipeSearch();\r\n\t\t\tcheckIfFavourited();\r\n\t\t},\r\n\t\t[ recipeSearch, setSearching, checkIfFavourited ]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (searchedRecipe && searchedFavourited) {\r\n\t\t\t\tsetSearching(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ searchedRecipe, searchedFavourited, setSearching ]\r\n\t);\r\n\r\n\tconst addRecipeHandler = async () => {\r\n\t\tconst recipeData = await checkDB();\r\n\t\tif (!email || !isLoggedIn) {\r\n\t\t\talert('To Save a recipe, please sign up and log in!');\r\n\t\t} else if (!recipeData) {\r\n\t\t\tnewSaveToDB();\r\n\t\t\tsetFavourited(true);\r\n\t\t\talert('Recipe saved!');\r\n\t\t} else if (recipeData.favouritedAccounts.includes(email)) {\r\n\t\t\talert('You already have this recipe saved!');\r\n\t\t} else {\r\n\t\t\tupdateDbFavAccounts([ email, ...recipeData.favouritedAccounts ]);\r\n\t\t\tsetFavourited(true);\r\n\t\t\talert('Recipe saved!');\r\n\t\t}\r\n\t};\r\n\r\n\t//assuming logged in w/ recipe already favourited\r\n\tconst removeRecipeHandler = async () => {\r\n\t\tconst recipeData = await checkDB();\r\n\t\tupdateDbFavAccounts(recipeData.favouritedAccounts.filter((account) => account !== email));\r\n\t\tsetFavourited(false);\r\n\t\talert('Recipe Removed!');\r\n\t};\r\n\r\n\tconst newSaveToDB = async () => {\r\n\t\tconst dbRecipe = { ...searchRecipeResults, favouritedAccounts: [ email ], id: recipeId };\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(`${process.env.REACT_APP_FIREBASE_BASE_URL}/saved-recipes.json`, {\r\n\t\t\t\tmethod: 'PATCH',\r\n\t\t\t\tbody: JSON.stringify({ [recipeId]: dbRecipe }),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tconst data = await response.json();\r\n\r\n\t\t\tconsole.log(data);\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log(e.message);\r\n\t\t}\r\n\t};\r\n\r\n\tconst updateDbFavAccounts = async (favouritedAccounts) => {\r\n\t\tif (favouritedAccounts.length > 0) {\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(\r\n\t\t\t\t\t`${process.env.REACT_APP_FIREBASE_BASE_URL}/saved-recipes/${recipeId}.json`,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod: 'PATCH',\r\n\t\t\t\t\t\tbody: JSON.stringify({ favouritedAccounts: favouritedAccounts }),\r\n\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\tconst data = await response.json();\r\n\r\n\t\t\t\tconsole.log(data);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log(e.message);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t//if there are no other accounts favouriting this recipe, remove it completely from db\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(\r\n\t\t\t\t\t`${process.env.REACT_APP_FIREBASE_BASE_URL}/saved-recipes/${recipeId}.json`,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\tconst data = await response.json();\r\n\r\n\t\t\t\tconsole.log(data);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log(e.message);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Fragment>\r\n\t\t\t{searching && <LoadingSpinner />}\r\n\t\t\t{!searching && (\r\n\t\t\t\t<div className={classes.itemListView}>\r\n\t\t\t\t\t<div className={classes.imgContainer}>\r\n\t\t\t\t\t\t<img src={image} alt=\"\" />\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div className={classes.list}>\r\n\t\t\t\t\t\t<div className={classes.labalSection}>\r\n\t\t\t\t\t\t\t<h2>{label}</h2>\r\n\t\t\t\t\t\t\t{favourited ? (\r\n\t\t\t\t\t\t\t\t<button onClick={removeRecipeHandler}>\r\n\t\t\t\t\t\t\t\t\t<h2>Remove Recipe</h2>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<button onClick={addRecipeHandler}>\r\n\t\t\t\t\t\t\t\t\t<h2>Save Recipe!</h2>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<div className={classes.infoAndIngredients}>\r\n\t\t\t\t\t\t\t<div className={classes.ingredients}>\r\n\t\t\t\t\t\t\t\t<div className={classes.ingredientTitle}>\r\n\t\t\t\t\t\t\t\t\t<h3>Ingredients</h3>\r\n\t\t\t\t\t\t\t\t\t<p>serves {serves}</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t{ingredientLines &&\r\n\t\t\t\t\t\t\t\t\tingredientLines.map((ingredient, index) => <p key={index}>{ingredient}</p>)}\r\n\t\t\t\t\t\t\t\t<a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\r\n\t\t\t\t\t\t\t\t\t<i className=\"fas fa-clipboard-list\" /> <b>Recipe</b>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className={classes.info}>\r\n\t\t\t\t\t\t\t\t<h3>Info</h3>\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Cuisine Type</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>{cuisineType && cuisineType}</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Cautions</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>{cautions && cautions}</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Diet Labels</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>{dietLabels && dietLabels}</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Dish Type</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>{dishType && dishType}</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t{/* <div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t<p className={classes.label}>Health Labels</p>\r\n\t\t\t\t\t\t\t<p className={classes.description}>{healthLabels && healthLabels}</p>\r\n\t\t\t\t\t\t</div> */}\r\n\t\t\t\t\t\t\t\t{/* <div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t<p className={classes.label}>Digest</p>\r\n\t\t\t\t\t\t\t<p className={classes.description}>{digest && digest}</p>\r\n\t\t\t\t\t\t</div> */}\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Calories</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>\r\n\t\t\t\t\t\t\t\t\t\t{Math.round(calories).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\r\n\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className={classes.infoCategory}>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.label}>Total Time</p>\r\n\t\t\t\t\t\t\t\t\t<p className={classes.description}>\r\n\t\t\t\t\t\t\t\t\t\t{Math.round(totalTime).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')} min\r\n\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</Fragment>\r\n\t);\r\n}\r\n\r\nexport default RecipeDetails;\r\n","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\store\\auth-context.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\AuthPage.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\pages\\ProfilePage.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\Auth\\AuthForm.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\Profile\\UserProfile.js",["93","94"],"import classes from './UserProfile.module.css';\r\nimport { Fragment, useCallback, useState, useEffect, useContext } from 'react';\r\nimport LoadingSpinner from '../ui/LoadingSpinner';\r\n\r\nimport RecipesListItem from '../searchRecipes/RecipesListItem';\r\nimport AuthContext from '../../store/auth-context';\r\nimport SearchContext from '../../store/search-context';\r\nimport GridLayout from '../ui/GridLayout';\r\n\r\nconst UserProfile = () => {\r\n\tconst { email } = useContext(AuthContext);\r\n\tconst { searching, setSearching, view } = useContext(SearchContext);\r\n\tconst [ recipes, setRecipes ] = useState([]);\r\n\r\n\tconst loadRecipes = useCallback(\r\n\t\tasync () => {\r\n\t\t\tsetSearching(true);\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(`${process.env.REACT_APP_FIREBASE_BASE_URL}/saved-recipes.json`);\r\n\t\t\t\tconst loadedRecipes = await response.json();\r\n\t\t\t\t// console.log(loadedRecipes);\r\n\t\t\t\t// console.log(email);\r\n\r\n\t\t\t\tconst favouritedAccountRecipes = [];\r\n\r\n for (const value of Object.values(loadedRecipes)) {\r\n // console.log(value.favouritedAccounts);\r\n\t\t\t\t\tif (value.favouritedAccounts.includes(email)) {\r\n\t\t\t\t\t\tfavouritedAccountRecipes.push(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsetRecipes(favouritedAccountRecipes);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log(e);\r\n\t\t\t}\r\n\t\t\tsetSearching(false);\r\n\t\t},\r\n\t\t[ email ]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (email) {\r\n\t\t\t\t// console.log('email:', email);\r\n\t\t\t\tloadRecipes();\r\n\t\t\t}\r\n\t\t},\r\n\t\t[ loadRecipes, email ]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Fragment>\r\n\t\t\t<h1>Your Saved Recipes</h1>\r\n\t\t\t{searching && <LoadingSpinner />}\r\n\t\t\t{!searching && (\r\n\t\t\t\t<GridLayout>\r\n\t\t\t\t\t{recipes &&\r\n\t\t\t\t\t\trecipes.length > 0 &&\r\n\t\t\t\t\t\t!searching &&\r\n\t\t\t\t\t\trecipes.map((recipe, index) => (\r\n\t\t\t\t\t\t\t<RecipesListItem\r\n\t\t\t\t\t\t\t\tclassName={classes.recipe}\r\n\t\t\t\t\t\t\t\trecipe={recipe}\r\n\t\t\t\t\t\t\t\trecipeId={recipe.id} //recipe id from API\r\n\t\t\t\t\t\t\t\tkey={recipe.id}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t</GridLayout>\r\n\t\t\t)}\r\n\t\t\t{recipes &&\r\n\t\t\trecipes.length === 0 &&\r\n\t\t\t!searching && <h2>Sorry, no results came up. Try modifying your search</h2>}\r\n\t\t</Fragment>\r\n\t);\r\n};\r\n\r\nexport default UserProfile;\r\n","C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\SliderFilter.js",[],"C:\\Users\\Donny\\CODING\\Donny's Personal Projects\\Web Development\\React\\food-api\\src\\components\\ui\\GridLayout.js",[],{"ruleId":"95","severity":1,"message":"96","line":15,"column":8,"nodeType":"97","messageId":"98","endLine":15,"endColumn":14},{"ruleId":"95","severity":1,"message":"99","line":2,"column":53,"nodeType":"97","messageId":"98","endLine":2,"endColumn":64},{"ruleId":"100","severity":1,"message":"101","line":55,"column":3,"nodeType":"102","endLine":55,"endColumn":18,"suggestions":"103"},{"ruleId":"95","severity":1,"message":"104","line":30,"column":3,"nodeType":"97","messageId":"98","endLine":30,"endColumn":7},{"ruleId":"100","severity":1,"message":"105","line":66,"column":3,"nodeType":"102","endLine":66,"endColumn":55,"suggestions":"106"},{"ruleId":"100","severity":1,"message":"107","line":85,"column":3,"nodeType":"102","endLine":85,"endColumn":52,"suggestions":"108"},{"ruleId":"95","severity":1,"message":"104","line":12,"column":35,"nodeType":"97","messageId":"98","endLine":12,"endColumn":39},{"ruleId":"100","severity":1,"message":"109","line":38,"column":3,"nodeType":"102","endLine":38,"endColumn":12,"suggestions":"110"},"no-unused-vars","'FoodDB' is defined but never used.","Identifier","unusedVar","'useCallback' is defined but never used.","react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'setInitialLoad' and 'url'. Either include them or remove the dependency array.","ArrayExpression",["111"],"'view' is assigned a value but never used.","React Hook useCallback has a missing dependency: 'baseURL'. Either include it or remove the dependency array.",["112"],"React Hook useCallback has a missing dependency: 'email'. Either include it or remove the dependency array.",["113"],"React Hook useCallback has a missing dependency: 'setSearching'. Either include it or remove the dependency array.",["114"],{"desc":"115","fix":"116"},{"desc":"117","fix":"118"},{"desc":"119","fix":"120"},{"desc":"121","fix":"122"},"Update the dependencies array to be: [initialLoad, setInitialLoad, url]",{"range":"123","text":"124"},"Update the dependencies array to be: [baseURL, recipeId, setSearchRecipeResults]",{"range":"125","text":"126"},"Update the dependencies array to be: [checkDB, email]",{"range":"127","text":"128"},"Update the dependencies array to be: [email, setSearching]",{"range":"129","text":"130"},[1402,1417],"[initialLoad, setInitialLoad, url]",[1958,2010],"[baseURL, recipeId, setSearchRecipeResults]",[2504,2553],"[checkDB, email]",[1313,1322],"[email, setSearching]"]