diff --git a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/ArtemisPreferences.tsx b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/ArtemisPreferences.tsx index c782011..9a9b906 100644 --- a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/ArtemisPreferences.tsx +++ b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/ArtemisPreferences.tsx @@ -59,6 +59,9 @@ const ArtemisPreferencesForm: React.FunctionComponent = () => { const format = formats.find(format => format.index === artemisPreferences.artemisBrowseBytesMessages); const [selectedFormat, setSelectedFormat] = useState(format ? format.description : off.description); + const [selectedPageSize, setSelectedPageSize] = useState(artemisPreferencesService.loadArtemisPreferences().artemisDefaultPageSize) + const [isPageSizeDropdownOpen, setPageSizeDropdownOpen] = React.useState(false); + const updatePreferences = (value: string | number | boolean, key: keyof ArtemisOptions): void => { const updatedPreferences = { ...artemisPreferences, ...{ [key]: value } } @@ -78,6 +81,10 @@ const ArtemisPreferencesForm: React.FunctionComponent = () => { setDropdownOpen(!isDropdownOpen) } + const handlePageSizeToggle = () => { + setPageSizeDropdownOpen(!isPageSizeDropdownOpen) + } + const handleFormatChange = (event?: React.MouseEvent, value?: string | number) => { setSelectedFormat(value as string); setDropdownOpen(false); @@ -87,6 +94,13 @@ const ArtemisPreferencesForm: React.FunctionComponent = () => { } } + const handlePageSizeChange = (event?: React.MouseEvent, value?: string | number) => { + setSelectedPageSize(value as number); + setPageSizeDropdownOpen(false); + updatePreferences(value as number, 'artemisDefaultPageSize'); + artemisPreferencesService.resetPageSizes(); + } + return ( @@ -151,6 +165,37 @@ const ArtemisPreferencesForm: React.FunctionComponent = () => { + + }> + + + {' '} + + + + ) diff --git a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/addresses/AddressesTable.tsx b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/addresses/AddressesTable.tsx index bc19182..649bff8 100644 --- a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/addresses/AddressesTable.tsx +++ b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/addresses/AddressesTable.tsx @@ -28,6 +28,7 @@ import { CreateAddress } from './CreateAddress'; import { SendMessage } from '../messages/SendMessage'; import { createAddressObjectName } from '../util/jmx'; import { useNavigate } from 'react-router-dom'; +import { columnStorage } from '../artemis-preferences-service'; export const AddressesTable: React.FunctionComponent = (navigate) => { const getQueueFilter = (row: any) => { @@ -169,7 +170,7 @@ export const AddressesTable: React.FunctionComponent = (navigate) => { return ( - + ): void @@ -27,12 +38,14 @@ export type ArtemisOptions = { artemisDLQ: string artemisExpiryQueue: string artemisBrowseBytesMessages: number + artemisDefaultPageSize: number } export const ARTEMIS_PREFERENCES_DEFAULT_VALUES: ArtemisOptions = { artemisDLQ: "^DLQ$", artemisExpiryQueue: "^ExpiryQueue$", artemisBrowseBytesMessages: 99, + artemisDefaultPageSize: 10 } as const export const STORAGE_KEY_ARTEMIS_PREFERENCES = 'artemis.preferences' @@ -68,6 +81,28 @@ class ArtemisPreferencesService implements IArtemisPreferencesService { localStorage.setItem(storageLocation, JSON.stringify(data)); } + loadTablePageSize(storageLocation: string|undefined): number { + const localStorageData = localStorage.getItem(storageLocation + PAGE_SIZE); + if (localStorageData) { + return Number(localStorageData); + } + return this.loadArtemisPreferences().artemisDefaultPageSize; + } + + saveTablePageSize(storageLocation: string, size: number) { + localStorage.setItem(storageLocation + PAGE_SIZE, size.toString()); + } + + resetPageSizes() { + localStorage.removeItem(columnStorage.queues + PAGE_SIZE); + localStorage.removeItem(columnStorage.addresses + PAGE_SIZE); + localStorage.removeItem(columnStorage.connections + PAGE_SIZE); + localStorage.removeItem(columnStorage.consumers + PAGE_SIZE); + localStorage.removeItem(columnStorage.producers + PAGE_SIZE); + localStorage.removeItem(columnStorage.sessions + PAGE_SIZE); + localStorage.removeItem(columnStorage.messages + PAGE_SIZE); + } + private loadFromStorage(): Partial { const localStorageData = localStorage.getItem(STORAGE_KEY_ARTEMIS_PREFERENCES) diff --git a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/connections/ConnectionsTable.tsx b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/connections/ConnectionsTable.tsx index 6e0b681..37ed001 100644 --- a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/connections/ConnectionsTable.tsx +++ b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/connections/ConnectionsTable.tsx @@ -21,6 +21,7 @@ import { artemisService } from '../artemis-service'; import { Modal, ModalVariant, Button } from '@patternfly/react-core'; import { IAction } from '@patternfly/react-table'; import { eventService } from '@hawtio/react'; +import { columnStorage } from '../artemis-preferences-service'; export const ConnectionsTable: React.FunctionComponent = (navigate) => { const getSessionFilter = (row: any) => { @@ -89,7 +90,7 @@ export const ConnectionsTable: React.FunctionComponent = (navigate) => return ( <> - + = navigate => { const getSessionFilter = (row: any) => { @@ -120,7 +121,7 @@ export const ConsumerTable: React.FunctionComponent = navigate => { return ( <> - + = props => { const [rows, setRows] = useState([]) const [perPage, setPerPage] = useState(10); const [columns, setColumns] = useState(allColumns); + const [columnsLoaded, setColumnsLoaded] = useState(false); const [columnsModalOpen, setColumnsModalOpen] = useState(false); const [resultsSize, setresultsSize] = useState(0); const [selectedMessages, setSelectedMessages] = useState([]); @@ -90,6 +92,12 @@ export const MessagesTable: React.FunctionComponent = props => { const response = await artemisService.getMessages(queueMBean, page, perPage, filter); return response; } + setPerPage(artemisPreferencesService.loadTablePageSize(columnStorage.messages)); + if (!columnsLoaded) { + const updatedColumns: Column[] = artemisPreferencesService.loadColumnPreferences(columnStorage.messages, allColumns); + setColumns(updatedColumns); + setColumnsLoaded(true); + } listData(); }, [props.address, props.routingType, props.queue, page, perPage, filter, selectedMessages]) @@ -99,6 +107,7 @@ export const MessagesTable: React.FunctionComponent = props => { }; const handlePerPageSelect = (_event: React.MouseEvent | React.KeyboardEvent | MouseEvent, newPerPage: number, newPage: number) => { + artemisPreferencesService.saveTablePageSize(columnStorage.messages, newPerPage) setPerPage(newPerPage); }; @@ -155,6 +164,7 @@ export const MessagesTable: React.FunctionComponent = props => { const onSave = () => { setColumnsModalOpen(!columnsModalOpen); + artemisPreferencesService.saveColumnPreferences(columnStorage.messages, columns); }; const updateColumnStatus = (index: number, column: Column) => { diff --git a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/producers/ProducerTable.tsx b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/producers/ProducerTable.tsx index 5ed698e..a709702 100644 --- a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/producers/ProducerTable.tsx +++ b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/producers/ProducerTable.tsx @@ -18,6 +18,7 @@ import React, { } from 'react' import { Navigate } from '../views/ArtemisTabView.js'; import { ActiveSort, ArtemisTable, Column, Filter } from '../table/ArtemisTable'; import { artemisService } from '../artemis-service'; +import { columnStorage } from '../artemis-preferences-service'; export const ProducerTable: React.FunctionComponent = navigate => { const getSessionFilter = (row: any) => { @@ -60,5 +61,5 @@ export const ProducerTable: React.FunctionComponent = navigate => { return data; } - return + return } \ No newline at end of file diff --git a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/queues/QueuesTable.tsx b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/queues/QueuesTable.tsx index 04c662f..223549b 100644 --- a/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/queues/QueuesTable.tsx +++ b/artemis-console-extension/artemis-extension/src/artemis-extension/artemis/queues/QueuesTable.tsx @@ -25,6 +25,7 @@ import { QueueNavigate } from './QueuesView.js'; import { ArtemisContext } from '../context'; import { createQueueObjectName } from '../util/jmx'; import { useNavigate } from 'react-router-dom'; +import { columnStorage } from '../artemis-preferences-service'; export const QueuesTable: React.FunctionComponent = navigate => { const getAddressFilter = (row: any) => { @@ -254,7 +255,7 @@ export const QueuesTable: React.FunctionComponent = navigate => { }; return ( - <> = navigate => { const getConnectionFilter = (row: any) => { @@ -109,7 +110,7 @@ export const SessionsTable: React.FunctionComponent = navigate => { return ( - <> + <> { + if(broker.storageColumnLocation) { + artemisPreferencesService.saveTablePageSize(broker.storageColumnLocation, newPerPage) + } setPerPage(newPerPage); };