@planningcenter/chat-react-native 4.4.1-qa-staging.24 → 4.4.1-qa-staging.26

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.
@@ -9,6 +9,11 @@ export interface FilterDropdownProps {
9
9
  onMoreFilters: () => void;
10
10
  triggerLabel: string;
11
11
  showMoreFilters?: boolean;
12
+ /**
13
+ * Widest the trigger may render, in points. Hosts that measure the trigger at its intrinsic
14
+ * width need this for the label to truncate.
15
+ */
16
+ maxWidth?: number;
12
17
  }
13
- export declare function FilterDropdown({ options, selectedId, onSelect, onMoreFilters, triggerLabel, showMoreFilters, }: FilterDropdownProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function FilterDropdown({ options, selectedId, onSelect, onMoreFilters, triggerLabel, showMoreFilters, maxWidth, }: FilterDropdownProps): import("react/jsx-runtime").JSX.Element;
14
19
  //# sourceMappingURL=filter_dropdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter_dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/display/filter_dropdown.tsx"],"names":[],"mappings":"AAyBA,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;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,eAAsB,GACvB,EAAE,mBAAmB,2CAgDrB"}
1
+ {"version":3,"file":"filter_dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/display/filter_dropdown.tsx"],"names":[],"mappings":"AAyBA,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,2CAgDrB"}
@@ -19,14 +19,15 @@ const MORE_FILTERS_LABEL = 'More filters';
19
19
  // =================================
20
20
 
21
21
  export function FilterDropdown(t0) {
22
- const $ = _c(24);
22
+ const $ = _c(29);
23
23
  const {
24
24
  options,
25
25
  selectedId,
26
26
  onSelect,
27
27
  onMoreFilters,
28
28
  triggerLabel,
29
- showMoreFilters: t1
29
+ showMoreFilters: t1,
30
+ maxWidth
30
31
  } = t0;
31
32
  const showMoreFilters = t1 === undefined ? true : t1;
32
33
  const styles = useStyles();
@@ -90,65 +91,84 @@ export function FilterDropdown(t0) {
90
91
  }
91
92
  const handlePressAction = t3;
92
93
  let t4;
93
- if ($[10] !== styles.triggerLabel || $[11] !== triggerLabel) {
94
- t4 = /*#__PURE__*/_jsx(Text, {
94
+ if ($[10] !== maxWidth) {
95
+ t4 = maxWidth !== undefined && {
96
+ maxWidth
97
+ };
98
+ $[10] = maxWidth;
99
+ $[11] = t4;
100
+ } else {
101
+ t4 = $[11];
102
+ }
103
+ let t5;
104
+ if ($[12] !== styles.trigger || $[13] !== t4) {
105
+ t5 = [styles.trigger, t4];
106
+ $[12] = styles.trigger;
107
+ $[13] = t4;
108
+ $[14] = t5;
109
+ } else {
110
+ t5 = $[14];
111
+ }
112
+ let t6;
113
+ if ($[15] !== styles.triggerLabel || $[16] !== triggerLabel) {
114
+ t6 = /*#__PURE__*/_jsx(Text, {
95
115
  style: styles.triggerLabel,
96
116
  numberOfLines: 1,
97
117
  maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK,
98
118
  children: triggerLabel
99
119
  });
100
- $[10] = styles.triggerLabel;
101
- $[11] = triggerLabel;
102
- $[12] = t4;
120
+ $[15] = styles.triggerLabel;
121
+ $[16] = triggerLabel;
122
+ $[17] = t6;
103
123
  } else {
104
- t4 = $[12];
124
+ t6 = $[17];
105
125
  }
106
- let t5;
107
- if ($[13] !== styles.triggerIcon) {
108
- t5 = /*#__PURE__*/_jsx(Icon, {
126
+ let t7;
127
+ if ($[18] !== styles.triggerIcon) {
128
+ t7 = /*#__PURE__*/_jsx(Icon, {
109
129
  name: "general.downChevron",
110
130
  style: styles.triggerIcon,
111
131
  maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK,
112
132
  accessibilityElementsHidden: true
113
133
  });
114
- $[13] = styles.triggerIcon;
115
- $[14] = t5;
134
+ $[18] = styles.triggerIcon;
135
+ $[19] = t7;
116
136
  } else {
117
- t5 = $[14];
137
+ t7 = $[19];
118
138
  }
119
- let t6;
120
- if ($[15] !== styles.trigger || $[16] !== t4 || $[17] !== t5) {
121
- t6 = /*#__PURE__*/_jsxs(View, {
122
- style: styles.trigger,
139
+ let t8;
140
+ if ($[20] !== t5 || $[21] !== t6 || $[22] !== t7) {
141
+ t8 = /*#__PURE__*/_jsxs(View, {
142
+ style: t5,
123
143
  accessible: true,
124
144
  accessibilityRole: "button",
125
145
  accessibilityHint: "Opens filter options",
126
- children: [t4, t5]
146
+ children: [t6, t7]
127
147
  });
128
- $[15] = styles.trigger;
129
- $[16] = t4;
130
- $[17] = t5;
131
- $[18] = t6;
148
+ $[20] = t5;
149
+ $[21] = t6;
150
+ $[22] = t7;
151
+ $[23] = t8;
132
152
  } else {
133
- t6 = $[18];
153
+ t8 = $[23];
134
154
  }
135
- let t7;
136
- if ($[19] !== actions || $[20] !== handlePressAction || $[21] !== styles.container || $[22] !== t6) {
137
- t7 = /*#__PURE__*/_jsx(Menu.View, {
155
+ let t9;
156
+ if ($[24] !== actions || $[25] !== handlePressAction || $[26] !== styles.container || $[27] !== t8) {
157
+ t9 = /*#__PURE__*/_jsx(Menu.View, {
138
158
  actions: actions,
139
159
  onPressAction: handlePressAction,
140
160
  style: styles.container,
141
- children: t6
161
+ children: t8
142
162
  });
143
- $[19] = actions;
144
- $[20] = handlePressAction;
145
- $[21] = styles.container;
146
- $[22] = t6;
147
- $[23] = t7;
163
+ $[24] = actions;
164
+ $[25] = handlePressAction;
165
+ $[26] = styles.container;
166
+ $[27] = t8;
167
+ $[28] = t9;
148
168
  } else {
149
- t7 = $[23];
169
+ t9 = $[28];
150
170
  }
151
- return t7;
171
+ return t9;
152
172
  }
153
173
 
154
174
  // =================================
@@ -1 +1 @@
1
- {"version":3,"file":"filter_dropdown.js","names":["React","StyleSheet","View","useTheme","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Menu","platformFontWeightBold","tokens","Icon","Text","jsx","_jsx","jsxs","_jsxs","MORE_FILTERS_ID","MORE_FILTERS_LABEL","FilterDropdown","t0","$","_c","options","selectedId","onSelect","onMoreFilters","triggerLabel","showMoreFilters","t1","undefined","styles","useStyles","t2","t3","option","id","title","label","state","optionActions","map","t4","Symbol","for","displayInline","subactions","moreFiltersAction","actions","nativeEvent","event","handlePressAction","style","numberOfLines","children","t5","triggerIcon","name","accessibilityElementsHidden","t6","trigger","accessible","accessibilityRole","accessibilityHint","t7","container","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 { 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 { 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\nexport function FilterDropdown({\n options,\n selectedId,\n onSelect,\n onMoreFilters,\n triggerLabel,\n showMoreFilters = true,\n}: FilterDropdownProps) {\n const styles = useStyles()\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 <Menu.View actions={actions} onPressAction={handlePressAction} style={styles.container}>\n <View\n style={styles.trigger}\n accessible\n accessibilityRole=\"button\"\n accessibilityHint=\"Opens filter options\"\n >\n <Text\n style={styles.triggerLabel}\n numberOfLines={1}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n >\n {triggerLabel}\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 </Menu.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","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","t2","t3","option","id","title","label","state","optionActions","map","t4","Symbol","for","displayInline","subactions","moreFiltersAction","actions","nativeEvent","event","handlePressAction","t5","trigger","t6","style","numberOfLines","children","t7","triggerIcon","name","accessibilityElementsHidden","t8","accessible","accessibilityRole","accessibilityHint","t9","container","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 { 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 { 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\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 <Menu.View actions={actions} onPressAction={handlePressAction} style={styles.container}>\n <View\n style={[styles.trigger, maxWidth !== undefined && { maxWidth }]}\n accessible\n accessibilityRole=\"button\"\n accessibilityHint=\"Opens filter options\"\n >\n <Text\n style={styles.triggerLabel}\n numberOfLines={1}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n >\n {triggerLabel}\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 </Menu.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 +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":"AA6CA,eAAO,MAAM,iCAAiC,+CA6M7C,CAAA"}
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":"AA+CA,eAAO,MAAM,iCAAiC,+CAsO7C,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
2
  import { useNavigation, useRoute } from '@react-navigation/native';
3
- import React, { useCallback, useMemo } from 'react';
3
+ import React, { useCallback, useMemo, useState } from 'react';
4
4
  import { Alert, StyleSheet, View } from 'react-native';
5
5
  import { FilterDropdown, TextButton } from '../../../components';
6
- import { useAtFontScaleBreakpoint, useCanBrowseArchivedConversations, useCanCreateConversations, useCurrentPersonCache, useDirectMessagesEligible, useHasDirectMessages, useNewConversationEntry, useTheme } from '../../../hooks';
6
+ import { useCanBrowseArchivedConversations, useCanCreateConversations, useCurrentPersonCache, useDirectMessagesEligible, useFontScale, useHasDirectMessages, useNewConversationEntry, useTheme } from '../../../hooks';
7
7
  import { useApiGet } from '../../../hooks/use_api';
8
8
  import { useMarkAllRead } from '../../../hooks/use_conversations_actions';
9
9
  import { useCanDisplayGroups } from '../../../hooks/use_groups';
@@ -14,6 +14,8 @@ import { Haptic } from '../../../utils/native_adapters';
14
14
  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
+ const HEADING_ROW_GAP = 12;
18
+ const DEFAULT_FONT_SCALE = 1;
17
19
  const ALL_CONVERSATIONS_LABEL = 'All conversations';
18
20
  const ARCHIVED_LABEL = 'Archived';
19
21
  var FilterTypes = /*#__PURE__*/function (FilterTypes) {
@@ -37,7 +39,7 @@ const FILTER_PARAMS = {
37
39
  }
38
40
  };
39
41
  export const FilterDropdownListHeaderComponent = () => {
40
- const $ = _c(89);
42
+ const $ = _c(94);
41
43
  const navigation = useNavigation();
42
44
  let t0;
43
45
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
@@ -394,113 +396,153 @@ export const FilterDropdownListHeaderComponent = () => {
394
396
  }
395
397
  const alertMarkAllRead = t24;
396
398
  const showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived;
397
- const styles = useStyles();
399
+ const stacked = useFontScale() > DEFAULT_FONT_SCALE;
398
400
  let t25;
399
- if ($[53] !== active || $[54] !== handleOpenConversationFilters || $[55] !== handleSelectFilter || $[56] !== options || $[57] !== showMoreFilters || $[58] !== triggerLabel) {
400
- t25 = /*#__PURE__*/_jsx(FilterDropdown, {
401
+ if ($[53] !== stacked) {
402
+ t25 = {
403
+ stacked
404
+ };
405
+ $[53] = stacked;
406
+ $[54] = t25;
407
+ } else {
408
+ t25 = $[54];
409
+ }
410
+ const styles = useStyles(t25);
411
+ const [rowWidth, setRowWidth] = useState();
412
+ const [actionsWidth, setActionsWidth] = useState();
413
+ let t26;
414
+ if ($[55] === Symbol.for("react.memo_cache_sentinel")) {
415
+ t26 = event => {
416
+ setRowWidth(event.nativeEvent.layout.width);
417
+ };
418
+ $[55] = t26;
419
+ } else {
420
+ t26 = $[55];
421
+ }
422
+ const handleRowLayout = t26;
423
+ let t27;
424
+ if ($[56] === Symbol.for("react.memo_cache_sentinel")) {
425
+ t27 = event_0 => {
426
+ setActionsWidth(event_0.nativeEvent.layout.width);
427
+ };
428
+ $[56] = t27;
429
+ } else {
430
+ t27 = $[56];
431
+ }
432
+ const handleActionsLayout = t27;
433
+ const triggerMaxWidth = !stacked && rowWidth !== undefined && actionsWidth !== undefined ? rowWidth - ROW_PADDING_HORIZONTAL * 2 - actionsWidth - HEADING_ROW_GAP : undefined;
434
+ let t28;
435
+ if ($[57] !== active || $[58] !== handleOpenConversationFilters || $[59] !== handleSelectFilter || $[60] !== options || $[61] !== showMoreFilters || $[62] !== triggerLabel || $[63] !== triggerMaxWidth) {
436
+ t28 = /*#__PURE__*/_jsx(FilterDropdown, {
401
437
  options: options,
402
438
  selectedId: active,
403
439
  onSelect: handleSelectFilter,
404
440
  onMoreFilters: handleOpenConversationFilters,
405
441
  showMoreFilters: showMoreFilters,
406
- triggerLabel: triggerLabel
442
+ triggerLabel: triggerLabel,
443
+ maxWidth: triggerMaxWidth
407
444
  });
408
- $[53] = active;
409
- $[54] = handleOpenConversationFilters;
410
- $[55] = handleSelectFilter;
411
- $[56] = options;
412
- $[57] = showMoreFilters;
413
- $[58] = triggerLabel;
414
- $[59] = t25;
445
+ $[57] = active;
446
+ $[58] = handleOpenConversationFilters;
447
+ $[59] = handleSelectFilter;
448
+ $[60] = options;
449
+ $[61] = showMoreFilters;
450
+ $[62] = triggerLabel;
451
+ $[63] = triggerMaxWidth;
452
+ $[64] = t28;
415
453
  } else {
416
- t25 = $[59];
454
+ t28 = $[64];
417
455
  }
418
- let t26;
419
- if ($[60] !== styles.titleContainer || $[61] !== t25) {
420
- t26 = /*#__PURE__*/_jsx(View, {
456
+ let t29;
457
+ if ($[65] !== styles.titleContainer || $[66] !== t28) {
458
+ t29 = /*#__PURE__*/_jsx(View, {
421
459
  style: styles.titleContainer,
422
- children: t25
460
+ children: t28
423
461
  });
424
- $[60] = styles.titleContainer;
425
- $[61] = t25;
426
- $[62] = t26;
462
+ $[65] = styles.titleContainer;
463
+ $[66] = t28;
464
+ $[67] = t29;
427
465
  } else {
428
- t26 = $[62];
466
+ t29 = $[67];
429
467
  }
430
- let t27;
431
- if ($[63] !== handleChatSettings) {
432
- t27 = /*#__PURE__*/_jsx(ListHeaderActionButton, {
468
+ let t30;
469
+ if ($[68] !== handleChatSettings) {
470
+ t30 = /*#__PURE__*/_jsx(ListHeaderActionButton, {
433
471
  name: "general.cog",
434
472
  onPress: handleChatSettings,
435
473
  accessibilityLabel: "Chat settings",
436
474
  testID: "conversations-chat-settings-button",
437
475
  maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK
438
476
  });
439
- $[63] = handleChatSettings;
440
- $[64] = t27;
477
+ $[68] = handleChatSettings;
478
+ $[69] = t30;
441
479
  } else {
442
- t27 = $[64];
480
+ t30 = $[69];
443
481
  }
444
- let t28;
445
- if ($[65] !== canCreateConversations || $[66] !== handleNewConversationNavigation) {
446
- t28 = canCreateConversations && /*#__PURE__*/_jsx(ListHeaderActionButton, {
482
+ let t31;
483
+ if ($[70] !== canCreateConversations || $[71] !== handleNewConversationNavigation) {
484
+ t31 = canCreateConversations && /*#__PURE__*/_jsx(ListHeaderActionButton, {
447
485
  name: "churchCenter.signups",
448
486
  onPress: handleNewConversationNavigation,
449
487
  accessibilityLabel: "New conversation",
450
488
  testID: "conversations-new-conversation-button",
451
489
  maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK
452
490
  });
453
- $[65] = canCreateConversations;
454
- $[66] = handleNewConversationNavigation;
455
- $[67] = t28;
491
+ $[70] = canCreateConversations;
492
+ $[71] = handleNewConversationNavigation;
493
+ $[72] = t31;
456
494
  } else {
457
- t28 = $[67];
495
+ t31 = $[72];
458
496
  }
459
- let t29;
460
- if ($[68] !== handleSearch || $[69] !== searchEnabled) {
461
- t29 = searchEnabled && /*#__PURE__*/_jsx(ListHeaderActionButton, {
497
+ let t32;
498
+ if ($[73] !== handleSearch || $[74] !== searchEnabled) {
499
+ t32 = searchEnabled && /*#__PURE__*/_jsx(ListHeaderActionButton, {
462
500
  name: "general.search",
463
501
  onPress: handleSearch,
464
502
  accessibilityLabel: "Search",
465
503
  testID: "conversations-search-button",
466
504
  maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK
467
505
  });
468
- $[68] = handleSearch;
469
- $[69] = searchEnabled;
470
- $[70] = t29;
506
+ $[73] = handleSearch;
507
+ $[74] = searchEnabled;
508
+ $[75] = t32;
471
509
  } else {
472
- t29 = $[70];
510
+ t32 = $[75];
473
511
  }
474
- let t30;
475
- if ($[71] !== styles.actionsContainer || $[72] !== t27 || $[73] !== t28 || $[74] !== t29) {
476
- t30 = /*#__PURE__*/_jsxs(View, {
512
+ let t33;
513
+ if ($[76] !== styles.actionsContainer || $[77] !== t30 || $[78] !== t31 || $[79] !== t32) {
514
+ t33 = /*#__PURE__*/_jsxs(View, {
477
515
  style: styles.actionsContainer,
478
- children: [t27, t28, t29]
516
+ onLayout: handleActionsLayout,
517
+ testID: "conversations-filter-actions",
518
+ children: [t30, t31, t32]
479
519
  });
480
- $[71] = styles.actionsContainer;
481
- $[72] = t27;
482
- $[73] = t28;
483
- $[74] = t29;
484
- $[75] = t30;
520
+ $[76] = styles.actionsContainer;
521
+ $[77] = t30;
522
+ $[78] = t31;
523
+ $[79] = t32;
524
+ $[80] = t33;
485
525
  } else {
486
- t30 = $[75];
526
+ t33 = $[80];
487
527
  }
488
- let t31;
489
- if ($[76] !== styles.headingRow || $[77] !== t26 || $[78] !== t30) {
490
- t31 = /*#__PURE__*/_jsxs(View, {
528
+ let t34;
529
+ if ($[81] !== styles.headingRow || $[82] !== t29 || $[83] !== t33) {
530
+ t34 = /*#__PURE__*/_jsxs(View, {
491
531
  style: styles.headingRow,
492
- children: [t26, t30]
532
+ onLayout: handleRowLayout,
533
+ testID: "conversations-filter-heading-row",
534
+ children: [t29, t33]
493
535
  });
494
- $[76] = styles.headingRow;
495
- $[77] = t26;
496
- $[78] = t30;
497
- $[79] = t31;
536
+ $[81] = styles.headingRow;
537
+ $[82] = t29;
538
+ $[83] = t33;
539
+ $[84] = t34;
498
540
  } else {
499
- t31 = $[79];
541
+ t34 = $[84];
500
542
  }
501
- let t32;
502
- if ($[80] !== alertMarkAllRead || $[81] !== isPending || $[82] !== show_archived || $[83] !== styles.markAllReadRow) {
503
- t32 = !show_archived && /*#__PURE__*/_jsx(View, {
543
+ let t35;
544
+ if ($[85] !== alertMarkAllRead || $[86] !== isPending || $[87] !== show_archived || $[88] !== styles.markAllReadRow) {
545
+ t35 = !show_archived && /*#__PURE__*/_jsx(View, {
504
546
  style: styles.markAllReadRow,
505
547
  children: /*#__PURE__*/_jsx(TextButton, {
506
548
  onPress: alertMarkAllRead,
@@ -511,36 +553,38 @@ export const FilterDropdownListHeaderComponent = () => {
511
553
  children: "Mark all read"
512
554
  })
513
555
  });
514
- $[80] = alertMarkAllRead;
515
- $[81] = isPending;
516
- $[82] = show_archived;
517
- $[83] = styles.markAllReadRow;
518
- $[84] = t32;
556
+ $[85] = alertMarkAllRead;
557
+ $[86] = isPending;
558
+ $[87] = show_archived;
559
+ $[88] = styles.markAllReadRow;
560
+ $[89] = t35;
519
561
  } else {
520
- t32 = $[84];
562
+ t35 = $[89];
521
563
  }
522
- let t33;
523
- if ($[85] !== styles.listHeader || $[86] !== t31 || $[87] !== t32) {
524
- t33 = /*#__PURE__*/_jsxs(View, {
564
+ let t36;
565
+ if ($[90] !== styles.listHeader || $[91] !== t34 || $[92] !== t35) {
566
+ t36 = /*#__PURE__*/_jsxs(View, {
525
567
  style: styles.listHeader,
526
- children: [t31, t32]
568
+ children: [t34, t35]
527
569
  });
528
- $[85] = styles.listHeader;
529
- $[86] = t31;
530
- $[87] = t32;
531
- $[88] = t33;
570
+ $[90] = styles.listHeader;
571
+ $[91] = t34;
572
+ $[92] = t35;
573
+ $[93] = t36;
532
574
  } else {
533
- t33 = $[88];
575
+ t36 = $[93];
534
576
  }
535
- return t33;
577
+ return t36;
536
578
  };
537
- const useStyles = () => {
579
+ const useStyles = t0 => {
538
580
  const $ = _c(3);
581
+ const {
582
+ stacked
583
+ } = t0;
539
584
  const theme = useTheme();
540
- const atFontScaleBreakpoint = useAtFontScaleBreakpoint();
541
- let t0;
542
- if ($[0] !== atFontScaleBreakpoint || $[1] !== theme.colors.fillColorNeutral050Base) {
543
- t0 = StyleSheet.create({
585
+ let t1;
586
+ if ($[0] !== stacked || $[1] !== theme.colors.fillColorNeutral050Base) {
587
+ t1 = StyleSheet.create({
544
588
  listHeader: {
545
589
  borderBottomWidth: 1,
546
590
  borderBottomColor: theme.colors.fillColorNeutral050Base,
@@ -548,11 +592,11 @@ const useStyles = () => {
548
592
  gap: 8
549
593
  },
550
594
  headingRow: {
551
- gap: 12,
552
- flexDirection: atFontScaleBreakpoint ? "column" : "row",
553
- alignItems: atFontScaleBreakpoint ? "flex-start" : "center",
595
+ gap: HEADING_ROW_GAP,
596
+ flexDirection: stacked ? "column" : "row",
597
+ alignItems: stacked ? "flex-start" : "center",
554
598
  justifyContent: "space-between",
555
- paddingBottom: atFontScaleBreakpoint ? 4 : 0,
599
+ paddingBottom: stacked ? 4 : 0,
556
600
  paddingHorizontal: ROW_PADDING_HORIZONTAL
557
601
  },
558
602
  titleContainer: {
@@ -569,12 +613,12 @@ const useStyles = () => {
569
613
  paddingHorizontal: ROW_PADDING_HORIZONTAL
570
614
  }
571
615
  });
572
- $[0] = atFontScaleBreakpoint;
616
+ $[0] = stacked;
573
617
  $[1] = theme.colors.fillColorNeutral050Base;
574
- $[2] = t0;
618
+ $[2] = t1;
575
619
  } else {
576
- t0 = $[2];
620
+ t1 = $[2];
577
621
  }
578
- return t0;
622
+ return t1;
579
623
  };
580
624
  //# sourceMappingURL=filter_dropdown_list_header_component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter_dropdown_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","Alert","StyleSheet","View","FilterDropdown","TextButton","useAtFontScaleBreakpoint","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","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","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","options","t15","name","t16","triggerLabel","t17","navigate","screen","handleNewConversationNavigation","t18","setParams","handleSetFilter","t19","params_0","handleSelectFilter","t20","handleSearch","t21","handleChatSettings","t22","handleOpenConversationFilters","t23","update","unreadCount","notificationSuccess","handleMarkAllRead","t24","alert","text","onPress","alertMarkAllRead","showMoreFilters","styles","useStyles","t25","t26","titleContainer","style","children","t27","accessibilityLabel","testID","t28","t29","t30","actionsContainer","t31","headingRow","t32","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t33","listHeader","theme","atFontScaleBreakpoint","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","flexShrink","minWidth"],"sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo } from 'react'\nimport { Alert, StyleSheet, View } from 'react-native'\nimport { FilterDropdown, FilterDropdownOption, TextButton } from '../../../components'\nimport {\n useAtFontScaleBreakpoint,\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 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 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}\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 } = 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 }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived])\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 ],\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 ...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 })\n }, [navigation, chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived])\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 return (\n <View style={styles.listHeader}>\n <View style={styles.headingRow}>\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 />\n </View>\n <View style={styles.actionsContainer}>\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 const atFontScaleBreakpoint = useAtFontScaleBreakpoint()\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: 12,\n flexDirection: atFontScaleBreakpoint ? 'column' : 'row',\n alignItems: atFontScaleBreakpoint ? 'flex-start' : 'center',\n justifyContent: 'space-between',\n paddingBottom: atFontScaleBreakpoint ? 4 : 0,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n flexShrink: 1,\n minWidth: 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","TextButton","useCanBrowseArchivedConversations","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useFontScale","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","DEFAULT_FONT_SCALE","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","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","options","t15","name","t16","triggerLabel","t17","navigate","screen","handleNewConversationNavigation","t18","setParams","handleSetFilter","t19","params_0","handleSelectFilter","t20","handleSearch","t21","handleChatSettings","t22","handleOpenConversationFilters","t23","update","unreadCount","notificationSuccess","handleMarkAllRead","t24","alert","text","onPress","alertMarkAllRead","showMoreFilters","stacked","t25","styles","useStyles","rowWidth","setRowWidth","actionsWidth","setActionsWidth","t26","event","nativeEvent","layout","width","handleRowLayout","t27","event_0","handleActionsLayout","triggerMaxWidth","t28","t29","titleContainer","style","children","t30","accessibilityLabel","testID","t31","t32","t33","actionsContainer","t34","headingRow","t35","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t36","listHeader","theme","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","flexShrink","minWidth"],"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 { FilterDropdown, FilterDropdownOption, TextButton } from '../../../components'\nimport {\n useCanBrowseArchivedConversations,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useFontScale,\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 DEFAULT_FONT_SCALE = 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 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}\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 } = 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 }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived])\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 ],\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 ...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 })\n }, [navigation, chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived])\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 stacked = useFontScale() > DEFAULT_FONT_SCALE\n const styles = useStyles({ stacked })\n\n // The Android menu host measures the trigger at its intrinsic width, so flex shrinking never\n // truncates the label. Cap it to the room left beside the action buttons instead.\n const [rowWidth, setRowWidth] = useState<number>()\n const [actionsWidth, setActionsWidth] = 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 triggerMaxWidth =\n !stacked && rowWidth !== undefined && actionsWidth !== undefined\n ? rowWidth - ROW_PADDING_HORIZONTAL * 2 - actionsWidth - HEADING_ROW_GAP\n : undefined\n\n return (\n <View style={styles.listHeader}>\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-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 = ({ stacked }: { stacked: boolean }) => {\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: stacked ? 'column' : 'row',\n alignItems: stacked ? 'flex-start' : 'center',\n justifyContent: 'space-between',\n paddingBottom: stacked ? 4 : 0,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n flexShrink: 1,\n minWidth: 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":";AAAA,SAAoBA,aAAa,EAAEC,QAAQ,QAAQ,0BAA0B;AAC7E,OAAOC,KAAK,IAAIC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAC7D,SAASC,KAAK,EAAqBC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACzE,SAASC,cAAc,EAAwBC,UAAU,QAAQ,qBAAqB;AACtF,SACEC,iCAAiC,EACjCC,yBAAyB,EACzBC,qBAAqB,EACrBC,yBAAyB,EACzBC,YAAY,EACZC,oBAAoB,EACpBC,uBAAuB,EACvBC,QAAQ,QACH,gBAAgB;AACvB,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,cAAc,QAAQ,0CAA0C;AACzE,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,4BAA4B,QAAQ,iDAAiD;AAC9F,SAASC,gBAAgB,QAAQ,mCAAmC;AAEpE,SAASC,iCAAiC,QAAQ,gBAAgB;AAClE,SAASC,MAAM,QAAQ,gCAAgC;AAGvD,SAASC,sBAAsB,QAAQ,6BAA6B;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEpE,MAAMC,sBAAsB,GAAG,EAAE;AACjC,MAAMC,eAAe,GAAG,EAAE;AAC1B,MAAMC,kBAAkB,GAAG,CAAC;AAC5B,MAAMC,uBAAuB,GAAG,mBAAmB;AACnD,MAAMC,cAAc,GAAG,UAAU;AAAA,IAE5BC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA,EAAXA,WAAW;AAQhB,MAAMC,aAAwF,GAAG;EAC/F,CAACD,WAAW,CAACE,GAAG,GAAG,CAAC,CAAC;EACrB,CAACF,WAAW,CAACG,MAAM,GAAG;IAAEC,qBAAqB,EAAE;EAAS,CAAC;EACzD,CAACJ,WAAW,CAACK,KAAK,GAAG;IAAED,qBAAqB,EAAE;EAAW,CAAC;EAC1D,CAACJ,WAAW,CAACM,GAAG,GAAG;IAAEC,oBAAoB,EAAE;EAAK;AAClD,CAAC;AAED,OAAO,MAAMC,iCAAiC,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAC/C,MAAAC,UAAA,GAAmB/C,aAAa,CAAC,CAAC;EAAA,IAAAgD,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IACWF,EAAA;MAAAG,eAAA,EAAmB,UAAU;MAAAC,WAAA,EAAe;IAAO,CAAC;IAAAP,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAjG,MAAAQ,gBAAA,GAAyBhC,mBAAmB,CAAC2B,EAAoD,CAAC;EAAA,IAAAM,EAAA;EAAA,IAAAT,CAAA,QAAAI,MAAA,CAAAC,GAAA;IACpDI,EAAA;MAAAH,eAAA,EAAmB,QAAQ;MAAAC,WAAA,EAAe;IAAQ,CAAC;IAAAP,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAjG,MAAAU,iBAAA,GAA0BlC,mBAAmB,CAACiC,EAAmD,CAAC;EAClG,MAAAE,sBAAA,GAA+B1C,yBAAyB,CAAC,CAAC;EAC1D,MAAA2C,iBAAA,GAA0BzC,oBAAoB,CAAC,CAAC;EAChD,MAAA0C,cAAA,GAAuBF,sBAA2C,IAA3CC,iBAA2C;EAClE,MAAAE,iBAAA,GAA0BhD,iCAAiC,CAAC,CAAC;EAC7D,MAAAiD,aAAA,GAAsBrC,gBAAgB,CAAC,CAAC;EACxC,MAAAsC,KAAA,GAAc5D,QAAQ,CAA+C,CAAC;EAAA,IAAA6D,EAAA;EAAA,IAAAjB,CAAA,QAAAgB,KAAA,CAAAE,MAAA;IAOlED,EAAA,GAAAD,KAAK,CAAAE,MAAa,IAAlB,CAAiB,CAAC;IAAAlB,CAAA,MAAAgB,KAAA,CAAAE,MAAA;IAAAlB,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EANtB;IAAAmB,KAAA;IAAAC,mBAAA;IAAAzB,qBAAA,EAAA0B,EAAA;IAAAvB,oBAAA;IAAAwB;EAAA,IAMIL,EAAkB;EAHpB,MAAAtB,qBAAA,GAAA0B,EAA0B,KAA1BE,SAA0B,GAA1B,EAA0B,GAA1BF,EAA0B;EAI5B,MAAAG,kBAAA,GAA2BxD,qBAAqB,CAAC,CAAC;EAClD;IAAAyD,WAAA;IAAAC;EAAA,IAAmCnD,cAAc,CAAC,CAAC;EACnD,MAAAoD,sBAAA,GAA+B5D,yBAAyB,CAAC,CAAC;EAC1D,MAAA6D,SAAA,GAAkBxD,uBAAuB,CAAC,CAAC;EAC3C,MAAAyD,yBAAA,GAAkCpD,4BAA4B,CAC5D2C,mBACF,CAAC;EAEQ,MAAAU,EAAA,iBAAcV,mBAAmB,EAAE;EAAA,IAAAW,EAAA;EAAA,IAAA/B,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAAQ0B,EAAA;MAAAC,MAAA,EAAU;QAAAC,KAAA,EAAS;MAAG;IAAE,CAAC;IAAAjC,CAAA,MAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAAA,IAAAkC,EAAA;EAAA,IAAAlC,CAAA,QAAA8B,EAAA;IAA3EI,EAAA;MAAAC,GAAA,EAAOL,EAAmC;MAAAM,IAAA,EAAQL,EAAyB;MAAAM,GAAA,EAAO;IAAO,CAAC;IAAArC,CAAA,MAAA8B,EAAA;IAAA9B,CAAA,MAAAkC,EAAA;EAAA;IAAAA,EAAA,GAAAlC,CAAA;EAAA;EAC/E,MAAAsC,EAAA,IAAC,CAAClB,mBAAmB;EAAA,IAAAmB,EAAA;EAAA,IAAAvC,CAAA,QAAAsC,EAAA;IAAhCC,EAAA;MAAAC,OAAA,EAAWF;IAAsB,CAAC;IAAAtC,CAAA,MAAAsC,EAAA;IAAAtC,CAAA,MAAAuC,EAAA;EAAA;IAAAA,EAAA,GAAAvC,CAAA;EAAA;EAFpC;IAAAoC,IAAA,EAAAK;EAAA,IAAwBnE,SAAS,CAC/B4D,EAA0F,EAC1FK,EACF,CAAC;EAAA,IAAAG,EAAA;EAAAC,GAAA;IAGC,IAAIvB,mBAAoC,IAApCE,aAAoC;MACtCoB,EAAA,GAAOnD,WAAW,CAAAqD,IAAK;MAAvB,MAAAD,GAAA;IAAuB;MAClB,IAAI,SAAS,CAAAE,IAAK,CAAClD,qBAAqB,CAAC;QAC9C+C,EAAA,GAAOnD,WAAW,CAAAG,MAAO;QAAzB,MAAAiD,GAAA;MAAyB;QACpB,IAAI,WAAW,CAAAE,IAAK,CAAClD,qBAAqB,CAAC;UAChD+C,EAAA,GAAOnD,WAAW,CAAAK,KAAM;UAAxB,MAAA+C,GAAA;QAAwB;UACnB,IAAI7C,oBAAoB;YAC7B4C,EAAA,GAAOnD,WAAW,CAAAM,GAAI;YAAtB,MAAA8C,GAAA;UAAsB;QACvB;MAAA;IAAA;IAEDD,EAAA,GAAOnD,WAAW,CAAAE,GAAI;EAAA;EAXxB,MAAAqD,MAAA,GAA4BJ,EAYyD;EAAA,IAAAK,GAAA;EAAA,IAAA/C,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAIjF0C,GAAA;MAAAC,EAAA,EAAMzD,WAAW,CAAAE,GAAI;MAAAwD,KAAA,EAAS1D,WAAW,CAAAE;IAAK,CAAC;IAAAO,CAAA,MAAA+C,GAAA;EAAA;IAAAA,GAAA,GAAA/C,CAAA;EAAA;EAAA,IAAAkD,GAAA;EAAA,IAAAlD,CAAA,SAAAU,iBAAA;IAC3CwC,GAAA,GAAAxC,iBAAiB,GAAjB,CAAqB;MAAAsC,EAAA,EAAMzD,WAAW,CAAAG,MAAO;MAAAuD,KAAA,EAAS1D,WAAW,CAAAG;IAAQ,CAAC,CAAM,GAAhF,EAAgF;IAAAM,CAAA,OAAAU,iBAAA;IAAAV,CAAA,OAAAkD,GAAA;EAAA;IAAAA,GAAA,GAAAlD,CAAA;EAAA;EAAA,IAAAmD,GAAA;EAAA,IAAAnD,CAAA,SAAAQ,gBAAA;IAChF2C,GAAA,GAAA3C,gBAAgB,GAAhB,CAAoB;MAAAwC,EAAA,EAAMzD,WAAW,CAAAK,KAAM;MAAAqD,KAAA,EAAS1D,WAAW,CAAAK;IAAO,CAAC,CAAM,GAA7E,EAA6E;IAAAI,CAAA,OAAAQ,gBAAA;IAAAR,CAAA,OAAAmD,GAAA;EAAA;IAAAA,GAAA,GAAAnD,CAAA;EAAA;EAAA,IAAAoD,GAAA;EAAA,IAAApD,CAAA,SAAAa,cAAA;IAC7EuC,GAAA,GAAAvC,cAAc,GAAd,CAAkB;MAAAmC,EAAA,EAAMzD,WAAW,CAAAM,GAAI;MAAAoD,KAAA,EAAS1D,WAAW,CAAAM;IAAK,CAAC,CAAM,GAAvE,EAAuE;IAAAG,CAAA,OAAAa,cAAA;IAAAb,CAAA,OAAAoD,GAAA;EAAA;IAAAA,GAAA,GAAApD,CAAA;EAAA;EAAA,IAAAqD,GAAA;EAAA,IAAArD,CAAA,SAAAkD,GAAA,IAAAlD,CAAA,SAAAmD,GAAA,IAAAnD,CAAA,SAAAoD,GAAA;IAJvEC,GAAA,IACJN,GAA+C,KAC3CG,GAAgF,KAChFC,GAA6E,KAC7EC,GAAuE,CAC5E;IAAApD,CAAA,OAAAkD,GAAA;IAAAlD,CAAA,OAAAmD,GAAA;IAAAnD,CAAA,OAAAoD,GAAA;IAAApD,CAAA,OAAAqD,GAAA;EAAA;IAAAA,GAAA,GAAArD,CAAA;EAAA;EANH,MAAAsD,OAAA,GACQD,GAKL;EAEF,IAAAE,GAAA;EAAA,IAAAvD,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAAoB,mBAAA,IAAApB,CAAA,SAAAyC,KAAA,EAAAe,IAAA,IAAAxD,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAmB,KAAA;IAE4BoC,GAAA,GAAAA,CAAA;MAC3B,IAAInC,mBAAmB;QAAA,OAASqB,KAAK,EAAAe,IAAe,IAApBrC,KAA+C,IAA/C9B,uBAA+C;MAAA;MAC/E,IAAIiC,aAAa;QAAA,OAAShC,cAAc;MAAA;MACxC,IAAIwD,MAAM,KAAKvD,WAAW,CAAAE,GAAI;QAAA,OAASJ,uBAAuB;MAAA;MAAA,OAEvDyD,MAAM;IAAA,CACd;IAAA9C,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAAoB,mBAAA;IAAApB,CAAA,OAAAyC,KAAA,EAAAe,IAAA;IAAAxD,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAmB,KAAA;IAAAnB,CAAA,OAAAuD,GAAA;EAAA;IAAAA,GAAA,GAAAvD,CAAA;EAAA;EAAwByC,KAAK,EAAAe,IAAM;EAAA,IAAAC,GAAA;EAAA,IAAAzD,CAAA,SAAAuD,GAAA;IANfE,GAAA,GAAQF,GAM5B,CAAkE,CAAC;IAAAvD,CAAA,OAAAuD,GAAA;IAAAvD,CAAA,OAAAyD,GAAA;EAAA;IAAAA,GAAA,GAAAzD,CAAA;EAAA;EANpE,MAAA0D,YAAA,GAAqBD,GAM+C;EAAA,IAAAE,GAAA;EAAA,IAAA3D,CAAA,SAAA4B,SAAA,IAAA5B,CAAA,SAAAE,UAAA,IAAAF,CAAA,SAAA6B,yBAAA,IAAA7B,CAAA,SAAAgB,KAAA,CAAAE,MAAA;IAEhByC,GAAA,GAAAA,CAAA;MAClD,IAAI9B,yBAAwD,IAA3BD,SAAS,KAAK,aAAa;QAAA,OACnD1B,UAAU,CAAA0D,QAAS,CAAC,wBAAwB,EAAE;UAAA,GAChD5C,KAAK,CAAAE,MAAO;UAAAW;QAEjB,CAAC,CAAC;MAAA;MAGJ,IAAID,SAAS,KAAK,QAAQ;QAAA,OACjB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,mCAAmC;UAAA3C,MAAA,EACnC;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;MAGJ,IAAIU,SAAS,KAAK,OAAO;QAAA,OAChB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,wCAAwC;UAAA3C,MAAA,EACxC;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;MAGJ,IAAIU,SAAS,KAAK,gBAAgB;QAAA,OACzB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,2CAA2C;UAAA3C,MAAA,EAC3C;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;IACH,CACF;IAAAlB,CAAA,OAAA4B,SAAA;IAAA5B,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAA6B,yBAAA;IAAA7B,CAAA,OAAAgB,KAAA,CAAAE,MAAA;IAAAlB,CAAA,OAAA2D,GAAA;EAAA;IAAAA,GAAA,GAAA3D,CAAA;EAAA;EA5BD,MAAA8D,+BAAA,GAAwCH,GA4B4B;EAAA,IAAAI,GAAA;EAAA,IAAA/D,CAAA,SAAAE,UAAA;IAGlE6D,GAAA,GAAA7C,MAAA;MACEhB,UAAU,CAAA8D,SAAU,CAAC;QAAA7C,KAAA,EACZI,SAAS;QAAAH,mBAAA,EACKG,SAAS;QAAA5B,qBAAA,EACP4B,SAAS;QAAAzB,oBAAA,EACVyB,SAAS;QAAAD,aAAA,EAChBC,SAAS;QAAA,GACrBL;MACL,CAAC,CAAC;IAAA,CACH;IAAAlB,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAA+D,GAAA;EAAA;IAAAA,GAAA,GAAA/D,CAAA;EAAA;EAVH,MAAAiE,eAAA,GAAwBF,GAYvB;EAAA,IAAAG,GAAA;EAAA,IAAAlE,CAAA,SAAAiE,eAAA;IAGCC,GAAA,GAAAlB,EAAA;MACE,MAAAmB,QAAA,GAAe3E,aAAa,CAACwD,EAAE,CAA+B;MAC9D,IAAI9B,QAAM;QAAE+C,eAAe,CAAC/C,QAAM,CAAC;MAAA;IAAA,CACpC;IAAAlB,CAAA,OAAAiE,eAAA;IAAAjE,CAAA,OAAAkE,GAAA;EAAA;IAAAA,GAAA,GAAAlE,CAAA;EAAA;EAJH,MAAAoE,kBAAA,GAA2BF,GAM1B;EAAA,IAAAG,GAAA;EAAA,IAAArE,CAAA,SAAAE,UAAA;IAEgCmE,GAAA,GAAAA,CAAA;MAC/BnE,UAAU,CAAA0D,QAAS,CAAC,QAAQ,CAAC;IAAA,CAC9B;IAAA5D,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAqE,GAAA;EAAA;IAAAA,GAAA,GAAArE,CAAA;EAAA;EAFD,MAAAsE,YAAA,GAAqBD,GAEL;EAAA,IAAAE,GAAA;EAAA,IAAAvE,CAAA,SAAAE,UAAA;IAEuBqE,GAAA,GAAAA,CAAA;MACrCrE,UAAU,CAAA0D,QAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAAA,CACxC;IAAA5D,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAuE,GAAA;EAAA;IAAAA,GAAA,GAAAvE,CAAA;EAAA;EAFD,MAAAwE,kBAAA,GAA2BD,GAEX;EAAA,IAAAE,GAAA;EAAA,IAAAzE,CAAA,SAAAoB,mBAAA,IAAApB,CAAA,SAAAL,qBAAA,IAAAK,CAAA,SAAAE,UAAA,IAAAF,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAF,oBAAA;IAEkC2E,GAAA,GAAAA,CAAA;MAChDvE,UAAU,CAAA0D,QAAS,CAAC,qBAAqB,EAAE;QAAAxC,mBAAA;QAAAzB,qBAAA;QAAAG,oBAAA;QAAAwB;MAK3C,CAAC,CAAC;IAAA,CACH;IAAAtB,CAAA,OAAAoB,mBAAA;IAAApB,CAAA,OAAAL,qBAAA;IAAAK,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAF,oBAAA;IAAAE,CAAA,OAAAyE,GAAA;EAAA;IAAAA,GAAA,GAAAzE,CAAA;EAAA;EAPD,MAAA0E,6BAAA,GAAsCD,GAO2D;EAAA,IAAAE,GAAA;EAAA,IAAA3E,CAAA,SAAAwB,kBAAA,IAAAxB,CAAA,SAAAyB,WAAA;IAE3DkD,GAAA,GAAAA,CAAA;MACpCnD,kBAAkB,CAAAoD,MAAO,CAAC;QAAAC,WAAA,EAAe;MAAE,CAAC,CAAC;MAC7CjG,MAAM,CAAAkG,mBAAoB,CAAC,CAAC;MAC5BrD,WAAW,CAAC,CAAC;IAAA,CACd;IAAAzB,CAAA,OAAAwB,kBAAA;IAAAxB,CAAA,OAAAyB,WAAA;IAAAzB,CAAA,OAAA2E,GAAA;EAAA;IAAAA,GAAA,GAAA3E,CAAA;EAAA;EAJD,MAAA+E,iBAAA,GAA0BJ,GAIW;EAAA,IAAAK,GAAA;EAAA,IAAAhF,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAA+E,iBAAA;IAEAC,GAAA,GAAAA,CAAA;MACnC,IAAIlC,MAAM,KAAKvD,WAAW,CAAAE,GAAI;QAAA,OAASsF,iBAAiB,CAAC,CAAC;MAAA;MAE1DtH,KAAK,CAAAwH,KAAM,CAAC,eAAe,EAAE,8DAA8D,EAAE,CAC3F;QAAAC,IAAA,EAAQ;MAAS,CAAC,EAClB;QAAAA,IAAA,EAAQ,IAAI;QAAAC,OAAA,EAAWA,CAAA,KAAMJ,iBAAiB,CAAC;MAAE,CAAC,CACnD,CAAC;IAAA,CACH;IAAA/E,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAA+E,iBAAA;IAAA/E,CAAA,OAAAgF,GAAA;EAAA;IAAAA,GAAA,GAAAhF,CAAA;EAAA;EAPD,MAAAoF,gBAAA,GAAyBJ,GAOM;EAE/B,MAAAK,eAAA,GAAwB3E,iBAAqC,IAArCF,gBAA0D,IAA1DM,iBAA0D;EAElF,MAAAwE,OAAA,GAAgBpH,YAAY,CAAC,CAAC,GAAGkB,kBAAkB;EAAA,IAAAmG,GAAA;EAAA,IAAAvF,CAAA,SAAAsF,OAAA;IAC1BC,GAAA;MAAAD;IAAU,CAAC;IAAAtF,CAAA,OAAAsF,OAAA;IAAAtF,CAAA,OAAAuF,GAAA;EAAA;IAAAA,GAAA,GAAAvF,CAAA;EAAA;EAApC,MAAAwF,MAAA,GAAeC,SAAS,CAACF,GAAW,CAAC;EAIrC,OAAAG,QAAA,EAAAC,WAAA,IAAgCnI,QAAQ,CAAS,CAAC;EAClD,OAAAoI,YAAA,EAAAC,eAAA,IAAwCrI,QAAQ,CAAS,CAAC;EAAA,IAAAsI,GAAA;EAAA,IAAA9F,CAAA,SAAAI,MAAA,CAAAC,GAAA;IACtByF,GAAA,GAAAC,KAAA;MAClCJ,WAAW,CAACI,KAAK,CAAAC,WAAY,CAAAC,MAAO,CAAAC,KAAM,CAAC;IAAA,CAC5C;IAAAlG,CAAA,OAAA8F,GAAA;EAAA;IAAAA,GAAA,GAAA9F,CAAA;EAAA;EAFD,MAAAmG,eAAA,GAAwBL,GAElB;EAAA,IAAAM,GAAA;EAAA,IAAApG,CAAA,SAAAI,MAAA,CAAAC,GAAA;IACkC+F,GAAA,GAAAC,OAAA;MACtCR,eAAe,CAACE,OAAK,CAAAC,WAAY,CAAAC,MAAO,CAAAC,KAAM,CAAC;IAAA,CAChD;IAAAlG,CAAA,OAAAoG,GAAA;EAAA;IAAAA,GAAA,GAAApG,CAAA;EAAA;EAFD,MAAAsG,mBAAA,GAA4BF,GAEtB;EACN,MAAAG,eAAA,GACE,CAACjB,OAAiC,IAAtBI,QAAQ,KAAKnE,SAAuC,IAA1BqE,YAAY,KAAKrE,SAE1C,GADTmE,QAAQ,GAAGxG,sBAAsB,GAAG,CAAC,GAAG0G,YAAY,GAAGzG,eAC9C,GAFboC,SAEa;EAAA,IAAAiF,GAAA;EAAA,IAAAxG,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAA0E,6BAAA,IAAA1E,CAAA,SAAAoE,kBAAA,IAAApE,CAAA,SAAAsD,OAAA,IAAAtD,CAAA,SAAAqF,eAAA,IAAArF,CAAA,SAAA0D,YAAA,IAAA1D,CAAA,SAAAuG,eAAA;IAUPC,GAAA,gBAAAzH,IAAA,CAACnB,cAAc;MACJ0F,OAAO,EAAPA,OAAO;MACJR,UAAM,EAANA,MAAM;MACRsB,QAAkB,EAAlBA,kBAAkB;MACbM,aAA6B,EAA7BA,6BAA6B;MAC3BW,eAAe,EAAfA,eAAe;MAClB3B,YAAY,EAAZA,YAAY;MAChB6C,QAAe,EAAfA;IAAe,CAC1B,CAAC;IAAAvG,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAA0E,6BAAA;IAAA1E,CAAA,OAAAoE,kBAAA;IAAApE,CAAA,OAAAsD,OAAA;IAAAtD,CAAA,OAAAqF,eAAA;IAAArF,CAAA,OAAA0D,YAAA;IAAA1D,CAAA,OAAAuG,eAAA;IAAAvG,CAAA,OAAAwG,GAAA;EAAA;IAAAA,GAAA,GAAAxG,CAAA;EAAA;EAAA,IAAAyG,GAAA;EAAA,IAAAzG,CAAA,SAAAwF,MAAA,CAAAkB,cAAA,IAAA1G,CAAA,SAAAwG,GAAA;IATJC,GAAA,gBAAA1H,IAAA,CAACpB,IAAI;MAAQgJ,KAAqB,EAArBnB,MAAM,CAAAkB,cAAe;MAAAE,QAAA,EAChCJ;IAQE,CACE,CAAC;IAAAxG,CAAA,OAAAwF,MAAA,CAAAkB,cAAA;IAAA1G,CAAA,OAAAwG,GAAA;IAAAxG,CAAA,OAAAyG,GAAA;EAAA;IAAAA,GAAA,GAAAzG,CAAA;EAAA;EAAA,IAAA6G,GAAA;EAAA,IAAA7G,CAAA,SAAAwE,kBAAA;IAMLqC,GAAA,gBAAA9H,IAAA,CAACF,sBAAsB;MAChB2E,IAAa,EAAb,aAAa;MACTgB,OAAkB,EAAlBA,kBAAkB;MACRsC,kBAAe,EAAf,eAAe;MAC3BC,MAAoC,EAApC,oCAAoC;MACpBpI,qBAAiC,EAAjCA;IAAiC,CACzD,CAAC;IAAAqB,CAAA,OAAAwE,kBAAA;IAAAxE,CAAA,OAAA6G,GAAA;EAAA;IAAAA,GAAA,GAAA7G,CAAA;EAAA;EAAA,IAAAgH,GAAA;EAAA,IAAAhH,CAAA,SAAA2B,sBAAA,IAAA3B,CAAA,SAAA8D,+BAAA;IACDkD,GAAA,GAAArF,sBAQA,iBARA5C,IAAA,CACEF,sBAAsB;MAChB2E,IAAsB,EAAtB,sBAAsB;MAClBM,OAA+B,EAA/BA,+BAA+B;MACrBgD,kBAAkB,EAAlB,kBAAkB;MAC9BC,MAAuC,EAAvC,uCAAuC;MACvBpI,qBAAiC,EAAjCA;IAAiC,CAE5D,CAAC;IAAAqB,CAAA,OAAA2B,sBAAA;IAAA3B,CAAA,OAAA8D,+BAAA;IAAA9D,CAAA,OAAAgH,GAAA;EAAA;IAAAA,GAAA,GAAAhH,CAAA;EAAA;EAAA,IAAAiH,GAAA;EAAA,IAAAjH,CAAA,SAAAsE,YAAA,IAAAtE,CAAA,SAAAe,aAAA;IACAkG,GAAA,GAAAlG,aAQA,iBARAhC,IAAA,CACEF,sBAAsB;MAChB2E,IAAgB,EAAhB,gBAAgB;MACZc,OAAY,EAAZA,YAAY;MACFwC,kBAAQ,EAAR,QAAQ;MACpBC,MAA6B,EAA7B,6BAA6B;MACbpI,qBAAiC,EAAjCA;IAAiC,CAE5D,CAAC;IAAAqB,CAAA,OAAAsE,YAAA;IAAAtE,CAAA,OAAAe,aAAA;IAAAf,CAAA,OAAAiH,GAAA;EAAA;IAAAA,GAAA,GAAAjH,CAAA;EAAA;EAAA,IAAAkH,GAAA;EAAA,IAAAlH,CAAA,SAAAwF,MAAA,CAAA2B,gBAAA,IAAAnH,CAAA,SAAA6G,GAAA,IAAA7G,CAAA,SAAAgH,GAAA,IAAAhH,CAAA,SAAAiH,GAAA;IA7BHC,GAAA,gBAAAjI,KAAA,CAACtB,IAAI;MACIgJ,KAAuB,EAAvBnB,MAAM,CAAA2B,gBAAiB;MACpBb,QAAmB,EAAnBA,mBAAmB;MACtBS,MAA8B,EAA9B,8BAA8B;MAAAH,QAAA,GAErCC,GAME,EACDG,GAQA,EACAC,GAQA;IAAA,CACG,CAAC;IAAAjH,CAAA,OAAAwF,MAAA,CAAA2B,gBAAA;IAAAnH,CAAA,OAAA6G,GAAA;IAAA7G,CAAA,OAAAgH,GAAA;IAAAhH,CAAA,OAAAiH,GAAA;IAAAjH,CAAA,OAAAkH,GAAA;EAAA;IAAAA,GAAA,GAAAlH,CAAA;EAAA;EAAA,IAAAoH,GAAA;EAAA,IAAApH,CAAA,SAAAwF,MAAA,CAAA6B,UAAA,IAAArH,CAAA,SAAAyG,GAAA,IAAAzG,CAAA,SAAAkH,GAAA;IA9CTE,GAAA,gBAAAnI,KAAA,CAACtB,IAAI;MACIgJ,KAAiB,EAAjBnB,MAAM,CAAA6B,UAAW;MACdlB,QAAe,EAAfA,eAAe;MAClBY,MAAkC,EAAlC,kCAAkC;MAAAH,QAAA,GAEzCH,GAUO,EACPS,GA8BO;IAAA,CACH,CAAC;IAAAlH,CAAA,OAAAwF,MAAA,CAAA6B,UAAA;IAAArH,CAAA,OAAAyG,GAAA;IAAAzG,CAAA,OAAAkH,GAAA;IAAAlH,CAAA,OAAAoH,GAAA;EAAA;IAAAA,GAAA,GAAApH,CAAA;EAAA;EAAA,IAAAsH,GAAA;EAAA,IAAAtH,CAAA,SAAAoF,gBAAA,IAAApF,CAAA,SAAA0B,SAAA,IAAA1B,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAwF,MAAA,CAAA+B,cAAA;IACND,GAAA,IAAChG,aAYD,iBAZAvC,IAAA,CACEpB,IAAI;MAAQgJ,KAAqB,EAArBnB,MAAM,CAAA+B,cAAe;MAAAX,QAAA,eAChC7H,IAAA,CAAClB,UAAU;QACAuH,OAAgB,EAAhBA,gBAAgB;QACf1D,QAAS,EAATA,SAAS;QACI/C,qBAAiC,EAAjCA,iCAAiC;QACxD6I,oCAAoC,EAApC,IAAoC;QACLC,8BAAe,EAAf,eAAe;QAAAb,QAAA,EAC/C;MAED,CAAY;IAAC,CAEjB,CAAC;IAAA5G,CAAA,OAAAoF,gBAAA;IAAApF,CAAA,OAAA0B,SAAA;IAAA1B,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAwF,MAAA,CAAA+B,cAAA;IAAAvH,CAAA,OAAAsH,GAAA;EAAA;IAAAA,GAAA,GAAAtH,CAAA;EAAA;EAAA,IAAA0H,GAAA;EAAA,IAAA1H,CAAA,SAAAwF,MAAA,CAAAmC,UAAA,IAAA3H,CAAA,SAAAoH,GAAA,IAAApH,CAAA,SAAAsH,GAAA;IA7DHI,GAAA,gBAAAzI,KAAA,CAACtB,IAAI;MAAQgJ,KAAiB,EAAjBnB,MAAM,CAAAmC,UAAW;MAAAf,QAAA,GAC5BQ,GA+CO,EACNE,GAYA;IAAA,CACG,CAAC;IAAAtH,CAAA,OAAAwF,MAAA,CAAAmC,UAAA;IAAA3H,CAAA,OAAAoH,GAAA;IAAApH,CAAA,OAAAsH,GAAA;IAAAtH,CAAA,OAAA0H,GAAA;EAAA;IAAAA,GAAA,GAAA1H,CAAA;EAAA;EAAA,OA9DP0H,GA8DO;AAAA,CAEV;AAED,MAAMjC,SAAS,GAAGtF,EAAA;EAAA,MAAAH,CAAA,GAAAC,EAAA;EAAC;IAAAqF;EAAA,IAAAnF,EAAiC;EAClD,MAAAyH,KAAA,GAAcvJ,QAAQ,CAAC,CAAC;EAAA,IAAAoC,EAAA;EAAA,IAAAT,CAAA,QAAAsF,OAAA,IAAAtF,CAAA,QAAA4H,KAAA,CAAAC,MAAA,CAAAC,uBAAA;IAEjBrH,EAAA,GAAA/C,UAAU,CAAAqK,MAAO,CAAC;MAAAJ,UAAA,EACX;QAAAK,iBAAA,EACS,CAAC;QAAAC,iBAAA,EACDL,KAAK,CAAAC,MAAO,CAAAC,uBAAwB;QAAAI,aAAA,EACxC,EAAE;QAAAC,GAAA,EACZ;MACP,CAAC;MAAAd,UAAA,EACW;QAAAc,GAAA,EACLhJ,eAAe;QAAAiJ,aAAA,EACL9C,OAAO,GAAP,QAA0B,GAA1B,KAA0B;QAAA+C,UAAA,EAC7B/C,OAAO,GAAP,YAAiC,GAAjC,QAAiC;QAAAgD,cAAA,EAC7B,eAAe;QAAAJ,aAAA,EAChB5C,OAAO,GAAP,CAAe,GAAf,CAAe;QAAAiD,iBAAA,EACXrJ;MACrB,CAAC;MAAAwH,cAAA,EACe;QAAA8B,UAAA,EACF,CAAC;QAAAC,QAAA,EACH;MACZ,CAAC;MAAAtB,gBAAA,EACiB;QAAAiB,aAAA,EACD,KAAK;QAAAD,GAAA,EACf,CAAC;QAAAE,UAAA,EACM;MACd,CAAC;MAAAd,cAAA,EACe;QAAAc,UAAA,EACF,YAAY;QAAAE,iBAAA,EACLrJ;MACrB;IACF,CAAC,CAAC;IAAAc,CAAA,MAAAsF,OAAA;IAAAtF,CAAA,MAAA4H,KAAA,CAAAC,MAAA,CAAAC,uBAAA;IAAA9H,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,OA5BKS,EA4BL;AAAA,CACH","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.4.1-qa-staging.24",
3
+ "version": "4.4.1-qa-staging.26",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@fortawesome/fontawesome-svg-core": "^7.2.0",
35
35
  "@fortawesome/react-native-fontawesome": "^0.3.2",
36
- "@planningcenter/emoji-keyboard": "4.4.1-qa-staging.24",
36
+ "@planningcenter/emoji-keyboard": "4.4.1-qa-staging.26",
37
37
  "lodash-inflection": "^1.5.0"
38
38
  },
39
39
  "peerDependencies": {
@@ -84,5 +84,5 @@
84
84
  "sf-symbols-typescript": "^2.2.0",
85
85
  "typescript": "~6.0.3"
86
86
  },
87
- "gitHead": "d461663266b8231168f3cffeaf6bdfc996cf95d0"
87
+ "gitHead": "066394167c15226c4195044b6813c77d18f2c266"
88
88
  }
@@ -35,6 +35,11 @@ export interface FilterDropdownProps {
35
35
  onMoreFilters: () => void
36
36
  triggerLabel: string
37
37
  showMoreFilters?: boolean
38
+ /**
39
+ * Widest the trigger may render, in points. Hosts that measure the trigger at its intrinsic
40
+ * width need this for the label to truncate.
41
+ */
42
+ maxWidth?: number
38
43
  }
39
44
 
40
45
  export function FilterDropdown({
@@ -44,6 +49,7 @@ export function FilterDropdown({
44
49
  onMoreFilters,
45
50
  triggerLabel,
46
51
  showMoreFilters = true,
52
+ maxWidth,
47
53
  }: FilterDropdownProps) {
48
54
  const styles = useStyles()
49
55
 
@@ -71,7 +77,7 @@ export function FilterDropdown({
71
77
  return (
72
78
  <Menu.View actions={actions} onPressAction={handlePressAction} style={styles.container}>
73
79
  <View
74
- style={styles.trigger}
80
+ style={[styles.trigger, maxWidth !== undefined && { maxWidth }]}
75
81
  accessible
76
82
  accessibilityRole="button"
77
83
  accessibilityHint="Opens filter options"
@@ -21,6 +21,15 @@ const mockSearchEnabled = jest.fn()
21
21
  const mockCanBrowseArchived = jest.fn()
22
22
  const mockGroupsByGraphId: Record<string, { name: string }> = {}
23
23
 
24
+ jest.mock('react-native', () => {
25
+ const actual = jest.requireActual('react-native')
26
+ return Object.defineProperty(actual, 'useWindowDimensions', {
27
+ value: jest.fn(() => ({ fontScale: 1 })),
28
+ configurable: true,
29
+ })
30
+ })
31
+ const mockUseWindowDimensions = jest.requireMock('react-native').useWindowDimensions
32
+
24
33
  jest.mock('@react-navigation/native', () => ({
25
34
  ...jest.requireActual('@react-navigation/native'),
26
35
  useNavigation: () => ({ setParams: mockSetParams, navigate: mockNavigate }),
@@ -121,10 +130,46 @@ describe('FilterDropdownListHeaderComponent', () => {
121
130
  mockSetParams.mockClear()
122
131
  mockSearchEnabled.mockReturnValue(true)
123
132
  mockCanBrowseArchived.mockReturnValue(false)
133
+ mockUseWindowDimensions.mockReturnValue({ fontScale: 1 })
124
134
  setCapabilities({ groups: true, teams: true })
125
135
  setRouteParams({})
126
136
  })
127
137
 
138
+ it('keeps the dropdown and actions on one line at the default font scale', () => {
139
+ mockUseWindowDimensions.mockReturnValue({ fontScale: 1 })
140
+
141
+ render(<FilterDropdownListHeaderComponent />)
142
+
143
+ expect(screen.getByTestId('conversations-filter-heading-row')).toHaveStyle({
144
+ flexDirection: 'row',
145
+ })
146
+ })
147
+
148
+ it('stacks the actions under the dropdown at the first font size above the default', () => {
149
+ mockUseWindowDimensions.mockReturnValue({ fontScale: 1.12 })
150
+
151
+ render(<FilterDropdownListHeaderComponent />)
152
+
153
+ expect(screen.getByTestId('conversations-filter-heading-row')).toHaveStyle({
154
+ flexDirection: 'column',
155
+ })
156
+ })
157
+
158
+ it('caps the trigger to the room beside the actions so a long label truncates', () => {
159
+ render(<FilterDropdownListHeaderComponent />)
160
+
161
+ fireEvent(screen.getByTestId('conversations-filter-heading-row'), 'layout', {
162
+ nativeEvent: { layout: { width: 360 } },
163
+ })
164
+ fireEvent(screen.getByTestId('conversations-filter-actions'), 'layout', {
165
+ nativeEvent: { layout: { width: 160 } },
166
+ })
167
+
168
+ expect(screen.getByRole('button', { name: 'All conversations' })).toHaveStyle({
169
+ maxWidth: 156,
170
+ })
171
+ })
172
+
128
173
  it('offers every filter the person can use, then More filters', () => {
129
174
  render(<FilterDropdownListHeaderComponent />)
130
175
 
@@ -1,13 +1,13 @@
1
1
  import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
2
- import React, { useCallback, useMemo } from 'react'
3
- import { Alert, StyleSheet, View } from 'react-native'
2
+ import React, { useCallback, useMemo, useState } from 'react'
3
+ import { Alert, LayoutChangeEvent, StyleSheet, View } from 'react-native'
4
4
  import { FilterDropdown, FilterDropdownOption, TextButton } from '../../../components'
5
5
  import {
6
- useAtFontScaleBreakpoint,
7
6
  useCanBrowseArchivedConversations,
8
7
  useCanCreateConversations,
9
8
  useCurrentPersonCache,
10
9
  useDirectMessagesEligible,
10
+ useFontScale,
11
11
  useHasDirectMessages,
12
12
  useNewConversationEntry,
13
13
  useTheme,
@@ -25,6 +25,8 @@ import { ConversationsScreenProps } from '../conversations_screen'
25
25
  import { ListHeaderActionButton } from './list_header_action_button'
26
26
 
27
27
  const ROW_PADDING_HORIZONTAL = 16
28
+ const HEADING_ROW_GAP = 12
29
+ const DEFAULT_FONT_SCALE = 1
28
30
  const ALL_CONVERSATIONS_LABEL = 'All conversations'
29
31
  const ARCHIVED_LABEL = 'Archived'
30
32
 
@@ -190,11 +192,31 @@ export const FilterDropdownListHeaderComponent = () => {
190
192
 
191
193
  const showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived
192
194
 
193
- const styles = useStyles()
195
+ const stacked = useFontScale() > DEFAULT_FONT_SCALE
196
+ const styles = useStyles({ stacked })
197
+
198
+ // The Android menu host measures the trigger at its intrinsic width, so flex shrinking never
199
+ // truncates the label. Cap it to the room left beside the action buttons instead.
200
+ const [rowWidth, setRowWidth] = useState<number>()
201
+ const [actionsWidth, setActionsWidth] = useState<number>()
202
+ const handleRowLayout = useCallback((event: LayoutChangeEvent) => {
203
+ setRowWidth(event.nativeEvent.layout.width)
204
+ }, [])
205
+ const handleActionsLayout = useCallback((event: LayoutChangeEvent) => {
206
+ setActionsWidth(event.nativeEvent.layout.width)
207
+ }, [])
208
+ const triggerMaxWidth =
209
+ !stacked && rowWidth !== undefined && actionsWidth !== undefined
210
+ ? rowWidth - ROW_PADDING_HORIZONTAL * 2 - actionsWidth - HEADING_ROW_GAP
211
+ : undefined
194
212
 
195
213
  return (
196
214
  <View style={styles.listHeader}>
197
- <View style={styles.headingRow}>
215
+ <View
216
+ style={styles.headingRow}
217
+ onLayout={handleRowLayout}
218
+ testID="conversations-filter-heading-row"
219
+ >
198
220
  <View style={styles.titleContainer}>
199
221
  <FilterDropdown
200
222
  options={options}
@@ -203,9 +225,14 @@ export const FilterDropdownListHeaderComponent = () => {
203
225
  onMoreFilters={handleOpenConversationFilters}
204
226
  showMoreFilters={showMoreFilters}
205
227
  triggerLabel={triggerLabel}
228
+ maxWidth={triggerMaxWidth}
206
229
  />
207
230
  </View>
208
- <View style={styles.actionsContainer}>
231
+ <View
232
+ style={styles.actionsContainer}
233
+ onLayout={handleActionsLayout}
234
+ testID="conversations-filter-actions"
235
+ >
209
236
  <ListHeaderActionButton
210
237
  name="general.cog"
211
238
  onPress={handleChatSettings}
@@ -250,9 +277,8 @@ export const FilterDropdownListHeaderComponent = () => {
250
277
  )
251
278
  }
252
279
 
253
- const useStyles = () => {
280
+ const useStyles = ({ stacked }: { stacked: boolean }) => {
254
281
  const theme = useTheme()
255
- const atFontScaleBreakpoint = useAtFontScaleBreakpoint()
256
282
 
257
283
  return StyleSheet.create({
258
284
  listHeader: {
@@ -262,11 +288,11 @@ const useStyles = () => {
262
288
  gap: 8,
263
289
  },
264
290
  headingRow: {
265
- gap: 12,
266
- flexDirection: atFontScaleBreakpoint ? 'column' : 'row',
267
- alignItems: atFontScaleBreakpoint ? 'flex-start' : 'center',
291
+ gap: HEADING_ROW_GAP,
292
+ flexDirection: stacked ? 'column' : 'row',
293
+ alignItems: stacked ? 'flex-start' : 'center',
268
294
  justifyContent: 'space-between',
269
- paddingBottom: atFontScaleBreakpoint ? 4 : 0,
295
+ paddingBottom: stacked ? 4 : 0,
270
296
  paddingHorizontal: ROW_PADDING_HORIZONTAL,
271
297
  },
272
298
  titleContainer: {