@planningcenter/chat-react-native 3.38.0 → 3.38.1-rc.0

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.
@@ -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;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"}
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;AAG9B,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBzF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCxB,CAAA"}
@@ -1,21 +1,27 @@
1
1
  import { useInfiniteQuery, useQuery, } from '@tanstack/react-query';
2
+ import { useContext } from 'react';
3
+ import { ChatContext } from '../contexts/chat_context';
2
4
  import { getNextPageParamFromMeta } from './paginator_meta';
3
5
  import { useApiClient } from './use_api_client';
4
6
  import { getRequestQueryKey } from './use_suspense_api';
5
7
  export const useApiGet = (args) => {
8
+ const { session } = useContext(ChatContext);
6
9
  const apiClient = useApiClient();
10
+ const enabled = !!session.token?.access_token && (args.enabled ?? true);
7
11
  const { data, ...query } = useQuery({
8
12
  queryKey: getRequestQueryKey(args),
9
13
  queryFn: ({ queryKey }) => {
10
14
  const [url, d, headers, app = 'chat'] = queryKey;
11
15
  return apiClient[app].get({ url, data: d, headers });
12
16
  },
13
- enabled: args.enabled,
17
+ enabled,
14
18
  });
15
19
  return { ...data, ...query };
16
20
  };
17
21
  export const useApiPaginator = (args, opts) => {
22
+ const { session } = useContext(ChatContext);
18
23
  const apiClient = useApiClient();
24
+ const enabled = !!session.token?.access_token && (args.enabled ?? true);
19
25
  const query = useInfiniteQuery({
20
26
  queryKey: getRequestQueryKey(args),
21
27
  queryFn: ({ pageParam }) => {
@@ -32,7 +38,7 @@ export const useApiPaginator = (args, opts) => {
32
38
  },
33
39
  initialPageParam: {},
34
40
  getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
35
- enabled: args.enabled,
41
+ enabled,
36
42
  ...(opts || {}),
37
43
  });
38
44
  const data = query.data?.pages?.flatMap(page => page.data) || [];
@@ -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,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
+ {"version":3,"file":"use_api.js","sourceRoot":"","sources":["../../src/hooks/use_api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AnyUseSuspenseInfiniteQueryOptions,\n InfiniteData,\n useInfiniteQuery,\n useQuery,\n} from '@tanstack/react-query'\nimport { useContext } from 'react'\nimport { ChatContext } from '../contexts/chat_context'\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 { session } = useContext(ChatContext)\n const apiClient = useApiClient()\n\n const enabled = !!session.token?.access_token && (args.enabled ?? true)\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,\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 { session } = useContext(ChatContext)\n const apiClient = useApiClient()\n const enabled = !!session.token?.access_token && (args.enabled ?? true)\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,\n ...(opts || {}),\n })\n\n const data: T[] = query.data?.pages?.flatMap(page => page.data) || []\n\n return { ...query, data }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "3.38.0",
3
+ "version": "3.38.1-rc.0",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "react-native": "./src/index.tsx",
@@ -72,5 +72,5 @@
72
72
  "react-native-url-polyfill": "^2.0.0",
73
73
  "typescript": "~5.9.2"
74
74
  },
75
- "gitHead": "8b9d4026df5abb9838772a28e85ded7b059020b5"
75
+ "gitHead": "3268ac630db7e7d7c9d1af4ce152ffc08fa1679c"
76
76
  }
@@ -0,0 +1,53 @@
1
+ import { QueryClientProvider } from '@tanstack/react-query'
2
+ import { renderHook, waitFor } from '@testing-library/react-native'
3
+ import React from 'react'
4
+ import { buildTestQueryClient } from '../../__utils__/query_client'
5
+ import { ChatContext, ChatContextValue } from '../../contexts/chat_context'
6
+ import { useApiGet } from '../../hooks/use_api'
7
+ import { ApiClient, useApiClient } from '../../hooks/use_api_client'
8
+ import { Session } from '../../utils'
9
+
10
+ jest.mock('../../hooks/use_api_client')
11
+
12
+ const mockedUseApiClient = useApiClient as jest.MockedFunction<typeof useApiClient>
13
+
14
+ let get: jest.Mock
15
+
16
+ const renderUseApiGet = (session: Session) => {
17
+ const queryClient = buildTestQueryClient()
18
+ const wrapper = ({ children }: { children: React.ReactNode }) => (
19
+ <QueryClientProvider client={queryClient}>
20
+ <ChatContext.Provider value={{ session } as unknown as ChatContextValue}>
21
+ {children}
22
+ </ChatContext.Provider>
23
+ </QueryClientProvider>
24
+ )
25
+
26
+ return renderHook(() => useApiGet({ url: '/me', data: { fields: { Person: ['id'] } } }), {
27
+ wrapper,
28
+ })
29
+ }
30
+
31
+ beforeEach(() => {
32
+ get = jest.fn().mockResolvedValue({ data: { id: 1 } })
33
+ mockedUseApiClient.mockReturnValue({ chat: { get } } as unknown as ApiClient)
34
+ })
35
+
36
+ afterEach(() => {
37
+ jest.clearAllMocks()
38
+ })
39
+
40
+ describe('useApiGet', () => {
41
+ it('does not fetch while the session has no access token', () => {
42
+ const { result } = renderUseApiGet(new Session())
43
+
44
+ expect(result.current.fetchStatus).toBe('idle')
45
+ expect(get).not.toHaveBeenCalled()
46
+ })
47
+
48
+ it('fetches once the session carries an access token', async () => {
49
+ renderUseApiGet(new Session({ token: { access_token: 'a-real-token' } }))
50
+
51
+ await waitFor(() => expect(get).toHaveBeenCalledTimes(1))
52
+ })
53
+ })
@@ -4,6 +4,8 @@ import {
4
4
  useInfiniteQuery,
5
5
  useQuery,
6
6
  } from '@tanstack/react-query'
7
+ import { useContext } from 'react'
8
+ import { ChatContext } from '../contexts/chat_context'
7
9
  import { ApiCollection, ApiResource, FailedResponse, ResourceObject } from '../types'
8
10
  import { GetRequest, RequestData } from '../utils/client'
9
11
  import { getNextPageParamFromMeta } from './paginator_meta'
@@ -17,8 +19,11 @@ interface ApiGetOptions extends GetRequest {
17
19
 
18
20
  export const useApiGet = <T extends ResourceObject | ResourceObject[]>(args: ApiGetOptions) => {
19
21
  type Resource = ApiResource<T>
22
+ const { session } = useContext(ChatContext)
20
23
  const apiClient = useApiClient()
21
24
 
25
+ const enabled = !!session.token?.access_token && (args.enabled ?? true)
26
+
22
27
  const { data, ...query } = useQuery<Resource, FailedResponse>({
23
28
  queryKey: getRequestQueryKey(args),
24
29
  queryFn: ({ queryKey }) => {
@@ -26,7 +31,7 @@ export const useApiGet = <T extends ResourceObject | ResourceObject[]>(args: Api
26
31
 
27
32
  return apiClient[app].get({ url, data: d, headers }) as Promise<Resource>
28
33
  },
29
- enabled: args.enabled,
34
+ enabled,
30
35
  })
31
36
 
32
37
  return { ...data, ...query }
@@ -41,7 +46,9 @@ export const useApiPaginator = <T extends ResourceObject>(
41
46
  args: ApiGetOptions,
42
47
  opts?: PaginatorOptions
43
48
  ) => {
49
+ const { session } = useContext(ChatContext)
44
50
  const apiClient = useApiClient()
51
+ const enabled = !!session.token?.access_token && (args.enabled ?? true)
45
52
  const query = useInfiniteQuery<
46
53
  ApiCollection<T>,
47
54
  FailedResponse,
@@ -65,7 +72,7 @@ export const useApiPaginator = <T extends ResourceObject>(
65
72
  },
66
73
  initialPageParam: {} as Partial<RequestData>,
67
74
  getNextPageParam: lastPage => getNextPageParamFromMeta(lastPage.meta?.next),
68
- enabled: args.enabled,
75
+ enabled,
69
76
  ...(opts || {}),
70
77
  })
71
78