@messenger-box/slack-ui-mobile 10.0.3-alpha.7 → 10.0.3-alpha.72

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 (144) hide show
  1. package/lib/components/Actionsheet.js +96 -0
  2. package/lib/components/Actionsheet.js.map +1 -0
  3. package/lib/components/AppRootContextProviderComponent.js +16 -2
  4. package/lib/components/AppRootContextProviderComponent.js.map +1 -1
  5. package/lib/components/Channels/ChannelsByAlphabeticalAccordion.js +13 -7
  6. package/lib/components/Channels/ChannelsByAlphabeticalAccordion.js.map +1 -1
  7. package/lib/components/CustomBottomTabs/CustomBottomTabs.js +11 -24
  8. package/lib/components/CustomBottomTabs/CustomBottomTabs.js.map +1 -1
  9. package/lib/components/CustomDrawer/CustomDrawer.js +31 -31
  10. package/lib/components/CustomDrawer/CustomDrawer.js.map +1 -1
  11. package/lib/components/Header/styles.js +2 -2
  12. package/lib/components/Header/styles.js.map +1 -1
  13. package/lib/components/LoadingSpinner/index.js +3 -3
  14. package/lib/components/LoadingSpinner/index.js.map +1 -1
  15. package/lib/components/NavigationHeader/InboxNavigationHeader.js +20 -25
  16. package/lib/components/NavigationHeader/InboxNavigationHeader.js.map +1 -1
  17. package/lib/components/NavigationHeader/NavigationHeader.js +58 -40
  18. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  19. package/lib/components/NavigationHeader/NavigationHeaderChat.js +9 -9
  20. package/lib/components/NavigationHeader/NavigationHeaderChat.js.map +1 -1
  21. package/lib/components/NavigationHeader/index.js +1 -1
  22. package/lib/components/SlackSearchInput/Suggestion.js +1 -1
  23. package/lib/components/SlackSearchInput/Tag.js +1 -1
  24. package/lib/components/SlackSearchInput/index.js +3 -3
  25. package/lib/components/SlackSearchInput/index.js.map +1 -1
  26. package/lib/components/VirtualizedScrollView/VirtualizedScrollView.js +19 -4
  27. package/lib/components/VirtualizedScrollView/VirtualizedScrollView.js.map +1 -1
  28. package/lib/components/WorkSpaceDrawer/WorkSpaceDrawer.js +41 -31
  29. package/lib/components/WorkSpaceDrawer/WorkSpaceDrawer.js.map +1 -1
  30. package/lib/compute.js +32 -23
  31. package/lib/compute.js.map +1 -1
  32. package/lib/constants/Colors.js +2 -2
  33. package/lib/constants/globalStyles.js +3 -3
  34. package/lib/constants/globalStyles.js.map +1 -1
  35. package/lib/hooks/useOptimizedChannelsQueries.js +106 -0
  36. package/lib/hooks/useOptimizedChannelsQueries.js.map +1 -0
  37. package/lib/index.js +1 -1
  38. package/lib/index.js.map +1 -1
  39. package/lib/navigation/SearchTabNavigation.js +47 -39
  40. package/lib/navigation/SearchTabNavigation.js.map +1 -1
  41. package/lib/navigation/TeamTabNavigation.js +51 -38
  42. package/lib/navigation/TeamTabNavigation.js.map +1 -1
  43. package/lib/queries/slackuiQueries.js +129 -0
  44. package/lib/queries/slackuiQueries.js.map +1 -0
  45. package/lib/routes.json +32 -23
  46. package/lib/screens/Account/AccountScreen.js +23 -26
  47. package/lib/screens/Account/AccountScreen.js.map +1 -1
  48. package/lib/screens/Activity/ActivityScreen.js +6 -2
  49. package/lib/screens/Activity/ActivityScreen.js.map +1 -1
  50. package/lib/screens/Channels/Add/AddName.js +33 -8
  51. package/lib/screens/Channels/Add/AddName.js.map +1 -1
  52. package/lib/screens/Channels/Add/AddVisibility.js +6 -6
  53. package/lib/screens/Channels/Add/AddVisibility.js.map +1 -1
  54. package/lib/screens/Channels/AddChannel.js +5 -3
  55. package/lib/screens/Channels/AddChannel.js.map +1 -1
  56. package/lib/screens/Channels/Channels.js +101 -95
  57. package/lib/screens/Channels/Channels.js.map +1 -1
  58. package/lib/screens/Files/FilesScreen.js +2 -2
  59. package/lib/screens/Files/FilesScreen.js.map +1 -1
  60. package/lib/screens/Home/Components/Channels/Channels.js +91 -77
  61. package/lib/screens/Home/Components/Channels/Channels.js.map +1 -1
  62. package/lib/screens/Home/Components/DirectChannels/DirectChannels.js +249 -115
  63. package/lib/screens/Home/Components/DirectChannels/DirectChannels.js.map +1 -1
  64. package/lib/screens/Home/Components/InviteMembers/index.js +88 -0
  65. package/lib/screens/Home/Components/InviteMembers/index.js.map +1 -0
  66. package/lib/screens/Home/Components/Teams/Teams.js +110 -47
  67. package/lib/screens/Home/Components/Teams/Teams.js.map +1 -1
  68. package/lib/screens/Home/Components/TopCommonSlider/TopCommonSlider.js +44 -75
  69. package/lib/screens/Home/Components/TopCommonSlider/TopCommonSlider.js.map +1 -1
  70. package/lib/screens/Home/HomeScreen.js +161 -194
  71. package/lib/screens/Home/HomeScreen.js.map +1 -1
  72. package/lib/screens/Home/styles.js +4 -4
  73. package/lib/screens/Home/styles.js.map +1 -1
  74. package/lib/screens/Inbox/InboxChannelDetail.js +67 -34
  75. package/lib/screens/Inbox/InboxChannelDetail.js.map +1 -1
  76. package/lib/screens/Inbox/InboxDialogMessages.js +2 -2
  77. package/lib/screens/Inbox/InboxDialogMessages.js.map +1 -1
  78. package/lib/screens/Inbox/InboxScreen.js +3 -3
  79. package/lib/screens/Inbox/InboxScreen.js.map +1 -1
  80. package/lib/screens/Login.js +4 -2
  81. package/lib/screens/Login.js.map +1 -1
  82. package/lib/screens/Organization/AddWorkspace.js +42 -38
  83. package/lib/screens/Organization/AddWorkspace.js.map +1 -1
  84. package/lib/screens/Organization/CreateOrganization.js +11 -2
  85. package/lib/screens/Organization/CreateOrganization.js.map +1 -1
  86. package/lib/screens/Organization/InitialChannelOnboarding.js +22 -4
  87. package/lib/screens/Organization/InitialChannelOnboarding.js.map +1 -1
  88. package/lib/screens/Organization/InitializeOrganizationChannel.js +9 -4
  89. package/lib/screens/Organization/InitializeOrganizationChannel.js.map +1 -1
  90. package/lib/screens/Organization/InviteOrganizationMembers.js +52 -10
  91. package/lib/screens/Organization/InviteOrganizationMembers.js.map +1 -1
  92. package/lib/screens/Peoples/AddByEmail.js +24 -6
  93. package/lib/screens/Peoples/AddByEmail.js.map +1 -1
  94. package/lib/screens/Peoples/AddFromContacts.js +172 -87
  95. package/lib/screens/Peoples/AddFromContacts.js.map +1 -1
  96. package/lib/screens/Peoples/AddPeople.js +21 -42
  97. package/lib/screens/Peoples/AddPeople.js.map +1 -1
  98. package/lib/screens/Peoples/People.js +42 -4
  99. package/lib/screens/Peoples/People.js.map +1 -1
  100. package/lib/screens/Profile/ProfileScreen.js +27 -12
  101. package/lib/screens/Profile/ProfileScreen.js.map +1 -1
  102. package/lib/screens/Saved/SavedScreen.js +2 -2
  103. package/lib/screens/Saved/SavedScreen.js.map +1 -1
  104. package/lib/screens/Search/Channels.js +20 -32
  105. package/lib/screens/Search/Channels.js.map +1 -1
  106. package/lib/screens/Search/Files.js +2 -2
  107. package/lib/screens/Search/Files.js.map +1 -1
  108. package/lib/screens/Search/JumpTo.js +2 -2
  109. package/lib/screens/Search/JumpTo.js.map +1 -1
  110. package/lib/screens/Search/People.js +19 -27
  111. package/lib/screens/Search/People.js.map +1 -1
  112. package/lib/screens/Search/Recents.js +26 -31
  113. package/lib/screens/Search/Recents.js.map +1 -1
  114. package/lib/screens/Search/SearchAddChannel.js +366 -227
  115. package/lib/screens/Search/SearchAddChannel.js.map +1 -1
  116. package/lib/screens/Search/SearchChannelPeople.js +70 -37
  117. package/lib/screens/Search/SearchChannelPeople.js.map +1 -1
  118. package/lib/screens/Search/SearchScreen.js +5 -3
  119. package/lib/screens/Search/SearchScreen.js.map +1 -1
  120. package/lib/screens/Search/styles.js +2 -2
  121. package/lib/screens/Search/styles.js.map +1 -1
  122. package/lib/screens/Teams/AddTeam.js +3 -3
  123. package/lib/screens/Teams/AddTeam.js.map +1 -1
  124. package/lib/screens/Teams/Components/Channels/Channels.js +6 -6
  125. package/lib/screens/Teams/Components/Channels/Channels.js.map +1 -1
  126. package/lib/screens/Teams/Components/Members/Members.js +7 -3
  127. package/lib/screens/Teams/Components/Members/Members.js.map +1 -1
  128. package/lib/screens/Teams/Team.js +6 -8
  129. package/lib/screens/Teams/Team.js.map +1 -1
  130. package/lib/screens/Teams/Teams.js +137 -106
  131. package/lib/screens/Teams/Teams.js.map +1 -1
  132. package/lib/screens/Teams/useTeams.js +41 -0
  133. package/lib/screens/Teams/useTeams.js.map +1 -0
  134. package/lib/screens/Wiki/WikiScreen.js +2 -2
  135. package/lib/screens/Wiki/WikiScreen.js.map +1 -1
  136. package/lib/theme/index.js +2 -2
  137. package/lib/theme/index.js.map +1 -1
  138. package/package.json +6 -4
  139. package/lib/navigation/ActivityNavigator.js +0 -61
  140. package/lib/navigation/ActivityNavigator.js.map +0 -1
  141. package/lib/navigation/ExploreNavigator.js +0 -583
  142. package/lib/navigation/ExploreNavigator.js.map +0 -1
  143. package/lib/navigation/InboxNavigator.js +0 -183
  144. package/lib/navigation/InboxNavigator.js.map +0 -1
@@ -1,136 +1,270 @@
1
- import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useCallback}from'react';import {TouchableOpacity}from'react-native';import styles from'../../styles.js';import {View,HStack,Avatar,AvatarFallbackText,AvatarBadge,Text,AvatarImage,FlatList,Icon,AddIcon,Spinner}from'@admin-layout/gluestack-ui-mobile';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector,shallowEqual}from'react-redux';import {orderBy,startCase}from'lodash-es';import {RoomType}from'common';import'../../../../constants/device.js';import'../../../../constants/globalStyles.js';import'../../../../constants/Layout.js';import {NavigationRoutes}from'../../../../constants/routes.js';import {MaterialIcons}from'@expo/vector-icons';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../../../hooks/useDrawerLayout.js';import'../../../../hooks/useExpoNotificationProvider.js';const DirectChannels = ({
2
- userDirectChannels,
3
- loading,
4
- reFetchDirectChannels
5
- }) => {
1
+ import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useContext,useRef,useMemo,useCallback,useEffect}from'react';import {TouchableOpacity}from'react-native';import {HStack,Avatar,AvatarFallbackText,AvatarImage,Text,Box,FlatList}from'@admin-layout/gluestack-ui-mobile';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector,shallowEqual}from'react-redux';import {RoomType}from'common';import {useAddDirectChannelMutation}from'../../../../queries/slackuiQueries.js';import'../../../../constants/device.js';import'../../../../constants/globalStyles.js';import'../../../../constants/Layout.js';import {NavigationRoutes}from'../../../../constants/routes.js';import {Feather,MaterialIcons,FontAwesome}from'@expo/vector-icons';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../../../hooks/useDrawerLayout.js';import'../../../../hooks/useExpoNotificationProvider.js';import'../../../../hooks/useOptimizedChannelsQueries.js';import colors from'tailwindcss/colors';import {RefetchContext,ChannelsDataContext}from'../../HomeScreen.js';import {gql}from'@apollo/client/index.js';const DirectChannels = () => {
6
2
  const navigation = useNavigation();
7
3
  const [expandableMessage, setExpendableMessage] = useState(true);
8
- const [directChannels, setDirectChannels] = useState(null);
9
4
  const user = useSelector(userSelector, shallowEqual);
10
5
  useIsFocused();
11
6
  const {
12
7
  orgName
13
8
  } = useDrawerLayout();
14
- useFocusEffect(React__default.useCallback(() => {
15
- reFetchDirectChannels();
16
- return () => {
17
- };
18
- }, []));
19
- React__default.useEffect(() => {
20
- if (userDirectChannels)
21
- setDirectChannels(userDirectChannels);
22
- }, [userDirectChannels]);
23
- const organizationDirectChannels = React__default.useMemo(() => {
24
- var _a;
25
- if (!directChannels)
26
- return null;
27
- return directChannels && orderBy((_a = directChannels == null ? void 0 : directChannels.filter((i) => i.type == RoomType.Direct)) == null ? void 0 : _a.filter((c) => {
28
- var _a2;
29
- return (_a2 = c == null ? void 0 : c.members) == null ? void 0 : _a2.some(
30
- (u) => {
31
- var _a3, _b, _c;
32
- return ((_a3 = c == null ? void 0 : c.members) == null ? void 0 : _a3.length) == 1 && ((_b = c == null ? void 0 : c.members) == null ? void 0 : _b.filter((ch) => {
33
- var _a4;
34
- return ((_a4 = ch == null ? void 0 : ch.user) == null ? void 0 : _a4.id) == (user == null ? void 0 : user.id);
35
- })) ? u !== null : u !== null && ((_c = u == null ? void 0 : u.user) == null ? void 0 : _c.id) != (user == null ? void 0 : user.id);
9
+ const {
10
+ shouldRefetch
11
+ } = useContext(RefetchContext);
12
+ const {
13
+ getDirectChannelsForHome,
14
+ loading,
15
+ error,
16
+ refetchChannels,
17
+ hasDirectChannels
18
+ } = useContext(ChannelsDataContext);
19
+ const reFetchDirectChannelsRef = useRef(() => {
20
+ });
21
+ const isCreatingDirectChannel = useRef(false);
22
+ const [addDirectChannel] = useAddDirectChannelMutation({
23
+ update: (cache, {
24
+ data
25
+ }) => {
26
+ try {
27
+ if (data == null ? void 0 : data.createDirectChannel) {
28
+ cache.modify({
29
+ fields: {
30
+ channelsByUser: (existingChannels = [], {
31
+ readField,
32
+ storeFieldName
33
+ }) => {
34
+ if (!storeFieldName.includes(RoomType.Direct) || !storeFieldName.includes(orgName)) {
35
+ return existingChannels;
36
+ }
37
+ const newChannelRef = cache.writeFragment({
38
+ data: data.createDirectChannel,
39
+ fragment: gql`
40
+ fragment NewChannel on Channel {
41
+ id
42
+ }
43
+ `
44
+ });
45
+ const channelExists = existingChannels.some((channelRef) => readField("id", channelRef) === data.createDirectChannel.id);
46
+ if (!channelExists) {
47
+ return [newChannelRef, ...existingChannels];
48
+ }
49
+ return existingChannels;
50
+ }
51
+ }
52
+ });
36
53
  }
37
- );
38
- }), [(ch) => {
39
- var _a2;
40
- return (_a2 = ch == null ? void 0 : ch.members) == null ? void 0 : _a2.map((u) => {
41
- var _a3, _b;
42
- return (_b = (_a3 = u == null ? void 0 : u.user) == null ? void 0 : _a3.givenName) == null ? void 0 : _b.toLowerCase();
54
+ } catch (err) {
55
+ console.error("Error updating cache after adding direct channel:", err);
56
+ }
57
+ },
58
+ optimisticResponse: (variables) => {
59
+ return {
60
+ __typename: "Mutation",
61
+ createDirectChannel: {
62
+ __typename: "Channel",
63
+ id: `temp-id-${Date.now()}`,
64
+ title: "DIRECT CHANNEL",
65
+ displayName: "DIRECT CHANNEL",
66
+ type: RoomType.Direct,
67
+ members: [{
68
+ __typename: "ChannelMember",
69
+ id: `temp-member-${Date.now()}`,
70
+ user: {
71
+ __typename: "User",
72
+ id: user == null ? void 0 : user.id,
73
+ givenName: (user == null ? void 0 : user.givenName) || (user == null ? void 0 : user.username) || "You",
74
+ username: user == null ? void 0 : user.username,
75
+ picture: user == null ? void 0 : user.picture
76
+ }
77
+ }]
78
+ }
79
+ };
80
+ },
81
+ onCompleted: () => {
82
+ isCreatingDirectChannel.current = false;
83
+ },
84
+ onError: (error2) => {
85
+ isCreatingDirectChannel.current = false;
86
+ if (!error2.message.includes("Channel already exists")) {
87
+ console.error("Failed to create direct channel:", error2.message);
88
+ }
89
+ }
90
+ });
91
+ const organizationDirectChannels = useMemo(() => {
92
+ return getDirectChannelsForHome(20);
93
+ }, [getDirectChannelsForHome]);
94
+ const checkAndCreateSelfDM = useCallback(() => {
95
+ if (!(user == null ? void 0 : user.id) || isCreatingDirectChannel.current || loading) {
96
+ return;
97
+ }
98
+ const directChannelsData = getDirectChannelsForHome(20);
99
+ if (directChannelsData) {
100
+ const selfDMChannels = directChannelsData.filter((channel) => {
101
+ var _a, _b;
102
+ return channel.members.length === 1 && ((_b = (_a = channel.members[0]) == null ? void 0 : _a.user) == null ? void 0 : _b.id) === (user == null ? void 0 : user.id);
43
103
  });
44
- }], ["asc"]) || [];
45
- }, [directChannels]);
46
- const openUserInbox = React__default.useCallback((id, title, members, type) => {
47
- var _a, _b, _c, _d, _e, _f, _g;
48
- const channelMembers = (_b = (_a = members == null ? void 0 : members.filter((ch) => {
49
- var _a2;
50
- return (members == null ? void 0 : members.length) == 1 && (members == null ? void 0 : members.filter((ch2) => {
51
- var _a3;
52
- return ((_a3 = ch2 == null ? void 0 : ch2.user) == null ? void 0 : _a3.id) == (user == null ? void 0 : user.id);
53
- })) ? ch !== null : ch !== null && ((_a2 = ch == null ? void 0 : ch.user) == null ? void 0 : _a2.id) != (user == null ? void 0 : user.id);
54
- })) == null ? void 0 : _a.map((m) => m == null ? void 0 : m.user)) != null ? _b : null;
55
- const memberImage = (channelMembers == null ? void 0 : channelMembers.length) == 1 ? (_d = (_c = channelMembers[0]) == null ? void 0 : _c.picture) != null ? _d : null : null;
56
- const membersNameAsTitle = (_g = (_f = (_e = channelMembers == null ? void 0 : channelMembers.map((u) => {
57
- var _a2;
58
- return (_a2 = u == null ? void 0 : u.givenName) != null ? _a2 : "";
59
- })) == null ? void 0 : _e.filter((mu) => mu)) == null ? void 0 : _f.join(", ")) != null ? _g : "";
104
+ if (selfDMChannels.length === 0 && !isCreatingDirectChannel.current) {
105
+ isCreatingDirectChannel.current = true;
106
+ addDirectChannel({
107
+ variables: {
108
+ receiver: [user.id],
109
+ displayName: "DIRECT CHANNEL",
110
+ channelOptions: {
111
+ schemeAdmin: true
112
+ }
113
+ }
114
+ });
115
+ }
116
+ }
117
+ }, [user == null ? void 0 : user.id, loading, getDirectChannelsForHome, addDirectChannel]);
118
+ const reFetchDirectChannels = useCallback(() => {
119
+ if (orgName) {
120
+ refetchChannels();
121
+ }
122
+ }, [orgName, refetchChannels]);
123
+ useEffect(() => {
124
+ if (!loading && organizationDirectChannels !== void 0) {
125
+ const timer = setTimeout(checkAndCreateSelfDM, 500);
126
+ return () => clearTimeout(timer);
127
+ }
128
+ }, [organizationDirectChannels, loading, checkAndCreateSelfDM]);
129
+ useEffect(() => {
130
+ reFetchDirectChannelsRef.current = reFetchDirectChannels;
131
+ }, [reFetchDirectChannels]);
132
+ useEffect(() => {
133
+ if (shouldRefetch && orgName && !isCreatingDirectChannel.current) {
134
+ reFetchDirectChannels();
135
+ }
136
+ }, [shouldRefetch, orgName, reFetchDirectChannels]);
137
+ useFocusEffect(useCallback(() => {
138
+ if (orgName && !isCreatingDirectChannel.current) {
139
+ reFetchDirectChannels();
140
+ }
141
+ }, [orgName, reFetchDirectChannels]));
142
+ const openInbox = useCallback((id, title, totalMembers, type) => {
60
143
  navigation.navigate(NavigationRoutes.DialogMessages, {
61
144
  channelId: id == null ? void 0 : id.toString(),
62
- title: (membersNameAsTitle == null ? void 0 : membersNameAsTitle.toString()) || (title == null ? void 0 : title.toString()),
63
- totalMembers: members == null ? void 0 : members.length,
64
- memberImage,
145
+ title: title == null ? void 0 : title.toString(),
146
+ totalMembers,
65
147
  channelType: type,
66
148
  orgName,
67
149
  hideTabBar: true
68
150
  });
69
- }, [orgName]);
70
- const renderChannelMemebers = useCallback(({
151
+ }, [orgName, navigation]);
152
+ const renderDirectChannelItem = useCallback(({
71
153
  item
72
154
  }) => {
73
155
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
74
- const channelMembers = (_c = (_b = (_a = item == null ? void 0 : item.members) == null ? void 0 : _a.filter((ch) => {
75
- var _a2, _b2, _c2;
76
- return ((_a2 = item == null ? void 0 : item.members) == null ? void 0 : _a2.length) == 1 && ((_b2 = item == null ? void 0 : item.members) == null ? void 0 : _b2.filter((ch2) => {
77
- var _a3;
78
- return ((_a3 = ch2 == null ? void 0 : ch2.user) == null ? void 0 : _a3.id) == (user == null ? void 0 : user.id);
79
- })) ? ch !== null : ch !== null && ((_c2 = ch == null ? void 0 : ch.user) == null ? void 0 : _c2.id) != (user == null ? void 0 : user.id);
80
- })) == null ? void 0 : _b.map((m) => m == null ? void 0 : m.user)) != null ? _c : null;
81
- let title = (_f = (_e = (_d = channelMembers == null ? void 0 : channelMembers.map((u) => {
82
- var _a2, _b2, _c2;
83
- return (u == null ? void 0 : u.id) == (user == null ? void 0 : user.id) ? (u == null ? void 0 : u.givenName) + " " + (u == null ? void 0 : u.familyName) + " (you)" : (channelMembers == null ? void 0 : channelMembers.length) > 1 ? (_a2 = u == null ? void 0 : u.givenName) != null ? _a2 : "" : (_c2 = (_b2 = u == null ? void 0 : u.givenName) != null ? _b2 : " " + (u == null ? void 0 : u.familyName)) != null ? _c2 : "";
84
- })) == null ? void 0 : _d.filter((mu) => mu)) == null ? void 0 : _e.join(", ")) != null ? _f : "";
85
- return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { key: item.id, onPress: () => openUserInbox(item.id, "Inbox", item == null ? void 0 : item.members, item == null ? void 0 : item.type) }, /* @__PURE__ */ React__default.createElement(View, { pr: "$10", py: "$1" }, /* @__PURE__ */ React__default.createElement(HStack, { w: "100%", space: "sm", flex: 1, alignItems: "center" }, /* @__PURE__ */ React__default.createElement(Avatar, { key: "direct-channel-profile-key", size: "sm", bg: "transparent" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_h = (_g = channelMembers[0]) == null ? void 0 : _g.username) == null ? void 0 : _h.charAt(0))), (channelMembers == null ? void 0 : channelMembers.length) > 1 ? /* @__PURE__ */ React__default.createElement(
86
- AvatarBadge,
156
+ const isSelfDM = ((_a = item.members) == null ? void 0 : _a.length) === 1 && ((_d = (_c = (_b = item.members) == null ? void 0 : _b[0]) == null ? void 0 : _c.user) == null ? void 0 : _d.id) === (user == null ? void 0 : user.id);
157
+ const member = ((_g = (_f = (_e = item.members) == null ? void 0 : _e.filter((m) => {
158
+ var _a2;
159
+ return ((_a2 = m == null ? void 0 : m.user) == null ? void 0 : _a2.id) !== (user == null ? void 0 : user.id);
160
+ })) == null ? void 0 : _f[0]) == null ? void 0 : _g.user) || ((_i = (_h = item.members) == null ? void 0 : _h[0]) == null ? void 0 : _i.user);
161
+ const getUserName = () => {
162
+ var _a2, _b2;
163
+ if (isSelfDM) {
164
+ return ((_a2 = user == null ? void 0 : user.profile) == null ? void 0 : _a2.name) || ((_b2 = user == null ? void 0 : user.profile) == null ? void 0 : _b2.nickname) || "You";
165
+ }
166
+ return (member == null ? void 0 : member.givenName) + " " + (member == null ? void 0 : member.familyName) || (member == null ? void 0 : member.givenName) || (member == null ? void 0 : member.username) || "Unknown";
167
+ };
168
+ return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => {
169
+ var _a2;
170
+ return openInbox(item.id, getUserName(), (_a2 = item.members) == null ? void 0 : _a2.length, item.type);
171
+ }, style: {
172
+ paddingVertical: 2,
173
+ paddingHorizontal: 12
174
+ } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(Avatar, { size: "xs", className: "rounded-md", style: {
175
+ backgroundColor: getUserAvatarColor(getUserName())
176
+ } }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, getUserName()), (member == null ? void 0 : member.picture) && /* @__PURE__ */ React__default.createElement(AvatarImage, { className: "rounded-md", source: {
177
+ uri: member.picture
178
+ }, alt: getUserName() })), /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-900 flex-1 text-base" }, getUserName(), isSelfDM && " (you)")));
179
+ }, [user, openInbox]);
180
+ const getUserAvatarColor = (name) => {
181
+ const colorOptions = [
182
+ "#E57373",
183
+ "#F06292",
184
+ "#BA68C8",
185
+ "#9575CD",
186
+ "#7986CB",
187
+ "#64B5F6",
188
+ "#4FC3F7",
189
+ "#4DD0E1",
190
+ "#4DB6AC",
191
+ "#81C784",
192
+ "#AED581",
193
+ "#DCE775",
194
+ "#FFD54F",
195
+ "#FFB74D",
196
+ "#FF8A65"
197
+ ];
198
+ let hash = 0;
199
+ for (let i = 0; i < name.length; i++) {
200
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
201
+ }
202
+ hash = Math.abs(hash);
203
+ return colorOptions[hash % colorOptions.length];
204
+ };
205
+ const ListEmptyComponent = useCallback(() => {
206
+ return /* @__PURE__ */ React__default.createElement(Box, { style: {
207
+ padding: 12
208
+ } }, error ? /* @__PURE__ */ React__default.createElement(Box, { style: {
209
+ padding: 8,
210
+ backgroundColor: "#FFF4F4",
211
+ borderRadius: 4
212
+ } }, /* @__PURE__ */ React__default.createElement(Text, { color: "#E01E5A", style: {
213
+ marginBottom: 8,
214
+ fontWeight: "500"
215
+ } }, error.message.includes("Service 'ChannelService.getAll' is not found") ? "Direct messages are temporarily unavailable. Please try again later." : error.message), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: reFetchDirectChannels }, /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", style: {
216
+ alignItems: "center"
217
+ } }, /* @__PURE__ */ React__default.createElement(Feather, { name: "refresh-cw", color: "#1264A3", size: 16 }), /* @__PURE__ */ React__default.createElement(Text, { color: "#1264A3", style: {
218
+ fontWeight: "500"
219
+ } }, "Retry")))) : loading ? /* @__PURE__ */ React__default.createElement(Box, { style: {
220
+ alignItems: "center",
221
+ paddingVertical: 16
222
+ } }, /* @__PURE__ */ React__default.createElement(Text, { style: {
223
+ color: "#616061"
224
+ } }, "Loading...")) : /* @__PURE__ */ React__default.createElement(Box, { style: {
225
+ alignItems: "center",
226
+ paddingVertical: 16
227
+ } }, /* @__PURE__ */ React__default.createElement(Box, { style: {
228
+ padding: 12,
229
+ marginBottom: 8,
230
+ borderRadius: 24,
231
+ backgroundColor: "#F8F8F8"
232
+ } }, /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: "person-outline", color: "#616061", size: 20 })), /* @__PURE__ */ React__default.createElement(Text, { style: {
233
+ color: "#616061",
234
+ textAlign: "center"
235
+ } }, "No direct messages yet")));
236
+ }, [error, loading, reFetchDirectChannels]);
237
+ const ListFooterComponent = useCallback(() => {
238
+ return /* @__PURE__ */ React__default.createElement(
239
+ TouchableOpacity,
87
240
  {
241
+ onPress: () => navigation.navigate(NavigationRoutes.SearchAddChannel, {
242
+ orgName
243
+ }),
88
244
  style: {
89
- width: "100%",
90
- height: "100%"
91
- },
92
- alignItems: "center",
93
- justifyContent: "center",
94
- bg: "$coolGray200",
95
- rounded: "$md"
245
+ paddingVertical: 6,
246
+ paddingHorizontal: 12
247
+ }
96
248
  },
97
- /* @__PURE__ */ React__default.createElement(Text, { style: {
98
- fontSize: 12,
99
- fontWeight: "bold",
100
- color: "#000"
101
- } }, channelMembers == null ? void 0 : channelMembers.length)
102
- ) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "image", size: "sm", style: {
103
- borderRadius: 6,
104
- borderWidth: 2,
105
- borderColor: "#fff"
106
- }, source: {
107
- uri: (_i = channelMembers[0]) == null ? void 0 : _i.picture
108
- } }), /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
109
- width: 10,
110
- height: 10
111
- }, bg: "$green800" }))), /* @__PURE__ */ React__default.createElement(Text, { style: {
112
- fontSize: 14,
113
- fontWeight: "400"
114
- }, color: "$coolGray800" }, title))));
115
- }, []);
116
- return /* @__PURE__ */ React__default.createElement(View, { style: styles.channelContainer }, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.headingContainer, onPress: () => setExpendableMessage(!expandableMessage) }, /* @__PURE__ */ React__default.createElement(HStack, { flex: 1, alignItems: "center", justifyContent: "space-between" }, /* @__PURE__ */ React__default.createElement(Text, { style: {
117
- fontSize: 15,
118
- fontWeight: "600",
119
- color: "black"
120
- } }, "Direct Messages"), expandableMessage ? /* @__PURE__ */ React__default.createElement(MaterialIcons, { color: "black", name: "keyboard-arrow-up", size: 20 }) : /* @__PURE__ */ React__default.createElement(MaterialIcons, { color: "black", name: "keyboard-arrow-down", size: 20 }))), expandableMessage && /* @__PURE__ */ React__default.createElement(FlatList, { py: "$2", data: organizationDirectChannels && (organizationDirectChannels == null ? void 0 : organizationDirectChannels.length) > 0 ? organizationDirectChannels : [], renderItem: renderChannelMemebers, key: "direct-messages-key", keyExtractor: (item, index) => String(index), contentContainerStyle: {
121
- flex: 1
122
- }, ListEmptyComponent: () => {
123
- return /* @__PURE__ */ React__default.createElement(View, { py: "$1" }, loading ? /* @__PURE__ */ React__default.createElement(Spinner, { color: "$blue500" }) : /* @__PURE__ */ React__default.createElement(Text, { color: "$coolGray600" }, "No members found"));
124
- }, ListFooterComponent: () => {
125
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.SearchAddChannel, {
126
- orgName
127
- }) }, /* @__PURE__ */ React__default.createElement(View, { pr: "$10", py: "$1" }, /* @__PURE__ */ React__default.createElement(HStack, { w: "100%", space: "sm", flex: 1, alignItems: "center" }, /* @__PURE__ */ React__default.createElement(Avatar, { key: "direct-start-new-msg-key", size: "sm", bg: "transparent" }, /* @__PURE__ */ React__default.createElement(Icon, { as: AddIcon, style: {
128
- width: "70%",
129
- height: "70%"
130
- }, color: "$coolGray600" })), /* @__PURE__ */ React__default.createElement(Text, { style: {
131
- fontSize: 14,
132
- fontWeight: "400"
133
- }, color: "$coolGray800" }, "Start a new message")))));
134
- } }));
135
- };
136
- var DirectChannels$1 = React__default.memo(DirectChannels);export{DirectChannels$1 as default};//# sourceMappingURL=DirectChannels.js.map
249
+ /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(Feather, { color: "#616061", name: "plus", size: 18 }), /* @__PURE__ */ React__default.createElement(Text, { style: {
250
+ fontSize: 16,
251
+ color: "#616061"
252
+ } }, "Start a new message"))
253
+ );
254
+ }, [orgName, navigation]);
255
+ const SectionHeader = useCallback(() => {
256
+ return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => setExpendableMessage(!expandableMessage), style: {
257
+ paddingVertical: 6,
258
+ paddingHorizontal: 16
259
+ } }, /* @__PURE__ */ React__default.createElement(HStack, { className: "justify-between items-center" }, /* @__PURE__ */ React__default.createElement(Text, { className: "font-semibold", style: {
260
+ fontSize: 15,
261
+ color: "#1D1C1D"
262
+ } }, "Direct Messages"), /* @__PURE__ */ React__default.createElement(FontAwesome, { name: expandableMessage ? "chevron-down" : "chevron-left", color: colors.gray[800], size: 12 })));
263
+ }, [expandableMessage]);
264
+ if (!expandableMessage) {
265
+ return /* @__PURE__ */ React__default.createElement(SectionHeader, null);
266
+ }
267
+ return /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(SectionHeader, null), (organizationDirectChannels == null ? void 0 : organizationDirectChannels.length) > 0 ? /* @__PURE__ */ React__default.createElement(FlatList, { keyExtractor: (item) => ((item == null ? void 0 : item.id) || "direct") + "-" + (item == null ? void 0 : item.title), data: organizationDirectChannels, renderItem: renderDirectChannelItem, ListFooterComponent, style: {
268
+ marginTop: 6
269
+ }, scrollEnabled: false }) : /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(ListEmptyComponent, null), /* @__PURE__ */ React__default.createElement(ListFooterComponent, null)));
270
+ };export{DirectChannels as default};//# sourceMappingURL=DirectChannels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DirectChannels.js","sources":["../../../../../src/screens/Home/Components/DirectChannels/DirectChannels.tsx"],"sourcesContent":["import { useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport React, { useState, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { TouchableOpacity, Share } from 'react-native';\nimport styles from '../../styles';\nimport {\n Pressable,\n View,\n Image,\n FlatList,\n HStack,\n Icon,\n Box,\n Text,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n AvatarGroup,\n Badge,\n Spinner,\n ButtonText,\n AddIcon,\n} from '@admin-layout/gluestack-ui-mobile';\nimport more from '../../../../assets/images/more.png';\nimport right from '../../../../assets/images/right.png';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport { startCase, orderBy } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useGetChannelsByUserQuery } from 'common/lib/generated/generated.js';\nimport { NavigationRoutes } from '../../../../constants';\nimport { MaterialIcons } from '@expo/vector-icons';\nimport { useDrawerLayout } from '../../../../hooks';\n\nconst DirectChannels = ({ userDirectChannels, loading, reFetchDirectChannels }: any) => {\n const navigation = useNavigation<any>();\n const [expandableMessage, setExpendableMessage] = useState(true);\n const [directChannels, setDirectChannels] = useState<any>(null);\n const user = useSelector(userSelector, shallowEqual);\n const isFocused = useIsFocused();\n const { orgName } = useDrawerLayout();\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n reFetchDirectChannels();\n\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, []),\n );\n\n React.useEffect(() => {\n if (userDirectChannels) setDirectChannels(userDirectChannels);\n }, [userDirectChannels]);\n\n const organizationDirectChannels = React.useMemo(() => {\n //Direct channel\n if (!directChannels) return null;\n return (\n (directChannels &&\n orderBy(\n directChannels\n ?.filter((i: any) => i.type == RoomType.Direct)\n ?.filter((c: any) =>\n c?.members?.some(\n // (u: any) => u !== null && u?.user?.id != user?.id && u.user.__typename == 'UserAccount',\n (u: any) =>\n c?.members?.length == 1 && c?.members?.filter((ch: any) => ch?.user?.id == user?.id)\n ? u !== null\n : u !== null && u?.user?.id != user?.id,\n ),\n ),\n [(ch: any) => ch?.members?.map((u: any) => u?.user?.givenName?.toLowerCase())],\n ['asc'],\n )) ||\n []\n );\n }, [directChannels]);\n\n const openUserInbox = React.useCallback(\n (id: any, title: any, members: any, type?: any) => {\n const channelMembers =\n members\n // ?.filter((ch: any) => ch?.user?.id != user?.id && ch?.user?.__typename == 'UserAccount')\n ?.filter((ch: any) =>\n members?.length == 1 && members?.filter((ch: any) => ch?.user?.id == user?.id)\n ? ch !== null\n : ch !== null && ch?.user?.id != user?.id,\n )\n ?.map((m: any) => m?.user) ?? null;\n\n const memberImage = channelMembers?.length == 1 ? channelMembers[0]?.picture ?? null : null;\n\n const membersNameAsTitle =\n channelMembers\n ?.map((u: any) => u?.givenName ?? '')\n ?.filter((mu: any) => mu)\n ?.join(', ') ?? '';\n\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: id?.toString(),\n title: membersNameAsTitle?.toString() || title?.toString(),\n totalMembers: members?.length,\n memberImage: memberImage,\n channelType: type,\n orgName: orgName,\n hideTabBar: true,\n });\n },\n [orgName],\n );\n\n const renderChannelMemebers = useCallback(({ item }: any) => {\n const channelMembers =\n item?.members\n // ?.filter((ch: any) => ch?.user?.id != user?.id && ch?.user?.__typename == 'UserAccount')\n ?.filter((ch: any) =>\n item?.members?.length == 1 && item?.members?.filter((ch: any) => ch?.user?.id == user?.id)\n ? ch !== null\n : ch !== null && ch?.user?.id != user?.id,\n )\n ?.map((m: any) => m?.user) ?? null;\n\n let title =\n channelMembers\n ?.map((u: any) =>\n u?.id == user?.id\n ? u?.givenName + ' ' + u?.familyName + ' (you)'\n : channelMembers?.length > 1\n ? u?.givenName ?? ''\n : u?.givenName ?? '' + ' ' + u?.familyName ?? '',\n )\n ?.filter((mu: any) => mu)\n ?.join(', ') ?? '';\n\n return (\n <TouchableOpacity key={item.id} onPress={() => openUserInbox(item.id, 'Inbox', item?.members, item?.type)}>\n <View pr={'$10'} py={'$1'}>\n <HStack w={'100%'} space={'sm'} flex={1} alignItems={'center'}>\n <Avatar key={'direct-channel-profile-key'} size={'sm'} bg={'transparent'}>\n <AvatarFallbackText>{startCase(channelMembers[0]?.username?.charAt(0))}</AvatarFallbackText>\n {/* <AvatarImage\n alt=\"image\"\n size={'md'}\n style={{\n // width: 25,\n // height: 25,\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: channelMembers[0]?.picture,\n }}\n /> */}\n {channelMembers?.length > 1 ? (\n <AvatarBadge\n // top={4}\n // right={'-$1'}\n // bottom={'-$1'}\n // size={5}\n style={{ width: '100%', height: '100%' }}\n // style={{ width: 20, height: 20 }}\n alignItems={'center'}\n justifyContent=\"center\"\n // bg={'#211627'}\n bg={'$coolGray200'}\n // opacity={0.85}\n rounded={'$md'}\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n ) : (\n <>\n <AvatarImage\n alt=\"image\"\n size={'sm'}\n style={{\n // width: 25,\n // height: 25,\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: channelMembers[0]?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} bg=\"$green800\" />\n </>\n )}\n </Avatar>\n <Text style={{ fontSize: 14, fontWeight: '400' }} color={'$coolGray800'}>\n {title}\n </Text>\n </HStack>\n </View>\n </TouchableOpacity>\n );\n }, []);\n\n return (\n <View style={styles.channelContainer}>\n <TouchableOpacity style={styles.headingContainer} onPress={() => setExpendableMessage(!expandableMessage)}>\n <HStack flex={1} alignItems={'center'} justifyContent={'space-between'}>\n <Text style={{ fontSize: 15, fontWeight: '600', color: 'black' }}>Direct Messages</Text>\n {expandableMessage ? (\n <MaterialIcons color={'black'} name={'keyboard-arrow-up'} size={20} />\n ) : (\n <MaterialIcons color={'black'} name={'keyboard-arrow-down'} size={20} />\n )}\n </HStack>\n </TouchableOpacity>\n {/* <TouchableOpacity style={styles.headingContainer} onPress={() => setExpendableMessage(!expandableMessage)}>\n <Text fontSize={15} fontWeight={600}>\n Direct Messages\n </Text>\n <Image alt={'more icon right'} style={styles.iconStyle} source={expandableMessage ? more : right} />\n </TouchableOpacity> */}\n {expandableMessage && (\n <FlatList\n py={'$2'}\n data={\n organizationDirectChannels && organizationDirectChannels?.length > 0\n ? organizationDirectChannels\n : []\n }\n renderItem={renderChannelMemebers}\n key={'direct-messages-key'}\n keyExtractor={(item, index) => String(index)}\n contentContainerStyle={{\n flex: 1,\n }}\n ListEmptyComponent={() => {\n return (\n <View py={'$1'}>\n {loading ? (\n <Spinner color={'$blue500'} />\n ) : (\n <Text color={'$coolGray600'}>No members found</Text>\n )}\n </View>\n );\n }}\n ListFooterComponent={() => {\n return (\n <>\n <TouchableOpacity\n onPress={() => navigation.navigate(NavigationRoutes.SearchAddChannel, { orgName })}\n >\n <View pr={'$10'} py={'$1'}>\n <HStack w={'100%'} space={'sm'} flex={1} alignItems={'center'}>\n <Avatar key={'direct-start-new-msg-key'} size={'sm'} bg={'transparent'}>\n <Icon\n as={AddIcon}\n style={{ width: '70%', height: '70%' }}\n color={'$coolGray600'}\n />\n </Avatar>\n <Text style={{ fontSize: 14, fontWeight: '400' }} color={'$coolGray800'}>\n Start a new message\n </Text>\n </HStack>\n </View>\n </TouchableOpacity>\n </>\n );\n }}\n />\n )}\n </View>\n );\n};\n\nexport default React.memo(DirectChannels);\n\n// -//last added//- const renderChannelMemebers = ({ item }: any) => {\n// const channelMembers =\n// item?.members\n// ?.filter((ch: any) => ch?.user?.id != user?.id && ch?.user?.__typename == 'UserAccount')\n// ?.map((m: any) => m?.user) ?? null;\n\n// let title =\n// channelMembers\n// ?.map((u: any) => u?.givenName + ' ' + u?.familyName ?? '')\n// ?.filter((mu: any) => mu)\n// ?.join(', ') ?? '';\n\n// return (\n// <TouchableOpacity key={item.id} onPress={() => openUserInbox(item.id, 'Inbox', item?.members)}>\n// <View style={{ paddingHorizontal: 20, paddingVertical: 4 }}>\n// <HStack w={'100%'} space={1} flex={1} alignItems={'center'}>\n// <Box flex={0.1} alignItems={'flex-start'}>\n// <Avatar.Group\n// _avatar={{\n// size: 'sm',\n// bg: 'transparent',\n// }}\n// >\n// {channelMembers &&\n// channelMembers?.length > 0 &&\n// channelMembers?.slice(0, 2)?.map((ch: any, i: Number) => (\n// <Avatar\n// key={'home-key' + i}\n// size={'sm'}\n// bg={'transparent'}\n// top={i == 1 ? 2 : 0}\n// zIndex={i == 1 ? 5 : 1}\n// _image={{\n// style: {\n// width: 25,\n// height: 25,\n// borderRadius: 6,\n// borderWidth: 2,\n// borderColor: '#fff',\n// },\n// }}\n// // _image={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n// source={{\n// uri: ch?.picture,\n// }}\n// >\n// {startCase(ch?.username?.charAt(0))}\n// {channelMembers?.length == 1 && (\n// <Avatar.Badge bg=\"green.800\" bottom={-4} right={-4} />\n// )}\n// </Avatar>\n// ))}\n// </Avatar.Group>\n// </Box>\n// <Box flex={0.9}>\n// <Text fontSize={16} fontWeight={400}>\n// {title}\n// </Text>\n// </Box>\n// </HStack>\n// </View>\n// </TouchableOpacity>\n// );\n// };\n\n// const renderChannelMemebers = ({ item }: any) => {\n// const title = item.givenName + ' ' + item.familyName;\n// const matches: any = title.match(/\\b(\\w)/g);\n// const acronym: any = matches.join('').substring(0, 2); // JSON\n// return (\n// <TouchableOpacity key={item.id} onPress={() => openUserInbox(item.channelID, title)}>\n// <View py={1}>\n// <HStack space={2} flex={1} alignItems={'center'}>\n// {/* <Image alt={acronym} source={{uri:item.picture}} w={6} h={6} /> */}\n// <Avatar\n// size={'sm'}\n// bg={'transparent'}\n// _image={{ style: { width: 25, height: 25, borderRadius: 6 } }}\n// source={{ uri: item.picture }}\n// >\n// {acronym}\n// <Avatar.Badge bg=\"green.800\" />\n// </Avatar>\n\n// <Text fontSize={16} fontWeight={400}>\n// {item.givenName} {item.familyName} {user.id == item.id ? '(you)' : ''}\n// </Text>\n// </HStack>\n// </View>\n// </TouchableOpacity>\n// );\n// };\n"],"names":["React","_a","ch","_b","_c"],"mappings":"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"}
1
+ {"version":3,"file":"DirectChannels.js","sources":["../../../../../src/screens/Home/Components/DirectChannels/DirectChannels.tsx"],"sourcesContent":["import { useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport React, { useState, useEffect, useCallback, useMemo, useRef, useContext } from 'react';\nimport { TouchableOpacity } from 'react-native';\nimport styles from '../../styles';\nimport {\n View,\n FlatList,\n HStack,\n Icon,\n Box,\n Text,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n AddIcon,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport { startCase, orderBy } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useAddDirectChannelMutation, GetChannelsByUserDocument } from '../../../../queries/slackuiQueries';\nimport { NavigationRoutes } from '../../../../constants';\nimport { MaterialIcons, Feather, FontAwesome } from '@expo/vector-icons';\nimport { useDrawerLayout } from '../../../../hooks';\nimport colors from 'tailwindcss/colors';\nimport { RefetchContext, ChannelsDataContext } from '../../HomeScreen';\nimport { gql } from '@apollo/client';\n\n// Define a type for the channel data\ninterface Channel {\n id: string;\n title: string;\n displayName: string;\n type: string;\n members: Array<{\n id: string;\n user: any;\n }>;\n}\n\ninterface ChannelsByUserData {\n channelsByUser: Channel[];\n}\n\nconst DirectChannels = () => {\n const navigation = useNavigation<any>();\n const [expandableMessage, setExpendableMessage] = useState(true);\n const user = useSelector(userSelector, shallowEqual);\n const isFocused = useIsFocused();\n const { orgName } = useDrawerLayout();\n const { shouldRefetch } = useContext(RefetchContext);\n\n // Use shared direct channels data from context instead of making separate query\n const { getDirectChannelsForHome, loading, error, refetchChannels, hasDirectChannels } =\n useContext(ChannelsDataContext);\n\n // Refs to avoid circular dependencies and track creation state\n const reFetchDirectChannelsRef = useRef<() => void>(() => {});\n const isCreatingDirectChannel = useRef(false);\n\n // GraphQL Mutations - keep this as it's specific to direct channels\n const [addDirectChannel] = useAddDirectChannelMutation({\n update: (cache, { data }) => {\n // Update the cache with the new channel\n try {\n if (data?.createDirectChannel) {\n // Use cache.modify instead of readQuery/writeQuery for better integration with type policies\n cache.modify({\n fields: {\n channelsByUser: (existingChannels = [], { readField, storeFieldName }) => {\n // Get variables from the storeFieldName to ensure we're modifying the correct query\n // Only do this if we can extract the correct variables from the storeFieldName\n if (!storeFieldName.includes(RoomType.Direct) || !storeFieldName.includes(orgName)) {\n return existingChannels;\n }\n\n // Check if the new channel already exists in the cache\n const newChannelRef = cache.writeFragment({\n data: data.createDirectChannel,\n fragment: gql`\n fragment NewChannel on Channel {\n id\n }\n `,\n });\n\n // Check if this channel already exists\n const channelExists = existingChannels.some(\n (channelRef) => readField('id', channelRef) === data.createDirectChannel.id,\n );\n\n // Only add the channel if it doesn't already exist\n if (!channelExists) {\n return [newChannelRef, ...existingChannels];\n }\n\n return existingChannels;\n },\n },\n });\n }\n } catch (err) {\n console.error('Error updating cache after adding direct channel:', err);\n }\n },\n optimisticResponse: (variables) => {\n // Create an optimistic response that mimics the expected server response\n return {\n __typename: 'Mutation',\n createDirectChannel: {\n __typename: 'Channel',\n id: `temp-id-${Date.now()}`, // Temporary ID that will be replaced when the server responds\n title: 'DIRECT CHANNEL',\n displayName: 'DIRECT CHANNEL',\n type: RoomType.Direct,\n members: [\n {\n __typename: 'ChannelMember',\n id: `temp-member-${Date.now()}`,\n user: {\n __typename: 'User',\n id: user?.id,\n givenName: user?.givenName || user?.username || 'You',\n username: user?.username,\n picture: user?.picture,\n },\n },\n ],\n },\n };\n },\n onCompleted: () => {\n // Reset the creation flag when successfully completed\n isCreatingDirectChannel.current = false;\n },\n onError: (error) => {\n // Reset the creation flag on error and only log if it's not a \"channel already exists\" error\n isCreatingDirectChannel.current = false;\n if (!error.message.includes('Channel already exists')) {\n console.error('Failed to create direct channel:', error.message);\n }\n },\n });\n\n // Get direct channels with home-specific limit (20 channels)\n const organizationDirectChannels = useMemo(() => {\n return getDirectChannelsForHome(20);\n }, [getDirectChannelsForHome]);\n\n // Check and create self-DM channel if needed\n const checkAndCreateSelfDM = useCallback(() => {\n if (!user?.id || isCreatingDirectChannel.current || loading) {\n return;\n }\n\n const directChannelsData = getDirectChannelsForHome(20);\n if (directChannelsData) {\n const selfDMChannels = directChannelsData.filter(\n (channel) => channel.members.length === 1 && channel.members[0]?.user?.id === user?.id,\n );\n\n // Only create if no self-DM channel exists and we're not already creating one\n if (selfDMChannels.length === 0 && !isCreatingDirectChannel.current) {\n isCreatingDirectChannel.current = true;\n addDirectChannel({\n variables: {\n receiver: [user.id],\n displayName: 'DIRECT CHANNEL',\n channelOptions: { schemeAdmin: true },\n },\n });\n }\n }\n }, [user?.id, loading, getDirectChannelsForHome, addDirectChannel]);\n\n // Initialize reFetchDirectChannels function\n const reFetchDirectChannels = useCallback(() => {\n if (orgName) {\n refetchChannels();\n }\n }, [orgName, refetchChannels]);\n\n // Check for self-DM channel when data changes (with debouncing)\n useEffect(() => {\n if (!loading && organizationDirectChannels !== undefined) {\n const timer = setTimeout(checkAndCreateSelfDM, 500); // Increased delay for stability\n return () => clearTimeout(timer);\n }\n }, [organizationDirectChannels, loading, checkAndCreateSelfDM]);\n\n // Set ref for future calls\n useEffect(() => {\n reFetchDirectChannelsRef.current = reFetchDirectChannels;\n }, [reFetchDirectChannels]);\n\n // Use RefetchContext to control when to refetch data (less aggressive)\n useEffect(() => {\n if (shouldRefetch && orgName && !isCreatingDirectChannel.current) {\n reFetchDirectChannels();\n }\n }, [shouldRefetch, orgName, reFetchDirectChannels]);\n\n // Focus effect to fetch data when screen is focused (less aggressive)\n useFocusEffect(\n useCallback(() => {\n if (orgName && !isCreatingDirectChannel.current) {\n reFetchDirectChannels();\n }\n }, [orgName, reFetchDirectChannels]),\n );\n\n const openInbox = useCallback(\n (id: any, title: any, totalMembers: any, type?: any) => {\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: id?.toString(),\n title: title?.toString(),\n totalMembers: totalMembers,\n channelType: type,\n orgName: orgName,\n hideTabBar: true,\n });\n },\n [orgName, navigation],\n );\n\n const renderDirectChannelItem = useCallback(\n ({ item }) => {\n const isSelfDM = item.members?.length === 1 && item.members?.[0]?.user?.id === user?.id;\n\n const member =\n item.members?.filter((m: any) => m?.user?.id !== user?.id)?.[0]?.user || item.members?.[0]?.user;\n\n const getUserName = () => {\n if (isSelfDM) {\n return user?.profile?.name || user?.profile?.nickname || 'You';\n }\n\n return (\n member?.givenName + ' ' + member?.familyName || member?.givenName || member?.username || 'Unknown'\n );\n };\n\n return (\n <TouchableOpacity\n onPress={() => openInbox(item.id, getUserName(), item.members?.length, item.type)}\n style={{ paddingVertical: 2, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <Avatar\n size=\"xs\"\n className=\"rounded-md\"\n style={{ backgroundColor: getUserAvatarColor(getUserName()) }}\n >\n <AvatarFallbackText>{getUserName()}</AvatarFallbackText>\n {member?.picture && (\n <AvatarImage\n className=\"rounded-md\"\n source={{ uri: member.picture }}\n alt={getUserName()}\n />\n )}\n </Avatar>\n <Text className=\"text-gray-900 flex-1 text-base\">\n {getUserName()}\n {isSelfDM && ' (you)'}\n </Text>\n </HStack>\n </TouchableOpacity>\n );\n },\n [user, openInbox],\n );\n\n const getUserAvatarColor = (name: string) => {\n const colorOptions = [\n '#E57373', // Red\n '#F06292', // Pink\n '#BA68C8', // Purple\n '#9575CD', // Deep Purple\n '#7986CB', // Indigo\n '#64B5F6', // Blue\n '#4FC3F7', // Light Blue\n '#4DD0E1', // Cyan\n '#4DB6AC', // Teal\n '#81C784', // Green\n '#AED581', // Light Green\n '#DCE775', // Lime\n '#FFD54F', // Amber\n '#FFB74D', // Orange\n '#FF8A65', // Deep Orange\n ];\n\n // Simple hash function to map names to consistent colors\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n hash = Math.abs(hash);\n return colorOptions[hash % colorOptions.length];\n };\n\n const ListEmptyComponent = useCallback(() => {\n return (\n <Box style={{ padding: 12 }}>\n {error ? (\n <Box style={{ padding: 8, backgroundColor: '#FFF4F4', borderRadius: 4 }}>\n <Text color=\"#E01E5A\" style={{ marginBottom: 8, fontWeight: '500' }}>\n {error.message.includes(\"Service 'ChannelService.getAll' is not found\")\n ? 'Direct messages are temporarily unavailable. Please try again later.'\n : error.message}\n </Text>\n <TouchableOpacity onPress={reFetchDirectChannels}>\n <HStack space=\"sm\" style={{ alignItems: 'center' }}>\n <Feather name=\"refresh-cw\" color=\"#1264A3\" size={16} />\n <Text color=\"#1264A3\" style={{ fontWeight: '500' }}>\n Retry\n </Text>\n </HStack>\n </TouchableOpacity>\n </Box>\n ) : loading ? (\n <Box style={{ alignItems: 'center', paddingVertical: 16 }}>\n <Text style={{ color: '#616061' }}>Loading...</Text>\n </Box>\n ) : (\n <Box style={{ alignItems: 'center', paddingVertical: 16 }}>\n <Box style={{ padding: 12, marginBottom: 8, borderRadius: 24, backgroundColor: '#F8F8F8' }}>\n <MaterialIcons name=\"person-outline\" color=\"#616061\" size={20} />\n </Box>\n <Text style={{ color: '#616061', textAlign: 'center' }}>No direct messages yet</Text>\n </Box>\n )}\n </Box>\n );\n }, [error, loading, reFetchDirectChannels]);\n\n const ListFooterComponent = useCallback(() => {\n return (\n <TouchableOpacity\n // onPress={() => navigation.navigate(NavigationRoutes.AddPeople, { orgName })}\n onPress={() => navigation.navigate(NavigationRoutes.SearchAddChannel, { orgName })}\n style={{ paddingVertical: 6, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <Feather color=\"#616061\" name=\"plus\" size={18} />\n <Text style={{ fontSize: 16, color: '#616061' }}>Start a new message</Text>\n </HStack>\n </TouchableOpacity>\n );\n }, [orgName, navigation]);\n\n const SectionHeader = useCallback(() => {\n return (\n <TouchableOpacity\n onPress={() => setExpendableMessage(!expandableMessage)}\n style={{ paddingVertical: 6, paddingHorizontal: 16 }}\n >\n <HStack className=\"justify-between items-center\">\n <Text className=\"font-semibold\" style={{ fontSize: 15, color: '#1D1C1D' }}>\n Direct Messages\n </Text>\n <FontAwesome\n name={expandableMessage ? 'chevron-down' : 'chevron-left'}\n color={colors.gray[800]}\n size={12}\n />\n </HStack>\n </TouchableOpacity>\n );\n }, [expandableMessage]);\n\n if (!expandableMessage) {\n return <SectionHeader />;\n }\n\n return (\n <Box>\n <SectionHeader />\n {organizationDirectChannels?.length > 0 ? (\n <FlatList\n keyExtractor={(item) => (item?.id || 'direct') + '-' + item?.title}\n data={organizationDirectChannels}\n renderItem={renderDirectChannelItem}\n ListFooterComponent={ListFooterComponent}\n style={{ marginTop: 6 }}\n scrollEnabled={false}\n />\n ) : (\n <Box>\n <ListEmptyComponent />\n <ListFooterComponent />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default DirectChannels;\n"],"names":["error","_a","_b","React"],"mappings":"8pCAgCA,MAAM,iBAAiB,MAAM;AAC3B,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAS,IAAI,CAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,WAAY,CAAA,YAAA,EAAc,YAAY,CAAA;AACnD,EAAkB,YAAa;AAC/B,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,eAAgB,EAAA;AACpB,EAAM,MAAA;AAAA,IACJ;AAAA,GACF,GAAI,WAAW,cAAc,CAAA;AAG7B,EAAM,MAAA;AAAA,IACJ,wBAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,mBAAmB,CAAA;AAGlC,EAAM,MAAA,wBAAA,GAA2B,OAAmB,MAAM;AAAA,GAAE,CAAA;AAC5D,EAAM,MAAA,uBAAA,GAA0B,OAAO,KAAK,CAAA;AAG5C,EAAM,MAAA,CAAC,gBAAgB,CAAA,GAAI,2BAA4B,CAAA;AAAA,IACrD,MAAA,EAAQ,CAAC,KAAO,EAAA;AAAA,MACd;AAAA,KACI,KAAA;AAEJ,MAAI,IAAA;AACF,QAAA,IAAI,6BAAM,mBAAqB,EAAA;AAE7B,UAAA,KAAA,CAAM,MAAO,CAAA;AAAA,YACX,MAAQ,EAAA;AAAA,cACN,cAAgB,EAAA,CAAC,gBAAmB,GAAA,EAAI,EAAA;AAAA,gBACtC,SAAA;AAAA,gBACA;AAAA,eACI,KAAA;AAGJ,gBAAI,IAAA,CAAC,cAAe,CAAA,QAAA,CAAS,QAAS,CAAA,MAAM,KAAK,CAAC,cAAA,CAAe,QAAS,CAAA,OAAO,CAAG,EAAA;AAClF,kBAAO,OAAA,gBAAA;AAAA;AAIT,gBAAM,MAAA,aAAA,GAAgB,MAAM,aAAc,CAAA;AAAA,kBACxC,MAAM,IAAK,CAAA,mBAAA;AAAA,kBACX,QAAU,EAAA,GAAA;AAAA;AAAA;AAAA;AAAA,oCAAA;AAAA,iBAKX,CAAA;AAGD,gBAAM,MAAA,aAAA,GAAgB,gBAAiB,CAAA,IAAA,CAAK,CAAc,UAAA,KAAA,SAAA,CAAU,MAAM,UAAU,CAAA,KAAM,IAAK,CAAA,mBAAA,CAAoB,EAAE,CAAA;AAGrH,gBAAA,IAAI,CAAC,aAAe,EAAA;AAClB,kBAAO,OAAA,CAAC,aAAe,EAAA,GAAG,gBAAgB,CAAA;AAAA;AAE5C,gBAAO,OAAA,gBAAA;AAAA;AACT;AACF,WACD,CAAA;AAAA;AACH,eACO,GAAP,EAAA;AACA,QAAQ,OAAA,CAAA,KAAA,CAAM,qDAAqD,GAAG,CAAA;AAAA;AACxE,KACF;AAAA,IACA,oBAAoB,CAAa,SAAA,KAAA;AAE/B,MAAO,OAAA;AAAA,QACL,UAAY,EAAA,UAAA;AAAA,QACZ,mBAAqB,EAAA;AAAA,UACnB,UAAY,EAAA,SAAA;AAAA,UACZ,EAAA,EAAI,CAAW,QAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA;AAAA,UAExB,KAAO,EAAA,gBAAA;AAAA,UACP,WAAa,EAAA,gBAAA;AAAA,UACb,MAAM,QAAS,CAAA,MAAA;AAAA,UACf,SAAS,CAAC;AAAA,YACR,UAAY,EAAA,eAAA;AAAA,YACZ,EAAA,EAAI,CAAe,YAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA;AAAA,YAC5B,IAAM,EAAA;AAAA,cACJ,UAAY,EAAA,MAAA;AAAA,cACZ,IAAI,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA;AAAA,cACV,SAAW,EAAA,CAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAa,MAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAY,CAAA,IAAA,KAAA;AAAA,cAChD,UAAU,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,QAAA;AAAA,cAChB,SAAS,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA;AAAA;AACjB,WACD;AAAA;AACH,OACF;AAAA,KACF;AAAA,IACA,aAAa,MAAM;AAEjB,MAAA,uBAAA,CAAwB,OAAU,GAAA,KAAA;AAAA,KACpC;AAAA,IACA,OAAA,EAAS,CAAAA,MAAS,KAAA;AAEhB,MAAA,uBAAA,CAAwB,OAAU,GAAA,KAAA;AAClC,MAAA,IAAI,CAACA,MAAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,wBAAwB,CAAG,EAAA;AACrD,QAAQ,OAAA,CAAA,KAAA,CAAM,kCAAoCA,EAAAA,MAAAA,CAAM,OAAO,CAAA;AAAA;AACjE;AACF,GACD,CAAA;AAGD,EAAM,MAAA,0BAAA,GAA6B,QAAQ,MAAM;AAC/C,IAAA,OAAO,yBAAyB,EAAE,CAAA;AAAA,GACpC,EAAG,CAAC,wBAAwB,CAAC,CAAA;AAG7B,EAAM,MAAA,oBAAA,GAAuB,YAAY,MAAM;AAC7C,IAAA,IAAI,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,EAAM,CAAA,IAAA,uBAAA,CAAwB,WAAW,OAAS,EAAA;AAC3D,MAAA;AAAA;AAEF,IAAM,MAAA,kBAAA,GAAqB,yBAAyB,EAAE,CAAA;AACtD,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAM,MAAA,cAAA,GAAiB,kBAAmB,CAAA,MAAA,CAAO,CAAQ,OAAA,KAAA;AA1J/D,QAAA,IAAA,EAAA,EAAA,EAAA;AA0JkE,QAAQ,OAAA,OAAA,CAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,IAAA,CAAA,CAAK,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,OAAA,CAAQ,OAAhB,IAAoB,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,KAApB,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,EAAA,OAAO,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,CAAA;AAAA,OAAE,CAAA;AAGrI,MAAA,IAAI,cAAe,CAAA,MAAA,KAAW,CAAK,IAAA,CAAC,wBAAwB,OAAS,EAAA;AACnE,QAAA,uBAAA,CAAwB,OAAU,GAAA,IAAA;AAClC,QAAiB,gBAAA,CAAA;AAAA,UACf,SAAW,EAAA;AAAA,YACT,QAAA,EAAU,CAAC,IAAA,CAAK,EAAE,CAAA;AAAA,YAClB,WAAa,EAAA,gBAAA;AAAA,YACb,cAAgB,EAAA;AAAA,cACd,WAAa,EAAA;AAAA;AACf;AACF,SACD,CAAA;AAAA;AACH;AACF,KACC,CAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,OAAS,EAAA,wBAAA,EAA0B,gBAAgB,CAAC,CAAA;AAGlE,EAAM,MAAA,qBAAA,GAAwB,YAAY,MAAM;AAC9C,IAAA,IAAI,OAAS,EAAA;AACX,MAAgB,eAAA,EAAA;AAAA;AAClB,GACC,EAAA,CAAC,OAAS,EAAA,eAAe,CAAC,CAAA;AAG7B,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,OAAW,IAAA,0BAAA,KAA+B,MAAW,EAAA;AACxD,MAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,oBAAA,EAAsB,GAAG,CAAA;AAClD,MAAO,OAAA,MAAM,aAAa,KAAK,CAAA;AAAA;AACjC,GACC,EAAA,CAAC,0BAA4B,EAAA,OAAA,EAAS,oBAAoB,CAAC,CAAA;AAG9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,wBAAA,CAAyB,OAAU,GAAA,qBAAA;AAAA,GACrC,EAAG,CAAC,qBAAqB,CAAC,CAAA;AAG1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAiB,IAAA,OAAA,IAAW,CAAC,uBAAA,CAAwB,OAAS,EAAA;AAChE,MAAsB,qBAAA,EAAA;AAAA;AACxB,GACC,EAAA,CAAC,aAAe,EAAA,OAAA,EAAS,qBAAqB,CAAC,CAAA;AAGlD,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAI,IAAA,OAAA,IAAW,CAAC,uBAAA,CAAwB,OAAS,EAAA;AAC/C,MAAsB,qBAAA,EAAA;AAAA;AACxB,GACC,EAAA,CAAC,OAAS,EAAA,qBAAqB,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,YAAY,WAAY,CAAA,CAAC,EAAS,EAAA,KAAA,EAAY,cAAmB,IAAe,KAAA;AACpF,IAAW,UAAA,CAAA,QAAA,CAAS,iBAAiB,cAAgB,EAAA;AAAA,MACnD,WAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,EAAA;AAAA,MACf,OAAO,KAAO,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAA,QAAA,EAAA;AAAA,MACd,YAAA;AAAA,MACA,WAAa,EAAA,IAAA;AAAA,MACb,OAAA;AAAA,MACA,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,UAAU,CAAC,CAAA;AACxB,EAAM,MAAA,uBAAA,GAA0B,YAAY,CAAC;AAAA,IAC3C;AAAA,GACI,KAAA;AAzNR,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0NI,IAAA,MAAM,QAAW,GAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,YAAW,CAAK,IAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,CAAf,CAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,IAAnB,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,SAAO,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,CAAA;AACrF,IAAA,MAAM,WAAS,EAAK,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,OAAA,KAAL,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,CAAO,CAAC,CAAQ,KAAA;AA3NjD,MAAAC,IAAAA,GAAAA;AA2NoD,MAAA,OAAA,CAAA,CAAAA,MAAA,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,IAAA,KAAH,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAS,SAAO,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,CAAA;AAAA,KAAvD,CAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAA6D,OAA7D,IAAiE,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAA,CAAQ,gBAAK,OAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAf,IAAmB,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA;AAC3G,IAAA,MAAM,cAAc,MAAM;AA5N9B,MAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA6NM,MAAA,IAAI,QAAU,EAAA;AACZ,QAAOD,OAAAA,CAAAA,CAAAA,GAAAA,GAAA,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,OAAA,KAAN,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAe,IAAQC,MAAAA,CAAAA,GAAAA,GAAA,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,OAAA,KAAN,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAe,QAAY,CAAA,IAAA,KAAA;AAAA;AAE3D,MAAO,OAAA,CAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,aAAY,GAAM,IAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,gBAAc,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,SAAA,CAAA,KAAa,iCAAQ,QAAY,CAAA,IAAA,SAAA;AAAA,KAClG;AACA,IAAO,uBAAAC,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,MAAG;AAlOzC,MAAAF,IAAAA,GAAAA;AAkO4C,MAAU,OAAA,SAAA,CAAA,IAAA,CAAK,EAAI,EAAA,WAAA,EAAeA,EAAAA,CAAAA,GAAAA,GAAA,IAAK,CAAA,OAAA,KAAL,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAc,MAAQ,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,KAAA,EAAG,KAAO,EAAA;AAAA,MACjH,eAAiB,EAAA,CAAA;AAAA,MACjB,iBAAmB,EAAA;AAAA,KAEL,EAAA,kBAAAE,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,KAAA,EAAM,IAAK,EAAA,SAAA,EAAU,cACzB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,IAAA,EAAK,IAAK,EAAA,SAAA,EAAU,cAAa,KAAO,EAAA;AAAA,MAC9D,eAAA,EAAiB,kBAAmB,CAAA,WAAA,EAAa;AAAA,KAE/B,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,kBAAoB,EAAA,IAAA,EAAA,WAAA,EAAc,CAAA,EAAA,CAClC,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,OAAA,qBAAYA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,SAAU,EAAA,YAAA,EAAa,MAAQ,EAAA;AAAA,MAChF,KAAK,MAAO,CAAA;AAAA,KACX,EAAA,GAAA,EAAK,WAAY,EAAA,EAAG,CACT,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,oCACX,WAAY,EAAA,EACZ,QAAY,IAAA,QACjB,CACJ,CACJ,CAAA;AAAA,GACX,EAAA,CAAC,IAAM,EAAA,SAAS,CAAC,CAAA;AACpB,EAAM,MAAA,kBAAA,GAAqB,CAAC,IAAiB,KAAA;AAC3C,IAAA,MAAM,YAAe,GAAA;AAAA,MAAC,SAAA;AAAA,MAEtB,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA,SAAA;AAAA,MAEA;AAAA,KACA;AAGA,IAAA,IAAI,IAAO,GAAA,CAAA;AACX,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,IAAA,CAAM,QAAQ,CAAK,IAAA,IAAA,CAAA;AAAA;AAE7C,IAAO,IAAA,GAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACpB,IAAO,OAAA,YAAA,CAAa,OAAO,YAAa,CAAA,MAAA,CAAA;AAAA,GAC1C;AACA,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA;AAAA,MACjB,OAAS,EAAA;AAAA,KAEE,EAAA,EAAA,KAAA,mBAASA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,KAAO,EAAA;AAAA,MAC7B,OAAS,EAAA,CAAA;AAAA,MACT,eAAiB,EAAA,SAAA;AAAA,MACjB,YAAc,EAAA;AAAA,KAEE,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAM,WAAU,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,CAAA;AAAA,MACd,UAAY,EAAA;AAAA,SAEO,KAAM,CAAA,OAAA,CAAQ,SAAS,8CAA8C,CAAA,GAAI,yEAAyE,KAAM,CAAA,OAC7J,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAS,EAAA,qBAAA,EAAA,+CACtB,MAAO,EAAA,EAAA,KAAA,EAAM,MAAK,KAAO,EAAA;AAAA,MAC1C,UAAY,EAAA;AAAA,KAEQ,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,IAAA,EAAK,cAAa,KAAM,EAAA,SAAA,EAAU,IAAM,EAAA,EAAA,EAAI,CACrD,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAM,WAAU,KAAO,EAAA;AAAA,MAC/C,UAAY,EAAA;AAAA,KACd,EAAA,EAAG,OAEiB,CACJ,CACJ,CACJ,CAAS,GAAA,OAAA,mBAAWA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,KAAO,EAAA;AAAA,MAC3C,UAAY,EAAA,QAAA;AAAA,MACZ,eAAiB,EAAA;AAAA,KACnB,EAAA,kBACmBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA;AAAA,MAC3B,KAAO,EAAA;AAAA,SACN,YAAU,CACD,CAAS,mBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA;AAAA,MACjC,UAAY,EAAA,QAAA;AAAA,MACZ,eAAiB,EAAA;AAAA,KACnB,EAAA,kBACmBA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,KAAO,EAAA;AAAA,MAC1B,OAAS,EAAA,EAAA;AAAA,MACT,YAAc,EAAA,CAAA;AAAA,MACd,YAAc,EAAA,EAAA;AAAA,MACd,eAAiB,EAAA;AAAA,KAEC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,IAAA,EAAK,gBAAiB,EAAA,KAAA,EAAM,SAAU,EAAA,IAAA,EAAM,EAAI,EAAA,CACnE,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA;AAAA,MAC3B,KAAO,EAAA,SAAA;AAAA,MACP,SAAW,EAAA;AAAA,KACb,EAAA,EAAG,wBAAsB,CACb,CACR,CAAA;AAAA,GACP,EAAA,CAAC,KAAO,EAAA,OAAA,EAAS,qBAAqB,CAAC,CAAA;AAC1C,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAO,uBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAER,OAAS,EAAA,MAAM,UAAW,CAAA,QAAA,CAAS,iBAAiB,gBAAkB,EAAA;AAAA,UACpE;AAAA,SACD,CAAA;AAAA,QAAG,KAAO,EAAA;AAAA,UACT,eAAiB,EAAA,CAAA;AAAA,UACjB,iBAAmB,EAAA;AAAA;AACrB,OAAA;AAAA,mDACa,MAAO,EAAA,EAAA,KAAA,EAAM,IAAK,EAAA,SAAA,EAAU,kCACxBA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAM,EAAA,SAAA,EAAU,MAAK,MAAO,EAAA,IAAA,EAAM,IAAI,CAC/C,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA;AAAA,QACvB,QAAU,EAAA,EAAA;AAAA,QACV,KAAO,EAAA;AAAA,OACT,EAAA,EAAG,qBAAmB,CACd;AAAA,KACJ;AAAA,GACP,EAAA,CAAC,OAAS,EAAA,UAAU,CAAC,CAAA;AACxB,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAS,EAAA,MAAM,qBAAqB,CAAC,iBAAiB,GAAG,KAAO,EAAA;AAAA,MACvF,eAAiB,EAAA,CAAA;AAAA,MACjB,iBAAmB,EAAA;AAAA,KACrB,EAAA,+CACa,MAAO,EAAA,EAAA,SAAA,EAAU,kDACbA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,eAAA,EAAgB,KAAO,EAAA;AAAA,MACjD,QAAU,EAAA,EAAA;AAAA,MACV,KAAO,EAAA;AAAA,SACN,iBAES,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,MAAM,iBAAoB,GAAA,cAAA,GAAiB,cAAgB,EAAA,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA,EAAM,IAAM,EAAA,EAAA,EAAI,CAC/G,CACJ,CAAA;AAAA,GACV,EAAG,CAAC,iBAAiB,CAAC,CAAA;AACtB,EAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,IAAA,oDAAQ,aAAc,EAAA,IAAA,CAAA;AAAA;AAExB,EAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,2BACGA,cAAA,CAAA,aAAA,CAAA,aAAA,EAAA,IAAc,IACd,0BAA4B,IAAA,IAAA,GAAA,MAAA,GAAA,0BAAA,CAAA,MAAA,IAAS,CAAI,mBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,YAAA,EAAc,YAAS,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,KAAM,QAAY,IAAA,GAAA,IAAM,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,EAAO,MAAM,0BAA4B,EAAA,UAAA,EAAY,uBAAyB,EAAA,mBAAA,EAA0C,KAAO,EAAA;AAAA,IACpP,SAAW,EAAA;AAAA,GACV,EAAA,aAAA,EAAe,KAAO,EAAA,CAAA,mBAAMA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,kBACdA,cAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,IAAmB,CACpB,kBAAAA,cAAA,CAAA,aAAA,CAAC,mBAAoB,EAAA,IAAA,CACzB,CACR,CAAA;AACR"}