From 370ee75775ce99430b7d7865fbdc56b89b7a49b7 Mon Sep 17 00:00:00 2001 From: Aleksander Nicacio da Silva <aleksander.silva@rocket.chat> Date: Thu, 15 Jun 2023 13:43:06 -0300 Subject: [PATCH] fix: re-added pagination to department's agents table (#29523) --- .changeset/nervous-bulldogs-fix.md | 5 +++++ .../GenericTable/hooks/usePagination.ts | 7 ++++++- .../DepartmentAgentsTable.tsx | 19 +++++++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 .changeset/nervous-bulldogs-fix.md diff --git a/.changeset/nervous-bulldogs-fix.md b/.changeset/nervous-bulldogs-fix.md new file mode 100644 index 00000000000..571184e4cec --- /dev/null +++ b/.changeset/nervous-bulldogs-fix.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Re-added pagination to Department's agents list diff --git a/apps/meteor/client/components/GenericTable/hooks/usePagination.ts b/apps/meteor/client/components/GenericTable/hooks/usePagination.ts index 31276fd57ce..803752fda45 100644 --- a/apps/meteor/client/components/GenericTable/hooks/usePagination.ts +++ b/apps/meteor/client/components/GenericTable/hooks/usePagination.ts @@ -1,4 +1,4 @@ -import { useMemo } from 'react'; +import { useEffect, useMemo } from 'react'; import { useCurrent } from './useCurrent'; import { useItemsPerPage } from './useItemsPerPage'; @@ -18,6 +18,11 @@ export const usePagination = (): { const itemsPerPageLabel = useItemsPerPageLabel(); const showingResultsLabel = useShowingResultsLabel(); + // Reset to first page when itemsPerPage changes + useEffect(() => { + setCurrent(0); + }, [itemsPerPage, setCurrent]); + return useMemo( () => ({ itemsPerPage, diff --git a/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/DepartmentAgentsTable.tsx b/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/DepartmentAgentsTable.tsx index 2f2f8d39e99..c4e4c7acb7c 100644 --- a/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/DepartmentAgentsTable.tsx +++ b/apps/meteor/client/views/omnichannel/departments/DepartmentAgentsTable/DepartmentAgentsTable.tsx @@ -1,9 +1,11 @@ +import { Pagination } from '@rocket.chat/fuselage'; import { useTranslation } from '@rocket.chat/ui-contexts'; -import React from 'react'; +import React, { useMemo } from 'react'; import type { Control, UseFormRegister } from 'react-hook-form'; import { useWatch, useFieldArray } from 'react-hook-form'; import { GenericTable, GenericTableBody, GenericTableHeader, GenericTableHeaderCell } from '../../../../components/GenericTable'; +import { usePagination } from '../../../../components/GenericTable/hooks/usePagination'; import type { FormValues } from '../EditDepartment'; import AddAgent from './AddAgent'; import AgentRow from './AgentRow'; @@ -18,6 +20,9 @@ function DepartmentAgentsTable({ control, register }: DepartmentAgentsTableProps const { fields, append, remove } = useFieldArray({ control, name: 'agentList' }); const agentList = useWatch({ control, name: 'agentList' }); + const { current, itemsPerPage, setItemsPerPage: onSetItemsPerPage, setCurrent: onSetCurrent, ...paginationProps } = usePagination(); + const page = useMemo(() => fields.slice(current, current + itemsPerPage), [current, fields, itemsPerPage]); + return ( <> <AddAgent agentList={agentList} data-qa='DepartmentSelect-AgentsTable' onAdd={append} /> @@ -31,11 +36,21 @@ function DepartmentAgentsTable({ control, register }: DepartmentAgentsTableProps </GenericTableHeader> <GenericTableBody> - {fields.map((agent, index) => ( + {page.map((agent, index) => ( <AgentRow key={agent.id} index={index} agent={agent} register={register} onRemove={() => remove(index)} /> ))} </GenericTableBody> </GenericTable> + + <Pagination + divider + current={current} + itemsPerPage={itemsPerPage} + count={fields.length} + onSetItemsPerPage={onSetItemsPerPage} + onSetCurrent={onSetCurrent} + {...paginationProps} + /> </> ); } -- GitLab