in public/pages/Dashboard/containers/Dashboard.js [336:507]
render() {
const {
alerts,
alertsByTriggers,
alertState,
loadingMonitors,
monitors,
page,
search,
selectedItems,
severityLevel,
size,
sortDirection,
sortField,
totalAlerts,
totalTriggers,
} = this.state;
const {
monitorIds,
detectorIds,
onCreateTrigger,
perAlertView,
monitorType,
groupBy,
setFlyout,
httpClient,
location,
history,
notifications,
isAlertsFlyout = false,
} = this.props;
let totalItems = perAlertView ? totalAlerts : totalTriggers;
const isBucketMonitor = monitorType === MONITOR_TYPE.BUCKET_LEVEL;
let columnType = perAlertView
? isBucketMonitor
? insertGroupByColumn(groupBy)
: queryColumns
: alertColumns(
history,
httpClient,
loadingMonitors,
location,
monitors,
notifications,
setFlyout,
this.openFlyout,
this.closeFlyout,
this.refreshDashboard
);
const pagination = {
pageIndex: page,
pageSize: size,
totalItemCount: Math.min(MAX_ALERT_COUNT, totalItems),
pageSizeOptions: DEFAULT_PAGE_SIZE_OPTIONS,
};
const sorting = {
sort: {
direction: sortDirection,
field: sortField,
},
};
const selection = {
onSelectionChange: this.onSelectionChange,
selectable: perAlertView
? (item) => item.state === ALERT_STATE.ACTIVE
: (item) => item.ACTIVE > 0,
selectableMessage: perAlertView
? (selectable) => (selectable ? undefined : 'Only active alerts can be acknowledged.')
: (selectable) =>
selectable ? undefined : 'Only triggers with active alerts can be acknowledged.',
};
const actions = () => {
// The acknowledge button is disabled when viewing by per alerts, and no item selected or per trigger view and item selected is not 1.
const actions = [
<EuiButton
onClick={this.acknowledgeAlert}
disabled={perAlertView ? !selectedItems.length : selectedItems.length !== 1}
data-test-subj={'acknowledgeAlertsButton'}
>
Acknowledge
</EuiButton>,
];
if (!perAlertView) {
const alert = selectedItems[0];
actions.unshift(
<EuiButton
onClick={() => {
this.openFlyout({
...alert,
history,
httpClient,
loadingMonitors,
location,
monitors,
notifications,
setFlyout,
closeFlyout: this.closeFlyout,
refreshDashboard: this.refreshDashboard,
});
}}
disabled={selectedItems.length !== 1}
>
View alert details
</EuiButton>
);
}
if (detectorIds.length) {
actions.unshift(
<EuiButton
href={`${OPENSEARCH_DASHBOARDS_AD_PLUGIN}#/detectors/${detectorIds[0]}`}
target="_blank"
>
View detector <EuiIcon type="popout" />
</EuiButton>
);
}
return actions;
};
const getItemId = (item) => {
if (perAlertView) return isBucketMonitor ? item.id : `${item.id}-${item.version}`;
return `${item.triggerID}-${item.version}`;
};
return (
<ContentPanel
title={perAlertView ? 'Alerts' : 'Alerts by triggers'}
titleSize={monitorIds.length ? 's' : 'l'}
bodyStyles={{ padding: 'initial' }}
actions={actions()}
>
<DashboardControls
activePage={page}
pageCount={Math.ceil(totalItems / size) || 1}
search={search}
severity={severityLevel}
state={alertState}
onSearchChange={this.onSearchChange}
onSeverityChange={this.onSeverityLevelChange}
onStateChange={this.onAlertStateChange}
onPageChange={this.onPageClick}
isAlertsFlyout={isAlertsFlyout}
/>
<EuiHorizontalRule margin="xs" />
<EuiBasicTable
items={perAlertView ? alerts : alertsByTriggers}
/*
* If using just ID, doesn't update selectedItems when doing acknowledge
* because the next getAlerts have the same id
* $id-$version will correctly remove selected items
* */
itemId={getItemId}
columns={columnType}
pagination={perAlertView ? pagination : undefined}
sorting={sorting}
isSelectable={true}
selection={selection}
onChange={this.onTableChange}
noItemsMessage={<DashboardEmptyPrompt onCreateTrigger={onCreateTrigger} />}
/>
</ContentPanel>
);
}