grafana/public/app/plugins/datasource/cloudwatch/components/SelectedLogsGroups.tsx
Erik Sundell bd09e88e50
Cloudwatch: Refactor log group model (#60873)
* refactor log group query model

* update deprecated comment

* refactor test
2023-01-04 10:07:03 +01:00

85 lines
2.4 KiB
TypeScript

import React, { useEffect, useState } from 'react';
import { Button, ConfirmModal, useStyles2 } from '@grafana/ui';
import { LogGroup } from '../types';
import getStyles from './styles';
type CrossAccountLogsQueryProps = {
selectedLogGroups: LogGroup[];
onChange: (selectedLogGroups: LogGroup[]) => void;
};
const MAX_VISIBLE_LOG_GROUPS = 6;
export const SelectedLogsGroups = ({ selectedLogGroups, onChange }: CrossAccountLogsQueryProps) => {
const styles = useStyles2(getStyles);
const [showConfirm, setShowConfirm] = useState(false);
const [visibleSelectecLogGroups, setVisibleSelectecLogGroups] = useState(
selectedLogGroups.slice(0, MAX_VISIBLE_LOG_GROUPS)
);
useEffect(() => {
setVisibleSelectecLogGroups(selectedLogGroups.slice(0, MAX_VISIBLE_LOG_GROUPS));
}, [selectedLogGroups]);
return (
<>
<div className={styles.selectedLogGroupsContainer}>
{visibleSelectecLogGroups.map((lg) => (
<Button
key={lg.arn}
size="sm"
variant="secondary"
icon="times"
className={styles.removeButton}
onClick={() => {
onChange(selectedLogGroups.filter((slg) => slg.arn !== lg.arn));
}}
>
{`${lg.name}`}
</Button>
))}
{visibleSelectecLogGroups.length !== selectedLogGroups.length && (
<Button
size="sm"
variant="secondary"
icon="plus"
fill="outline"
className={styles.removeButton}
onClick={() => setVisibleSelectecLogGroups(selectedLogGroups)}
>
Show all
</Button>
)}
{selectedLogGroups.length > 0 && (
<Button
size="sm"
variant="secondary"
icon="times"
fill="outline"
className={styles.removeButton}
onClick={() => setShowConfirm(true)}
>
Clear selection
</Button>
)}
</div>
<ConfirmModal
isOpen={showConfirm}
title="Clear Log Group Selection"
body="Are you sure you want to clear all log groups?"
confirmText="Yes"
dismissText="No"
icon="exclamation-triangle"
onConfirm={() => {
setShowConfirm(false);
onChange([]);
}}
onDismiss={() => setShowConfirm(false)}
/>
</>
);
};