{"version":3,"sources":["components/ApplicationBar.tsx","utils/localStorageUtils.ts","models/constants.ts","redux/slices/pokemonSlice.ts","redux/hooks.ts","components/CaughtIcon.tsx","components/PokemonTable.tsx","pages/PokemonList.tsx","components/CardContent/PokemonLocations.tsx","components/CardContent/EvolvesFrom.tsx","components/CardContent/PokemonBasicContent.tsx","pages/PokemonDetail.tsx","App.tsx","reportWebVitals.ts","redux/store.ts","theme.js","index.tsx"],"names":["useStyles","makeStyles","root","boxShadow","link","textDecoration","color","ApplicationBar","classes","AppBar","position","className","Toolbar","Typography","variant","data-testid","to","caughtPokemonKey","ApiBaseUrl","initialState","isFetchingList","isFetchingPokemon","pokemons","caughtPokemons","result","localStorage","getItem","JSON","parse","getCaughtPokemon","search","filter","pokemon","page","itemsPerPage","fetchAllPokemons","createAsyncThunk","a","fetch","response","json","jsonResponse","results","map","d","id","url","split","replace","name","fetchPokemon","pokemonId","_","pokemonReq","fetchPokemonDescription","characteristic","fetchPokemonLocations","canBeFound","pokemonSlice","createSlice","reducers","toggleCaughtPokemon","state","action","values","includes","payload","splice","indexOf","push","setItem","stringify","setSearchText","setFilter","setPage","setItemsPerPage","extraReducers","builder","addCase","fulfilled","pending","sprites","previous","evolves_from_species","description","flavor_text_entries","e","language","reverse","flavor_text","locations","actions","useAppDispatch","useDispatch","useAppSelector","useSelector","starIcon","marginRight","cursor","CaughtIcon","props","caught","Icon","onClick","preventDefault","stopPropagation","onToggle","row","transition","nodata","display","placeContent","textAlign","marginTop","PokemonTable","rows","rowsPerPage","onPageChange","onRowsPerPageChange","length","alt","src","TableContainer","Table","stickyHeader","sx","minWidth","aria-label","TableHead","TableRow","TableCell","align","TableBody","searchMode","slice","component","scope","width","startCase","onCaught","TableFooter","TablePagination","rowsPerPageOptions","colSpan","count","SelectProps","native","ActionsComponent","TablePaginationActions","height","window","innerHeight","padding","margin","toolbar","alignItems","justifyContent","PokemonList","dispatch","useLocation","setLocation","s","p","toLowerCase","Container","maxWidth","Select","value","onChange","v","target","MenuItem","Tooltip","title","TextField","placeholder","InputProps","startAdornment","InputAdornment","r","newPage","event","parseInt","PokemonLocations","useState","expanded","setExpanded","locationsReduced","showExtra","gutterBottom","l","location_area","EvolvesFrom","finalUrl","PokemonBasicContent","content","paddingBottom","marginBottom","borderBottom","marginLeft","PokemonDetail","useRoute","params","wasCaught","useEffect","Card","CardContent","CardActionArea","CardMedia","image","get","App","path","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","store","configureStore","reducer","theme","createTheme","require","palette","primary","main","ReactDOM","render","StrictMode","ThemeProvider","document","getElementById"],"mappings":"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","file":"static/js/main.84f27393.chunk.js","sourcesContent":["import {AppBar, Toolbar, Typography} from \"@mui/material\"\nimport React from \"react\"\nimport {makeStyles} from \"@mui/styles\";\nimport {Link} from \"wouter\"\n\nconst useStyles = makeStyles({\n root: {\n boxShadow: \"none !important\"\n },\n link: {\n textDecoration: \"none\",\n color: \"white\"\n }\n})\n\nexport default function ApplicationBar() {\n\n const classes = useStyles();\n\n return \n \n \n \n 7Days Pokédex\n \n \n \n \n}","const caughtPokemonKey = \"pokemon:caught\";\n\nexport const getCaughtPokemon = () => {\n const result = localStorage.getItem(caughtPokemonKey);\n if(result)\n return JSON.parse(result);\n\n return []\n}\n\nexport const setCaughtPokemon = (values: string[]) => {\n localStorage.setItem(caughtPokemonKey, JSON.stringify(values));\n}","export const ApiBaseUrl = \"https://pokeapi.co/api/v2\"","import {createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit'\nimport {IListEntry} from \"../../models/interfaces\";\nimport {getCaughtPokemon, setCaughtPokemon} from \"../../utils/localStorageUtils\";\nimport {ApiBaseUrl} from \"../../models/constants\";\n\n// Define a type for the slice state\ninterface PokemonState {\n isFetchingList: boolean\n isFetchingPokemon: boolean\n pokemons: IListEntry[]\n search: string\n caughtPokemons: string[]\n filter: \"all\" | \"caught\" | \"remaining\"\n pokemon: any\n page: number\n itemsPerPage: number\n}\n\n// Define the initial state using that type\nexport const initialState: PokemonState = {\n isFetchingList: true,\n isFetchingPokemon: true,\n pokemons: [],\n caughtPokemons: getCaughtPokemon(),\n search: \"\",\n filter: \"all\",\n pokemon: {},\n page: 0,\n itemsPerPage: 15,\n}\n\nexport const fetchAllPokemons = createAsyncThunk(\n 'pokemon/fetchAll',\n async () => {\n const response = await fetch(`${ApiBaseUrl}/pokemon?limit=-1`);\n const jsonResponse = await response.json();\n\n return jsonResponse.results.map((d: any) => ({\n id: d.url.split(`${ApiBaseUrl}/pokemon/`)[1].replace(\"/\", \"\"),\n name: d.name,\n url: d.url,\n } as IListEntry));\n }\n)\n\nexport const fetchPokemon = createAsyncThunk(\n 'pokemon/fetch',\n async (pokemonId: string, _) => {\n const pokemonReq = await fetch(`${ApiBaseUrl}/pokemon/${pokemonId}`);\n return await pokemonReq.json();\n }\n)\n\nexport const fetchPokemonDescription = createAsyncThunk(\n 'pokemon/fetchDescription',\n async (pokemonId: string, _) => {\n\n const characteristic = await fetch(`${ApiBaseUrl}/pokemon-species/${pokemonId}`);\n return await characteristic.json();\n }\n)\n\nexport const fetchPokemonLocations = createAsyncThunk(\n 'pokemon/fetchLocation',\n async (pokemonId: string, _) => {\n const canBeFound = await fetch(`${ApiBaseUrl}/pokemon/${pokemonId}/encounters`);\n return await canBeFound.json();\n }\n)\n\nexport const pokemonSlice = createSlice({\n name: 'pokemon',\n initialState,\n reducers: {\n toggleCaughtPokemon: (state, action: PayloadAction) => {\n if(state.caughtPokemons.includes(action.payload)){\n state.caughtPokemons.splice(state.caughtPokemons.indexOf(action.payload), 1);\n }else{\n state.caughtPokemons.push(action.payload)\n }\n\n setCaughtPokemon(state.caughtPokemons);\n },\n setSearchText: (state, action: PayloadAction) => {\n state.search = action.payload\n },\n setFilter: (state, action: PayloadAction) => {\n switch (action.payload){\n case \"all\":\n state.filter = \"all\";\n break;\n case \"caught\":\n state.filter = \"caught\";\n break;\n case \"remaining\":\n state.filter = \"remaining\";\n break;\n default:\n state.filter = \"all\"\n }\n state.page = 0;\n },\n setPage: (state, action: PayloadAction) => {\n state.page = action.payload;\n },\n setItemsPerPage: (state, action: PayloadAction) => {\n state.itemsPerPage = action.payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(fetchAllPokemons.fulfilled, (state, action: { payload: IListEntry[] }) => {\n state.isFetchingList = false;\n state.pokemons = action.payload;\n })\n builder.addCase(fetchPokemon.pending, (state, action) => {\n state.pokemon = {}\n })\n builder.addCase(fetchPokemon.fulfilled, (state, action) => {\n state.pokemon.id = action.payload.id;\n state.pokemon.name = action.payload.name;\n state.pokemon.sprites = action.payload.sprites;\n })\n builder.addCase(fetchPokemonDescription.fulfilled, (state, action) => {\n state.pokemon.previous = action.payload.evolves_from_species;\n state.pokemon.description = action.payload.flavor_text_entries.filter((e: any) => e.language.name === \"en\").reverse()[0].flavor_text;\n })\n builder.addCase(fetchPokemonLocations.fulfilled, (state, action) => {\n state.pokemon.locations = action.payload;\n })\n },\n})\n\nexport const {toggleCaughtPokemon, setSearchText, setFilter, setPage, setItemsPerPage} = pokemonSlice.actions","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\nimport type { RootState, AppDispatch } from './store'\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch()\nexport const useAppSelector: TypedUseSelectorHook = useSelector","import React from 'react'\nimport {Icon} from \"@mui/material\";\nimport {makeStyles} from \"@mui/styles\";\n\nconst useStyles = makeStyles({\n starIcon: {\n marginRight: \"12px\",\n cursor: \"pointer\"\n }\n})\n\ninterface IProps {\n onToggle: () => void;\n caught: boolean;\n}\n\nexport default function CaughtIcon(props: IProps) {\n\n const classes = useStyles();\n const {caught} = props;\n\n return (\n {\n e.preventDefault();\n e.stopPropagation();\n props.onToggle()\n }}>\n {caught ? \"star\" : \"star_outline\"}\n \n )\n}","import React from \"react\"\nimport {ITableEntry} from \"../models/interfaces\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableFooter,\n TableHead,\n TablePagination,\n TableRow,\n Typography\n} from \"@mui/material\";\nimport TablePaginationActions from \"@mui/material/TablePagination/TablePaginationActions\";\nimport {makeStyles} from \"@mui/styles\";\nimport startCase from \"lodash/startCase\";\nimport CaughtIcon from \"./CaughtIcon\";\n\ninterface IProps {\n rows: ITableEntry[]\n rowsPerPage: number;\n page: number;\n searchMode: boolean;\n onCaught: (name: string) => void;\n onClick: (v: string) => void;\n onPageChange: (_: any, newPage: number) => void;\n onRowsPerPageChange: (event: any) => void;\n}\n\nconst useStyles = makeStyles({\n row: {\n transition: \"box-shadow 0.2s ease\",\n \"&:hover\": {\n boxShadow: \"rgb(0 0 0 / 16%) 0px 0px 12px 0px, rgb(0 0 0 / 6%) 0px 0px 0px 1px\",\n cursor: \"pointer\",\n }\n },\n nodata: {\n display: \"grid\",\n placeContent: \"center\",\n textAlign: \"center\",\n \"& > img\": {\n marginTop: 32\n }\n }\n})\n\nexport default function PokemonTable(props: IProps) {\n\n const classes = useStyles();\n const {rows, rowsPerPage, page, onPageChange, onRowsPerPageChange} = props;\n\n if(rows.length === 0)\n return
\n \n No data found, Psyduck is sad :(\n \n {\"Psyduck\n
\n\n return \n \n \n \n ID\n Name\n Caught\n \n \n \n {(!props.searchMode && rowsPerPage > 0\n ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n : rows\n ).map((row) => (\n props.onClick(row.id)}>\n \n #{row.id}\n \n \n {startCase(row.name)}\n \n \n props.onCaught(row.name)} />\n \n \n ))}\n \n {!props.searchMode && rows.length > rowsPerPage && \n \n \n \n }\n
\n
\n}","import React from \"react\"\nimport {useAppDispatch, useAppSelector} from \"../redux/hooks\";\nimport {Container, Icon, InputAdornment, MenuItem, Select, TextField, Tooltip} from \"@mui/material\";\nimport {makeStyles} from \"@mui/styles\";\nimport PokemonTable from \"../components/PokemonTable\";\nimport {setFilter, setItemsPerPage, setPage, setSearchText, toggleCaughtPokemon} from \"../redux/slices/pokemonSlice\";\nimport {useLocation} from \"wouter\";\nimport {ITableEntry} from \"../models/interfaces\";\n\nconst useStyles = makeStyles({\n root: {\n height: window.innerHeight - 128,\n padding: \"0 2px\",\n margin: \"16px 0\"\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n \"& > div:not(:last-of-type)\": {\n marginRight: \"16px\"\n }\n }\n})\n\n// Pokemon with shortest name is \"mew\"\nconst SEARCH_MODE_LENGTH = 2\n\nexport default function PokemonList() {\n\n const classes = useStyles();\n const dispatch = useAppDispatch();\n const [, setLocation] = useLocation();\n const pokemons = useAppSelector(s => s.pokemon.pokemons)\n const search = useAppSelector(s => s.pokemon.search)\n const caught = useAppSelector(s => s.pokemon.caughtPokemons)\n const filter = useAppSelector(s => s.pokemon.filter)\n const rowsPerPage = useAppSelector(p => p.pokemon.itemsPerPage)\n const page = useAppSelector(p => p.pokemon.page);\n\n let rows = pokemons && search.length >= SEARCH_MODE_LENGTH ? pokemons.filter(p => p.name.toLowerCase().includes(search.toLowerCase())) : pokemons;\n\n if (filter === \"caught\") {\n rows = rows.filter(p => caught.includes(p.name))\n } else if (filter === \"remaining\") {\n rows = rows.filter(p => !caught.includes(p.name))\n }\n\n const onPageChange = (_: any, newPage: number) => {\n dispatch(setPage(newPage))\n };\n\n const onRowsPerPageChange = (event: any) => {\n dispatch(setItemsPerPage(parseInt(event.target.value, 10)))\n dispatch(setPage(0))\n };\n\n return \n
\n dispatch(setFilter(v.target.value))}\n >\n Show all\n Show caught only\n Show not caught\n \n \n {\n dispatch(setSearchText(v.target.value))\n }}\n InputProps={{\n startAdornment: \n search\n ,\n }}\n />\n \n
\n = SEARCH_MODE_LENGTH}\n rows={rows.map(r => ({name: r.name, id: r.id, caught: caught.includes(r.name)} as ITableEntry))}\n onCaught={(value) => dispatch(toggleCaughtPokemon(value))}\n onClick={(v) => {\n setLocation(`/${v}`)\n }}\n rowsPerPage={rowsPerPage}\n page={page}\n onPageChange={onPageChange}\n onRowsPerPageChange={onRowsPerPageChange}\n />\n
\n}","import React, {useState} from 'react'\nimport {Typography} from \"@mui/material\";\nimport startCase from \"lodash/startCase\";\nimport {makeStyles} from \"@mui/styles\";\nimport {ILocation} from \"../../models/interfaces\";\n\ninterface IProps {\n locations: ILocation[];\n}\n\nconst useStyles = makeStyles({\n link: {\n textDecoration: \"none\",\n color: \"inherit\",\n cursor: \"pointer\"\n }\n})\n\nconst MAX_LOCATIONS = 3;\n\nexport default function PokemonLocations(props: IProps) {\n\n const {locations} = props;\n const [expanded, setExpanded] = useState(false);\n const classes = useStyles();\n\n const locationsReduced = expanded ? locations : locations.slice(0,MAX_LOCATIONS);\n const showExtra = locations.length > MAX_LOCATIONS;\n\n return (\n <>\n \n Can be found in the following locations\n \n \n {locationsReduced.map(l => {\n return
  • \n {startCase(l.location_area.name)}\n
  • \n })}\n
    \n {showExtra && !expanded && setExpanded(true)}>\n Expand...\n }\n {showExtra && expanded && setExpanded(false)}>\n Reduce...\n }\n \n )\n}","import React from 'react'\nimport {Link} from \"wouter\";\nimport startCase from \"lodash/startCase\";\nimport {Typography} from \"@mui/material\";\nimport {makeStyles} from \"@mui/styles\";\n\ninterface IProps {\n url: string;\n name: string;\n}\n\nconst useStyles = makeStyles({\n link: {\n textDecoration: \"none\",\n color: \"inherit\"\n },\n})\n\nexport default function EvolvesFrom(props: IProps) {\n\n const classes = useStyles();\n const {name, url} = props;\n\n const finalUrl = url\n .split(\"https://pokeapi.co/api/v2/pokemon-species/\")[1]\n ?.replace(\"/\", \"\");\n\n return (\n \n \n {`Evolves from ${startCase(name)}`}\n \n \n )\n}","import React from 'react'\nimport {Typography} from \"@mui/material\";\nimport startCase from \"lodash/startCase\";\n\ninterface IProps {\n name: string;\n id: string;\n description?: string;\n}\n\nexport default function PokemonBasicContent(props: IProps) {\n\n const {id, name, description} = props;\n\n return (\n <>\n \n {startCase(name)} (#{id})\n \n \n {description || \"The description for this pokemon is not available\"}\n \n \n )\n}","import React, {useEffect} from \"react\"\nimport {Link, useRoute} from \"wouter\";\nimport {Card, CardActionArea, CardContent, CardMedia, Container, Icon} from \"@mui/material\";\nimport {useAppDispatch, useAppSelector} from \"../redux/hooks\";\nimport {\n fetchPokemon,\n fetchPokemonDescription,\n fetchPokemonLocations,\n toggleCaughtPokemon\n} from \"../redux/slices/pokemonSlice\";\nimport {makeStyles} from \"@mui/styles\";\nimport get from \"lodash/get\"\nimport PokemonLocations from \"../components/CardContent/PokemonLocations\";\nimport EvolvesFrom from \"../components/CardContent/EvolvesFrom\";\nimport PokemonBasicContent from \"../components/CardContent/PokemonBasicContent\";\nimport CaughtIcon from \"../components/CaughtIcon\";\n\nconst useStyles = makeStyles({\n root: {\n display: \"grid !important\",\n placeContent: \"center\",\n margin: \"16px 0\"\n },\n content: {\n width: \"-webkit-fill-available\"\n },\n link: {\n textDecoration: \"none\",\n color: \"inherit\"\n },\n toolbar: {\n display: \"flex\",\n paddingBottom: \"12px\",\n marginBottom: \"16px\",\n borderBottom: \"1px solid rgba(0, 0, 0, 0.12)\",\n \"& > span:first-of-type\": {\n cursor: \"pointer\"\n },\n \"& > span:last-of-type\": {\n marginLeft: \"auto\"\n }\n }\n})\n\nexport default function PokemonDetail() {\n\n const [, params] = useRoute(\"/:id\");\n const id = params?.id;\n const classes = useStyles();\n\n const dispatch = useAppDispatch();\n const pokemon = useAppSelector(s => s.pokemon.pokemon)\n const caughtPokemon = useAppSelector(s => s.pokemon.caughtPokemons)\n const wasCaught = caughtPokemon.includes(pokemon?.name)\n\n useEffect(() => {\n if (id) {\n dispatch(fetchPokemon(id));\n dispatch(fetchPokemonLocations(id));\n dispatch(fetchPokemonDescription(id));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id])\n\n return \n {pokemon.id && \n \n
    \n \n arrow_back\n \n dispatch(toggleCaughtPokemon(pokemon.name))} />\n
    \n \n\n {pokemon.locations?.length > 0 && }\n {pokemon.previous?.name && }\n
    \n \n \n \n
    }\n
    \n}","import React, {useEffect} from 'react';\nimport ApplicationBar from \"./components/ApplicationBar\";\nimport {fetchAllPokemons} from \"./redux/slices/pokemonSlice\";\nimport {Route, Switch} from \"wouter\";\nimport PokemonList from \"./pages/PokemonList\";\nimport PokemonDetail from \"./pages/PokemonDetail\";\nimport {useAppDispatch} from \"./redux/hooks\";\n\nfunction App() {\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(fetchAllPokemons());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n
    \n \n \n \n \n \n
    \n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { configureStore } from '@reduxjs/toolkit'\nimport {pokemonSlice} from \"./slices/pokemonSlice\";\n// ...\n\nexport const store = configureStore({\n reducer: {\n pokemon: pokemonSlice.reducer\n },\n})\n\nexport type RootState = ReturnType\nexport type AppDispatch = typeof store.dispatch","const {createTheme} = require(\"@mui/material\");\n\nexport const theme = createTheme({\n palette: {\n primary: {\n main: \"#c10723\"\n }\n }\n});","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport {Provider} from \"react-redux\";\nimport {store} from \"./redux/store\";\nimport {ThemeProvider} from \"@mui/material\";\nimport {theme} from \"./theme\";\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}