usePagination in Vue
Vue interview exercise on Composables, difficulty 2 of 3. Solve it in the editor beside a worked example, or cold in Interview mode with the example hidden; the tests run the moment you do.
Write usePagination<T>(items: Ref<T[]>, perPage: number) returning { page, pageCount, pageItems, hasPrev, hasNext, next, prev }: page starts at 1, pageCount is at least 1, pageItems is the current page's slice, next/prev move within 1…pageCount. When the items shrink so the current page no longer exists, page moves to the last page (watch pageCount).
Each exercise pairs a worked example with a twin problem to solve in a real editor; the tests run the moment you do. Interview mode hides the example: solve it from memory, without the hint or the solution, and it counts as solved cold. Progress is saved in your browser, and in your account if you sign in.