// 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 {Navigation} from 'react-native-navigation'; import {SafeAreaView} from 'react-native-safe-area-context'; import DatabaseManager from '@database/manager'; 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'; interface ServerProps { closeButtonId?: string; componentId: string; 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); useEffect(() => { setButtonDisabled(Boolean(!displayName || displayName === server.displayName)); }, [displayName]); useEffect(() => { const navigationEvents = Navigation.events().registerNavigationButtonPressedListener(({buttonId}) => { if (closeButtonId && buttonId === closeButtonId) { dismissModal({componentId}); } }); return () => navigationEvents.remove(); }, []); 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); }, []); return (
); }; export default EditServer;