diff --git a/.betterer.results b/.betterer.results index d10ae63961d..7434e2da655 100644 --- a/.betterer.results +++ b/.betterer.results @@ -3955,8 +3955,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -3974,9 +3973,6 @@ exports[`better eslint`] = { "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/valueMatchersUI.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/transformers/calculateHeatmap/editor/helper.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], diff --git a/contribute/style-guides/styling.md b/contribute/style-guides/styling.md index c9d4c193be2..caf1b137f41 100644 --- a/contribute/style-guides/styling.md +++ b/contribute/style-guides/styling.md @@ -48,7 +48,7 @@ interface ComponentAProps { isActive: boolean; } -const ComponentA: React.FC = ({ isActive }) => { +const ComponentA = ({ isActive }: ComponentAProps) => { const theme = useTheme(); const styles = useStyles2(theme); diff --git a/docs/sources/developers/plugins/add-support-for-variables.md b/docs/sources/developers/plugins/add-support-for-variables.md index c8bc2a85358..c398b284fb4 100644 --- a/docs/sources/developers/plugins/add-support-for-variables.md +++ b/docs/sources/developers/plugins/add-support-for-variables.md @@ -143,7 +143,7 @@ Let's create a custom query editor to allow the user to edit the query model. onChange: (query: MyVariableQuery, definition: string) => void; } - export const VariableQueryEditor: React.FC = ({ onChange, query }) => { + export const VariableQueryEditor = ({ onChange, query }: VariableQueryProps) => { const [state, setState] = useState(query); const saveQuery = () => { diff --git a/docs/sources/developers/plugins/custom-panel-option-editors.md b/docs/sources/developers/plugins/custom-panel-option-editors.md index d943c6deb70..d0d4ab8e766 100644 --- a/docs/sources/developers/plugins/custom-panel-option-editors.md +++ b/docs/sources/developers/plugins/custom-panel-option-editors.md @@ -17,7 +17,7 @@ import React from 'react'; import { Button } from '@grafana/ui'; import { StandardEditorProps } from '@grafana/data'; -export const SimpleEditor: React.FC> = ({ value, onChange }) => { +export const SimpleEditor = ({ value, onChange }: StandardEditorProps) => { return ; }; ``` @@ -51,7 +51,9 @@ interface Settings { to: number; } -export const SimpleEditor: React.FC> = ({ item, value, onChange }) => { +type Props = StandardEditorProps; + +export const SimpleEditor = ({ item, value, onChange }: Props) => { const options: Array> = []; // Default values @@ -97,7 +99,7 @@ The editor context is available through the `context` prop. The data frames retu **SimpleEditor.tsx** ```ts -export const SimpleEditor: React.FC> = ({ item, value, onChange, context }) => { +export const SimpleEditor = ({ item, value, onChange, context }: StandardEditorProps) => { const options: SelectableValue[] = []; if (context.data) { diff --git a/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.tsx b/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.tsx index 365133b2584..5f6ae1f3adc 100644 --- a/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.tsx +++ b/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.tsx @@ -44,7 +44,7 @@ const getStyles = stylesFactory((theme: GrafanaTheme2) => { }; }); -export const ButtonCascader: React.FC = (props) => { +export const ButtonCascader = (props: ButtonCascaderProps) => { const { onChange, className, loadData, icon, buttonProps, hideDownIcon, variant, disabled, ...rest } = props; const theme = useTheme2(); const styles = getStyles(theme); diff --git a/packages/grafana-ui/src/components/ContextMenu/ContextMenu.tsx b/packages/grafana-ui/src/components/ContextMenu/ContextMenu.tsx index 04bf348225e..9a9fe8ff3ab 100644 --- a/packages/grafana-ui/src/components/ContextMenu/ContextMenu.tsx +++ b/packages/grafana-ui/src/components/ContextMenu/ContextMenu.tsx @@ -21,8 +21,8 @@ export interface ContextMenuProps { renderHeader?: () => React.ReactNode; } -export const ContextMenu: React.FC = React.memo( - ({ x, y, onClose, focusOnOpen = true, renderMenuItems, renderHeader }) => { +export const ContextMenu = React.memo( + ({ x, y, onClose, focusOnOpen = true, renderMenuItems, renderHeader }: ContextMenuProps) => { const menuRef = useRef(null); const [positionStyles, setPositionStyles] = useState({}); diff --git a/packages/grafana-ui/src/components/ContextMenu/WithContextMenu.tsx b/packages/grafana-ui/src/components/ContextMenu/WithContextMenu.tsx index 4809c7b42c7..a3fa1f9c452 100644 --- a/packages/grafana-ui/src/components/ContextMenu/WithContextMenu.tsx +++ b/packages/grafana-ui/src/components/ContextMenu/WithContextMenu.tsx @@ -11,7 +11,7 @@ export interface WithContextMenuProps { focusOnOpen?: boolean; } -export const WithContextMenu: React.FC = ({ children, renderMenuItems, focusOnOpen = true }) => { +export const WithContextMenu = ({ children, renderMenuItems, focusOnOpen = true }: WithContextMenuProps) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 }); return ( diff --git a/packages/grafana-ui/src/components/DataLinks/DataLinkEditor.tsx b/packages/grafana-ui/src/components/DataLinks/DataLinkEditor.tsx index 46bad70bd34..a1701236958 100644 --- a/packages/grafana-ui/src/components/DataLinks/DataLinkEditor.tsx +++ b/packages/grafana-ui/src/components/DataLinks/DataLinkEditor.tsx @@ -30,48 +30,46 @@ const getStyles = (theme: GrafanaTheme2) => ({ `, }); -export const DataLinkEditor: React.FC = React.memo( - ({ index, value, onChange, suggestions, isLast }) => { - const styles = useStyles2(getStyles); +export const DataLinkEditor = React.memo(({ index, value, onChange, suggestions, isLast }: DataLinkEditorProps) => { + const styles = useStyles2(getStyles); - const onUrlChange = (url: string, callback?: () => void) => { - onChange(index, { ...value, url }, callback); - }; - const onTitleChange = (event: ChangeEvent) => { - onChange(index, { ...value, title: event.target.value }); - }; + const onUrlChange = (url: string, callback?: () => void) => { + onChange(index, { ...value, url }, callback); + }; + const onTitleChange = (event: ChangeEvent) => { + onChange(index, { ...value, title: event.target.value }); + }; - const onOpenInNewTabChanged = () => { - onChange(index, { ...value, targetBlank: !value.targetBlank }); - }; + const onOpenInNewTabChanged = () => { + onChange(index, { ...value, targetBlank: !value.targetBlank }); + }; - return ( -
- - - + return ( +
+ + + - - - + + + - - - + + + - {isLast && ( -
- With data links you can reference data variables like series name, labels and values. Type CMD+Space, - CTRL+Space, or $ to open variable suggestions. -
- )} -
- ); - } -); + {isLast && ( +
+ With data links you can reference data variables like series name, labels and values. Type CMD+Space, + CTRL+Space, or $ to open variable suggestions. +
+ )} +
+ ); +}); DataLinkEditor.displayName = 'DataLinkEditor'; diff --git a/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx b/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx index 6ed1b123202..97b9a6774dc 100644 --- a/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx +++ b/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx @@ -72,8 +72,13 @@ const getStyles = (theme: GrafanaTheme2) => ({ // This memoised also because rerendering the slate editor grabs focus which created problem in some cases this // was used and changes to different state were propagated here. -export const DataLinkInput: React.FC = memo( - ({ value, onChange, suggestions, placeholder = 'http://your-grafana.com/d/000000010/annotations' }) => { +export const DataLinkInput = memo( + ({ + value, + onChange, + suggestions, + placeholder = 'http://your-grafana.com/d/000000010/annotations', + }: DataLinkInputProps) => { const editorRef = useRef(null); const styles = useStyles2(getStyles); const [showingSuggestions, setShowingSuggestions] = useState(false); diff --git a/packages/grafana-ui/src/components/DataLinks/DataLinkSuggestions.tsx b/packages/grafana-ui/src/components/DataLinks/DataLinkSuggestions.tsx index 841d4c492bd..ecce2409816 100644 --- a/packages/grafana-ui/src/components/DataLinks/DataLinkSuggestions.tsx +++ b/packages/grafana-ui/src/components/DataLinks/DataLinkSuggestions.tsx @@ -53,7 +53,7 @@ const getStyles = (theme: GrafanaTheme2) => { }; }; -export const DataLinkSuggestions: React.FC = ({ suggestions, ...otherProps }) => { +export const DataLinkSuggestions = ({ suggestions, ...otherProps }: DataLinkSuggestionsProps) => { const ref = useRef(null); useClickAway(ref, () => { @@ -104,8 +104,16 @@ interface DataLinkSuggestionsListProps extends DataLinkSuggestionsProps { activeRef?: React.RefObject; } -const DataLinkSuggestionsList: React.FC = React.memo( - ({ activeIndex, activeIndexOffset, label, onClose, onSuggestionSelect, suggestions, activeRef: selectedRef }) => { +const DataLinkSuggestionsList = React.memo( + ({ + activeIndex, + activeIndexOffset, + label, + onClose, + onSuggestionSelect, + suggestions, + activeRef: selectedRef, + }: DataLinkSuggestionsListProps) => { const styles = useStyles2(getStyles); return ( diff --git a/packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx b/packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx index c0db22200d1..6670b573371 100644 --- a/packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx +++ b/packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx @@ -18,12 +18,7 @@ interface DataLinksInlineEditorProps { data: DataFrame[]; } -export const DataLinksInlineEditor: React.FC = ({ - links, - onChange, - getSuggestions, - data, -}) => { +export const DataLinksInlineEditor = ({ links, onChange, getSuggestions, data }: DataLinksInlineEditorProps) => { const theme = useTheme2(); const [editIndex, setEditIndex] = useState(null); const [isNew, setIsNew] = useState(false); diff --git a/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx index 434f5fec3b1..e03e2d9b5d1 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx @@ -6,7 +6,7 @@ import { SecretFormField } from '../SecretFormField/SecretFormField'; import { HttpSettingsProps } from './types'; -export const BasicAuthSettings: React.FC = ({ dataSourceConfig, onChange }) => { +export const BasicAuthSettings = ({ dataSourceConfig, onChange }: HttpSettingsProps) => { const password = dataSourceConfig.secureJsonData ? dataSourceConfig.secureJsonData.basicAuthPassword : ''; const onPasswordReset = () => { diff --git a/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx index 3716d3f1db5..77af3d52cc8 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx @@ -55,7 +55,7 @@ const getCustomHeaderRowStyles = stylesFactory(() => { }; }); -const CustomHeaderRow: React.FC = ({ header, onBlur, onChange, onRemove, onReset }) => { +const CustomHeaderRow = ({ header, onBlur, onChange, onRemove, onReset }: CustomHeaderRowProps) => { const styles = getCustomHeaderRowStyles(); return (
diff --git a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx index 79819918e20..184b523972f 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx @@ -61,7 +61,7 @@ const HttpAccessHelp = () => ( const LABEL_WIDTH = 26; -export const DataSourceHttpSettings: React.FC = (props) => { +export const DataSourceHttpSettings = (props: HttpSettingsProps) => { const { defaultUrl, dataSourceConfig, diff --git a/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx index 125a9f7e356..33b6cc0b7fd 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx @@ -7,11 +7,11 @@ import { HttpSettingsBaseProps } from './types'; const LABEL_WIDTH = 26; -export const HttpProxySettings: React.FC = ({ +export const HttpProxySettings = ({ dataSourceConfig, onChange, showForwardOAuthIdentityOption = true, -}) => { +}: HttpSettingsBaseProps) => { return ( <>
diff --git a/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx index 9c29706f0c0..8b06ab0ef70 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx @@ -10,7 +10,7 @@ import { Tooltip } from '../Tooltip/Tooltip'; import { CertificationKey } from './CertificationKey'; import { HttpSettingsBaseProps } from './types'; -export const TLSAuthSettings: React.FC = ({ dataSourceConfig, onChange }) => { +export const TLSAuthSettings = ({ dataSourceConfig, onChange }: HttpSettingsBaseProps) => { const hasTLSCACert = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsCACert; const hasTLSClientCert = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsClientCert; const hasTLSClientKey = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsClientKey; diff --git a/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.test.tsx b/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.test.tsx index 374dba3886e..d4b3b0c6226 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.test.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.test.tsx @@ -7,7 +7,7 @@ import { RelativeTimeRange } from '@grafana/data'; import { RelativeTimeRangePicker } from './RelativeTimeRangePicker'; function setup(initial: RelativeTimeRange = { from: 900, to: 0 }): RenderResult { - const StatefulPicker: React.FC<{}> = () => { + const StatefulPicker = () => { const [value, setValue] = useState(initial); return ; }; diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx index 65f106b8f98..1f65228d284 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx @@ -43,7 +43,7 @@ interface FormProps extends Omit { historyOptions?: TimeOption[]; } -export const TimePickerContentWithScreenSize: React.FC = (props) => { +export const TimePickerContentWithScreenSize = (props: PropsWithScreenSize) => { const { quickOptions = [], isReversed, @@ -174,7 +174,7 @@ const NarrowScreenForm = (props: FormProps) => { ); }; -const FullScreenForm: React.FC = (props) => { +const FullScreenForm = (props: FormProps) => { const { onChange, value, timeZone, fiscalYearStartMonth, isReversed, historyOptions } = props; const theme = useTheme2(); const styles = getFullScreenStyles(theme, props.hideQuickRanges); diff --git a/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOption.tsx b/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOption.tsx index 13c9fea1315..779b2b5e850 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOption.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOption.tsx @@ -26,7 +26,7 @@ export interface SelectableZone extends SelectableValue { searchIndex: string; } -export const WideTimeZoneOption: React.FC> = (props, ref) => { +export const WideTimeZoneOption = (props: PropsWithChildren) => { const { children, innerProps, innerRef, data, isSelected, isFocused } = props; const theme = useTheme2(); const styles = getStyles(theme); @@ -66,7 +66,7 @@ export const WideTimeZoneOption: React.FC> = (props, re ); }; -export const CompactTimeZoneOption: React.FC> = (props, ref) => { +export const CompactTimeZoneOption = (props: React.PropsWithChildren) => { const { children, innerProps, innerRef, data, isSelected, isFocused } = props; const theme = useTheme2(); const styles = getStyles(theme); diff --git a/packages/grafana-ui/src/components/FilterPill/FilterPill.tsx b/packages/grafana-ui/src/components/FilterPill/FilterPill.tsx index 6797f0cf3b9..60f0a013a1f 100644 --- a/packages/grafana-ui/src/components/FilterPill/FilterPill.tsx +++ b/packages/grafana-ui/src/components/FilterPill/FilterPill.tsx @@ -15,7 +15,7 @@ export interface FilterPillProps { icon?: IconName; } -export const FilterPill: React.FC = ({ label, selected, onClick, icon = 'check' }) => { +export const FilterPill = ({ label, selected, onClick, icon = 'check' }: FilterPillProps) => { const styles = useStyles2(getStyles); const clearButton = useStyles2(clearButtonStyles); return ( diff --git a/packages/grafana-ui/src/components/Forms/Field.tsx b/packages/grafana-ui/src/components/Forms/Field.tsx index a7c7b406c08..e6f32fca6e4 100644 --- a/packages/grafana-ui/src/components/Forms/Field.tsx +++ b/packages/grafana-ui/src/components/Forms/Field.tsx @@ -69,7 +69,7 @@ export const getFieldStyles = stylesFactory((theme: GrafanaTheme2) => { }; }); -export const Field: React.FC = ({ +export const Field = ({ label, description, horizontal, @@ -83,7 +83,7 @@ export const Field: React.FC = ({ validationMessageHorizontalOverflow, htmlFor, ...otherProps -}) => { +}: FieldProps) => { const theme = useTheme2(); const styles = getFieldStyles(theme); const inputId = htmlFor ?? getChildId(children); diff --git a/packages/grafana-ui/src/components/Forms/Label.tsx b/packages/grafana-ui/src/components/Forms/Label.tsx index ca1c6501232..7b842245351 100644 --- a/packages/grafana-ui/src/components/Forms/Label.tsx +++ b/packages/grafana-ui/src/components/Forms/Label.tsx @@ -46,7 +46,7 @@ export const getLabelStyles = stylesFactory((theme: GrafanaTheme2) => { }; }); -export const Label: React.FC = ({ children, description, className, category, ...labelProps }) => { +export const Label = ({ children, description, className, category, ...labelProps }: LabelProps) => { const theme = useTheme2(); const styles = getLabelStyles(theme); const categories = category?.map((c, i) => { diff --git a/packages/grafana-ui/src/components/Forms/Legend.tsx b/packages/grafana-ui/src/components/Forms/Legend.tsx index 16e97fa613e..70cc785a5da 100644 --- a/packages/grafana-ui/src/components/Forms/Legend.tsx +++ b/packages/grafana-ui/src/components/Forms/Legend.tsx @@ -20,7 +20,7 @@ export const getLegendStyles = (theme: GrafanaTheme2) => { }; }; -export const Legend: React.FC = ({ children, className, ...legendProps }) => { +export const Legend = ({ children, className, ...legendProps }: LabelProps) => { const styles = useStyles2(getLegendStyles); return ( diff --git a/packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonList.story.tsx b/packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonList.story.tsx index 51ac325ab50..f1e9b85e18b 100644 --- a/packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonList.story.tsx +++ b/packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonList.story.tsx @@ -115,7 +115,7 @@ DisabledList.args = { }; export const Dots: Story = () => { - const Wrapper: React.FC> = ({ title, children }) => ( + const Wrapper = ({ title, children }: React.PropsWithChildren<{ title: string }>) => (
{title}
{children} diff --git a/packages/grafana-ui/src/components/Graph/GraphContextMenu.tsx b/packages/grafana-ui/src/components/Graph/GraphContextMenu.tsx index 7bb65f25c96..e672881dcb7 100644 --- a/packages/grafana-ui/src/components/Graph/GraphContextMenu.tsx +++ b/packages/grafana-ui/src/components/Graph/GraphContextMenu.tsx @@ -32,14 +32,14 @@ export type GraphContextMenuProps = ContextMenuProps & { }; /** @internal */ -export const GraphContextMenu: React.FC = ({ +export const GraphContextMenu = ({ getContextMenuSource, timeZone, itemsGroup, dimensions, contextDimensions, ...otherProps -}) => { +}: GraphContextMenuProps) => { const source = getContextMenuSource(); // Do not render items that do not have label specified diff --git a/packages/grafana-ui/src/components/Graph/GraphTooltip/MultiModeGraphTooltip.tsx b/packages/grafana-ui/src/components/Graph/GraphTooltip/MultiModeGraphTooltip.tsx index 973d5e059d7..f071abdcea2 100644 --- a/packages/grafana-ui/src/components/Graph/GraphTooltip/MultiModeGraphTooltip.tsx +++ b/packages/grafana-ui/src/components/Graph/GraphTooltip/MultiModeGraphTooltip.tsx @@ -8,12 +8,12 @@ import { getMultiSeriesGraphHoverInfo } from '../utils'; import { GraphTooltipContentProps } from './types'; -export const MultiModeGraphTooltip: React.FC< - GraphTooltipContentProps & { - // We expect position to figure out correct values when not hovering over a datapoint - pos: FlotPosition; - } -> = ({ dimensions, activeDimensions, pos, timeZone }) => { +type Props = GraphTooltipContentProps & { + // We expect position to figure out correct values when not hovering over a datapoint + pos: FlotPosition; +}; + +export const MultiModeGraphTooltip = ({ dimensions, activeDimensions, pos, timeZone }: Props) => { let activeSeriesIndex: number | null = null; // when no x-axis provided, skip rendering if (activeDimensions.xAxis === null) { diff --git a/packages/grafana-ui/src/components/Graph/GraphTooltip/SingleModeGraphTooltip.tsx b/packages/grafana-ui/src/components/Graph/GraphTooltip/SingleModeGraphTooltip.tsx index 6335d6a7d76..3b5ad3b2ade 100644 --- a/packages/grafana-ui/src/components/Graph/GraphTooltip/SingleModeGraphTooltip.tsx +++ b/packages/grafana-ui/src/components/Graph/GraphTooltip/SingleModeGraphTooltip.tsx @@ -11,11 +11,7 @@ import { SeriesTable } from '../../VizTooltip'; import { GraphTooltipContentProps } from './types'; -export const SingleModeGraphTooltip: React.FC = ({ - dimensions, - activeDimensions, - timeZone, -}) => { +export const SingleModeGraphTooltip = ({ dimensions, activeDimensions, timeZone }: GraphTooltipContentProps) => { // not hovering over a point, skip rendering if ( activeDimensions.yAxis === null || diff --git a/packages/grafana-ui/src/components/InfoBox/FeatureInfoBox.tsx b/packages/grafana-ui/src/components/InfoBox/FeatureInfoBox.tsx index 845ed27687f..18683c539ec 100644 --- a/packages/grafana-ui/src/components/InfoBox/FeatureInfoBox.tsx +++ b/packages/grafana-ui/src/components/InfoBox/FeatureInfoBox.tsx @@ -47,7 +47,7 @@ interface FeatureBadgeProps { tooltip?: string; } -export const FeatureBadge: React.FC = ({ featureState, tooltip }) => { +export const FeatureBadge = ({ featureState, tooltip }: FeatureBadgeProps) => { const display = getPanelStateBadgeDisplayModel(featureState); return ; }; diff --git a/packages/grafana-ui/src/components/Menu/MenuGroup.tsx b/packages/grafana-ui/src/components/Menu/MenuGroup.tsx index 2054dde3b6c..d366016c6e8 100644 --- a/packages/grafana-ui/src/components/Menu/MenuGroup.tsx +++ b/packages/grafana-ui/src/components/Menu/MenuGroup.tsx @@ -25,7 +25,7 @@ export interface MenuGroupProps extends Partial { } /** @internal */ -export const MenuGroup: React.FC = ({ label, ariaLabel, children }) => { +export const MenuGroup = ({ label, ariaLabel, children }: MenuGroupProps) => { const styles = useStyles2(getStyles); const labelID = `group-label-${uniqueId()}`; diff --git a/packages/grafana-ui/src/components/Menu/SubMenu.tsx b/packages/grafana-ui/src/components/Menu/SubMenu.tsx index 56c8e3b3ad1..470baddcc56 100644 --- a/packages/grafana-ui/src/components/Menu/SubMenu.tsx +++ b/packages/grafana-ui/src/components/Menu/SubMenu.tsx @@ -28,8 +28,8 @@ export interface SubMenuProps { } /** @internal */ -export const SubMenu: React.FC = React.memo( - ({ items, isOpen, openedWithArrow, setOpenedWithArrow, close, customStyle }) => { +export const SubMenu = React.memo( + ({ items, isOpen, openedWithArrow, setOpenedWithArrow, close, customStyle }: SubMenuProps) => { const styles = useStyles2(getStyles); const localRef = useRef(null); const [handleKeys] = useMenuFocus({ diff --git a/packages/grafana-ui/src/components/PanelChrome/ErrorIndicator.tsx b/packages/grafana-ui/src/components/PanelChrome/ErrorIndicator.tsx index d18e460b6e8..d6881ff6ada 100644 --- a/packages/grafana-ui/src/components/PanelChrome/ErrorIndicator.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/ErrorIndicator.tsx @@ -17,7 +17,7 @@ export type ErrorIndicatorProps = { /** * @internal */ -export const ErrorIndicator: React.FC = ({ error, onClick }) => { +export const ErrorIndicator = ({ error, onClick }: ErrorIndicatorProps) => { const styles = useStyles2(getStyles); if (!error) { diff --git a/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx b/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx index 610e0382fc8..e597c17ca3e 100644 --- a/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx @@ -18,7 +18,7 @@ export type LoadingIndicatorProps = { /** * @internal */ -export const LoadingIndicator: React.FC = ({ onCancel, loading }) => { +export const LoadingIndicator = ({ onCancel, loading }: LoadingIndicatorProps) => { const styles = useStyles2(getStyles); if (!loading) { diff --git a/packages/grafana-ui/src/components/PluginSignatureBadge/PluginSignatureBadge.tsx b/packages/grafana-ui/src/components/PluginSignatureBadge/PluginSignatureBadge.tsx index 6913310a7df..7992353cf66 100644 --- a/packages/grafana-ui/src/components/PluginSignatureBadge/PluginSignatureBadge.tsx +++ b/packages/grafana-ui/src/components/PluginSignatureBadge/PluginSignatureBadge.tsx @@ -14,7 +14,7 @@ export interface PluginSignatureBadgeProps extends HTMLAttributes = ({ status, ...otherProps }) => { +export const PluginSignatureBadge = ({ status, ...otherProps }: PluginSignatureBadgeProps) => { const display = getSignatureDisplayModel(status); return ( = ({ Component, onClick, disabled }) => ( + const Label = ({ Component, onClick, disabled }: LabelProps) => (