import { Box, Modal, ButtonGroup, Button, TextInput, Icon, Field, ToggleSwitch, FieldGroup } from '@rocket.chat/fuselage'; import { useDebouncedCallback } from '@rocket.chat/fuselage-hooks'; import React, { useEffect, useMemo, useState } from 'react'; import UserAutoCompleteMultiple from '../../components/UserAutoCompleteMultiple'; import { useMethod } from '../../contexts/ServerContext'; import { useSetting } from '../../contexts/SettingsContext'; import { useTranslation } from '../../contexts/TranslationContext'; const CreateChannel = ({ values, handlers, hasUnsavedChanges, onChangeUsers, onChangeType, onChangeBroadcast, canOnlyCreateOneType, e2eEnabledForPrivateByDefault, onCreate, onClose, }) => { const t = useTranslation(); const e2eEnabled = useSetting('E2E_Enable'); const namesValidation = useSetting('UTF8_Channel_Names_Validation'); const allowSpecialNames = useSetting('UI_Allow_room_names_with_special_chars'); const channelNameExists = useMethod('roomNameExists'); const channelNameRegex = useMemo(() => new RegExp(`^${namesValidation}$`), [namesValidation]); const [nameError, setNameError] = useState(); const checkName = useDebouncedCallback( async (name) => { setNameError(false); if (hasUnsavedChanges) { return; } if (!name || name.length === 0) { return setNameError(t('Field_required')); } if (!allowSpecialNames && !channelNameRegex.test(name)) { return setNameError(t('error-invalid-name')); } const isNotAvailable = await channelNameExists(name); if (isNotAvailable) { return setNameError(t('Channel_already_exist', name)); } }, 100, [channelNameRegex], ); useEffect(() => { checkName(values.name); }, [checkName, values.name]); const e2edisabled = useMemo( () => !values.type || values.broadcast || !e2eEnabled || e2eEnabledForPrivateByDefault, [e2eEnabled, e2eEnabledForPrivateByDefault, values.broadcast, values.type], ); const canSave = useMemo(() => hasUnsavedChanges && !nameError, [hasUnsavedChanges, nameError]); return ( {t('Create_channel')} {t('Name')} } placeholder={t('Channel_name')} onChange={handlers.handleName} /> {hasUnsavedChanges && nameError && {nameError}} {t('Topic')}{' '} ({t('optional')}) {t('Private')} {values.type ? t('Only_invited_users_can_acess_this_channel') : t('Everyone_can_access_this_channel')} {t('Read_only')} {values.readOnly ? t('Only_authorized_users_can_write_new_messages') : t('All_users_in_the_channel_can_write_new_messages')} {t('Encrypted')} {values.type ? t('Encrypted_channel_Description') : t('Encrypted_not_available')} {t('Broadcast')} {t('Broadcast_channel_Description')} {`${t('Add_members')} (${t('optional')})`} ); }; export default CreateChannel;