@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,4 +1,4 @@
1
- import React__default,{useEffect}from'react';import {Share,Alert,Dimensions}from'react-native';import {Button,ButtonText,SafeAreaView,Box,VStack,Heading,Text}from'@admin-layout/gluestack-ui-mobile';import {NavigationRoutes}from'../../constants/routes.js';import {useSelector}from'react-redux';import {userSelector}from'@adminide-stack/user-auth0-client';import {useNavigation,useFocusEffect}from'@react-navigation/native';import {Ionicons,AntDesign,MaterialCommunityIcons}from'@expo/vector-icons';Dimensions.get("window").width;
1
+ import React__default,{useEffect}from'react';import {Share,Alert,SafeAreaView,Dimensions}from'react-native';import {useToast,Button,ButtonText,Box,VStack,Heading,Text,Toast,ToastTitle,ToastDescription}from'@admin-layout/gluestack-ui-mobile';import {useOrganizationSharableLinkQuery,useSendOrganizationInvitationMutation}from'../../queries/slackuiQueries.js';import {NavigationRoutes}from'../../constants/routes.js';import {useSelector}from'react-redux';import {userSelector}from'@adminide-stack/user-auth0-client';import {useNavigation,useFocusEffect}from'@react-navigation/native';import {Ionicons,AntDesign,MaterialCommunityIcons}from'@expo/vector-icons';Dimensions.get("window").width;
2
2
  Dimensions.get("window").height;
3
3
  const InviteOrganizationMembers = ({
4
4
  route
@@ -6,6 +6,36 @@ const InviteOrganizationMembers = ({
6
6
  var _a;
7
7
  const navigation = useNavigation();
8
8
  useSelector(userSelector);
9
+ const toast = useToast();
10
+ const orgName = (_a = route == null ? void 0 : route.params) == null ? void 0 : _a.orgName;
11
+ const {
12
+ data: orgLinkData,
13
+ loading: orgLinkLoading
14
+ } = useOrganizationSharableLinkQuery(orgName);
15
+ const [sendInvitation, {
16
+ loading: sendingInvitation
17
+ }] = useSendOrganizationInvitationMutation({
18
+ onCompleted: (data) => {
19
+ toast.show({
20
+ placement: "top",
21
+ render: ({
22
+ id
23
+ }) => {
24
+ return /* @__PURE__ */ React__default.createElement(Toast, { nativeID: id, action: "success", variant: "solid" }, /* @__PURE__ */ React__default.createElement(VStack, { space: "xs" }, /* @__PURE__ */ React__default.createElement(ToastTitle, null, "Success"), /* @__PURE__ */ React__default.createElement(ToastDescription, null, "Invitation sent successfully")));
25
+ }
26
+ });
27
+ },
28
+ onError: (error) => {
29
+ toast.show({
30
+ placement: "top",
31
+ render: ({
32
+ id
33
+ }) => {
34
+ return /* @__PURE__ */ React__default.createElement(Toast, { nativeID: id, action: "error", variant: "solid" }, /* @__PURE__ */ React__default.createElement(VStack, { space: "xs" }, /* @__PURE__ */ React__default.createElement(ToastTitle, null, "Error"), /* @__PURE__ */ React__default.createElement(ToastDescription, null, error.message)));
35
+ }
36
+ });
37
+ }
38
+ });
9
39
  useFocusEffect(React__default.useCallback(() => {
10
40
  return () => {
11
41
  };
@@ -14,18 +44,16 @@ const InviteOrganizationMembers = ({
14
44
  if (navigation)
15
45
  navigation.setOptions({
16
46
  headerTintColor: "#1d1c1d",
17
- headerRight: (props) => /* @__PURE__ */ React__default.createElement(Button, { mr: "$2", onPress: () => {
18
- var _a2;
19
- return navigation.navigate(NavigationRoutes.InitializeOrganizationChannel, {
20
- orgName: (_a2 = route == null ? void 0 : route.params) == null ? void 0 : _a2.orgName
21
- });
22
- }, variant: "link" }, /* @__PURE__ */ React__default.createElement(ButtonText, { color: "$black" }, "SKIP"))
47
+ headerRight: (props) => /* @__PURE__ */ React__default.createElement(Button, { className: "mr-2", onPress: () => navigation.navigate(NavigationRoutes.InitializeOrganizationChannel, {
48
+ orgName
49
+ }), variant: "link" }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: "text-black" }, "SKIP"))
23
50
  });
24
51
  }, [navigation]);
25
52
  const shareLink = React__default.useCallback(async () => {
26
53
  try {
54
+ const shareMessage = (orgLinkData == null ? void 0 : orgLinkData.getOrganizationSharableLink) || "CDMBSE | Messenger App";
27
55
  const result = await Share.share({
28
- message: "CDMBSE | Messenger App"
56
+ message: shareMessage
29
57
  });
30
58
  if (result.action === Share.sharedAction) {
31
59
  if (result.activityType) {
@@ -36,6 +64,20 @@ const InviteOrganizationMembers = ({
36
64
  } catch (error) {
37
65
  Alert.alert(error.message);
38
66
  }
39
- }, []);
40
- return /* @__PURE__ */ React__default.createElement(SafeAreaView, { flex: 1 }, /* @__PURE__ */ React__default.createElement(Box, { borderTopColor: "$blue600", borderTopWidth: "$1", w: "50%" }), /* @__PURE__ */ React__default.createElement(Box, { flex: 1, bg: "$white" }, /* @__PURE__ */ React__default.createElement(VStack, { space: "lg", py: "$10", px: "$4" }, /* @__PURE__ */ React__default.createElement(Heading, { px: "$4", alignItems: "center", textAlign: "center" }, "Who else is on the ", (_a = route == null ? void 0 : route.params) == null ? void 0 : _a.orgName, " team?"), /* @__PURE__ */ React__default.createElement(Text, { textAlign: "center", fontSize: 15 }, "Invite your teammates to Workspace."), /* @__PURE__ */ React__default.createElement(Button, { my: "$1", size: "md", variant: "solid", onPress: async () => await shareLink(), bg: "$green800", "$pressed-bg": "$green600", "$active-bg": "$green600" }, /* @__PURE__ */ React__default.createElement(Ionicons, { color: "white", name: "share-outline", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { ml: "$2", color: "$white", fontWeight: "$bold" }, "Share a Link")), /* @__PURE__ */ React__default.createElement(Button, { my: "$1", size: "md", bg: "$white", "$pressed-bg": "$trueGray200", "$active-bg": "$trueGray200", borderColor: "$trueGray400", variant: "outline" }, /* @__PURE__ */ React__default.createElement(AntDesign, { color: "black", name: "adduser", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { ml: "$2", fontWeight: "$bold", color: "$black" }, "Add from Contacts")), /* @__PURE__ */ React__default.createElement(Button, { my: "$1", size: "md", bg: "$white", "$pressed-bg": "$trueGray200", "$active-bg": "$trueGray200", borderColor: "$trueGray400", variant: "outline", onPress: () => navigation.navigate(NavigationRoutes.AddPeopleByEmail) }, /* @__PURE__ */ React__default.createElement(MaterialCommunityIcons, { color: "black", name: "email-outline", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { ml: "$2", fontWeight: "$bold", color: "$black" }, "Add by Email")))));
67
+ }, [orgLinkData]);
68
+ return /* @__PURE__ */ React__default.createElement(SafeAreaView, { style: {
69
+ flex: 1
70
+ } }, /* @__PURE__ */ React__default.createElement(Box, { className: "border-t-blue-600 border-t w-[50%]" }), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1 bg-white" }, /* @__PURE__ */ React__default.createElement(VStack, { space: "lg", className: "py-10 px-4" }, /* @__PURE__ */ React__default.createElement(Heading, { className: "px-4 items-center text-center" }, "Who else is on the ", orgName, " team?"), /* @__PURE__ */ React__default.createElement(Text, { className: "text-center text-[15]" }, "Invite your teammates to Workspace."), /* @__PURE__ */ React__default.createElement(Button, { size: "md", variant: "solid", onPress: async () => await shareLink(), className: "my-1 bg-green-800 active:bg-green-600 hover:bg-green-600", isDisabled: orgLinkLoading }, /* @__PURE__ */ React__default.createElement(Ionicons, { color: "white", name: "share-outline", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { className: "ml-2 font-bold text-white" }, "Share a Link")), /* @__PURE__ */ React__default.createElement(Button, { size: "md", variant: "outline", className: "my-1 bg-white border-gray-400 active:bg-gray-200 hover:bg-gray-200" }, /* @__PURE__ */ React__default.createElement(AntDesign, { color: "black", name: "adduser", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { className: "ml-2 font-bold text-black" }, "Add from Contacts")), /* @__PURE__ */ React__default.createElement(Button, { size: "md", className: "my-1 bg-white border-gray-400 active:bg-gray-200 hover:bg-gray-200", variant: "outline", onPress: () => navigation.navigate(NavigationRoutes.AddPeopleByEmail, {
71
+ orgName,
72
+ sendInvitation: (email) => {
73
+ sendInvitation({
74
+ variables: {
75
+ request: {
76
+ orgName,
77
+ emails: [email]
78
+ }
79
+ }
80
+ });
81
+ }
82
+ }) }, /* @__PURE__ */ React__default.createElement(MaterialCommunityIcons, { color: "black", name: "email-outline", size: 20 }), /* @__PURE__ */ React__default.createElement(ButtonText, { className: "ml-2 font-bold text-black" }, "Add by Email")))));
41
83
  };export{InviteOrganizationMembers as default};//# sourceMappingURL=InviteOrganizationMembers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InviteOrganizationMembers.js","sources":["../../../src/screens/Organization/InviteOrganizationMembers.tsx"],"sourcesContent":["import React, { useState, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { StyleSheet, TouchableOpacity, Dimensions, Share, Alert } from 'react-native';\nimport {\n SafeAreaView,\n Text,\n VStack,\n Box,\n Button,\n ButtonText,\n Icon,\n Divider,\n HStack,\n Center,\n Heading,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { useCreateOrganizationMutation, useGetAllUsersQuery } from 'common/lib/generated/generated.js';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { useSelector } from 'react-redux';\nimport { userSelector, isUserAuthenticated } from '@adminide-stack/user-auth0-client';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport { Ionicons, AntDesign, FontAwesome5, MaterialCommunityIcons } from '@expo/vector-icons';\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nconst InviteOrganizationMembers = ({ route }: any) => {\n const navigation = useNavigation<any>();\n const user: any = useSelector(userSelector);\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, []),\n );\n\n useEffect(() => {\n if (navigation)\n navigation.setOptions({\n headerTintColor: '#1d1c1d',\n headerRight: (props: any) => (\n <Button\n mr={'$2'}\n onPress={() =>\n navigation.navigate(NavigationRoutes.InitializeOrganizationChannel, {\n orgName: route?.params?.orgName,\n })\n }\n variant={'link'}\n >\n <ButtonText color={'$black'}>SKIP</ButtonText>\n </Button>\n ),\n });\n }, [navigation]);\n\n const shareLink = React.useCallback(async () => {\n try {\n const result = await Share.share({\n message: 'CDMBSE | Messenger App',\n });\n if (result.action === Share.sharedAction) {\n if (result.activityType) {\n // shared with activity type of result.activityType\n } else {\n // shared\n }\n } else if (result.action === Share.dismissedAction) {\n // dismissed\n }\n } catch (error: any) {\n Alert.alert(error.message);\n // alert(error.message);\n }\n }, []);\n\n return (\n <SafeAreaView flex={1}>\n <Box borderTopColor={'$blue600'} borderTopWidth={'$1'} w={'50%'} />\n <Box flex={1} bg={'$white'}>\n <VStack space={'lg'} py={'$10'} px={'$4'}>\n <Heading px={'$4'} alignItems={'center'} textAlign={'center'}>\n Who else is on the {route?.params?.orgName} team?\n </Heading>\n <Text textAlign={'center'} fontSize={15}>\n Invite your teammates to Workspace.\n </Text>\n <Button\n my={'$1'}\n size={'md'}\n variant={'solid'}\n onPress={async () => await shareLink()}\n bg={'$green800'}\n $pressed-bg=\"$green600\"\n $active-bg={'$green600'}\n >\n <Ionicons color={'white'} name=\"share-outline\" size={20} />\n <ButtonText ml={'$2'} color={'$white'} fontWeight=\"$bold\">\n Share a Link\n </ButtonText>\n </Button>\n <Button\n my={'$1'}\n size=\"md\"\n bg={'$white'}\n $pressed-bg=\"$trueGray200\"\n $active-bg={'$trueGray200'}\n borderColor=\"$trueGray400\"\n variant=\"outline\"\n >\n <AntDesign color={'black'} name=\"adduser\" size={20} />\n <ButtonText ml={'$2'} fontWeight=\"$bold\" color={'$black'}>\n Add from Contacts\n </ButtonText>\n </Button>\n <Button\n my={'$1'}\n size=\"md\"\n bg={'$white'}\n $pressed-bg=\"$trueGray200\"\n $active-bg={'$trueGray200'}\n borderColor=\"$trueGray400\"\n variant=\"outline\"\n onPress={() => navigation.navigate(NavigationRoutes.AddPeopleByEmail)}\n >\n <MaterialCommunityIcons color={'black'} name=\"email-outline\" size={20} />\n <ButtonText ml={'$2'} fontWeight=\"$bold\" color={'$black'}>\n Add by Email\n </ButtonText>\n </Button>\n </VStack>\n </Box>\n </SafeAreaView>\n );\n};\n\nexport default InviteOrganizationMembers;\n"],"names":["React","_a"],"mappings":"ifASoB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AACxB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AAC9C,MAAM,4BAA4B,CAAC;AAAA,EACjC;AACF,CAAW,KAAA;AAbX,EAAA,IAAA,EAAA;AAcE,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAkB,YAAY,YAAY;AAC1C,EAAe,cAAA,CAAAA,cAAA,CAAM,YAAY,MAAM;AAErC,IAAA,OAAO,MAAM;AAAA,KAGb;AAAA,GACF,EAAG,EAAE,CAAC,CAAA;AACN,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA;AAAY,MAAA,UAAA,CAAW,UAAW,CAAA;AAAA,QACpC,eAAiB,EAAA,SAAA;AAAA,QACjB,WAAA,EAAa,CAAC,KAAe,qBAAAA,cAAA,CAAA,aAAA,CAAC,UAAO,EAAI,EAAA,IAAA,EAAM,SAAS,MAAG;AA1BjE,UAAAC,IAAAA,GAAAA;AA0BoE,UAAW,OAAA,UAAA,CAAA,QAAA,CAAS,iBAAiB,6BAA+B,EAAA;AAAA,YAChI,OAASA,EAAAA,CAAAA,GAAAA,GAAA,KAAO,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAA,MAAA,KAAP,gBAAAA,GAAe,CAAA;AAAA,WACzB,CAAA;AAAA,SAAA,EAAG,SAAS,MACK,EAAA,kBAAAD,cAAA,CAAA,aAAA,CAAC,cAAW,KAAO,EAAA,QAAA,EAAA,EAAU,MAAI,CACrC;AAAA,OACf,CAAA;AAAA,GACH,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAM,MAAA,SAAA,GAAYA,cAAM,CAAA,WAAA,CAAY,YAAY;AAC9C,IAAI,IAAA;AACF,MAAM,MAAA,MAAA,GAAS,MAAM,KAAA,CAAM,KAAM,CAAA;AAAA,QAC/B,OAAS,EAAA;AAAA,OACV,CAAA;AACD,MAAI,IAAA,MAAA,CAAO,MAAW,KAAA,KAAA,CAAM,YAAc,EAAA;AACxC,QAAA,IAAI,OAAO,YAAc,EAAA;AAAA,SAElB,MAAA;AAAA;AAEP,OACS,MAAA,IAAA,MAAA,CAAO,MAAW,KAAA,KAAA,CAAM,eAAiB,EAAA;AAAA;AAEpD,aACO,KAAP,EAAA;AACA,MAAM,KAAA,CAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA;AAE3B,GACF,EAAG,EAAE,CAAA;AACL,EAAA,oDAAQ,YAAa,EAAA,EAAA,IAAA,EAAM,CACjB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,cAAgB,EAAA,UAAA,EAAY,cAAgB,EAAA,IAAA,EAAM,GAAG,KAAO,EAAA,CAAA,+CAChE,GAAI,EAAA,EAAA,IAAA,EAAM,GAAG,EAAI,EAAA,QAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,OAAO,IAAM,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,IAAA,EAAA,+CAC/B,OAAQ,EAAA,EAAA,EAAA,EAAI,IAAM,EAAA,UAAA,EAAY,UAAU,SAAW,EAAA,QAAA,EAAA,EAAU,wBACtC,EAAO,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAA,MAAA,KAAP,mBAAe,OAAQ,EAAA,QAC/C,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,SAAW,EAAA,QAAA,EAAU,QAAU,EAAA,EAAA,EAAA,EAAI,qCAEzC,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,EAAA,EAAI,MAAM,IAAM,EAAA,IAAA,EAAM,SAAS,OAAS,EAAA,OAAA,EAAS,YAAY,MAAM,SAAA,EAAa,EAAA,EAAA,EAAI,aAAa,aAAY,EAAA,WAAA,EAAY,cAAY,WACzI,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,YAAS,KAAO,EAAA,OAAA,EAAS,IAAK,EAAA,eAAA,EAAgB,MAAM,EAAI,EAAA,CAAA,+CACxD,UAAW,EAAA,EAAA,EAAA,EAAI,MAAM,KAAO,EAAA,QAAA,EAAU,UAAW,EAAA,OAAA,EAAA,EAAQ,cAE1D,CACJ,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,IAAI,IAAM,EAAA,IAAA,EAAK,IAAK,EAAA,EAAA,EAAI,UAAU,aAAY,EAAA,cAAA,EAAe,cAAY,cAAgB,EAAA,WAAA,EAAY,gBAAe,OAAQ,EAAA,SAAA,EAAA,kBAC/HA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,OAAS,EAAA,IAAA,EAAK,WAAU,IAAM,EAAA,EAAA,EAAI,mBACnDA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,EAAI,EAAA,IAAA,EAAM,YAAW,OAAQ,EAAA,KAAA,EAAO,YAAU,mBAE1D,CACJ,mBACCA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,EAAI,EAAA,IAAA,EAAM,MAAK,IAAK,EAAA,EAAA,EAAI,UAAU,aAAY,EAAA,cAAA,EAAe,cAAY,cAAgB,EAAA,WAAA,EAAY,cAAe,EAAA,OAAA,EAAQ,WAAU,OAAS,EAAA,MAAM,WAAW,QAAS,CAAA,gBAAA,CAAiB,gBAAgB,CAC9M,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,sBAAuB,EAAA,EAAA,KAAA,EAAO,SAAS,IAAK,EAAA,eAAA,EAAgB,MAAM,EAAI,EAAA,CAAA,+CACtE,UAAW,EAAA,EAAA,EAAA,EAAI,IAAM,EAAA,UAAA,EAAW,SAAQ,KAAO,EAAA,QAAA,EAAA,EAAU,cAE1D,CACJ,CACJ,CACJ,CACJ,CAAA;AACR"}
1
+ {"version":3,"file":"InviteOrganizationMembers.js","sources":["../../../src/screens/Organization/InviteOrganizationMembers.tsx"],"sourcesContent":["import React, { useState, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { StyleSheet, TouchableOpacity, Dimensions, Share, Alert, SafeAreaView } from 'react-native';\nimport {\n Text,\n VStack,\n Box,\n Button,\n ButtonText,\n Icon,\n Divider,\n HStack,\n Center,\n Heading,\n Toast,\n useToast,\n ToastTitle,\n ToastDescription,\n} from '@admin-layout/gluestack-ui-mobile';\nimport {\n useCreateOrganizationMutation,\n useAllUsersQuery,\n useSendOrganizationInvitationMutation,\n useOrganizationSharableLinkQuery,\n} from '../../queries/slackuiQueries';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { useSelector } from 'react-redux';\nimport { userSelector, isUserAuthenticated } from '@adminide-stack/user-auth0-client';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport { Ionicons, AntDesign, FontAwesome5, MaterialCommunityIcons } from '@expo/vector-icons';\nimport Colors from 'tailwindcss/colors';\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nconst InviteOrganizationMembers = ({ route }: any) => {\n const navigation = useNavigation<any>();\n const user: any = useSelector(userSelector);\n const toast = useToast();\n const orgName = route?.params?.orgName;\n\n // Get organization sharable link\n const { data: orgLinkData, loading: orgLinkLoading } = useOrganizationSharableLinkQuery(orgName);\n\n // Send organization invitation mutation\n const [sendInvitation, { loading: sendingInvitation }] = useSendOrganizationInvitationMutation({\n onCompleted: (data) => {\n toast.show({\n placement: 'top',\n render: ({ id }) => {\n return (\n <Toast nativeID={id} action=\"success\" variant=\"solid\">\n <VStack space=\"xs\">\n <ToastTitle>Success</ToastTitle>\n <ToastDescription>Invitation sent successfully</ToastDescription>\n </VStack>\n </Toast>\n );\n },\n });\n },\n onError: (error) => {\n toast.show({\n placement: 'top',\n render: ({ id }) => {\n return (\n <Toast nativeID={id} action=\"error\" variant=\"solid\">\n <VStack space=\"xs\">\n <ToastTitle>Error</ToastTitle>\n <ToastDescription>{error.message}</ToastDescription>\n </VStack>\n </Toast>\n );\n },\n });\n },\n });\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, []),\n );\n\n useEffect(() => {\n if (navigation)\n navigation.setOptions({\n headerTintColor: '#1d1c1d',\n headerRight: (props: any) => (\n <Button\n className=\"mr-2\"\n onPress={() =>\n navigation.navigate(NavigationRoutes.InitializeOrganizationChannel, {\n orgName: orgName,\n })\n }\n variant={'link'}\n >\n <ButtonText className=\"text-black\">SKIP</ButtonText>\n </Button>\n ),\n });\n }, [navigation]);\n\n const shareLink = React.useCallback(async () => {\n try {\n // Use the organization sharable link if available\n const shareMessage = orgLinkData?.getOrganizationSharableLink || 'CDMBSE | Messenger App';\n\n const result = await Share.share({\n message: shareMessage,\n });\n if (result.action === Share.sharedAction) {\n if (result.activityType) {\n // shared with activity type of result.activityType\n } else {\n // shared\n }\n } else if (result.action === Share.dismissedAction) {\n // dismissed\n }\n } catch (error: any) {\n Alert.alert(error.message);\n // alert(error.message);\n }\n }, [orgLinkData]);\n\n return (\n <SafeAreaView style={{ flex: 1 }}>\n <Box className=\"border-t-blue-600 border-t w-[50%]\" />\n <Box className=\"flex-1 bg-white\">\n <VStack space={'lg'} className=\"py-10 px-4\">\n <Heading className=\"px-4 items-center text-center\">Who else is on the {orgName} team?</Heading>\n <Text className=\"text-center text-[15]\">Invite your teammates to Workspace.</Text>\n <Button\n size={'md'}\n variant={'solid'}\n onPress={async () => await shareLink()}\n className=\"my-1 bg-green-800 active:bg-green-600 hover:bg-green-600\"\n isDisabled={orgLinkLoading}\n >\n <Ionicons color={'white'} name=\"share-outline\" size={20} />\n <ButtonText className=\"ml-2 font-bold text-white\">Share a Link</ButtonText>\n </Button>\n <Button\n size=\"md\"\n variant=\"outline\"\n className=\"my-1 bg-white border-gray-400 active:bg-gray-200 hover:bg-gray-200\"\n >\n <AntDesign color={'black'} name=\"adduser\" size={20} />\n <ButtonText className=\"ml-2 font-bold text-black\">Add from Contacts</ButtonText>\n </Button>\n <Button\n size=\"md\"\n className=\"my-1 bg-white border-gray-400 active:bg-gray-200 hover:bg-gray-200\"\n variant=\"outline\"\n onPress={() =>\n navigation.navigate(NavigationRoutes.AddPeopleByEmail, {\n orgName: orgName,\n sendInvitation: (email: string) => {\n sendInvitation({\n variables: {\n request: {\n orgName,\n emails: [email],\n },\n },\n });\n },\n })\n }\n >\n <MaterialCommunityIcons color={'black'} name=\"email-outline\" size={20} />\n <ButtonText className=\"ml-2 font-bold text-black\">Add by Email</ButtonText>\n </Button>\n </VStack>\n </Box>\n </SafeAreaView>\n );\n};\n\nexport default InviteOrganizationMembers;\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React__default,{useState,useEffect}from'react';import {Button,ButtonText,Box,SafeAreaView,VStack,ButtonIcon,CheckIcon,Heading,HStack,Text,Input,InputField}from'@admin-layout/gluestack-ui-mobile';import {TouchableOpacity,Dimensions}from'react-native';import {Ionicons,AntDesign}from'@expo/vector-icons';import {useIsFocused}from'@react-navigation/native';import {useSendOrganizationInvitationMutation}from'common/lib/generated/generated.js';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../hooks/useDrawerLayout.js';import'../../hooks/useExpoNotificationProvider.js';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector}from'react-redux';Dimensions.get("window").width;
1
+ import React__default,{useState,useEffect}from'react';import {Button,ButtonText,Box,VStack,ButtonIcon,CheckIcon,Heading,HStack,Text,Input,InputField}from'@admin-layout/gluestack-ui-mobile';import {TouchableOpacity,SafeAreaView,Platform,Dimensions}from'react-native';import {NavigationRoutes}from'../../constants/routes.js';import {Ionicons,AntDesign}from'@expo/vector-icons';import {useIsFocused}from'@react-navigation/native';import {useSendOrganizationInvitationMutation}from'../../queries/slackuiQueries.js';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../hooks/useDrawerLayout.js';import'../../hooks/useExpoNotificationProvider.js';import'../../hooks/useOptimizedChannelsQueries.js';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector}from'react-redux';import colors from'tailwindcss/colors';Dimensions.get("window").width;
2
2
  Dimensions.get("window").height;
3
3
  Dimensions.get("screen").height;
4
4
  const AddPeopleByEmail = ({
@@ -44,7 +44,7 @@ const AddPeopleByEmail = ({
44
44
  headerLeft: (props) => /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: {
45
45
  paddingHorizontal: 10
46
46
  }, onPress: () => navigation == null ? void 0 : navigation.goBack() }, /* @__PURE__ */ React__default.createElement(Ionicons, { color: "black", name: "chevron-back", size: 20 })),
47
- headerRight: (props) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, emailSent ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null) : /* @__PURE__ */ React__default.createElement(Button, { mr: "$2", disabled: email && emailReg.test(email) === true ? false : true, variant: "link", onPress: () => {
47
+ headerRight: (props) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, emailSent ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null) : /* @__PURE__ */ React__default.createElement(Button, { className: "mr-2", disabled: email && emailReg.test(email) === true ? false : true, variant: "link", onPress: () => {
48
48
  var _a;
49
49
  return sendOrganizationInvitationMutation({
50
50
  variables: {
@@ -56,11 +56,29 @@ const AddPeopleByEmail = ({
56
56
  }
57
57
  }
58
58
  });
59
- } }, /* @__PURE__ */ React__default.createElement(ButtonText, { color: email && emailReg.test(email) === true ? "$black" : "$trueGray400" }, "SEND")))
59
+ } }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: `${email && emailReg.test(email) === true ? "text-black" : "text-gray-400"}` }, "SEND")))
60
60
  });
61
61
  }, [isFocused, navigation, email, orgName, user, emailSent]);
62
- return /* @__PURE__ */ React__default.createElement(Box, { flex: 1, bg: "$white" }, emailSent ? /* @__PURE__ */ React__default.createElement(SafeAreaView, { flex: 1 }, /* @__PURE__ */ React__default.createElement(VStack, { space: "lg", py: "$5", flex: 1, justifyContent: "space-between" }, /* @__PURE__ */ React__default.createElement(Box, { alignItems: "center", justifyContent: "center", borderRadius: "$full" }, /* @__PURE__ */ React__default.createElement(Button, { borderRadius: "$full", bg: "$green100", size: "lg" }, /* @__PURE__ */ React__default.createElement(ButtonIcon, { color: "#14532d", as: CheckIcon }))), /* @__PURE__ */ React__default.createElement(Heading, { textAlign: "center" }, "Invitation sent"), /* @__PURE__ */ React__default.createElement(HStack, { flex: 1, space: "sm", px: "$4", pr: "$10" }, /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(AntDesign, { color: "black", name: "adduser", size: 30 })), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { color: "$black", fontWeight: "$bold" }, email), /* @__PURE__ */ React__default.createElement(Text, null, "Invited as a member of ", orgName, ".They'll be able to receive and reply to messages by email untill they join."))), /* @__PURE__ */ React__default.createElement(Box, { px: "$5" }, /* @__PURE__ */ React__default.createElement(Button, { bg: "$green900", "$pressed-bg": "$green600", "$active-bg": "$green600", rounded: "$lg", onPress: () => {
62
+ return /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1 bg-white" }, emailSent ? /* @__PURE__ */ React__default.createElement(SafeAreaView, { style: {
63
+ flex: 1
64
+ } }, /* @__PURE__ */ React__default.createElement(VStack, { space: "lg", className: "py-5 flex-1 justify-between" }, /* @__PURE__ */ React__default.createElement(Box, { className: "text-center justify-center rounded-full" }, /* @__PURE__ */ React__default.createElement(Button, { className: "rounded-full bg-green-100", size: "lg" }, /* @__PURE__ */ React__default.createElement(ButtonIcon, { color: "#14532d", as: CheckIcon }))), /* @__PURE__ */ React__default.createElement(Heading, { className: "text-center" }, "Invitation sent"), /* @__PURE__ */ React__default.createElement(HStack, { className: "flex-1 px-4 pr-10", space: "sm" }, /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(AntDesign, { color: "black", name: "adduser", size: 30 })), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { color: colors.black, className: "font-bold" }, email), /* @__PURE__ */ React__default.createElement(Text, null, "Invited as a member of ", orgName, ".They'll be able to receive and reply to messages by email untill they join."))), /* @__PURE__ */ React__default.createElement(Box, { className: "px-5" }, /* @__PURE__ */ React__default.createElement(Button, { onPress: () => {
63
65
  setEmail("");
64
- navigation.goBack();
65
- } }, /* @__PURE__ */ React__default.createElement(ButtonText, { fontWeight: "600", fontSize: 15 }, "Done"))))) : /* @__PURE__ */ React__default.createElement(Input, { variant: "underlined", borderWidth: "$1", size: "xl", borderColor: "$coolGray300" }, /* @__PURE__ */ React__default.createElement(InputField, { px: "$3", type: "text", size: "xl", textTransform: "none", autoCapitalize: "none", autoCorrect: false, placeholderTextColor: "#404040", fontSize: 14, value: email, placeholder: "name@example.com", onChangeText: (v) => setEmail(v), textContentType: "emailAddress", keyboardType: "email-address" })));
66
+ if (Platform.OS === "macos") {
67
+ navigation.navigate("MainStack", {
68
+ screen: NavigationRoutes.Home,
69
+ params: {
70
+ orgName
71
+ }
72
+ });
73
+ } else if (navigation.canGoBack()) {
74
+ navigation.goBack();
75
+ } else {
76
+ navigation.navigate("MainStack", {
77
+ screen: NavigationRoutes.Home,
78
+ params: {
79
+ orgName
80
+ }
81
+ });
82
+ }
83
+ }, className: "bg-green-900 rounded-lg active:bg-green-600 hover:bg-green-600" }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: "font-bold text-[15]" }, "Done"))))) : /* @__PURE__ */ React__default.createElement(Input, { variant: "underlined", className: " rounded-lg", size: "xl" }, /* @__PURE__ */ React__default.createElement(InputField, { type: "text", size: "xl", autoCapitalize: "none", autoCorrect: false, placeholderTextColor: "#404040", value: email, placeholder: "name@example.com", onChange: (event) => setEmail(event.nativeEvent.text), textContentType: "emailAddress", keyboardType: "email-address", className: "px-3 text-[14] transform-none" })));
66
84
  };export{AddPeopleByEmail as default};//# sourceMappingURL=AddByEmail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddByEmail.js","sources":["../../../src/screens/Peoples/AddByEmail.tsx"],"sourcesContent":["import React, { useState, useEffect, useLayoutEffect } from 'react';\nimport {\n Input,\n InputField,\n View,\n Text,\n VStack,\n Box,\n FormControl,\n Button,\n ButtonText,\n ButtonIcon,\n SafeAreaView,\n Icon,\n Divider,\n FlatList,\n HStack,\n Avatar,\n Image,\n Checkbox,\n ChevronLeftIcon,\n Heading,\n CheckIcon,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { StyleSheet, TouchableOpacity, Linking, Platform, Dimensions } from 'react-native';\nimport Colors from '../../constants/Colors';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { AntDesign, Ionicons } from '@expo/vector-icons';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useIsFocused } from '@react-navigation/native';\nimport { useSendOrganizationInvitationMutation } from 'common/lib/generated/generated.js';\nimport { useDrawerLayout } from '../../hooks';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector } from 'react-redux';\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\nconst screenHeight = Dimensions.get('screen').height;\n\nconst AddPeopleByEmail = ({ navigation, route }: any) => {\n const isFocused = useIsFocused();\n const { orgName } = useDrawerLayout();\n const user = useSelector(userSelector);\n const [contacts, setContacts] = useState([]);\n const [email, setEmail] = useState('');\n // const emailReg = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w\\w+)+$/;\n const emailReg = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const [emailSent, setEmailSent] = useState(false);\n const [sendOrganizationInvitationMutation, { data, loading, error }] = useSendOrganizationInvitationMutation({\n onCompleted: (res) => {\n console.log('org invitation res', JSON.stringify(res));\n if (res?.sendOrganizationInvitation) setEmailSent(true);\n },\n onError: (e) => {\n console.log('e', JSON.stringify(e));\n setEmailSent(false);\n },\n });\n\n useEffect(() => {\n return () => {\n setEmailSent(false);\n setEmail('');\n };\n }, []);\n\n useEffect(() => {\n if (isFocused) {\n }\n\n navigation.setOptions({\n headerShown: true,\n headerTitleAlign: 'left',\n headerTitleStyle: {},\n title: emailSent ? '' : 'Add by Email',\n headerLeft: (props: any) => (\n <TouchableOpacity style={{ paddingHorizontal: 10 }} onPress={() => navigation?.goBack()}>\n <Ionicons color=\"black\" name=\"chevron-back\" size={20} />\n </TouchableOpacity>\n ),\n headerRight: (props: any) => (\n <>\n {emailSent ? (\n <></>\n ) : (\n <Button\n mr={'$2'}\n disabled={email && emailReg.test(email) === true ? false : true}\n variant={'link'}\n onPress={() =>\n sendOrganizationInvitationMutation({\n variables: {\n request: {\n emails: [email],\n orgName: orgName,\n invitedBy: user?.profile?.name,\n sentInvitee: true,\n },\n },\n })\n }\n >\n <ButtonText color={email && emailReg.test(email) === true ? '$black' : '$trueGray400'}>\n SEND\n </ButtonText>\n </Button>\n )}\n </>\n ),\n });\n }, [isFocused, navigation, email, orgName, user, emailSent]);\n\n return (\n <Box flex={1} bg={'$white'}>\n {emailSent ? (\n <SafeAreaView flex={1}>\n <VStack space={'lg'} py={'$5'} flex={1} justifyContent={'space-between'}>\n <Box alignItems={'center'} justifyContent={'center'} borderRadius=\"$full\">\n {/* <CheckIcon size={10} mt=\"0.5\" color=\"emerald.500\" /> */}\n <Button borderRadius=\"$full\" bg={'$green100'} size={'lg'}>\n {/* <AntDesign name=\"check\" size={25} /> */}\n <ButtonIcon color={'#14532d'} as={CheckIcon} />\n </Button>\n </Box>\n <Heading textAlign={'center'}>Invitation sent</Heading>\n <HStack flex={1} space={'sm'} px={'$4'} pr={'$10'}>\n <Box>\n <AntDesign color=\"black\" name=\"adduser\" size={30} />\n </Box>\n <Box>\n <Text color={'$black'} fontWeight={'$bold'}>\n {email}\n </Text>\n <Text>\n Invited as a member of {orgName}.They'll be able to receive and reply to messages by\n email untill they join.\n </Text>\n </Box>\n </HStack>\n <Box px={'$5'}>\n <Button\n bg={'$green900'}\n $pressed-bg=\"$green600\"\n $active-bg={'$green600'}\n rounded={'$lg'}\n onPress={() => {\n setEmail('');\n navigation.goBack();\n }}\n >\n <ButtonText fontWeight=\"600\" fontSize={15}>\n Done\n </ButtonText>\n </Button>\n </Box>\n </VStack>\n </SafeAreaView>\n ) : (\n <Input variant=\"underlined\" borderWidth={'$1'} size={'xl'} borderColor={'$coolGray300'}>\n <InputField\n px={'$3'}\n type=\"text\"\n size=\"xl\"\n textTransform={'none'}\n autoCapitalize={'none'}\n autoCorrect={false}\n placeholderTextColor={'#404040'}\n fontSize={14}\n value={email}\n placeholder=\"name@example.com\"\n onChangeText={(v) => setEmail(v)}\n textContentType=\"emailAddress\"\n keyboardType=\"email-address\"\n />\n </Input>\n // <Input\n // textTransform={'none'}\n // borderWidth={1}\n // borderColor={'coolGray.300'}\n // _focus={{ borderColor: 'coolGray.300' }}\n // py={4}\n // px={3}\n // _input={{ placeholderTextColor: '#404040', fontSize: 14 }}\n // variant=\"underlined\"\n // placeholder=\"name@example.com\"\n // value={email}\n // onChangeText={(v) => setEmail(v)}\n // textContentType=\"emailAddress\"\n // keyboardType=\"email-address\"\n // autoCapitalize=\"none\"\n // autoCorrect={false}\n // />\n )}\n {/* <View flex={1}>\n <VirtualizedScrollView>\n <VStack space=\"5\" pt={2}></VStack>\n </VirtualizedScrollView>\n </View> */}\n </Box>\n );\n};\n\nexport default AddPeopleByEmail;\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"AddByEmail.js","sources":["../../../src/screens/Peoples/AddByEmail.tsx"],"sourcesContent":["import React, { useState, useEffect, useLayoutEffect } from 'react';\nimport {\n Input,\n InputField,\n View,\n Text,\n VStack,\n Box,\n FormControl,\n Button,\n ButtonText,\n ButtonIcon,\n Icon,\n Divider,\n FlatList,\n HStack,\n Avatar,\n Image,\n Checkbox,\n ChevronLeftIcon,\n Heading,\n CheckIcon,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { StyleSheet, TouchableOpacity, Linking, Platform, Dimensions, SafeAreaView } from 'react-native';\nimport Colors from '../../constants/Colors';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { AntDesign, Ionicons } from '@expo/vector-icons';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useIsFocused } from '@react-navigation/native';\nimport { useSendOrganizationInvitationMutation } from '../../queries/slackuiQueries';\nimport { useDrawerLayout } from '../../hooks';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector } from 'react-redux';\nimport colors from 'tailwindcss/colors';\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\nconst screenHeight = Dimensions.get('screen').height;\n\nconst AddPeopleByEmail = ({ navigation, route }: any) => {\n const isFocused = useIsFocused();\n const { orgName } = useDrawerLayout();\n const user = useSelector(userSelector);\n const [contacts, setContacts] = useState([]);\n const [email, setEmail] = useState('');\n // const emailReg = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w\\w+)+$/;\n const emailReg = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const [emailSent, setEmailSent] = useState(false);\n const [sendOrganizationInvitationMutation, { data, loading, error }] = useSendOrganizationInvitationMutation({\n onCompleted: (res) => {\n console.log('org invitation res', JSON.stringify(res));\n if (res?.sendOrganizationInvitation) setEmailSent(true);\n },\n onError: (e) => {\n console.log('e', JSON.stringify(e));\n setEmailSent(false);\n },\n });\n\n useEffect(() => {\n return () => {\n setEmailSent(false);\n setEmail('');\n };\n }, []);\n\n useEffect(() => {\n if (isFocused) {\n }\n\n navigation.setOptions({\n headerShown: true,\n headerTitleAlign: 'left',\n headerTitleStyle: {},\n title: emailSent ? '' : 'Add by Email',\n headerLeft: (props: any) => (\n <TouchableOpacity style={{ paddingHorizontal: 10 }} onPress={() => navigation?.goBack()}>\n <Ionicons color=\"black\" name=\"chevron-back\" size={20} />\n </TouchableOpacity>\n ),\n headerRight: (props: any) => (\n <>\n {emailSent ? (\n <></>\n ) : (\n <Button\n className=\"mr-2\"\n disabled={email && emailReg.test(email) === true ? false : true}\n variant={'link'}\n onPress={() =>\n sendOrganizationInvitationMutation({\n variables: {\n request: {\n emails: [email],\n orgName: orgName,\n invitedBy: user?.profile?.name,\n sentInvitee: true,\n },\n },\n })\n }\n >\n <ButtonText\n className={`${email && emailReg.test(email) === true ? 'text-black' : 'text-gray-400'}`}\n >\n SEND\n </ButtonText>\n </Button>\n )}\n </>\n ),\n });\n }, [isFocused, navigation, email, orgName, user, emailSent]);\n\n return (\n <Box className=\"flex-1 bg-white\">\n {emailSent ? (\n <SafeAreaView style={{ flex: 1 }}>\n <VStack space={'lg'} className=\"py-5 flex-1 justify-between\">\n <Box className=\"text-center justify-center rounded-full\">\n {/* <CheckIcon size={10} mt=\"0.5\" color=\"emerald.500\" /> */}\n <Button className=\"rounded-full bg-green-100\" size={'lg'}>\n {/* <AntDesign name=\"check\" size={25} /> */}\n <ButtonIcon color={'#14532d'} as={CheckIcon} />\n </Button>\n </Box>\n <Heading className=\"text-center\">Invitation sent</Heading>\n <HStack className=\"flex-1 px-4 pr-10\" space={'sm'}>\n <Box>\n <AntDesign color=\"black\" name=\"adduser\" size={30} />\n </Box>\n <Box>\n <Text color={colors.black} className=\"font-bold\">\n {email}\n </Text>\n <Text>\n Invited as a member of {orgName}.They'll be able to receive and reply to messages by\n email untill they join.\n </Text>\n </Box>\n </HStack>\n <Box className=\"px-5\">\n <Button\n onPress={() => {\n setEmail('');\n // navigation.goBack();\n if (Platform.OS === 'macos') {\n navigation.navigate('MainStack', {\n screen: NavigationRoutes.Home,\n params: { orgName },\n });\n } else if (navigation.canGoBack()) {\n navigation.goBack();\n } else {\n navigation.navigate('MainStack', {\n screen: NavigationRoutes.Home,\n params: { orgName },\n });\n }\n }}\n className=\"bg-green-900 rounded-lg active:bg-green-600 hover:bg-green-600\"\n >\n <ButtonText className=\"font-bold text-[15]\">Done</ButtonText>\n </Button>\n </Box>\n </VStack>\n </SafeAreaView>\n ) : (\n <Input variant=\"underlined\" className=\" rounded-lg\" size={'xl'}>\n <InputField\n type=\"text\"\n size=\"xl\"\n autoCapitalize={'none'}\n autoCorrect={false}\n placeholderTextColor={'#404040'}\n value={email}\n placeholder=\"name@example.com\"\n onChange={(event) => setEmail(event.nativeEvent.text)}\n textContentType=\"emailAddress\"\n keyboardType=\"email-address\"\n className=\"px-3 text-[14] transform-none\"\n />\n </Input>\n // <Input\n // textTransform={'none'}\n // borderWidth={1}\n // borderColor={'coolGray.300'}\n // _focus={{ borderColor: 'coolGray.300' }}\n // py={4}\n // px={3}\n // _input={{ placeholderTextColor: '#404040', fontSize: 14 }}\n // variant=\"underlined\"\n // placeholder=\"name@example.com\"\n // value={email}\n // onChangeText={(v) => setEmail(v)}\n // textContentType=\"emailAddress\"\n // keyboardType=\"email-address\"\n // autoCapitalize=\"none\"\n // autoCorrect={false}\n // />\n )}\n {/* <View flex={1}>\n <VirtualizedScrollView>\n <VStack space=\"5\" pt={2}></VStack>\n </VirtualizedScrollView>\n </View> */}\n </Box>\n );\n};\n\nexport default AddPeopleByEmail;\n"],"names":["React"],"mappings":"y1BAaoB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AACxB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AACzB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AAC9C,MAAM,mBAAmB,CAAC;AAAA,EACxB,UAAA;AAAA,EACA;AACF,CAAW,KAAA;AACT,EAAA,MAAM,YAAY,YAAa,EAAA;AAC/B,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,eAAgB,EAAA;AACpB,EAAM,MAAA,IAAA,GAAO,YAAY,YAAY,CAAA;AACrC,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AAErC,EAAA,MAAM,QAAW,GAAA,4BAAA;AACjB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,kCAAoC,EAAA;AAAA,IACzC,IAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,IAAI,qCAAsC,CAAA;AAAA,IACzC,aAAa,CAAO,GAAA,KAAA;AAClB,MAAA,OAAA,CAAQ,GAAI,CAAA,oBAAA,EAAsB,IAAK,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AACrD,MAAA,IAAI,GAAK,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAA,0BAAA;AAA4B,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,KACxD;AAAA,IACA,SAAS,CAAK,CAAA,KAAA;AACZ,MAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,CAAC,CAAC,CAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA;AACpB,GACD,CAAA;AACD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,QAAA,CAAS,EAAE,CAAA;AAAA,KACb;AAAA,GACF,EAAG,EAAE,CAAA;AACL,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,UAAA,CAAW,UAAW,CAAA;AAAA,MACpB,WAAa,EAAA,IAAA;AAAA,MACb,gBAAkB,EAAA,MAAA;AAAA,MAClB,kBAAkB,EAAC;AAAA,MACnB,KAAA,EAAO,YAAY,EAAK,GAAA,cAAA;AAAA,MACxB,UAAY,EAAA,CAAC,KAAe,qBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAiB,KAAO,EAAA;AAAA,QACnD,iBAAmB,EAAA;AAAA,OAClB,EAAA,OAAA,EAAS,MAAM,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,MAChB,EAAA,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,IAAA,EAAK,cAAe,EAAA,IAAA,EAAM,IAAI,CAC1D,CAAA;AAAA,MACV,WAAA,EAAa,CAAC,KAAe,qBAAAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EACd,4BAAcA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,CAAA,mBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,MAAA,EAAO,UAAU,KAAS,IAAA,QAAA,CAAS,IAAK,CAAA,KAAK,CAAM,KAAA,IAAA,GAAO,QAAQ,IAAM,EAAA,OAAA,EAAS,MAAQ,EAAA,OAAA,EAAS,MAAG;AA/DhK,QAAA,IAAA,EAAA;AA+DmK,QAAmC,OAAA,kCAAA,CAAA;AAAA,UAC5L,SAAW,EAAA;AAAA,YACT,OAAS,EAAA;AAAA,cACP,MAAA,EAAQ,CAAC,KAAK,CAAA;AAAA,cACd,OAAA;AAAA,cACA,SAAA,EAAA,CAAW,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,OAAA,KAAN,IAAe,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA;AAAA,cAC1B,WAAa,EAAA;AAAA;AACf;AACF,SACD,CAAA;AAAA,OAAA,EAAA,kBACoBA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAW,EAAA,CAAA,EAAG,SAAS,QAAS,CAAA,IAAA,CAAK,KAAK,CAAA,KAAM,IAAO,GAAA,YAAA,GAAe,eAAmB,CAAA,CAAA,EAAA,EAAA,MAErG,CACJ,CACR;AAAA,KACX,CAAA;AAAA,GACH,EAAG,CAAC,SAAW,EAAA,UAAA,EAAY,OAAO,OAAS,EAAA,IAAA,EAAM,SAAS,CAAC,CAAA;AAC3D,EAAA,oDAAQ,GAAI,EAAA,EAAA,SAAA,EAAU,qBACX,SAAY,mBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAa,KAAO,EAAA;AAAA,IACxC,IAAM,EAAA;AAAA,uBAESA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAO,EAAA,IAAA,EAAM,WAAU,6BAC3B,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,6DAEVA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,2BAAA,EAA4B,MAAM,IAEhD,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,WAAW,EAAI,EAAA,SAAA,EAAW,CACjD,CACJ,mBACCA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,SAAU,EAAA,aAAA,EAAA,EAAc,iBAAe,CAChD,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,SAAA,EAAU,qBAAoB,KAAO,EAAA,IAAA,EAAA,kBACxCA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,+CACI,SAAU,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,IAAA,EAAK,WAAU,IAAM,EAAA,EAAA,EAAI,CACtD,CAAA,+CACC,GACG,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,KAAO,EAAA,SAAA,EAAU,WAChC,EAAA,EAAA,KACL,mBACCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,EAAK,yBACsB,EAAA,OAAA,EAAQ,8EAEpC,CACJ,CACJ,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,SAAU,EAAA,MAAA,EAAA,kBACVA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAS,MAAM;AACvC,IAAA,QAAA,CAAS,EAAE,CAAA;AAEX,IAAI,IAAA,QAAA,CAAS,OAAO,OAAS,EAAA;AAC3B,MAAA,UAAA,CAAW,SAAS,WAAa,EAAA;AAAA,QAC/B,QAAQ,gBAAiB,CAAA,IAAA;AAAA,QACzB,MAAQ,EAAA;AAAA,UACN;AAAA;AACF,OACD,CAAA;AAAA,KACH,MAAA,IAAW,UAAW,CAAA,SAAA,EAAa,EAAA;AACjC,MAAA,UAAA,CAAW,MAAO,EAAA;AAAA,KACb,MAAA;AACL,MAAA,UAAA,CAAW,SAAS,WAAa,EAAA;AAAA,QAC/B,QAAQ,gBAAiB,CAAA,IAAA;AAAA,QACzB,MAAQ,EAAA;AAAA,UACN;AAAA;AACF,OACD,CAAA;AAAA;AACH,GACF,EAAG,WAAU,gEACS,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,SAAU,EAAA,qBAAA,EAAA,EAAsB,MAAI,CACpD,CACJ,CACJ,CACJ,CAAkB,mBAAAA,cAAA,CAAA,aAAA,CAAC,KAAM,EAAA,EAAA,OAAA,EAAQ,YAAa,EAAA,SAAA,EAAU,gBAAe,IAAM,EAAA,IAAA,EAAA,kBACxEA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,IAAK,EAAA,MAAA,EAAO,MAAK,IAAK,EAAA,cAAA,EAAgB,MAAQ,EAAA,WAAA,EAAa,KAAO,EAAA,oBAAA,EAAsB,WAAW,KAAO,EAAA,KAAA,EAAO,WAAY,EAAA,kBAAA,EAAmB,QAAU,EAAA,CAAA,KAAA,KAAS,SAAS,KAAM,CAAA,WAAA,CAAY,IAAI,CAAA,EAAG,eAAgB,EAAA,cAAA,EAAe,cAAa,eAAgB,EAAA,SAAA,EAAU,+BAAgC,EAAA,CAC3T,CAwBR,CAAA;AACR"}
@@ -1,124 +1,209 @@
1
- import React__default,{useState,useEffect}from'react';import {Button,ButtonText,View,Input,InputField,VStack,FlatList,Box,Text,HStack,Image,Avatar,AvatarFallbackText,Checkbox,CheckboxIndicator,CheckboxIcon,CheckIcon}from'@admin-layout/gluestack-ui-mobile';import {TouchableOpacity,Platform,Linking}from'react-native';import {useGetOrganizationSharableLinkQuery}from'common/lib/generated/generated.js';import {NavigationRoutes}from'../../constants/routes.js';import {Ionicons}from'@expo/vector-icons';import VirtualizedScrollView from'../../components/VirtualizedScrollView/VirtualizedScrollView.js';import {useIsFocused}from'@react-navigation/native';import*as Contacts from'expo-contacts';import {config}from'../../config/env-config.js';const AddFromContacts = ({
1
+ import React__default,{useState,useEffect}from'react';import {Button,ButtonText,Box,Input,InputSlot,InputField,Spinner,Text,FlatList,HStack,Avatar,AvatarImage,AvatarFallbackText,Checkbox,CheckboxIndicator,CheckboxIcon,CheckIcon}from'@admin-layout/gluestack-ui-mobile';import {TouchableOpacity,Platform,Linking,StyleSheet}from'react-native';import Colors from'../../constants/Colors.js';import {useOrganizationSharableLinkQuery,useSendOrganizationInvitationMutation}from'../../queries/slackuiQueries.js';import {Ionicons,Feather}from'@expo/vector-icons';import {useIsFocused}from'@react-navigation/native';import*as Contacts from'expo-contacts';import {config}from'../../config/env-config.js';import {SafeAreaView}from'react-native-safe-area-context';import {useSelector}from'react-redux';import {userSelector}from'@adminide-stack/user-auth0-client';import'../../constants/device.js';import'../../constants/globalStyles.js';import'../../constants/Layout.js';import {NavigationRoutes}from'../../constants/routes.js';const AddFromContacts = ({
2
2
  navigation,
3
3
  route
4
4
  }) => {
5
+ var _a;
5
6
  const isFocused = useIsFocused();
6
7
  const [contacts, setContacts] = useState([]);
8
+ const [filteredContacts, setFilteredContacts] = useState([]);
7
9
  const [selectedContacts, setSelectedContacts] = useState([]);
10
+ const [searchQuery, setSearchQuery] = useState("");
11
+ const [loading, setLoading] = useState(true);
12
+ const orgName = ((_a = route == null ? void 0 : route.params) == null ? void 0 : _a.orgName) || "";
8
13
  const {
9
14
  data: organizationSharableLink
10
- } = useGetOrganizationSharableLinkQuery();
15
+ } = useOrganizationSharableLinkQuery(orgName);
16
+ const [sendOrganizationInvitation] = useSendOrganizationInvitationMutation();
17
+ const user = useSelector(userSelector);
11
18
  useEffect(() => {
12
- }, [selectedContacts]);
19
+ if (searchQuery.trim() === "") {
20
+ setFilteredContacts(contacts);
21
+ } else {
22
+ const filtered = contacts.filter((contact) => {
23
+ var _a2, _b, _c;
24
+ const fullName = `${contact.firstName || ""} ${contact.lastName || ""}`.toLowerCase();
25
+ const phoneNumber = ((_c = (_b = (_a2 = contact.phoneNumbers) == null ? void 0 : _a2[0]) == null ? void 0 : _b.number) == null ? void 0 : _c.toLowerCase()) || "";
26
+ const query = searchQuery.toLowerCase();
27
+ return fullName.includes(query) || phoneNumber.includes(query);
28
+ });
29
+ setFilteredContacts(filtered);
30
+ }
31
+ }, [searchQuery, contacts]);
13
32
  useEffect(() => {
14
33
  (async () => {
15
- const {
16
- status
17
- } = await Contacts.requestPermissionsAsync();
18
- if (status === "granted") {
34
+ try {
35
+ setLoading(true);
19
36
  const {
20
- data
21
- } = await Contacts.getContactsAsync({
22
- fields: [Contacts.Fields.FirstName, Contacts.Fields.LastName, Contacts.Fields.PhoneNumbers, Contacts.Fields.Image]
23
- });
24
- if (data.length > 0) {
25
- const contacts2 = data;
26
- setContacts(contacts2);
37
+ status
38
+ } = await Contacts.requestPermissionsAsync();
39
+ if (status === "granted") {
40
+ const {
41
+ data
42
+ } = await Contacts.getContactsAsync({
43
+ fields: [Contacts.Fields.FirstName, Contacts.Fields.LastName, Contacts.Fields.PhoneNumbers, Contacts.Fields.Image, Contacts.Fields.ImageAvailable]
44
+ });
45
+ if (data.length > 0) {
46
+ const sortedContacts = data.sort((a, b) => {
47
+ const nameA = `${a.firstName || ""} ${a.lastName || ""}`.trim().toLowerCase();
48
+ const nameB = `${b.firstName || ""} ${b.lastName || ""}`.trim().toLowerCase();
49
+ return nameA.localeCompare(nameB);
50
+ });
51
+ const validContacts = sortedContacts.filter((contact) => contact.phoneNumbers && contact.phoneNumbers.length > 0);
52
+ console.log(`Total contacts with phone numbers: ${validContacts.length}`);
53
+ const contactsWithImages = validContacts.filter((contact) => contact.imageAvailable && contact.image);
54
+ console.log(`Contacts with images: ${contactsWithImages.length}`);
55
+ if (contactsWithImages.length > 0) {
56
+ console.log("Sample image data:", contactsWithImages[0].image);
57
+ }
58
+ setContacts(validContacts);
59
+ setFilteredContacts(validContacts);
60
+ }
27
61
  }
62
+ } catch (error) {
63
+ console.error("Error fetching contacts:", error);
64
+ } finally {
65
+ setLoading(false);
28
66
  }
29
67
  })();
30
68
  }, []);
31
69
  useEffect(() => {
32
- navigation.setOptions({
33
- headerShown: true,
34
- headerTitleAlign: "left",
35
- headerTitleStyle: {},
36
- headerLeft: (props) => /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: {
37
- paddingHorizontal: 10
38
- }, onPress: () => {
39
- var _a;
40
- return navigation.navigate(NavigationRoutes.Home, {
41
- orgName: (_a = route == null ? void 0 : route.params) == null ? void 0 : _a.orgName
42
- });
43
- } }, /* @__PURE__ */ React__default.createElement(Ionicons, { color: "black", name: "chevron-back", size: 20 })),
44
- headerRight: (props) => /* @__PURE__ */ React__default.createElement(Button, { mr: "$2", onPress: () => sendInvitation(), disabled: selectedContacts.length > 0 ? false : true, variant: "link" }, /* @__PURE__ */ React__default.createElement(ButtonText, { color: selectedContacts.length > 0 ? "$black" : "$trueGray500" }, "Send"))
45
- });
70
+ if (isFocused) {
71
+ navigation.setOptions({
72
+ headerShown: true,
73
+ headerTitleAlign: "left",
74
+ title: "Add from Contacts",
75
+ headerTitleStyle: {
76
+ fontWeight: "600"
77
+ },
78
+ headerLeft: (props) => /* @__PURE__ */ React__default.createElement(
79
+ TouchableOpacity,
80
+ {
81
+ style: {
82
+ paddingHorizontal: 10
83
+ },
84
+ onPress: () => {
85
+ if (Platform.OS === "macos") {
86
+ navigation.navigate("MainStack", {
87
+ screen: NavigationRoutes.Home,
88
+ params: {
89
+ orgName
90
+ }
91
+ });
92
+ } else if (navigation.canGoBack()) {
93
+ navigation.goBack();
94
+ } else {
95
+ navigation.navigate("MainStack", {
96
+ screen: NavigationRoutes.Home,
97
+ params: {
98
+ orgName
99
+ }
100
+ });
101
+ }
102
+ }
103
+ },
104
+ /* @__PURE__ */ React__default.createElement(Ionicons, { color: Colors.slackBlack, name: "chevron-back", size: 20 })
105
+ ),
106
+ headerRight: (props) => /* @__PURE__ */ React__default.createElement(Button, { className: "mr-2", onPress: () => sendInvitation(), disabled: selectedContacts.length === 0, variant: "link" }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: `${selectedContacts.length > 0 ? "text-black font-bold" : "text-gray-500"}` }, "Send"))
107
+ });
108
+ }
46
109
  }, [isFocused, navigation, selectedContacts]);
47
- const setSelectedContactsData = (item) => {
48
- let obj = {
110
+ const toggleContact = (item) => {
111
+ if (!item.phoneNumbers || item.phoneNumbers.length === 0)
112
+ return;
113
+ const contact = {
49
114
  id: item.id,
50
- name: item.firstName + " " + item.lastName,
115
+ name: `${item.firstName || ""} ${item.lastName || ""}`.trim(),
51
116
  mobile: item.phoneNumbers[0]
52
117
  };
53
- const resultArr = selectedContacts.filter((arrObj) => arrObj.id !== obj.id);
54
- if (resultArr.length === selectedContacts.length)
55
- resultArr.push(obj);
56
- setSelectedContacts(resultArr);
118
+ setSelectedContacts((prev) => {
119
+ const isSelected = prev.some((c) => c.id === contact.id);
120
+ if (isSelected) {
121
+ return prev.filter((c) => c.id !== contact.id);
122
+ } else {
123
+ return [...prev, contact];
124
+ }
125
+ });
126
+ };
127
+ const getInitials = (firstName, lastName) => {
128
+ const first = firstName ? firstName.charAt(0).toUpperCase() : "";
129
+ const last = lastName ? lastName.charAt(0).toUpperCase() : "";
130
+ return (first + last).substring(0, 2);
57
131
  };
58
132
  const renderContactList = ({
59
133
  item
60
134
  }) => {
61
- var _a, _b, _c, _d, _e;
62
- const title = (_b = (_a = item == null ? void 0 : item.firstName) != null ? _a : " " + (item == null ? void 0 : item.lastName)) != null ? _b : "";
63
- const matches = (_c = title == null ? void 0 : title.match(/\b(\w)/g)) != null ? _c : "";
64
- const acronym = (_e = (_d = matches == null ? void 0 : matches.join("")) == null ? void 0 : _d.substring(0, 2)) != null ? _e : "";
65
- return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { key: item.id, style: {
66
- marginTop: 5
67
- }, onPress: () => setSelectedContactsData(item) }, /* @__PURE__ */ React__default.createElement(Box, { pl: "$4", pr: "$5", py: "$2" }, /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React__default.createElement(HStack, { alignItems: "center" }, item.imageAvailable ? /* @__PURE__ */ React__default.createElement(Image, { mx: "$2", px: "$2", py: "$2", size: "sm", source: {
135
+ var _a2, _b;
136
+ const isSelected = selectedContacts.some((c) => c.id === item.id);
137
+ const hasPhoneNumber = item.phoneNumbers && item.phoneNumbers.length > 0;
138
+ const initials = getInitials(item.firstName, item.lastName);
139
+ if (!hasPhoneNumber)
140
+ return null;
141
+ return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { key: item.id, onPress: () => toggleContact(item), style: styles.contactItem, disabled: !hasPhoneNumber, activeOpacity: 0.7 }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "justify-between items-center w-full" }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center space-x-3" }, item.imageAvailable && item.image && item.image.uri ? /* @__PURE__ */ React__default.createElement(Avatar, { size: "md", className: "bg-gray-400" }, /* @__PURE__ */ React__default.createElement(AvatarImage, { source: {
68
142
  uri: item.image.uri
69
- }, alt: item.firstName }) : /* @__PURE__ */ React__default.createElement(Button, { mx: "$2", px: "$2", py: "$2", size: "sm", bg: "$coolGray500" }, /* @__PURE__ */ React__default.createElement(Avatar, { bg: "transparent", size: "sm" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, { color: "$white", fontWeight: "600" }, acronym))), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { color: "$coolGray800", fontWeight: "$bold" }, item.firstName, " ", item.lastName), /* @__PURE__ */ React__default.createElement(Text, null, item.phoneNumbers[0].number))), /* @__PURE__ */ React__default.createElement(Checkbox, { onChange: () => setSelectedContactsData(item), value: item.id, isChecked: selectedContacts.filter((i) => i.id === item.id).length > 0 ? true : false, accessibilityLabel: item.firstName, "aria-label": item.firstName }, /* @__PURE__ */ React__default.createElement(CheckboxIndicator, null, /* @__PURE__ */ React__default.createElement(CheckboxIcon, { as: CheckIcon }))))));
143
+ }, alt: `${item.firstName || ""} ${item.lastName || ""}`.trim(), onError: (e) => console.log("Avatar image failed to load", e.nativeEvent.error), style: styles.avatarImage }), /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, initials)) : /* @__PURE__ */ React__default.createElement(Avatar, { size: "md", className: "bg-blue-500" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, { style: styles.avatarText }, initials)), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-800 font-semibold text-base" }, item.firstName || "", " ", item.lastName || ""), /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-500 text-sm" }, ((_b = (_a2 = item.phoneNumbers) == null ? void 0 : _a2[0]) == null ? void 0 : _b.number) || "No number"))), /* @__PURE__ */ React__default.createElement(Checkbox, { value: item.id, isChecked: isSelected, accessibilityLabel: `Select ${item.firstName}`, "aria-label": `Select ${item.firstName}` }, /* @__PURE__ */ React__default.createElement(CheckboxIndicator, { className: isSelected ? "bg-blue-500 border-blue-500" : "" }, /* @__PURE__ */ React__default.createElement(CheckboxIcon, { as: CheckIcon })))));
70
144
  };
71
145
  const sendInvitation = () => {
72
- var _a;
146
+ var _a2;
147
+ if (selectedContacts.length === 0)
148
+ return;
149
+ const mobileNumbers = selectedContacts.map((i) => i.mobile.number);
150
+ sendOrganizationInvitation({
151
+ variables: {
152
+ request: {
153
+ orgName,
154
+ emails: mobileNumbers.map((num) => num.replace(/\s/g, "")),
155
+ invitedBy: ((_a2 = user == null ? void 0 : user.profile) == null ? void 0 : _a2.name) || "",
156
+ sentInvitee: true
157
+ }
158
+ },
159
+ onCompleted: (data) => {
160
+ console.log("Organization invitation sent successfully:", data);
161
+ sendSMSInvitations();
162
+ },
163
+ onError: (error) => {
164
+ console.error("Error sending invitations:", error);
165
+ sendSMSInvitations();
166
+ }
167
+ });
168
+ };
169
+ const sendSMSInvitations = () => {
170
+ var _a2;
73
171
  const mobileNumbers = selectedContacts.map((i) => i.mobile.number);
74
172
  let numbers = "";
75
173
  mobileNumbers.forEach((phoneNumber) => {
76
174
  numbers += `${phoneNumber.replace(/\s/g, "")},`;
77
175
  });
78
176
  numbers = numbers.slice(0, -1);
79
- Platform.OS === "ios" ? "&" : "?";
80
- const message = `Join me on ${config.APP_NAME} - it's faster, simpler way to work.Singup here from any device. ${(_a = organizationSharableLink == null ? void 0 : organizationSharableLink.getOrganizationSharableLink) != null ? _a : ""}`;
177
+ const message = `Join me on ${config.APP_NAME} - it's a faster, simpler way to work. Sign up here from any device: ${(_a2 = organizationSharableLink == null ? void 0 : organizationSharableLink.getOrganizationSharableLink) != null ? _a2 : ""}`;
81
178
  const url = Platform.OS === "android" ? `sms:${numbers}?body=${encodeURIComponent(message)}` : `sms:/open?addresses=${numbers}&body=${encodeURIComponent(message)}`;
82
179
  Linking.openURL(url);
83
180
  };
84
- return /* @__PURE__ */ React__default.createElement(View, { flex: 1, bg: "$white" }, /* @__PURE__ */ React__default.createElement(Input, { pl: "$4", variant: "underlined" }, /* @__PURE__ */ React__default.createElement(
85
- InputField,
86
- {
87
- px: "$3",
88
- bg: "$coolGray100",
89
- alignItems: "center",
90
- type: "text",
91
- size: "xl",
92
- placeholderTextColor: "#404040",
93
- fontSize: 14,
94
- color: "$black",
95
- placeholder: "Search",
96
- onChange: ({
97
- nativeEvent: {
98
- eventCount,
99
- target,
100
- text
101
- }
102
- }) => {
103
- },
104
- autoCapitalize: "none",
105
- autoCorrect: false
106
- }
107
- )), /* @__PURE__ */ React__default.createElement(View, { flex: 1 }, /* @__PURE__ */ React__default.createElement(VirtualizedScrollView, null, /* @__PURE__ */ React__default.createElement(VStack, { space: "md", pt: "$2" }, /* @__PURE__ */ React__default.createElement(
108
- FlatList,
109
- {
110
- px: "$2",
111
- contentContainerStyle: {
112
- flex: 1
113
- },
114
- data: contacts && contacts.length > 0 ? contacts : [],
115
- renderItem: renderContactList,
116
- ListEmptyComponent: () => {
117
- return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: {
118
- marginTop: 5
119
- } }, /* @__PURE__ */ React__default.createElement(Box, { bg: "#fff", py: "$2" }, /* @__PURE__ */ React__default.createElement(VStack, { space: "md" }, /* @__PURE__ */ React__default.createElement(Box, { px: "$4", py: "$5" }, /* @__PURE__ */ React__default.createElement(Text, null, "No contact found")))));
120
- },
121
- key: "add-from-contacts-search-list"
122
- }
123
- )))));
124
- };export{AddFromContacts as default};//# sourceMappingURL=AddFromContacts.js.map
181
+ return /* @__PURE__ */ React__default.createElement(SafeAreaView, { style: styles.container }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1 bg-white" }, /* @__PURE__ */ React__default.createElement(Box, { className: "px-4 py-2 bg-white" }, /* @__PURE__ */ React__default.createElement(Input, { size: "md", className: "bg-gray-100 rounded-lg" }, /* @__PURE__ */ React__default.createElement(InputSlot, null, /* @__PURE__ */ React__default.createElement(Feather, { name: "search", size: 16, color: "#9ca3af", style: {
182
+ marginLeft: 8
183
+ } })), /* @__PURE__ */ React__default.createElement(InputField, { placeholder: "Search contacts", placeholderTextColor: "#9ca3af", onChange: (event) => setSearchQuery(event.nativeEvent.text), value: searchQuery, autoCapitalize: "none", autoCorrect: false, className: "text-black" }), searchQuery ? /* @__PURE__ */ React__default.createElement(InputSlot, null, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => setSearchQuery(""), style: {
184
+ marginRight: 8
185
+ } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close-circle", size: 16, color: "#9ca3af" }))) : null)), loading ? /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1 justify-center items-center" }, /* @__PURE__ */ React__default.createElement(Spinner, { size: "large", color: Colors.blue }), /* @__PURE__ */ React__default.createElement(Text, { className: "mt-4 text-gray-500" }, "Loading contacts...")) : /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, selectedContacts.length > 0 && /* @__PURE__ */ React__default.createElement(Box, { className: "px-4 py-2 bg-gray-50 border-b border-gray-200" }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-sm text-gray-500" }, selectedContacts.length, " ", selectedContacts.length === 1 ? "contact" : "contacts", " ", "selected")), /* @__PURE__ */ React__default.createElement(FlatList, { data: filteredContacts, renderItem: renderContactList, keyExtractor: (item) => item.id, contentContainerStyle: styles.listContainer, ListEmptyComponent: () => /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1 justify-center items-center py-8" }, /* @__PURE__ */ React__default.createElement(Feather, { name: "users", size: 48, color: "#d1d5db" }), /* @__PURE__ */ React__default.createElement(Text, { className: "text-center text-gray-500 mt-4" }, searchQuery ? "No matching contacts found" : "No contacts found")) }))));
186
+ };
187
+ const styles = StyleSheet.create({
188
+ container: {
189
+ flex: 1,
190
+ backgroundColor: "white"
191
+ },
192
+ listContainer: {
193
+ flexGrow: 1
194
+ },
195
+ contactItem: {
196
+ paddingHorizontal: 16,
197
+ paddingVertical: 12,
198
+ borderBottomWidth: 1,
199
+ borderBottomColor: "#f3f4f6"
200
+ },
201
+ avatarText: {
202
+ color: "white",
203
+ fontWeight: "600"
204
+ },
205
+ avatarImage: {
206
+ width: "100%",
207
+ height: "100%"
208
+ }
209
+ });export{AddFromContacts as default};//# sourceMappingURL=AddFromContacts.js.map