import { Divider, Modal, ButtonGroup, Button, Field, TextInput, Throbber } from '@rocket.chat/fuselage'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useSetModal, useTranslation, useEndpoint, useToastMessageDispatch } from '@rocket.chat/ui-contexts'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import type { VFC, FormEvent } from 'react'; import React, { useState } from 'react'; import MatrixFederationRemoveServerList from './MatrixFederationRemoveServerList'; import MatrixFederationSearch from './MatrixFederationSearch'; import { useMatrixServerList } from './useMatrixServerList'; type MatrixFederationAddServerModalProps = { onClickClose: () => void; }; const getErrorKey = (error: any): TranslationKey | undefined => { if (!error) { return; } if (error.error === 'invalid-server-name') { return 'Server_doesnt_exist'; } if (error.error === 'invalid-server-name') { return 'Server_already_added'; } }; const MatrixFederationAddServerModal: VFC = ({ onClickClose }) => { const t = useTranslation(); const addMatrixServer = useEndpoint('POST', '/v1/federation/addServerByUser'); const [serverName, setServerName] = useState(''); const [errorKey, setErrorKey] = useState(); const setModal = useSetModal(); const queryClient = useQueryClient(); const dispatchToastMessage = useToastMessageDispatch(); const { mutate: addServer, isLoading, isError, } = useMutation(['v1/federation/addServerByUser', serverName], () => addMatrixServer({ serverName }), { onSuccess: async () => { await queryClient.invalidateQueries(['federation/listServersByUsers']); setModal(); }, onError: (error) => { const errorKey = getErrorKey(error); if (!errorKey) { dispatchToastMessage({ type: 'error', message: error }); return; } setErrorKey(errorKey); }, }); const { data, isLoading: isLoadingServerList } = useMatrixServerList(); return ( {t('Manage_servers')} {t('Server_name')} ) => { setServerName(e.currentTarget.value); if (errorKey) { setErrorKey(undefined); } }} mie='x4' /> {isError && errorKey && {t(errorKey)}} {t('Federation_Example_matrix_server')} {!isLoadingServerList && data?.servers && } ); }; export default MatrixFederationAddServerModal;