@planningcenter/chat-react-native 4.1.1-qa-staging.6 → 4.1.1-qa-staging.7

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.
Files changed (36) hide show
  1. package/build/components/display/index.d.ts +1 -0
  2. package/build/components/display/index.d.ts.map +1 -1
  3. package/build/components/display/index.js +1 -0
  4. package/build/components/display/index.js.map +1 -1
  5. package/build/components/display/version_footer.d.ts +2 -0
  6. package/build/components/display/version_footer.d.ts.map +1 -0
  7. package/build/components/display/version_footer.js +36 -0
  8. package/build/components/display/version_footer.js.map +1 -0
  9. package/build/hooks/index.d.ts +1 -0
  10. package/build/hooks/index.d.ts.map +1 -1
  11. package/build/hooks/index.js +1 -0
  12. package/build/hooks/index.js.map +1 -1
  13. package/build/hooks/use_direct_message_eligibility.d.ts +13 -0
  14. package/build/hooks/use_direct_message_eligibility.d.ts.map +1 -0
  15. package/build/hooks/use_direct_message_eligibility.js +84 -0
  16. package/build/hooks/use_direct_message_eligibility.js.map +1 -0
  17. package/build/screens/settings_screen.d.ts.map +1 -1
  18. package/build/screens/settings_screen.js +41 -14
  19. package/build/screens/settings_screen.js.map +1 -1
  20. package/build/types/resources/member.d.ts +1 -0
  21. package/build/types/resources/member.d.ts.map +1 -1
  22. package/build/types/resources/member.js.map +1 -1
  23. package/build/utils/package_version.d.ts +2 -0
  24. package/build/utils/package_version.d.ts.map +1 -0
  25. package/build/utils/package_version.js +5 -0
  26. package/build/utils/package_version.js.map +1 -0
  27. package/package.json +3 -3
  28. package/src/__tests__/hooks/use_direct_message_eligibility.test.tsx +70 -0
  29. package/src/components/display/__tests__/version_footer.test.tsx +48 -0
  30. package/src/components/display/index.ts +1 -0
  31. package/src/components/display/version_footer.tsx +26 -0
  32. package/src/hooks/index.ts +1 -0
  33. package/src/hooks/use_direct_message_eligibility.ts +40 -0
  34. package/src/screens/settings_screen.tsx +11 -1
  35. package/src/types/resources/member.ts +1 -0
  36. package/src/utils/package_version.ts +3 -0
@@ -27,4 +27,5 @@ export * from './keyboard_scroll_view';
27
27
  export * from './keyboard_view';
28
28
  export * from './platform_modal_header_buttons';
29
29
  export * from './pressable_row';
30
+ export * from './version_footer';
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/display/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/display/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA"}
@@ -27,4 +27,5 @@ export * from './keyboard_scroll_view';
27
27
  export * from './keyboard_view';
28
28
  export * from './platform_modal_header_buttons';
29
29
  export * from './pressable_row';
30
+ export * from './version_footer';
30
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/display/index.ts"],"sourcesContent":["export * from './avatar_group'\nexport * from './avatar'\nexport * from './badge'\nexport * from './conversation_avatar'\nexport * from './emoji_avatar'\nexport * from './icon_avatar'\nexport * from './banner_collapsible'\nexport * from './banner'\nexport * from './button'\nexport * from './adult_requirement_notice'\nexport * from './child_notice'\nexport * from './heading'\nexport * from './icon_button'\nexport * from './icon'\nexport * from './image'\nexport * from './file_attachment_preview'\nexport * from './image_attachment_preview'\nexport * from './video_attachment_preview'\nexport * from './person'\nexport * from './spinner'\nexport * from './switch'\nexport * from './text_button'\nexport * from './text_inline_button'\nexport * from './text'\nexport * from './toggle_button'\nexport * from './keyboard_scroll_view'\nexport * from './keyboard_view'\nexport * from './platform_modal_header_buttons'\nexport * from './pressable_row'\n"],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,sBAAsB;AACpC,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,4BAA4B;AAC1C,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,2BAA2B;AACzC,cAAc,4BAA4B;AAC1C,cAAc,4BAA4B;AAC1C,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,UAAU;AACxB,cAAc,eAAe;AAC7B,cAAc,sBAAsB;AACpC,cAAc,QAAQ;AACtB,cAAc,iBAAiB;AAC/B,cAAc,wBAAwB;AACtC,cAAc,iBAAiB;AAC/B,cAAc,iCAAiC;AAC/C,cAAc,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/display/index.ts"],"sourcesContent":["export * from './avatar_group'\nexport * from './avatar'\nexport * from './badge'\nexport * from './conversation_avatar'\nexport * from './emoji_avatar'\nexport * from './icon_avatar'\nexport * from './banner_collapsible'\nexport * from './banner'\nexport * from './button'\nexport * from './adult_requirement_notice'\nexport * from './child_notice'\nexport * from './heading'\nexport * from './icon_button'\nexport * from './icon'\nexport * from './image'\nexport * from './file_attachment_preview'\nexport * from './image_attachment_preview'\nexport * from './video_attachment_preview'\nexport * from './person'\nexport * from './spinner'\nexport * from './switch'\nexport * from './text_button'\nexport * from './text_inline_button'\nexport * from './text'\nexport * from './toggle_button'\nexport * from './keyboard_scroll_view'\nexport * from './keyboard_view'\nexport * from './platform_modal_header_buttons'\nexport * from './pressable_row'\nexport * from './version_footer'\n"],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,sBAAsB;AACpC,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,4BAA4B;AAC1C,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,2BAA2B;AACzC,cAAc,4BAA4B;AAC1C,cAAc,4BAA4B;AAC1C,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,UAAU;AACxB,cAAc,eAAe;AAC7B,cAAc,sBAAsB;AACpC,cAAc,QAAQ;AACtB,cAAc,iBAAiB;AAC/B,cAAc,wBAAwB;AACtC,cAAc,iBAAiB;AAC/B,cAAc,iCAAiC;AAC/C,cAAc,iBAAiB;AAC/B,cAAc,kBAAkB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare function VersionFooter(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=version_footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version_footer.d.ts","sourceRoot":"","sources":["../../../src/components/display/version_footer.tsx"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,4CAQ5B"}
@@ -0,0 +1,36 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import React from 'react';
3
+ import { StyleSheet, View } from 'react-native';
4
+ import { chatReactNativeVersion } from '../../utils/package_version';
5
+ import { Text } from './text';
6
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
7
+ export function VersionFooter() {
8
+ const $ = _c(1);
9
+ let t0;
10
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
11
+ t0 = /*#__PURE__*/_jsx(View, {
12
+ style: styles.container,
13
+ children: /*#__PURE__*/_jsxs(Text, {
14
+ variant: "footnote",
15
+ style: styles.text,
16
+ children: ["Chat v", chatReactNativeVersion]
17
+ })
18
+ });
19
+ $[0] = t0;
20
+ } else {
21
+ t0 = $[0];
22
+ }
23
+ return t0;
24
+ }
25
+ const styles = StyleSheet.create({
26
+ container: {
27
+ alignItems: 'center',
28
+ paddingTop: 24,
29
+ paddingBottom: 8,
30
+ paddingHorizontal: 16
31
+ },
32
+ text: {
33
+ textAlign: 'center'
34
+ }
35
+ });
36
+ //# sourceMappingURL=version_footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version_footer.js","names":["React","StyleSheet","View","chatReactNativeVersion","Text","jsxs","_jsxs","jsx","_jsx","VersionFooter","$","_c","t0","Symbol","for","style","styles","container","children","variant","text","create","alignItems","paddingTop","paddingBottom","paddingHorizontal","textAlign"],"sources":["../../../src/components/display/version_footer.tsx"],"sourcesContent":["import React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { chatReactNativeVersion } from '../../utils/package_version'\nimport { Text } from './text'\n\nexport function VersionFooter() {\n return (\n <View style={styles.container}>\n <Text variant=\"footnote\" style={styles.text}>\n Chat v{chatReactNativeVersion}\n </Text>\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n paddingTop: 24,\n paddingBottom: 8,\n paddingHorizontal: 16,\n },\n text: {\n textAlign: 'center',\n },\n})\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,IAAI,QAAQ,QAAQ;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA;AAE7B,OAAO,SAAAC,cAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAF,CAAA,QAAAG,MAAA,CAAAC,GAAA;IAEHF,EAAA,gBAAAJ,IAAA,CAACN,IAAI;MAAQa,KAAgB,EAAhBC,MAAM,CAAAC,SAAU;MAAAC,QAAA,eAC3BZ,KAAA,CAACF,IAAI;QAASe,OAAU,EAAV,UAAU;QAAQJ,KAAW,EAAXC,MAAM,CAAAI,IAAK;QAAAF,QAAA,GAAE,QACrC,EAACf,sBAAsB;MAAA,CACzB;IAAC,CACH,CAAC;IAAAO,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAA,OAJPE,EAIO;AAAA;AAIX,MAAMI,MAAM,GAAGf,UAAU,CAACoB,MAAM,CAAC;EAC/BJ,SAAS,EAAE;IACTK,UAAU,EAAE,QAAQ;IACpBC,UAAU,EAAE,EAAE;IACdC,aAAa,EAAE,CAAC;IAChBC,iBAAiB,EAAE;EACrB,CAAC;EACDL,IAAI,EAAE;IACJM,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
@@ -8,6 +8,7 @@ export * from './use_chat_permissions';
8
8
  export * from './use_create_android_ripple_color';
9
9
  export * from './use_current_person';
10
10
  export * from './use_deleting_ids';
11
+ export * from './use_direct_message_eligibility';
11
12
  export * from './use_direct_messages_eligible';
12
13
  export * from './use_font_scale';
13
14
  export * from './use_has_direct_messages';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mCAAmC,CAAA;AACjD,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sCAAsC,CAAA;AACpD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mCAAmC,CAAA;AACjD,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kCAAkC,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sCAAsC,CAAA;AACpD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA"}
@@ -8,6 +8,7 @@ export * from './use_chat_permissions';
8
8
  export * from './use_create_android_ripple_color';
9
9
  export * from './use_current_person';
10
10
  export * from './use_deleting_ids';
11
+ export * from './use_direct_message_eligibility';
11
12
  export * from './use_direct_messages_eligible';
12
13
  export * from './use_font_scale';
13
14
  export * from './use_has_direct_messages';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useApiClient"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export * from './use_animated_message_background_color'\nexport { useApiClient } from './use_api_client'\nexport * from './use_api'\nexport * from './use_app_state'\nexport * from './use_async_storage'\nexport * from './use_at_font_scale_breakpoint'\nexport * from './use_chat_permissions'\nexport * from './use_create_android_ripple_color'\nexport * from './use_current_person'\nexport * from './use_deleting_ids'\nexport * from './use_direct_messages_eligible'\nexport * from './use_font_scale'\nexport * from './use_has_direct_messages'\nexport * from './use_groups_groups'\nexport * from './use_groups'\nexport * from './use_selected_chip_background_color'\nexport * from './use_interaction_tinted_background_color'\nexport * from './use_message_reaction_toggle'\nexport * from './use_new_conversation_entry'\nexport * from './use_organization'\nexport * from './use_people_person'\nexport * from './use_preview_avatar_diameter'\nexport * from './use_product_analytics'\nexport * from './use_qualified_by_age'\nexport * from './use_scalable_number_of_lines'\nexport * from './use_submit_age_check'\nexport * from './use_suspense_api'\nexport * from './use_theme'\n"],"mappings":"AAAA,cAAc,yCAAyC;AACvD,SAASA,YAAY,QAAQ,kBAAkB;AAC/C,cAAc,WAAW;AACzB,cAAc,iBAAiB;AAC/B,cAAc,qBAAqB;AACnC,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,mCAAmC;AACjD,cAAc,sBAAsB;AACpC,cAAc,oBAAoB;AAClC,cAAc,gCAAgC;AAC9C,cAAc,kBAAkB;AAChC,cAAc,2BAA2B;AACzC,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,sCAAsC;AACpD,cAAc,2CAA2C;AACzD,cAAc,+BAA+B;AAC7C,cAAc,8BAA8B;AAC5C,cAAc,oBAAoB;AAClC,cAAc,qBAAqB;AACnC,cAAc,+BAA+B;AAC7C,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,oBAAoB;AAClC,cAAc,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useApiClient"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export * from './use_animated_message_background_color'\nexport { useApiClient } from './use_api_client'\nexport * from './use_api'\nexport * from './use_app_state'\nexport * from './use_async_storage'\nexport * from './use_at_font_scale_breakpoint'\nexport * from './use_chat_permissions'\nexport * from './use_create_android_ripple_color'\nexport * from './use_current_person'\nexport * from './use_deleting_ids'\nexport * from './use_direct_message_eligibility'\nexport * from './use_direct_messages_eligible'\nexport * from './use_font_scale'\nexport * from './use_has_direct_messages'\nexport * from './use_groups_groups'\nexport * from './use_groups'\nexport * from './use_selected_chip_background_color'\nexport * from './use_interaction_tinted_background_color'\nexport * from './use_message_reaction_toggle'\nexport * from './use_new_conversation_entry'\nexport * from './use_organization'\nexport * from './use_people_person'\nexport * from './use_preview_avatar_diameter'\nexport * from './use_product_analytics'\nexport * from './use_qualified_by_age'\nexport * from './use_scalable_number_of_lines'\nexport * from './use_submit_age_check'\nexport * from './use_suspense_api'\nexport * from './use_theme'\n"],"mappings":"AAAA,cAAc,yCAAyC;AACvD,SAASA,YAAY,QAAQ,kBAAkB;AAC/C,cAAc,WAAW;AACzB,cAAc,iBAAiB;AAC/B,cAAc,qBAAqB;AACnC,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,mCAAmC;AACjD,cAAc,sBAAsB;AACpC,cAAc,oBAAoB;AAClC,cAAc,kCAAkC;AAChD,cAAc,gCAAgC;AAC9C,cAAc,kBAAkB;AAChC,cAAc,2BAA2B;AACzC,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,sCAAsC;AACpD,cAAc,2CAA2C;AACzD,cAAc,+BAA+B;AAC7C,cAAc,8BAA8B;AAC5C,cAAc,oBAAoB;AAClC,cAAc,qBAAqB;AACnC,cAAc,+BAA+B;AAC7C,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,gCAAgC;AAC9C,cAAc,wBAAwB;AACtC,cAAc,oBAAoB;AAClC,cAAc,aAAa","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ export interface DirectMessageEligibility {
2
+ canDirectMessage: boolean;
3
+ directMessagesDisabled: boolean;
4
+ }
5
+ export declare function useDirectMessageEligibility({ groupId, personId, enabled, }: {
6
+ groupId: string;
7
+ personId: number;
8
+ enabled?: boolean;
9
+ }): {
10
+ eligibility: DirectMessageEligibility | undefined;
11
+ isLoading: boolean;
12
+ };
13
+ //# sourceMappingURL=use_direct_message_eligibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_direct_message_eligibility.d.ts","sourceRoot":"","sources":["../../src/hooks/use_direct_message_eligibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,CAAA;IACzB,sBAAsB,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,QAAQ,EACR,OAAc,GACf,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;;;EAsBA"}
@@ -0,0 +1,84 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { useApiClient } from './use_api_client';
4
+ export function useDirectMessageEligibility(t0) {
5
+ const $ = _c(14);
6
+ const {
7
+ groupId,
8
+ personId,
9
+ enabled: t1
10
+ } = t0;
11
+ const enabled = t1 === undefined ? true : t1;
12
+ const apiClient = useApiClient();
13
+ const url = `/me/groups/${groupId}/members/${personId}`;
14
+ let t2;
15
+ if ($[0] !== url) {
16
+ t2 = ["chat", url, "direct_message_eligibility"];
17
+ $[0] = url;
18
+ $[1] = t2;
19
+ } else {
20
+ t2 = $[1];
21
+ }
22
+ let t3;
23
+ if ($[2] !== apiClient || $[3] !== url) {
24
+ t3 = () => apiClient.chat.get({
25
+ url,
26
+ data: {
27
+ fields: {
28
+ Member: ["can_direct_message", "direct_messages_disabled"]
29
+ }
30
+ }
31
+ });
32
+ $[2] = apiClient;
33
+ $[3] = url;
34
+ $[4] = t3;
35
+ } else {
36
+ t3 = $[4];
37
+ }
38
+ let t4;
39
+ if ($[5] !== enabled || $[6] !== t2 || $[7] !== t3) {
40
+ t4 = {
41
+ queryKey: t2,
42
+ queryFn: t3,
43
+ enabled,
44
+ retry: false
45
+ };
46
+ $[5] = enabled;
47
+ $[6] = t2;
48
+ $[7] = t3;
49
+ $[8] = t4;
50
+ } else {
51
+ t4 = $[8];
52
+ }
53
+ const {
54
+ data,
55
+ isLoading
56
+ } = useQuery(t4);
57
+ const member = data?.data;
58
+ let t5;
59
+ if ($[9] !== member) {
60
+ t5 = member && {
61
+ canDirectMessage: member.canDirectMessage ?? false,
62
+ directMessagesDisabled: member.directMessagesDisabled ?? false
63
+ };
64
+ $[9] = member;
65
+ $[10] = t5;
66
+ } else {
67
+ t5 = $[10];
68
+ }
69
+ const eligibility = t5;
70
+ let t6;
71
+ if ($[11] !== eligibility || $[12] !== isLoading) {
72
+ t6 = {
73
+ eligibility,
74
+ isLoading
75
+ };
76
+ $[11] = eligibility;
77
+ $[12] = isLoading;
78
+ $[13] = t6;
79
+ } else {
80
+ t6 = $[13];
81
+ }
82
+ return t6;
83
+ }
84
+ //# sourceMappingURL=use_direct_message_eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_direct_message_eligibility.js","names":["useQuery","useApiClient","useDirectMessageEligibility","t0","$","_c","groupId","personId","enabled","t1","undefined","apiClient","url","t2","t3","chat","get","data","fields","Member","t4","queryKey","queryFn","retry","isLoading","member","t5","canDirectMessage","directMessagesDisabled","eligibility","t6"],"sources":["../../src/hooks/use_direct_message_eligibility.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiResource, MemberResource } from '../types'\nimport { useApiClient } from './use_api_client'\n\nexport interface DirectMessageEligibility {\n canDirectMessage: boolean\n directMessagesDisabled: boolean\n}\n\nexport function useDirectMessageEligibility({\n groupId,\n personId,\n enabled = true,\n}: {\n groupId: string\n personId: number\n enabled?: boolean\n}) {\n const apiClient = useApiClient()\n const url = `/me/groups/${groupId}/members/${personId}`\n\n const { data, isLoading } = useQuery({\n queryKey: ['chat', url, 'direct_message_eligibility'],\n queryFn: () =>\n apiClient.chat.get({\n url,\n data: { fields: { Member: ['can_direct_message', 'direct_messages_disabled'] } },\n }) as Promise<ApiResource<MemberResource>>,\n enabled,\n retry: false,\n })\n\n const member = data?.data\n const eligibility: DirectMessageEligibility | undefined = member && {\n canDirectMessage: member.canDirectMessage ?? false,\n directMessagesDisabled: member.directMessagesDisabled ?? false,\n }\n\n return { eligibility, isLoading }\n}\n"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,YAAY,QAAQ,kBAAkB;AAO/C,OAAO,SAAAC,4BAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqC;IAAAC,OAAA;IAAAC,QAAA;IAAAC,OAAA,EAAAC;EAAA,IAAAN,EAQ3C;EALC,MAAAK,OAAA,GAAAC,EAAc,KAAdC,SAAc,GAAd,IAAc,GAAdD,EAAc;EAMd,MAAAE,SAAA,GAAkBV,YAAY,CAAC,CAAC;EAChC,MAAAW,GAAA,GAAY,cAAcN,OAAO,YAAYC,QAAQ,EAAE;EAAA,IAAAM,EAAA;EAAA,IAAAT,CAAA,QAAAQ,GAAA;IAG3CC,EAAA,IAAC,MAAM,EAAED,GAAG,EAAE,4BAA4B,CAAC;IAAAR,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAU,EAAA;EAAA,IAAAV,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAQ,GAAA;IAC5CE,EAAA,GAAAA,CAAA,KACPH,SAAS,CAAAI,IAAK,CAAAC,GAAI,CAAC;MAAAJ,GAAA;MAAAK,IAAA,EAEX;QAAAC,MAAA,EAAU;UAAAC,MAAA,EAAU,CAAC,oBAAoB,EAAE,0BAA0B;QAAE;MAAE;IACjF,CAAC,CAAyC;IAAAf,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAhB,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAS,EAAA,IAAAT,CAAA,QAAAU,EAAA;IANTM,EAAA;MAAAC,QAAA,EACzBR,EAA2C;MAAAS,OAAA,EAC5CR,EAImC;MAAAN,OAAA;MAAAe,KAAA,EAErC;IACT,CAAC;IAAAnB,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EATD;IAAAa,IAAA;IAAAO;EAAA,IAA4BxB,QAAQ,CAACoB,EASpC,CAAC;EAEF,MAAAK,MAAA,GAAeR,IAAI,EAAAA,IAAM;EAAA,IAAAS,EAAA;EAAA,IAAAtB,CAAA,QAAAqB,MAAA;IACiCC,EAAA,GAAAD,MAGzD,IAHyD;MAAAE,gBAAA,EACtCF,MAAM,CAAAE,gBAA0B,IAAhC,KAAgC;MAAAC,sBAAA,EAC1BH,MAAM,CAAAG,sBAAgC,IAAtC;IAC1B,CAAC;IAAAxB,CAAA,MAAAqB,MAAA;IAAArB,CAAA,OAAAsB,EAAA;EAAA;IAAAA,EAAA,GAAAtB,CAAA;EAAA;EAHD,MAAAyB,WAAA,GAA0DH,EAGzD;EAAA,IAAAI,EAAA;EAAA,IAAA1B,CAAA,SAAAyB,WAAA,IAAAzB,CAAA,SAAAoB,SAAA;IAEMM,EAAA;MAAAD,WAAA;MAAAL;IAAyB,CAAC;IAAApB,CAAA,OAAAyB,WAAA;IAAAzB,CAAA,OAAAoB,SAAA;IAAApB,CAAA,OAAA0B,EAAA;EAAA;IAAAA,EAAA,GAAA1B,CAAA;EAAA;EAAA,OAA1B0B,EAA0B;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings_screen.d.ts","sourceRoot":"","sources":["../../src/screens/settings_screen.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAA;AAS3E,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;AAEvD,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,2CA0CrD"}
1
+ {"version":3,"file":"settings_screen.d.ts","sourceRoot":"","sources":["../../src/screens/settings_screen.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAA;AAU3E,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;AAEvD,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,2CA6CrD"}
@@ -3,14 +3,15 @@ import { PlatformPressable } from '@react-navigation/elements';
3
3
  import { useNavigation } from '@react-navigation/native';
4
4
  import React, { useCallback } from 'react';
5
5
  import { Platform, StyleSheet, View } from 'react-native';
6
- import { Heading, Icon, Text } from '../components';
6
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
7
+ import { Heading, Icon, Text, VersionFooter } from '../components';
7
8
  import { Switch } from '../components/display/switch';
8
9
  import { useDirectMessagesEligible, useTheme } from '../hooks';
9
10
  import { useAppName } from '../hooks/use_app_name';
10
11
  import { usePersonSettings } from '../hooks/use_person_settings';
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  export function SettingsScreen(t0) {
13
- const $ = _c(28);
14
+ const $ = _c(32);
14
15
  const styles = useStyles();
15
16
  const {
16
17
  directMessagesDisabled,
@@ -132,18 +133,37 @@ export function SettingsScreen(t0) {
132
133
  t8 = $[24];
133
134
  }
134
135
  let t9;
135
- if ($[25] !== styles.container || $[26] !== t8) {
136
- t9 = /*#__PURE__*/_jsx(View, {
136
+ if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
137
+ t9 = /*#__PURE__*/_jsx(VersionFooter, {});
138
+ $[25] = t9;
139
+ } else {
140
+ t9 = $[25];
141
+ }
142
+ let t10;
143
+ if ($[26] !== styles.footer) {
144
+ t10 = /*#__PURE__*/_jsx(View, {
145
+ style: styles.footer,
146
+ children: t9
147
+ });
148
+ $[26] = styles.footer;
149
+ $[27] = t10;
150
+ } else {
151
+ t10 = $[27];
152
+ }
153
+ let t11;
154
+ if ($[28] !== styles.container || $[29] !== t10 || $[30] !== t8) {
155
+ t11 = /*#__PURE__*/_jsxs(View, {
137
156
  style: styles.container,
138
- children: t8
157
+ children: [t8, t10]
139
158
  });
140
- $[25] = styles.container;
141
- $[26] = t8;
142
- $[27] = t9;
159
+ $[28] = styles.container;
160
+ $[29] = t10;
161
+ $[30] = t8;
162
+ $[31] = t11;
143
163
  } else {
144
- t9 = $[27];
164
+ t11 = $[31];
145
165
  }
146
- return t9;
166
+ return t11;
147
167
  }
148
168
  function NavRow(t0) {
149
169
  const $ = _c(13);
@@ -207,16 +227,22 @@ function NavRow(t0) {
207
227
  return t4;
208
228
  }
209
229
  const useStyles = () => {
210
- const $ = _c(2);
230
+ const $ = _c(3);
211
231
  const {
212
232
  colors
213
233
  } = useTheme();
234
+ const insets = useSafeAreaInsets();
214
235
  let t0;
215
- if ($[0] !== colors.borderColorDefaultBase) {
236
+ if ($[0] !== colors.borderColorDefaultBase || $[1] !== insets.bottom) {
216
237
  t0 = StyleSheet.create({
217
238
  container: {
218
239
  flex: 1
219
240
  },
241
+ footer: {
242
+ flex: 1,
243
+ justifyContent: "flex-end",
244
+ paddingBottom: Math.max(insets.bottom, 8)
245
+ },
220
246
  sectionOuter: {
221
247
  paddingLeft: 16
222
248
  },
@@ -242,9 +268,10 @@ const useStyles = () => {
242
268
  }
243
269
  });
244
270
  $[0] = colors.borderColorDefaultBase;
245
- $[1] = t0;
271
+ $[1] = insets.bottom;
272
+ $[2] = t0;
246
273
  } else {
247
- t0 = $[1];
274
+ t0 = $[2];
248
275
  }
249
276
  return t0;
250
277
  };
@@ -1 +1 @@
1
- {"version":3,"file":"settings_screen.js","names":["PlatformPressable","useNavigation","React","useCallback","Platform","StyleSheet","View","Heading","Icon","Text","Switch","useDirectMessagesEligible","useTheme","useAppName","usePersonSettings","jsx","_jsx","jsxs","_jsxs","SettingsScreen","t0","$","_c","styles","useStyles","directMessagesDisabled","setDirectMessagesDisabled","isMutating","directMessagesEligible","appName","navigation","t1","navigate","handleNotificationSettings","t2","type","handleGetHelp","t3","Symbol","for","variant","children","t4","sectionHeader","style","t5","settingRow","settingRowText","value","onValueChange","enabled","t6","NavRow","label","t7","t8","sectionOuter","t9","container","onPress","useNavRowStyles","chevron","OS","name","size","inner","accessibilityRole","colors","borderColorDefaultBase","create","flex","paddingLeft","paddingRight","paddingTop","paddingBottom","borderBottomWidth","borderBottomColor","flexDirection","alignItems","justifyContent","paddingVertical","gap","iconColorDefaultDisabled","color"],"sources":["../../src/screens/settings_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport React, { useCallback } from 'react'\nimport { Platform, StyleSheet, View } from 'react-native'\nimport { Heading, Icon, Text } from '../components'\nimport { Switch } from '../components/display/switch'\nimport { useDirectMessagesEligible, useTheme } from '../hooks'\nimport { useAppName } from '../hooks/use_app_name'\nimport { usePersonSettings } from '../hooks/use_person_settings'\n\nexport type SettingsScreenProps = StaticScreenProps<{}>\n\nexport function SettingsScreen({}: SettingsScreenProps) {\n const styles = useStyles()\n const { directMessagesDisabled, setDirectMessagesDisabled, isMutating } = usePersonSettings()\n const directMessagesEligible = useDirectMessagesEligible()\n const appName = useAppName()\n const navigation = useNavigation()\n\n const handleNotificationSettings = useCallback(() => {\n navigation.navigate('NotificationSettings', {})\n }, [navigation])\n\n const handleGetHelp = useCallback(() => {\n navigation.navigate('GetHelp', { type: 'chat' })\n }, [navigation])\n\n return (\n <View style={styles.container}>\n <View style={styles.sectionOuter}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h2\">Messages</Heading>\n </View>\n {directMessagesEligible && (\n <View style={styles.settingRow}>\n <View style={styles.settingRowText}>\n <Text>Allow direct messages</Text>\n <Text variant=\"tertiary\">\n When off, you can't be added to new direct messages, and any you're already in will\n be turned off.\n </Text>\n </View>\n <Switch\n value={!directMessagesDisabled}\n onValueChange={enabled => setDirectMessagesDisabled(!enabled)}\n disabled={isMutating}\n />\n </View>\n )}\n <NavRow label=\"Notification settings\" onPress={handleNotificationSettings} />\n {appName !== 'services' && <NavRow label=\"Get help\" onPress={handleGetHelp} />}\n </View>\n </View>\n )\n}\n\ninterface NavRowProps {\n label: string\n onPress: () => void\n}\n\nfunction NavRow({ label, onPress }: NavRowProps) {\n const styles = useNavRowStyles()\n return (\n <PlatformPressable\n style={styles.container}\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n >\n <View style={styles.inner}>\n <Text>{label}</Text>\n {Platform.OS === 'ios' && (\n <Icon name=\"general.rightChevron\" size={16} style={styles.chevron} />\n )}\n </View>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n container: {\n flex: 1,\n },\n sectionOuter: {\n paddingLeft: 16,\n },\n sectionHeader: {\n paddingRight: 16,\n paddingTop: 24,\n paddingBottom: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRowText: {\n flex: 1,\n gap: 8,\n },\n })\n}\n\nconst useNavRowStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n container: {\n paddingLeft: 0,\n },\n inner: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 14,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n chevron: {\n color: colors.iconColorDefaultDisabled,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"settings_screen.js","names":["PlatformPressable","useNavigation","React","useCallback","Platform","StyleSheet","View","useSafeAreaInsets","Heading","Icon","Text","VersionFooter","Switch","useDirectMessagesEligible","useTheme","useAppName","usePersonSettings","jsx","_jsx","jsxs","_jsxs","SettingsScreen","t0","$","_c","styles","useStyles","directMessagesDisabled","setDirectMessagesDisabled","isMutating","directMessagesEligible","appName","navigation","t1","navigate","handleNotificationSettings","t2","type","handleGetHelp","t3","Symbol","for","variant","children","t4","sectionHeader","style","t5","settingRow","settingRowText","value","onValueChange","enabled","t6","NavRow","label","t7","t8","sectionOuter","t9","t10","footer","t11","container","onPress","useNavRowStyles","chevron","OS","name","size","inner","accessibilityRole","colors","insets","borderColorDefaultBase","bottom","create","flex","justifyContent","paddingBottom","Math","max","paddingLeft","paddingRight","paddingTop","borderBottomWidth","borderBottomColor","flexDirection","alignItems","paddingVertical","gap","iconColorDefaultDisabled","color"],"sources":["../../src/screens/settings_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport React, { useCallback } from 'react'\nimport { Platform, StyleSheet, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Heading, Icon, Text, VersionFooter } from '../components'\nimport { Switch } from '../components/display/switch'\nimport { useDirectMessagesEligible, useTheme } from '../hooks'\nimport { useAppName } from '../hooks/use_app_name'\nimport { usePersonSettings } from '../hooks/use_person_settings'\n\nexport type SettingsScreenProps = StaticScreenProps<{}>\n\nexport function SettingsScreen({}: SettingsScreenProps) {\n const styles = useStyles()\n const { directMessagesDisabled, setDirectMessagesDisabled, isMutating } = usePersonSettings()\n const directMessagesEligible = useDirectMessagesEligible()\n const appName = useAppName()\n const navigation = useNavigation()\n\n const handleNotificationSettings = useCallback(() => {\n navigation.navigate('NotificationSettings', {})\n }, [navigation])\n\n const handleGetHelp = useCallback(() => {\n navigation.navigate('GetHelp', { type: 'chat' })\n }, [navigation])\n\n return (\n <View style={styles.container}>\n <View style={styles.sectionOuter}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h2\">Messages</Heading>\n </View>\n {directMessagesEligible && (\n <View style={styles.settingRow}>\n <View style={styles.settingRowText}>\n <Text>Allow direct messages</Text>\n <Text variant=\"tertiary\">\n When off, you can't be added to new direct messages, and any you're already in will\n be turned off.\n </Text>\n </View>\n <Switch\n value={!directMessagesDisabled}\n onValueChange={enabled => setDirectMessagesDisabled(!enabled)}\n disabled={isMutating}\n />\n </View>\n )}\n <NavRow label=\"Notification settings\" onPress={handleNotificationSettings} />\n {appName !== 'services' && <NavRow label=\"Get help\" onPress={handleGetHelp} />}\n </View>\n <View style={styles.footer}>\n <VersionFooter />\n </View>\n </View>\n )\n}\n\ninterface NavRowProps {\n label: string\n onPress: () => void\n}\n\nfunction NavRow({ label, onPress }: NavRowProps) {\n const styles = useNavRowStyles()\n return (\n <PlatformPressable\n style={styles.container}\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n >\n <View style={styles.inner}>\n <Text>{label}</Text>\n {Platform.OS === 'ios' && (\n <Icon name=\"general.rightChevron\" size={16} style={styles.chevron} />\n )}\n </View>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const insets = useSafeAreaInsets()\n return StyleSheet.create({\n container: {\n flex: 1,\n },\n footer: {\n flex: 1,\n justifyContent: 'flex-end',\n paddingBottom: Math.max(insets.bottom, 8),\n },\n sectionOuter: {\n paddingLeft: 16,\n },\n sectionHeader: {\n paddingRight: 16,\n paddingTop: 24,\n paddingBottom: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRowText: {\n flex: 1,\n gap: 8,\n },\n })\n}\n\nconst useNavRowStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n container: {\n paddingLeft: 0,\n },\n inner: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 14,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n chevron: {\n color: colors.iconColorDefaultDisabled,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ export interface MemberResource {
6
6
  badges: MemberBadge[];
7
7
  child: boolean;
8
8
  directMessagesDisabled?: boolean;
9
+ canDirectMessage?: boolean;
9
10
  gender: string | null;
10
11
  role?: string;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../../src/types/resources/member.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"member.d.ts","sourceRoot":"","sources":["../../../src/types/resources/member.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"member.js","names":[],"sources":["../../../src/types/resources/member.ts"],"sourcesContent":["export interface MemberResource {\n type: 'Member'\n id: number\n name: string\n avatar: string\n badges: MemberBadge[]\n child: boolean\n directMessagesDisabled?: boolean\n gender: string | null\n role?: string\n}\n\nexport interface MemberBadge {\n title: string\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"member.js","names":[],"sources":["../../../src/types/resources/member.ts"],"sourcesContent":["export interface MemberResource {\n type: 'Member'\n id: number\n name: string\n avatar: string\n badges: MemberBadge[]\n child: boolean\n directMessagesDisabled?: boolean\n canDirectMessage?: boolean\n gender: string | null\n role?: string\n}\n\nexport interface MemberBadge {\n title: string\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const chatReactNativeVersion: string;
2
+ //# sourceMappingURL=package_version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package_version.d.ts","sourceRoot":"","sources":["../../src/utils/package_version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,QAAU,CAAA"}
@@ -0,0 +1,5 @@
1
+ const {
2
+ version
3
+ } = require('../../package.json');
4
+ export const chatReactNativeVersion = version;
5
+ //# sourceMappingURL=package_version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package_version.js","names":["version","require","chatReactNativeVersion"],"sources":["../../src/utils/package_version.ts"],"sourcesContent":["const { version } = require('../../package.json') as { version: string }\n\nexport const chatReactNativeVersion = version\n"],"mappings":"AAAA,MAAM;EAAEA;AAAQ,CAAC,GAAGC,OAAO,CAAC,oBAAoB,CAAwB;AAExE,OAAO,MAAMC,sBAAsB,GAAGF,OAAO","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.1.1-qa-staging.6",
3
+ "version": "4.1.1-qa-staging.7",
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.1.1-qa-staging.6",
36
+ "@planningcenter/emoji-keyboard": "4.1.1-qa-staging.7",
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": "aefff61352770a65272bb9a309395e579934c73d"
87
+ "gitHead": "66bcbd03e4b7a923c673bf01efd30bc1e861e9c2"
88
88
  }
@@ -0,0 +1,70 @@
1
+ import { QueryClientProvider } from '@tanstack/react-query'
2
+ import { renderHook, waitFor } from '@testing-library/react-native'
3
+ import React from 'react'
4
+ import { buildTestQueryClient } from '../../__utils__/query_client'
5
+ import { useApiClient } from '../../hooks/use_api_client'
6
+ import { useDirectMessageEligibility } from '../../hooks/use_direct_message_eligibility'
7
+
8
+ jest.mock('../../hooks/use_api_client')
9
+
10
+ const mockedUseApiClient = useApiClient as jest.MockedFunction<typeof useApiClient>
11
+ const mockGet = jest.fn()
12
+
13
+ beforeEach(() => {
14
+ mockGet.mockReset()
15
+ mockedUseApiClient.mockReturnValue({ chat: { get: mockGet } } as any)
16
+ })
17
+
18
+ const createWrapper = () => {
19
+ const queryClient = buildTestQueryClient()
20
+ return ({ children }: { children: React.ReactNode }) => (
21
+ <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
22
+ )
23
+ }
24
+
25
+ const args = { groupId: 'Groups-Group-42', personId: 75179873 }
26
+
27
+ test("reads the member's eligibility from the chat group", async () => {
28
+ mockGet.mockResolvedValue({
29
+ data: {
30
+ id: '75179873',
31
+ type: 'Member',
32
+ canDirectMessage: false,
33
+ directMessagesDisabled: true,
34
+ },
35
+ })
36
+
37
+ const { result } = renderHook(() => useDirectMessageEligibility(args), {
38
+ wrapper: createWrapper(),
39
+ })
40
+
41
+ await waitFor(() => expect(result.current.eligibility).toBeDefined())
42
+
43
+ expect(mockGet).toHaveBeenCalledWith({
44
+ url: '/me/groups/Groups-Group-42/members/75179873',
45
+ data: { fields: { Member: ['can_direct_message', 'direct_messages_disabled'] } },
46
+ })
47
+ expect(result.current.eligibility).toEqual({
48
+ canDirectMessage: false,
49
+ directMessagesDisabled: true,
50
+ })
51
+ })
52
+
53
+ test('has no answer until the member loads', () => {
54
+ mockGet.mockReturnValue(new Promise(() => {}))
55
+
56
+ const { result } = renderHook(() => useDirectMessageEligibility(args), {
57
+ wrapper: createWrapper(),
58
+ })
59
+
60
+ expect(result.current.eligibility).toBeUndefined()
61
+ expect(result.current.isLoading).toBe(true)
62
+ })
63
+
64
+ test('does not ask when disabled', () => {
65
+ renderHook(() => useDirectMessageEligibility({ ...args, enabled: false }), {
66
+ wrapper: createWrapper(),
67
+ })
68
+
69
+ expect(mockGet).not.toHaveBeenCalled()
70
+ })
@@ -0,0 +1,48 @@
1
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2
+ import { render } from '@testing-library/react-native'
3
+ import React from 'react'
4
+ import { buildTestQueryClient } from '../../../__utils__/query_client'
5
+ import { ChatProvider } from '../../../contexts/chat_context'
6
+ import { VersionFooter } from '../version_footer'
7
+
8
+ const { version: packageVersion } = require('../../../../package.json') as { version: string }
9
+
10
+ let queryClient: QueryClient
11
+
12
+ beforeEach(() => {
13
+ queryClient = buildTestQueryClient()
14
+ })
15
+
16
+ afterEach(() => {
17
+ queryClient.clear()
18
+ })
19
+
20
+ const Wrapper = ({ children }: { children: React.ReactNode }) => (
21
+ <QueryClientProvider client={queryClient}>
22
+ <ChatProvider
23
+ value={{
24
+ token: {
25
+ access_token: '',
26
+ created_at: 0,
27
+ expires_in: 0,
28
+ scope: '',
29
+ refresh_token: '',
30
+ token_type: '',
31
+ },
32
+ onUnauthorizedResponse: () => {},
33
+ theme: { theme: { colors: {} }, colorScheme: 'light' },
34
+ }}
35
+ >
36
+ {children}
37
+ </ChatProvider>
38
+ </QueryClientProvider>
39
+ )
40
+
41
+ describe('VersionFooter', () => {
42
+ it('shows the published chat-react-native version', () => {
43
+ const { getByText } = render(<VersionFooter />, { wrapper: Wrapper })
44
+
45
+ expect(packageVersion).toMatch(/^\d+\.\d+\.\d+/)
46
+ expect(getByText(`Chat v${packageVersion}`)).toBeTruthy()
47
+ })
48
+ })
@@ -27,3 +27,4 @@ export * from './keyboard_scroll_view'
27
27
  export * from './keyboard_view'
28
28
  export * from './platform_modal_header_buttons'
29
29
  export * from './pressable_row'
30
+ export * from './version_footer'
@@ -0,0 +1,26 @@
1
+ import React from 'react'
2
+ import { StyleSheet, View } from 'react-native'
3
+ import { chatReactNativeVersion } from '../../utils/package_version'
4
+ import { Text } from './text'
5
+
6
+ export function VersionFooter() {
7
+ return (
8
+ <View style={styles.container}>
9
+ <Text variant="footnote" style={styles.text}>
10
+ Chat v{chatReactNativeVersion}
11
+ </Text>
12
+ </View>
13
+ )
14
+ }
15
+
16
+ const styles = StyleSheet.create({
17
+ container: {
18
+ alignItems: 'center',
19
+ paddingTop: 24,
20
+ paddingBottom: 8,
21
+ paddingHorizontal: 16,
22
+ },
23
+ text: {
24
+ textAlign: 'center',
25
+ },
26
+ })
@@ -8,6 +8,7 @@ export * from './use_chat_permissions'
8
8
  export * from './use_create_android_ripple_color'
9
9
  export * from './use_current_person'
10
10
  export * from './use_deleting_ids'
11
+ export * from './use_direct_message_eligibility'
11
12
  export * from './use_direct_messages_eligible'
12
13
  export * from './use_font_scale'
13
14
  export * from './use_has_direct_messages'
@@ -0,0 +1,40 @@
1
+ import { useQuery } from '@tanstack/react-query'
2
+ import { ApiResource, MemberResource } from '../types'
3
+ import { useApiClient } from './use_api_client'
4
+
5
+ export interface DirectMessageEligibility {
6
+ canDirectMessage: boolean
7
+ directMessagesDisabled: boolean
8
+ }
9
+
10
+ export function useDirectMessageEligibility({
11
+ groupId,
12
+ personId,
13
+ enabled = true,
14
+ }: {
15
+ groupId: string
16
+ personId: number
17
+ enabled?: boolean
18
+ }) {
19
+ const apiClient = useApiClient()
20
+ const url = `/me/groups/${groupId}/members/${personId}`
21
+
22
+ const { data, isLoading } = useQuery({
23
+ queryKey: ['chat', url, 'direct_message_eligibility'],
24
+ queryFn: () =>
25
+ apiClient.chat.get({
26
+ url,
27
+ data: { fields: { Member: ['can_direct_message', 'direct_messages_disabled'] } },
28
+ }) as Promise<ApiResource<MemberResource>>,
29
+ enabled,
30
+ retry: false,
31
+ })
32
+
33
+ const member = data?.data
34
+ const eligibility: DirectMessageEligibility | undefined = member && {
35
+ canDirectMessage: member.canDirectMessage ?? false,
36
+ directMessagesDisabled: member.directMessagesDisabled ?? false,
37
+ }
38
+
39
+ return { eligibility, isLoading }
40
+ }
@@ -2,7 +2,8 @@ import { PlatformPressable } from '@react-navigation/elements'
2
2
  import { StaticScreenProps, useNavigation } from '@react-navigation/native'
3
3
  import React, { useCallback } from 'react'
4
4
  import { Platform, StyleSheet, View } from 'react-native'
5
- import { Heading, Icon, Text } from '../components'
5
+ import { useSafeAreaInsets } from 'react-native-safe-area-context'
6
+ import { Heading, Icon, Text, VersionFooter } from '../components'
6
7
  import { Switch } from '../components/display/switch'
7
8
  import { useDirectMessagesEligible, useTheme } from '../hooks'
8
9
  import { useAppName } from '../hooks/use_app_name'
@@ -50,6 +51,9 @@ export function SettingsScreen({}: SettingsScreenProps) {
50
51
  <NavRow label="Notification settings" onPress={handleNotificationSettings} />
51
52
  {appName !== 'services' && <NavRow label="Get help" onPress={handleGetHelp} />}
52
53
  </View>
54
+ <View style={styles.footer}>
55
+ <VersionFooter />
56
+ </View>
53
57
  </View>
54
58
  )
55
59
  }
@@ -80,10 +84,16 @@ function NavRow({ label, onPress }: NavRowProps) {
80
84
 
81
85
  const useStyles = () => {
82
86
  const { colors } = useTheme()
87
+ const insets = useSafeAreaInsets()
83
88
  return StyleSheet.create({
84
89
  container: {
85
90
  flex: 1,
86
91
  },
92
+ footer: {
93
+ flex: 1,
94
+ justifyContent: 'flex-end',
95
+ paddingBottom: Math.max(insets.bottom, 8),
96
+ },
87
97
  sectionOuter: {
88
98
  paddingLeft: 16,
89
99
  },
@@ -6,6 +6,7 @@ export interface MemberResource {
6
6
  badges: MemberBadge[]
7
7
  child: boolean
8
8
  directMessagesDisabled?: boolean
9
+ canDirectMessage?: boolean
9
10
  gender: string | null
10
11
  role?: string
11
12
  }
@@ -0,0 +1,3 @@
1
+ const { version } = require('../../package.json') as { version: string }
2
+
3
+ export const chatReactNativeVersion = version