Skip to content

Commit d3c4131

Browse files
authored
Merge pull request #20 from tilde-lab/fix_page+limit/offset
fix_page+limit/offset
2 parents fe91e5d + dd51b39 commit d3c4131

File tree

3 files changed

+21
-20
lines changed

3 files changed

+21
-20
lines changed

README.md

+11-9
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ const providersMap = await optimadeClient.getProviders(); // { [id: string]: Pro
5757

5858
const providerIds = Object.keys(providersMap); // string[]
5959

60-
const results = await optimadeClient.getStructuresAll(
61-
providerIds,
62-
YOUR_OPTIMADE_QUERY,
63-
); // [StructuresResponse[], Provider][]
60+
const results = await optimadeClient.getStructuresAll({
61+
providers: Provider[],
62+
filter: YOUR_OPTIMADE_QUERY,
63+
}); // [StructuresResponse[], Provider][]
6464
```
6565

6666
Importing depends on your environment. See also the `examples` folder. The
@@ -79,12 +79,14 @@ const optimadeClient = new Optimade({
7979
optimadeClient.providers = prefetched.providers;
8080
optimadeClient.apis = prefetched.apis;
8181

82-
const results = await optimadeClient.getStructuresAll(
83-
providerIds,
84-
YOUR_OPTIMADE_QUERY,
82+
const results = await optimadeClient.getStructuresAll({
83+
providers: Provider[],
84+
filter: YOUR_OPTIMADE_QUERY,
8585
page: number,
86-
limit: number
87-
); // [StructuresResponse[], Provider][]
86+
limit: number,
87+
offset: number,
88+
batch: true
89+
}); // [StructuresResponse[], Provider][]
8890
```
8991

9092
See also the `demo` folder.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "optimade",
3-
"version": "2.0.5",
3+
"version": "2.1.0",
44
"description": "Aggregating Optimade client for the online materials databases",
55
"main": "dist/index.js",
66
"module": "dist/index.mjs",
@@ -40,4 +40,4 @@
4040
"type": "git",
4141
"url": "git+https://github.com/tilde-lab/optimade-client"
4242
}
43-
}
43+
}

src/index.ts

+8-9
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,19 @@ export class Optimade {
114114
return Optimade.apiVersion(apis);
115115
}
116116

117-
async getStructures(providerId: string, filter = '', page = 1, limit: number): Promise<Types.StructuresResponse[] | Types.ResponseError> {
117+
async getStructures({ providerId, filter, page, limit, offset }: { providerId: string; filter: string; page: number; limit: number; offset: number; }): Promise<Types.StructuresResponse[] | Types.ResponseError> {
118118

119119
if (!this.apis[providerId]) { return null; }
120120

121121
const apis = this.apis[providerId].filter(api => api.attributes.available_endpoints.includes('structures'));
122122
const provider = this.providers[providerId];
123123

124124
const structures: Types.StructuresResponse[] = await allSettled(apis.map(async (api: Types.Api) => {
125-
if (page <= 0) { page = 1; }
126125
const pageLimit = limit ? `&page_limit=${limit}` : '';
127-
const pageNumber = page ? `&page_number=${page - 1}` : '';
128-
const pageOffset = limit && page ? `&page_offset=${limit * (page - 1)}` : '';
126+
const pageNumber = page ? `&page_number=${page}` : '';
127+
const pageOffset = offset ? `&page_offset=${offset}` : '';
129128
const params = filter ? `${pageLimit + pageNumber + pageOffset}` : `?${pageLimit}`;
130-
const url: string = this.wrapUrl(Optimade.apiVersionUrl(api), filter ? `/structures?filter=${filter + params}` : `/structures${params}`);
129+
const url = this.wrapUrl(Optimade.apiVersionUrl(api), filter ? `/structures?filter=${filter + params}` : `/structures${params}`);
131130

132131
try {
133132
return await Optimade.getJSON(url, {}, { Origin: 'https://cors.optimade.science', 'X-Requested-With': 'XMLHttpRequest' });
@@ -149,13 +148,13 @@ export class Optimade {
149148
}, []);
150149
}
151150

152-
getStructuresAll(providerIds: string[], filter = '', page = 1, limit: number, batch = true): Promise<Promise<Types.StructuresResult>[]> | Promise<Types.StructuresResult>[] {
151+
getStructuresAll({ providers, filter, page, limit, offset, batch = true }: { providers: string[]; filter: string; page: number; limit: number; offset: number; batch?: boolean; }): Promise<Promise<Types.StructuresResult>[]> | Promise<Types.StructuresResult>[] {
153152

154-
const results = providerIds.reduce((structures: Promise<any>[], providerId: string) => {
153+
const results = providers.reduce((structures: Promise<any>[], providerId: string) => {
155154
const provider = this.providers[providerId];
156155
if (provider) {
157156
structures.push(allSettled([
158-
this.getStructures(providerId, filter, page, limit),
157+
this.getStructures({ providerId, filter, page, limit, offset }),
159158
Promise.resolve(provider)
160159
]));
161160
}
@@ -173,7 +172,7 @@ export class Optimade {
173172
return !this.isDuplicatedReq(url) ? Optimade.getJSON(url) : null;
174173
}
175174

176-
private wrapUrl(url, tail = '') {
175+
private wrapUrl(url: string, tail = ''): string {
177176
url = this.corsProxyUrl ? `${this.corsProxyUrl}/${url.replace('://', '/').replace('//', '/')}` : url;
178177
return tail ? url.replace(/\/$/, '') + tail : url;
179178
}

0 commit comments

Comments
 (0)