From 1c47fc7d1cec1aaa9a6605b09afa2aeeb6936cf3 Mon Sep 17 00:00:00 2001 From: Aleksander Nicacio da Silva Date: Thu, 10 Apr 2025 19:46:21 -0300 Subject: [PATCH 1/4] fix: useAgentsList entering a loop after first fetch --- .../meteor/client/components/Omnichannel/hooks/useAgentsList.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/client/components/Omnichannel/hooks/useAgentsList.ts b/apps/meteor/client/components/Omnichannel/hooks/useAgentsList.ts index d81f1b1f3e5a7..0c40ddf0d5826 100644 --- a/apps/meteor/client/components/Omnichannel/hooks/useAgentsList.ts +++ b/apps/meteor/client/components/Omnichannel/hooks/useAgentsList.ts @@ -76,7 +76,7 @@ export const useAgentsList = ( return { items, - itemCount: total + 1, + itemCount: total, }; }, [excludeId, getAgents, haveAll, haveNoAgentsSelectedOption, onlyAvailable, showIdleAgents, t, text], From c443d4c9847aaf65cc0a0961539a5b6e91f40703 Mon Sep 17 00:00:00 2001 From: Aleksander Nicacio da Silva Date: Thu, 10 Apr 2025 19:47:55 -0300 Subject: [PATCH 2/4] refactor: improved accesibility of add agent flow --- apps/meteor/client/components/AutoCompleteAgent.tsx | 6 ++++-- .../departments/DepartmentAgentsTable/AddAgent.tsx | 10 ++++++++-- .../DepartmentAgentsTable/DepartmentAgentsTable.tsx | 7 ++++--- .../views/omnichannel/departments/EditDepartment.tsx | 7 +++++-- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/apps/meteor/client/components/AutoCompleteAgent.tsx b/apps/meteor/client/components/AutoCompleteAgent.tsx index fad5b1a15d575..f20c688ef169f 100644 --- a/apps/meteor/client/components/AutoCompleteAgent.tsx +++ b/apps/meteor/client/components/AutoCompleteAgent.tsx @@ -1,13 +1,13 @@ import { PaginatedSelectFiltered } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; -import type { ReactElement } from 'react'; +import type { AriaAttributes, ReactElement } from 'react'; import { memo, useMemo, useState } from 'react'; import { useRecordList } from '../hooks/lists/useRecordList'; import { AsyncStatePhase } from '../lib/asyncState'; import { useAgentsList } from './Omnichannel/hooks/useAgentsList'; -type AutoCompleteAgentProps = { +type AutoCompleteAgentProps = Pick & { value: string; error?: string; placeholder?: string; @@ -31,6 +31,7 @@ const AutoCompleteAgent = ({ onlyAvailable = false, withTitle = false, onChange, + 'aria-labelledby': ariaLabelledBy, }: AutoCompleteAgentProps): ReactElement => { const [agentsFilter, setAgentsFilter] = useState(''); @@ -57,6 +58,7 @@ const AutoCompleteAgent = ({ setFilter={setAgentsFilter as (value: string | number | undefined) => void} options={agentsItems} data-qa='autocomplete-agent' + aria-labelledby={ariaLabelledBy} endReached={ agentsPhase === AsyncStatePhase.LOADING ? (): void => undefined : (start): void => loadMoreAgents(start, Math.min(50, agentsTotal)) } diff --git a/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/AddAgent.tsx b/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/AddAgent.tsx index 86cb80c7c4d5c..7ddbdb66a6b41 100644 --- a/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/AddAgent.tsx +++ b/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/AddAgent.tsx @@ -1,6 +1,7 @@ import { Box, Button } from '@rocket.chat/fuselage'; import { useEffectEvent } from '@rocket.chat/fuselage-hooks'; import { useToastMessageDispatch } from '@rocket.chat/ui-contexts'; +import type { AriaAttributes } from 'react'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -8,7 +9,12 @@ import AutoCompleteAgent from '../../../../components/AutoCompleteAgent'; import { useEndpointAction } from '../../../../hooks/useEndpointAction'; import type { IDepartmentAgent } from '../definitions'; -function AddAgent({ agentList, onAdd }: { agentList: IDepartmentAgent[]; onAdd: (agent: IDepartmentAgent) => void }) { +type AddAgentProps = Pick & { + agentList: IDepartmentAgent[]; + onAdd: (agent: IDepartmentAgent) => void; +}; + +function AddAgent({ agentList, onAdd, 'aria-labelledby': ariaLabelledBy }: AddAgentProps) { const { t } = useTranslation(); const [userId, setUserId] = useState(''); @@ -37,7 +43,7 @@ function AddAgent({ agentList, onAdd }: { agentList: IDepartmentAgent[]; onAdd: }); return ( - +