@planningcenter/chat-react-native 4.5.0-rc.6 → 4.5.0-rc.8
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/components/display/filter_dropdown.d.ts +1 -0
- package/build/components/display/filter_dropdown.d.ts.map +1 -1
- package/build/components/display/filter_dropdown.js.map +1 -1
- package/build/hooks/use_features.js +3 -2
- package/build/hooks/use_features.js.map +1 -1
- package/build/screens/conversations/components/filter_dropdown_list_header_component.d.ts.map +1 -1
- package/build/screens/conversations/components/filter_dropdown_list_header_component.js +22 -7
- package/build/screens/conversations/components/filter_dropdown_list_header_component.js.map +1 -1
- package/build/utils/request/get_features.d.ts +9 -3
- package/build/utils/request/get_features.d.ts.map +1 -1
- package/build/utils/request/get_features.js +11 -4
- package/build/utils/request/get_features.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/hooks/use_can_browse_archived_conversations.test.tsx +2 -1
- package/src/__tests__/hooks/use_features.test.ts +14 -0
- package/src/__tests__/hooks/use_filter_dropdown_enabled.test.tsx +2 -1
- package/src/components/display/filter_dropdown.tsx +1 -0
- package/src/hooks/use_features.ts +4 -2
- package/src/screens/conversations/components/__tests__/filter_dropdown_list_header_component.test.tsx +59 -1
- package/src/screens/conversations/components/filter_dropdown_list_header_component.tsx +24 -9
- package/src/utils/request/get_features.ts +11 -4
|
@@ -26,6 +26,7 @@ export interface FilterDropdownTriggerProps {
|
|
|
26
26
|
accessibilityElementsHidden?: boolean;
|
|
27
27
|
importantForAccessibility?: 'no-hide-descendants';
|
|
28
28
|
onLayout?: (event: LayoutChangeEvent) => void;
|
|
29
|
+
testID?: string;
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
32
|
* The label and chevron the dropdown opens from. Exported so a screen can render a hidden copy
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/display/filter_dropdown.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAyBlE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,eAAsB,EACtB,QAAQ,GACT,EAAE,mBAAmB,2CAoCrB;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iBAAiB,CAAC,EAAE,QAAQ,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,yBAAyB,CAAC,EAAE,qBAAqB,CAAA;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"filter_dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/display/filter_dropdown.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAyBlE,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,eAAsB,EACtB,QAAQ,GACT,EAAE,mBAAmB,2CAoCrB;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iBAAiB,CAAC,EAAE,QAAQ,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,yBAAyB,CAAC,EAAE,qBAAqB,CAAA;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,0BAA0B,2CAoB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_dropdown.js","names":["React","StyleSheet","View","useTheme","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Menu","platformFontWeightBold","tokens","Icon","PopoverMenuView","Text","jsx","_jsx","jsxs","_jsxs","MORE_FILTERS_ID","MORE_FILTERS_LABEL","FilterDropdown","t0","$","_c","options","selectedId","onSelect","onMoreFilters","triggerLabel","showMoreFilters","t1","maxWidth","undefined","styles","useStyles","MenuView","t2","t3","option","id","title","label","state","optionActions","map","t4","Symbol","for","displayInline","subactions","moreFiltersAction","actions","nativeEvent","event","handlePressAction","FilterDropdownTrigger","accessible","accessibilityRole","accessibilityHint","t5","container","style","children","viewProps","trigger","numberOfLines","triggerIcon","name","accessibilityElementsHidden","colors","iconColorDefaultPrimary","textColorDefaultPrimary","create","alignSelf","flexDirection","alignItems","gap","paddingVertical","flexShrink","fontWeight","color","fontSize","fontSizeSm"],"sources":["../../../src/components/display/filter_dropdown.tsx"],"sourcesContent":["import React from 'react'\nimport { LayoutChangeEvent, StyleSheet, View } from 'react-native'\nimport { useTheme } from '../../hooks'\nimport {\n MAX_FONT_SIZE_MULTIPLIER_LANDMARK,\n Menu,\n MenuAction,\n MenuActionEvent,\n platformFontWeightBold,\n} from '../../utils'\nimport { tokens } from '../../vendor/tapestry/tokens'\nimport { Icon } from './icon'\nimport { PopoverMenuView } from './popover_menu_view'\nimport { Text } from './text'\n\n// =================================\n// ====== Constants ================\n// =================================\n\nconst MORE_FILTERS_ID = 'more_filters'\nconst MORE_FILTERS_LABEL = 'More filters'\n\n// =================================\n// ====== Component ================\n// =================================\n\nexport interface FilterDropdownOption {\n id: string\n label: string\n}\n\nexport interface FilterDropdownProps {\n options: FilterDropdownOption[]\n selectedId: string\n onSelect: (id: string) => void\n onMoreFilters: () => void\n triggerLabel: string\n showMoreFilters?: boolean\n /**\n * Widest the trigger may render, in points. Hosts that measure the trigger at its intrinsic\n * width need this for the label to truncate.\n */\n maxWidth?: number\n}\n\nexport function FilterDropdown({\n options,\n selectedId,\n onSelect,\n onMoreFilters,\n triggerLabel,\n showMoreFilters = true,\n maxWidth,\n}: FilterDropdownProps) {\n const styles = useStyles()\n const MenuView = Menu.View ?? PopoverMenuView\n\n const optionActions: MenuAction[] = options.map(option => ({\n id: option.id,\n title: option.label,\n state: option.id === selectedId ? ('on' as const) : ('off' as const),\n }))\n const moreFiltersAction: MenuAction = {\n id: MORE_FILTERS_ID,\n title: '',\n displayInline: true,\n subactions: [{ id: MORE_FILTERS_ID, title: MORE_FILTERS_LABEL }],\n }\n const actions = showMoreFilters ? [...optionActions, moreFiltersAction] : optionActions\n\n const handlePressAction = ({ nativeEvent }: MenuActionEvent) => {\n if (nativeEvent.event === MORE_FILTERS_ID) {\n onMoreFilters()\n } else {\n onSelect(nativeEvent.event)\n }\n }\n\n return (\n <MenuView actions={actions} onPressAction={handlePressAction} style={styles.container}>\n <FilterDropdownTrigger\n label={triggerLabel}\n maxWidth={maxWidth}\n accessible\n accessibilityRole=\"button\"\n accessibilityHint=\"Opens filter options\"\n />\n </MenuView>\n )\n}\n\n// =================================\n// ====== Trigger ==================\n// =================================\n\nexport interface FilterDropdownTriggerProps {\n label: string\n maxWidth?: number\n accessible?: boolean\n accessibilityRole?: 'button'\n accessibilityHint?: string\n accessibilityElementsHidden?: boolean\n importantForAccessibility?: 'no-hide-descendants'\n onLayout?: (event: LayoutChangeEvent) => void\n}\n\n/**\n * The label and chevron the dropdown opens from. Exported so a screen can render a hidden copy\n * to measure how wide a label is at the current font scale.\n */\nexport function FilterDropdownTrigger({\n label,\n maxWidth,\n ...viewProps\n}: FilterDropdownTriggerProps) {\n const styles = useStyles()\n\n return (\n <View style={[styles.trigger, maxWidth !== undefined && { maxWidth }]} {...viewProps}>\n <Text\n style={styles.triggerLabel}\n numberOfLines={1}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n >\n {label}\n </Text>\n <Icon\n name=\"general.downChevron\"\n style={styles.triggerIcon}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityElementsHidden\n />\n </View>\n )\n}\n\n// =================================\n// ====== Styles ===================\n// =================================\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n container: {\n alignSelf: 'flex-start',\n },\n trigger: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingVertical: 4,\n },\n triggerLabel: {\n flexShrink: 1,\n fontWeight: platformFontWeightBold,\n color: colors.textColorDefaultPrimary,\n },\n triggerIcon: {\n fontSize: tokens.fontSizeSm,\n color: colors.iconColorDefaultPrimary,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filter_dropdown.js","names":["React","StyleSheet","View","useTheme","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Menu","platformFontWeightBold","tokens","Icon","PopoverMenuView","Text","jsx","_jsx","jsxs","_jsxs","MORE_FILTERS_ID","MORE_FILTERS_LABEL","FilterDropdown","t0","$","_c","options","selectedId","onSelect","onMoreFilters","triggerLabel","showMoreFilters","t1","maxWidth","undefined","styles","useStyles","MenuView","t2","t3","option","id","title","label","state","optionActions","map","t4","Symbol","for","displayInline","subactions","moreFiltersAction","actions","nativeEvent","event","handlePressAction","FilterDropdownTrigger","accessible","accessibilityRole","accessibilityHint","t5","container","style","children","viewProps","trigger","numberOfLines","triggerIcon","name","accessibilityElementsHidden","colors","iconColorDefaultPrimary","textColorDefaultPrimary","create","alignSelf","flexDirection","alignItems","gap","paddingVertical","flexShrink","fontWeight","color","fontSize","fontSizeSm"],"sources":["../../../src/components/display/filter_dropdown.tsx"],"sourcesContent":["import React from 'react'\nimport { LayoutChangeEvent, StyleSheet, View } from 'react-native'\nimport { useTheme } from '../../hooks'\nimport {\n MAX_FONT_SIZE_MULTIPLIER_LANDMARK,\n Menu,\n MenuAction,\n MenuActionEvent,\n platformFontWeightBold,\n} from '../../utils'\nimport { tokens } from '../../vendor/tapestry/tokens'\nimport { Icon } from './icon'\nimport { PopoverMenuView } from './popover_menu_view'\nimport { Text } from './text'\n\n// =================================\n// ====== Constants ================\n// =================================\n\nconst MORE_FILTERS_ID = 'more_filters'\nconst MORE_FILTERS_LABEL = 'More filters'\n\n// =================================\n// ====== Component ================\n// =================================\n\nexport interface FilterDropdownOption {\n id: string\n label: string\n}\n\nexport interface FilterDropdownProps {\n options: FilterDropdownOption[]\n selectedId: string\n onSelect: (id: string) => void\n onMoreFilters: () => void\n triggerLabel: string\n showMoreFilters?: boolean\n /**\n * Widest the trigger may render, in points. Hosts that measure the trigger at its intrinsic\n * width need this for the label to truncate.\n */\n maxWidth?: number\n}\n\nexport function FilterDropdown({\n options,\n selectedId,\n onSelect,\n onMoreFilters,\n triggerLabel,\n showMoreFilters = true,\n maxWidth,\n}: FilterDropdownProps) {\n const styles = useStyles()\n const MenuView = Menu.View ?? PopoverMenuView\n\n const optionActions: MenuAction[] = options.map(option => ({\n id: option.id,\n title: option.label,\n state: option.id === selectedId ? ('on' as const) : ('off' as const),\n }))\n const moreFiltersAction: MenuAction = {\n id: MORE_FILTERS_ID,\n title: '',\n displayInline: true,\n subactions: [{ id: MORE_FILTERS_ID, title: MORE_FILTERS_LABEL }],\n }\n const actions = showMoreFilters ? [...optionActions, moreFiltersAction] : optionActions\n\n const handlePressAction = ({ nativeEvent }: MenuActionEvent) => {\n if (nativeEvent.event === MORE_FILTERS_ID) {\n onMoreFilters()\n } else {\n onSelect(nativeEvent.event)\n }\n }\n\n return (\n <MenuView actions={actions} onPressAction={handlePressAction} style={styles.container}>\n <FilterDropdownTrigger\n label={triggerLabel}\n maxWidth={maxWidth}\n accessible\n accessibilityRole=\"button\"\n accessibilityHint=\"Opens filter options\"\n />\n </MenuView>\n )\n}\n\n// =================================\n// ====== Trigger ==================\n// =================================\n\nexport interface FilterDropdownTriggerProps {\n label: string\n maxWidth?: number\n accessible?: boolean\n accessibilityRole?: 'button'\n accessibilityHint?: string\n accessibilityElementsHidden?: boolean\n importantForAccessibility?: 'no-hide-descendants'\n onLayout?: (event: LayoutChangeEvent) => void\n testID?: string\n}\n\n/**\n * The label and chevron the dropdown opens from. Exported so a screen can render a hidden copy\n * to measure how wide a label is at the current font scale.\n */\nexport function FilterDropdownTrigger({\n label,\n maxWidth,\n ...viewProps\n}: FilterDropdownTriggerProps) {\n const styles = useStyles()\n\n return (\n <View style={[styles.trigger, maxWidth !== undefined && { maxWidth }]} {...viewProps}>\n <Text\n style={styles.triggerLabel}\n numberOfLines={1}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n >\n {label}\n </Text>\n <Icon\n name=\"general.downChevron\"\n style={styles.triggerIcon}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityElementsHidden\n />\n </View>\n )\n}\n\n// =================================\n// ====== Styles ===================\n// =================================\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n container: {\n alignSelf: 'flex-start',\n },\n trigger: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingVertical: 4,\n },\n triggerLabel: {\n flexShrink: 1,\n fontWeight: platformFontWeightBold,\n color: colors.textColorDefaultPrimary,\n },\n triggerIcon: {\n fontSize: tokens.fontSizeSm,\n color: colors.iconColorDefaultPrimary,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -43,9 +43,9 @@ export function useFeatures() {
|
|
|
43
43
|
return t2;
|
|
44
44
|
}
|
|
45
45
|
export const featuresQueryOptions = apiClient => queryOptions({
|
|
46
|
-
queryKey: getFeaturesQueryKey(),
|
|
46
|
+
queryKey: getFeaturesQueryKey(featureNames),
|
|
47
47
|
queryFn: () => {
|
|
48
|
-
return apiClient.chat.get(getFeaturesRequestArgs()).catch(error => ({
|
|
48
|
+
return apiClient.chat.get(getFeaturesRequestArgs(featureNames)).catch(error => ({
|
|
49
49
|
...stableEmptyFeatures,
|
|
50
50
|
failure: {
|
|
51
51
|
status: error?.status
|
|
@@ -74,6 +74,7 @@ export const availableFeatures = {
|
|
|
74
74
|
manual_archiving: 'QA_MOBILE_manual_archiving',
|
|
75
75
|
manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving'
|
|
76
76
|
};
|
|
77
|
+
const featureNames = Object.values(availableFeatures);
|
|
77
78
|
const stableEmptyFeatures = {
|
|
78
79
|
data: [],
|
|
79
80
|
links: {},
|
|
@@ -1 +1 @@
|
|
|
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","search_rollout","filter_dropdown","filter_dropdown_rollout","manual_archiving","manual_archiving_rollout","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: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n filter_dropdown: 'QA_MOBILE_filter_dropdown',\n filter_dropdown_rollout: 'ROLLOUT_MOBILE_filter_dropdown',\n manual_archiving: 'QA_MOBILE_manual_archiving',\n manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',\n} as const satisfies Record<string, `${'QA' | '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,
|
|
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","featureNames","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","search_rollout","filter_dropdown","filter_dropdown_rollout","manual_archiving","manual_archiving_rollout","Object","values","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(featureNames),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs(featureNames))\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: 'QA_MOBILE_search',\n search_rollout: 'ROLLOUT_MOBILE_search',\n filter_dropdown: 'QA_MOBILE_filter_dropdown',\n filter_dropdown_rollout: 'ROLLOUT_MOBILE_filter_dropdown',\n manual_archiving: 'QA_MOBILE_manual_archiving',\n manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',\n} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>\n\nconst featureNames = Object.values(availableFeatures)\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/screens/conversations/components/filter_dropdown_list_header_component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_dropdown_list_header_component.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter_dropdown_list_header_component.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"names":[],"mappings":"AAyDA,eAAO,MAAM,iCAAiC,+CAqQ7C,CAAA"}
|
|
@@ -15,6 +15,8 @@ import { ListHeaderActionButton } from './list_header_action_button';
|
|
|
15
15
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
16
|
const ROW_PADDING_HORIZONTAL = 16;
|
|
17
17
|
const HEADING_ROW_GAP = 12;
|
|
18
|
+
const TRIGGER_CAP_SLACK = 2;
|
|
19
|
+
const LAYOUT_JITTER = 1;
|
|
18
20
|
const ALL_CONVERSATIONS_LABEL = 'All conversations';
|
|
19
21
|
const ARCHIVED_LABEL = 'Archived';
|
|
20
22
|
var FilterTypes = /*#__PURE__*/function (FilterTypes) {
|
|
@@ -26,6 +28,7 @@ var FilterTypes = /*#__PURE__*/function (FilterTypes) {
|
|
|
26
28
|
FilterTypes["More"] = "More";
|
|
27
29
|
return FilterTypes;
|
|
28
30
|
}(FilterTypes || {});
|
|
31
|
+
const holdSubPointJitter = (previous, next) => previous !== undefined && Math.abs(next - previous) < LAYOUT_JITTER ? previous : next;
|
|
29
32
|
const FILTER_PARAMS = {
|
|
30
33
|
[FilterTypes.All]: {},
|
|
31
34
|
[FilterTypes.Groups]: {
|
|
@@ -424,8 +427,11 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
424
427
|
const [widestFixedLabelWidth, setWidestFixedLabelWidth] = useState();
|
|
425
428
|
let t26;
|
|
426
429
|
if ($[55] === Symbol.for("react.memo_cache_sentinel")) {
|
|
427
|
-
t26 =
|
|
428
|
-
|
|
430
|
+
t26 = t27 => {
|
|
431
|
+
const {
|
|
432
|
+
nativeEvent
|
|
433
|
+
} = t27;
|
|
434
|
+
setRowWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width));
|
|
429
435
|
};
|
|
430
436
|
$[55] = t26;
|
|
431
437
|
} else {
|
|
@@ -434,8 +440,11 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
434
440
|
const handleRowLayout = t26;
|
|
435
441
|
let t27;
|
|
436
442
|
if ($[56] === Symbol.for("react.memo_cache_sentinel")) {
|
|
437
|
-
t27 =
|
|
438
|
-
|
|
443
|
+
t27 = t28 => {
|
|
444
|
+
const {
|
|
445
|
+
nativeEvent: nativeEvent_0
|
|
446
|
+
} = t28;
|
|
447
|
+
setActionsWidth(previous_0 => holdSubPointJitter(previous_0, nativeEvent_0.layout.width));
|
|
439
448
|
};
|
|
440
449
|
$[56] = t27;
|
|
441
450
|
} else {
|
|
@@ -444,8 +453,11 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
444
453
|
const handleActionsLayout = t27;
|
|
445
454
|
let t28;
|
|
446
455
|
if ($[57] === Symbol.for("react.memo_cache_sentinel")) {
|
|
447
|
-
t28 =
|
|
448
|
-
|
|
456
|
+
t28 = t29 => {
|
|
457
|
+
const {
|
|
458
|
+
nativeEvent: nativeEvent_1
|
|
459
|
+
} = t29;
|
|
460
|
+
setWidestFixedLabelWidth(previous_1 => holdSubPointJitter(previous_1, nativeEvent_1.layout.width));
|
|
449
461
|
};
|
|
450
462
|
$[57] = t28;
|
|
451
463
|
} else {
|
|
@@ -463,7 +475,7 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
463
475
|
t29 = rowContentWidth;
|
|
464
476
|
break bb1;
|
|
465
477
|
}
|
|
466
|
-
const roomBesideActions = rowContentWidth - actionsWidth - HEADING_ROW_GAP;
|
|
478
|
+
const roomBesideActions = Math.floor(rowContentWidth - actionsWidth - HEADING_ROW_GAP) - TRIGGER_CAP_SLACK;
|
|
467
479
|
t29 = roomBesideActions >= widestFixedLabelWidth ? roomBesideActions : rowContentWidth;
|
|
468
480
|
}
|
|
469
481
|
const triggerMaxWidth = t29;
|
|
@@ -472,6 +484,7 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
472
484
|
t30 = /*#__PURE__*/_jsx(FilterDropdownTrigger, {
|
|
473
485
|
label: ALL_CONVERSATIONS_LABEL,
|
|
474
486
|
onLayout: handleWidestFixedLabelLayout,
|
|
487
|
+
testID: "conversations-filter-widest-label",
|
|
475
488
|
accessibilityElementsHidden: true,
|
|
476
489
|
importantForAccessibility: "no-hide-descendants"
|
|
477
490
|
});
|
|
@@ -574,6 +587,7 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
574
587
|
t37 = /*#__PURE__*/_jsxs(View, {
|
|
575
588
|
style: styles.actionsContainer,
|
|
576
589
|
onLayout: handleActionsLayout,
|
|
590
|
+
testID: "conversations-filter-heading-actions",
|
|
577
591
|
children: [t34, t35, t36]
|
|
578
592
|
});
|
|
579
593
|
$[80] = styles.actionsContainer;
|
|
@@ -589,6 +603,7 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
589
603
|
t38 = /*#__PURE__*/_jsxs(View, {
|
|
590
604
|
style: styles.headingRow,
|
|
591
605
|
onLayout: handleRowLayout,
|
|
606
|
+
testID: "conversations-filter-heading-row",
|
|
592
607
|
children: [t33, t37]
|
|
593
608
|
});
|
|
594
609
|
$[85] = styles.headingRow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_dropdown_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","useState","Alert","StyleSheet","View","FilterDropdown","FilterDropdownTrigger","TextButton","useCanBrowseArchivedConversations","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useApiGet","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","useSearchEnabled","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","HEADING_ROW_GAP","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","Unread","show_unread","FilterDropdownListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","canBrowseArchived","searchEnabled","route","t2","params","title","chat_group_graph_id","t3","show_archived","undefined","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","t5","fields","Group","t6","url","data","app","t7","t8","enabled","group","t9","bb0","More","test","active","t10","id","label","t11","t12","t13","t14","t15","options","t16","name","t17","triggerLabel","t18","navigate","screen","handleNewConversationNavigation","t19","setParams","handleSetFilter","t20","params_0","handleSelectFilter","t21","handleSearch","t22","handleChatSettings","t23","handleOpenConversationFilters","t24","update","unreadCount","notificationSuccess","handleMarkAllRead","t25","alert","text","onPress","alertMarkAllRead","showMoreFilters","styles","useStyles","rowWidth","setRowWidth","actionsWidth","setActionsWidth","widestFixedLabelWidth","setWidestFixedLabelWidth","t26","event","nativeEvent","layout","width","handleRowLayout","t27","event_0","handleActionsLayout","t28","event_1","handleWidestFixedLabelLayout","t29","bb1","rowContentWidth","roomBesideActions","triggerMaxWidth","t30","accessibilityElementsHidden","importantForAccessibility","t31","widestFixedLabel","style","pointerEvents","children","t32","t33","titleContainer","t34","accessibilityLabel","testID","t35","t36","t37","actionsContainer","t38","headingRow","t39","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t40","listHeader","theme","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","flexWrap","alignItems","justifyContent","paddingHorizontal","flexShrink","position","opacity"],"sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { Alert, LayoutChangeEvent, StyleSheet, View } from 'react-native'\nimport {\n FilterDropdown,\n FilterDropdownOption,\n FilterDropdownTrigger,\n TextButton,\n} from '../../../components'\nimport {\n useCanBrowseArchivedConversations,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useApiGet } from '../../../hooks/use_api'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { useSearchEnabled } from '../../../hooks/use_search_enabled'\nimport { GraphId, GroupResource } from '../../../types/resources/group_resource'\nimport { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'\nimport { Haptic } from '../../../utils/native_adapters'\nimport { ConversationFiltersParams } from '../../conversation_filters/screen_props'\nimport { ConversationsScreenProps } from '../conversations_screen'\nimport { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\nconst HEADING_ROW_GAP = 12\nconst ALL_CONVERSATIONS_LABEL = 'All conversations'\nconst ARCHIVED_LABEL = 'Archived'\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n Unread = 'Unread',\n More = 'More',\n}\n\nconst FILTER_PARAMS: Record<Exclude<FilterTypes, FilterTypes.More>, ConversationFiltersParams> = {\n [FilterTypes.All]: {},\n [FilterTypes.Groups]: { group_source_app_name: 'Groups' },\n [FilterTypes.Teams]: { group_source_app_name: 'Services' },\n [FilterTypes.DMs]: { show_direct_messages: true },\n [FilterTypes.Unread]: { show_unread: true },\n}\n\nexport const FilterDropdownListHeaderComponent = () => {\n const navigation = useNavigation()\n const canFilterByTeams = useCanDisplayGroups({ source_app_name: 'Services', source_type: 'Team' })\n const canFilterByGroups = useCanDisplayGroups({ source_app_name: 'Groups', source_type: 'Group' })\n const directMessagesEligible = useDirectMessagesEligible()\n const hasDirectMessages = useHasDirectMessages()\n const canFilterByDMs = directMessagesEligible && hasDirectMessages\n const canBrowseArchived = useCanBrowseArchivedConversations()\n const searchEnabled = useSearchEnabled()\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n title,\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n show_archived,\n show_unread,\n } = route.params || {}\n const currentPersonCache = useCurrentPersonCache()\n const { markAllRead, isPending } = useMarkAllRead()\n const canCreateConversations = useCanCreateConversations()\n const entryMode = useNewConversationEntry()\n const newConversationFromFilter = useNewConversationFromFilter(\n chat_group_graph_id as GraphId | undefined\n )\n const { data: group } = useApiGet<GroupResource>(\n { url: `/me/groups/${chat_group_graph_id}`, data: { fields: { Group: [] } }, app: 'chat' },\n { enabled: !!chat_group_graph_id }\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id || show_archived) {\n return FilterTypes.More\n } else if (/groups/i.test(group_source_app_name)) {\n return FilterTypes.Groups\n } else if (/services/i.test(group_source_app_name)) {\n return FilterTypes.Teams\n } else if (show_direct_messages) {\n return FilterTypes.DMs\n } else if (show_unread) {\n return FilterTypes.Unread\n }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, show_unread])\n\n const options: FilterDropdownOption[] = useMemo(\n () => [\n { id: FilterTypes.All, label: FilterTypes.All },\n ...(canFilterByGroups ? [{ id: FilterTypes.Groups, label: FilterTypes.Groups }] : []),\n ...(canFilterByTeams ? [{ id: FilterTypes.Teams, label: FilterTypes.Teams }] : []),\n ...(canFilterByDMs ? [{ id: FilterTypes.DMs, label: FilterTypes.DMs }] : []),\n { id: FilterTypes.Unread, label: FilterTypes.Unread },\n ],\n [canFilterByGroups, canFilterByTeams, canFilterByDMs]\n )\n\n const triggerLabel = useMemo(() => {\n if (chat_group_graph_id) return group?.name || title || ALL_CONVERSATIONS_LABEL\n if (show_archived) return ARCHIVED_LABEL\n if (active === FilterTypes.All) return ALL_CONVERSATIONS_LABEL\n\n return active\n }, [chat_group_graph_id, group?.name, title, show_archived, active])\n\n const handleNewConversationNavigation = useCallback(() => {\n if (newConversationFromFilter || entryMode === 'select_type') {\n return navigation.navigate('ConversationSelectType', {\n ...route.params,\n newConversationFromFilter,\n })\n }\n\n if (entryMode === 'groups') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectGroupRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'teams') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectTeamsILeadRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'direct_message') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectDirectMessageRecipients',\n params: { ...route.params },\n })\n }\n }, [navigation, route.params, entryMode, newConversationFromFilter])\n\n const handleSetFilter = useCallback(\n (params: ConversationFiltersParams) => {\n navigation.setParams({\n title: undefined,\n chat_group_graph_id: undefined,\n group_source_app_name: undefined,\n show_direct_messages: undefined,\n show_archived: undefined,\n show_unread: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSelectFilter = useCallback(\n (id: string) => {\n const params = FILTER_PARAMS[id as keyof typeof FILTER_PARAMS]\n if (params) handleSetFilter(params)\n },\n [handleSetFilter]\n )\n\n const handleSearch = useCallback(() => {\n navigation.navigate('Search')\n }, [navigation])\n\n const handleChatSettings = useCallback(() => {\n navigation.navigate('ChatSettings', {})\n }, [navigation])\n\n const handleOpenConversationFilters = useCallback(() => {\n navigation.navigate('ConversationFilters', {\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n })\n }, [\n navigation,\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n ])\n\n const handleMarkAllRead = useCallback(() => {\n currentPersonCache.update({ unreadCount: 0 })\n Haptic.notificationSuccess()\n markAllRead()\n }, [currentPersonCache, markAllRead])\n\n const alertMarkAllRead = useCallback(() => {\n if (active === FilterTypes.All) return handleMarkAllRead()\n\n Alert.alert('Mark all read', 'This includes conversations not shown by the current filter.', [\n { text: 'Cancel' },\n { text: 'OK', onPress: () => handleMarkAllRead() },\n ])\n }, [active, handleMarkAllRead])\n\n const showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived\n\n const styles = useStyles()\n\n // Cap the trigger beside the actions while the widest fixed label fits there, so only longer\n // labels truncate; past that, cap it to the row and let the actions wrap.\n const [rowWidth, setRowWidth] = useState<number>()\n const [actionsWidth, setActionsWidth] = useState<number>()\n const [widestFixedLabelWidth, setWidestFixedLabelWidth] = useState<number>()\n const handleRowLayout = useCallback((event: LayoutChangeEvent) => {\n setRowWidth(event.nativeEvent.layout.width)\n }, [])\n const handleActionsLayout = useCallback((event: LayoutChangeEvent) => {\n setActionsWidth(event.nativeEvent.layout.width)\n }, [])\n const handleWidestFixedLabelLayout = useCallback((event: LayoutChangeEvent) => {\n setWidestFixedLabelWidth(event.nativeEvent.layout.width)\n }, [])\n const triggerMaxWidth = useMemo(() => {\n if (rowWidth === undefined) return undefined\n\n const rowContentWidth = rowWidth - ROW_PADDING_HORIZONTAL * 2\n if (actionsWidth === undefined || widestFixedLabelWidth === undefined) return rowContentWidth\n\n const roomBesideActions = rowContentWidth - actionsWidth - HEADING_ROW_GAP\n return roomBesideActions >= widestFixedLabelWidth ? roomBesideActions : rowContentWidth\n }, [rowWidth, actionsWidth, widestFixedLabelWidth])\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.widestFixedLabel} pointerEvents=\"none\">\n <FilterDropdownTrigger\n label={ALL_CONVERSATIONS_LABEL}\n onLayout={handleWidestFixedLabelLayout}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n />\n </View>\n <View style={styles.headingRow} onLayout={handleRowLayout}>\n <View style={styles.titleContainer}>\n <FilterDropdown\n options={options}\n selectedId={active}\n onSelect={handleSelectFilter}\n onMoreFilters={handleOpenConversationFilters}\n showMoreFilters={showMoreFilters}\n triggerLabel={triggerLabel}\n maxWidth={triggerMaxWidth}\n />\n </View>\n <View style={styles.actionsContainer} onLayout={handleActionsLayout}>\n <ListHeaderActionButton\n name=\"general.cog\"\n onPress={handleChatSettings}\n accessibilityLabel=\"Chat settings\"\n testID=\"conversations-chat-settings-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {canCreateConversations && (\n <ListHeaderActionButton\n name=\"churchCenter.signups\"\n onPress={handleNewConversationNavigation}\n accessibilityLabel=\"New conversation\"\n testID=\"conversations-new-conversation-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n {searchEnabled && (\n <ListHeaderActionButton\n name=\"general.search\"\n onPress={handleSearch}\n accessibilityLabel=\"Search\"\n testID=\"conversations-search-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n </View>\n </View>\n {!show_archived && (\n <View style={styles.markAllReadRow}>\n <TextButton\n onPress={alertMarkAllRead}\n disabled={isPending}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityShowsLargeContentViewer\n accessibilityLargeContentTitle=\"Mark all read\"\n >\n Mark all read\n </TextButton>\n </View>\n )}\n </View>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.fillColorNeutral050Base,\n paddingBottom: 16,\n gap: 8,\n },\n headingRow: {\n gap: HEADING_ROW_GAP,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n flexShrink: 0,\n },\n widestFixedLabel: {\n position: 'absolute',\n opacity: 0,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n alignItems: 'flex-start',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filter_dropdown_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","useState","Alert","StyleSheet","View","FilterDropdown","FilterDropdownTrigger","TextButton","useCanBrowseArchivedConversations","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useApiGet","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","useSearchEnabled","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","HEADING_ROW_GAP","TRIGGER_CAP_SLACK","LAYOUT_JITTER","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","holdSubPointJitter","previous","next","undefined","Math","abs","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","Unread","show_unread","FilterDropdownListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","canBrowseArchived","searchEnabled","route","t2","params","title","chat_group_graph_id","t3","show_archived","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","t5","fields","Group","t6","url","data","app","t7","t8","enabled","group","t9","bb0","More","test","active","t10","id","label","t11","t12","t13","t14","t15","options","t16","name","t17","triggerLabel","t18","navigate","screen","handleNewConversationNavigation","t19","setParams","handleSetFilter","t20","params_0","handleSelectFilter","t21","handleSearch","t22","handleChatSettings","t23","handleOpenConversationFilters","t24","update","unreadCount","notificationSuccess","handleMarkAllRead","t25","alert","text","onPress","alertMarkAllRead","showMoreFilters","styles","useStyles","rowWidth","setRowWidth","actionsWidth","setActionsWidth","widestFixedLabelWidth","setWidestFixedLabelWidth","t26","t27","nativeEvent","layout","width","handleRowLayout","t28","nativeEvent_0","previous_0","handleActionsLayout","t29","nativeEvent_1","previous_1","handleWidestFixedLabelLayout","bb1","rowContentWidth","roomBesideActions","floor","triggerMaxWidth","t30","testID","accessibilityElementsHidden","importantForAccessibility","t31","widestFixedLabel","style","pointerEvents","children","t32","t33","titleContainer","t34","accessibilityLabel","t35","t36","t37","actionsContainer","t38","headingRow","t39","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t40","listHeader","theme","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","flexWrap","alignItems","justifyContent","paddingHorizontal","flexShrink","position","opacity"],"sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { Alert, LayoutChangeEvent, StyleSheet, View } from 'react-native'\nimport {\n FilterDropdown,\n FilterDropdownOption,\n FilterDropdownTrigger,\n TextButton,\n} from '../../../components'\nimport {\n useCanBrowseArchivedConversations,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useApiGet } from '../../../hooks/use_api'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { useSearchEnabled } from '../../../hooks/use_search_enabled'\nimport { GraphId, GroupResource } from '../../../types/resources/group_resource'\nimport { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'\nimport { Haptic } from '../../../utils/native_adapters'\nimport { ConversationFiltersParams } from '../../conversation_filters/screen_props'\nimport { ConversationsScreenProps } from '../conversations_screen'\nimport { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\nconst HEADING_ROW_GAP = 12\nconst TRIGGER_CAP_SLACK = 2\nconst LAYOUT_JITTER = 1\nconst ALL_CONVERSATIONS_LABEL = 'All conversations'\nconst ARCHIVED_LABEL = 'Archived'\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n Unread = 'Unread',\n More = 'More',\n}\n\nconst holdSubPointJitter = (previous: number | undefined, next: number) =>\n previous !== undefined && Math.abs(next - previous) < LAYOUT_JITTER ? previous : next\n\nconst FILTER_PARAMS: Record<Exclude<FilterTypes, FilterTypes.More>, ConversationFiltersParams> = {\n [FilterTypes.All]: {},\n [FilterTypes.Groups]: { group_source_app_name: 'Groups' },\n [FilterTypes.Teams]: { group_source_app_name: 'Services' },\n [FilterTypes.DMs]: { show_direct_messages: true },\n [FilterTypes.Unread]: { show_unread: true },\n}\n\nexport const FilterDropdownListHeaderComponent = () => {\n const navigation = useNavigation()\n const canFilterByTeams = useCanDisplayGroups({ source_app_name: 'Services', source_type: 'Team' })\n const canFilterByGroups = useCanDisplayGroups({ source_app_name: 'Groups', source_type: 'Group' })\n const directMessagesEligible = useDirectMessagesEligible()\n const hasDirectMessages = useHasDirectMessages()\n const canFilterByDMs = directMessagesEligible && hasDirectMessages\n const canBrowseArchived = useCanBrowseArchivedConversations()\n const searchEnabled = useSearchEnabled()\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n title,\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n show_archived,\n show_unread,\n } = route.params || {}\n const currentPersonCache = useCurrentPersonCache()\n const { markAllRead, isPending } = useMarkAllRead()\n const canCreateConversations = useCanCreateConversations()\n const entryMode = useNewConversationEntry()\n const newConversationFromFilter = useNewConversationFromFilter(\n chat_group_graph_id as GraphId | undefined\n )\n const { data: group } = useApiGet<GroupResource>(\n { url: `/me/groups/${chat_group_graph_id}`, data: { fields: { Group: [] } }, app: 'chat' },\n { enabled: !!chat_group_graph_id }\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id || show_archived) {\n return FilterTypes.More\n } else if (/groups/i.test(group_source_app_name)) {\n return FilterTypes.Groups\n } else if (/services/i.test(group_source_app_name)) {\n return FilterTypes.Teams\n } else if (show_direct_messages) {\n return FilterTypes.DMs\n } else if (show_unread) {\n return FilterTypes.Unread\n }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, show_unread])\n\n const options: FilterDropdownOption[] = useMemo(\n () => [\n { id: FilterTypes.All, label: FilterTypes.All },\n ...(canFilterByGroups ? [{ id: FilterTypes.Groups, label: FilterTypes.Groups }] : []),\n ...(canFilterByTeams ? [{ id: FilterTypes.Teams, label: FilterTypes.Teams }] : []),\n ...(canFilterByDMs ? [{ id: FilterTypes.DMs, label: FilterTypes.DMs }] : []),\n { id: FilterTypes.Unread, label: FilterTypes.Unread },\n ],\n [canFilterByGroups, canFilterByTeams, canFilterByDMs]\n )\n\n const triggerLabel = useMemo(() => {\n if (chat_group_graph_id) return group?.name || title || ALL_CONVERSATIONS_LABEL\n if (show_archived) return ARCHIVED_LABEL\n if (active === FilterTypes.All) return ALL_CONVERSATIONS_LABEL\n\n return active\n }, [chat_group_graph_id, group?.name, title, show_archived, active])\n\n const handleNewConversationNavigation = useCallback(() => {\n if (newConversationFromFilter || entryMode === 'select_type') {\n return navigation.navigate('ConversationSelectType', {\n ...route.params,\n newConversationFromFilter,\n })\n }\n\n if (entryMode === 'groups') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectGroupRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'teams') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectTeamsILeadRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'direct_message') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectDirectMessageRecipients',\n params: { ...route.params },\n })\n }\n }, [navigation, route.params, entryMode, newConversationFromFilter])\n\n const handleSetFilter = useCallback(\n (params: ConversationFiltersParams) => {\n navigation.setParams({\n title: undefined,\n chat_group_graph_id: undefined,\n group_source_app_name: undefined,\n show_direct_messages: undefined,\n show_archived: undefined,\n show_unread: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSelectFilter = useCallback(\n (id: string) => {\n const params = FILTER_PARAMS[id as keyof typeof FILTER_PARAMS]\n if (params) handleSetFilter(params)\n },\n [handleSetFilter]\n )\n\n const handleSearch = useCallback(() => {\n navigation.navigate('Search')\n }, [navigation])\n\n const handleChatSettings = useCallback(() => {\n navigation.navigate('ChatSettings', {})\n }, [navigation])\n\n const handleOpenConversationFilters = useCallback(() => {\n navigation.navigate('ConversationFilters', {\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n })\n }, [\n navigation,\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n ])\n\n const handleMarkAllRead = useCallback(() => {\n currentPersonCache.update({ unreadCount: 0 })\n Haptic.notificationSuccess()\n markAllRead()\n }, [currentPersonCache, markAllRead])\n\n const alertMarkAllRead = useCallback(() => {\n if (active === FilterTypes.All) return handleMarkAllRead()\n\n Alert.alert('Mark all read', 'This includes conversations not shown by the current filter.', [\n { text: 'Cancel' },\n { text: 'OK', onPress: () => handleMarkAllRead() },\n ])\n }, [active, handleMarkAllRead])\n\n const showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived\n\n const styles = useStyles()\n\n // Cap the trigger beside the actions while the widest fixed label fits there, so only longer\n // labels truncate; past that, cap it to the row and let the actions wrap.\n const [rowWidth, setRowWidth] = useState<number>()\n const [actionsWidth, setActionsWidth] = useState<number>()\n const [widestFixedLabelWidth, setWidestFixedLabelWidth] = useState<number>()\n const handleRowLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {\n setRowWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))\n }, [])\n const handleActionsLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {\n setActionsWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))\n }, [])\n const handleWidestFixedLabelLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {\n setWidestFixedLabelWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))\n }, [])\n const triggerMaxWidth = useMemo(() => {\n if (rowWidth === undefined) return undefined\n\n const rowContentWidth = rowWidth - ROW_PADDING_HORIZONTAL * 2\n if (actionsWidth === undefined || widestFixedLabelWidth === undefined) return rowContentWidth\n\n const roomBesideActions =\n Math.floor(rowContentWidth - actionsWidth - HEADING_ROW_GAP) - TRIGGER_CAP_SLACK\n return roomBesideActions >= widestFixedLabelWidth ? roomBesideActions : rowContentWidth\n }, [rowWidth, actionsWidth, widestFixedLabelWidth])\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.widestFixedLabel} pointerEvents=\"none\">\n <FilterDropdownTrigger\n label={ALL_CONVERSATIONS_LABEL}\n onLayout={handleWidestFixedLabelLayout}\n testID=\"conversations-filter-widest-label\"\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n />\n </View>\n <View\n style={styles.headingRow}\n onLayout={handleRowLayout}\n testID=\"conversations-filter-heading-row\"\n >\n <View style={styles.titleContainer}>\n <FilterDropdown\n options={options}\n selectedId={active}\n onSelect={handleSelectFilter}\n onMoreFilters={handleOpenConversationFilters}\n showMoreFilters={showMoreFilters}\n triggerLabel={triggerLabel}\n maxWidth={triggerMaxWidth}\n />\n </View>\n <View\n style={styles.actionsContainer}\n onLayout={handleActionsLayout}\n testID=\"conversations-filter-heading-actions\"\n >\n <ListHeaderActionButton\n name=\"general.cog\"\n onPress={handleChatSettings}\n accessibilityLabel=\"Chat settings\"\n testID=\"conversations-chat-settings-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {canCreateConversations && (\n <ListHeaderActionButton\n name=\"churchCenter.signups\"\n onPress={handleNewConversationNavigation}\n accessibilityLabel=\"New conversation\"\n testID=\"conversations-new-conversation-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n {searchEnabled && (\n <ListHeaderActionButton\n name=\"general.search\"\n onPress={handleSearch}\n accessibilityLabel=\"Search\"\n testID=\"conversations-search-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n </View>\n </View>\n {!show_archived && (\n <View style={styles.markAllReadRow}>\n <TextButton\n onPress={alertMarkAllRead}\n disabled={isPending}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityShowsLargeContentViewer\n accessibilityLargeContentTitle=\"Mark all read\"\n >\n Mark all read\n </TextButton>\n </View>\n )}\n </View>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.fillColorNeutral050Base,\n paddingBottom: 16,\n gap: 8,\n },\n headingRow: {\n gap: HEADING_ROW_GAP,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n flexShrink: 0,\n },\n widestFixedLabel: {\n position: 'absolute',\n opacity: 0,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n alignItems: 'flex-start',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
export declare const getFeaturesRequestArgs: () => {
|
|
1
|
+
export declare const getFeaturesRequestArgs: (names: readonly string[]) => {
|
|
2
2
|
url: string;
|
|
3
|
+
headers: {
|
|
4
|
+
'X-PCO-API-Version': string;
|
|
5
|
+
'X-PCO-Chat-React-Native-Version': string;
|
|
6
|
+
};
|
|
3
7
|
data: {
|
|
4
|
-
|
|
8
|
+
where: {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
5
11
|
fields: {
|
|
6
12
|
Feature: string[];
|
|
7
13
|
};
|
|
8
14
|
};
|
|
9
15
|
};
|
|
10
|
-
export declare const getFeaturesQueryKey: () => import("../..").RequestQueryKey;
|
|
16
|
+
export declare const getFeaturesQueryKey: (names: readonly string[]) => import("../..").RequestQueryKey;
|
|
11
17
|
//# sourceMappingURL=get_features.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_features.d.ts","sourceRoot":"","sources":["../../../src/utils/request/get_features.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_features.d.ts","sourceRoot":"","sources":["../../../src/utils/request/get_features.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,MAAM,EAAE;;;;;;;;;;;;;;CAkB9D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,SAAS,MAAM,EAAE,oCAG3D,CAAA"}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { getRequestQueryKey } from '../../hooks/use_suspense_api';
|
|
2
|
-
|
|
2
|
+
import { chatReactNativeVersion } from '../package_version';
|
|
3
|
+
export const getFeaturesRequestArgs = names => {
|
|
3
4
|
const url = '/me/features';
|
|
4
5
|
return {
|
|
5
6
|
url,
|
|
7
|
+
headers: {
|
|
8
|
+
'X-PCO-API-Version': '2026-10-26',
|
|
9
|
+
'X-PCO-Chat-React-Native-Version': chatReactNativeVersion
|
|
10
|
+
},
|
|
6
11
|
data: {
|
|
7
|
-
|
|
12
|
+
where: {
|
|
13
|
+
name: names.join(',')
|
|
14
|
+
},
|
|
8
15
|
fields: {
|
|
9
16
|
Feature: ['name', 'enabled']
|
|
10
17
|
}
|
|
11
18
|
}
|
|
12
19
|
};
|
|
13
20
|
};
|
|
14
|
-
export const getFeaturesQueryKey =
|
|
15
|
-
const requestArgs = getFeaturesRequestArgs();
|
|
21
|
+
export const getFeaturesQueryKey = names => {
|
|
22
|
+
const requestArgs = getFeaturesRequestArgs(names);
|
|
16
23
|
return getRequestQueryKey(requestArgs);
|
|
17
24
|
};
|
|
18
25
|
//# sourceMappingURL=get_features.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_features.js","names":["getRequestQueryKey","getFeaturesRequestArgs","url","data","
|
|
1
|
+
{"version":3,"file":"get_features.js","names":["getRequestQueryKey","chatReactNativeVersion","getFeaturesRequestArgs","names","url","headers","data","where","name","join","fields","Feature","getFeaturesQueryKey","requestArgs"],"sources":["../../../src/utils/request/get_features.ts"],"sourcesContent":["import { getRequestQueryKey } from '../../hooks/use_suspense_api'\nimport { chatReactNativeVersion } from '../package_version'\n\nexport const getFeaturesRequestArgs = (names: readonly string[]) => {\n const url = '/me/features'\n\n return {\n url,\n headers: {\n 'X-PCO-API-Version': '2026-10-26',\n 'X-PCO-Chat-React-Native-Version': chatReactNativeVersion,\n },\n data: {\n where: {\n name: names.join(','),\n },\n fields: {\n Feature: ['name', 'enabled'],\n },\n },\n }\n}\n\nexport const getFeaturesQueryKey = (names: readonly string[]) => {\n const requestArgs = getFeaturesRequestArgs(names)\n return getRequestQueryKey(requestArgs)\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,8BAA8B;AACjE,SAASC,sBAAsB,QAAQ,oBAAoB;AAE3D,OAAO,MAAMC,sBAAsB,GAAIC,KAAwB,IAAK;EAClE,MAAMC,GAAG,GAAG,cAAc;EAE1B,OAAO;IACLA,GAAG;IACHC,OAAO,EAAE;MACP,mBAAmB,EAAE,YAAY;MACjC,iCAAiC,EAAEJ;IACrC,CAAC;IACDK,IAAI,EAAE;MACJC,KAAK,EAAE;QACLC,IAAI,EAAEL,KAAK,CAACM,IAAI,CAAC,GAAG;MACtB,CAAC;MACDC,MAAM,EAAE;QACNC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS;MAC7B;IACF;EACF,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAIT,KAAwB,IAAK;EAC/D,MAAMU,WAAW,GAAGX,sBAAsB,CAACC,KAAK,CAAC;EACjD,OAAOH,kBAAkB,CAACa,WAAW,CAAC;AACxC,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "4.5.0-rc.
|
|
3
|
+
"version": "4.5.0-rc.8",
|
|
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": "
|
|
87
|
+
"gitHead": "873b3db45fb0ac71c8a2f122b999c6544c76bda9"
|
|
88
88
|
}
|
|
@@ -6,6 +6,7 @@ import { ChatContext, ChatContextValue } from '../../contexts/chat_context'
|
|
|
6
6
|
import { ApiClient, useApiClient } from '../../hooks/use_api_client'
|
|
7
7
|
import { useCanBrowseArchivedConversations } from '../../hooks/use_can_browse_archived_conversations'
|
|
8
8
|
import { currentPersonQueryKey, currentPersonRequestArgs } from '../../hooks/use_current_person'
|
|
9
|
+
import { availableFeatures } from '../../hooks/use_features'
|
|
9
10
|
import { Session } from '../../utils'
|
|
10
11
|
import { getFeaturesQueryKey } from '../../utils/request/get_features'
|
|
11
12
|
|
|
@@ -20,7 +21,7 @@ const session = new Session({ token: { access_token: 'a-real-token' } })
|
|
|
20
21
|
const renderWithFeatures = (enabledFlags: string[], cachedPerson?: object) => {
|
|
21
22
|
const queryClient = buildTestQueryClient()
|
|
22
23
|
if (cachedPerson) queryClient.setQueryData(currentPersonQueryKey, { data: cachedPerson })
|
|
23
|
-
queryClient.setQueryData(getFeaturesQueryKey(), {
|
|
24
|
+
queryClient.setQueryData(getFeaturesQueryKey(Object.values(availableFeatures)), {
|
|
24
25
|
data: enabledFlags.map((name, index) => ({
|
|
25
26
|
type: 'Feature',
|
|
26
27
|
id: `${index}`,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
2
2
|
import type { ApiClient } from '../../hooks/use_api_client'
|
|
3
3
|
import { availableFeatures, featuresQueryOptions } from '../../hooks/use_features'
|
|
4
|
+
import { chatReactNativeVersion } from '../../utils/package_version'
|
|
4
5
|
|
|
5
6
|
const features = {
|
|
6
7
|
data: [{ type: 'Feature', id: '1', name: 'QA_MOBILE_search', enabled: true }],
|
|
@@ -36,6 +37,19 @@ describe('featuresQueryOptions', () => {
|
|
|
36
37
|
jest.useRealTimers()
|
|
37
38
|
})
|
|
38
39
|
|
|
40
|
+
it('names every flag it reads, with its chat-react-native version', async () => {
|
|
41
|
+
const get = jest.fn().mockResolvedValue(features)
|
|
42
|
+
|
|
43
|
+
await buildTestQueryClient().fetchQuery(featuresQueryOptions(buildClient(get)))
|
|
44
|
+
|
|
45
|
+
const [{ headers, data }] = get.mock.calls[0]
|
|
46
|
+
expect(data.where.name.split(',')).toEqual(Object.values(availableFeatures))
|
|
47
|
+
expect(headers).toEqual({
|
|
48
|
+
'X-PCO-API-Version': '2026-10-26',
|
|
49
|
+
'X-PCO-Chat-React-Native-Version': chatReactNativeVersion,
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
39
53
|
it('keeps successful flags fresh for five minutes', async () => {
|
|
40
54
|
const get = jest.fn().mockResolvedValue(features)
|
|
41
55
|
|
|
@@ -2,6 +2,7 @@ import { QueryClientProvider } from '@tanstack/react-query'
|
|
|
2
2
|
import { renderHook } from '@testing-library/react-native'
|
|
3
3
|
import React from 'react'
|
|
4
4
|
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
5
|
+
import { availableFeatures } from '../../hooks/use_features'
|
|
5
6
|
import { useFilterDropdownEnabled } from '../../hooks/use_filter_dropdown_enabled'
|
|
6
7
|
import { getFeaturesQueryKey } from '../../utils/request/get_features'
|
|
7
8
|
|
|
@@ -9,7 +10,7 @@ jest.mock('../../hooks/use_api_client')
|
|
|
9
10
|
|
|
10
11
|
const renderWithFeatures = (enabledFlags: string[]) => {
|
|
11
12
|
const queryClient = buildTestQueryClient()
|
|
12
|
-
queryClient.setQueryData(getFeaturesQueryKey(), {
|
|
13
|
+
queryClient.setQueryData(getFeaturesQueryKey(Object.values(availableFeatures)), {
|
|
13
14
|
data: enabledFlags.map((name, index) => ({
|
|
14
15
|
type: 'Feature',
|
|
15
16
|
id: `${index}`,
|
|
@@ -32,10 +32,10 @@ export function useFeatures() {
|
|
|
32
32
|
|
|
33
33
|
export const featuresQueryOptions = (apiClient: ApiClient) =>
|
|
34
34
|
queryOptions({
|
|
35
|
-
queryKey: getFeaturesQueryKey(),
|
|
35
|
+
queryKey: getFeaturesQueryKey(featureNames),
|
|
36
36
|
queryFn: (): Promise<FeaturesCollection> => {
|
|
37
37
|
return apiClient.chat
|
|
38
|
-
.get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())
|
|
38
|
+
.get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs(featureNames))
|
|
39
39
|
.catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))
|
|
40
40
|
},
|
|
41
41
|
staleTime: query => {
|
|
@@ -63,6 +63,8 @@ export const availableFeatures = {
|
|
|
63
63
|
manual_archiving_rollout: 'ROLLOUT_MOBILE_manual_archiving',
|
|
64
64
|
} as const satisfies Record<string, `${'QA' | 'ROLLOUT'}_${string}`>
|
|
65
65
|
|
|
66
|
+
const featureNames = Object.values(availableFeatures)
|
|
67
|
+
|
|
66
68
|
const stableEmptyFeatures: ApiCollection<FeatureResource> = {
|
|
67
69
|
data: [],
|
|
68
70
|
links: {},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fireEvent, render, screen } from '@testing-library/react-native'
|
|
2
2
|
import React from 'react'
|
|
3
|
-
import { Pressable, Text } from 'react-native'
|
|
3
|
+
import { Pressable, StyleSheet, Text } from 'react-native'
|
|
4
4
|
import {
|
|
5
5
|
AudioAdapter,
|
|
6
6
|
ChatAdapters,
|
|
@@ -115,6 +115,25 @@ const setRouteParams = (params: Record<string, unknown>) => {
|
|
|
115
115
|
const menuItemNames = () =>
|
|
116
116
|
screen.getAllByRole('menuitem').map(item => item.props.accessibilityLabel)
|
|
117
117
|
|
|
118
|
+
const ROW_WIDTH = 360
|
|
119
|
+
const ROW_CONTENT_WIDTH = ROW_WIDTH - 16 * 2
|
|
120
|
+
const HEADING_ROW_GAP = 12
|
|
121
|
+
const WIDEST_LABEL_WIDTH = 150
|
|
122
|
+
|
|
123
|
+
const layOut = (testID: string, width: number) =>
|
|
124
|
+
fireEvent(screen.getByTestId(testID, { includeHiddenElements: true }), 'layout', {
|
|
125
|
+
nativeEvent: { layout: { width } },
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
const layOutHeader = ({ actionsWidth }: { actionsWidth: number }) => {
|
|
129
|
+
layOut('conversations-filter-heading-row', ROW_WIDTH)
|
|
130
|
+
layOut('conversations-filter-widest-label', WIDEST_LABEL_WIDTH)
|
|
131
|
+
layOut('conversations-filter-heading-actions', actionsWidth)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const triggerMaxWidth = (): number =>
|
|
135
|
+
StyleSheet.flatten(screen.getByRole('button', { name: 'All conversations' }).props.style).maxWidth
|
|
136
|
+
|
|
118
137
|
describe('FilterDropdownListHeaderComponent', () => {
|
|
119
138
|
beforeEach(() => {
|
|
120
139
|
mockNavigate.mockClear()
|
|
@@ -286,6 +305,45 @@ describe('FilterDropdownListHeaderComponent', () => {
|
|
|
286
305
|
)
|
|
287
306
|
})
|
|
288
307
|
|
|
308
|
+
it('caps the trigger short of the room beside the actions so a full label never wraps them', () => {
|
|
309
|
+
render(<FilterDropdownListHeaderComponent />)
|
|
310
|
+
|
|
311
|
+
layOutHeader({ actionsWidth: 120.4 })
|
|
312
|
+
|
|
313
|
+
expect(triggerMaxWidth()).toBeGreaterThanOrEqual(WIDEST_LABEL_WIDTH)
|
|
314
|
+
expect(triggerMaxWidth() + HEADING_ROW_GAP + 120.4).toBeLessThan(ROW_CONTENT_WIDTH)
|
|
315
|
+
})
|
|
316
|
+
|
|
317
|
+
it('holds the cap when the actions remeasure by less than a point', () => {
|
|
318
|
+
render(<FilterDropdownListHeaderComponent />)
|
|
319
|
+
|
|
320
|
+
layOutHeader({ actionsWidth: 120.4 })
|
|
321
|
+
const capBefore = triggerMaxWidth()
|
|
322
|
+
|
|
323
|
+
layOut('conversations-filter-heading-actions', 120.9)
|
|
324
|
+
|
|
325
|
+
expect(triggerMaxWidth()).toBe(capBefore)
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
it('recomputes the cap when the actions grow by a button', () => {
|
|
329
|
+
render(<FilterDropdownListHeaderComponent />)
|
|
330
|
+
|
|
331
|
+
layOutHeader({ actionsWidth: 120.4 })
|
|
332
|
+
const capBefore = triggerMaxWidth()
|
|
333
|
+
|
|
334
|
+
layOut('conversations-filter-heading-actions', 160)
|
|
335
|
+
|
|
336
|
+
expect(triggerMaxWidth()).toBeLessThan(capBefore)
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
it('caps the trigger to the row once All conversations no longer fits beside the actions', () => {
|
|
340
|
+
render(<FilterDropdownListHeaderComponent />)
|
|
341
|
+
|
|
342
|
+
layOutHeader({ actionsWidth: 200 })
|
|
343
|
+
|
|
344
|
+
expect(triggerMaxWidth()).toBe(ROW_CONTENT_WIDTH)
|
|
345
|
+
})
|
|
346
|
+
|
|
289
347
|
it('shows the search button only when search is enabled', () => {
|
|
290
348
|
mockSearchEnabled.mockReturnValue(false)
|
|
291
349
|
const view = render(<FilterDropdownListHeaderComponent />)
|
|
@@ -30,6 +30,8 @@ import { ListHeaderActionButton } from './list_header_action_button'
|
|
|
30
30
|
|
|
31
31
|
const ROW_PADDING_HORIZONTAL = 16
|
|
32
32
|
const HEADING_ROW_GAP = 12
|
|
33
|
+
const TRIGGER_CAP_SLACK = 2
|
|
34
|
+
const LAYOUT_JITTER = 1
|
|
33
35
|
const ALL_CONVERSATIONS_LABEL = 'All conversations'
|
|
34
36
|
const ARCHIVED_LABEL = 'Archived'
|
|
35
37
|
|
|
@@ -42,6 +44,9 @@ enum FilterTypes {
|
|
|
42
44
|
More = 'More',
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
const holdSubPointJitter = (previous: number | undefined, next: number) =>
|
|
48
|
+
previous !== undefined && Math.abs(next - previous) < LAYOUT_JITTER ? previous : next
|
|
49
|
+
|
|
45
50
|
const FILTER_PARAMS: Record<Exclude<FilterTypes, FilterTypes.More>, ConversationFiltersParams> = {
|
|
46
51
|
[FilterTypes.All]: {},
|
|
47
52
|
[FilterTypes.Groups]: { group_source_app_name: 'Groups' },
|
|
@@ -217,14 +222,14 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
217
222
|
const [rowWidth, setRowWidth] = useState<number>()
|
|
218
223
|
const [actionsWidth, setActionsWidth] = useState<number>()
|
|
219
224
|
const [widestFixedLabelWidth, setWidestFixedLabelWidth] = useState<number>()
|
|
220
|
-
const handleRowLayout = useCallback((
|
|
221
|
-
setRowWidth(
|
|
225
|
+
const handleRowLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {
|
|
226
|
+
setRowWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))
|
|
222
227
|
}, [])
|
|
223
|
-
const handleActionsLayout = useCallback((
|
|
224
|
-
setActionsWidth(
|
|
228
|
+
const handleActionsLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {
|
|
229
|
+
setActionsWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))
|
|
225
230
|
}, [])
|
|
226
|
-
const handleWidestFixedLabelLayout = useCallback((
|
|
227
|
-
setWidestFixedLabelWidth(
|
|
231
|
+
const handleWidestFixedLabelLayout = useCallback(({ nativeEvent }: LayoutChangeEvent) => {
|
|
232
|
+
setWidestFixedLabelWidth(previous => holdSubPointJitter(previous, nativeEvent.layout.width))
|
|
228
233
|
}, [])
|
|
229
234
|
const triggerMaxWidth = useMemo(() => {
|
|
230
235
|
if (rowWidth === undefined) return undefined
|
|
@@ -232,7 +237,8 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
232
237
|
const rowContentWidth = rowWidth - ROW_PADDING_HORIZONTAL * 2
|
|
233
238
|
if (actionsWidth === undefined || widestFixedLabelWidth === undefined) return rowContentWidth
|
|
234
239
|
|
|
235
|
-
const roomBesideActions =
|
|
240
|
+
const roomBesideActions =
|
|
241
|
+
Math.floor(rowContentWidth - actionsWidth - HEADING_ROW_GAP) - TRIGGER_CAP_SLACK
|
|
236
242
|
return roomBesideActions >= widestFixedLabelWidth ? roomBesideActions : rowContentWidth
|
|
237
243
|
}, [rowWidth, actionsWidth, widestFixedLabelWidth])
|
|
238
244
|
|
|
@@ -242,11 +248,16 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
242
248
|
<FilterDropdownTrigger
|
|
243
249
|
label={ALL_CONVERSATIONS_LABEL}
|
|
244
250
|
onLayout={handleWidestFixedLabelLayout}
|
|
251
|
+
testID="conversations-filter-widest-label"
|
|
245
252
|
accessibilityElementsHidden
|
|
246
253
|
importantForAccessibility="no-hide-descendants"
|
|
247
254
|
/>
|
|
248
255
|
</View>
|
|
249
|
-
<View
|
|
256
|
+
<View
|
|
257
|
+
style={styles.headingRow}
|
|
258
|
+
onLayout={handleRowLayout}
|
|
259
|
+
testID="conversations-filter-heading-row"
|
|
260
|
+
>
|
|
250
261
|
<View style={styles.titleContainer}>
|
|
251
262
|
<FilterDropdown
|
|
252
263
|
options={options}
|
|
@@ -258,7 +269,11 @@ export const FilterDropdownListHeaderComponent = () => {
|
|
|
258
269
|
maxWidth={triggerMaxWidth}
|
|
259
270
|
/>
|
|
260
271
|
</View>
|
|
261
|
-
<View
|
|
272
|
+
<View
|
|
273
|
+
style={styles.actionsContainer}
|
|
274
|
+
onLayout={handleActionsLayout}
|
|
275
|
+
testID="conversations-filter-heading-actions"
|
|
276
|
+
>
|
|
262
277
|
<ListHeaderActionButton
|
|
263
278
|
name="general.cog"
|
|
264
279
|
onPress={handleChatSettings}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { getRequestQueryKey } from '../../hooks/use_suspense_api'
|
|
2
|
+
import { chatReactNativeVersion } from '../package_version'
|
|
2
3
|
|
|
3
|
-
export const getFeaturesRequestArgs = () => {
|
|
4
|
+
export const getFeaturesRequestArgs = (names: readonly string[]) => {
|
|
4
5
|
const url = '/me/features'
|
|
5
6
|
|
|
6
7
|
return {
|
|
7
8
|
url,
|
|
9
|
+
headers: {
|
|
10
|
+
'X-PCO-API-Version': '2026-10-26',
|
|
11
|
+
'X-PCO-Chat-React-Native-Version': chatReactNativeVersion,
|
|
12
|
+
},
|
|
8
13
|
data: {
|
|
9
|
-
|
|
14
|
+
where: {
|
|
15
|
+
name: names.join(','),
|
|
16
|
+
},
|
|
10
17
|
fields: {
|
|
11
18
|
Feature: ['name', 'enabled'],
|
|
12
19
|
},
|
|
@@ -14,7 +21,7 @@ export const getFeaturesRequestArgs = () => {
|
|
|
14
21
|
}
|
|
15
22
|
}
|
|
16
23
|
|
|
17
|
-
export const getFeaturesQueryKey = () => {
|
|
18
|
-
const requestArgs = getFeaturesRequestArgs()
|
|
24
|
+
export const getFeaturesQueryKey = (names: readonly string[]) => {
|
|
25
|
+
const requestArgs = getFeaturesRequestArgs(names)
|
|
19
26
|
return getRequestQueryKey(requestArgs)
|
|
20
27
|
}
|