diff --git a/README.md b/README.md index ab7b0be..98c4e4f 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Instead, it re-exports from a core set of Seam modules: - [Action Attempts](#action-attempts) - [Pagination](#pagination) - [Manually fetch pages with the nextPageCursor](#manually-fetch-pages-with-the-nextpagecursor) + - [Resume pagination](#resume-pagination) - [Iterate over all pages](#iterate-over-all-pages) - [Iterate over all resources](#iterate-over-all-resources) - [Return all resources across all pages as an array](#return-all-resources-across-all-pages-as-an-array) @@ -339,6 +340,32 @@ if (hasNextPage) { } ``` +#### Resume pagination + +Get the first page on initial load: + +```ts +const params = { limit: 20 } + +const pages = seam.createPaginator(seam.devices.list(params)) + +const [devices, pagination] = await pages.firstPage() + +localStorage.setItem('/seam/devices/list', JSON.stringify([params, pagination])) +``` + +Get the next page at a later time: + +```ts +const [params = {}, { hasNextPage = false, nextPageCursor = null } = {}] = + JSON.parse(localStorage.getItem('/seam/devices/list') ?? '[]') + +if (hasNextPage) { + const pages = seam.createPaginator(seam.devices.list(params)) + const [moreDevices] = await pages.nextPage(nextPageCursor) +} +``` + #### Iterate over all pages ```ts @@ -376,7 +403,7 @@ const pages = seam.createPaginator( }), ) -const devices = await pages.toArray() +const devices = await pages.flattenToArray() ``` ### Interacting with Multiple Workspaces diff --git a/package-lock.json b/package-lock.json index 8fa2b58..9fb3c59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.49.0", "license": "MIT", "dependencies": { - "@seamapi/http": "1.25.0", + "@seamapi/http": "1.25.1", "@seamapi/types": "1.356.0", "@seamapi/webhook": "1.1.1", "zod": "^3.21.4" @@ -1115,12 +1115,12 @@ "peer": true }, "node_modules/@seamapi/http": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@seamapi/http/-/http-1.25.0.tgz", - "integrity": "sha512-m7RHTy2vqNKUQEebhtYwdg7qs/Q5RSbSNxY4yuA2LtTeK/ezBKTibPlDTApB0WVvHoRySSEyPzw3dFZmxWBf9Q==", + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@seamapi/http/-/http-1.25.1.tgz", + "integrity": "sha512-3OI1sp9Uq8bsaD03hwEamvp69OR9OmRrYaUVQs1+qBjtCxGdVLo8NsncWrvF6Z3AwDGNNkppmxnOwjsT0wiauA==", "license": "MIT", "dependencies": { - "@seamapi/url-search-params-serializer": "^1.1.0", + "@seamapi/url-search-params-serializer": "^1.2.0", "axios": "^1.5.0", "axios-better-stacktrace": "^2.1.7", "axios-retry": "^4.4.2" @@ -1152,9 +1152,9 @@ } }, "node_modules/@seamapi/url-search-params-serializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@seamapi/url-search-params-serializer/-/url-search-params-serializer-1.1.2.tgz", - "integrity": "sha512-c54kIs+0gA9pnKWDEQtQcuCN9fUCRpAfIyKSARbekqHB0i3TJ+CkKoZoe04R+L8HYhWeEtWAJ+BLNba9igjwHA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@seamapi/url-search-params-serializer/-/url-search-params-serializer-1.2.0.tgz", + "integrity": "sha512-u7yb+hK+kv05FHg8MrOI5v2O0tty25vB/iTvyKBI28utbhZyNSsHtHIVlOMnzrlD9X8mCuwkNxc1hePJSw6Dwg==", "license": "MIT", "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index 6801520..e1951c5 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "npm": ">= 9.0.0" }, "dependencies": { - "@seamapi/http": "1.25.0", + "@seamapi/http": "1.25.1", "@seamapi/types": "1.356.0", "@seamapi/webhook": "1.1.1", "zod": "^3.21.4"