{"version":3,"sources":["views/SearchUser/state/searchUser.Constants.js","views/SearchUser/state/searchUser.Actions.js","views/SearchUser/components/useDebeounce.js","views/SearchUser/components/SearchUserFilters.js","views/SearchUser/components/SearchUserList.js","views/SearchUser/state/searchUser.Reducer.js","views/SearchUser/api.js","views/SearchUser/SearchUserView.js","App.js","reportWebVitals.js","index.js"],"names":["Constants","BEGIN_SEARCH_NAME","FINISHED_SEARCH","LOAD_USER_DATA","ERROR_LOADING_DATA","NEXT_PAGE","LAST_PAGE","JUMP_TO_PAGE","errorLoadingData","errors","type","constants","value","jumpToPage","pageNumber","useDebounce","delay","useState","debouncedValue","setDebouncedValue","useEffect","handler","setTimeout","clearTimeout","SearchUserFilters","searchUserDispatch","name","setName","debouncedSearchTerm","templateRows","mt","mb","fontSize","templateColumns","gap","placeholder","onChange","e","target","SearchUserList","searchUserState","spacing","pagination","data","map","user","align","m","opacity","age","size","colorScheme","onClick","justify","mr","maxWidth","minvalue","minPage","maxvalue","maxPage","currentPage","minWidth","searchUserReducer","state","action","console","log","_beginSearchName","_loadUserData","_changePage","parseInt","_errorLoadingData","loading","normalizedSearchTerm","toLowerCase","usersFiltered","users","filter","u","normalizedName","includes","Math","ceil","length","perPage","dataToPageOne","_getUsersFromPage","searchFields","allUsers","pageToAdvance","newPage","pageSize","resultUsers","i","push","searchUserInitialState","api","loadUserData","a","fetch","then","r","json","SearchUserView","useReducer","status","usersWithNormalizedName","catch","error","direction","href","isExternal","mx","App","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.7338e6dc.chunk.js","sourcesContent":["\nconst Constants = {\n BEGIN_SEARCH_NAME: 'BEGIN_SEARCH_NAME',\n FINISHED_SEARCH: 'FINISHED_SEARCH',\n LOAD_USER_DATA: 'LOAD_USER_DATA',\n ERROR_LOADING_DATA: 'ERROR_LOADING_DATA',\n NEXT_PAGE: 'NEXT_PAGE',\n LAST_PAGE: 'LAST_PAGE',\n JUMP_TO_PAGE: 'JUMP_TO_PAGE',\n}\n\nexport default Constants;","\nimport constants from './searchUser.Constants';\n\nconst beginSearchName = (nameToSearch) => {\n return {\n type: constants.BEGIN_SEARCH_NAME,\n value: nameToSearch\n }\n}\n\nconst loadUserData = (users) => {\n return {\n type: constants.LOAD_USER_DATA,\n value: users\n }\n}\n\nconst errorLoadingData = (errors) => {\n return {\n type: constants.ERROR_LOADING_DATA,\n value: errors\n }\n}\n\nconst nextPage = () => {\n return {\n type: constants.NEXT_PAGE\n }\n}\n\nconst lastPage = () => {\n return {\n type: constants.LAST_PAGE\n }\n}\n\nconst jumpToPage = pageNumber => {\n return {\n type: constants.JUMP_TO_PAGE,\n value: pageNumber,\n }\n}\n\nexport {\n beginSearchName,\n loadUserData,\n errorLoadingData,\n nextPage,\n lastPage,\n jumpToPage,\n}","import { useState, useEffect } from 'react';\n\n/** \n * Code based on useHooks website\n * https://usehooks.com/useDebounce/\n */\n function useDebounce(value, delay) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n}\n\nexport default useDebounce;","import { useState, useEffect } from 'react';\nimport { Input, Text, Grid,GridItem } from '@chakra-ui/react';\n\nimport { beginSearchName } from '../state/searchUser.Actions';\nimport useDebounce from './useDebeounce'\n\nconst SearchUserFilters = ({ searchUserDispatch }) => {\n\n const [name, setName] = useState(\"\");\n\n const debouncedSearchTerm = useDebounce(name, 250)\n\n useEffect(() => {\n searchUserDispatch(beginSearchName(debouncedSearchTerm));\n }, [debouncedSearchTerm, searchUserDispatch])\n\n return (\n \n \n Search by:\n \n \n setName(e.target.value)}\n />\n \n \n \n )\n}\n\nexport default SearchUserFilters;","\nimport { \n Text, \n Flex, \n List,\n Grid,\n Input,\n Button,\n Divider,\n ListItem, \n} from '@chakra-ui/react';\n\nimport { nextPage, lastPage, jumpToPage} from '../state/searchUser.Actions';\n\nfunction SearchUserList({ searchUserState, searchUserDispatch }) {\n\n const forward = () => {\n searchUserDispatch(nextPage())\n }\n\n const backward = () => {\n searchUserDispatch(lastPage())\n }\n\n const handleCurrentPageInput = e => {\n const pageNumber = e.target.value;\n\n searchUserDispatch(jumpToPage(pageNumber))\n }\n\n const handleToLastPage = () => {\n searchUserDispatch(jumpToPage(searchUserState.pagination.maxPage))\n }\n\n return (\n \n \n {\n searchUserState.pagination.data.map(user => {\n return (\n \n \n {user.name}\n \n \n Age: \n {user.age}\n \n \n \n );\n })\n }\n \n \n \n \n Current Page: \n \n \n \n Max page:\n \n \n \n \n \n )\n}\n\nexport default SearchUserList;","\nimport constants from './searchUser.Constants';\n\nconst DEBUG = true;\n\nconst searchUserReducer = (state, action) => {\n \n if (DEBUG) console.log(action, state)\n\n switch (action.type) {\n case constants.BEGIN_SEARCH_NAME: \n return _beginSearchName(state, action);\n\n case constants.LOAD_USER_DATA: \n return _loadUserData(state, action);\n\n case constants.NEXT_PAGE:\n return _changePage(state, { value: parseInt(state.pagination.currentPage) + 1 })\n \n case constants.LAST_PAGE:\n return _changePage(state, { value: parseInt(state.pagination.currentPage) - 1 })\n \n case constants.ERROR_LOADING_DATA: \n return _errorLoadingData(state);\n\n case constants.JUMP_TO_PAGE:\n return _changePage(state, { value: action.value })\n \n default: \n return { ...state }\n }\n}\n\nconst _errorLoadingData = (state) => {\n return {\n ...state,\n loading: false,\n errors: true\n }\n}\n\nconst _beginSearchName = (state, action) => {\n\n const normalizedSearchTerm = action.value.toLowerCase();\n const usersFiltered = state.users.filter(u => u.normalizedName.includes(normalizedSearchTerm));\n const currentPage = 1\n const minPage = 1\n const maxPage = Math.ceil(usersFiltered.length / state.pagination.perPage)\n const dataToPageOne = _getUsersFromPage(currentPage, state.pagination.perPage, usersFiltered) \n\n return {\n ...state,\n usersFiltered: usersFiltered,\n searchFields: {\n ...state.searchFields,\n name: action.value\n },\n pagination: {\n ...state.pagination,\n data: dataToPageOne,\n minPage,\n maxPage,\n currentPage,\n }\n }\n}\n\nconst _loadUserData = (state, action) => {\n const allUsers = action.value;\n const currentPage = 1\n const minPage = 1\n const maxPage = Math.ceil(allUsers.length / state.pagination.perPage)\n const dataToPageOne = _getUsersFromPage(currentPage, state.pagination.perPage, allUsers) \n\n return {\n ...state,\n loading: false,\n users: allUsers,\n usersFiltered: allUsers,\n pagination: {\n ...state.pagination,\n data: dataToPageOne,\n minPage,\n maxPage,\n currentPage\n }\n }\n}\n\nconst _changePage = (state, action) => {\n\n const _changePageIfPossible = (pageToAdvance, maxPage, minPage) => {\n const pageIsOverMax = pageToAdvance > maxPage\n const pageIsUnderMin = pageToAdvance < minPage\n \n if (pageIsOverMax) return maxPage;\n if (pageIsUnderMin) return minPage;\n\n return pageToAdvance;\n }\n\n const newPage = _changePageIfPossible(\n action.value, \n state.pagination.maxPage,\n state.pagination.minPage,\n )\n\n const data = _getUsersFromPage(newPage, state.pagination.perPage, state.usersFiltered) \n\n return {\n ...state,\n pagination: {\n ...state.pagination,\n data,\n currentPage: newPage\n }\n }\n}\n\n\nconst _getUsersFromPage = (currentPage, pageSize, users) => {\n const resultUsers = []\n for (var i = pageSize * (currentPage -1); i < currentPage * pageSize; i++) {\n if (users[i]) {\n resultUsers.push(users[i])\n }\n }\n return resultUsers;\n}\n\nconst searchUserInitialState = {\n loading: true,\n searchFields: {\n name: '',\n age: 0,\n },\n errors: false,\n pagination: {\n data: [\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n ],\n currentPage: 1,\n perPage: 10,\n minPage: 1,\n maxPage: 1\n },\n users: [\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n ],\n usersFiltered: [\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n // {\n // name: '',\n // age: '',\n // normalizedName: ''\n // },\n ]\n}\n\nexport { searchUserReducer, searchUserInitialState };","\nconst address = 'https://random-persons.herokuapp.com/users'\n\nconst api = {\n loadUserData: async () => {\n return fetch(address).then(r => r.json());\n }\n}\n\nexport default api;","\nimport { useReducer, useEffect} from 'react';\nimport { Flex, Text, Link, Box, Divider } from '@chakra-ui/react';\nimport { ExternalLinkIcon } from '@chakra-ui/icons'\n\nimport SearchUserFilters from './components/SearchUserFilters';\nimport SearchUserList from './components/SearchUserList';\nimport { searchUserReducer, searchUserInitialState } from './state/searchUser.Reducer';\nimport { loadUserData, errorLoadingData } from './state/searchUser.Actions';\nimport api from './api';\n\nfunction SearchUserView() {\n\n const [searchUserState, searchUserDispatch] = useReducer(searchUserReducer, searchUserInitialState);\n\n useEffect(() => {\n api.loadUserData()\n .then(({ status, data }) => {\n if (!status) {\n searchUserDispatch(errorLoadingData(\"Something wrong with the API\"))\n }\n\n const usersWithNormalizedName = data.map(user => ({ ...user, normalizedName: user.name.toLowerCase() }))\n \n searchUserDispatch(loadUserData(usersWithNormalizedName))\n })\n .catch(error => searchUserDispatch(errorLoadingData(error)))\n }, [])\n\n return (\n \n \n \n \n \n What is this?\n \n Project made to demonstrate my skills with React, useReducer, pagination and project organization.\n \n \n Current behavior is to call an external API that returns 100k user objects and to paginate, search and display the results in a list manner. My solution include the usage of a debouncer hook to only filter the in-memory content at 250ms intervals.\n \n \n Source code\n \n \n \n );\n}\n\nexport default SearchUserView;","\nimport SearchUserView from './views/SearchUser/SearchUserView';\nimport { ChakraProvider, Flex } from \"@chakra-ui/react\"\n\nfunction App() {\n return (\n \n \n \n \n \n );\n}\n\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\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":""}