diff --git a/native/community-creation/community-creation-members.react.js b/native/community-creation/community-creation-members.react.js deleted file mode 100644 --- a/native/community-creation/community-creation-members.react.js +++ /dev/null @@ -1,196 +0,0 @@ -// @flow - -import * as React from 'react'; -import { ActivityIndicator, StyleSheet, View } from 'react-native'; - -import { - useChangeThreadSettings, - changeThreadSettingsActionTypes, -} from 'lib/actions/thread-actions.js'; -import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; -import { threadInfoSelector } from 'lib/selectors/thread-selectors.js'; -import { userInfoSelectorForPotentialMembers } from 'lib/selectors/user-selectors.js'; -import { usePotentialMemberItems } from 'lib/shared/search-utils.js'; -import type { LoadingStatus } from 'lib/types/loading-types.js'; -import { threadTypes } from 'lib/types/thread-types-enum.js'; -import type { AccountUserInfo } from 'lib/types/user-types.js'; -import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; - -import CommunityCreationContentContainer from './community-creation-content-container.react.js'; -import CommunityCreationKeyserverLabel from './community-creation-keyserver-label.react.js'; -import type { CommunityCreationNavigationProp } from './community-creation-navigator.react.js'; -import RegistrationContainer from '../account/registration/registration-container.react.js'; -import { useNavigateToThread } from '../chat/message-list-types.js'; -import LinkButton from '../components/link-button.react.js'; -import { - createTagInput, - type BaseTagInput, -} from '../components/tag-input.react.js'; -import UserList from '../components/user-list.react.js'; -import type { NavigationRoute } from '../navigation/route-names.js'; -import { useSelector } from '../redux/redux-utils.js'; - -export type CommunityCreationMembersScreenParams = { - +announcement: boolean, - +threadID: string, -}; - -const TagInput = createTagInput(); -const tagInputProps = { - placeholder: 'username', - autoFocus: true, - returnKeyType: 'go', -}; -const tagDataLabelExtractor = (userInfo: AccountUserInfo) => userInfo.username; - -type Props = { - +navigation: CommunityCreationNavigationProp<'CommunityCreationMembers'>, - +route: NavigationRoute<'CommunityCreationMembers'>, -}; - -const changeThreadSettingsLoadingStatusSelector = createLoadingStatusSelector( - changeThreadSettingsActionTypes, -); - -function CommunityCreationMembers(props: Props): React.Node { - const { announcement, threadID } = props.route.params; - - const dispatchActionPromise = useDispatchActionPromise(); - const callChangeThreadSettings = useChangeThreadSettings(); - const changeThreadSettingsLoadingStatus: LoadingStatus = useSelector( - changeThreadSettingsLoadingStatusSelector, - ); - - const { navigation } = props; - const { setOptions } = navigation; - - const otherUserInfos = useSelector(userInfoSelectorForPotentialMembers); - - const [usernameInputText, setUsernameInputText] = React.useState(''); - const [selectedUsers, setSelectedUsers] = React.useState< - $ReadOnlyArray, - >([]); - - const selectedUserIDs = React.useMemo( - () => selectedUsers.map(userInfo => userInfo.id), - [selectedUsers], - ); - - const navigateToThread = useNavigateToThread(); - const threadInfos = useSelector(threadInfoSelector); - const communityThreadInfo = threadInfos[threadID]; - - const addSelectedUsersToCommunity = React.useCallback(() => { - void dispatchActionPromise( - changeThreadSettingsActionTypes, - (async () => { - const result = await callChangeThreadSettings({ - threadID, - changes: { newMemberIDs: selectedUserIDs }, - }); - navigateToThread({ threadInfo: communityThreadInfo }); - return result; - })(), - ); - }, [ - callChangeThreadSettings, - communityThreadInfo, - dispatchActionPromise, - navigateToThread, - selectedUserIDs, - threadID, - ]); - - const exitCommunityCreationFlow = React.useCallback(() => { - navigateToThread({ threadInfo: communityThreadInfo }); - }, [communityThreadInfo, navigateToThread]); - - const activityIndicatorStyle = React.useMemo( - () => ({ paddingRight: 20 }), - [], - ); - - React.useEffect(() => { - setOptions({ - headerRight: () => { - if (changeThreadSettingsLoadingStatus === 'loading') { - return ( - - ); - } - return ( - - ); - }, - }); - }, [ - activityIndicatorStyle, - addSelectedUsersToCommunity, - changeThreadSettingsLoadingStatus, - exitCommunityCreationFlow, - selectedUserIDs.length, - setOptions, - ]); - - const userSearchResults = usePotentialMemberItems({ - text: usernameInputText, - userInfos: otherUserInfos, - excludeUserIDs: selectedUserIDs, - threadType: announcement - ? threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT - : threadTypes.COMMUNITY_ROOT, - }); - - const onSelectUser = React.useCallback( - ({ id }: AccountUserInfo) => { - if (selectedUserIDs.some(existingUserID => id === existingUserID)) { - return; - } - setSelectedUsers(oldUserInfoInputArray => [ - ...oldUserInfoInputArray, - otherUserInfos[id], - ]); - setUsernameInputText(''); - }, - [otherUserInfos, selectedUserIDs], - ); - - const tagInputRef = React.useRef>(); - - return ( - - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - addMembersContainer: { - flex: 1, - paddingHorizontal: 20, - paddingVertical: 8, - }, -}); - -export default CommunityCreationMembers; diff --git a/native/community-creation/community-creation-navigator.react.js b/native/community-creation/community-creation-navigator.react.js --- a/native/community-creation/community-creation-navigator.react.js +++ b/native/community-creation/community-creation-navigator.react.js @@ -8,13 +8,11 @@ import * as React from 'react'; import CommunityConfiguration from './community-configuration.react.js'; -import CommunityCreationMembers from './community-creation-members.react.js'; import type { RootNavigationProp } from '../navigation/root-navigator.react.js'; import { CommunityConfigurationRouteName, type ScreenParamList, type CommunityCreationParamList, - CommunityCreationMembersRouteName, } from '../navigation/route-names.js'; import { useColors } from '../themes/colors.js'; @@ -32,10 +30,6 @@ headerTitle: 'Create a community', }; -const communityCreationMembersOptions = { - headerTitle: 'Add members', -}; - type Props = { +navigation: RootNavigationProp<'CommunityCreation'>, ... @@ -63,11 +57,6 @@ component={CommunityConfiguration} options={communityConfigurationOptions} /> - ); } diff --git a/native/navigation/route-names.js b/native/navigation/route-names.js --- a/native/navigation/route-names.js +++ b/native/navigation/route-names.js @@ -36,7 +36,6 @@ import type { SubchannelListModalParams } from '../chat/subchannels-list-modal.react.js'; import type { TextMessageTooltipModalParams } from '../chat/text-message-tooltip-modal.react.js'; import type { TogglePinModalParams } from '../chat/toggle-pin-modal.react.js'; -import type { CommunityCreationMembersScreenParams } from '../community-creation/community-creation-members.react.js'; import type { TagFarcasterChannelByNameParams } from '../community-settings/tag-farcaster-channel/tag-farcaster-channel-by-name.react.js'; import type { TagFarcasterChannelParams } from '../community-settings/tag-farcaster-channel/tag-farcaster-channel.react.js'; import type { InviteLinksNavigatorParams } from '../invite-links/invite-links-navigator.react.js'; @@ -136,7 +135,6 @@ export const UsernameSelectionRouteName = 'UsernameSelection'; export const CommunityCreationRouteName = 'CommunityCreation'; export const CommunityConfigurationRouteName = 'CommunityConfiguration'; -export const CommunityCreationMembersRouteName = 'CommunityCreationMembers'; export const MessageSearchRouteName = 'MessageSearch'; export const PasswordSelectionRouteName = 'PasswordSelection'; export const AvatarSelectionRouteName = 'AvatarSelection'; @@ -299,7 +297,6 @@ export type CommunityCreationParamList = { +CommunityConfiguration: void, - +CommunityCreationMembers: CommunityCreationMembersScreenParams, }; export type RolesParamList = {