problems: handle page size change
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import ReactTable from 'react-table';
|
import ReactTable from 'react-table';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
import _ from 'lodash';
|
||||||
import * as utils from '../../datasource-zabbix/utils';
|
import * as utils from '../../datasource-zabbix/utils';
|
||||||
import { ProblemsPanelOptions, Trigger, ZBXEvent, GFTimeRange, RTCell, ZBXTag } from '../types';
|
import { ProblemsPanelOptions, Trigger, ZBXEvent, GFTimeRange, RTCell, ZBXTag } from '../types';
|
||||||
import EventTag from './EventTag';
|
import EventTag from './EventTag';
|
||||||
@@ -12,10 +13,12 @@ export interface ProblemListProps {
|
|||||||
panelOptions: ProblemsPanelOptions;
|
panelOptions: ProblemsPanelOptions;
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
timeRange?: GFTimeRange;
|
timeRange?: GFTimeRange;
|
||||||
|
pageSize?: number;
|
||||||
fontSize?: number;
|
fontSize?: number;
|
||||||
getProblemEvents: (ids: string[]) => ZBXEvent[];
|
getProblemEvents: (ids: string[]) => ZBXEvent[];
|
||||||
onProblemAck?: (problem: Trigger, data: AckProblemData) => void;
|
onProblemAck?: (problem: Trigger, data: AckProblemData) => void;
|
||||||
onTagClick?: (tag: ZBXTag, datasource: string) => void;
|
onTagClick?: (tag: ZBXTag, datasource: string) => void;
|
||||||
|
onPageSizeChange?: (pageSize: number, pageIndex: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ProblemListState {
|
interface ProblemListState {
|
||||||
@@ -43,6 +46,12 @@ export class ProblemList extends PureComponent<ProblemListProps, ProblemListStat
|
|||||||
return this.props.onProblemAck(problem, data);
|
return this.props.onProblemAck(problem, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handlePageSizeChange = (pageSize, pageIndex) => {
|
||||||
|
if (this.props.onPageSizeChange) {
|
||||||
|
this.props.onPageSizeChange(pageSize, pageIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildColumns() {
|
buildColumns() {
|
||||||
const result = [];
|
const result = [];
|
||||||
const options = this.props.panelOptions;
|
const options = this.props.panelOptions;
|
||||||
@@ -101,8 +110,13 @@ export class ProblemList extends PureComponent<ProblemListProps, ProblemListStat
|
|||||||
// console.log(this.props.problems);
|
// console.log(this.props.problems);
|
||||||
const columns = this.buildColumns();
|
const columns = this.buildColumns();
|
||||||
this.rootWidth = this.rootRef && this.rootRef.clientWidth;
|
this.rootWidth = this.rootRef && this.rootRef.clientWidth;
|
||||||
const { fontSize } = this.props;
|
const { pageSize, fontSize } = this.props;
|
||||||
const panelClass = classNames('panel-problems', { [`font-size--${fontSize}`]: fontSize });
|
const panelClass = classNames('panel-problems', { [`font-size--${fontSize}`]: fontSize });
|
||||||
|
let pageSizeOptions = [5, 10, 20, 25, 50, 100];
|
||||||
|
if (pageSize) {
|
||||||
|
pageSizeOptions.push(pageSize);
|
||||||
|
pageSizeOptions = _.sortBy(pageSizeOptions);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={panelClass} ref={this.setRootRef}>
|
<div className={panelClass} ref={this.setRootRef}>
|
||||||
@@ -110,6 +124,8 @@ export class ProblemList extends PureComponent<ProblemListProps, ProblemListStat
|
|||||||
data={this.props.problems}
|
data={this.props.problems}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
defaultPageSize={10}
|
defaultPageSize={10}
|
||||||
|
pageSize={pageSize}
|
||||||
|
pageSizeOptions={pageSizeOptions}
|
||||||
minRows={0}
|
minRows={0}
|
||||||
loading={this.props.loading}
|
loading={this.props.loading}
|
||||||
noDataText="No problems found"
|
noDataText="No problems found"
|
||||||
@@ -125,6 +141,7 @@ export class ProblemList extends PureComponent<ProblemListProps, ProblemListStat
|
|||||||
expanded={this.getExpandedPage(this.state.page)}
|
expanded={this.getExpandedPage(this.state.page)}
|
||||||
onExpandedChange={this.handleExpandedChange}
|
onExpandedChange={this.handleExpandedChange}
|
||||||
onPageChange={page => this.setState({ page })}
|
onPageChange={page => this.setState({ page })}
|
||||||
|
onPageSizeChange={this.handlePageSizeChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -543,6 +543,14 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
|||||||
return this.currentTriggersPage;
|
return this.currentTriggersPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handlePageSizeChange(pageSize, pageIndex) {
|
||||||
|
this.panel.pageSize = pageSize;
|
||||||
|
this.pageIndex = pageIndex;
|
||||||
|
this.scope.$apply(() => {
|
||||||
|
this.render();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
formatHostName(trigger) {
|
formatHostName(trigger) {
|
||||||
let host = "";
|
let host = "";
|
||||||
if (this.panel.hostField && this.panel.hostTechNameField) {
|
if (this.panel.hostField && this.panel.hostTechNameField) {
|
||||||
@@ -727,6 +735,8 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
|||||||
const fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));
|
const fontSize = parseInt(panel.fontSize.slice(0, panel.fontSize.length - 1));
|
||||||
const fontSizeProp = fontSize && fontSize !== 100 ? fontSize : null;
|
const fontSizeProp = fontSize && fontSize !== 100 ? fontSize : null;
|
||||||
|
|
||||||
|
const pageSize = panel.pageSize || 10;
|
||||||
|
|
||||||
let panelOptions = {};
|
let panelOptions = {};
|
||||||
for (let prop in PANEL_DEFAULTS) {
|
for (let prop in PANEL_DEFAULTS) {
|
||||||
panelOptions[prop] = ctrl.panel[prop];
|
panelOptions[prop] = ctrl.panel[prop];
|
||||||
@@ -736,8 +746,10 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
|||||||
panelOptions,
|
panelOptions,
|
||||||
timeRange: { timeFrom, timeTo },
|
timeRange: { timeFrom, timeTo },
|
||||||
loading: ctrl.loading,
|
loading: ctrl.loading,
|
||||||
|
pageSize: pageSize,
|
||||||
fontSize: fontSizeProp,
|
fontSize: fontSizeProp,
|
||||||
getProblemEvents: ctrl.getProblemEvents.bind(ctrl),
|
getProblemEvents: ctrl.getProblemEvents.bind(ctrl),
|
||||||
|
onPageSizeChange: ctrl.handlePageSizeChange.bind(ctrl),
|
||||||
onProblemAck: (trigger, data) => {
|
onProblemAck: (trigger, data) => {
|
||||||
const message = data.message;
|
const message = data.message;
|
||||||
return ctrl.acknowledgeTrigger(trigger, message);
|
return ctrl.acknowledgeTrigger(trigger, message);
|
||||||
|
|||||||
Reference in New Issue
Block a user