// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {useCallback, useEffect, useRef, useState} from 'react'; import {useIntl} from 'react-intl'; import {Platform, View} from 'react-native'; import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view'; import {SafeAreaView} from 'react-native-safe-area-context'; import DatabaseManager from '@database/manager'; import useAndroidHardwareBackHandler from '@hooks/android_back_handler'; import useNavButtonPressed from '@hooks/navigation_button_pressed'; import {getServerByDisplayName} from '@queries/app/servers'; import Background from '@screens/background'; import {dismissModal} from '@screens/navigation'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import Form from './form'; import Header from './header'; import type ServersModel from '@typings/database/models/app/servers'; import type {AvailableScreens} from '@typings/screens/navigation'; interface ServerProps { closeButtonId?: string; componentId: AvailableScreens; server: ServersModel; theme: Theme; } const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ appInfo: { color: changeOpacity(theme.centerChannelColor, 0.56), }, flex: { flex: 1, }, scrollContainer: { alignItems: 'center', height: '100%', justifyContent: 'center', }, })); const EditServer = ({closeButtonId, componentId, server, theme}: ServerProps) => { const {formatMessage} = useIntl(); const keyboardAwareRef = useRef(null); const [saving, setSaving] = useState(false); const [displayName, setDisplayName] = useState(server.displayName); const [buttonDisabled, setButtonDisabled] = useState(true); const [displayNameError, setDisplayNameError] = useState(); const styles = getStyleSheet(theme); const close = () => { dismissModal({componentId}); }; useEffect(() => { setButtonDisabled(Boolean(!displayName || displayName === server.displayName)); }, [displayName]); const handleUpdate = useCallback(async () => { if (buttonDisabled) { return; } if (displayNameError) { setDisplayNameError(undefined); } setSaving(true); const knownServer = await getServerByDisplayName(displayName); if (knownServer && knownServer.lastActiveAt > 0 && knownServer.url !== server.url) { setButtonDisabled(true); setDisplayNameError(formatMessage({ id: 'mobile.server_name.exists', defaultMessage: 'You are using this name for another server.', })); setSaving(false); return; } await DatabaseManager.updateServerDisplayName(server.url, displayName); dismissModal({componentId}); }, [!buttonDisabled && displayName, !buttonDisabled && displayNameError]); const handleDisplayNameTextChanged = useCallback((text: string) => { setDisplayName(text); setDisplayNameError(undefined); }, []); useNavButtonPressed(closeButtonId || '', componentId, close, []); useAndroidHardwareBackHandler(componentId, close); return (
); }; export default EditServer;