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} /> -
+