diff --git a/apps/meteor/client/components/CreateDiscussion/CreateDiscussion.tsx b/apps/meteor/client/components/CreateDiscussion/CreateDiscussion.tsx index 9f55917be23..5a0ab955593 100644 --- a/apps/meteor/client/components/CreateDiscussion/CreateDiscussion.tsx +++ b/apps/meteor/client/components/CreateDiscussion/CreateDiscussion.tsx @@ -9,14 +9,15 @@ import { Button, Icon, Box, - FieldDescription, + FieldHint, FieldLabel, FieldRow, FieldError, } from '@rocket.chat/fuselage'; +import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import { useMutation } from '@tanstack/react-query'; -import type { ComponentProps, ReactElement } from 'react'; +import type { ReactElement } from 'react'; import React from 'react'; import { useForm, Controller } from 'react-hook-form'; @@ -44,12 +45,12 @@ const CreateDiscussion = ({ onClose, defaultParentRoom, parentMessageId, nameSug const t = useTranslation(); const { - register, - formState: { isDirty, errors }, + formState: { isDirty, isSubmitting, isValidating, errors }, handleSubmit, control, watch, } = useForm({ + mode: 'onBlur', defaultValues: { name: nameSuggestion || '', parentRoom: '', @@ -81,22 +82,28 @@ const CreateDiscussion = ({ onClose, defaultParentRoom, parentMessageId, nameSug }); }; + const targetChannelField = useUniqueId(); + const encryptedField = useUniqueId(); + const discussionField = useUniqueId(); + const usersField = useUniqueId(); + const firstMessageField = useUniqueId(); + return ( ) => } + wrapperFunction={(props) => } > {t('Discussion_title')} - + + {t('Discussion_description')} - {t('Discussion_description')} - - - {t('Discussion_target_channel')} + + {t('Discussion_target_channel')} + {defaultParentRoom && ( } /> )} - {!defaultParentRoom && ( ( + rules={{ required: t('error-the-field-is-required', { field: t('Discussion_target_channel') }) }} + render={({ field: { name, onBlur, onChange, value } }) => ( )} /> )} - {errors.parentRoom && {errors.parentRoom.message}} + {errors.parentRoom && ( + + {errors.parentRoom.message} + + )} - - - {t('Encrypted')} - - ( - + + {t('Encrypted')} + + } /> - )} - /> + + - {t('Discussion_name')} + + {t('Discussion_name')} + - } + ( + } + /> + )} /> - {errors.name && {errors.name.message}} + {errors.name && ( + + {errors.name.message} + + )} - {t('Invite_Users')} - + {t('Invite_Users')} + ( - + render={({ field: { name, onChange, value, onBlur } }) => ( + )} /> - {t('Discussion_first_message_title')} + {t('Discussion_first_message_title')} - + ( + + )} + /> - {encrypted && {t('Discussion_first_message_disabled_due_to_e2e')}} + {encrypted && {t('Discussion_first_message_disabled_due_to_e2e')}} - diff --git a/apps/meteor/client/components/CreateDiscussion/DefaultParentRoomField.tsx b/apps/meteor/client/components/CreateDiscussion/DefaultParentRoomField.tsx index 0a2717a6555..6036f14049a 100644 --- a/apps/meteor/client/components/CreateDiscussion/DefaultParentRoomField.tsx +++ b/apps/meteor/client/components/CreateDiscussion/DefaultParentRoomField.tsx @@ -1,38 +1,42 @@ import { Skeleton, TextInput, Callout } from '@rocket.chat/fuselage'; -import { useTranslation } from '@rocket.chat/ui-contexts'; +import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; +import { useQuery } from '@tanstack/react-query'; import type { ReactElement } from 'react'; import React, { useMemo } from 'react'; -import { AsyncStatePhase } from '../../hooks/useAsyncState'; -import { useEndpointData } from '../../hooks/useEndpointData'; import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; const DefaultParentRoomField = ({ defaultParentRoom }: { defaultParentRoom: string }): ReactElement => { const t = useTranslation(); - const { value, phase } = useEndpointData('/v1/rooms.info', { - params: useMemo( - () => ({ - roomId: defaultParentRoom, - }), - [defaultParentRoom], - ), + + const query = useMemo( + () => ({ + roomId: defaultParentRoom, + }), + [defaultParentRoom], + ); + + const roomsInfoEndpoint = useEndpoint('GET', '/v1/rooms.info'); + + const { data, isLoading, isError } = useQuery(['defaultParentRoomInfo', query], async () => roomsInfoEndpoint(query), { + refetchOnWindowFocus: false, }); - if (phase === AsyncStatePhase.LOADING) { + if (isLoading) { return ; } - if (!value || !value.room) { + if (!data?.room || isError) { return {t('Error')}; } return ( diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json index 45a06c20c11..2438d01b0f9 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1680,7 +1680,7 @@ "Discussion_target_channel": "Parent channel or group", "Discussion_target_channel_description": "Select a channel which is related to what you want to ask", "Discussion_target_channel_prefix": "You are creating a discussion in", - "Discussion_title": "Create a new discussion", + "Discussion_title": "Create discussion", "Discussions_unavailable_for_federation": "Discussions are unavailable for Federated rooms", "discussion-created": "{{message}}", "Discussions": "Discussions",