@planningcenter/chat-react-native 4.4.0-rc.5 → 4.4.0-rc.6

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":"api_provider.d.ts","sourceRoot":"","sources":["../../src/contexts/api_provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAIZ,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAgCxC,eAAO,MAAM,eAAe,aAO1B,CAAA;AAEF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,2CA6BlD;AAiBD,wBAAgB,eAAe,WAQ9B"}
1
+ {"version":3,"file":"api_provider.d.ts","sourceRoot":"","sources":["../../src/contexts/api_provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAIZ,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAgCxC,eAAO,MAAM,eAAe,aAO1B,CAAA;AAEF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,2CA6BlD;AAcD,wBAAgB,eAAe,WAQ9B"}
@@ -3,9 +3,8 @@ import { focusManager, QueryClient, QueryClientProvider, usePrefetchQuery } from
3
3
  import React, { useContext, useEffect, useRef } from 'react';
4
4
  import { useApiClient } from '../hooks/use_api_client';
5
5
  import { useAppState } from '../hooks/use_app_state';
6
- import { appGrantsRequestArgs } from '../hooks/use_chat_permissions';
6
+ import { appGrantsQueryOptions } from '../hooks/use_chat_permissions';
7
7
  import { featuresQueryOptions } from '../hooks/use_features';
8
- import { getRequestQueryKey } from '../hooks/use_suspense_api';
9
8
  import { emitAuthRefresh } from '../utils/auth_events';
10
9
  import { ResponseError } from '../utils/response_error';
11
10
  import { ChatContext } from './chat_context';
@@ -40,13 +39,14 @@ export const chatQueryClient = new QueryClient({
40
39
  }
41
40
  });
42
41
  export function ApiProvider(t0) {
43
- const $ = _c(12);
42
+ const $ = _c(14);
44
43
  const {
45
44
  children
46
45
  } = t0;
47
46
  const {
48
47
  token,
49
- env
48
+ env,
49
+ session
50
50
  } = useContext(ChatContext);
51
51
  let t1;
52
52
  if ($[0] !== env || $[1] !== token) {
@@ -101,22 +101,24 @@ export function ApiProvider(t0) {
101
101
  }
102
102
  useEffect(t4, t5);
103
103
  let t6;
104
- if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
105
- t6 = /*#__PURE__*/_jsx(PrefetchQueries, {});
106
- $[9] = t6;
104
+ if ($[9] !== session.isAuthenticated) {
105
+ t6 = session.isAuthenticated && /*#__PURE__*/_jsx(PrefetchQueries, {});
106
+ $[9] = session.isAuthenticated;
107
+ $[10] = t6;
107
108
  } else {
108
- t6 = $[9];
109
+ t6 = $[10];
109
110
  }
110
111
  let t7;
111
- if ($[10] !== children) {
112
+ if ($[11] !== children || $[12] !== t6) {
112
113
  t7 = /*#__PURE__*/_jsxs(QueryClientProvider, {
113
114
  client: chatQueryClient,
114
115
  children: [t6, children]
115
116
  });
116
- $[10] = children;
117
- $[11] = t7;
117
+ $[11] = children;
118
+ $[12] = t6;
119
+ $[13] = t7;
118
120
  } else {
119
- t7 = $[11];
121
+ t7 = $[13];
120
122
  }
121
123
  return t7;
122
124
  }
@@ -128,26 +130,24 @@ function _temp() {
128
130
  return chatQueryClient.invalidateQueries();
129
131
  }
130
132
  const PrefetchQueries = () => {
131
- const $ = _c(3);
133
+ const $ = _c(4);
132
134
  const client = useApiClient();
133
135
  let t0;
134
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
135
- t0 = {
136
- queryKey: getRequestQueryKey(appGrantsRequestArgs),
137
- queryFn: defaultQueryFn
138
- };
139
- $[0] = t0;
136
+ if ($[0] !== client) {
137
+ t0 = appGrantsQueryOptions(client);
138
+ $[0] = client;
139
+ $[1] = t0;
140
140
  } else {
141
- t0 = $[0];
141
+ t0 = $[1];
142
142
  }
143
143
  usePrefetchQuery(t0);
144
144
  let t1;
145
- if ($[1] !== client) {
145
+ if ($[2] !== client) {
146
146
  t1 = featuresQueryOptions(client);
147
- $[1] = client;
148
- $[2] = t1;
147
+ $[2] = client;
148
+ $[3] = t1;
149
149
  } else {
150
- t1 = $[2];
150
+ t1 = $[3];
151
151
  }
152
152
  usePrefetchQuery(t1);
153
153
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"api_provider.js","names":["focusManager","QueryClient","QueryClientProvider","usePrefetchQuery","React","useContext","useEffect","useRef","useApiClient","useAppState","appGrantsRequestArgs","featuresQueryOptions","getRequestQueryKey","emitAuthRefresh","ResponseError","ChatContext","jsx","_jsx","jsxs","_jsxs","apiClient","defaultQueryFn","queryKey","Error","url","data","headers","app","get","configuredRetry","failureCount","error","is429Error","status","chatQueryClient","defaultOptions","queries","queryFn","retry","ApiProvider","t0","$","_c","children","token","env","t1","sessionChanged","useSessionChanged","client","t2","t3","isFetching","cancelQueries","then","_temp","clear","t4","t5","t6","Symbol","for","PrefetchQueries","t7","invalidateQueries","useFocusManager","appState","setFocused","value","newToken","newEnv","prevToken","prevEnv","usePrevious","isInitialLogin","tokenChanged","Boolean","access_token","envChanged","ref","current"],"sources":["../../src/contexts/api_provider.tsx"],"sourcesContent":["import {\n focusManager,\n QueryClient,\n QueryClientProvider,\n QueryKey,\n usePrefetchQuery,\n} from '@tanstack/react-query'\nimport React, { useContext, useEffect, useRef } from 'react'\nimport { ViewProps } from 'react-native'\nimport { ApiClient, useApiClient } from '../hooks/use_api_client'\nimport { useAppState } from '../hooks/use_app_state'\nimport { appGrantsRequestArgs } from '../hooks/use_chat_permissions'\nimport { featuresQueryOptions } from '../hooks/use_features'\nimport { getRequestQueryKey, RequestQueryKey } from '../hooks/use_suspense_api'\nimport { emitAuthRefresh } from '../utils/auth_events'\nimport { ResponseError } from '../utils/response_error'\nimport { ChatContext, ChatContextValue } from './chat_context'\n\nlet apiClient: ApiClient | undefined\n\nconst defaultQueryFn = ({ queryKey }: { queryKey: QueryKey }) => {\n if (!apiClient) {\n throw new Error('No token present')\n }\n\n const [url, data, headers, app = 'chat'] = queryKey as RequestQueryKey\n\n return apiClient[app].get({ url, data, headers })\n}\n\nconst configuredRetry = (failureCount: number, error: any) => {\n if (is429Error(error)) return false\n\n return failureCount < 3\n}\n\nconst is429Error = (error: any): boolean => {\n return error instanceof ResponseError && error.status === 429\n}\n\nexport const chatQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryFn: defaultQueryFn,\n retry: configuredRetry,\n },\n },\n})\n\nexport function ApiProvider({ children }: ViewProps) {\n const { token, env } = useContext(ChatContext)\n const sessionChanged = useSessionChanged({ token, env })\n\n const client = useApiClient()\n\n useEffect(() => {\n if (!sessionChanged) return\n\n emitAuthRefresh()\n\n if (chatQueryClient.isFetching()) {\n chatQueryClient.cancelQueries().then(() => chatQueryClient.invalidateQueries())\n return\n }\n\n chatQueryClient.clear()\n }, [sessionChanged])\n\n useEffect(() => {\n apiClient = client\n }, [client])\n\n return (\n <QueryClientProvider client={chatQueryClient}>\n <PrefetchQueries />\n {children}\n </QueryClientProvider>\n )\n}\n\n// Component to prefetch queries when the app is focused\n// This needs to live in the provider so that it can access the api client\n// and the chat query client\nconst PrefetchQueries = () => {\n const client = useApiClient()\n\n usePrefetchQuery({\n queryKey: getRequestQueryKey(appGrantsRequestArgs),\n queryFn: defaultQueryFn,\n })\n usePrefetchQuery(featuresQueryOptions(client))\n\n return null\n}\n\nexport function useFocusManager() {\n const appState = useAppState()\n\n useEffect(() => {\n focusManager.setFocused(appState === 'active')\n }, [appState])\n\n return appState\n}\n\nfunction useSessionChanged(value: Pick<ChatContextValue, 'token' | 'env'>): boolean {\n const { token: newToken, env: newEnv } = value\n const { token: prevToken, env: prevEnv } = usePrevious<typeof value>(value)\n\n const isInitialLogin = !prevToken && !!newToken\n if (isInitialLogin) return false\n\n const tokenChanged = Boolean(\n prevToken?.access_token && newToken?.access_token !== prevToken?.access_token\n )\n\n const envChanged = Boolean(prevEnv && newEnv !== prevEnv)\n\n return tokenChanged || envChanged\n}\n\nfunction usePrevious<T>(value: T): T {\n const ref = useRef<T>(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"api_provider.js","names":["focusManager","QueryClient","QueryClientProvider","usePrefetchQuery","React","useContext","useEffect","useRef","useApiClient","useAppState","appGrantsQueryOptions","featuresQueryOptions","emitAuthRefresh","ResponseError","ChatContext","jsx","_jsx","jsxs","_jsxs","apiClient","defaultQueryFn","queryKey","Error","url","data","headers","app","get","configuredRetry","failureCount","error","is429Error","status","chatQueryClient","defaultOptions","queries","queryFn","retry","ApiProvider","t0","$","_c","children","token","env","session","t1","sessionChanged","useSessionChanged","client","t2","t3","isFetching","cancelQueries","then","_temp","clear","t4","t5","t6","isAuthenticated","PrefetchQueries","t7","invalidateQueries","useFocusManager","appState","setFocused","value","newToken","newEnv","prevToken","prevEnv","usePrevious","isInitialLogin","tokenChanged","Boolean","access_token","envChanged","ref","current"],"sources":["../../src/contexts/api_provider.tsx"],"sourcesContent":["import {\n focusManager,\n QueryClient,\n QueryClientProvider,\n QueryKey,\n usePrefetchQuery,\n} from '@tanstack/react-query'\nimport React, { useContext, useEffect, useRef } from 'react'\nimport { ViewProps } from 'react-native'\nimport { ApiClient, useApiClient } from '../hooks/use_api_client'\nimport { useAppState } from '../hooks/use_app_state'\nimport { appGrantsQueryOptions } from '../hooks/use_chat_permissions'\nimport { featuresQueryOptions } from '../hooks/use_features'\nimport { RequestQueryKey } from '../hooks/use_suspense_api'\nimport { emitAuthRefresh } from '../utils/auth_events'\nimport { ResponseError } from '../utils/response_error'\nimport { ChatContext, ChatContextValue } from './chat_context'\n\nlet apiClient: ApiClient | undefined\n\nconst defaultQueryFn = ({ queryKey }: { queryKey: QueryKey }) => {\n if (!apiClient) {\n throw new Error('No token present')\n }\n\n const [url, data, headers, app = 'chat'] = queryKey as RequestQueryKey\n\n return apiClient[app].get({ url, data, headers })\n}\n\nconst configuredRetry = (failureCount: number, error: any) => {\n if (is429Error(error)) return false\n\n return failureCount < 3\n}\n\nconst is429Error = (error: any): boolean => {\n return error instanceof ResponseError && error.status === 429\n}\n\nexport const chatQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryFn: defaultQueryFn,\n retry: configuredRetry,\n },\n },\n})\n\nexport function ApiProvider({ children }: ViewProps) {\n const { token, env, session } = useContext(ChatContext)\n const sessionChanged = useSessionChanged({ token, env })\n\n const client = useApiClient()\n\n useEffect(() => {\n if (!sessionChanged) return\n\n emitAuthRefresh()\n\n if (chatQueryClient.isFetching()) {\n chatQueryClient.cancelQueries().then(() => chatQueryClient.invalidateQueries())\n return\n }\n\n chatQueryClient.clear()\n }, [sessionChanged])\n\n useEffect(() => {\n apiClient = client\n }, [client])\n\n return (\n <QueryClientProvider client={chatQueryClient}>\n {session.isAuthenticated && <PrefetchQueries />}\n {children}\n </QueryClientProvider>\n )\n}\n\n// Component to prefetch queries when the app is focused\n// This needs to live in the provider so that it can access the api client\n// and the chat query client\nconst PrefetchQueries = () => {\n const client = useApiClient()\n\n usePrefetchQuery(appGrantsQueryOptions(client))\n usePrefetchQuery(featuresQueryOptions(client))\n\n return null\n}\n\nexport function useFocusManager() {\n const appState = useAppState()\n\n useEffect(() => {\n focusManager.setFocused(appState === 'active')\n }, [appState])\n\n return appState\n}\n\nfunction useSessionChanged(value: Pick<ChatContextValue, 'token' | 'env'>): boolean {\n const { token: newToken, env: newEnv } = value\n const { token: prevToken, env: prevEnv } = usePrevious<typeof value>(value)\n\n const isInitialLogin = !prevToken && !!newToken\n if (isInitialLogin) return false\n\n const tokenChanged = Boolean(\n prevToken?.access_token && newToken?.access_token !== prevToken?.access_token\n )\n\n const envChanged = Boolean(prevEnv && newEnv !== prevEnv)\n\n return tokenChanged || envChanged\n}\n\nfunction usePrevious<T>(value: T): T {\n const ref = useRef<T>(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import { AppGrantsResource } from '../types';
2
- import { App } from './use_api_client';
1
+ import { ApiCollection, AppGrantsResource } from '../types';
2
+ import { ApiClient, App } from './use_api_client';
3
3
  export declare const appGrantsRequestArgs: {
4
4
  url: string;
5
5
  data: {
@@ -9,6 +9,14 @@ export declare const appGrantsRequestArgs: {
9
9
  };
10
10
  app: App;
11
11
  };
12
+ export declare const appGrantsQueryOptions: (apiClient: ApiClient) => import("@tanstack/query-core").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<ApiCollection<AppGrantsResource>, Error, ApiCollection<AppGrantsResource>, import("./use_suspense_api").RequestQueryKey>, "queryFn"> & {
13
+ queryFn?: import("@tanstack/query-core").QueryFunction<ApiCollection<AppGrantsResource>, import("./use_suspense_api").RequestQueryKey, never> | undefined;
14
+ } & {
15
+ queryKey: import("./use_suspense_api").RequestQueryKey & {
16
+ [dataTagSymbol]: ApiCollection<AppGrantsResource>;
17
+ [dataTagErrorSymbol]: Error;
18
+ };
19
+ };
12
20
  export declare function useAppGrants(): {
13
21
  error: import("..").ResponseError;
14
22
  isError: true;
@@ -1 +1 @@
1
- {"version":3,"file":"use_chat_permissions.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,eAAO,MAAM,oBAAoB;;;;;;;SAOhB,GAAG;CACnB,CAAA;AAED,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD"}
1
+ {"version":3,"file":"use_chat_permissions.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAI3D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGjD,eAAO,MAAM,oBAAoB;;;;;;;SAOhB,GAAG;CACnB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,WAAW,SAAS;;;;;;;CAQtD,CAAA;AAEJ,wBAAgB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAInD"}
@@ -1,6 +1,9 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
+ import { queryOptions } from '@tanstack/react-query';
3
+ import { throwResponseError } from '../utils/response_error';
2
4
  import { FIVE_MINUTES } from '../utils/time';
3
5
  import { useApiGet } from './use_api';
6
+ import { getRequestQueryKey } from './use_suspense_api';
4
7
  export const appGrantsRequestArgs = {
5
8
  url: '/me/app_grants',
6
9
  data: {
@@ -10,6 +13,11 @@ export const appGrantsRequestArgs = {
10
13
  },
11
14
  app: 'chat'
12
15
  };
16
+ export const appGrantsQueryOptions = apiClient => queryOptions({
17
+ queryKey: getRequestQueryKey(appGrantsRequestArgs),
18
+ queryFn: () => apiClient[appGrantsRequestArgs.app].get(appGrantsRequestArgs).catch(throwResponseError),
19
+ staleTime: FIVE_MINUTES
20
+ });
13
21
  export function useAppGrants() {
14
22
  const $ = _c(1);
15
23
  let t0;
@@ -1 +1 @@
1
- {"version":3,"file":"use_chat_permissions.js","names":["FIVE_MINUTES","useApiGet","appGrantsRequestArgs","url","data","fields","AppGrant","app","useAppGrants","$","_c","t0","Symbol","for","staleTime","useCanCreateConversations","t1","undefined","appGrants","t2","some","_temp","appGrant","createConversations"],"sources":["../../src/hooks/use_chat_permissions.ts"],"sourcesContent":["import { AppGrantsResource } from '../types'\nimport { FIVE_MINUTES } from '../utils/time'\nimport { useApiGet } from './use_api'\nimport { App } from './use_api_client'\n\nexport const appGrantsRequestArgs = {\n url: '/me/app_grants',\n data: {\n fields: {\n AppGrant: ['create_conversations', 'app_name'],\n },\n },\n app: 'chat' as App,\n}\n\nexport function useAppGrants() {\n return useApiGet<AppGrantsResource[]>(appGrantsRequestArgs, {\n staleTime: FIVE_MINUTES,\n })\n}\n\nexport function useCanCreateConversations(): boolean {\n const { data: appGrants = [] } = useAppGrants()\n\n return appGrants.some(appGrant => appGrant.createConversations)\n}\n"],"mappings":";AACA,SAASA,YAAY,QAAQ,eAAe;AAC5C,SAASC,SAAS,QAAQ,WAAW;AAGrC,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,GAAG,EAAE,gBAAgB;EACrBC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,UAAU;IAC/C;EACF,CAAC;EACDC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,SAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IACuDF,EAAA;MAAAG,SAAA,EAC/Cd;IACb,CAAC;IAAAS,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAFMR,SAAS,CAAsBC,oBAAoB,EAAES,EAE3D,CAAC;AAAA;AAGJ,OAAO,SAAAI,0BAAA;EAAA,MAAAN,CAAA,GAAAC,EAAA;EACL;IAAAN,IAAA,EAAAO;EAAA,IAAiCH,YAAY,CAAC,CAAC;EAAA,IAAAQ,EAAA;EAAA,IAAAP,CAAA,QAAAE,EAAA;IAAjCK,EAAA,GAAAL,EAAc,KAAdM,SAAc,GAAd,EAAc,GAAdN,EAAc;IAAAF,CAAA,MAAAE,EAAA;IAAAF,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAAd,MAAAS,SAAA,GAAAF,EAAc;EAAA,IAAAG,EAAA;EAAA,IAAAV,CAAA,QAAAS,SAAA;IAErBC,EAAA,GAAAD,SAAS,CAAAE,IAAK,CAACC,KAAwC,CAAC;IAAAZ,CAAA,MAAAS,SAAA;IAAAT,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,OAAxDU,EAAwD;AAAA;AAH1D,SAAAE,MAAAC,QAAA;EAAA,OAG6BA,QAAQ,CAAAC,mBAAoB;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"use_chat_permissions.js","names":["queryOptions","throwResponseError","FIVE_MINUTES","useApiGet","getRequestQueryKey","appGrantsRequestArgs","url","data","fields","AppGrant","app","appGrantsQueryOptions","apiClient","queryKey","queryFn","get","catch","staleTime","useAppGrants","$","_c","t0","Symbol","for","useCanCreateConversations","t1","undefined","appGrants","t2","some","_temp","appGrant","createConversations"],"sources":["../../src/hooks/use_chat_permissions.ts"],"sourcesContent":["import { queryOptions } from '@tanstack/react-query'\nimport { ApiCollection, AppGrantsResource } from '../types'\nimport { throwResponseError } from '../utils/response_error'\nimport { FIVE_MINUTES } from '../utils/time'\nimport { useApiGet } from './use_api'\nimport { ApiClient, App } from './use_api_client'\nimport { getRequestQueryKey } from './use_suspense_api'\n\nexport const appGrantsRequestArgs = {\n url: '/me/app_grants',\n data: {\n fields: {\n AppGrant: ['create_conversations', 'app_name'],\n },\n },\n app: 'chat' as App,\n}\n\nexport const appGrantsQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getRequestQueryKey(appGrantsRequestArgs),\n queryFn: (): Promise<ApiCollection<AppGrantsResource>> =>\n apiClient[appGrantsRequestArgs.app]\n .get<ApiCollection<AppGrantsResource>>(appGrantsRequestArgs)\n .catch(throwResponseError),\n staleTime: FIVE_MINUTES,\n })\n\nexport function useAppGrants() {\n return useApiGet<AppGrantsResource[]>(appGrantsRequestArgs, {\n staleTime: FIVE_MINUTES,\n })\n}\n\nexport function useCanCreateConversations(): boolean {\n const { data: appGrants = [] } = useAppGrants()\n\n return appGrants.some(appGrant => appGrant.createConversations)\n}\n"],"mappings":";AAAA,SAASA,YAAY,QAAQ,uBAAuB;AAEpD,SAASC,kBAAkB,QAAQ,yBAAyB;AAC5D,SAASC,YAAY,QAAQ,eAAe;AAC5C,SAASC,SAAS,QAAQ,WAAW;AAErC,SAASC,kBAAkB,QAAQ,oBAAoB;AAEvD,OAAO,MAAMC,oBAAoB,GAAG;EAClCC,GAAG,EAAE,gBAAgB;EACrBC,IAAI,EAAE;IACJC,MAAM,EAAE;MACNC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,UAAU;IAC/C;EACF,CAAC;EACDC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAIC,SAAoB,IACxDZ,YAAY,CAAC;EACXa,QAAQ,EAAET,kBAAkB,CAACC,oBAAoB,CAAC;EAClDS,OAAO,EAAEA,CAAA,KACPF,SAAS,CAACP,oBAAoB,CAACK,GAAG,CAAC,CAChCK,GAAG,CAAmCV,oBAAoB,CAAC,CAC3DW,KAAK,CAACf,kBAAkB,CAAC;EAC9BgB,SAAS,EAAEf;AACb,CAAC,CAAC;AAEJ,OAAO,SAAAgB,aAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IACuDF,EAAA;MAAAJ,SAAA,EAC/Cf;IACb,CAAC;IAAAiB,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAFMhB,SAAS,CAAsBE,oBAAoB,EAAEgB,EAE3D,CAAC;AAAA;AAGJ,OAAO,SAAAG,0BAAA;EAAA,MAAAL,CAAA,GAAAC,EAAA;EACL;IAAAb,IAAA,EAAAc;EAAA,IAAiCH,YAAY,CAAC,CAAC;EAAA,IAAAO,EAAA;EAAA,IAAAN,CAAA,QAAAE,EAAA;IAAjCI,EAAA,GAAAJ,EAAc,KAAdK,SAAc,GAAd,EAAc,GAAdL,EAAc;IAAAF,CAAA,MAAAE,EAAA;IAAAF,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAd,MAAAQ,SAAA,GAAAF,EAAc;EAAA,IAAAG,EAAA;EAAA,IAAAT,CAAA,QAAAQ,SAAA;IAErBC,EAAA,GAAAD,SAAS,CAAAE,IAAK,CAACC,KAAwC,CAAC;IAAAX,CAAA,MAAAQ,SAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,OAAxDS,EAAwD;AAAA;AAH1D,SAAAE,MAAAC,QAAA;EAAA,OAG6BA,QAAQ,CAAAC,mBAAoB;AAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.4.0-rc.5",
3
+ "version": "4.4.0-rc.6",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -84,5 +84,5 @@
84
84
  "sf-symbols-typescript": "^2.2.0",
85
85
  "typescript": "~6.0.3"
86
86
  },
87
- "gitHead": "4ee26a4bc8556d4fcb2b1670e9220751cb9f3e25"
87
+ "gitHead": "df917b21008cacad6e12c89ac122efcee2c0ee26"
88
88
  }
@@ -0,0 +1,50 @@
1
+ import { render } from '@testing-library/react-native'
2
+ import React from 'react'
3
+ import { ApiProvider, chatQueryClient } from '../../contexts/api_provider'
4
+ import { ChatContext, ChatContextValue } from '../../contexts/chat_context'
5
+ import { ApiClient, useApiClient } from '../../hooks/use_api_client'
6
+ import { Session } from '../../utils'
7
+
8
+ jest.mock('../../hooks/use_api_client')
9
+
10
+ const mockedUseApiClient = useApiClient as jest.MockedFunction<typeof useApiClient>
11
+
12
+ let get: jest.Mock
13
+
14
+ const renderApiProvider = ({ token }: { token?: { access_token: string } } = {}) => {
15
+ const session = new Session({ token })
16
+
17
+ return render(
18
+ <ChatContext.Provider value={{ session, token } as unknown as ChatContextValue}>
19
+ <ApiProvider>{null}</ApiProvider>
20
+ </ChatContext.Provider>
21
+ )
22
+ }
23
+
24
+ beforeEach(() => {
25
+ jest.useFakeTimers()
26
+ chatQueryClient.clear()
27
+ get = jest.fn().mockResolvedValue({ data: [] })
28
+ mockedUseApiClient.mockReturnValue({ chat: { get } } as unknown as ApiClient)
29
+ })
30
+
31
+ afterEach(() => {
32
+ chatQueryClient.clear()
33
+ jest.clearAllMocks()
34
+ jest.useRealTimers()
35
+ })
36
+
37
+ describe('ApiProvider', () => {
38
+ it('requests app grants on the first attempt without waiting for a retry', () => {
39
+ renderApiProvider({ token: { access_token: 'a-real-token' } })
40
+
41
+ expect(get).toHaveBeenCalledWith(expect.objectContaining({ url: '/me/app_grants' }))
42
+ expect(get.mock.calls.filter(([args]) => args.url === '/me/app_grants')).toHaveLength(1)
43
+ })
44
+
45
+ it('does not prefetch anything without a token', () => {
46
+ renderApiProvider()
47
+
48
+ expect(get).not.toHaveBeenCalled()
49
+ })
50
+ })
@@ -9,9 +9,9 @@ import React, { useContext, useEffect, useRef } from 'react'
9
9
  import { ViewProps } from 'react-native'
10
10
  import { ApiClient, useApiClient } from '../hooks/use_api_client'
11
11
  import { useAppState } from '../hooks/use_app_state'
12
- import { appGrantsRequestArgs } from '../hooks/use_chat_permissions'
12
+ import { appGrantsQueryOptions } from '../hooks/use_chat_permissions'
13
13
  import { featuresQueryOptions } from '../hooks/use_features'
14
- import { getRequestQueryKey, RequestQueryKey } from '../hooks/use_suspense_api'
14
+ import { RequestQueryKey } from '../hooks/use_suspense_api'
15
15
  import { emitAuthRefresh } from '../utils/auth_events'
16
16
  import { ResponseError } from '../utils/response_error'
17
17
  import { ChatContext, ChatContextValue } from './chat_context'
@@ -48,7 +48,7 @@ export const chatQueryClient = new QueryClient({
48
48
  })
49
49
 
50
50
  export function ApiProvider({ children }: ViewProps) {
51
- const { token, env } = useContext(ChatContext)
51
+ const { token, env, session } = useContext(ChatContext)
52
52
  const sessionChanged = useSessionChanged({ token, env })
53
53
 
54
54
  const client = useApiClient()
@@ -72,7 +72,7 @@ export function ApiProvider({ children }: ViewProps) {
72
72
 
73
73
  return (
74
74
  <QueryClientProvider client={chatQueryClient}>
75
- <PrefetchQueries />
75
+ {session.isAuthenticated && <PrefetchQueries />}
76
76
  {children}
77
77
  </QueryClientProvider>
78
78
  )
@@ -84,10 +84,7 @@ export function ApiProvider({ children }: ViewProps) {
84
84
  const PrefetchQueries = () => {
85
85
  const client = useApiClient()
86
86
 
87
- usePrefetchQuery({
88
- queryKey: getRequestQueryKey(appGrantsRequestArgs),
89
- queryFn: defaultQueryFn,
90
- })
87
+ usePrefetchQuery(appGrantsQueryOptions(client))
91
88
  usePrefetchQuery(featuresQueryOptions(client))
92
89
 
93
90
  return null
@@ -1,7 +1,10 @@
1
- import { AppGrantsResource } from '../types'
1
+ import { queryOptions } from '@tanstack/react-query'
2
+ import { ApiCollection, AppGrantsResource } from '../types'
3
+ import { throwResponseError } from '../utils/response_error'
2
4
  import { FIVE_MINUTES } from '../utils/time'
3
5
  import { useApiGet } from './use_api'
4
- import { App } from './use_api_client'
6
+ import { ApiClient, App } from './use_api_client'
7
+ import { getRequestQueryKey } from './use_suspense_api'
5
8
 
6
9
  export const appGrantsRequestArgs = {
7
10
  url: '/me/app_grants',
@@ -13,6 +16,16 @@ export const appGrantsRequestArgs = {
13
16
  app: 'chat' as App,
14
17
  }
15
18
 
19
+ export const appGrantsQueryOptions = (apiClient: ApiClient) =>
20
+ queryOptions({
21
+ queryKey: getRequestQueryKey(appGrantsRequestArgs),
22
+ queryFn: (): Promise<ApiCollection<AppGrantsResource>> =>
23
+ apiClient[appGrantsRequestArgs.app]
24
+ .get<ApiCollection<AppGrantsResource>>(appGrantsRequestArgs)
25
+ .catch(throwResponseError),
26
+ staleTime: FIVE_MINUTES,
27
+ })
28
+
16
29
  export function useAppGrants() {
17
30
  return useApiGet<AppGrantsResource[]>(appGrantsRequestArgs, {
18
31
  staleTime: FIVE_MINUTES,