@planningcenter/chat-react-native 3.34.0-rc.2 → 3.34.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/hooks/paginator_meta.d.ts +4 -0
- package/build/hooks/paginator_meta.d.ts.map +1 -0
- package/build/hooks/paginator_meta.js +14 -0
- package/build/hooks/paginator_meta.js.map +1 -0
- package/build/hooks/use_api.d.ts.map +1 -1
- package/build/hooks/use_api.js +2 -9
- package/build/hooks/use_api.js.map +1 -1
- package/build/hooks/use_suspense_api.d.ts.map +1 -1
- package/build/hooks/use_suspense_api.js +2 -9
- package/build/hooks/use_suspense_api.js.map +1 -1
- package/build/types/api_primitives.d.ts +8 -1
- package/build/types/api_primitives.d.ts.map +1 -1
- package/build/types/api_primitives.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/contexts/session_context.tsx +1 -1
- package/src/__tests__/hooks/paginator_meta.test.ts +15 -0
- package/src/__tests__/hooks/useTheme.tsx +1 -1
- package/src/__tests__/hooks/use_async_storage.test.tsx +1 -1
- package/src/__tests__/hooks/use_attachment_uploader.test.tsx +1 -1
- package/src/__tests__/hooks/use_chat_configuration.test.tsx +1 -1
- package/src/hooks/paginator_meta.ts +13 -0
- package/src/hooks/use_api.ts +2 -14
- package/src/hooks/use_suspense_api.ts +2 -14
- package/src/types/api_primitives.ts +9 -1
- /package/src/{__tests__/support → __utils__}/query_client.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator_meta.d.ts","sourceRoot":"","sources":["../../src/hooks/paginator_meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,eAAO,MAAM,wBAAwB,GACnC,OAAM,cAAmB,KACxB,OAAO,CAAC,WAAW,CAAC,GAAG,SAOzB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const getNextPageParamFromMeta = (next = {}) => {
|
|
2
|
+
if (next.idLt)
|
|
3
|
+
return { where: { id_lt: next.idLt } };
|
|
4
|
+
if (next.idGt)
|
|
5
|
+
return { where: { id_gt: next.idGt } };
|
|
6
|
+
if (next.idLte)
|
|
7
|
+
return { where: { id_lte: next.idLte } };
|
|
8
|
+
if (next.idGte)
|
|
9
|
+
return { where: { id_gte: next.idGte } };
|
|
10
|
+
if (next.offset)
|
|
11
|
+
return { offset: Number(next.offset) };
|
|
12
|
+
return undefined;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=paginator_meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator_meta.js","sourceRoot":"","sources":["../../src/hooks/paginator_meta.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAuB,EAAE,EACS,EAAE;IACpC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAA;IACrD,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAA;IACrD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAA;IACxD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAA;IACxD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;IACvD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import { NextPageCursor } from '../types/api_primitives'\nimport { RequestData } from '../utils/client'\n\nexport const getNextPageParamFromMeta = (\n next: NextPageCursor = {}\n): Partial<RequestData> | undefined => {\n if (next.idLt) return { where: { id_lt: next.idLt } }\n if (next.idGt) return { where: { id_gt: next.idGt } }\n if (next.idLte) return { where: { id_lte: next.idLte } }\n if (next.idGte) return { where: { id_gte: next.idGte } }\n if (next.offset) return { offset: Number(next.offset) }\n return undefined\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EAAE,GAAG,EAAgB,MAAM,kBAAkB,CAAA;AAGpD,UAAU,aAAc,SAAQ,UAAU;IACxC,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAezF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,kCAAkC,EAClC,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,GAAG,UAAU,CACjE,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,cAAc,EACtD,MAAM,aAAa,EACnB,OAAO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCxB,CAAA"}
|
package/build/hooks/use_api.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useInfiniteQuery, useQuery, } from '@tanstack/react-query';
|
|
2
|
+
import { getNextPageParamFromMeta } from './paginator_meta';
|
|
2
3
|
import { useApiClient } from './use_api_client';
|
|
3
4
|
import { getRequestQueryKey } from './use_suspense_api';
|
|
4
5
|
export const useApiGet = (args) => {
|
|
@@ -30,15 +31,7 @@ export const useApiPaginator = (args, opts) => {
|
|
|
30
31
|
});
|
|
31
32
|
},
|
|
32
33
|
initialPageParam: {},
|
|
33
|
-
getNextPageParam: lastPage =>
|
|
34
|
-
const next = lastPage.meta?.next || {};
|
|
35
|
-
const { offset, idLt } = next;
|
|
36
|
-
if (idLt)
|
|
37
|
-
return { where: { id_lt: idLt } };
|
|
38
|
-
if (offset)
|
|
39
|
-
return { offset: Number(offset) };
|
|
40
|
-
return undefined;
|
|
41
|
-
},
|
|
34
|
+
getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
|
|
42
35
|
enabled: args.enabled,
|
|
43
36
|
...(opts || {}),
|
|
44
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_api.js","sourceRoot":"","sources":["../../src/hooks/use_api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAChB,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAO,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oBAAoB,CAAA;AAOxE,MAAM,CAAC,MAAM,SAAS,GAAG,CAA8C,IAAmB,EAAE,EAAE;IAE5F,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAA2B;QAC5D,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,QAA2B,CAAA;YAEnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAsB,CAAA;QAC3E,CAAC;QACD,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAA;AAC9B,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"use_api.js","sourceRoot":"","sources":["../../src/hooks/use_api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAChB,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAO,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oBAAoB,CAAA;AAOxE,MAAM,CAAC,MAAM,SAAS,GAAG,CAA8C,IAAmB,EAAE,EAAE;IAE5F,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAA2B;QAC5D,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,QAA2B,CAAA;YAEnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAsB,CAAA;QAC3E,CAAC;QACD,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAA;AAC9B,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAmB,EACnB,IAAuB,EACvB,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,gBAAgB,CAM5B;QACA,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAA;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;YACvC,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,aAAa,EAAE,CAAA;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,CAAA;YAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;YACpD,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;YAE5C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAmB;gBAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;QACD,gBAAgB,EAAE,EAA0B;QAC5C,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QAC3E,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;KAChB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAQ,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAErE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAA","sourcesContent":["import {\n AnyUseSuspenseInfiniteQueryOptions,\n InfiniteData,\n useInfiniteQuery,\n useQuery,\n} from '@tanstack/react-query'\nimport { ApiCollection, ApiResource, FailedResponse, ResourceObject } from '../types'\nimport { GetRequest, RequestData } from '../utils/client'\nimport { getNextPageParamFromMeta } from './paginator_meta'\nimport { App, useApiClient } from './use_api_client'\nimport { getRequestQueryKey, RequestQueryKey } from './use_suspense_api'\n\ninterface ApiGetOptions extends GetRequest {\n app?: App\n enabled?: boolean\n}\n\nexport const useApiGet = <T extends ResourceObject | ResourceObject[]>(args: ApiGetOptions) => {\n type Resource = ApiResource<T>\n const apiClient = useApiClient()\n\n const { data, ...query } = useQuery<Resource, FailedResponse>({\n queryKey: getRequestQueryKey(args),\n queryFn: ({ queryKey }) => {\n const [url, d, headers, app = 'chat'] = queryKey as RequestQueryKey\n\n return apiClient[app].get({ url, data: d, headers }) as Promise<Resource>\n },\n enabled: args.enabled,\n })\n\n return { ...data, ...query }\n}\n\nexport type PaginatorOptions = Omit<\n AnyUseSuspenseInfiniteQueryOptions,\n 'getNextPageParam' | 'initialPageParam' | 'queryFn' | 'queryKey'\n>\n\nexport const useApiPaginator = <T extends ResourceObject>(\n args: ApiGetOptions,\n opts?: PaginatorOptions\n) => {\n const apiClient = useApiClient()\n const query = useInfiniteQuery<\n ApiCollection<T>,\n FailedResponse,\n InfiniteData<ApiCollection<T>>,\n any,\n Partial<RequestData> | undefined\n >({\n queryKey: getRequestQueryKey(args),\n queryFn: ({ pageParam }) => {\n const pageParmWhere = pageParam?.where || {}\n const argsWhere = args.data.where || {}\n const where = { ...argsWhere, ...pageParmWhere }\n const app = args.app || 'chat'\n const offset = pageParam?.offset || args.data.offset\n const data = { ...args.data, where, offset }\n\n return apiClient[app].get<ApiCollection<T>>({\n url: args.url,\n data,\n })\n },\n initialPageParam: {} as Partial<RequestData>,\n getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),\n enabled: args.enabled,\n ...(opts || {}),\n })\n\n const data: T[] = query.data?.pages?.flatMap(page => page.data) || []\n\n return { ...query, data }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_suspense_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGZ,uBAAuB,EACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"use_suspense_api.d.ts","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,YAAY,EAGZ,uBAAuB,EACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAA;AAGzD,OAAO,EAAE,GAAG,EAAgB,MAAM,kBAAkB,CAAA;AAEpD,UAAU,kBAAmB,SAAQ,UAAU;IAC7C,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,IAAI,IAAI,CACrF,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EACvD,UAAU,GAAG,SAAS,CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EACxE,MAAM,kBAAkB,EACxB,UAAU,uBAAuB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBrC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,kCAAkC,EAClC,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,GAAG,UAAU,CACjE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,cAAc,EAC3D,MAAM,kBAAkB,EACxB,OAAO,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChC,CAAA;AAUD,MAAM,MAAM,eAAe,GAAG;IAC5B,kBAAkB,CAAC,KAAK,CAAC;IACzB,kBAAkB,CAAC,MAAM,CAAC;IAC1B,kBAAkB,CAAC,SAAS,CAAC;IAC7B,kBAAkB,CAAC,KAAK,CAAC;IACzB,kBAAkB,CAAC,eAAe,CAAC;CACpC,CAAA;AACD,eAAO,MAAM,kBAAkB,GAAI,MAAM,kBAAkB,KAAG,eAM7D,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useSuspenseInfiniteQuery, useSuspenseQuery, } from '@tanstack/react-query';
|
|
2
2
|
import { Log } from '../utils';
|
|
3
3
|
import { ResponseError } from '../utils/response_error';
|
|
4
|
+
import { getNextPageParamFromMeta } from './paginator_meta';
|
|
4
5
|
import { useApiClient } from './use_api_client';
|
|
5
6
|
export const useSuspenseGet = (args, options) => {
|
|
6
7
|
const apiClient = useApiClient();
|
|
@@ -36,15 +37,7 @@ export const useSuspensePaginator = (args, opts) => {
|
|
|
36
37
|
.catch(throwResponseError);
|
|
37
38
|
},
|
|
38
39
|
initialPageParam: {},
|
|
39
|
-
getNextPageParam: lastPage =>
|
|
40
|
-
const next = lastPage.meta?.next || {};
|
|
41
|
-
const { offset, idLt } = next;
|
|
42
|
-
if (idLt)
|
|
43
|
-
return { where: { id_lt: idLt } };
|
|
44
|
-
if (offset)
|
|
45
|
-
return { offset: Number(offset) };
|
|
46
|
-
return undefined;
|
|
47
|
-
},
|
|
40
|
+
getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
|
|
48
41
|
...(opts || {}),
|
|
49
42
|
});
|
|
50
43
|
const data = query.data?.pages.flatMap(page => page.data) || [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_suspense_api.js","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAO,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAYpD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAwB,EACxB,OAAoC,EACpC,EAAE;IAEF,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,gBAAgB,CAA2B;QACpE,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,QAA2B,CAAA;YACnE,OAAO,SAAS,CAAC,GAAG,CAAC;iBAClB,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;iBAC9B,KAAK,CAAC,kBAAkB,CAAsB,CAAA;QACnD,CAAC;QACD,GAAG,OAAO;KACX,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAA;AAC9B,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"use_suspense_api.js","sourceRoot":"","sources":["../../src/hooks/use_suspense_api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AnyUseSuspenseInfiniteQueryOptions,\n InfiniteData,\n useSuspenseInfiniteQuery,\n useSuspenseQuery,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\nimport { ApiCollection, ApiResource, ResourceObject } from '../types'\nimport { FailedResponse } from '../types/api_primitives'\nimport { Log } from '../utils'\nimport { GetRequest, RequestData } from '../utils/client'\nimport { ResponseError } from '../utils/response_error'\nimport { getNextPageParamFromMeta } from './paginator_meta'\nimport { App, useApiClient } from './use_api_client'\n\ninterface SuspenseGetOptions extends GetRequest {\n app?: App\n reply_root_id?: string | null\n}\n\nexport type SuspenseGetQueryOptions<T extends ResourceObject | ResourceObject[]> = Omit<\n UseSuspenseQueryOptions<ApiResource<T>, FailedResponse>,\n 'queryKey' | 'queryFn'\n>\n\nexport const useSuspenseGet = <T extends ResourceObject | ResourceObject[]>(\n args: SuspenseGetOptions,\n options?: SuspenseGetQueryOptions<T>\n) => {\n type Resource = ApiResource<T>\n const apiClient = useApiClient()\n\n const { data, ...query } = useSuspenseQuery<Resource, FailedResponse>({\n queryKey: getRequestQueryKey(args),\n queryFn: ({ queryKey }) => {\n const [url, d, headers, app = 'chat'] = queryKey as RequestQueryKey\n return apiClient[app]\n .get({ url, data: d, headers })\n .catch(throwResponseError) as Promise<Resource>\n },\n ...options,\n })\n\n return { ...data, ...query }\n}\n\nexport type SuspensePaginatorOptions = Omit<\n AnyUseSuspenseInfiniteQueryOptions,\n 'getNextPageParam' | 'initialPageParam' | 'queryFn' | 'queryKey'\n>\n\nexport const useSuspensePaginator = <T extends ResourceObject>(\n args: SuspenseGetOptions,\n opts?: SuspensePaginatorOptions\n) => {\n const apiClient = useApiClient()\n const query = useSuspenseInfiniteQuery<\n ApiCollection<T>,\n Response,\n InfiniteData<ApiCollection<T>>,\n any,\n Partial<RequestData> | undefined\n >({\n queryKey: getRequestQueryKey(args),\n queryFn: ({ pageParam }) => {\n Log.info('useSuspenseGet', { pageParam })\n\n const pageParmWhere = pageParam?.where || {}\n const argsWhere = args.data.where || {}\n const where = { ...argsWhere, ...pageParmWhere }\n const app = args.app || 'chat'\n const offset = pageParam?.offset || args.data.offset\n const data = { ...args.data, where, offset }\n\n return apiClient[app]\n .get<ApiCollection<T>>({\n url: args.url,\n data,\n })\n .catch(throwResponseError)\n },\n initialPageParam: {} as Partial<RequestData>,\n getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),\n ...(opts || {}),\n })\n\n const data: T[] = query.data?.pages.flatMap(page => page.data) || []\n const totalCount = query.data?.pages[0]?.meta?.totalCount || data.length\n\n return { ...query, data, totalCount }\n}\n\nconst throwResponseError = (error: unknown) => {\n if (error instanceof Response) {\n throw new ResponseError(error as FailedResponse)\n }\n\n return Promise.reject(error)\n}\n\nexport type RequestQueryKey = [\n SuspenseGetOptions['url'],\n SuspenseGetOptions['data'],\n SuspenseGetOptions['headers'],\n SuspenseGetOptions['app'],\n SuspenseGetOptions['reply_root_id'],\n]\nexport const getRequestQueryKey = (args: SuspenseGetOptions): RequestQueryKey => [\n args.url,\n args.data,\n args.headers,\n args.app || 'chat',\n args.reply_root_id,\n]\n"]}
|
|
@@ -27,10 +27,17 @@ export type ApiCollection<Type = ResourceObject> = {
|
|
|
27
27
|
export interface FailedResponse extends Response {
|
|
28
28
|
errors: ErrorObject[];
|
|
29
29
|
}
|
|
30
|
+
export interface NextPageCursor {
|
|
31
|
+
offset?: string;
|
|
32
|
+
idLt?: string;
|
|
33
|
+
idLte?: string;
|
|
34
|
+
idGt?: string;
|
|
35
|
+
idGte?: string;
|
|
36
|
+
}
|
|
30
37
|
export interface CollectionMeta {
|
|
31
38
|
count: number;
|
|
32
39
|
totalCount: number;
|
|
33
|
-
next?:
|
|
40
|
+
next?: NextPageCursor;
|
|
34
41
|
parent?: ResourceObject;
|
|
35
42
|
[attributeName: string]: unknown;
|
|
36
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_primitives.d.ts","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,cAAc,IAAI;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI;IACjD,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,
|
|
1
|
+
{"version":3,"file":"api_primitives.d.ts","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,cAAc,IAAI;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI;IACjD,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_primitives.js","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"","sourcesContent":["export interface ResourceObject {\n id: string | number\n type: string\n}\n\nexport interface ErrorObject {\n source?: { parameter: string }\n detail: string\n meta?: { associated_resources: any[]; resource: string }\n title: string\n status: string\n}\n\nexport type ApiResource<Type = ResourceObject> = {\n data: Type\n links: Record<string, string>\n meta: Record<string, unknown>\n}\n\nexport type ApiCollection<Type = ResourceObject> = {\n data: Type[]\n links: Record<string, string>\n meta: CollectionMeta\n}\n\nexport interface FailedResponse extends Response {\n errors: ErrorObject[]\n}\n\nexport interface CollectionMeta {\n count: number\n totalCount: number\n next?:
|
|
1
|
+
{"version":3,"file":"api_primitives.js","sourceRoot":"","sources":["../../src/types/api_primitives.ts"],"names":[],"mappings":"","sourcesContent":["export interface ResourceObject {\n id: string | number\n type: string\n}\n\nexport interface ErrorObject {\n source?: { parameter: string }\n detail: string\n meta?: { associated_resources: any[]; resource: string }\n title: string\n status: string\n}\n\nexport type ApiResource<Type = ResourceObject> = {\n data: Type\n links: Record<string, string>\n meta: Record<string, unknown>\n}\n\nexport type ApiCollection<Type = ResourceObject> = {\n data: Type[]\n links: Record<string, string>\n meta: CollectionMeta\n}\n\nexport interface FailedResponse extends Response {\n errors: ErrorObject[]\n}\n\nexport interface NextPageCursor {\n offset?: string\n idLt?: string\n idLte?: string\n idGt?: string\n idGte?: string\n}\n\nexport interface CollectionMeta {\n count: number\n totalCount: number\n next?: NextPageCursor\n parent?: ResourceObject\n [attributeName: string]: unknown\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "3.34.0-rc.
|
|
3
|
+
"version": "3.34.0-rc.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"react-native-url-polyfill": "^2.0.0",
|
|
66
66
|
"typescript": "~5.9.2"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "1dc683fa83955c4b35ef5b98f060ba75a85b464e"
|
|
69
69
|
}
|
|
@@ -2,6 +2,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
|
2
2
|
import { QueryClientProvider } from '@tanstack/react-query'
|
|
3
3
|
import { renderHook, act } from '@testing-library/react-hooks'
|
|
4
4
|
import React, { useContext, Suspense } from 'react'
|
|
5
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
5
6
|
import {
|
|
6
7
|
SessionContext,
|
|
7
8
|
SessionContextProvider,
|
|
@@ -11,7 +12,6 @@ import { OAuthToken, FailedResponse } from '../../types'
|
|
|
11
12
|
import { StorageAdapter } from '../../utils/native_adapters/storage_adapter'
|
|
12
13
|
import { Session } from '../../utils/session'
|
|
13
14
|
import { SessionManager } from '../../utils/session_manager'
|
|
14
|
-
import { buildTestQueryClient } from '../support/query_client'
|
|
15
15
|
|
|
16
16
|
jest.mock('@react-native-async-storage/async-storage')
|
|
17
17
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getNextPageParamFromMeta } from '../../hooks/paginator_meta'
|
|
2
|
+
|
|
3
|
+
describe('getNextPageParamFromMeta', () => {
|
|
4
|
+
it.each([
|
|
5
|
+
[undefined, undefined],
|
|
6
|
+
[{}, undefined],
|
|
7
|
+
[{ idLt: '01ABC' }, { where: { id_lt: '01ABC' } }],
|
|
8
|
+
[{ idLte: '01ABC' }, { where: { id_lte: '01ABC' } }],
|
|
9
|
+
[{ idGt: '01ABC' }, { where: { id_gt: '01ABC' } }],
|
|
10
|
+
[{ idGte: '01ABC' }, { where: { id_gte: '01ABC' } }],
|
|
11
|
+
[{ offset: '40' }, { offset: 40 }],
|
|
12
|
+
])('maps %p to %p', (input, expected) => {
|
|
13
|
+
expect(getNextPageParamFromMeta(input)).toEqual(expected)
|
|
14
|
+
})
|
|
15
|
+
})
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
2
2
|
import { renderHook } from '@testing-library/react-native'
|
|
3
3
|
import React from 'react'
|
|
4
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
4
5
|
import { ChatProvider, CreateChatThemeProps } from '../../contexts/chat_context'
|
|
5
6
|
import { useTheme } from '../../hooks'
|
|
6
|
-
import { buildTestQueryClient } from '../support/query_client'
|
|
7
7
|
|
|
8
8
|
let themeProps: CreateChatThemeProps = {
|
|
9
9
|
theme: {
|
|
@@ -2,8 +2,8 @@ import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
|
2
2
|
import { QueryClientProvider } from '@tanstack/react-query'
|
|
3
3
|
import { renderHook, act } from '@testing-library/react-hooks'
|
|
4
4
|
import React, { Suspense } from 'react'
|
|
5
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
5
6
|
import { useAsyncStorage } from '../../hooks/use_async_storage'
|
|
6
|
-
import { buildTestQueryClient } from '../support/query_client'
|
|
7
7
|
|
|
8
8
|
jest.mock('@react-native-async-storage/async-storage')
|
|
9
9
|
jest.useFakeTimers()
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { QueryClientProvider } from '@tanstack/react-query'
|
|
2
2
|
import { renderHook, act } from '@testing-library/react-hooks'
|
|
3
3
|
import React from 'react'
|
|
4
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
4
5
|
import { useApiClient } from '../../hooks/use_api_client'
|
|
5
6
|
import { useAttachmentUploader } from '../../hooks/use_attachment_uploader'
|
|
6
7
|
import { useChatConfiguration } from '../../hooks/use_chat_configuration'
|
|
7
8
|
import { useUploadClient } from '../../hooks/use_upload_client'
|
|
8
9
|
import { FileAttachment } from '../../types/resources/denormalized_attachment_resource_for_create'
|
|
9
|
-
import { buildTestQueryClient } from '../support/query_client'
|
|
10
10
|
|
|
11
11
|
jest.mock('../../hooks/use_api_client')
|
|
12
12
|
jest.mock('../../hooks/use_upload_client')
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { QueryClientProvider } from '@tanstack/react-query'
|
|
2
2
|
import { renderHook, act } from '@testing-library/react-hooks'
|
|
3
3
|
import React, { Suspense } from 'react'
|
|
4
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
4
5
|
import {
|
|
5
6
|
FALLBACK_ALLOWED_FILE_EXTENSIONS,
|
|
6
7
|
FALLBACK_MAX_ATTACHMENTS_PER_MESSAGE,
|
|
@@ -8,7 +9,6 @@ import {
|
|
|
8
9
|
} from '../../hooks/attachments/fallback_chat_configuration'
|
|
9
10
|
import * as useApiClientModule from '../../hooks/use_api_client'
|
|
10
11
|
import { useChatConfiguration } from '../../hooks/use_chat_configuration'
|
|
11
|
-
import { buildTestQueryClient } from '../support/query_client'
|
|
12
12
|
|
|
13
13
|
const createWrapper = () => {
|
|
14
14
|
const queryClient = buildTestQueryClient()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NextPageCursor } from '../types/api_primitives'
|
|
2
|
+
import { RequestData } from '../utils/client'
|
|
3
|
+
|
|
4
|
+
export const getNextPageParamFromMeta = (
|
|
5
|
+
next: NextPageCursor = {}
|
|
6
|
+
): Partial<RequestData> | undefined => {
|
|
7
|
+
if (next.idLt) return { where: { id_lt: next.idLt } }
|
|
8
|
+
if (next.idGt) return { where: { id_gt: next.idGt } }
|
|
9
|
+
if (next.idLte) return { where: { id_lte: next.idLte } }
|
|
10
|
+
if (next.idGte) return { where: { id_gte: next.idGte } }
|
|
11
|
+
if (next.offset) return { offset: Number(next.offset) }
|
|
12
|
+
return undefined
|
|
13
|
+
}
|
package/src/hooks/use_api.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from '@tanstack/react-query'
|
|
7
7
|
import { ApiCollection, ApiResource, FailedResponse, ResourceObject } from '../types'
|
|
8
8
|
import { GetRequest, RequestData } from '../utils/client'
|
|
9
|
+
import { getNextPageParamFromMeta } from './paginator_meta'
|
|
9
10
|
import { App, useApiClient } from './use_api_client'
|
|
10
11
|
import { getRequestQueryKey, RequestQueryKey } from './use_suspense_api'
|
|
11
12
|
|
|
@@ -31,11 +32,6 @@ export const useApiGet = <T extends ResourceObject | ResourceObject[]>(args: Api
|
|
|
31
32
|
return { ...data, ...query }
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
type NextMeta = Partial<{
|
|
35
|
-
offset: string
|
|
36
|
-
idLt: string
|
|
37
|
-
}>
|
|
38
|
-
|
|
39
35
|
export type PaginatorOptions = Omit<
|
|
40
36
|
AnyUseSuspenseInfiniteQueryOptions,
|
|
41
37
|
'getNextPageParam' | 'initialPageParam' | 'queryFn' | 'queryKey'
|
|
@@ -68,15 +64,7 @@ export const useApiPaginator = <T extends ResourceObject>(
|
|
|
68
64
|
})
|
|
69
65
|
},
|
|
70
66
|
initialPageParam: {} as Partial<RequestData>,
|
|
71
|
-
getNextPageParam: lastPage =>
|
|
72
|
-
const next: NextMeta = lastPage.meta?.next || {}
|
|
73
|
-
const { offset, idLt } = next
|
|
74
|
-
|
|
75
|
-
if (idLt) return { where: { id_lt: idLt } }
|
|
76
|
-
if (offset) return { offset: Number(offset) }
|
|
77
|
-
|
|
78
|
-
return undefined
|
|
79
|
-
},
|
|
67
|
+
getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
|
|
80
68
|
enabled: args.enabled,
|
|
81
69
|
...(opts || {}),
|
|
82
70
|
})
|
|
@@ -10,6 +10,7 @@ import { FailedResponse } from '../types/api_primitives'
|
|
|
10
10
|
import { Log } from '../utils'
|
|
11
11
|
import { GetRequest, RequestData } from '../utils/client'
|
|
12
12
|
import { ResponseError } from '../utils/response_error'
|
|
13
|
+
import { getNextPageParamFromMeta } from './paginator_meta'
|
|
13
14
|
import { App, useApiClient } from './use_api_client'
|
|
14
15
|
|
|
15
16
|
interface SuspenseGetOptions extends GetRequest {
|
|
@@ -43,11 +44,6 @@ export const useSuspenseGet = <T extends ResourceObject | ResourceObject[]>(
|
|
|
43
44
|
return { ...data, ...query }
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
type NextMeta = Partial<{
|
|
47
|
-
offset: string
|
|
48
|
-
idLt: string
|
|
49
|
-
}>
|
|
50
|
-
|
|
51
47
|
export type SuspensePaginatorOptions = Omit<
|
|
52
48
|
AnyUseSuspenseInfiniteQueryOptions,
|
|
53
49
|
'getNextPageParam' | 'initialPageParam' | 'queryFn' | 'queryKey'
|
|
@@ -84,15 +80,7 @@ export const useSuspensePaginator = <T extends ResourceObject>(
|
|
|
84
80
|
.catch(throwResponseError)
|
|
85
81
|
},
|
|
86
82
|
initialPageParam: {} as Partial<RequestData>,
|
|
87
|
-
getNextPageParam: lastPage =>
|
|
88
|
-
const next: NextMeta = lastPage.meta?.next || {}
|
|
89
|
-
const { offset, idLt } = next
|
|
90
|
-
|
|
91
|
-
if (idLt) return { where: { id_lt: idLt } }
|
|
92
|
-
if (offset) return { offset: Number(offset) }
|
|
93
|
-
|
|
94
|
-
return undefined
|
|
95
|
-
},
|
|
83
|
+
getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
|
|
96
84
|
...(opts || {}),
|
|
97
85
|
})
|
|
98
86
|
|
|
@@ -27,10 +27,18 @@ export interface FailedResponse extends Response {
|
|
|
27
27
|
errors: ErrorObject[]
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
export interface NextPageCursor {
|
|
31
|
+
offset?: string
|
|
32
|
+
idLt?: string
|
|
33
|
+
idLte?: string
|
|
34
|
+
idGt?: string
|
|
35
|
+
idGte?: string
|
|
36
|
+
}
|
|
37
|
+
|
|
30
38
|
export interface CollectionMeta {
|
|
31
39
|
count: number
|
|
32
40
|
totalCount: number
|
|
33
|
-
next?:
|
|
41
|
+
next?: NextPageCursor
|
|
34
42
|
parent?: ResourceObject
|
|
35
43
|
[attributeName: string]: unknown
|
|
36
44
|
}
|
|
File without changes
|