|
|
|
@ -5,7 +5,6 @@ import { useForm } from 'react-hook-form'; |
|
|
|
|
import { DataSourceInstanceSettings, GrafanaTheme2, SelectableValue } from '@grafana/data'; |
|
|
|
|
import { Button, Field, Icon, Input, Label, RadioButtonGroup, Stack, Tooltip, useStyles2 } from '@grafana/ui'; |
|
|
|
|
import { DashboardPicker } from 'app/core/components/Select/DashboardPicker'; |
|
|
|
|
import { useQueryParams } from 'app/core/hooks/useQueryParams'; |
|
|
|
|
import { PromAlertingRuleState, PromRuleType } from 'app/types/unified-alerting-dto'; |
|
|
|
|
|
|
|
|
|
import { |
|
|
|
@ -16,6 +15,8 @@ import { |
|
|
|
|
trackRulesSearchInputInteraction, |
|
|
|
|
} from '../../Analytics'; |
|
|
|
|
import { useRulesFilter } from '../../hooks/useFilteredRules'; |
|
|
|
|
import { useURLSearchParams } from '../../hooks/useURLSearchParams'; |
|
|
|
|
import { useAlertingHomePageExtensions } from '../../plugins/useAlertingHomePageExtensions'; |
|
|
|
|
import { RuleHealth } from '../../search/rulesSearchParser'; |
|
|
|
|
import { alertStateToReadable } from '../../utils/rules'; |
|
|
|
|
import { HoverCard } from '../HoverCard'; |
|
|
|
@ -68,7 +69,8 @@ const RuleStateOptions = Object.entries(PromAlertingRuleState).map(([key, value] |
|
|
|
|
|
|
|
|
|
const RulesFilter = ({ onFilterCleared = () => undefined }: RulesFilerProps) => { |
|
|
|
|
const styles = useStyles2(getStyles); |
|
|
|
|
const [queryParams, setQueryParams] = useQueryParams(); |
|
|
|
|
const [queryParams, updateQueryParams] = useURLSearchParams(); |
|
|
|
|
const { pluginsFilterEnabled } = usePluginsFilterStatus(); |
|
|
|
|
const { filterState, hasActiveFilters, searchQuery, setSearchQuery, updateFilters } = useRulesFilter(); |
|
|
|
|
|
|
|
|
|
// This key is used to force a rerender on the inputs when the filters are cleared
|
|
|
|
@ -133,7 +135,7 @@ const RulesFilter = ({ onFilterCleared = () => undefined }: RulesFilerProps) => |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const handleViewChange = (view: string) => { |
|
|
|
|
setQueryParams({ view }); |
|
|
|
|
updateQueryParams({ view }); |
|
|
|
|
trackRulesListViewChange({ view }); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -220,6 +222,19 @@ const RulesFilter = ({ onFilterCleared = () => undefined }: RulesFilerProps) => |
|
|
|
|
onChange={handleRuleHealthChange} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
{pluginsFilterEnabled && ( |
|
|
|
|
<div> |
|
|
|
|
<Label>Plugin rules</Label> |
|
|
|
|
<RadioButtonGroup<'hide'> |
|
|
|
|
options={[ |
|
|
|
|
{ label: 'Show', value: undefined }, |
|
|
|
|
{ label: 'Hide', value: 'hide' }, |
|
|
|
|
]} |
|
|
|
|
value={filterState.plugins} |
|
|
|
|
onChange={(value) => updateFilters({ ...filterState, plugins: value })} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
)} |
|
|
|
|
</Stack> |
|
|
|
|
<Stack direction="column" gap={1}> |
|
|
|
|
<Stack direction="row" gap={1}> |
|
|
|
@ -262,7 +277,7 @@ const RulesFilter = ({ onFilterCleared = () => undefined }: RulesFilerProps) => |
|
|
|
|
<Label>View as</Label> |
|
|
|
|
<RadioButtonGroup |
|
|
|
|
options={ViewOptions} |
|
|
|
|
value={String(queryParams['view'] ?? ViewOptions[0].value)} |
|
|
|
|
value={queryParams.get('view') ?? ViewOptions[0].value} |
|
|
|
|
onChange={handleViewChange} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
@ -348,4 +363,9 @@ const helpStyles = (theme: GrafanaTheme2) => ({ |
|
|
|
|
}), |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
function usePluginsFilterStatus() { |
|
|
|
|
const { extensions } = useAlertingHomePageExtensions(); |
|
|
|
|
return { pluginsFilterEnabled: extensions.length > 0 }; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export default RulesFilter; |
|
|
|
|