@planningcenter/chat-react-native 4.2.0-rc.1 → 4.2.0-rc.2

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;AA+BxC,eAAO,MAAM,eAAe,aAO1B,CAAA;AAEF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,2CA6BlD;AAcD,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;AAiBD,wBAAgB,eAAe,WAQ9B"}
@@ -4,6 +4,7 @@ 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
6
  import { appGrantsRequestArgs } from '../hooks/use_chat_permissions';
7
+ import { featuresQueryOptions } from '../hooks/use_features';
7
8
  import { getRequestQueryKey } from '../hooks/use_suspense_api';
8
9
  import { emitAuthRefresh } from '../utils/auth_events';
9
10
  import { ResponseError } from '../utils/response_error';
@@ -124,7 +125,8 @@ export function ApiProvider(t0) {
124
125
  // This needs to live in the provider so that it can access the api client
125
126
  // and the chat query client
126
127
  const PrefetchQueries = () => {
127
- const $ = _c(1);
128
+ const $ = _c(3);
129
+ const client = useApiClient();
128
130
  let t0;
129
131
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
130
132
  t0 = {
@@ -136,6 +138,15 @@ const PrefetchQueries = () => {
136
138
  t0 = $[0];
137
139
  }
138
140
  usePrefetchQuery(t0);
141
+ let t1;
142
+ if ($[1] !== client) {
143
+ t1 = featuresQueryOptions(client);
144
+ $[1] = client;
145
+ $[2] = t1;
146
+ } else {
147
+ t1 = $[2];
148
+ }
149
+ usePrefetchQuery(t1);
139
150
  return null;
140
151
  };
141
152
  export function useFocusManager() {
@@ -1 +1 @@
1
- {"version":3,"file":"api_provider.js","names":["focusManager","QueryClient","QueryClientProvider","usePrefetchQuery","React","useContext","useEffect","useRef","useApiClient","useAppState","appGrantsRequestArgs","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","invalidateQueries","clear","t4","t5","t6","Symbol","for","PrefetchQueries","t7","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 { 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.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 usePrefetchQuery({\n queryKey: getRequestQueryKey(appGrantsRequestArgs),\n queryFn: defaultQueryFn,\n })\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","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","invalidateQueries","clear","t4","t5","t6","Symbol","for","PrefetchQueries","t7","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.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,9 +1,24 @@
1
+ import { ApiCollection } from '../types';
1
2
  import type { FeatureResource } from '../types/resources/feature_resource';
3
+ import { ApiClient } from './use_api_client';
2
4
  type FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures];
5
+ type FeaturesCollection = ApiCollection<FeatureResource> & {
6
+ failure?: {
7
+ status?: number;
8
+ };
9
+ };
3
10
  export declare function useFeatures(): {
4
11
  features: FeatureResource[];
5
12
  featureEnabled: (featureName: FeatureName) => boolean;
6
13
  };
14
+ export declare const featuresQueryOptions: (apiClient: ApiClient) => import("@tanstack/query-core").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<FeaturesCollection, Error, FeaturesCollection, import("./use_suspense_api").RequestQueryKey>, "queryFn"> & {
15
+ queryFn?: import("@tanstack/query-core").QueryFunction<FeaturesCollection, import("./use_suspense_api").RequestQueryKey, never> | undefined;
16
+ } & {
17
+ queryKey: import("./use_suspense_api").RequestQueryKey & {
18
+ [dataTagSymbol]: FeaturesCollection;
19
+ [dataTagErrorSymbol]: Error;
20
+ };
21
+ };
7
22
  export declare const availableFeatures: {
8
23
  readonly gender_specific_conversations: "ROLLOUT_gender_specific_conversations";
9
24
  readonly message_reporting: "ROLLOUT_MOBILE_message_reporting";
@@ -12,6 +27,7 @@ export declare const availableFeatures: {
12
27
  readonly conversation_safety_lock: "ROLLOUT_conversation_safety_lock";
13
28
  readonly video_moderation: "ROLLOUT_MOBILE_video_moderation";
14
29
  readonly dm_search_clear_fix: "ROLLOUT_MOBILE_dm_search_clear_fix";
30
+ readonly search: "ROLLOUT_search";
15
31
  };
16
32
  export {};
17
33
  //# sourceMappingURL=use_features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAK1E,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,wBAAgB,WAAW;;kCAiBT,WAAW;EAS5B;AAED,eAAO,MAAM,iBAAiB;;;;;;;;CAQ0B,CAAA"}
1
+ {"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;CAS0B,CAAA"}
@@ -1,69 +1,64 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
- import { useSuspenseQuery } from '@tanstack/react-query';
2
+ import { queryOptions, useSuspenseQuery } from '@tanstack/react-query';
3
3
  import { useCallback } from 'react';
4
4
  import { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features';
5
- import { FIVE_MINUTES } from '../utils/time';
5
+ import { FIVE_MINUTES, ONE_MINUTE } from '../utils/time';
6
6
  import { useApiClient } from './use_api_client';
7
7
  export function useFeatures() {
8
- const $ = _c(9);
8
+ const $ = _c(7);
9
9
  const apiClient = useApiClient();
10
10
  let t0;
11
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
12
- t0 = getFeaturesRequestArgs();
13
- $[0] = t0;
11
+ if ($[0] !== apiClient) {
12
+ t0 = featuresQueryOptions(apiClient);
13
+ $[0] = apiClient;
14
+ $[1] = t0;
14
15
  } else {
15
- t0 = $[0];
16
- }
17
- const requestArgs = t0;
18
- let t1;
19
- if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
20
- t1 = getFeaturesQueryKey();
21
- $[1] = t1;
22
- } else {
23
- t1 = $[1];
24
- }
25
- let t2;
26
- if ($[2] !== apiClient) {
27
- t2 = {
28
- queryKey: t1,
29
- queryFn: () => apiClient.chat.get(requestArgs).catch(_temp),
30
- staleTime: FIVE_MINUTES
31
- };
32
- $[2] = apiClient;
33
- $[3] = t2;
34
- } else {
35
- t2 = $[3];
16
+ t0 = $[1];
36
17
  }
37
18
  const {
38
19
  data
39
- } = useSuspenseQuery(t2);
20
+ } = useSuspenseQuery(t0);
40
21
  const features = data.data;
41
- let t3;
42
- if ($[4] !== features) {
43
- t3 = featureName => features.some(feature => feature.name === featureName && feature.enabled);
44
- $[4] = features;
45
- $[5] = t3;
22
+ let t1;
23
+ if ($[2] !== features) {
24
+ t1 = featureName => features.some(feature => feature.name === featureName && feature.enabled);
25
+ $[2] = features;
26
+ $[3] = t1;
46
27
  } else {
47
- t3 = $[5];
28
+ t1 = $[3];
48
29
  }
49
- const featureEnabled = t3;
50
- let t4;
51
- if ($[6] !== featureEnabled || $[7] !== features) {
52
- t4 = {
30
+ const featureEnabled = t1;
31
+ let t2;
32
+ if ($[4] !== featureEnabled || $[5] !== features) {
33
+ t2 = {
53
34
  features,
54
35
  featureEnabled
55
36
  };
56
- $[6] = featureEnabled;
57
- $[7] = features;
58
- $[8] = t4;
37
+ $[4] = featureEnabled;
38
+ $[5] = features;
39
+ $[6] = t2;
59
40
  } else {
60
- t4 = $[8];
41
+ t2 = $[6];
61
42
  }
62
- return t4;
63
- }
64
- function _temp() {
65
- return stableEmptyFeatures;
43
+ return t2;
66
44
  }
45
+ export const featuresQueryOptions = apiClient => queryOptions({
46
+ queryKey: getFeaturesQueryKey(),
47
+ queryFn: () => {
48
+ return apiClient.chat.get(getFeaturesRequestArgs()).catch(error => ({
49
+ ...stableEmptyFeatures,
50
+ failure: {
51
+ status: error?.status
52
+ }
53
+ }));
54
+ },
55
+ staleTime: query => {
56
+ const failure = query.state.data?.failure;
57
+ if (!failure) return FIVE_MINUTES;
58
+ return failure.status === 429 ? ONE_MINUTE : 0;
59
+ },
60
+ gcTime: Infinity
61
+ });
67
62
  export const availableFeatures = {
68
63
  gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',
69
64
  message_reporting: 'ROLLOUT_MOBILE_message_reporting',
@@ -71,7 +66,8 @@ export const availableFeatures = {
71
66
  custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',
72
67
  conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',
73
68
  video_moderation: 'ROLLOUT_MOBILE_video_moderation',
74
- dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix'
69
+ dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',
70
+ search: 'ROLLOUT_search'
75
71
  };
76
72
  const stableEmptyFeatures = {
77
73
  data: [],
@@ -1 +1 @@
1
- {"version":3,"file":"use_features.js","names":["useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","useApiClient","useFeatures","$","_c","apiClient","t0","Symbol","for","requestArgs","t1","t2","queryKey","queryFn","chat","get","catch","_temp","staleTime","data","features","t3","featureName","some","feature","name","enabled","featureEnabled","t4","stableEmptyFeatures","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES } from '../utils/time'\nimport { useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const requestArgs = getFeaturesRequestArgs()\n\n const { data } = useSuspenseQuery({\n queryKey: getFeaturesQueryKey(),\n queryFn: () => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(requestArgs)\n .catch(() => stableEmptyFeatures)\n },\n staleTime: FIVE_MINUTES,\n })\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n} as const satisfies Record<string, `ROLLOUT_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":";AAAA,SAASA,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,WAAW,QAAQ,OAAO;AAGnC,SAASC,sBAAsB,EAAEC,mBAAmB,QAAQ,+BAA+B;AAC3F,SAASC,YAAY,QAAQ,eAAe;AAC5C,SAASC,YAAY,QAAQ,kBAAkB;AAI/C,OAAO,SAAAC,YAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,SAAA,GAAkBJ,YAAY,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IACZF,EAAA,GAAAR,sBAAsB,CAAC,CAAC;IAAAK,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAA5C,MAAAM,WAAA,GAAoBH,EAAwB;EAAA,IAAAI,EAAA;EAAA,IAAAP,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAGhCE,EAAA,GAAAX,mBAAmB,CAAC,CAAC;IAAAI,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAE,SAAA;IADCM,EAAA;MAAAC,QAAA,EACtBF,EAAqB;MAAAG,OAAA,EACtBA,CAAA,KACAR,SAAS,CAAAS,IAAK,CAAAC,GACf,CAAiCN,WAAW,CAAC,CAAAO,KAC3C,CAACC,KAAyB,CACnC;MAAAC,SAAA,EACUlB;IACb,CAAC;IAAAG,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EARD;IAAAgB;EAAA,IAAiBvB,gBAAgB,CAACe,EAQjC,CAAC;EAEF,MAAAS,QAAA,GAAiBD,IAAI,CAAAA,IAAK;EAAA,IAAAE,EAAA;EAAA,IAAAlB,CAAA,QAAAiB,QAAA;IAGxBC,EAAA,GAAAC,WAAA,IACEF,QAAQ,CAAAG,IAAK,CAACC,OAAA,IAAWA,OAAO,CAAAC,IAAK,KAAKH,WAA8B,IAAfE,OAAO,CAAAE,OAAQ,CAAC;IAAAvB,CAAA,MAAAiB,QAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAF7E,MAAAwB,cAAA,GAAuBN,EAItB;EAAA,IAAAO,EAAA;EAAA,IAAAzB,CAAA,QAAAwB,cAAA,IAAAxB,CAAA,QAAAiB,QAAA;IAEMQ,EAAA;MAAAR,QAAA;MAAAO;IAGP,CAAC;IAAAxB,CAAA,MAAAwB,cAAA;IAAAxB,CAAA,MAAAiB,QAAA;IAAAjB,CAAA,MAAAyB,EAAA;EAAA;IAAAA,EAAA,GAAAzB,CAAA;EAAA;EAAA,OAHMyB,EAGN;AAAA;AAzBI,SAAAX,MAAA;EAAA,OAScY,mBAAmB;AAAA;AAmBxC,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,6BAA6B,EAAE,uCAAuC;EACtEC,iBAAiB,EAAE,kCAAkC;EACrDC,yBAAyB,EAAE,8CAA8C;EACzEC,2BAA2B,EAAE,qCAAqC;EAClEC,wBAAwB,EAAE,kCAAkC;EAC5DC,gBAAgB,EAAE,iCAAiC;EACnDC,mBAAmB,EAAE;AACvB,CAAwD;AAExD,MAAMR,mBAAmD,GAAG;EAC1DV,IAAI,EAAE,EAAE;EACRmB,KAAK,EAAE,CAAC,CAAC;EACTC,IAAI,EAAE;IACJC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE;EACd;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'ROLLOUT_search',\n} as const satisfies Record<string, `ROLLOUT_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":";AAAA,SAASA,YAAY,EAAEC,gBAAgB,QAAQ,uBAAuB;AACtE,SAASC,WAAW,QAAQ,OAAO;AAGnC,SAASC,sBAAsB,EAAEC,mBAAmB,QAAQ,+BAA+B;AAC3F,SAASC,YAAY,EAAEC,UAAU,QAAQ,eAAe;AACxD,SAAoBC,YAAY,QAAQ,kBAAkB;AAQ1D,OAAO,SAAAC,YAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,SAAA,GAAkBJ,YAAY,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,SAAA;IACEC,EAAA,GAAAC,oBAAoB,CAACF,SAAS,CAAC;IAAAF,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAjE;IAAAK;EAAA,IAAiBb,gBAAgB,CAACW,EAA+B,CAAC;EAElE,MAAAG,QAAA,GAAiBD,IAAI,CAAAA,IAAK;EAAA,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAM,QAAA;IAGxBC,EAAA,GAAAC,WAAA,IACEF,QAAQ,CAAAG,IAAK,CAACC,OAAA,IAAWA,OAAO,CAAAC,IAAK,KAAKH,WAA8B,IAAfE,OAAO,CAAAE,OAAQ,CAAC;IAAAZ,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAF7E,MAAAa,cAAA,GAAuBN,EAItB;EAAA,IAAAO,EAAA;EAAA,IAAAd,CAAA,QAAAa,cAAA,IAAAb,CAAA,QAAAM,QAAA;IAEMQ,EAAA;MAAAR,QAAA;MAAAO;IAGP,CAAC;IAAAb,CAAA,MAAAa,cAAA;IAAAb,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAAA,OAHMc,EAGN;AAAA;AAGH,OAAO,MAAMV,oBAAoB,GAAIF,SAAoB,IACvDX,YAAY,CAAC;EACXwB,QAAQ,EAAEpB,mBAAmB,CAAC,CAAC;EAC/BqB,OAAO,EAAEA,CAAA,KAAmC;IAC1C,OAAOd,SAAS,CAACe,IAAI,CAClBC,GAAG,CAAiCxB,sBAAsB,CAAC,CAAC,CAAC,CAC7DyB,KAAK,CAACC,KAAK,KAAK;MAAE,GAAGC,mBAAmB;MAAEC,OAAO,EAAE;QAAEC,MAAM,EAAEH,KAAK,EAAEG;MAAO;IAAE,CAAC,CAAC,CAAC;EACrF,CAAC;EACDC,SAAS,EAAEC,KAAK,IAAI;IAClB,MAAMH,OAAO,GAAGG,KAAK,CAACC,KAAK,CAACrB,IAAI,EAAEiB,OAAO;IACzC,IAAI,CAACA,OAAO,EAAE,OAAO1B,YAAY;IAEjC,OAAO0B,OAAO,CAACC,MAAM,KAAK,GAAG,GAAG1B,UAAU,GAAG,CAAC;EAChD,CAAC;EACD8B,MAAM,EAAEC;AACV,CAAC,CAAC;AAEJ,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,6BAA6B,EAAE,uCAAuC;EACtEC,iBAAiB,EAAE,kCAAkC;EACrDC,yBAAyB,EAAE,8CAA8C;EACzEC,2BAA2B,EAAE,qCAAqC;EAClEC,wBAAwB,EAAE,kCAAkC;EAC5DC,gBAAgB,EAAE,iCAAiC;EACnDC,mBAAmB,EAAE,oCAAoC;EACzDC,MAAM,EAAE;AACV,CAAwD;AAExD,MAAMhB,mBAAmD,GAAG;EAC1DhB,IAAI,EAAE,EAAE;EACRiC,KAAK,EAAE,CAAC,CAAC;EACTC,IAAI,EAAE;IACJC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE;EACd;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const SearchListHeaderComponent: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=search_list_header_component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_list_header_component.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversations/components/search_list_header_component.tsx"],"names":[],"mappings":"AAkCA,eAAO,MAAM,yBAAyB,+CA8MrC,CAAA"}