@messenger-box/slack-ui-mobile 10.0.3-alpha.43 → 10.0.3-alpha.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/NavigationHeader/NavigationHeader.js +28 -2
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/compute.js +1 -0
- package/lib/compute.js.map +1 -1
- package/lib/routes.json +1 -0
- package/lib/screens/Channels/Add/AddName.js +27 -2
- package/lib/screens/Channels/Add/AddName.js.map +1 -1
- package/lib/screens/Channels/Channels.js +27 -2
- package/lib/screens/Channels/Channels.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +2 -2
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Inbox/InboxDialogMessages.js +2 -2
- package/lib/screens/Inbox/InboxDialogMessages.js.map +1 -1
- package/lib/screens/Peoples/AddByEmail.js +18 -2
- package/lib/screens/Peoples/AddByEmail.js.map +1 -1
- package/lib/screens/Peoples/AddFromContacts.js +29 -4
- package/lib/screens/Peoples/AddFromContacts.js.map +1 -1
- package/lib/screens/Search/SearchAddChannel.js +21 -2
- package/lib/screens/Search/SearchAddChannel.js.map +1 -1
- package/lib/screens/Search/SearchChannelPeople.js +29 -4
- package/lib/screens/Search/SearchChannelPeople.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default,{useState,useCallback,useEffect}from'react';import {SafeAreaView,StyleSheet,Dimensions}from'react-native';import {Box,Text,Button,ButtonText,Pressable,HStack,VStack,Center,Spinner,Heading,Input,InputSlot,InputIcon,SearchIcon,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {NavigationRoutes}from'../../constants/routes.js';import {RoomType}from'common';import {useChannelsQuery}from'../../queries/slackuiQueries.js';import {useIsFocused,useFocusEffect}from'@react-navigation/native';import {MaterialIcons,FontAwesome,Octicons}from'@expo/vector-icons';import colors from'tailwindcss/colors';import {StatusBar}from'expo-status-bar';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../hooks/useDrawerLayout.js';import'../../hooks/useExpoNotificationProvider.js';import {uniqBy}from'lodash-es';Dimensions.get("window").width;
|
|
1
|
+
import React__default,{useState,useCallback,useEffect}from'react';import {Platform,SafeAreaView,StyleSheet,Dimensions}from'react-native';import {Box,Text,Button,ButtonText,Pressable,HStack,VStack,Center,Spinner,Heading,Input,InputSlot,InputIcon,SearchIcon,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {NavigationRoutes}from'../../constants/routes.js';import {RoomType}from'common';import {useChannelsQuery}from'../../queries/slackuiQueries.js';import {useIsFocused,useFocusEffect}from'@react-navigation/native';import {MaterialIcons,FontAwesome,Octicons}from'@expo/vector-icons';import colors from'tailwindcss/colors';import {StatusBar}from'expo-status-bar';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../hooks/useDrawerLayout.js';import'../../hooks/useExpoNotificationProvider.js';import {uniqBy}from'lodash-es';Dimensions.get("window").width;
|
|
2
2
|
Dimensions.get("window").height;
|
|
3
3
|
const defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];
|
|
4
4
|
const Channels = ({
|
|
@@ -51,7 +51,32 @@ const Channels = ({
|
|
|
51
51
|
headerTitleStyle: {
|
|
52
52
|
borderBottomWidth: 1
|
|
53
53
|
},
|
|
54
|
-
headerLeft: () => /* @__PURE__ */ React__default.createElement(
|
|
54
|
+
headerLeft: () => /* @__PURE__ */ React__default.createElement(
|
|
55
|
+
Button,
|
|
56
|
+
{
|
|
57
|
+
onPress: () => {
|
|
58
|
+
if (Platform.OS === "macos") {
|
|
59
|
+
navigation.navigate("MainStack", {
|
|
60
|
+
screen: NavigationRoutes.Home,
|
|
61
|
+
params: {
|
|
62
|
+
orgName
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
} else if (navigation.canGoBack()) {
|
|
66
|
+
navigation.goBack();
|
|
67
|
+
} else {
|
|
68
|
+
navigation.navigate("MainStack", {
|
|
69
|
+
screen: NavigationRoutes.Home,
|
|
70
|
+
params: {
|
|
71
|
+
orgName
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
variant: "link"
|
|
77
|
+
},
|
|
78
|
+
/* @__PURE__ */ React__default.createElement(ButtonText, null, /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: "close", size: 24, color: "black" }))
|
|
79
|
+
),
|
|
55
80
|
headerRight: () => /* @__PURE__ */ React__default.createElement(Button, { onPress: () => navigation.navigate(NavigationRoutes.AddChannel, {
|
|
56
81
|
orgName
|
|
57
82
|
}), variant: "link" }, /* @__PURE__ */ React__default.createElement(ButtonText, null, "Create")),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Channels.js","sources":["../../../src/screens/Channels/Channels.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { StyleSheet, TouchableHighlight, Dimensions, SafeAreaView } from 'react-native';\nimport {\n Input,\n InputField,\n InputSlot,\n InputIcon,\n SearchIcon,\n Button,\n ButtonText,\n View,\n Text,\n VStack,\n Box,\n Fab,\n FlatList,\n Divider,\n HStack,\n SectionList,\n Center,\n Heading,\n Spinner,\n Avatar,\n Badge,\n BadgeText,\n Pressable,\n} from '@admin-layout/gluestack-ui-mobile';\nimport Colors from '../../constants/Colors';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { AntDesign } from '@expo/vector-icons';\n// import VirtualizedScrollView from '../VirtualizedScrollView';\nimport { RoomType } from 'common';\nimport { useChannelsQuery } from '../../queries/slackuiQueries';\nimport { useIsFocused, useFocusEffect, useNavigation } from '@react-navigation/native';\n// import { navigationRef } from '@common-stack/client-react';\nimport { FontAwesome, Feather, Octicons, MaterialIcons } from '@expo/vector-icons';\nimport colors from 'tailwindcss/colors';\nimport { StatusBar } from 'expo-status-bar';\nimport { NavigationHeader, ChannelsByAlphabeticalAccordion } from '../../components';\nimport { useDrawerLayout } from '../../hooks';\nimport { startCase, orderBy, uniqBy } from 'lodash-es';\n\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\nconst Channels = ({ navigation, route }: any) => {\n const { orgName } = useDrawerLayout();\n const isFocused = useIsFocused();\n const [channels, setChannels] = useState<any[]>([]);\n const [intialChannels, setInitialChannels] = useState<any[]>([]);\n const [searchQuery, setSearchQuery] = useState<string>('');\n\n const { data, loading, error, refetch } = useChannelsQuery();\n\n useFocusEffect(\n useCallback(() => {\n if (orgName) {\n refetch({\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 50,\n });\n }\n return () => {\n // Cleanup\n };\n }, [orgName, refetch]),\n );\n\n useEffect(() => {\n if (data) {\n const newChannels =\n data?.channelsByUser\n ?.filter((i: any) => i.type !== RoomType.Direct)\n ?.sort((a: any, b: any) => a.title.localeCompare(b.title)) || [];\n\n setChannels((oldChannels: any) => uniqBy([...newChannels, ...oldChannels], ({ id }) => id));\n setInitialChannels((oldChannels: any) => uniqBy([...newChannels, ...oldChannels], ({ id }) => id));\n }\n }, [data]);\n\n useEffect(() => {\n if (navigation) {\n navigation.setOptions({\n headerTitleAlign: 'left',\n headerTitleStyle: {\n borderBottomWidth: 1,\n },\n headerLeft: () => (\n <Button onPress={() => navigation.goBack()} variant={'link'}>\n <ButtonText>\n <MaterialIcons name=\"close\" size={24} color=\"black\" />\n </ButtonText>\n </Button>\n ),\n headerRight: () => (\n <Button\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n variant={'link'}\n >\n <ButtonText>Create</ButtonText>\n </Button>\n ),\n // headerLeft:()=><></>,\n // headerRight: () => (\n // <Button onPress={() => navigation.goBack()} variant={'link'}>\n // <ButtonText><MaterialIcons name=\"close\" size={24} color=\"black\" /></ButtonText>\n // </Button>\n // ),\n headerTitle: () => (\n <Box>\n <Text color={colors.black} className=\"text-[15] font-bold\">\n Channels\n </Text>\n </Box>\n ),\n headerStyle: {\n borderBottomWidth: 1,\n borderColor: '#d1d2d3',\n },\n });\n }\n }, [navigation, orgName]);\n\n const openInbox = useCallback(\n (item: any) => {\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: item?.id?.toString(),\n title: item?.title?.toString(),\n totalMembers: item?.members?.length,\n hideTabBar: true,\n });\n },\n [navigation],\n );\n\n const searchChannels = useCallback(\n (text: string) => {\n setSearchQuery(text);\n if (text) {\n const searchedChannel = intialChannels.filter((o: any) =>\n o?.title?.toLowerCase().includes(text?.toLowerCase()),\n );\n setChannels(searchedChannel);\n } else {\n setChannels(intialChannels);\n }\n },\n [intialChannels],\n );\n\n const renderChannelIcon = useCallback((type: RoomType) => {\n if (type === RoomType.Private) {\n return <FontAwesome color={'#525252'} name=\"lock\" size={18} />;\n } else {\n return <Octicons color=\"#525252\" name=\"hash\" size={18} />;\n }\n }, []);\n\n const renderChannelItem = useCallback(\n ({ item }: any) => (\n <Pressable onPress={() => openInbox(item)}>\n {({ pressed }) => (\n <Box\n className={`py-4 ${pressed ? 'bg-gray-100' : 'bg-white'} border-b border-gray-200`}\n style={{ borderBottomColor: colors.gray[300] }}\n >\n <HStack className=\"px-4 items-center\">\n <Box className=\"mr-2\">{renderChannelIcon(item.type)}</Box>\n <VStack>\n <Text\n className=\"font-medium text-lg text-gray-900\"\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {item.title}\n </Text>\n </VStack>\n </HStack>\n </Box>\n )}\n </Pressable>\n ),\n [openInbox, renderChannelIcon],\n );\n\n const renderEmptyList = useCallback(\n () => (\n <Center className=\"flex-1 py-10\">\n {loading ? (\n <VStack className=\"space-y-3 items-center\">\n <Spinner size=\"large\" color={colors.blue[500]} />\n <Text color={colors.gray[600]}>Loading channels...</Text>\n </VStack>\n ) : (\n <VStack className=\"space-y-3 items-center px-4\">\n <Box className=\"rounded-full bg-gray-100 p-4\">\n <Octicons name=\"hash\" size={32} color={colors.gray[400]} />\n </Box>\n <Heading size=\"sm\" style={{ color: colors.gray[800] }}>\n No Channels Found\n </Heading>\n {searchQuery ? (\n <Text className=\"text-center\" style={{ color: colors.gray[600] }}>\n No channels match your search \"{searchQuery}\"\n </Text>\n ) : (\n <Text className=\"text-center\" style={{ color: colors.gray[600] }}>\n Create a new channel to get started\n </Text>\n )}\n <Button\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n className=\"mt-2\"\n >\n <ButtonText>Create Channel</ButtonText>\n </Button>\n </VStack>\n )}\n </Center>\n ),\n [loading, searchQuery, navigation, orgName],\n );\n\n const keyExtractor = useCallback((item: any) => item.id.toString(), []);\n\n const navigateToAddChannel = useCallback(() => {\n navigation.navigate(NavigationRoutes.AddChannel, { orgName });\n }, [navigation, orgName]);\n\n return (\n <SafeAreaView style={styles.safeArea}>\n <StatusBar style=\"dark\" />\n <Box className=\"flex-1 bg-white\">\n <Box className=\"px-4 py-2\" style={styles.searchContainer}>\n <Input\n variant=\"outline\"\n className=\"bg-white rounded-3xl border border-gray-300\"\n style={styles.searchInput}\n size=\"lg\"\n >\n <InputSlot className=\"pl-3\">\n <InputIcon color={colors.gray[500]} as={SearchIcon} />\n </InputSlot>\n <InputField\n type=\"text\"\n size=\"md\"\n placeholder=\"Search channels\"\n placeholderTextColor={colors.gray[400]}\n className=\"px-3 py-2 text-base\"\n value={searchQuery}\n onChange={(event) => searchChannels(event.nativeEvent.text)}\n autoCapitalize=\"none\"\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n />\n </Input>\n </Box>\n\n <Box className=\"flex-1\">\n <FlatList\n contentContainerStyle={styles.flatListContent}\n data={channels}\n keyExtractor={keyExtractor}\n renderItem={renderChannelItem}\n ListEmptyComponent={renderEmptyList}\n showsVerticalScrollIndicator={false}\n initialNumToRender={10}\n maxToRenderPerBatch={10}\n windowSize={10}\n />\n </Box>\n\n {/* <Fab\n onPress={navigateToAddChannel}\n className=\"bg-blue-500 mb-16 mr-4\"\n $pressed-className=\"bg-blue-600\"\n size=\"lg\"\n placement=\"bottom right\"\n >\n <AntDesign color=\"white\" name=\"plus\" size={24} />\n </Fab> */}\n </Box>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: 'white',\n },\n searchContainer: {\n paddingVertical: 10,\n },\n searchInput: {\n borderRadius: 10,\n borderColor: colors.gray[300],\n paddingHorizontal: 10,\n },\n flatListContent: {\n flexGrow: 1,\n paddingBottom: 80,\n },\n channelTitle: {\n color: colors.gray[900],\n fontSize: 16,\n fontWeight: '500',\n },\n channelDescription: {\n color: colors.gray[600],\n fontSize: 14,\n marginTop: 2,\n },\n});\n\nexport default React.memo(Channels);\n"],"names":["React"],"mappings":"21BAiBoB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AACxB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AAC9C,MAAM,qBAAqB,CAAC,QAAA,CAAS,SAAS,QAAS,CAAA,OAAA,EAAS,SAAS,MAAM,CAAA;AAC/E,MAAM,WAAW,CAAC;AAAA,EAChB,UAAA;AAAA,EACA;AACF,CAAW,KAAA;AACT,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,eAAgB,EAAA;AACpB,EAAkB,YAAa;AAC/B,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAgB,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,cAAgB,EAAA,kBAAkB,CAAI,GAAA,QAAA,CAAgB,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA;AACzD,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AACrB,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAA,IAAI,OAAS,EAAA;AACX,MAAQ,OAAA,CAAA;AAAA,QACN,QAAU,EAAA;AAAA,UACR,OAAA;AAAA,UACA,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,KAAO,EAAA;AAAA,OACR,CAAA;AAAA;AAEH,IAAA,OAAO,MAAM;AAAA,KAEb;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,OAAO,CAAC,CAAC,CAAA;AACtB,EAAA,SAAA,CAAU,MAAM;AApDlB,IAAA,IAAA,EAAA,EAAA,EAAA;AAqDI,IAAA,IAAI,IAAM,EAAA;AACR,MAAM,MAAA,WAAA,GAAA,CAAA,CAAc,wCAAM,cAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,OAAO,CAAC,CAAA,KAAW,CAAE,CAAA,IAAA,KAAS,QAAS,CAAA,MAAA,CAAA,KAA7D,mBAAsE,IAAK,CAAA,CAAC,GAAQ,CAAW,KAAA,CAAA,CAAE,MAAM,aAAc,CAAA,CAAA,CAAE,KAAK,CAAA,CAAA,KAAM,EAAC;AACvJ,MAAY,WAAA,CAAA,CAAC,gBAAqB,MAAO,CAAA,CAAC,GAAG,WAAa,EAAA,GAAG,WAAW,CAAA,EAAG,CAAC;AAAA,QAC1E;AAAA,OACF,KAAM,EAAE,CAAC,CAAA;AACT,MAAmB,kBAAA,CAAA,CAAC,gBAAqB,MAAO,CAAA,CAAC,GAAG,WAAa,EAAA,GAAG,WAAW,CAAA,EAAG,CAAC;AAAA,QACjF;AAAA,OACF,KAAM,EAAE,CAAC,CAAA;AAAA;AACX,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AACT,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,UAAA,CAAW,UAAW,CAAA;AAAA,QACpB,gBAAkB,EAAA,MAAA;AAAA,QAClB,gBAAkB,EAAA;AAAA,UAChB,iBAAmB,EAAA;AAAA,SACrB;AAAA,QACA,UAAA,EAAY,sBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAS,MAAM,UAAA,CAAW,MAAO,EAAA,EAAG,OAAS,EAAA,MAAA,EAAA,+CACtD,UACG,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,iBAAc,IAAK,EAAA,OAAA,EAAQ,MAAM,EAAI,EAAA,KAAA,EAAM,OAAQ,EAAA,CACxD,CACJ,CAAA;AAAA,QACZ,WAAA,EAAa,sBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAS,MAAM,UAAA,CAAW,QAAS,CAAA,gBAAA,CAAiB,UAAY,EAAA;AAAA,UACzF;AAAA,SACD,CAAG,EAAA,OAAA,EAAS,0BACIA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,IAAA,EAAW,QAAM,CACtB,CAAA;AAAA,QAOZ,WAAa,EAAA,sBAAOA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,KAAO,EAAA,SAAA,EAAU,qBAAsB,EAAA,EAAA,UAE3D,CACJ,CAAA;AAAA,QACZ,WAAa,EAAA;AAAA,UACX,iBAAmB,EAAA,CAAA;AAAA,UACnB,WAAa,EAAA;AAAA;AACf,OACD,CAAA;AAAA;AACH,GACC,EAAA,CAAC,UAAY,EAAA,OAAO,CAAC,CAAA;AACxB,EAAM,MAAA,SAAA,GAAY,WAAY,CAAA,CAAC,IAAc,KAAA;AAlG/C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmGI,IAAW,UAAA,CAAA,QAAA,CAAS,iBAAiB,cAAgB,EAAA;AAAA,MACnD,SAAA,EAAA,CAAW,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,KAAN,IAAU,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,EAAA;AAAA,MACrB,KAAA,EAAA,CAAO,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,KAAN,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,EAAA;AAAA,MACpB,YAAA,EAAA,CAAc,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,OAAA,KAAN,IAAe,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA;AAAA,MAC7B,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACH,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAM,MAAA,cAAA,GAAiB,WAAY,CAAA,CAAC,IAAiB,KAAA;AACnD,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,MAAO,CAAA,CAAC,CAAQ,KAAA;AA7G7D,QAAA,IAAA,EAAA;AA6GgE,QAAA,OAAA,CAAA,EAAA,GAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,KAAH,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,WAAc,EAAA,CAAA,QAAA,CAAS,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,WAAA,EAAA,CAAA;AAAA,OAAc,CAAA;AAC/G,MAAA,WAAA,CAAY,eAAe,CAAA;AAAA,KACtB,MAAA;AACL,MAAA,WAAA,CAAY,cAAc,CAAA;AAAA;AAC5B,GACF,EAAG,CAAC,cAAc,CAAC,CAAA;AACnB,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,CAAC,IAAmB,KAAA;AACxD,IAAI,IAAA,IAAA,KAAS,SAAS,OAAS,EAAA;AAC7B,MAAA,oDAAQ,WAAY,EAAA,EAAA,KAAA,EAAO,WAAW,IAAK,EAAA,MAAA,EAAO,MAAM,EAAI,EAAA,CAAA;AAAA,KACvD,MAAA;AACL,MAAA,oDAAQ,QAAS,EAAA,EAAA,KAAA,EAAM,WAAU,IAAK,EAAA,MAAA,EAAO,MAAM,EAAI,EAAA,CAAA;AAAA;AACzD,GACF,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,iBAAA,GAAoB,YAAY,CAAC;AAAA,IACrC;AAAA,GACF,kDAAY,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,SAAU,CAAA,IAAI,KACpC,CAAC;AAAA,IACZ;AAAA,GACF,kDAAO,GAAI,EAAA,EAAA,SAAA,EAAW,QAAQ,OAAU,GAAA,aAAA,GAAgB,uCAAuC,KAAO,EAAA;AAAA,IACpG,iBAAA,EAAmB,OAAO,IAAK,CAAA,GAAA;AAAA,GAEb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,SAAA,EAAU,uCACbA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,MAAA,EAAA,EAAQ,kBAAkB,IAAK,CAAA,IAAI,CAAE,CAAA,+CACnD,MACG,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,mCAAoC,EAAA,aAAA,EAAe,CAAG,EAAA,aAAA,EAAc,UAC/E,IAAK,CAAA,KACV,CACJ,CACJ,CACJ,CACR,CAAA,EAAc,CAAC,SAAA,EAAW,iBAAiB,CAAC,CAAA;AACtD,EAAM,MAAA,eAAA,GAAkB,WAAY,CAAA,sBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,WAAU,cAC7C,EAAA,EAAA,OAAA,mBAAWA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,wBAAA,EAAA,+CACpB,OAAQ,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,CAAK,GAAM,CAAA,EAAA,CAAA,kBAC9CA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAA,EAAA,EAAM,qBAAmB,CACtD,CAAA,mBAAaA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,6BAAA,EAAA,+CACzB,GAAI,EAAA,EAAA,SAAA,EAAU,8BACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,QAAO,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAA,EAAM,CAC7D,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,IAAK,EAAA,IAAA,EAAK,KAAO,EAAA;AAAA,IAC1C,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA;AAAA,GACrB,EAAA,EAAG,mBAEe,CACC,EAAA,WAAA,gDAAe,IAAK,EAAA,EAAA,SAAA,EAAU,eAAc,KAAO,EAAA;AAAA,IACpE,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA;AAAA,GACrB,EAAA,EAAG,mCACuD,WAAY,EAAA,GAChD,oBAAWA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,aAAA,EAAc,KAAO,EAAA;AAAA,IACnE,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA;AAAA,GACrB,EAAA,EAAG,qCAEmB,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAS,MAAM,UAAA,CAAW,QAAS,CAAA,gBAAA,CAAiB,UAAY,EAAA;AAAA,IACxF;AAAA,GACD,CAAG,EAAA,SAAA,EAAU,MACQ,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,kBAAW,gBAAc,CAC9B,CACJ,CACR,GAAW,CAAC,OAAA,EAAS,WAAa,EAAA,UAAA,EAAY,OAAO,CAAC,CAAA;AAChE,EAAM,MAAA,YAAA,GAAe,YAAY,CAAC,IAAA,KAAc,KAAK,EAAG,CAAA,QAAA,EAAY,EAAA,EAAE,CAAA;AACtE,EAA6B,YAAY,MAAM;AAC7C,IAAW,UAAA,CAAA,QAAA,CAAS,iBAAiB,UAAY,EAAA;AAAA,MAC/C;AAAA,KACD,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,OAAO,CAAC;AACxB,EAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAa,KAAO,EAAA,MAAA,CAAO,4BACxBA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,KAAM,EAAA,MAAA,EAAO,CACxB,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,SAAU,EAAA,iBAAA,EAAA,kBACVA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,WAAA,EAAY,OAAO,MAAO,CAAA,eAAA,EAAA,kBACpCA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,OAAQ,EAAA,SAAA,EAAU,WAAU,6CAA8C,EAAA,KAAA,EAAO,OAAO,WAAa,EAAA,IAAA,EAAK,wBAC5GA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,SAAU,EAAA,MAAA,EAAA,kBAChBA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,MAAO,CAAA,IAAA,CAAK,GAAM,CAAA,EAAA,EAAA,EAAI,UAAY,EAAA,CACxD,mBACCA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,IAAK,EAAA,MAAA,EAAO,IAAK,EAAA,IAAA,EAAK,aAAY,iBAAkB,EAAA,oBAAA,EAAsB,OAAO,IAAK,CAAA,GAAA,CAAA,EAAM,WAAU,qBAAsB,EAAA,KAAA,EAAO,WAAa,EAAA,QAAA,EAAU,CAAS,KAAA,KAAA,cAAA,CAAe,MAAM,WAAY,CAAA,IAAI,CAAG,EAAA,cAAA,EAAe,MAAO,EAAA,WAAA,EAAa,OAAO,eAAgB,EAAA,eAAA,EAAgB,CACrS,CACJ,CAEA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,SAAU,EAAA,QAAA,EAAA,+CACV,QAAS,EAAA,EAAA,qBAAA,EAAuB,OAAO,eAAiB,EAAA,IAAA,EAAM,QAAU,EAAA,YAAA,EAA4B,UAAY,EAAA,iBAAA,EAAmB,oBAAoB,eAAiB,EAAA,4BAAA,EAA8B,KAAO,EAAA,kBAAA,EAAoB,EAAI,EAAA,mBAAA,EAAqB,IAAI,UAAY,EAAA,EAAA,EAAI,CACnR,CAWJ,CACJ,CAAA;AACR,CAAA;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,YAAc,EAAA,EAAA;AAAA,IACd,WAAA,EAAa,OAAO,IAAK,CAAA,GAAA,CAAA;AAAA,IACzB,iBAAmB,EAAA;AAAA,GACrB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,QAAU,EAAA,CAAA;AAAA,IACV,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA;AAAA,IACnB,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA;AAAA,IACnB,QAAU,EAAA,EAAA;AAAA,IACV,SAAW,EAAA;AAAA;AAEf,CAAC,CAAA;AACD,iBAAeA,cAAA,CAAM,KAAK,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"Channels.js","sources":["../../../src/screens/Channels/Channels.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { StyleSheet, TouchableHighlight, Dimensions, SafeAreaView, Platform } from 'react-native';\nimport {\n Input,\n InputField,\n InputSlot,\n InputIcon,\n SearchIcon,\n Button,\n ButtonText,\n View,\n Text,\n VStack,\n Box,\n Fab,\n FlatList,\n Divider,\n HStack,\n SectionList,\n Center,\n Heading,\n Spinner,\n Avatar,\n Badge,\n BadgeText,\n Pressable,\n} from '@admin-layout/gluestack-ui-mobile';\nimport Colors from '../../constants/Colors';\nimport { NavigationRoutes } from '../../constants/routes';\nimport { AntDesign } from '@expo/vector-icons';\n// import VirtualizedScrollView from '../VirtualizedScrollView';\nimport { RoomType } from 'common';\nimport { useChannelsQuery } from '../../queries/slackuiQueries';\nimport { useIsFocused, useFocusEffect, useNavigation } from '@react-navigation/native';\n// import { navigationRef } from '@common-stack/client-react';\nimport { FontAwesome, Feather, Octicons, MaterialIcons } from '@expo/vector-icons';\nimport colors from 'tailwindcss/colors';\nimport { StatusBar } from 'expo-status-bar';\nimport { NavigationHeader, ChannelsByAlphabeticalAccordion } from '../../components';\nimport { useDrawerLayout } from '../../hooks';\nimport { startCase, orderBy, uniqBy } from 'lodash-es';\n\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\nconst Channels = ({ navigation, route }: any) => {\n const { orgName } = useDrawerLayout();\n const isFocused = useIsFocused();\n const [channels, setChannels] = useState<any[]>([]);\n const [intialChannels, setInitialChannels] = useState<any[]>([]);\n const [searchQuery, setSearchQuery] = useState<string>('');\n\n const { data, loading, error, refetch } = useChannelsQuery();\n\n useFocusEffect(\n useCallback(() => {\n if (orgName) {\n refetch({\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 50,\n });\n }\n return () => {\n // Cleanup\n };\n }, [orgName, refetch]),\n );\n\n useEffect(() => {\n if (data) {\n const newChannels =\n data?.channelsByUser\n ?.filter((i: any) => i.type !== RoomType.Direct)\n ?.sort((a: any, b: any) => a.title.localeCompare(b.title)) || [];\n\n setChannels((oldChannels: any) => uniqBy([...newChannels, ...oldChannels], ({ id }) => id));\n setInitialChannels((oldChannels: any) => uniqBy([...newChannels, ...oldChannels], ({ id }) => id));\n }\n }, [data]);\n\n useEffect(() => {\n if (navigation) {\n navigation.setOptions({\n headerTitleAlign: 'left',\n headerTitleStyle: {\n borderBottomWidth: 1,\n },\n headerLeft: () => (\n <Button\n //onPress={() => navigation.goBack()}\n onPress={() => {\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 variant={'link'}\n >\n <ButtonText>\n <MaterialIcons name=\"close\" size={24} color=\"black\" />\n </ButtonText>\n </Button>\n ),\n headerRight: () => (\n <Button\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n variant={'link'}\n >\n <ButtonText>Create</ButtonText>\n </Button>\n ),\n // headerLeft:()=><></>,\n // headerRight: () => (\n // <Button onPress={() => navigation.goBack()} variant={'link'}>\n // <ButtonText><MaterialIcons name=\"close\" size={24} color=\"black\" /></ButtonText>\n // </Button>\n // ),\n headerTitle: () => (\n <Box>\n <Text color={colors.black} className=\"text-[15] font-bold\">\n Channels\n </Text>\n </Box>\n ),\n headerStyle: {\n borderBottomWidth: 1,\n borderColor: '#d1d2d3',\n },\n });\n }\n }, [navigation, orgName]);\n\n const openInbox = useCallback(\n (item: any) => {\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: item?.id?.toString(),\n title: item?.title?.toString(),\n totalMembers: item?.members?.length,\n hideTabBar: true,\n });\n },\n [navigation],\n );\n\n const searchChannels = useCallback(\n (text: string) => {\n setSearchQuery(text);\n if (text) {\n const searchedChannel = intialChannels.filter((o: any) =>\n o?.title?.toLowerCase().includes(text?.toLowerCase()),\n );\n setChannels(searchedChannel);\n } else {\n setChannels(intialChannels);\n }\n },\n [intialChannels],\n );\n\n const renderChannelIcon = useCallback((type: RoomType) => {\n if (type === RoomType.Private) {\n return <FontAwesome color={'#525252'} name=\"lock\" size={18} />;\n } else {\n return <Octicons color=\"#525252\" name=\"hash\" size={18} />;\n }\n }, []);\n\n const renderChannelItem = useCallback(\n ({ item }: any) => (\n <Pressable onPress={() => openInbox(item)}>\n {({ pressed }) => (\n <Box\n className={`py-4 ${pressed ? 'bg-gray-100' : 'bg-white'} border-b border-gray-200`}\n style={{ borderBottomColor: colors.gray[300] }}\n >\n <HStack className=\"px-4 items-center\">\n <Box className=\"mr-2\">{renderChannelIcon(item.type)}</Box>\n <VStack>\n <Text\n className=\"font-medium text-lg text-gray-900\"\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {item.title}\n </Text>\n </VStack>\n </HStack>\n </Box>\n )}\n </Pressable>\n ),\n [openInbox, renderChannelIcon],\n );\n\n const renderEmptyList = useCallback(\n () => (\n <Center className=\"flex-1 py-10\">\n {loading ? (\n <VStack className=\"space-y-3 items-center\">\n <Spinner size=\"large\" color={colors.blue[500]} />\n <Text color={colors.gray[600]}>Loading channels...</Text>\n </VStack>\n ) : (\n <VStack className=\"space-y-3 items-center px-4\">\n <Box className=\"rounded-full bg-gray-100 p-4\">\n <Octicons name=\"hash\" size={32} color={colors.gray[400]} />\n </Box>\n <Heading size=\"sm\" style={{ color: colors.gray[800] }}>\n No Channels Found\n </Heading>\n {searchQuery ? (\n <Text className=\"text-center\" style={{ color: colors.gray[600] }}>\n No channels match your search \"{searchQuery}\"\n </Text>\n ) : (\n <Text className=\"text-center\" style={{ color: colors.gray[600] }}>\n Create a new channel to get started\n </Text>\n )}\n <Button\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n className=\"mt-2\"\n >\n <ButtonText>Create Channel</ButtonText>\n </Button>\n </VStack>\n )}\n </Center>\n ),\n [loading, searchQuery, navigation, orgName],\n );\n\n const keyExtractor = useCallback((item: any) => item.id.toString(), []);\n\n const navigateToAddChannel = useCallback(() => {\n navigation.navigate(NavigationRoutes.AddChannel, { orgName });\n }, [navigation, orgName]);\n\n return (\n <SafeAreaView style={styles.safeArea}>\n <StatusBar style=\"dark\" />\n <Box className=\"flex-1 bg-white\">\n <Box className=\"px-4 py-2\" style={styles.searchContainer}>\n <Input\n variant=\"outline\"\n className=\"bg-white rounded-3xl border border-gray-300\"\n style={styles.searchInput}\n size=\"lg\"\n >\n <InputSlot className=\"pl-3\">\n <InputIcon color={colors.gray[500]} as={SearchIcon} />\n </InputSlot>\n <InputField\n type=\"text\"\n size=\"md\"\n placeholder=\"Search channels\"\n placeholderTextColor={colors.gray[400]}\n className=\"px-3 py-2 text-base\"\n value={searchQuery}\n onChange={(event) => searchChannels(event.nativeEvent.text)}\n autoCapitalize=\"none\"\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n />\n </Input>\n </Box>\n\n <Box className=\"flex-1\">\n <FlatList\n contentContainerStyle={styles.flatListContent}\n data={channels}\n keyExtractor={keyExtractor}\n renderItem={renderChannelItem}\n ListEmptyComponent={renderEmptyList}\n showsVerticalScrollIndicator={false}\n initialNumToRender={10}\n maxToRenderPerBatch={10}\n windowSize={10}\n />\n </Box>\n\n {/* <Fab\n onPress={navigateToAddChannel}\n className=\"bg-blue-500 mb-16 mr-4\"\n $pressed-className=\"bg-blue-600\"\n size=\"lg\"\n placement=\"bottom right\"\n >\n <AntDesign color=\"white\" name=\"plus\" size={24} />\n </Fab> */}\n </Box>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: 'white',\n },\n searchContainer: {\n paddingVertical: 10,\n },\n searchInput: {\n borderRadius: 10,\n borderColor: colors.gray[300],\n paddingHorizontal: 10,\n },\n flatListContent: {\n flexGrow: 1,\n paddingBottom: 80,\n },\n channelTitle: {\n color: colors.gray[900],\n fontSize: 16,\n fontWeight: '500',\n },\n channelDescription: {\n color: colors.gray[600],\n fontSize: 14,\n marginTop: 2,\n },\n});\n\nexport default React.memo(Channels);\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Ionicons,AntDesign,MaterialCommunityIcons,FontAwesome5}from'@expo/vector-icons';import {useNavigation,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useMemo,useCallback,createContext}from'react';import {Share,TouchableHighlight,Dimensions}from'react-native';import {useSelector,shallowEqual}from'react-redux';import styles from'./styles.js';import {
|
|
1
|
+
import {Ionicons,AntDesign,MaterialCommunityIcons,FontAwesome5}from'@expo/vector-icons';import {useNavigation,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useMemo,useCallback,createContext}from'react';import {Share,TouchableHighlight,Dimensions}from'react-native';import {useSelector,shallowEqual}from'react-redux';import styles from'./styles.js';import {Center,Text,HStack,Box,Icon,AddIcon,Spinner,Divider,Fab}from'@admin-layout/gluestack-ui-mobile';import {RoomType}from'common';import {useSetDeviceTokenMutation,useOrganizationSharableLinkQuery}from'../../queries/slackuiQueries.js';import VirtualizedScrollView from'../../components/VirtualizedScrollView/VirtualizedScrollView.js';import {useDrawerLayout}from'../../hooks/useDrawerLayout.js';import {useDisclose}from'../../hooks/useDisclose.js';import {useExpoNotification}from'../../hooks/useExpoNotificationProvider.js';import Teams from'./Components/Teams/Teams.js';import Channels from'./Components/Channels/Channels.js';import DirectChannels from'./Components/DirectChannels/DirectChannels.js';import TopCommonSlider from'./Components/TopCommonSlider/TopCommonSlider.js';import {InviteMembers}from'./Components/InviteMembers/index.js';import Colors from'../../constants/Colors.js';import'../../constants/device.js';import'../../constants/globalStyles.js';import'../../constants/Layout.js';import {NavigationRoutes}from'../../constants/routes.js';import'@react-navigation/core';import'../../components/Header/styles.js';import'../../components/Tiles/styles.js';import'../../components/CustomDrawer/CustomDrawer.js';import'../../components/CustomBottomTabs/CustomBottomTabs.js';import'../../components/NavigationHeader/NavigationHeader.js';import'@react-navigation/elements';import'@common-stack/client-react';import'../../components/NavigationHeader/InboxNavigationHeader.js';import colors from'tailwindcss/colors';import'../../components/WorkSpaceDrawer/WorkSpaceDrawer.js';import'../../components/Channels/ChannelsByAlphabeticalAccordion.js';import'../../components/SlackSearchInput/index.js';import'../../components/AppRootContextProviderComponent.js';import {Actionsheet as ActionSheet}from'../../components/Actionsheet.js';import {config}from'../../config/env-config.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
3
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
4
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
@@ -178,6 +178,6 @@ const Home = React__default.memo((props) => {
|
|
|
178
178
|
};
|
|
179
179
|
}, []));
|
|
180
180
|
if (!orgName)
|
|
181
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
181
|
+
return /* @__PURE__ */ React__default.createElement(Center, { className: "flex-1 bg-white" }, /* @__PURE__ */ React__default.createElement(Text, null, "No Organization found"));
|
|
182
182
|
return /* @__PURE__ */ React__default.createElement(HomeScreen, __spreadValues({}, props));
|
|
183
183
|
});export{RefetchContext,Home as default};//# sourceMappingURL=HomeScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import { Ionicons, AntDesign, FontAwesome5, MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport React, { useCallback, useState, useMemo, createContext } from 'react';\nimport { TouchableHighlight, Share, Dimensions } from 'react-native';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport styles from './styles';\nimport {\n Box,\n Avatar,\n Icon,\n AddIcon,\n Text,\n Spinner,\n Center,\n Fab,\n HStack,\n Divider,\n VStack,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { RoomType } from 'common';\nimport { useSetDeviceTokenMutation, useOrganizationSharableLinkQuery } from '../../queries/slackuiQueries';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useDrawerLayout } from '../../hooks/useDrawerLayout';\nimport { useDisclose } from '../../hooks/useDisclose';\nimport { useExpoNotification } from '../../hooks/useExpoNotificationProvider';\nimport { Teams } from './Components/Teams';\nimport { Channels } from './Components/Channels/index';\nimport { DirectChannels } from './Components/DirectChannels';\nimport { TopCommonSlider } from './Components/TopCommonSlider';\nimport { InviteMembers } from './Components/InviteMembers';\nimport { NavigationRoutes, colors } from '../../constants';\nimport { LoadingSpinnerDefault, Actionsheet } from '../../components';\nimport { config } from '../../config';\nimport Colors from 'tailwindcss/colors';\n\nconst windowHeight = Dimensions.get('window').height;\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\n// Create a context to control refetching across child components\nexport const RefetchContext = createContext({\n shouldRefetch: false,\n setRefetchStatus: (status: boolean) => {},\n});\n\nconst HomeScreen = ({ navigation, route }) => {\n const user = useSelector((state: any) => state.user, shallowEqual);\n const { isOpen, onOpen, onClose } = useDisclose();\n const { setSwipeEnabled, orgName, organizationDetail } = useDrawerLayout();\n const { expoToken } = useExpoNotification();\n const [setDeviceTokenMutation] = useSetDeviceTokenMutation();\n const [shouldRefetch, setShouldRefetch] = useState(false);\n\n // Memoize the refetch context value\n const refetchContextValue = useMemo(\n () => ({\n shouldRefetch,\n setRefetchStatus: setShouldRefetch,\n }),\n [shouldRefetch],\n );\n\n // Only fetch sharable link when needed (when action sheet is open)\n const { data: organizationSharableLink } = useOrganizationSharableLinkQuery(orgName, {\n fetchPolicy: 'cache-and-network',\n skip: !isOpen,\n });\n\n // Define shareLink before it's used in the memo\n const shareLink = useCallback(async () => {\n try {\n const result = await Share.share({\n message: `${config.APP_NAME} - ${organizationSharableLink?.getOrganizationSharableLink ?? ''}`,\n });\n } catch (error: any) {\n alert(error.message);\n }\n }, [organizationSharableLink?.getOrganizationSharableLink]);\n\n // Memoize action items to prevent unnecessary re-renders\n const actionItems = useMemo(\n () => [\n {\n id: 1,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n backgroundColor: colors.primaryBgColor,\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n }}\n >\n <Ionicons color={'white'} name=\"share-outline\" size={22} />\n <Text className=\"text-white\" style={{ color: 'white', fontWeight: '600', fontSize: 16 }}>\n Share a Link\n </Text>\n </HStack>\n ),\n onPress: async () => await shareLink(),\n },\n {\n id: 2,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n backgroundColor: Colors.gray[50],\n }}\n >\n <AntDesign color={Colors.gray[900]} name=\"adduser\" size={22} />\n <Text style={{ color: Colors.gray[900], fontWeight: '600', fontSize: 16 }}>\n Add from Contacts\n </Text>\n </HStack>\n ),\n onPress: () =>\n navigation.navigate(NavigationRoutes.AddPeopleFromContacts, {\n orgName,\n }),\n },\n {\n id: 3,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n backgroundColor: Colors.gray[50],\n }}\n >\n <MaterialCommunityIcons color={Colors.gray[900]} name=\"email-outline\" size={22} />\n <Text style={{ color: Colors.gray[900], fontWeight: '600', fontSize: 16 }}>Add by Email</Text>\n </HStack>\n ),\n onPress: () =>\n navigation.navigate(NavigationRoutes.AddPeopleByEmail, {\n orgName,\n }),\n },\n ],\n [isOpen, navigation, orgName, shareLink],\n );\n\n // Optimize token handling\n const handlerExpoToken = useCallback(() => {\n if (expoToken) {\n setDeviceTokenMutation({\n variables: {\n deviceToken: expoToken,\n },\n });\n }\n }, [expoToken, setDeviceTokenMutation]);\n\n useFocusEffect(\n useCallback(() => {\n setSwipeEnabled(true);\n handlerExpoToken();\n setShouldRefetch(true);\n\n // Set refetch status to false after a short delay\n const timer = setTimeout(() => {\n setShouldRefetch(false);\n }, 500);\n\n return () => {\n clearTimeout(timer);\n setSwipeEnabled(false);\n };\n }, [orgName, setSwipeEnabled, handlerExpoToken]),\n );\n\n // Memoize the AddTeammates component\n const AddTeammates = useCallback(\n () => (\n <Box style={[styles.bottomContainer, { marginBottom: 8, paddingHorizontal: 16 }]}>\n <TouchableHighlight underlayColor={Colors.gray[50]} onPress={onOpen}>\n <Box className=\"py-3 px-2\">\n <HStack className=\"w-full flex-1 items-center space-x-3\">\n <Box\n style={{\n backgroundColor: Colors.gray[100],\n borderRadius: 20,\n padding: 6,\n }}\n >\n <Icon as={AddIcon} style={{ width: 20, height: 20 }} color={Colors.gray[700]} />\n </Box>\n <Text style={{ fontSize: 15, fontWeight: '500' }} color={Colors.gray[800]}>\n Add teammates\n </Text>\n </HStack>\n </Box>\n </TouchableHighlight>\n\n <Actionsheet\n isOpen={isOpen}\n actionItems={actionItems}\n onCancel={onClose}\n hideBottomWidth={true}\n header={\n <Text\n className=\"text-center font-bold text-lg\"\n style={{\n paddingVertical: 16,\n color: Colors.gray[900],\n }}\n >\n Invite people to join your team\n </Text>\n }\n />\n </Box>\n ),\n [isOpen, onOpen, onClose, actionItems],\n );\n\n if (!orgName) {\n return (\n <Center className=\"flex-1 bg-white\">\n <Spinner size=\"large\" color={colors.primaryBgColor} />\n </Center>\n );\n }\n\n return (\n <RefetchContext.Provider value={refetchContextValue}>\n <VirtualizedScrollView className=\"bg-white flex-1\">\n <Box className=\"flex-1 bg-white pb-10\">\n <TopCommonSlider />\n <Divider style={{ marginVertical: 12 }} />\n <Teams />\n <Divider style={{ marginVertical: 12 }} />\n <Channels />\n <Divider style={{ marginVertical: 12 }} />\n <DirectChannels />\n <Divider style={{ marginVertical: 12 }} />\n {/* <AddTeammates />\n <Divider style={{ marginVertical: 12 }} /> */}\n <InviteMembers />\n </Box>\n </VirtualizedScrollView>\n <Fab\n onPress={() => navigation.navigate(NavigationRoutes.SearchAddChannel, { orgName })}\n size=\"sm\"\n className=\"items-center shadow-lg\"\n style={{ backgroundColor: colors.primaryBgColor, marginBottom: 20, marginRight: 20 }}\n >\n <FontAwesome5 color=\"white\" name=\"edit\" size={18} />\n </Fab>\n </RefetchContext.Provider>\n );\n};\n\n// Memoize the entire Home component\nconst Home = React.memo((props: any) => {\n const user = useSelector((state: any) => state.user, shallowEqual);\n const { orgName } = useDrawerLayout();\n const navigation = useNavigation<any>();\n\n useFocusEffect(\n React.useCallback(() => {\n if (!user?.profile) navigation?.navigate(NavigationRoutes.Login);\n return () => {};\n }, []),\n );\n\n if (!orgName) return <LoadingSpinnerDefault />;\n\n return <HomeScreen {...props} />;\n});\n\nexport default Home;\n"],"names":["React","colors","Colors","Actionsheet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomeScreen.js","sources":["../../../src/screens/Home/HomeScreen.tsx"],"sourcesContent":["import { Ionicons, AntDesign, FontAwesome5, MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport React, { useCallback, useState, useMemo, createContext } from 'react';\nimport { TouchableHighlight, Share, Dimensions } from 'react-native';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport styles from './styles';\nimport {\n Box,\n Avatar,\n Icon,\n AddIcon,\n Text,\n Spinner,\n Center,\n Fab,\n HStack,\n Divider,\n VStack,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { RoomType } from 'common';\nimport { useSetDeviceTokenMutation, useOrganizationSharableLinkQuery } from '../../queries/slackuiQueries';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useDrawerLayout } from '../../hooks/useDrawerLayout';\nimport { useDisclose } from '../../hooks/useDisclose';\nimport { useExpoNotification } from '../../hooks/useExpoNotificationProvider';\nimport { Teams } from './Components/Teams';\nimport { Channels } from './Components/Channels/index';\nimport { DirectChannels } from './Components/DirectChannels';\nimport { TopCommonSlider } from './Components/TopCommonSlider';\nimport { InviteMembers } from './Components/InviteMembers';\nimport { NavigationRoutes, colors } from '../../constants';\nimport { LoadingSpinnerDefault, Actionsheet } from '../../components';\nimport { config } from '../../config';\nimport Colors from 'tailwindcss/colors';\n\nconst windowHeight = Dimensions.get('window').height;\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\n// Create a context to control refetching across child components\nexport const RefetchContext = createContext({\n shouldRefetch: false,\n setRefetchStatus: (status: boolean) => {},\n});\n\nconst HomeScreen = ({ navigation, route }) => {\n const user = useSelector((state: any) => state.user, shallowEqual);\n const { isOpen, onOpen, onClose } = useDisclose();\n const { setSwipeEnabled, orgName, organizationDetail } = useDrawerLayout();\n const { expoToken } = useExpoNotification();\n const [setDeviceTokenMutation] = useSetDeviceTokenMutation();\n const [shouldRefetch, setShouldRefetch] = useState(false);\n\n // Memoize the refetch context value\n const refetchContextValue = useMemo(\n () => ({\n shouldRefetch,\n setRefetchStatus: setShouldRefetch,\n }),\n [shouldRefetch],\n );\n\n // Only fetch sharable link when needed (when action sheet is open)\n const { data: organizationSharableLink } = useOrganizationSharableLinkQuery(orgName, {\n fetchPolicy: 'cache-and-network',\n skip: !isOpen,\n });\n\n // Define shareLink before it's used in the memo\n const shareLink = useCallback(async () => {\n try {\n const result = await Share.share({\n message: `${config.APP_NAME} - ${organizationSharableLink?.getOrganizationSharableLink ?? ''}`,\n });\n } catch (error: any) {\n alert(error.message);\n }\n }, [organizationSharableLink?.getOrganizationSharableLink]);\n\n // Memoize action items to prevent unnecessary re-renders\n const actionItems = useMemo(\n () => [\n {\n id: 1,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n backgroundColor: colors.primaryBgColor,\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n }}\n >\n <Ionicons color={'white'} name=\"share-outline\" size={22} />\n <Text className=\"text-white\" style={{ color: 'white', fontWeight: '600', fontSize: 16 }}>\n Share a Link\n </Text>\n </HStack>\n ),\n onPress: async () => await shareLink(),\n },\n {\n id: 2,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n backgroundColor: Colors.gray[50],\n }}\n >\n <AntDesign color={Colors.gray[900]} name=\"adduser\" size={22} />\n <Text style={{ color: Colors.gray[900], fontWeight: '600', fontSize: 16 }}>\n Add from Contacts\n </Text>\n </HStack>\n ),\n onPress: () =>\n navigation.navigate(NavigationRoutes.AddPeopleFromContacts, {\n orgName,\n }),\n },\n {\n id: 3,\n label: (\n <HStack\n space={'sm'}\n className=\"flex-1 justify-center items-center\"\n style={{\n paddingVertical: 12,\n borderRadius: 8,\n marginHorizontal: 10,\n marginVertical: 5,\n backgroundColor: Colors.gray[50],\n }}\n >\n <MaterialCommunityIcons color={Colors.gray[900]} name=\"email-outline\" size={22} />\n <Text style={{ color: Colors.gray[900], fontWeight: '600', fontSize: 16 }}>Add by Email</Text>\n </HStack>\n ),\n onPress: () =>\n navigation.navigate(NavigationRoutes.AddPeopleByEmail, {\n orgName,\n }),\n },\n ],\n [isOpen, navigation, orgName, shareLink],\n );\n\n // Optimize token handling\n const handlerExpoToken = useCallback(() => {\n if (expoToken) {\n setDeviceTokenMutation({\n variables: {\n deviceToken: expoToken,\n },\n });\n }\n }, [expoToken, setDeviceTokenMutation]);\n\n useFocusEffect(\n useCallback(() => {\n setSwipeEnabled(true);\n handlerExpoToken();\n setShouldRefetch(true);\n\n // Set refetch status to false after a short delay\n const timer = setTimeout(() => {\n setShouldRefetch(false);\n }, 500);\n\n return () => {\n clearTimeout(timer);\n setSwipeEnabled(false);\n };\n }, [orgName, setSwipeEnabled, handlerExpoToken]),\n );\n\n // Memoize the AddTeammates component\n const AddTeammates = useCallback(\n () => (\n <Box style={[styles.bottomContainer, { marginBottom: 8, paddingHorizontal: 16 }]}>\n <TouchableHighlight underlayColor={Colors.gray[50]} onPress={onOpen}>\n <Box className=\"py-3 px-2\">\n <HStack className=\"w-full flex-1 items-center space-x-3\">\n <Box\n style={{\n backgroundColor: Colors.gray[100],\n borderRadius: 20,\n padding: 6,\n }}\n >\n <Icon as={AddIcon} style={{ width: 20, height: 20 }} color={Colors.gray[700]} />\n </Box>\n <Text style={{ fontSize: 15, fontWeight: '500' }} color={Colors.gray[800]}>\n Add teammates\n </Text>\n </HStack>\n </Box>\n </TouchableHighlight>\n\n <Actionsheet\n isOpen={isOpen}\n actionItems={actionItems}\n onCancel={onClose}\n hideBottomWidth={true}\n header={\n <Text\n className=\"text-center font-bold text-lg\"\n style={{\n paddingVertical: 16,\n color: Colors.gray[900],\n }}\n >\n Invite people to join your team\n </Text>\n }\n />\n </Box>\n ),\n [isOpen, onOpen, onClose, actionItems],\n );\n\n if (!orgName) {\n return (\n <Center className=\"flex-1 bg-white\">\n <Spinner size=\"large\" color={colors.primaryBgColor} />\n </Center>\n );\n }\n\n return (\n <RefetchContext.Provider value={refetchContextValue}>\n <VirtualizedScrollView className=\"bg-white flex-1\">\n <Box className=\"flex-1 bg-white pb-10\">\n <TopCommonSlider />\n <Divider style={{ marginVertical: 12 }} />\n <Teams />\n <Divider style={{ marginVertical: 12 }} />\n <Channels />\n <Divider style={{ marginVertical: 12 }} />\n <DirectChannels />\n <Divider style={{ marginVertical: 12 }} />\n {/* <AddTeammates />\n <Divider style={{ marginVertical: 12 }} /> */}\n <InviteMembers />\n </Box>\n </VirtualizedScrollView>\n <Fab\n onPress={() => navigation.navigate(NavigationRoutes.SearchAddChannel, { orgName })}\n size=\"sm\"\n className=\"items-center shadow-lg\"\n style={{ backgroundColor: colors.primaryBgColor, marginBottom: 20, marginRight: 20 }}\n >\n <FontAwesome5 color=\"white\" name=\"edit\" size={18} />\n </Fab>\n </RefetchContext.Provider>\n );\n};\n\n// Memoize the entire Home component\nconst Home = React.memo((props: any) => {\n const user = useSelector((state: any) => state.user, shallowEqual);\n const { orgName } = useDrawerLayout();\n const navigation = useNavigation<any>();\n\n useFocusEffect(\n React.useCallback(() => {\n if (!user?.profile) navigation?.navigate(NavigationRoutes.Login);\n return () => {};\n }, []),\n );\n\n // if (!orgName) return <LoadingSpinnerDefault />;\n if (!orgName)\n return (\n <Center className=\"flex-1 bg-white\">\n <Text>No Organization found</Text>\n </Center>\n );\n\n return <HomeScreen {...props} />;\n});\n\nexport default Home;\n"],"names":["React","colors","Colors","Actionsheet"],"mappings":"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"}
|
|
@@ -18,6 +18,6 @@ var __spreadValues = (a, b) => {
|
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
20
|
const InboxDialogMessagesScreen = (props) => {
|
|
21
|
-
var _a, _b;
|
|
22
|
-
return /* @__PURE__ */ React__default.createElement(DialogMessages, __spreadProps(__spreadValues({}, props), { channelId: (_b = (_a = props == null ? void 0 : props.route) == null ? void 0 : _a.params) == null ? void 0 : _b.channelId }));
|
|
21
|
+
var _a, _b, _c, _d;
|
|
22
|
+
return /* @__PURE__ */ React__default.createElement(DialogMessages, __spreadProps(__spreadValues({}, props), { channelId: (_b = (_a = props == null ? void 0 : props.route) == null ? void 0 : _a.params) == null ? void 0 : _b.channelId, orgName: (_d = (_c = props == null ? void 0 : props.route) == null ? void 0 : _c.params) == null ? void 0 : _d.orgName }));
|
|
23
23
|
};export{InboxDialogMessagesScreen as default};//# sourceMappingURL=InboxDialogMessages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InboxDialogMessages.js","sources":["../../../src/screens/Inbox/InboxDialogMessages.tsx"],"sourcesContent":["import React from 'react';\nimport { DialogMessages } from '@messenger-box/platform-mobile';\n\nconst InboxDialogMessagesScreen = (props: any) => {\n return <DialogMessages
|
|
1
|
+
{"version":3,"file":"InboxDialogMessages.js","sources":["../../../src/screens/Inbox/InboxDialogMessages.tsx"],"sourcesContent":["import React from 'react';\nimport { DialogMessages } from '@messenger-box/platform-mobile';\n\nconst InboxDialogMessagesScreen = (props: any) => {\n return (\n <DialogMessages\n {...props}\n channelId={props?.route?.params?.channelId}\n orgName={props?.route?.params?.orgName}\n />\n );\n};\n\nexport default InboxDialogMessagesScreen;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAEM,MAAA,yBAAA,GAA4B,CAAC,KAAe,KAAA;AAFlD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAGE,EAAA,oDAAQ,cAAmB,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAA,EAAnB,EAA0B,SAAA,EAAA,CAAW,0CAAO,KAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,MAAd,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,WAAW,OAAS,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAP,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,KAAd,mBAAsB,OAAS,EAAA,CAAA,CAAA;AACxH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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,Dimensions}from'react-native';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 {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector}from'react-redux';import colors from'tailwindcss/colors';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 {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 = ({
|
|
@@ -63,6 +63,22 @@ const AddPeopleByEmail = ({
|
|
|
63
63
|
flex: 1
|
|
64
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: () => {
|
|
65
65
|
setEmail("");
|
|
66
|
-
|
|
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
|
+
}
|
|
67
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" })));
|
|
68
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 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 }}\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":"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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":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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';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
|
}) => {
|
|
@@ -75,9 +75,34 @@ import React__default,{useState,useEffect}from'react';import {Button,ButtonText,
|
|
|
75
75
|
headerTitleStyle: {
|
|
76
76
|
fontWeight: "600"
|
|
77
77
|
},
|
|
78
|
-
headerLeft: (props) => /* @__PURE__ */ React__default.createElement(
|
|
79
|
-
|
|
80
|
-
|
|
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
|
+
),
|
|
81
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"))
|
|
82
107
|
});
|
|
83
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddFromContacts.js","sources":["../../../src/screens/Peoples/AddFromContacts.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Input,\n InputField,\n View,\n Text,\n VStack,\n Box,\n Button,\n ButtonText,\n CheckIcon,\n FlatList,\n HStack,\n Avatar,\n AvatarImage,\n AvatarFallbackText,\n Image,\n Checkbox,\n CheckboxIndicator,\n CheckboxIcon,\n Heading,\n Spinner,\n InputSlot,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { StyleSheet, TouchableOpacity, Linking, Platform } from 'react-native';\nimport Colors from '../../constants/Colors';\nimport { useOrganizationSharableLinkQuery, useSendOrganizationInvitationMutation } from '../../queries/slackuiQueries';\nimport { AntDesign, Ionicons, Feather } from '@expo/vector-icons';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useIsFocused } from '@react-navigation/native';\nimport * as Contacts from 'expo-contacts';\nimport { config } from '../../config';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useSelector } from 'react-redux';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\n\nconst AddFromContacts = ({ navigation, route }: any) => {\n const isFocused = useIsFocused();\n const [contacts, setContacts] = useState<any[]>([]);\n const [filteredContacts, setFilteredContacts] = useState<any[]>([]);\n const [selectedContacts, setSelectedContacts] = useState<any>([]);\n const [searchQuery, setSearchQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const orgName = route?.params?.orgName || '';\n const { data: organizationSharableLink } = useOrganizationSharableLinkQuery(orgName);\n const [sendOrganizationInvitation] = useSendOrganizationInvitationMutation();\n const user = useSelector(userSelector);\n\n useEffect(() => {\n if (searchQuery.trim() === '') {\n setFilteredContacts(contacts);\n } else {\n const filtered = contacts.filter((contact) => {\n const fullName = `${contact.firstName || ''} ${contact.lastName || ''}`.toLowerCase();\n const phoneNumber = contact.phoneNumbers?.[0]?.number?.toLowerCase() || '';\n const query = searchQuery.toLowerCase();\n return fullName.includes(query) || phoneNumber.includes(query);\n });\n setFilteredContacts(filtered);\n }\n }, [searchQuery, contacts]);\n\n useEffect(() => {\n (async () => {\n try {\n setLoading(true);\n const { status } = await Contacts.requestPermissionsAsync();\n if (status === 'granted') {\n const { data } = await Contacts.getContactsAsync({\n fields: [\n Contacts.Fields.FirstName,\n Contacts.Fields.LastName,\n Contacts.Fields.PhoneNumbers,\n Contacts.Fields.Image,\n Contacts.Fields.ImageAvailable,\n ],\n });\n\n if (data.length > 0) {\n // Sort contacts alphabetically by name\n const sortedContacts = data.sort((a, b) => {\n const nameA = `${a.firstName || ''} ${a.lastName || ''}`.trim().toLowerCase();\n const nameB = `${b.firstName || ''} ${b.lastName || ''}`.trim().toLowerCase();\n return nameA.localeCompare(nameB);\n });\n\n // Filter out contacts without phone numbers\n const validContacts = sortedContacts.filter(\n (contact) => contact.phoneNumbers && contact.phoneNumbers.length > 0,\n );\n\n // Log information about contact images\n console.log(`Total contacts with phone numbers: ${validContacts.length}`);\n const contactsWithImages = validContacts.filter(\n (contact) => contact.imageAvailable && contact.image,\n );\n console.log(`Contacts with images: ${contactsWithImages.length}`);\n if (contactsWithImages.length > 0) {\n console.log('Sample image data:', contactsWithImages[0].image);\n }\n\n setContacts(validContacts);\n setFilteredContacts(validContacts);\n }\n }\n } catch (error) {\n console.error('Error fetching contacts:', error);\n } finally {\n setLoading(false);\n }\n })();\n }, []);\n\n useEffect(() => {\n if (isFocused) {\n navigation.setOptions({\n headerShown: true,\n headerTitleAlign: 'left',\n title: 'Add from Contacts',\n headerTitleStyle: {\n fontWeight: '600',\n },\n headerLeft: (props: any) => (\n <TouchableOpacity style={{ paddingHorizontal: 10 }} onPress={() => navigation.goBack()}>\n <Ionicons color={Colors.slackBlack} name=\"chevron-back\" size={20} />\n </TouchableOpacity>\n ),\n headerRight: (props: any) => (\n <Button\n className=\"mr-2\"\n onPress={() => sendInvitation()}\n disabled={selectedContacts.length === 0}\n variant={'link'}\n >\n <ButtonText\n className={`${selectedContacts.length > 0 ? 'text-black font-bold' : 'text-gray-500'}`}\n >\n Send\n </ButtonText>\n </Button>\n ),\n });\n }\n }, [isFocused, navigation, selectedContacts]);\n\n const toggleContact = (item: any) => {\n if (!item.phoneNumbers || item.phoneNumbers.length === 0) return;\n\n const contact = {\n id: item.id,\n name: `${item.firstName || ''} ${item.lastName || ''}`.trim(),\n mobile: item.phoneNumbers[0],\n };\n\n setSelectedContacts((prev) => {\n const isSelected = prev.some((c: any) => c.id === contact.id);\n if (isSelected) {\n return prev.filter((c: any) => c.id !== contact.id);\n } else {\n return [...prev, contact];\n }\n });\n };\n\n const getInitials = (firstName?: string, lastName?: string) => {\n const first = firstName ? firstName.charAt(0).toUpperCase() : '';\n const last = lastName ? lastName.charAt(0).toUpperCase() : '';\n return (first + last).substring(0, 2);\n };\n\n const renderContactList = ({ item }: any) => {\n const isSelected = selectedContacts.some((c: any) => c.id === item.id);\n const hasPhoneNumber = item.phoneNumbers && item.phoneNumbers.length > 0;\n const initials = getInitials(item.firstName, item.lastName);\n\n if (!hasPhoneNumber) return null;\n\n return (\n <TouchableOpacity\n key={item.id}\n onPress={() => toggleContact(item)}\n style={styles.contactItem}\n disabled={!hasPhoneNumber}\n activeOpacity={0.7}\n >\n <HStack space=\"md\" className=\"justify-between items-center w-full\">\n <HStack space=\"md\" className=\"items-center space-x-3\">\n {item.imageAvailable && item.image && item.image.uri ? (\n <Avatar size=\"md\" className=\"bg-gray-400\">\n <AvatarImage\n source={{ uri: item.image.uri }}\n alt={`${item.firstName || ''} ${item.lastName || ''}`.trim()}\n onError={(e) => console.log('Avatar image failed to load', e.nativeEvent.error)}\n style={styles.avatarImage}\n />\n <AvatarFallbackText>{initials}</AvatarFallbackText>\n </Avatar>\n ) : (\n <Avatar size=\"md\" className=\"bg-blue-500\">\n <AvatarFallbackText style={styles.avatarText}>{initials}</AvatarFallbackText>\n </Avatar>\n )}\n\n <Box>\n <Text className=\"text-gray-800 font-semibold text-base\">\n {item.firstName || ''} {item.lastName || ''}\n </Text>\n <Text className=\"text-gray-500 text-sm\">\n {item.phoneNumbers?.[0]?.number || 'No number'}\n </Text>\n </Box>\n </HStack>\n\n <Checkbox\n value={item.id}\n isChecked={isSelected}\n accessibilityLabel={`Select ${item.firstName}`}\n aria-label={`Select ${item.firstName}`}\n >\n <CheckboxIndicator className={isSelected ? 'bg-blue-500 border-blue-500' : ''}>\n <CheckboxIcon as={CheckIcon} />\n </CheckboxIndicator>\n </Checkbox>\n </HStack>\n </TouchableOpacity>\n );\n };\n\n const sendInvitation = () => {\n if (selectedContacts.length === 0) return;\n\n // Get phone numbers to send SMS invites\n const mobileNumbers = selectedContacts.map((i: any) => i.mobile.number);\n\n // Send organization invitation through the API\n sendOrganizationInvitation({\n variables: {\n request: {\n orgName: orgName,\n emails: mobileNumbers.map((num) => num.replace(/\\s/g, '')), // Use emails field for phone numbers\n invitedBy: user?.profile?.name || '',\n sentInvitee: true,\n },\n },\n onCompleted: (data) => {\n console.log('Organization invitation sent successfully:', data);\n // After sending invitations through API, send SMS with link\n sendSMSInvitations();\n },\n onError: (error) => {\n console.error('Error sending invitations:', error);\n // Still attempt to send SMS if API fails\n sendSMSInvitations();\n },\n });\n };\n\n const sendSMSInvitations = () => {\n const mobileNumbers = selectedContacts.map((i: any) => i.mobile.number);\n let numbers = '';\n mobileNumbers.forEach((phoneNumber: string) => {\n numbers += `${phoneNumber.replace(/\\s/g, '')},`;\n });\n numbers = numbers.slice(0, -1);\n\n const message = `Join me on ${\n config.APP_NAME\n } - it's a faster, simpler way to work. Sign up here from any device: ${\n organizationSharableLink?.getOrganizationSharableLink ?? ''\n }`;\n\n const url =\n Platform.OS === 'android'\n ? `sms:${numbers}?body=${encodeURIComponent(message)}`\n : `sms:/open?addresses=${numbers}&body=${encodeURIComponent(message)}`;\n Linking.openURL(url);\n };\n\n return (\n <SafeAreaView style={styles.container}>\n <Box className=\"flex-1 bg-white\">\n <Box className=\"px-4 py-2 bg-white\">\n <Input size=\"md\" className=\"bg-gray-100 rounded-lg\">\n <InputSlot>\n <Feather name=\"search\" size={16} color=\"#9ca3af\" style={{ marginLeft: 8 }} />\n </InputSlot>\n <InputField\n placeholder=\"Search contacts\"\n placeholderTextColor=\"#9ca3af\"\n onChange={(event) => setSearchQuery(event.nativeEvent.text)}\n value={searchQuery}\n autoCapitalize=\"none\"\n autoCorrect={false}\n className=\"text-black\"\n />\n {searchQuery ? (\n <InputSlot>\n <TouchableOpacity onPress={() => setSearchQuery('')} style={{ marginRight: 8 }}>\n <Ionicons name=\"close-circle\" size={16} color=\"#9ca3af\" />\n </TouchableOpacity>\n </InputSlot>\n ) : null}\n </Input>\n </Box>\n\n {loading ? (\n <Box className=\"flex-1 justify-center items-center\">\n <Spinner size=\"large\" color={Colors.blue} />\n <Text className=\"mt-4 text-gray-500\">Loading contacts...</Text>\n </Box>\n ) : (\n <Box className=\"flex-1\">\n {selectedContacts.length > 0 && (\n <Box className=\"px-4 py-2 bg-gray-50 border-b border-gray-200\">\n <Text className=\"text-sm text-gray-500\">\n {selectedContacts.length} {selectedContacts.length === 1 ? 'contact' : 'contacts'}{' '}\n selected\n </Text>\n </Box>\n )}\n\n <FlatList\n data={filteredContacts}\n renderItem={renderContactList}\n keyExtractor={(item) => item.id}\n contentContainerStyle={styles.listContainer}\n ListEmptyComponent={() => (\n <Box className=\"flex-1 justify-center items-center py-8\">\n <Feather name=\"users\" size={48} color=\"#d1d5db\" />\n <Text className=\"text-center text-gray-500 mt-4\">\n {searchQuery ? 'No matching contacts found' : 'No contacts found'}\n </Text>\n </Box>\n )}\n />\n </Box>\n )}\n </Box>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n listContainer: {\n flexGrow: 1,\n },\n contactItem: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#f3f4f6',\n },\n avatarText: {\n color: 'white',\n fontWeight: '600',\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default AddFromContacts;\n"],"names":["_a","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddFromContacts.js","sources":["../../../src/screens/Peoples/AddFromContacts.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Input,\n InputField,\n View,\n Text,\n VStack,\n Box,\n Button,\n ButtonText,\n CheckIcon,\n FlatList,\n HStack,\n Avatar,\n AvatarImage,\n AvatarFallbackText,\n Image,\n Checkbox,\n CheckboxIndicator,\n CheckboxIcon,\n Heading,\n Spinner,\n InputSlot,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { StyleSheet, TouchableOpacity, Linking, Platform } from 'react-native';\nimport Colors from '../../constants/Colors';\nimport { useOrganizationSharableLinkQuery, useSendOrganizationInvitationMutation } from '../../queries/slackuiQueries';\nimport { AntDesign, Ionicons, Feather } from '@expo/vector-icons';\nimport VirtualizedScrollView from '../../components/VirtualizedScrollView';\nimport { useIsFocused } from '@react-navigation/native';\nimport * as Contacts from 'expo-contacts';\nimport { config } from '../../config';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useSelector } from 'react-redux';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { NavigationRoutes } from '../../constants';\n\nconst AddFromContacts = ({ navigation, route }: any) => {\n const isFocused = useIsFocused();\n const [contacts, setContacts] = useState<any[]>([]);\n const [filteredContacts, setFilteredContacts] = useState<any[]>([]);\n const [selectedContacts, setSelectedContacts] = useState<any>([]);\n const [searchQuery, setSearchQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const orgName = route?.params?.orgName || '';\n const { data: organizationSharableLink } = useOrganizationSharableLinkQuery(orgName);\n const [sendOrganizationInvitation] = useSendOrganizationInvitationMutation();\n const user = useSelector(userSelector);\n\n useEffect(() => {\n if (searchQuery.trim() === '') {\n setFilteredContacts(contacts);\n } else {\n const filtered = contacts.filter((contact) => {\n const fullName = `${contact.firstName || ''} ${contact.lastName || ''}`.toLowerCase();\n const phoneNumber = contact.phoneNumbers?.[0]?.number?.toLowerCase() || '';\n const query = searchQuery.toLowerCase();\n return fullName.includes(query) || phoneNumber.includes(query);\n });\n setFilteredContacts(filtered);\n }\n }, [searchQuery, contacts]);\n\n useEffect(() => {\n (async () => {\n try {\n setLoading(true);\n const { status } = await Contacts.requestPermissionsAsync();\n if (status === 'granted') {\n const { data } = await Contacts.getContactsAsync({\n fields: [\n Contacts.Fields.FirstName,\n Contacts.Fields.LastName,\n Contacts.Fields.PhoneNumbers,\n Contacts.Fields.Image,\n Contacts.Fields.ImageAvailable,\n ],\n });\n\n if (data.length > 0) {\n // Sort contacts alphabetically by name\n const sortedContacts = data.sort((a, b) => {\n const nameA = `${a.firstName || ''} ${a.lastName || ''}`.trim().toLowerCase();\n const nameB = `${b.firstName || ''} ${b.lastName || ''}`.trim().toLowerCase();\n return nameA.localeCompare(nameB);\n });\n\n // Filter out contacts without phone numbers\n const validContacts = sortedContacts.filter(\n (contact) => contact.phoneNumbers && contact.phoneNumbers.length > 0,\n );\n\n // Log information about contact images\n console.log(`Total contacts with phone numbers: ${validContacts.length}`);\n const contactsWithImages = validContacts.filter(\n (contact) => contact.imageAvailable && contact.image,\n );\n console.log(`Contacts with images: ${contactsWithImages.length}`);\n if (contactsWithImages.length > 0) {\n console.log('Sample image data:', contactsWithImages[0].image);\n }\n\n setContacts(validContacts);\n setFilteredContacts(validContacts);\n }\n }\n } catch (error) {\n console.error('Error fetching contacts:', error);\n } finally {\n setLoading(false);\n }\n })();\n }, []);\n\n useEffect(() => {\n if (isFocused) {\n navigation.setOptions({\n headerShown: true,\n headerTitleAlign: 'left',\n title: 'Add from Contacts',\n headerTitleStyle: {\n fontWeight: '600',\n },\n headerLeft: (props: any) => (\n <TouchableOpacity\n style={{ paddingHorizontal: 10 }}\n //onPress={() => navigation.goBack()}\n onPress={() => {\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 >\n <Ionicons color={Colors.slackBlack} name=\"chevron-back\" size={20} />\n </TouchableOpacity>\n ),\n headerRight: (props: any) => (\n <Button\n className=\"mr-2\"\n onPress={() => sendInvitation()}\n disabled={selectedContacts.length === 0}\n variant={'link'}\n >\n <ButtonText\n className={`${selectedContacts.length > 0 ? 'text-black font-bold' : 'text-gray-500'}`}\n >\n Send\n </ButtonText>\n </Button>\n ),\n });\n }\n }, [isFocused, navigation, selectedContacts]);\n\n const toggleContact = (item: any) => {\n if (!item.phoneNumbers || item.phoneNumbers.length === 0) return;\n\n const contact = {\n id: item.id,\n name: `${item.firstName || ''} ${item.lastName || ''}`.trim(),\n mobile: item.phoneNumbers[0],\n };\n\n setSelectedContacts((prev) => {\n const isSelected = prev.some((c: any) => c.id === contact.id);\n if (isSelected) {\n return prev.filter((c: any) => c.id !== contact.id);\n } else {\n return [...prev, contact];\n }\n });\n };\n\n const getInitials = (firstName?: string, lastName?: string) => {\n const first = firstName ? firstName.charAt(0).toUpperCase() : '';\n const last = lastName ? lastName.charAt(0).toUpperCase() : '';\n return (first + last).substring(0, 2);\n };\n\n const renderContactList = ({ item }: any) => {\n const isSelected = selectedContacts.some((c: any) => c.id === item.id);\n const hasPhoneNumber = item.phoneNumbers && item.phoneNumbers.length > 0;\n const initials = getInitials(item.firstName, item.lastName);\n\n if (!hasPhoneNumber) return null;\n\n return (\n <TouchableOpacity\n key={item.id}\n onPress={() => toggleContact(item)}\n style={styles.contactItem}\n disabled={!hasPhoneNumber}\n activeOpacity={0.7}\n >\n <HStack space=\"md\" className=\"justify-between items-center w-full\">\n <HStack space=\"md\" className=\"items-center space-x-3\">\n {item.imageAvailable && item.image && item.image.uri ? (\n <Avatar size=\"md\" className=\"bg-gray-400\">\n <AvatarImage\n source={{ uri: item.image.uri }}\n alt={`${item.firstName || ''} ${item.lastName || ''}`.trim()}\n onError={(e) => console.log('Avatar image failed to load', e.nativeEvent.error)}\n style={styles.avatarImage}\n />\n <AvatarFallbackText>{initials}</AvatarFallbackText>\n </Avatar>\n ) : (\n <Avatar size=\"md\" className=\"bg-blue-500\">\n <AvatarFallbackText style={styles.avatarText}>{initials}</AvatarFallbackText>\n </Avatar>\n )}\n\n <Box>\n <Text className=\"text-gray-800 font-semibold text-base\">\n {item.firstName || ''} {item.lastName || ''}\n </Text>\n <Text className=\"text-gray-500 text-sm\">\n {item.phoneNumbers?.[0]?.number || 'No number'}\n </Text>\n </Box>\n </HStack>\n\n <Checkbox\n value={item.id}\n isChecked={isSelected}\n accessibilityLabel={`Select ${item.firstName}`}\n aria-label={`Select ${item.firstName}`}\n >\n <CheckboxIndicator className={isSelected ? 'bg-blue-500 border-blue-500' : ''}>\n <CheckboxIcon as={CheckIcon} />\n </CheckboxIndicator>\n </Checkbox>\n </HStack>\n </TouchableOpacity>\n );\n };\n\n const sendInvitation = () => {\n if (selectedContacts.length === 0) return;\n\n // Get phone numbers to send SMS invites\n const mobileNumbers = selectedContacts.map((i: any) => i.mobile.number);\n\n // Send organization invitation through the API\n sendOrganizationInvitation({\n variables: {\n request: {\n orgName: orgName,\n emails: mobileNumbers.map((num) => num.replace(/\\s/g, '')), // Use emails field for phone numbers\n invitedBy: user?.profile?.name || '',\n sentInvitee: true,\n },\n },\n onCompleted: (data) => {\n console.log('Organization invitation sent successfully:', data);\n // After sending invitations through API, send SMS with link\n sendSMSInvitations();\n },\n onError: (error) => {\n console.error('Error sending invitations:', error);\n // Still attempt to send SMS if API fails\n sendSMSInvitations();\n },\n });\n };\n\n const sendSMSInvitations = () => {\n const mobileNumbers = selectedContacts.map((i: any) => i.mobile.number);\n let numbers = '';\n mobileNumbers.forEach((phoneNumber: string) => {\n numbers += `${phoneNumber.replace(/\\s/g, '')},`;\n });\n numbers = numbers.slice(0, -1);\n\n const message = `Join me on ${\n config.APP_NAME\n } - it's a faster, simpler way to work. Sign up here from any device: ${\n organizationSharableLink?.getOrganizationSharableLink ?? ''\n }`;\n\n const url =\n Platform.OS === 'android'\n ? `sms:${numbers}?body=${encodeURIComponent(message)}`\n : `sms:/open?addresses=${numbers}&body=${encodeURIComponent(message)}`;\n Linking.openURL(url);\n };\n\n return (\n <SafeAreaView style={styles.container}>\n <Box className=\"flex-1 bg-white\">\n <Box className=\"px-4 py-2 bg-white\">\n <Input size=\"md\" className=\"bg-gray-100 rounded-lg\">\n <InputSlot>\n <Feather name=\"search\" size={16} color=\"#9ca3af\" style={{ marginLeft: 8 }} />\n </InputSlot>\n <InputField\n placeholder=\"Search contacts\"\n placeholderTextColor=\"#9ca3af\"\n onChange={(event) => setSearchQuery(event.nativeEvent.text)}\n value={searchQuery}\n autoCapitalize=\"none\"\n autoCorrect={false}\n className=\"text-black\"\n />\n {searchQuery ? (\n <InputSlot>\n <TouchableOpacity onPress={() => setSearchQuery('')} style={{ marginRight: 8 }}>\n <Ionicons name=\"close-circle\" size={16} color=\"#9ca3af\" />\n </TouchableOpacity>\n </InputSlot>\n ) : null}\n </Input>\n </Box>\n\n {loading ? (\n <Box className=\"flex-1 justify-center items-center\">\n <Spinner size=\"large\" color={Colors.blue} />\n <Text className=\"mt-4 text-gray-500\">Loading contacts...</Text>\n </Box>\n ) : (\n <Box className=\"flex-1\">\n {selectedContacts.length > 0 && (\n <Box className=\"px-4 py-2 bg-gray-50 border-b border-gray-200\">\n <Text className=\"text-sm text-gray-500\">\n {selectedContacts.length} {selectedContacts.length === 1 ? 'contact' : 'contacts'}{' '}\n selected\n </Text>\n </Box>\n )}\n\n <FlatList\n data={filteredContacts}\n renderItem={renderContactList}\n keyExtractor={(item) => item.id}\n contentContainerStyle={styles.listContainer}\n ListEmptyComponent={() => (\n <Box className=\"flex-1 justify-center items-center py-8\">\n <Feather name=\"users\" size={48} color=\"#d1d5db\" />\n <Text className=\"text-center text-gray-500 mt-4\">\n {searchQuery ? 'No matching contacts found' : 'No contacts found'}\n </Text>\n </Box>\n )}\n />\n </Box>\n )}\n </Box>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n listContainer: {\n flexGrow: 1,\n },\n contactItem: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#f3f4f6',\n },\n avatarText: {\n color: 'white',\n fontWeight: '600',\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default AddFromContacts;\n"],"names":["_a","React"],"mappings":"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"}
|