Branch

paginatedPatches.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
import { type Repository } from './dataTypes.ts'
import flatPatchesFunc from './flatPatches.js'

export type PatchPage = {
  repoName: string,
  branchName: string,
  commits: Array<ReturnType<Repository['commits']['get']>>,
  pageNumber: number,
}
let paginatedPatches: Array<PatchPage> | null = null

export default async (repos: Array<Repository>) => {
  if (paginatedPatches !== null) { return paginatedPatches }

  const flatPatches = await flatPatchesFunc(repos)

  paginatedPatches = []
  const patchesPerPage = 30

  flatPatches.forEach((patch) => {
    const index = paginatedPatches.findIndex((page) => {
      return (
        page.repoName === patch.repoName
        && page.branchName == patch.branchName
        && page.commits.length <= patchesPerPage
      )
    })

    if (index === -1) {
      const pageNumber = paginatedPatches.filter(page => (page.repoName === patch.repoName && page.branchName === patch.branchName)).length + 1
      paginatedPatches.push({
        repoName: patch.repoName,
        branchName: patch.branchName,
        commits: [patch.commit],
        // current page number is one more than "how many items in paginatedPatches already
        // have repoName as their repo name.
        pageNumber,
      })
    }
    else {
      paginatedPatches[index].commits.push(patch.commit)
    }
  })

  return paginatedPatches
}