diff --git a/index.html b/index.html index 508ebb3d..0614f845 100644 --- a/index.html +++ b/index.html @@ -101,19 +101,13 @@ * ... * ] */ - function getPersonList() { - return new Promise((resolve, reject) => { - fetch('https://willowtreeapps.com/api/v1.0/profiles') - .then(response => { - if (response.status !== 200) { - reject(new Error("Error!")); - } - - response.json().then(imageList => { - resolve(imageList); - }); - }); - }); + const getPersonList = async () => { + try { + const res = await fetch('https://willowtreeapps.com/api/v1.0/profiles'); + return await res.json(); + } catch(err) { + console.log(err); + } } @@ -124,36 +118,25 @@ ***************************************************/ - function getLastName(person) { - return person.lastName; - } + const getLastName = person => person.lastName; - const getFirstName = (person) => { - return person.firstName; - }; + const getFirstName = person => person.firstName; // headshot URLs are scheme relative // // prepend http: to prevent invalid schemes like file:// or uri:// - const getImageUrl = (person) => { - return `http:${person.headshot.url}`; - }; + const getImageUrl = person => `http:${person.headshot.url}`; /** * Fisher-Yates shuffle */ - function shuffleList(list) { + const shuffleList = (list) => { // Make a copy & don't mutate the passed in list - let result = list.slice(1); - - let tmp, j, i = list.length - 1 + let result = list.slice(); - for (; i > 0; i -= 1) { - j = Math.floor(Math.random() * (i + 1)); - tmp = list[i]; - list[i] = list[j]; - list[j] = tmp; + for (let i = result.length - 1; i > 0; i--) { + let j = Math.floor(Math.random() * (i + 1)); + [result[i], result[j]] = [result[j], result[i]]; } - return result; } @@ -162,11 +145,11 @@ * Remove any people that do not have the name we are * searching for. */ - function filterByName(searchForName, personList) { - return personList.filter((person) => { - return person.firstName === searchForName || person.lastName === searchForName; - }); - } + const filterByName = (searchForName, personList) => + personList.filter(person => + person.firstName.toLowerCase().includes(searchForName.toLowerCase()) || + person.lastName.toLowerCase().includes(searchForName.toLowerCase()) + ); /** @@ -185,30 +168,19 @@ * > [{ name: 'Jon' }, { name: 'Kevin' }, { name: 'Sam' }] * */ - function sortObjListByProp(prop) { - return function(objList) { - // Make a copy & don't mutate the passed in list - let result = objList.slice(1); - - result.sort((a, b) => { - if (a[prop] < b[prop]) { - return -1; - } + const sortObjListByProp = prop => + // Make a copy & don't mutate the passed in list + objList => + objList + .slice() + .sort((a, b) => a[prop] < b[prop] ? -1 : 1); - if (a[prop] > b[prop]) { - return 1; - } - - return 1; - }); - - return result; - }; - } + const shouldReverse = (shuffled, visible) => + shuffled[0] === visible[0] ? shuffled.reverse() : shuffled; const sortByFirstName = sortObjListByProp('firstName'); - const sortByLastName = (personList) => sortByFirstName(personList).reverse(); + const sortByLastName = sortObjListByProp('lastName'); /*================================================== @@ -251,12 +223,12 @@ }; }, - componentDidMount() { - getPersonList().then((personList) => - this.setState({ - personList, - visiblePersonList: personList - })); + async componentDidMount() { + const personList = await getPersonList(); + this.setState({ + personList, + visiblePersonList: personList + }); }, _shuffleList() { @@ -267,13 +239,19 @@ _sortByFirst() { this.setState({ - visiblePersonList: sortByFirstName(this.state.personList) + visiblePersonList: shouldReverse( + sortByFirstName(this.state.personList), + this.state.visiblePersonList + ) }); }, _sortByLast() { this.setState({ - visiblePersonList: sortByLastName(this.state.personList) + visiblePersonList: shouldReverse( + sortByLastName(this.state.personList), + this.state.visiblePersonList + ) }); },