@planningcenter/chat-react-native 3.42.3-qa-staging.6 → 3.42.3-qa-856.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/conversation/messages_disabled_banners.d.ts +3 -2
- package/build/components/conversation/messages_disabled_banners.d.ts.map +1 -1
- package/build/components/conversation/messages_disabled_banners.js +7 -2
- package/build/components/conversation/messages_disabled_banners.js.map +1 -1
- package/build/components/display/adult_requirement_notice.js +1 -1
- package/build/components/display/adult_requirement_notice.js.map +1 -1
- package/build/components/display/platform_modal_header_buttons.d.ts +7 -29
- package/build/components/display/platform_modal_header_buttons.d.ts.map +1 -1
- package/build/components/display/platform_modal_header_buttons.js +24 -76
- package/build/components/display/platform_modal_header_buttons.js.map +1 -1
- package/build/hooks/index.d.ts +1 -1
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +1 -1
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/use_conversation.d.ts.map +1 -1
- package/build/hooks/use_conversation.js +0 -1
- package/build/hooks/use_conversation.js.map +1 -1
- package/build/hooks/use_conversation_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_jolt_events.js +2 -10
- package/build/hooks/use_conversation_jolt_events.js.map +1 -1
- package/build/hooks/use_current_person.d.ts.map +1 -1
- package/build/hooks/use_current_person.js +0 -1
- package/build/hooks/use_current_person.js.map +1 -1
- package/build/hooks/use_direct_messages_enabled.d.ts +2 -0
- package/build/hooks/use_direct_messages_enabled.d.ts.map +1 -0
- package/build/hooks/use_direct_messages_enabled.js +16 -0
- package/build/hooks/use_direct_messages_enabled.js.map +1 -0
- package/build/hooks/use_features.d.ts +1 -0
- package/build/hooks/use_features.d.ts.map +1 -1
- package/build/hooks/use_features.js +1 -0
- package/build/hooks/use_features.js.map +1 -1
- package/build/navigation/index.d.ts +84 -50
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +36 -27
- package/build/navigation/index.js.map +1 -1
- package/build/screens/bug_report_screen.d.ts.map +1 -1
- package/build/screens/bug_report_screen.js +3 -9
- package/build/screens/bug_report_screen.js.map +1 -1
- package/build/screens/conversation_details_screen.d.ts.map +1 -1
- package/build/screens/conversation_details_screen.js +1 -2
- package/build/screens/conversation_details_screen.js.map +1 -1
- package/build/screens/conversation_filters/components/conversation_filters.js +3 -3
- package/build/screens/conversation_filters/components/conversation_filters.js.map +1 -1
- package/build/screens/conversation_filters/components/rows.js +1 -1
- package/build/screens/conversation_filters/components/rows.js.map +1 -1
- package/build/screens/conversation_filters_screen.d.ts.map +1 -1
- package/build/screens/conversation_filters_screen.js +14 -1
- package/build/screens/conversation_filters_screen.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +3 -10
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/components/groups_recipient_row.js +1 -1
- package/build/screens/conversation_select_recipients/components/groups_recipient_row.js.map +1 -1
- package/build/screens/conversation_select_recipients/components/restricted_group_row.js +1 -1
- package/build/screens/conversation_select_recipients/components/restricted_group_row.js.map +1 -1
- package/build/screens/conversation_select_type_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_type_screen.js +7 -4
- package/build/screens/conversation_select_type_screen.js.map +1 -1
- package/build/screens/conversations/components/list_header_component.js +3 -3
- package/build/screens/conversations/components/list_header_component.js.map +1 -1
- package/build/screens/message_report_screen.js +3 -5
- package/build/screens/message_report_screen.js.map +1 -1
- package/build/screens/notification_settings_screen.d.ts.map +1 -1
- package/build/screens/notification_settings_screen.js +2 -0
- package/build/screens/notification_settings_screen.js.map +1 -1
- package/build/screens/settings_screen.js +3 -3
- package/build/screens/settings_screen.js.map +1 -1
- package/build/types/jolt_events/conversation_events.d.ts +2 -2
- package/build/types/jolt_events/conversation_events.d.ts.map +1 -1
- package/build/types/jolt_events/conversation_events.js.map +1 -1
- package/build/types/resources/conversation.d.ts +2 -2
- package/build/types/resources/conversation.d.ts.map +1 -1
- package/build/types/resources/conversation.js.map +1 -1
- package/build/types/resources/person.d.ts +0 -1
- package/build/types/resources/person.d.ts.map +1 -1
- package/build/types/resources/person.js.map +1 -1
- package/build/utils/conversation_safety_constants.d.ts +1 -1
- package/build/utils/conversation_safety_constants.d.ts.map +1 -1
- package/build/utils/conversation_safety_constants.js +1 -1
- package/build/utils/conversation_safety_constants.js.map +1 -1
- package/build/utils/request/conversation.d.ts.map +1 -1
- package/build/utils/request/conversation.js +0 -1
- package/build/utils/request/conversation.js.map +1 -1
- package/package.json +4 -4
- package/src/components/conversation/messages_disabled_banners.tsx +11 -3
- package/src/components/display/adult_requirement_notice.tsx +1 -1
- package/src/components/display/platform_modal_header_buttons.tsx +50 -163
- package/src/hooks/index.ts +1 -1
- package/src/hooks/use_conversation.ts +0 -1
- package/src/hooks/use_conversation_jolt_events.ts +3 -16
- package/src/hooks/use_current_person.ts +0 -1
- package/src/hooks/use_direct_messages_enabled.ts +23 -0
- package/src/hooks/use_features.ts +1 -0
- package/src/navigation/index.tsx +42 -36
- package/src/screens/bug_report_screen.tsx +3 -9
- package/src/screens/conversation_details_screen.tsx +1 -2
- package/src/screens/conversation_filters/components/conversation_filters.tsx +3 -3
- package/src/screens/conversation_filters/components/rows.tsx +2 -2
- package/src/screens/conversation_filters_screen.tsx +21 -1
- package/src/screens/conversation_screen.tsx +3 -11
- package/src/screens/conversation_select_recipients/components/groups_recipient_row.tsx +1 -1
- package/src/screens/conversation_select_recipients/components/restricted_group_row.tsx +2 -2
- package/src/screens/conversation_select_type_screen.tsx +7 -4
- package/src/screens/conversations/components/list_header_component.tsx +3 -3
- package/src/screens/message_report_screen.tsx +3 -5
- package/src/screens/notification_settings_screen.tsx +4 -1
- package/src/screens/settings_screen.tsx +3 -3
- package/src/types/jolt_events/conversation_events.ts +2 -2
- package/src/types/resources/conversation.ts +3 -2
- package/src/types/resources/person.ts +0 -1
- package/src/utils/conversation_safety_constants.ts +1 -1
- package/src/utils/request/conversation.ts +0 -1
- package/build/hooks/use_direct_messages_eligible.d.ts +0 -2
- package/build/hooks/use_direct_messages_eligible.d.ts.map +0 -1
- package/build/hooks/use_direct_messages_eligible.js +0 -9
- package/build/hooks/use_direct_messages_eligible.js.map +0 -1
- package/src/__tests__/hooks/use_direct_messages_eligible.test.tsx +0 -77
- package/src/hooks/use_direct_messages_eligible.ts +0 -11
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import type { ConversationDisabledReason } from '../../types';
|
|
1
2
|
export declare const LeaderMessagesDisabledBanner: () => import("react/jsx-runtime").JSX.Element;
|
|
2
3
|
export declare const MemberMessagesDisabledBanner: () => import("react/jsx-runtime").JSX.Element;
|
|
3
4
|
interface ConversationDisabledBannerProps {
|
|
4
|
-
|
|
5
|
+
disabledReason?: ConversationDisabledReason;
|
|
5
6
|
messageLink?: {
|
|
6
7
|
label: string;
|
|
7
8
|
onPress: () => void;
|
|
8
9
|
};
|
|
9
10
|
}
|
|
10
|
-
export declare const ConversationDisabledBanner: ({
|
|
11
|
+
export declare const ConversationDisabledBanner: ({ disabledReason, messageLink, }: ConversationDisabledBannerProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=messages_disabled_banners.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages_disabled_banners.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/messages_disabled_banners.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages_disabled_banners.d.ts","sourceRoot":"","sources":["../../../src/components/conversation/messages_disabled_banners.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAI7D,eAAO,MAAM,4BAA4B,+CAIxC,CAAA;AAED,eAAO,MAAM,4BAA4B,+CASxC,CAAA;AASD,UAAU,+BAA+B;IACvC,cAAc,CAAC,EAAE,0BAA0B,CAAA;IAC3C,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;CACrD;AAED,eAAO,MAAM,0BAA0B,GAAI,kCAGxC,+BAA+B,4CAYjC,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { StyleSheet, View } from 'react-native';
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
4
4
|
import { useTheme } from '../../hooks';
|
|
5
|
+
import { ADULT_REQUIREMENT_BODY } from '../../utils';
|
|
5
6
|
import { Button, Text } from '../display';
|
|
6
7
|
export const LeaderMessagesDisabledBanner = () => {
|
|
7
8
|
return (_jsx(MessagesDisabledBanner, { description: "Only leaders can send messages in this conversation." }));
|
|
@@ -10,10 +11,14 @@ export const MemberMessagesDisabledBanner = () => {
|
|
|
10
11
|
const styles = useStyles();
|
|
11
12
|
return (_jsx(MessagesDisabledBanner, { description: "Only leaders can send messages, but you can still add reactions.", style: styles.memberBanner }));
|
|
12
13
|
};
|
|
14
|
+
const DISABLED_REASON_TEXT = {
|
|
15
|
+
safety_check: ADULT_REQUIREMENT_BODY,
|
|
16
|
+
direct_messages_disabled: 'Direct messages have been turned off by someone in this conversation.',
|
|
17
|
+
};
|
|
13
18
|
const DEFAULT_DISABLED_TEXT = 'This conversation has been disabled.';
|
|
14
|
-
export const ConversationDisabledBanner = ({
|
|
19
|
+
export const ConversationDisabledBanner = ({ disabledReason, messageLink, }) => {
|
|
15
20
|
const styles = useStyles();
|
|
16
|
-
const description =
|
|
21
|
+
const description = (disabledReason && DISABLED_REASON_TEXT[disabledReason]) ?? DEFAULT_DISABLED_TEXT;
|
|
17
22
|
return (_jsx(MessagesDisabledBanner, { description: description, style: styles.memberBanner, messageLink: messageLink }));
|
|
18
23
|
};
|
|
19
24
|
const MessagesDisabledBanner = ({ description, style, messageLink, }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages_disabled_banners.js","sourceRoot":"","sources":["../../../src/components/conversation/messages_disabled_banners.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAkB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"messages_disabled_banners.js","sourceRoot":"","sources":["../../../src/components/conversation/messages_disabled_banners.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAkB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,OAAO,CACL,KAAC,sBAAsB,IAAC,WAAW,EAAC,sDAAsD,GAAG,CAC9F,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,OAAO,CACL,KAAC,sBAAsB,IACrB,WAAW,EAAC,kEAAkE,EAC9E,KAAK,EAAE,MAAM,CAAC,YAAY,GAC1B,CACH,CAAA;AACH,CAAC,CAAA;AAED,MAAM,oBAAoB,GAA+C;IACvE,YAAY,EAAE,sBAAsB;IACpC,wBAAwB,EAAE,uEAAuE;CAClG,CAAA;AAED,MAAM,qBAAqB,GAAG,sCAAsC,CAAA;AAOpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,cAAc,EACd,WAAW,GACqB,EAAE,EAAE;IACpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,WAAW,GACf,CAAC,cAAc,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC,IAAI,qBAAqB,CAAA;IAEnF,OAAO,CACL,KAAC,sBAAsB,IACrB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,WAAW,EAAE,WAAW,GACxB,CACH,CAAA;AACH,CAAC,CAAA;AAQD,MAAM,sBAAsB,GAAG,CAAC,EAC9B,WAAW,EACX,KAAK,EACL,WAAW,GACiB,EAAE,EAAE;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,aACrC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAC,UAAU,YACzC,WAAW,GACP,EACN,WAAW,IAAI,CACd,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,OAAO,EAAE,WAAW,CAAC,OAAO,EAC5B,KAAK,EAAE,MAAM,CAAC,aAAa,GAC3B,CACH,IACI,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAA;IAEtC,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE;YACV,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,CAAC;YAClB,eAAe,EAAE,MAAM,CAAC,+BAA+B;YACvD,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,MAAM,CAAC,sBAAsB;SAC9C;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,QAAQ;SACpB;QACD,YAAY,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,EAAE,GAAG,MAAM;YAC1B,YAAY,EAAE,CAAC,MAAM;SACtB;QACD,aAAa,EAAE;YACb,SAAS,EAAE,EAAE;SACd;KACF,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { StyleSheet, View, type ViewStyle } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { useTheme } from '../../hooks'\nimport type { ConversationDisabledReason } from '../../types'\nimport { ADULT_REQUIREMENT_BODY } from '../../utils'\nimport { Button, Text } from '../display'\n\nexport const LeaderMessagesDisabledBanner = () => {\n return (\n <MessagesDisabledBanner description=\"Only leaders can send messages in this conversation.\" />\n )\n}\n\nexport const MemberMessagesDisabledBanner = () => {\n const styles = useStyles()\n\n return (\n <MessagesDisabledBanner\n description=\"Only leaders can send messages, but you can still add reactions.\"\n style={styles.memberBanner}\n />\n )\n}\n\nconst DISABLED_REASON_TEXT: Record<ConversationDisabledReason, string> = {\n safety_check: ADULT_REQUIREMENT_BODY,\n direct_messages_disabled: 'Direct messages have been turned off by someone in this conversation.',\n}\n\nconst DEFAULT_DISABLED_TEXT = 'This conversation has been disabled.'\n\ninterface ConversationDisabledBannerProps {\n disabledReason?: ConversationDisabledReason\n messageLink?: { label: string; onPress: () => void }\n}\n\nexport const ConversationDisabledBanner = ({\n disabledReason,\n messageLink,\n}: ConversationDisabledBannerProps) => {\n const styles = useStyles()\n const description =\n (disabledReason && DISABLED_REASON_TEXT[disabledReason]) ?? DEFAULT_DISABLED_TEXT\n\n return (\n <MessagesDisabledBanner\n description={description}\n style={styles.memberBanner}\n messageLink={messageLink}\n />\n )\n}\n\ninterface MessagesDisabledBannerProps {\n description: string\n style?: ViewStyle\n messageLink?: { label: string; onPress: () => void }\n}\n\nconst MessagesDisabledBanner = ({\n description,\n style,\n messageLink,\n}: MessagesDisabledBannerProps) => {\n const styles = useStyles()\n\n return (\n <View style={[styles.baseBanner, style]}>\n <Text style={styles.text} variant=\"tertiary\">\n {description}\n </Text>\n {messageLink && (\n <Button\n variant=\"fill\"\n size=\"lg\"\n title={messageLink.label}\n onPress={messageLink.onPress}\n style={styles.messageButton}\n />\n )}\n </View>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n baseBanner: {\n paddingHorizontal: 16,\n paddingVertical: 4,\n backgroundColor: colors.statusNeutralComposedBackground,\n borderTopWidth: 1,\n borderTopColor: colors.borderColorDefaultBase,\n },\n text: {\n textAlign: 'center',\n },\n memberBanner: {\n paddingTop: 16,\n paddingBottom: 16 + bottom,\n marginBottom: -bottom,\n },\n messageButton: {\n marginTop: 12,\n },\n })\n}\n"]}
|
|
@@ -3,6 +3,6 @@ import { ADULT_REQUIREMENT_BODY } from '../../utils';
|
|
|
3
3
|
import BannerPrimitive from '../primitive/banner_primitive';
|
|
4
4
|
import { BannerCollapsible } from './banner_collapsible';
|
|
5
5
|
export function AdultRequirementNotice({ style }) {
|
|
6
|
-
return (_jsx(BannerCollapsible, { appearance: "warning", iconName: "general.shieldExclamation", heading: "
|
|
6
|
+
return (_jsx(BannerCollapsible, { appearance: "warning", iconName: "general.shieldExclamation", heading: "2 adults required to chat", style: style, children: _jsx(BannerPrimitive.Text, { children: ADULT_REQUIREMENT_BODY }) }));
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=adult_requirement_notice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adult_requirement_notice.js","sourceRoot":"","sources":["../../../src/components/display/adult_requirement_notice.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,eAAe,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAMxD,MAAM,UAAU,sBAAsB,CAAC,EAAE,KAAK,EAA+B;IAC3E,OAAO,CACL,KAAC,iBAAiB,IAChB,UAAU,EAAC,SAAS,EACpB,QAAQ,EAAC,2BAA2B,EACpC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"adult_requirement_notice.js","sourceRoot":"","sources":["../../../src/components/display/adult_requirement_notice.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,eAAe,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAMxD,MAAM,UAAU,sBAAsB,CAAC,EAAE,KAAK,EAA+B;IAC3E,OAAO,CACL,KAAC,iBAAiB,IAChB,UAAU,EAAC,SAAS,EACpB,QAAQ,EAAC,2BAA2B,EACpC,OAAO,EAAC,2BAA2B,EACnC,KAAK,EAAE,KAAK,YAEZ,KAAC,eAAe,CAAC,IAAI,cAAE,sBAAsB,GAAwB,GACnD,CACrB,CAAA;AACH,CAAC","sourcesContent":["import React from 'react'\nimport type { ViewStyle } from 'react-native'\nimport { ADULT_REQUIREMENT_BODY } from '../../utils'\nimport BannerPrimitive from '../primitive/banner_primitive'\nimport { BannerCollapsible } from './banner_collapsible'\n\ninterface AdultRequirementNoticeProps {\n style?: ViewStyle\n}\n\nexport function AdultRequirementNotice({ style }: AdultRequirementNoticeProps) {\n return (\n <BannerCollapsible\n appearance=\"warning\"\n iconName=\"general.shieldExclamation\"\n heading=\"2 adults required to chat\"\n style={style}\n >\n <BannerPrimitive.Text>{ADULT_REQUIREMENT_BODY}</BannerPrimitive.Text>\n </BannerCollapsible>\n )\n}\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NativeStackHeaderLeftProps, NativeStackNavigationOptions } from '@react-navigation/native-stack';
|
|
2
2
|
import { ColorValue } from 'react-native';
|
|
3
|
-
import { type IconString } from './icon';
|
|
4
3
|
interface HeaderTextButtonProps {
|
|
5
4
|
onPress: () => void;
|
|
6
5
|
title?: string;
|
|
@@ -21,43 +20,22 @@ interface TextButtonDecoratorProps {
|
|
|
21
20
|
disabled?: boolean;
|
|
22
21
|
}
|
|
23
22
|
export declare const withRightText: ({ text, onPress, disabled }: TextButtonDecoratorProps) => OptionsDecorator;
|
|
24
|
-
export declare const
|
|
25
|
-
export interface HeaderIconProps {
|
|
26
|
-
icon: IconString;
|
|
27
|
-
accessibilityLabel: string;
|
|
28
|
-
onPress: () => void;
|
|
29
|
-
disabled?: boolean;
|
|
30
|
-
variant?: 'plain' | 'fill';
|
|
31
|
-
}
|
|
32
|
-
export declare const withRightIcon: (props: HeaderIconProps) => OptionsDecorator;
|
|
33
|
-
export declare const withLeftIcon: (props: HeaderIconProps) => OptionsDecorator;
|
|
23
|
+
export declare const withLeftText: ({ text, onPress }: TextButtonDecoratorProps) => OptionsDecorator;
|
|
34
24
|
export declare const withRightClose: ({ onPress }: {
|
|
35
25
|
onPress: () => void;
|
|
36
26
|
}) => OptionsDecorator;
|
|
37
|
-
export declare const withLeftClose: ({ onPress }: {
|
|
38
|
-
onPress: () => void;
|
|
39
|
-
}) => OptionsDecorator;
|
|
40
|
-
export declare const withRightDone: ({ onPress }: {
|
|
41
|
-
onPress: () => void;
|
|
42
|
-
}) => OptionsDecorator;
|
|
43
27
|
export declare const createMinimalHeaderBackButton: ({ onPress }: {
|
|
44
28
|
onPress: () => void;
|
|
45
|
-
}) => (props:
|
|
29
|
+
}) => (props: NativeStackHeaderLeftProps) => import("react/jsx-runtime").JSX.Element;
|
|
46
30
|
export declare const withMinimalBack: ({ onPress }: {
|
|
47
31
|
onPress: () => void;
|
|
48
32
|
}) => OptionsDecorator;
|
|
49
|
-
|
|
33
|
+
interface UseHeaderRightOptions {
|
|
34
|
+
title: string;
|
|
50
35
|
onPress: () => void;
|
|
51
36
|
disabled?: boolean;
|
|
52
37
|
enabled?: boolean;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
}) | {
|
|
56
|
-
title: string;
|
|
57
|
-
icon?: never;
|
|
58
|
-
accessibilityLabel?: never;
|
|
59
|
-
variant?: never;
|
|
60
|
-
});
|
|
61
|
-
export declare const useHeaderRight: (options: UseHeaderRightOptions) => void;
|
|
38
|
+
}
|
|
39
|
+
export declare const useHeaderRight: ({ title, onPress, disabled, enabled, }: UseHeaderRightOptions) => void;
|
|
62
40
|
export {};
|
|
63
41
|
//# sourceMappingURL=platform_modal_header_buttons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform_modal_header_buttons.d.ts","sourceRoot":"","sources":["../../../src/components/display/platform_modal_header_buttons.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,
|
|
1
|
+
{"version":3,"file":"platform_modal_header_buttons.d.ts","sourceRoot":"","sources":["../../../src/components/display/platform_modal_header_buttons.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,0BAA0B,EAE1B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAM/D,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,eAAO,MAAM,gBAAgB,GAAI,8BAI9B,qBAAqB,4CAavB,CAAA;AAED,UAAU,wBAAwB;IAChC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,eAAO,MAAM,mBAAmB,GAAI,yCAKjC,wBAAwB,4CAoB1B,CAAA;AAYD,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,4BAA4B,KAClC,4BAA4B,CAAA;AAEjC,eAAO,MAAM,cAAc,GACzB,MAAM,4BAA4B,EAClC,GAAG,YAAY,gBAAgB,EAAE,KAChC,4BAAiG,CAAA;AAEpG,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAKD,eAAO,MAAM,aAAa,GACvB,6BAA6B,wBAAwB,KAAG,gBAKvD,CAAA;AAEJ,eAAO,MAAM,YAAY,GACtB,mBAAmB,wBAAwB,KAAG,gBAK7C,CAAA;AAeJ,eAAO,MAAM,cAAc,GACxB,aAAa;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,KAAG,gBAYtC,CAAA;AAWJ,eAAO,MAAM,6BAA6B,GACvC,aAAa;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,MACpC,OAAO,0BAA0B,4CAejC,CAAA;AAIH,eAAO,MAAM,eAAe,GACzB,aAAa;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,KAAG,gBAItC,CAAA;AAEJ,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAID,eAAO,MAAM,cAAc,GAAI,wCAK5B,qBAAqB,SAWvB,CAAA"}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { HeaderBackButton, HeaderButton
|
|
2
|
+
import { HeaderBackButton, HeaderButton } from '@react-navigation/elements';
|
|
3
3
|
import { useNavigation } from '@react-navigation/native';
|
|
4
4
|
import { useLayoutEffect } from 'react';
|
|
5
5
|
import { Platform, StyleSheet } from 'react-native';
|
|
6
|
-
import
|
|
7
|
-
import { useFontScale, useTheme } from '../../hooks';
|
|
8
|
-
import { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../utils';
|
|
6
|
+
import { useTheme } from '../../hooks';
|
|
9
7
|
import { isLiquidGlassEnabled } from '../../utils/liquid_glass';
|
|
10
|
-
import { tokens } from '../../vendor/tapestry/tokens';
|
|
11
8
|
import { Icon } from './icon';
|
|
12
9
|
import { TextButton } from './text_button';
|
|
13
|
-
import { getColorKey, useGradientColorMap } from './utils/button_colors';
|
|
14
10
|
export const HeaderTextButton = ({ onPress, title = 'Submit', ...props }) => {
|
|
15
11
|
const styles = useStyles();
|
|
16
12
|
return (_jsx(TextButton, { maxFontSizeMultiplier: 1, onPress: onPress, textStyle: [styles.interactionColor, props.disabled && styles.disabledColor], ...props, children: title }));
|
|
@@ -23,6 +19,7 @@ export const HeaderDismissButton = ({ onPress, title = 'Cancel', tintColor, ...p
|
|
|
23
19
|
});
|
|
24
20
|
};
|
|
25
21
|
const createTextHeaderRight = ({ onPress, title, disabled }) => (props) => (_jsx(HeaderTextButton, { ...props, onPress: onPress, title: title, disabled: disabled }));
|
|
22
|
+
const createDismissHeaderLeft = ({ onPress, title }) => () => _jsx(HeaderDismissButton, { title: title, onPress: onPress });
|
|
26
23
|
export const composeOptions = (base, ...decorators) => decorators.reduce((options, decorate) => decorate(options), base);
|
|
27
24
|
// Native bar items pick up liquid glass on iOS 26; hosts on an older
|
|
28
25
|
// react-navigation ignore the unstable option and keep using the
|
|
@@ -32,70 +29,28 @@ export const withRightText = ({ text, onPress, disabled }) => options => ({
|
|
|
32
29
|
headerRight: createTextHeaderRight({ onPress, title: text, disabled }),
|
|
33
30
|
unstable_headerRightItems: () => [{ type: 'button', label: text, onPress, disabled }],
|
|
34
31
|
});
|
|
35
|
-
const
|
|
36
|
-
const HEADER_FILL_ICON_SIZE = 16;
|
|
37
|
-
const HEADER_FILL_PADDING = 14;
|
|
38
|
-
const HEADER_BAR_INSET = 16;
|
|
39
|
-
const HEADER_SLOT_GAP = 12;
|
|
40
|
-
const headerFillSize = (fontScale) => {
|
|
41
|
-
const icon = HEADER_FILL_ICON_SIZE * fontScale;
|
|
42
|
-
return { icon, circle: icon + HEADER_FILL_PADDING * 2 };
|
|
43
|
-
};
|
|
44
|
-
// Liquid glass icons don't communicate
|
|
45
|
-
export const useHeaderSlotReserve = () => {
|
|
46
|
-
const fontScale = useFontScale({ maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK });
|
|
47
|
-
return HEADER_BAR_INSET + headerFillSize(fontScale).circle + HEADER_SLOT_GAP;
|
|
48
|
-
};
|
|
49
|
-
const HEADER_FALLBACK_HIT_SLOP = 14;
|
|
50
|
-
const iconStyles = StyleSheet.create({
|
|
51
|
-
disabled: {
|
|
52
|
-
opacity: 0.4,
|
|
53
|
-
},
|
|
54
|
-
fallbackButton: {
|
|
55
|
-
alignItems: 'center',
|
|
56
|
-
justifyContent: 'center',
|
|
57
|
-
paddingHorizontal: 8,
|
|
58
|
-
},
|
|
59
|
-
fillCircle: {
|
|
60
|
-
alignItems: 'center',
|
|
61
|
-
justifyContent: 'center',
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
const HeaderIcon = ({ icon, disabled, variant, }) => {
|
|
65
|
-
const { colors } = useTheme();
|
|
66
|
-
const gradients = useGradientColorMap();
|
|
67
|
-
const fontScale = useFontScale({ maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK });
|
|
68
|
-
if (variant !== 'fill')
|
|
69
|
-
return _jsx(Icon, { name: icon, size: HEADER_ICON_SIZE });
|
|
70
|
-
const { icon: iconSize, circle: circleSize } = headerFillSize(fontScale);
|
|
71
|
-
return (_jsx(LinearGradient, { start: { x: 0.1, y: 0.1 }, end: { x: 0.9, y: 0.9 }, colors: gradients[getColorKey({ disabled: Boolean(disabled), appearance: 'interaction' })], style: [
|
|
72
|
-
iconStyles.fillCircle,
|
|
73
|
-
{ borderRadius: circleSize, height: circleSize, width: circleSize },
|
|
74
|
-
], children: _jsx(Icon, { name: icon, size: iconSize, color: disabled ? colors.iconColorDefaultDisabled : tokens.colorNeutral100White }) }));
|
|
75
|
-
};
|
|
76
|
-
// Native bar items take SF Symbols, images, or any element, so both paths
|
|
77
|
-
// render the same icon: iOS 26 puts this one in the glass circle, and the
|
|
78
|
-
// element below covers Android and older iOS.
|
|
79
|
-
const createHeaderIconItem = ({ icon, accessibilityLabel, onPress, disabled, variant, }) => ({
|
|
80
|
-
type: 'custom',
|
|
81
|
-
// The gradient circle replaces the glass one rather than sitting on it.
|
|
82
|
-
hidesSharedBackground: variant === 'fill',
|
|
83
|
-
element: (_jsx(PlatformPressable, { onPress: onPress, disabled: disabled, hitSlop: 12, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, style: disabled && variant !== 'fill' && iconStyles.disabled, children: _jsx(HeaderIcon, { icon: icon, disabled: disabled, variant: variant }) })),
|
|
84
|
-
});
|
|
85
|
-
const createHeaderIconElement = ({ icon, accessibilityLabel, onPress, disabled, variant }) => () => (_jsx(PlatformPressable, { onPress: onPress, disabled: disabled, hitSlop: HEADER_FALLBACK_HIT_SLOP, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, style: [iconStyles.fallbackButton, disabled && variant !== 'fill' && iconStyles.disabled], children: _jsx(HeaderIcon, { icon: icon, disabled: disabled, variant: variant }) }));
|
|
86
|
-
export const withRightIcon = (props) => options => ({
|
|
32
|
+
export const withLeftText = ({ text, onPress }) => options => ({
|
|
87
33
|
...options,
|
|
88
|
-
|
|
89
|
-
|
|
34
|
+
headerLeft: createDismissHeaderLeft({ title: text, onPress }),
|
|
35
|
+
unstable_headerLeftItems: () => [{ type: 'button', label: text, onPress }],
|
|
90
36
|
});
|
|
91
|
-
|
|
37
|
+
const renderCloseImage = ({ tintColor }) => (_jsx(Icon, { name: "general.x", size: 18, color: tintColor }));
|
|
38
|
+
const createCloseHeaderRight = ({ onPress }) => (props) => (_jsx(HeaderBackButton, { backImage: renderCloseImage, onPress: onPress, ...props }));
|
|
39
|
+
// The native slot takes only SF Symbols or bundled rasters — we have no way
|
|
40
|
+
// to systematize rasterizing our SVG icon library, and xmark matches
|
|
41
|
+
// general.x closely. The fallback keeps our icon.
|
|
42
|
+
export const withRightClose = ({ onPress }) => options => ({
|
|
92
43
|
...options,
|
|
93
|
-
|
|
94
|
-
|
|
44
|
+
headerRight: createCloseHeaderRight({ onPress }),
|
|
45
|
+
unstable_headerRightItems: () => [
|
|
46
|
+
{
|
|
47
|
+
type: 'button',
|
|
48
|
+
label: 'Close',
|
|
49
|
+
icon: { type: 'sfSymbol', name: 'xmark' },
|
|
50
|
+
onPress,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
95
53
|
});
|
|
96
|
-
export const withRightClose = ({ onPress }) => withRightIcon({ icon: 'general.x', accessibilityLabel: 'Close', onPress });
|
|
97
|
-
export const withLeftClose = ({ onPress }) => withLeftIcon({ icon: 'general.x', accessibilityLabel: 'Close', onPress });
|
|
98
|
-
export const withRightDone = ({ onPress }) => withRightIcon({ icon: 'general.check', accessibilityLabel: 'Done', onPress });
|
|
99
54
|
// The default back icon reserves trailing space for a label that
|
|
100
55
|
// displayMode="minimal" never shows; a custom image skips it so the glass
|
|
101
56
|
// capsule hugs the glyph.
|
|
@@ -116,22 +71,15 @@ export const withMinimalBack = ({ onPress }) => options => ({
|
|
|
116
71
|
});
|
|
117
72
|
// For screens whose header button depends on live state (form validity,
|
|
118
73
|
// mutation callbacks). Static buttons belong in the navigator options.
|
|
119
|
-
export const useHeaderRight = (
|
|
74
|
+
export const useHeaderRight = ({ title, onPress, disabled, enabled = true, }) => {
|
|
120
75
|
const navigation = useNavigation();
|
|
121
|
-
const { onPress, disabled, enabled = true } = options;
|
|
122
|
-
const icon = options.icon;
|
|
123
|
-
const label = options.icon !== undefined ? options.accessibilityLabel : options.title;
|
|
124
|
-
const variant = options.variant;
|
|
125
76
|
useLayoutEffect(() => {
|
|
126
77
|
if (!enabled) {
|
|
127
78
|
navigation.setOptions({ headerRight: () => null, unstable_headerRightItems: undefined });
|
|
128
79
|
return;
|
|
129
80
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
: withRightText({ text: label, onPress, disabled });
|
|
133
|
-
navigation.setOptions(decorate({}));
|
|
134
|
-
}, [disabled, enabled, icon, label, navigation, onPress, variant]);
|
|
81
|
+
navigation.setOptions(withRightText({ text: title, onPress, disabled })({}));
|
|
82
|
+
}, [disabled, enabled, navigation, onPress, title]);
|
|
135
83
|
};
|
|
136
84
|
const useStyles = () => {
|
|
137
85
|
const { colors } = useTheme();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform_modal_header_buttons.js","sourceRoot":"","sources":["../../../src/components/display/platform_modal_header_buttons.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HeaderBackButton, HeaderButton, PlatformPressable } from '@react-navigation/elements'\nimport { useNavigation } from '@react-navigation/native'\nimport type {\n NativeStackHeaderItemProps,\n NativeStackNavigationOptions,\n} from '@react-navigation/native-stack'\nimport { useLayoutEffect } from 'react'\nimport { ColorValue, Platform, StyleSheet } from 'react-native'\nimport LinearGradient from 'react-native-linear-gradient'\nimport { useFontScale, useTheme } from '../../hooks'\nimport { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../utils'\nimport { isLiquidGlassEnabled } from '../../utils/liquid_glass'\nimport { tokens } from '../../vendor/tapestry/tokens'\nimport { Icon, type IconString } from './icon'\nimport { TextButton } from './text_button'\nimport { getColorKey, useGradientColorMap } from './utils/button_colors'\n\ninterface HeaderTextButtonProps {\n onPress: () => void\n title?: string\n disabled?: boolean\n}\n\nexport const HeaderTextButton = ({\n onPress,\n title = 'Submit',\n ...props\n}: HeaderTextButtonProps) => {\n const styles = useStyles()\n\n return (\n <TextButton\n maxFontSizeMultiplier={1}\n onPress={onPress}\n textStyle={[styles.interactionColor, props.disabled && styles.disabledColor]}\n {...props}\n >\n {title}\n </TextButton>\n )\n}\n\ninterface HeaderDismissButtonProps {\n onPress: () => void\n title?: string\n tintColor?: ColorValue\n}\n\nexport const HeaderDismissButton = ({\n onPress,\n title = 'Cancel',\n tintColor,\n ...props\n}: HeaderDismissButtonProps) => {\n const styles = useStyles()\n\n return Platform.select({\n ios: (\n <TextButton\n maxFontSizeMultiplier={1}\n onPress={onPress}\n textStyle={[styles.interactionColor, styles.iosCancelButton]}\n {...props}\n >\n {title}\n </TextButton>\n ),\n default: (\n <HeaderButton onPress={onPress} style={[styles.androidCancelButton]} {...props}>\n <Icon name=\"general.x\" size={16} color={tintColor} />\n </HeaderButton>\n ),\n })\n}\n\nconst createTextHeaderRight =\n ({ onPress, title, disabled }: HeaderTextButtonProps) =>\n (props: NativeStackHeaderItemProps) => (\n <HeaderTextButton {...props} onPress={onPress} title={title} disabled={disabled} />\n )\n\nexport type OptionsDecorator = (\n options: NativeStackNavigationOptions\n) => NativeStackNavigationOptions\n\nexport const composeOptions = (\n base: NativeStackNavigationOptions,\n ...decorators: OptionsDecorator[]\n): NativeStackNavigationOptions => decorators.reduce((options, decorate) => decorate(options), base)\n\ninterface TextButtonDecoratorProps {\n text: string\n onPress: () => void\n disabled?: boolean\n}\n\n// Native bar items pick up liquid glass on iOS 26; hosts on an older\n// react-navigation ignore the unstable option and keep using the\n// headerRight/headerLeft fallbacks, as does Android.\nexport const withRightText =\n ({ text, onPress, disabled }: TextButtonDecoratorProps): OptionsDecorator =>\n options => ({\n ...options,\n headerRight: createTextHeaderRight({ onPress, title: text, disabled }),\n unstable_headerRightItems: () => [{ type: 'button' as const, label: text, onPress, disabled }],\n })\n\nconst HEADER_ICON_SIZE = 17\nconst HEADER_FILL_ICON_SIZE = 16\nconst HEADER_FILL_PADDING = 14\nconst HEADER_BAR_INSET = 16\nconst HEADER_SLOT_GAP = 12\n\nconst headerFillSize = (fontScale: number) => {\n const icon = HEADER_FILL_ICON_SIZE * fontScale\n\n return { icon, circle: icon + HEADER_FILL_PADDING * 2 }\n}\n\n// Liquid glass icons don't communicate\nexport const useHeaderSlotReserve = (): number => {\n const fontScale = useFontScale({ maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK })\n\n return HEADER_BAR_INSET + headerFillSize(fontScale).circle + HEADER_SLOT_GAP\n}\n\nconst HEADER_FALLBACK_HIT_SLOP = 14\n\nconst iconStyles = StyleSheet.create({\n disabled: {\n opacity: 0.4,\n },\n fallbackButton: {\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n },\n fillCircle: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n})\n\nexport interface HeaderIconProps {\n icon: IconString\n accessibilityLabel: string\n onPress: () => void\n disabled?: boolean\n variant?: 'plain' | 'fill'\n}\n\nconst HeaderIcon = ({\n icon,\n disabled,\n variant,\n}: Pick<HeaderIconProps, 'icon' | 'disabled' | 'variant'>) => {\n const { colors } = useTheme()\n const gradients = useGradientColorMap()\n const fontScale = useFontScale({ maxFontSizeMultiplier: MAX_FONT_SIZE_MULTIPLIER_LANDMARK })\n\n if (variant !== 'fill') return <Icon name={icon} size={HEADER_ICON_SIZE} />\n\n const { icon: iconSize, circle: circleSize } = headerFillSize(fontScale)\n\n return (\n <LinearGradient\n start={{ x: 0.1, y: 0.1 }}\n end={{ x: 0.9, y: 0.9 }}\n colors={gradients[getColorKey({ disabled: Boolean(disabled), appearance: 'interaction' })]}\n style={[\n iconStyles.fillCircle,\n { borderRadius: circleSize, height: circleSize, width: circleSize },\n ]}\n >\n <Icon\n name={icon}\n size={iconSize}\n color={disabled ? colors.iconColorDefaultDisabled : tokens.colorNeutral100White}\n />\n </LinearGradient>\n )\n}\n\n// Native bar items take SF Symbols, images, or any element, so both paths\n// render the same icon: iOS 26 puts this one in the glass circle, and the\n// element below covers Android and older iOS.\nconst createHeaderIconItem = ({\n icon,\n accessibilityLabel,\n onPress,\n disabled,\n variant,\n}: HeaderIconProps) => ({\n type: 'custom' as const,\n // The gradient circle replaces the glass one rather than sitting on it.\n hidesSharedBackground: variant === 'fill',\n element: (\n <PlatformPressable\n onPress={onPress}\n disabled={disabled}\n hitSlop={12}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n style={disabled && variant !== 'fill' && iconStyles.disabled}\n >\n <HeaderIcon icon={icon} disabled={disabled} variant={variant} />\n </PlatformPressable>\n ),\n})\n\nconst createHeaderIconElement =\n ({ icon, accessibilityLabel, onPress, disabled, variant }: HeaderIconProps) =>\n () => (\n <PlatformPressable\n onPress={onPress}\n disabled={disabled}\n hitSlop={HEADER_FALLBACK_HIT_SLOP}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n style={[iconStyles.fallbackButton, disabled && variant !== 'fill' && iconStyles.disabled]}\n >\n <HeaderIcon icon={icon} disabled={disabled} variant={variant} />\n </PlatformPressable>\n )\n\nexport const withRightIcon =\n (props: HeaderIconProps): OptionsDecorator =>\n options => ({\n ...options,\n headerRight: createHeaderIconElement(props),\n unstable_headerRightItems: () => [createHeaderIconItem(props)],\n })\n\nexport const withLeftIcon =\n (props: HeaderIconProps): OptionsDecorator =>\n options => ({\n ...options,\n headerLeft: createHeaderIconElement(props),\n unstable_headerLeftItems: () => [createHeaderIconItem(props)],\n })\n\nexport const withRightClose = ({ onPress }: { onPress: () => void }) =>\n withRightIcon({ icon: 'general.x', accessibilityLabel: 'Close', onPress })\n\nexport const withLeftClose = ({ onPress }: { onPress: () => void }) =>\n withLeftIcon({ icon: 'general.x', accessibilityLabel: 'Close', onPress })\n\nexport const withRightDone = ({ onPress }: { onPress: () => void }) =>\n withRightIcon({ icon: 'general.check', accessibilityLabel: 'Done', onPress })\n\n// The default back icon reserves trailing space for a label that\n// displayMode=\"minimal\" never shows; a custom image skips it so the glass\n// capsule hugs the glyph.\nconst renderGlassBackImage = ({ tintColor }: { tintColor: string }) => (\n <Icon name=\"general.leftChevron\" size={18} color={tintColor} />\n)\n\n// The iOS 26 glass capsule manages its own insets — negative margins clip\n// the button against the capsule edge.\nexport const createMinimalHeaderBackButton =\n ({ onPress }: { onPress: () => void }) =>\n (props: NativeStackHeaderItemProps) => (\n <HeaderBackButton\n style={\n isLiquidGlassEnabled()\n ? undefined\n : {\n marginLeft: Platform.select({ ios: -8, default: -3 }),\n marginRight: Platform.select({ ios: 0, default: 30 }),\n }\n }\n backImage={isLiquidGlassEnabled() ? renderGlassBackImage : undefined}\n displayMode=\"minimal\"\n onPress={onPress}\n {...props}\n />\n )\n\n// Under glass the native minimal back button suffices; pre-26 needs the\n// custom button and its layout nudges.\nexport const withMinimalBack =\n ({ onPress }: { onPress: () => void }): OptionsDecorator =>\n options => ({\n ...options,\n ...(isLiquidGlassEnabled() ? {} : { headerLeft: createMinimalHeaderBackButton({ onPress }) }),\n })\n\n// An icon or a title, never both — passing both is a compile error rather\n// than a question of which one wins.\ntype UseHeaderRightOptions = {\n onPress: () => void\n disabled?: boolean\n enabled?: boolean\n} & (\n | (HeaderIconProps & { title?: never })\n | { title: string; icon?: never; accessibilityLabel?: never; variant?: never }\n)\n\n// For screens whose header button depends on live state (form validity,\n// mutation callbacks). Static buttons belong in the navigator options.\nexport const useHeaderRight = (options: UseHeaderRightOptions) => {\n const navigation = useNavigation()\n const { onPress, disabled, enabled = true } = options\n const icon = options.icon\n const label = options.icon !== undefined ? options.accessibilityLabel : options.title\n const variant = options.variant\n\n useLayoutEffect(() => {\n if (!enabled) {\n navigation.setOptions({ headerRight: () => null, unstable_headerRightItems: undefined })\n return\n }\n\n const decorate = icon\n ? withRightIcon({ icon, accessibilityLabel: label, onPress, disabled, variant })\n : withRightText({ text: label, onPress, disabled })\n\n navigation.setOptions(decorate({}))\n }, [disabled, enabled, icon, label, navigation, onPress, variant])\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n interactionColor: {\n color: Platform.select({\n ios: colors.iOSModalHeaderButtonTextColor,\n android: colors.androidModalHeaderButtonTextColor,\n }),\n },\n androidCancelButton: {\n marginRight: 16,\n },\n iosCancelButton: {\n fontWeight: 'normal',\n },\n disabledColor: {\n color: colors.textColorDefaultDisabled,\n },\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"platform_modal_header_buttons.js","sourceRoot":"","sources":["../../../src/components/display/platform_modal_header_buttons.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HeaderBackButton, HeaderButton } from '@react-navigation/elements'\nimport { useNavigation } from '@react-navigation/native'\nimport type {\n NativeStackHeaderLeftProps,\n NativeStackHeaderRightProps,\n NativeStackNavigationOptions,\n} from '@react-navigation/native-stack'\nimport { useLayoutEffect } from 'react'\nimport { ColorValue, Platform, StyleSheet } from 'react-native'\nimport { useTheme } from '../../hooks'\nimport { isLiquidGlassEnabled } from '../../utils/liquid_glass'\nimport { Icon } from './icon'\nimport { TextButton } from './text_button'\n\ninterface HeaderTextButtonProps {\n onPress: () => void\n title?: string\n disabled?: boolean\n}\n\nexport const HeaderTextButton = ({\n onPress,\n title = 'Submit',\n ...props\n}: HeaderTextButtonProps) => {\n const styles = useStyles()\n\n return (\n <TextButton\n maxFontSizeMultiplier={1}\n onPress={onPress}\n textStyle={[styles.interactionColor, props.disabled && styles.disabledColor]}\n {...props}\n >\n {title}\n </TextButton>\n )\n}\n\ninterface HeaderDismissButtonProps {\n onPress: () => void\n title?: string\n tintColor?: ColorValue\n}\n\nexport const HeaderDismissButton = ({\n onPress,\n title = 'Cancel',\n tintColor,\n ...props\n}: HeaderDismissButtonProps) => {\n const styles = useStyles()\n\n return Platform.select({\n ios: (\n <TextButton\n maxFontSizeMultiplier={1}\n onPress={onPress}\n textStyle={[styles.interactionColor, styles.iosCancelButton]}\n {...props}\n >\n {title}\n </TextButton>\n ),\n default: (\n <HeaderButton onPress={onPress} style={[styles.androidCancelButton]} {...props}>\n <Icon name=\"general.x\" size={16} color={tintColor} />\n </HeaderButton>\n ),\n })\n}\n\nconst createTextHeaderRight =\n ({ onPress, title, disabled }: HeaderTextButtonProps) =>\n (props: NativeStackHeaderRightProps) => (\n <HeaderTextButton {...props} onPress={onPress} title={title} disabled={disabled} />\n )\n\nconst createDismissHeaderLeft =\n ({ onPress, title }: { onPress: () => void; title: string }) =>\n () => <HeaderDismissButton title={title} onPress={onPress} />\n\nexport type OptionsDecorator = (\n options: NativeStackNavigationOptions\n) => NativeStackNavigationOptions\n\nexport const composeOptions = (\n base: NativeStackNavigationOptions,\n ...decorators: OptionsDecorator[]\n): NativeStackNavigationOptions => decorators.reduce((options, decorate) => decorate(options), base)\n\ninterface TextButtonDecoratorProps {\n text: string\n onPress: () => void\n disabled?: boolean\n}\n\n// Native bar items pick up liquid glass on iOS 26; hosts on an older\n// react-navigation ignore the unstable option and keep using the\n// headerRight/headerLeft fallbacks, as does Android.\nexport const withRightText =\n ({ text, onPress, disabled }: TextButtonDecoratorProps): OptionsDecorator =>\n options => ({\n ...options,\n headerRight: createTextHeaderRight({ onPress, title: text, disabled }),\n unstable_headerRightItems: () => [{ type: 'button' as const, label: text, onPress, disabled }],\n })\n\nexport const withLeftText =\n ({ text, onPress }: TextButtonDecoratorProps): OptionsDecorator =>\n options => ({\n ...options,\n headerLeft: createDismissHeaderLeft({ title: text, onPress }),\n unstable_headerLeftItems: () => [{ type: 'button' as const, label: text, onPress }],\n })\n\nconst renderCloseImage = ({ tintColor }: { tintColor: string }) => (\n <Icon name=\"general.x\" size={18} color={tintColor} />\n)\n\nconst createCloseHeaderRight =\n ({ onPress }: { onPress: () => void }) =>\n (props: NativeStackHeaderRightProps) => (\n <HeaderBackButton backImage={renderCloseImage} onPress={onPress} {...props} />\n )\n\n// The native slot takes only SF Symbols or bundled rasters — we have no way\n// to systematize rasterizing our SVG icon library, and xmark matches\n// general.x closely. The fallback keeps our icon.\nexport const withRightClose =\n ({ onPress }: { onPress: () => void }): OptionsDecorator =>\n options => ({\n ...options,\n headerRight: createCloseHeaderRight({ onPress }),\n unstable_headerRightItems: () => [\n {\n type: 'button' as const,\n label: 'Close',\n icon: { type: 'sfSymbol' as const, name: 'xmark' as const },\n onPress,\n },\n ],\n })\n\n// The default back icon reserves trailing space for a label that\n// displayMode=\"minimal\" never shows; a custom image skips it so the glass\n// capsule hugs the glyph.\nconst renderGlassBackImage = ({ tintColor }: { tintColor: string }) => (\n <Icon name=\"general.leftChevron\" size={18} color={tintColor} />\n)\n\n// The iOS 26 glass capsule manages its own insets — negative margins clip\n// the button against the capsule edge.\nexport const createMinimalHeaderBackButton =\n ({ onPress }: { onPress: () => void }) =>\n (props: NativeStackHeaderLeftProps) => (\n <HeaderBackButton\n style={\n isLiquidGlassEnabled()\n ? undefined\n : {\n marginLeft: Platform.select({ ios: -8, default: -3 }),\n marginRight: Platform.select({ ios: 0, default: 30 }),\n }\n }\n backImage={isLiquidGlassEnabled() ? renderGlassBackImage : undefined}\n displayMode=\"minimal\"\n onPress={onPress}\n {...props}\n />\n )\n\n// Under glass the native minimal back button suffices; pre-26 needs the\n// custom button and its layout nudges.\nexport const withMinimalBack =\n ({ onPress }: { onPress: () => void }): OptionsDecorator =>\n options => ({\n ...options,\n ...(isLiquidGlassEnabled() ? {} : { headerLeft: createMinimalHeaderBackButton({ onPress }) }),\n })\n\ninterface UseHeaderRightOptions {\n title: string\n onPress: () => void\n disabled?: boolean\n enabled?: boolean\n}\n\n// For screens whose header button depends on live state (form validity,\n// mutation callbacks). Static buttons belong in the navigator options.\nexport const useHeaderRight = ({\n title,\n onPress,\n disabled,\n enabled = true,\n}: UseHeaderRightOptions) => {\n const navigation = useNavigation()\n\n useLayoutEffect(() => {\n if (!enabled) {\n navigation.setOptions({ headerRight: () => null, unstable_headerRightItems: undefined })\n return\n }\n\n navigation.setOptions(withRightText({ text: title, onPress, disabled })({}))\n }, [disabled, enabled, navigation, onPress, title])\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n interactionColor: {\n color: Platform.select({\n ios: colors.iOSModalHeaderButtonTextColor,\n android: colors.androidModalHeaderButtonTextColor,\n }),\n },\n androidCancelButton: {\n marginRight: 16,\n },\n iosCancelButton: {\n fontWeight: 'normal',\n },\n disabledColor: {\n color: colors.textColorDefaultDisabled,\n },\n })\n}\n"]}
|
package/build/hooks/index.d.ts
CHANGED
|
@@ -8,7 +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 './
|
|
11
|
+
export * from './use_direct_messages_enabled';
|
|
12
12
|
export * from './use_font_scale';
|
|
13
13
|
export * from './use_has_direct_messages';
|
|
14
14
|
export * from './use_groups_groups';
|
|
@@ -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,
|
|
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,+BAA+B,CAAA;AAC7C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,+BAA+B,CAAA;AAC7C,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"}
|
package/build/hooks/index.js
CHANGED
|
@@ -8,7 +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 './
|
|
11
|
+
export * from './use_direct_messages_enabled';
|
|
12
12
|
export * from './use_font_scale';
|
|
13
13
|
export * from './use_has_direct_messages';
|
|
14
14
|
export * from './use_groups_groups';
|
package/build/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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,
|
|
1
|
+
{"version":3,"file":"index.js","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,+BAA+B,CAAA;AAC7C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,+BAA+B,CAAA;AAC7C,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","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_enabled'\nexport * from './use_font_scale'\nexport * from './use_has_direct_messages'\nexport * from './use_groups_groups'\nexport * from './use_groups'\nexport * from './use_interaction_ghost_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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAO5D,eAAO,MAAM,0BAA0B,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"use_conversation.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAO5D,eAAO,MAAM,0BAA0B,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;CA4DzF,CAAA;AAEF,eAAO,MAAM,eAAe,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CAI/E,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDnF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,+JA+BrF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,iFAiBrF,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAI,qBAAqB;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C7F,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation.js","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useState } from 'react'\nimport { ApiResource, ConversationResource } from '../types'\nimport { transformGetToPost } from '../utils/client/request_helpers'\nimport { Haptic } from '../utils/native_adapters'\nimport { getConversationsRequestArgs } from '../utils/request/conversation'\nimport { useApiClient } from './use_api_client'\nimport { getRequestQueryKey, useSuspenseGet } from './use_suspense_api'\n\nexport const getConversationRequestArgs = ({ conversation_id }: { conversation_id: number }) => ({\n url: `/me/conversations/${conversation_id}`,\n data: {\n fields: {\n Conversation: [\n 'analytics_metadata',\n 'created_at',\n 'badges',\n 'conversation_membership',\n 'conversation_preview',\n 'gender_option',\n 'groups',\n 'last_message_author_id',\n 'last_message_author_name',\n 'last_message_created_at',\n 'last_message_text_preview',\n 'latest_read_message_sort_key',\n 'preview_avatar_urls',\n 'custom_avatar_type',\n 'custom_avatar_key',\n 'custom_avatar_color',\n 'custom_avatar_image_url',\n 'direct_message',\n 'disabled',\n 'disabled_reason',\n 'disabled_message',\n 'member_ability',\n 'muted',\n 'replies_disabled',\n 'title',\n 'unread_count',\n 'unread_reaction',\n 'updated_at',\n ],\n AnalyticsMetadata: ['metadata'],\n MemberAbility: [\n 'can_update',\n 'can_delete',\n 'leader',\n 'can_reply',\n 'can_delete_non_authored_messages',\n 'can_message_available_members',\n ],\n ConversationMembership: [\n 'last_read_message_sort_key',\n 'notification_level',\n 'notification_level_description',\n 'notification_level_options',\n 'muted',\n ],\n ConversationBadge: ['app_name', 'pco_resource_type', 'text'],\n Group: ['type', 'id', 'links', 'name', 'source_app_name', 'source_type'],\n },\n include: [\n 'badges',\n 'conversation_membership',\n 'member_ability',\n 'groups',\n 'analytics_metadata',\n ],\n },\n})\n\nexport const useConversation = ({ conversation_id }: { conversation_id: number }) => {\n const args = getConversationRequestArgs({ conversation_id })\n\n return useSuspenseGet<ConversationResource>(args)\n}\n\nexport const useConversationMute = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n const { data: conversation } = useConversation({ conversation_id })\n const [value, setValue] = useState<boolean>(conversation.muted)\n\n const { mutate: setMuted, ...mutation } = useMutation({\n onMutate: async (muted: boolean) => {\n return queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n setValue(muted)\n prev.data.muted = muted\n if (prev.data.conversationMembership) {\n prev.data.conversationMembership.muted = muted\n }\n\n return prev\n })\n },\n mutationKey: ['muteConversation'],\n mutationFn: async (muted: boolean) => {\n const action = muted ? 'mute' : 'unmute'\n\n return apiClient.chat.post<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}/${action}`,\n data: { data: { type: '', attributes: {} }, fields: { Conversation: 'muted' } },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.invalidateQueries({ queryKey: ['/me/conversations'] })\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n // Posting to the mute action endpoint can't return all the fields\n // so we need to set only the fields we require\n prev.data.muted = response.data.muted\n if (prev.data.conversationMembership) {\n prev.data.conversationMembership.muted = response.data.muted\n }\n setValue(response.data.muted)\n\n return prev\n })\n },\n })\n\n return { muted: value, setMuted, ...mutation }\n}\n\nexport const useConversationUpdate = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n\n return useMutation({\n onMutate: async (update: Partial<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (prev?.data) {\n prev.data = {\n ...prev.data,\n ...update,\n }\n }\n\n return prev\n })\n },\n mutationKey: ['mutateConversation'],\n mutationFn: async (update: Partial<ConversationResource>) => {\n const postArgs = transformGetToPost(requestArgs).data\n return apiClient.chat.patch<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}/`,\n data: { data: { type: '', attributes: update }, ...postArgs },\n })\n },\n onSuccess: response => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, () => response)\n },\n })\n}\n\nexport const useConversationDelete = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const { url } = getConversationsRequestArgs()\n\n return useMutation({\n mutationKey: ['deleteConversation'],\n mutationFn: async () => {\n return apiClient.chat.delete({\n url: `/me/conversations/${conversation_id}`,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [url] })\n Haptic.notificationSuccess()\n },\n })\n}\n\nexport const useConversationDisableReplies = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n const { data: conversation } = useConversation({ conversation_id })\n const [value, setValue] = useState<boolean>(conversation.repliesDisabled)\n\n const { mutate: setRepliesDisabled, ...mutation } = useMutation({\n onMutate: async (repliesDisabled: boolean) => {\n return queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n setValue(repliesDisabled)\n prev.data.repliesDisabled = repliesDisabled\n\n return prev\n })\n },\n mutationKey: ['disableRepliesConversation'],\n mutationFn: async (repliesDisabled: boolean) => {\n return apiClient.chat.patch<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}`,\n data: {\n data: {\n type: 'Conversation',\n attributes: {\n replies_disabled: repliesDisabled,\n },\n },\n },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n prev.data.repliesDisabled = response.data.repliesDisabled\n setValue(response.data.repliesDisabled)\n\n return prev\n })\n },\n })\n\n return { repliesDisabled: value, setRepliesDisabled, ...mutation }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use_conversation.js","sourceRoot":"","sources":["../../src/hooks/use_conversation.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useState } from 'react'\nimport { ApiResource, ConversationResource } from '../types'\nimport { transformGetToPost } from '../utils/client/request_helpers'\nimport { Haptic } from '../utils/native_adapters'\nimport { getConversationsRequestArgs } from '../utils/request/conversation'\nimport { useApiClient } from './use_api_client'\nimport { getRequestQueryKey, useSuspenseGet } from './use_suspense_api'\n\nexport const getConversationRequestArgs = ({ conversation_id }: { conversation_id: number }) => ({\n url: `/me/conversations/${conversation_id}`,\n data: {\n fields: {\n Conversation: [\n 'analytics_metadata',\n 'created_at',\n 'badges',\n 'conversation_membership',\n 'conversation_preview',\n 'gender_option',\n 'groups',\n 'last_message_author_id',\n 'last_message_author_name',\n 'last_message_created_at',\n 'last_message_text_preview',\n 'latest_read_message_sort_key',\n 'preview_avatar_urls',\n 'custom_avatar_type',\n 'custom_avatar_key',\n 'custom_avatar_color',\n 'custom_avatar_image_url',\n 'direct_message',\n 'disabled',\n 'disabled_reason',\n 'member_ability',\n 'muted',\n 'replies_disabled',\n 'title',\n 'unread_count',\n 'unread_reaction',\n 'updated_at',\n ],\n AnalyticsMetadata: ['metadata'],\n MemberAbility: [\n 'can_update',\n 'can_delete',\n 'leader',\n 'can_reply',\n 'can_delete_non_authored_messages',\n 'can_message_available_members',\n ],\n ConversationMembership: [\n 'last_read_message_sort_key',\n 'notification_level',\n 'notification_level_description',\n 'notification_level_options',\n 'muted',\n ],\n ConversationBadge: ['app_name', 'pco_resource_type', 'text'],\n Group: ['type', 'id', 'links', 'name', 'source_app_name', 'source_type'],\n },\n include: [\n 'badges',\n 'conversation_membership',\n 'member_ability',\n 'groups',\n 'analytics_metadata',\n ],\n },\n})\n\nexport const useConversation = ({ conversation_id }: { conversation_id: number }) => {\n const args = getConversationRequestArgs({ conversation_id })\n\n return useSuspenseGet<ConversationResource>(args)\n}\n\nexport const useConversationMute = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n const { data: conversation } = useConversation({ conversation_id })\n const [value, setValue] = useState<boolean>(conversation.muted)\n\n const { mutate: setMuted, ...mutation } = useMutation({\n onMutate: async (muted: boolean) => {\n return queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n setValue(muted)\n prev.data.muted = muted\n if (prev.data.conversationMembership) {\n prev.data.conversationMembership.muted = muted\n }\n\n return prev\n })\n },\n mutationKey: ['muteConversation'],\n mutationFn: async (muted: boolean) => {\n const action = muted ? 'mute' : 'unmute'\n\n return apiClient.chat.post<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}/${action}`,\n data: { data: { type: '', attributes: {} }, fields: { Conversation: 'muted' } },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.invalidateQueries({ queryKey: ['/me/conversations'] })\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n // Posting to the mute action endpoint can't return all the fields\n // so we need to set only the fields we require\n prev.data.muted = response.data.muted\n if (prev.data.conversationMembership) {\n prev.data.conversationMembership.muted = response.data.muted\n }\n setValue(response.data.muted)\n\n return prev\n })\n },\n })\n\n return { muted: value, setMuted, ...mutation }\n}\n\nexport const useConversationUpdate = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n\n return useMutation({\n onMutate: async (update: Partial<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (prev?.data) {\n prev.data = {\n ...prev.data,\n ...update,\n }\n }\n\n return prev\n })\n },\n mutationKey: ['mutateConversation'],\n mutationFn: async (update: Partial<ConversationResource>) => {\n const postArgs = transformGetToPost(requestArgs).data\n return apiClient.chat.patch<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}/`,\n data: { data: { type: '', attributes: update }, ...postArgs },\n })\n },\n onSuccess: response => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, () => response)\n },\n })\n}\n\nexport const useConversationDelete = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const { url } = getConversationsRequestArgs()\n\n return useMutation({\n mutationKey: ['deleteConversation'],\n mutationFn: async () => {\n return apiClient.chat.delete({\n url: `/me/conversations/${conversation_id}`,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [url] })\n Haptic.notificationSuccess()\n },\n })\n}\n\nexport const useConversationDisableReplies = ({ conversation_id }: { conversation_id: number }) => {\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const requestArgs = getConversationRequestArgs({ conversation_id })\n const queryKey = getRequestQueryKey(requestArgs)\n const { data: conversation } = useConversation({ conversation_id })\n const [value, setValue] = useState<boolean>(conversation.repliesDisabled)\n\n const { mutate: setRepliesDisabled, ...mutation } = useMutation({\n onMutate: async (repliesDisabled: boolean) => {\n return queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n setValue(repliesDisabled)\n prev.data.repliesDisabled = repliesDisabled\n\n return prev\n })\n },\n mutationKey: ['disableRepliesConversation'],\n mutationFn: async (repliesDisabled: boolean) => {\n return apiClient.chat.patch<ApiResource<ConversationResource>>({\n url: `/me/conversations/${conversation_id}`,\n data: {\n data: {\n type: 'Conversation',\n attributes: {\n replies_disabled: repliesDisabled,\n },\n },\n },\n })\n },\n onSuccess: (response: ApiResource<ConversationResource>) => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n prev.data.repliesDisabled = response.data.repliesDisabled\n setValue(response.data.repliesDisabled)\n\n return prev\n })\n },\n })\n\n return { repliesDisabled: value, setRepliesDisabled, ...mutation }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,yBAAyB,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"use_conversation_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,yBAAyB,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,QA0FlE"}
|
|
@@ -14,7 +14,7 @@ export function useConversationJoltEvents({ conversationId }) {
|
|
|
14
14
|
const apiClient = useApiClient();
|
|
15
15
|
const queryKey = useMemo(() => getRequestQueryKey(getConversationRequestArgs({ conversation_id: conversationId })), [conversationId]);
|
|
16
16
|
const handleUpdatedConversation = useCallback((e) => {
|
|
17
|
-
const { last_message_idempotent_key, last_message_author_id, disabled, disabled_reason
|
|
17
|
+
const { last_message_idempotent_key, last_message_author_id, disabled, disabled_reason } = e.data.data;
|
|
18
18
|
if (last_message_idempotent_key && last_message_author_id === currentPersonId) {
|
|
19
19
|
completeMessageCreationConversationTracking({
|
|
20
20
|
apiClient,
|
|
@@ -24,15 +24,7 @@ export function useConversationJoltEvents({ conversationId }) {
|
|
|
24
24
|
queryClient.setQueryData(queryKey, prev => {
|
|
25
25
|
if (!prev?.data)
|
|
26
26
|
return prev;
|
|
27
|
-
return {
|
|
28
|
-
...prev,
|
|
29
|
-
data: {
|
|
30
|
-
...prev.data,
|
|
31
|
-
disabled,
|
|
32
|
-
disabledReason: disabled_reason,
|
|
33
|
-
disabledMessage: disabled_message,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
27
|
+
return { ...prev, data: { ...prev.data, disabled, disabledReason: disabled_reason } };
|
|
36
28
|
});
|
|
37
29
|
queryClient.invalidateQueries({ queryKey });
|
|
38
30
|
}, [queryClient, queryKey, currentPersonId, apiClient]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_jolt_events.js","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAG5C,OAAO,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAMvD,MAAM,UAAU,yBAAyB,CAAC,EAAE,cAAc,EAAS;IACjE,MAAM,WAAW,GAAG,cAAc,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,eAAe,GAAG,aAAa,EAAE,EAAE,CAAA;IACzC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC,EACzF,CAAC,cAAc,CAAC,CACjB,CAAA;IAED,MAAM,yBAAyB,GAAG,WAAW,CAC3C,CAAC,CAAwB,EAAE,EAAE;QAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"use_conversation_jolt_events.js","sourceRoot":"","sources":["../../src/hooks/use_conversation_jolt_events.ts"],"names":[],"mappings":"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","sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useCallback, useMemo } from 'react'\nimport { ApiResource, ConversationResource } from '../types'\nimport { JoltConversationEvent, JoltReactionEvent } from '../types/jolt_events'\nimport { completeMessageCreationConversationTracking } from '../utils/performance_tracking'\nimport { useApiClient } from './use_api_client'\nimport { getConversationRequestArgs } from './use_conversation'\nimport { useCurrentPerson } from './use_current_person'\nimport { useJoltChannel, useJoltEvent } from './use_jolt'\nimport { getRequestQueryKey } from './use_suspense_api'\n\ninterface Props {\n conversationId: number\n}\n\nexport function useConversationJoltEvents({ conversationId }: Props) {\n const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`)\n const queryClient = useQueryClient()\n const currentPerson = useCurrentPerson()\n const currentPersonId = currentPerson?.id\n const apiClient = useApiClient()\n const queryKey = useMemo(\n () => getRequestQueryKey(getConversationRequestArgs({ conversation_id: conversationId })),\n [conversationId]\n )\n\n const handleUpdatedConversation = useCallback(\n (e: JoltConversationEvent) => {\n const { last_message_idempotent_key, last_message_author_id, disabled, disabled_reason } =\n e.data.data\n\n if (last_message_idempotent_key && last_message_author_id === currentPersonId) {\n completeMessageCreationConversationTracking({\n apiClient,\n idempotentKey: last_message_idempotent_key,\n })\n }\n\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n return { ...prev, data: { ...prev.data, disabled, disabledReason: disabled_reason } }\n })\n\n queryClient.invalidateQueries({ queryKey })\n },\n [queryClient, queryKey, currentPersonId, apiClient]\n )\n\n const handleConversationRead = useCallback(\n (e: JoltConversationEvent) => {\n const { latest_read_message_sort_key } = e.data.data\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data || !latest_read_message_sort_key) return prev\n if (\n prev.data.latestReadMessageSortKey &&\n prev.data.latestReadMessageSortKey >= latest_read_message_sort_key\n ) {\n return prev\n }\n\n return {\n ...prev,\n data: {\n ...prev.data,\n latestReadMessageSortKey: latest_read_message_sort_key,\n unreadReaction: false,\n },\n }\n })\n },\n [queryClient, queryKey]\n )\n\n const handleConversationDestroyed = useCallback(() => {\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n\n return {\n ...prev,\n data: {\n ...prev.data,\n deleted: true,\n },\n }\n })\n }, [queryClient, queryKey])\n\n const handleReactionJoltEvent = useCallback(\n (event: JoltReactionEvent) => {\n if (event.event !== 'reaction.created') return\n if (event.data.data.author_id === currentPersonId) return\n if (event.data.data.message_author_id !== currentPersonId) return\n\n queryClient.setQueryData<ApiResource<ConversationResource>>(queryKey, prev => {\n if (!prev?.data) return prev\n return { ...prev, data: { ...prev.data, unreadReaction: true } }\n })\n },\n [queryClient, queryKey, currentPersonId]\n )\n\n useJoltEvent(joltChannel, 'conversation.updated', handleUpdatedConversation)\n useJoltEvent(joltChannel, 'conversation.read', handleConversationRead)\n useJoltEvent(joltChannel, 'conversation.destroyed', handleConversationDestroyed)\n useJoltEvent(joltChannel, 'reaction.*', handleReactionJoltEvent)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_current_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_current_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAKhD,eAAO,MAAM,wBAAwB;;;;;;;
|
|
1
|
+
{"version":3,"file":"use_current_person.d.ts","sourceRoot":"","sources":["../../src/hooks/use_current_person.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAKhD,eAAO,MAAM,wBAAwB;;;;;;;CAiBpC,CAAA;AAED,eAAO,MAAM,qBAAqB,8CAA+C,CAAA;AAEjF,eAAO,MAAM,gBAAgB,6BAO5B,CAAA;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAE5D,eAAO,MAAM,qBAAqB;qBAGtB,OAAO,CAAC,qBAAqB,CAAC,kBACvB,aAAa,CAAC,qBAAqB,CAAC;;CActD,CAAA"}
|