diff --git a/frontend/webapp/components/overview/actions/actions.table/index.tsx b/frontend/webapp/components/overview/actions/actions.table/index.tsx index 8a186a76d..516e7e2ae 100644 --- a/frontend/webapp/components/overview/actions/actions.table/index.tsx +++ b/frontend/webapp/components/overview/actions/actions.table/index.tsx @@ -24,6 +24,8 @@ export const ActionsTable: React.FC = ({ toggleActionStatus, }) => { const [selectedCheckbox, setSelectedCheckbox] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); const currentPageRef = React.useRef(1); function onSelectedCheckboxChange(id: string) { @@ -74,6 +76,10 @@ export const ActionsTable: React.FC = ({ renderTableHeader={renderTableHeader} onPaginate={onPaginate} renderEmptyResult={renderEmptyResult} + currentPage={currentPage} + itemsPerPage={itemsPerPage} + setCurrentPage={setCurrentPage} + setItemsPerPage={setItemsPerPage} renderTableRows={(item, index) => ( = ({ sortDestinations, filterDestinationsBySignal, }) => { + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); const currentPageRef = React.useRef(1); function onPaginate(pageNumber: number) { @@ -46,6 +48,10 @@ export const ManagedDestinationsTable: React.FC = ({ renderTableHeader={renderTableHeader} onPaginate={onPaginate} renderEmptyResult={renderEmptyResult} + currentPage={currentPage} + itemsPerPage={itemsPerPage} + setCurrentPage={setCurrentPage} + setItemsPerPage={setItemsPerPage} renderTableRows={(item, index) => ( = ({ onRowClick, }) => { const [selectedCheckbox, setSelectedCheckbox] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); const currentPageRef = React.useRef(1); @@ -38,6 +40,10 @@ export const InstrumentationRulesTable: React.FC = ({ renderTableHeader={renderTableHeader} onPaginate={onPaginate} renderEmptyResult={renderEmptyResult} + currentPage={currentPage} + itemsPerPage={itemsPerPage} + setCurrentPage={setCurrentPage} + setItemsPerPage={setItemsPerPage} renderTableRows={(item, index) => ( = ({ }) => { const [selectedCheckbox, setSelectedCheckbox] = useState([]); const [showModal, setShowModal] = useState(false); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); const modalConfig = { title: OVERVIEW.DELETE_SOURCE, @@ -64,8 +66,8 @@ export const ManagedSourcesTable: React.FC = ({ } function onSelectedCheckboxChange(id: string) { - const start = (currentPageRef.current - 1) * 10; - const end = currentPageRef.current * 10; + const start = (currentPage - 1) * itemsPerPage; + const end = currentPage * itemsPerPage; const slicedData = data.slice(start, end); if (id === SELECT_ALL_CHECKBOX) { if (selectedCheckbox.length === slicedData.length) { @@ -89,6 +91,10 @@ export const ManagedSourcesTable: React.FC = ({ setSelectedCheckbox([]); } + const indexOfLastItem = currentPage * itemsPerPage; + const indexOfFirstItem = indexOfLastItem - itemsPerPage; + const currentItems = data.slice(indexOfFirstItem, indexOfLastItem); + function renderTableHeader() { return ( <> @@ -104,6 +110,7 @@ export const ManagedSourcesTable: React.FC = ({ deleteSourcesHandler={() => setShowModal(true)} filterByConditionStatus={filterByConditionStatus} filterByConditionMessage={filterByConditionMessage} + currentItems={currentItems} /> {showModal && ( = ({ onSelectedCheckboxChange={onSelectedCheckboxChange} /> )} + currentPage={currentPage} + itemsPerPage={itemsPerPage} + setCurrentPage={setCurrentPage} + setItemsPerPage={setItemsPerPage} /> ); diff --git a/frontend/webapp/components/overview/sources/managed.sources.table/sources.table.header.tsx b/frontend/webapp/components/overview/sources/managed.sources.table/sources.table.header.tsx index 89d988062..38b916316 100644 --- a/frontend/webapp/components/overview/sources/managed.sources.table/sources.table.header.tsx +++ b/frontend/webapp/components/overview/sources/managed.sources.table/sources.table.header.tsx @@ -63,6 +63,7 @@ interface ActionsTableHeaderProps { filterSourcesByLanguage?: (languages: string[]) => void; filterByConditionStatus?: (status: 'All' | 'True' | 'False') => void; filterByConditionMessage: (message: string[]) => void; + currentItems: ManagedSource[]; } export function SourcesTableHeader({ @@ -77,6 +78,7 @@ export function SourcesTableHeader({ onSelectedCheckboxChange, filterByConditionStatus, filterByConditionMessage, + currentItems, }: ActionsTableHeaderProps) { const [currentSortId, setCurrentSortId] = useState(''); const [groupNamespaces, setGroupNamespaces] = useState([]); @@ -383,7 +385,10 @@ export function SourcesTableHeader({ 0} + value={ + selectedCheckbox.length === currentItems.length && + currentItems.length > 0 + } onChange={() => onSelectedCheckboxChange(SELECT_ALL_CHECKBOX)} /> diff --git a/frontend/webapp/design.system/table/index.tsx b/frontend/webapp/design.system/table/index.tsx index 5a86861cc..b2d697a62 100644 --- a/frontend/webapp/design.system/table/index.tsx +++ b/frontend/webapp/design.system/table/index.tsx @@ -8,6 +8,10 @@ type TableProps = { renderTableRows: (item: T, index: number) => JSX.Element; renderEmptyResult: () => JSX.Element; onPaginate?: (pageNumber: number) => void; + currentPage: number; + itemsPerPage: number; + setCurrentPage: (page: number) => void; + setItemsPerPage: (itemsPerPage: number) => void; }; export const OdigosTable = (props: TableProps) => { diff --git a/frontend/webapp/package.json b/frontend/webapp/package.json index 1344ab571..cf08e00a0 100644 --- a/frontend/webapp/package.json +++ b/frontend/webapp/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@focus-reactive/react-yaml": "^1.1.2", - "@keyval-dev/design-system": "^2.3.1", + "@keyval-dev/design-system": "^2.3.3", "@next/font": "^13.4.7", "@reduxjs/toolkit": "^2.2.1", "@svgr/webpack": "^6.2.1", diff --git a/frontend/webapp/yarn.lock b/frontend/webapp/yarn.lock index d50006ec1..99fa3207e 100644 --- a/frontend/webapp/yarn.lock +++ b/frontend/webapp/yarn.lock @@ -1482,10 +1482,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@keyval-dev/design-system@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@keyval-dev/design-system/-/design-system-2.3.1.tgz#d679fdb7f97848e7cd58e17a0efc1589443dba81" - integrity sha512-mePVh+Nu5+lb3uGc2ukT/8KM5I65BlQ5rACVkAOK9CGDqoAm55lcPXXpKH6BYXYTRcsd+6VtoD2okzpAjkck8g== +"@keyval-dev/design-system@^2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@keyval-dev/design-system/-/design-system-2.3.3.tgz#728cd8715f9a964128ea35c9157a6e55e75c6a68" + integrity sha512-3WGHURPiTsWJdzJKpfUcKgiUKd+8KAOW+oYX76wcp/9+I04o/4MeMWLYdYxaKabGYdw7ur4hWnagIG+t9UHg+Q== dependencies: "@focus-reactive/react-yaml" "^1.1.2" "@svgr/core" "^8.0.0"