diff --git a/package-lock.json b/package-lock.json
index 2833a3c0..2f9e5e58 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7365,9 +7365,9 @@
}
},
"node_modules/flatted": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz",
- "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"license": "ISC"
},
"node_modules/flot": {
diff --git a/package.json b/package.json
index 217e5aee..1cbbb458 100644
--- a/package.json
+++ b/package.json
@@ -148,7 +148,7 @@
"minimatch": "^9.0.7"
},
"@typescript-eslint/utils": {
- "flatted": "^3.4.0"
+ "flatted": "^3.4.2"
},
"copy-webpack-plugin": {
"schema-utils": "^4.3.3",
@@ -161,10 +161,10 @@
"minimatch": "^3.1.4"
},
"eslint-webpack-plugin": {
- "flatted": "^3.4.0"
+ "flatted": "^3.4.2"
},
"flat-cache": {
- "flatted": "^3.4.0"
+ "flatted": "^3.4.2"
},
"fork-ts-checker-webpack-plugin": {
"ajv": "^8.18.0",
diff --git a/src/components/ClearFilterData.tsx b/src/components/ClearFilterData.tsx
index 1b452d80..c21ceafe 100644
--- a/src/components/ClearFilterData.tsx
+++ b/src/components/ClearFilterData.tsx
@@ -1,5 +1,7 @@
import React, { useState } from 'react'
-import { Button } from '@grafana/ui'
+import { css } from '@emotion/css'
+import { GrafanaTheme2 } from '@grafana/data'
+import { Button, useStyles2 } from '@grafana/ui'
import { clearFilterEditorData } from '../lib/localStorageService'
export const ClearFilterData: React.FC<{}> = () => {
@@ -10,20 +12,19 @@ export const ClearFilterData: React.FC<{}> = () => {
setFilterDataCleared(true)
}
+ const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(2)};
+ margin-bottom: ${theme.spacing(2)};
+ `,
+ })
+
+ const s = useStyles2(getStyles)
+
return (
<>
-
-
Filter Data
-
+
Filter Data
+
OpenNMS Filter Panel data is stored in browser local storage.
Click here to remove any existing filter data.
@@ -34,7 +35,7 @@ export const ClearFilterData: React.FC<{}> = () => {
{
filterDataCleared &&
-
Filter data was cleared.
+
Filter data was cleared.
}
>
)
diff --git a/src/datasources/entity-ds/EntityClauseEditor.tsx b/src/datasources/entity-ds/EntityClauseEditor.tsx
index 1e2d5f3b..721a45f3 100644
--- a/src/datasources/entity-ds/EntityClauseEditor.tsx
+++ b/src/datasources/entity-ds/EntityClauseEditor.tsx
@@ -1,4 +1,7 @@
import React, { useEffect } from 'react'
+import { css } from '@emotion/css'
+import { GrafanaTheme2 } from '@grafana/data'
+import { useStyles2 } from '@grafana/ui'
import { EntityClause } from './EntityClause'
import { ClauseActionType, OnmsEntityType, SearchOption } from './types'
import { API } from 'opennms'
@@ -12,6 +15,14 @@ interface EntityClauseEditorProps {
}
export const EntityClauseEditor = ({ setFilter, loading, propertiesAsArray, clauses, dispatchClauses }: EntityClauseEditorProps) => {
+ const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(2)};
+ margin-bottom: ${theme.spacing(2)};
+ `,
+ })
+
+ const s = useStyles2(getStyles)
useEffect(() => {
const updatedFilter = new API.Filter();
@@ -74,7 +85,7 @@ export const EntityClauseEditor = ({ setFilter, loading, propertiesAsArray, clau
hasMultipleClauses={clauses.length > 1}
/>
-
+
>
)
})}
diff --git a/src/datasources/entity-ds/EntityQueryEditor.tsx b/src/datasources/entity-ds/EntityQueryEditor.tsx
index 784e7392..60b37789 100644
--- a/src/datasources/entity-ds/EntityQueryEditor.tsx
+++ b/src/datasources/entity-ds/EntityQueryEditor.tsx
@@ -1,4 +1,5 @@
import React, { useState, useEffect, useReducer } from 'react'
+import { css } from '@emotion/css'
import {
InlineField,
InlineFieldRow,
@@ -7,8 +8,9 @@ import {
SegmentSection,
Spinner,
Switch,
+ useStyles2
} from '@grafana/ui'
-import { SelectableValue } from '@grafana/data';
+import { GrafanaTheme2, SelectableValue } from '@grafana/data';
import { useEntityProperties } from '../../hooks/useEntityProperties';
import { isInteger } from '../../lib/utils'
import { EntityClauseEditor } from './EntityClauseEditor';
@@ -84,6 +86,23 @@ export const EntityQueryEditor: React.FC
= ({ onChange,
const [featuredAttributes, setFeaturedAttributes] = useState(true)
const { propertiesLoading, propertiesAsArray } = useEntityProperties(value.label || '', featuredAttributes, client)
+ const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(2)};
+ margin-bottom: ${theme.spacing(2)};
+ `,
+ maxInput: css`
+ max-width: 150px;
+ `,
+ biggerLabels: css`
+ label {
+ min-width: 32px;
+ }
+ `
+ })
+
+ const s = useStyles2(getStyles)
+
useEffect(() => {
if (propertiesLoading) {
setLoading(true)
@@ -116,20 +135,7 @@ export const EntityQueryEditor: React.FC = ({ onChange,
})
}
- return (
-
+ return (
= ({ onChange,
}
-
+
= ({ onChange,
searchAttributes={propertiesAsArray}
/>
-
+
- {
const elem = (ev.target as HTMLInputElement)
if (elem) {
@@ -179,7 +185,7 @@ export const EntityQueryEditor: React.FC = ({ onChange,
}} />
-
+
diff --git a/src/datasources/perf-ds/PerformanceAttribute.tsx b/src/datasources/perf-ds/PerformanceAttribute.tsx
index 85b1ac1f..79dcc294 100644
--- a/src/datasources/perf-ds/PerformanceAttribute.tsx
+++ b/src/datasources/perf-ds/PerformanceAttribute.tsx
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react'
-import { SelectableValue } from '@grafana/data'
-import { Segment, SegmentAsync, SegmentInput } from '@grafana/ui'
+import { css } from '@emotion/css'
+import { GrafanaTheme2, SelectableValue } from '@grafana/data'
+import { Segment, SegmentAsync, SegmentInput, useStyles2 } from '@grafana/ui'
import { SegmentSectionWithIcon } from 'components/SegmentSectionWithIcon'
import { ValueOverrideSwitch } from 'components/ValueOverrideSwitch'
import { getTemplateVariables, isTemplateVariable } from 'lib/variableHelpers'
@@ -40,6 +41,15 @@ export const PerformanceAttribute: React.FC
= ({
const [isResourceOverride, setIsResourceOverride] = useState(false)
const [resourceOverrideValue, setResourceOverrideValue] = useState('')
+ const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(2)};
+ margin-bottom: ${theme.spacing(2)};
+ `,
+ })
+
+ const s = useStyles2(getStyles)
+
useEffect(() => {
// Note: this could result in invalid queries if not all parameters have been selected.
// However, not updating the query results in old parameters still being used. This way,
@@ -154,7 +164,7 @@ export const PerformanceAttribute: React.FC = ({
}
`}
-
+
= ({
}
-
+
{
(performanceState?.node?.id || performanceState?.node?.label) &&
@@ -197,7 +207,7 @@ export const PerformanceAttribute: React.FC = ({
}
}
-
+
{
(performanceState?.node?.id || performanceState?.node?.label) &&
(performanceState?.resource?.id || performanceState?.resource?.label) &&
@@ -212,7 +222,7 @@ export const PerformanceAttribute: React.FC = ({
}}
/>
-
+
= ({
}}
/>
-
+
= ({
}}
/>
-
+
= ({
>
}
-
+
{ }
+const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(1.25)};
+ margin-bottom: ${theme.spacing(1.25)};
+ `,
+})
+
export const PerformanceConfigEditor: React.FC = ({ onOptionsChange, options }) => {
+ const s = useStyles2(getStyles)
+
return (
<>
-
-
- Additional Options
+ Additional Options
-
+
({
+ spacer: css`
+ margin-top: ${theme.spacing(1)};
+ `,
+})
+
export const PerformanceExpression: React.FC = ({ query, updateQuery }) => {
const [expression, setExpression] = useState(query.expression || '')
const [label, setLabel] = useState(query.label || '')
+ const s = useStyles2(getStyles)
useEffect(() => {
updateQuery(expression, label)
@@ -19,7 +28,7 @@ export const PerformanceExpression: React.FC = ({ qu
return (
<>
-
+
= ({ qu
}}
/>
-
+
Promise>>
}
+const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(1)};
+ `,
+})
+
export const PerformanceFilter: React.FC = ({ query, updateQuery, loadFilters }) => {
const [filter, setFilter] = useState>(query.filter)
const [filterState, setFilterState] = useState>(query.filterState || {})
+ const s = useStyles2(getStyles)
const updateFilterState = (propertyName: string | undefined, value: {value: any, filter: any}) => {
if (propertyName !== undefined) {
@@ -51,7 +59,7 @@ export const PerformanceFilter: React.FC = ({ query, upd
return (
<>
-
+
= ({ query, upd
{ filter?.parameter?.map((param: PerformanceQueryFilterParameter, index) => {
return (
<>
-
+
{param.type === 'boolean' &&
({
+ spacer: css`
+ margin-top: ${theme.spacing(1)};
+ `,
+})
+
export const PerformanceStringProperty: React.FC = ({
query,
updateQuery,
@@ -19,6 +27,7 @@ export const PerformanceStringProperty: React.FC
loadStringPropertiesForState
}) => {
const [performanceState, setPerformanceState] = useState(query.stringPropertyState || defaultPerformanceStringState)
+ const s = useStyles2(getStyles)
const setPerformanceStateProperty = (propertyName: string, propertyValue: unknown) => {
setPerformanceState({ ...performanceState, [propertyName]: propertyValue })
@@ -33,7 +42,7 @@ export const PerformanceStringProperty: React.FC
return (
<>
-
+
}}
/>
-
+
{
(performanceState?.node?.id || isTemplateVariable(performanceState?.node)) &&
@@ -60,7 +69,7 @@ export const PerformanceStringProperty: React.FC
/>
}
-
+
{
(performanceState?.node?.id || isTemplateVariable(performanceState?.node)) &&
(performanceState?.resource?.id || isTemplateVariable(performanceState?.resource)) &&
diff --git a/src/panels/alarm-table/AlarmTableColumnSizes.tsx b/src/panels/alarm-table/AlarmTableColumnSizes.tsx
index 424814df..306fab0b 100644
--- a/src/panels/alarm-table/AlarmTableColumnSizes.tsx
+++ b/src/panels/alarm-table/AlarmTableColumnSizes.tsx
@@ -1,4 +1,6 @@
import React, { useEffect, useState } from 'react'
+import { css } from '@emotion/css'
+import { GrafanaTheme2 } from '@grafana/data'
import {
Collapse,
Combobox,
@@ -6,7 +8,8 @@ import {
InlineFieldRow,
Input,
Stack,
- Switch
+ Switch,
+ useStyles2
} from '@grafana/ui'
import { FieldDisplay } from 'components/FieldDisplay'
import { AlarmTableColumnSizeItem, AlarmTableColumnSizeState } from './AlarmTableTypes'
@@ -17,10 +20,17 @@ interface AlarmTableColumnSizeProps {
context: any
}
+const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-top: ${theme.spacing(2)};
+ `,
+})
+
export const AlarmTableColumnSizes: React.FC = ({ onChange, columnState, context }) => {
const [isOpen, setIsOpen] = useState(columnState?.active || false)
const [active, setActive] = useState(columnState?.active || false)
const [columnSizes, setColumnSizes] = useState(columnState?.columnSizes || [])
+ const s = useStyles2(getStyles)
const onAddColumn = (fieldName?: string) => {
if (fieldName && !columnSizes.some(c => c.fieldName === fieldName)) {
@@ -71,10 +81,6 @@ export const AlarmTableColumnSizes: React.FC = ({ onC
-
+
setIsOpen(!isOpen)}>
@@ -140,7 +146,7 @@ export const AlarmTableColumnSizes: React.FC = ({ onC
:
-
+
No configured column sizes.
}
diff --git a/src/panels/filter-panel/FilterPanelFilterSelector.tsx b/src/panels/filter-panel/FilterPanelFilterSelector.tsx
index a3eb30bf..f485845a 100644
--- a/src/panels/filter-panel/FilterPanelFilterSelector.tsx
+++ b/src/panels/filter-panel/FilterPanelFilterSelector.tsx
@@ -1,4 +1,6 @@
import React, { useState } from 'react'
+import { css } from '@emotion/css'
+import { GrafanaTheme2 } from '@grafana/data'
import {
Button,
Combobox,
@@ -7,7 +9,8 @@ import {
InlineFieldRow,
Label,
Stack,
- Switch
+ Switch,
+ useStyles2
} from '@grafana/ui'
import { GrafanaDatasource } from 'hooks/useDataSources'
import { useEntities } from 'hooks/useEntities'
@@ -33,6 +36,14 @@ export const FilterPanelFilterSelector: React.FC
const { propertiesAsArray } = useEntityProperties(entity?.label || '', featuredAttributes, client as any)
const { getFilterId, getFilterIdFromParts } = useFilterData()
+ const getStyles = (theme: GrafanaTheme2) => ({
+ spacer: css`
+ margin-bottom: ${theme.spacing(0.75)};
+ `,
+ })
+
+ const s = useStyles2(getStyles)
+
const isDisabled = () => {
if (!entity || !attribute || !datasource || attribute.label === 'Select Attribute') {
return true
@@ -72,13 +83,6 @@ export const FilterPanelFilterSelector: React.FC
return (
<>
-
@@ -87,7 +91,7 @@ export const FilterPanelFilterSelector: React.FC
({ label: o.label, value: o.id } ))} onChange={(e) => setAttribute(e)} value={attribute} />
-
+