diff --git a/components/IssueComparison.tsx b/components/IssueComparison.tsx index 9da55e9..8c93c29 100644 --- a/components/IssueComparison.tsx +++ b/components/IssueComparison.tsx @@ -27,7 +27,7 @@ const IssueComparison = ({ ); useEffect(() => { - loadIssues(); + loadIssues(5); }, [loadIssues]); const [order, setOrder] = useState>([]); @@ -77,7 +77,7 @@ const IssueComparison = ({ addComparison([order[i], order[j]], 1); } } - loadIssues(); + loadIssues(5); setOrder([]); }} disabled={order.length !== issueList.length} diff --git a/utils/useIssues.ts b/utils/useIssues.ts index b9e3e66..dfaacf4 100644 --- a/utils/useIssues.ts +++ b/utils/useIssues.ts @@ -16,47 +16,50 @@ const useIssues = ( const [issueList, setIssueList] = useState>([]); - const loadIssues = useCallback(async () => { - setIssueList([]); + const loadIssues = useCallback( + async (numberOfIssues: number = 4) => { + setIssueList([]); - const stats = getStats(issues, localStorageKey); + const stats = getStats(issues, localStorageKey); - if (issues.length > 1) { - const ids: Array = []; + if (issues.length > 1) { + const ids: Array = []; - ids.push( - weightedRandomPick( - [...issues.map(({ id }) => id)].sort( - (a, b) => stats[a].comparisons - stats[b].comparisons - ), - 8 - ) - ); - - for (let i = 0; i < 3; i++) { ids.push( weightedRandomPick( - [...issues.map(({ id }) => id)] - .filter((x) => !ids.includes(x)) - .sort( - (a, b) => - Math.abs(stats[ids[0]].rating - stats[a].rating) - - Math.abs(stats[ids[0]].rating - stats[b].rating) - ), - 2 + [...issues.map(({ id }) => id)].sort( + (a, b) => stats[a].comparisons - stats[b].comparisons + ), + 8 ) ); - } - const newIssues: Array = await Promise.all( - ids.map((id) => getIssue(credentials, id)) - ); + for (let i = 0; i < numberOfIssues - 1; i++) { + ids.push( + weightedRandomPick( + [...issues.map(({ id }) => id)] + .filter((x) => !ids.includes(x)) + .sort( + (a, b) => + Math.abs(stats[ids[0]].rating - stats[a].rating) - + Math.abs(stats[ids[0]].rating - stats[b].rating) + ), + 2 + ) + ); + } - if (alive.current) { - setIssueList(newIssues); + const newIssues: Array = await Promise.all( + ids.map((id) => getIssue(credentials, id)) + ); + + if (alive.current) { + setIssueList(newIssues); + } } - } - }, [credentials, issues, localStorageKey]); + }, + [credentials, issues, localStorageKey] + ); const addComparison = useCallback( (entities: [string, string], result: number) => {