Skip to content

Commit b4b4843

Browse files
SpikatrixGurinderRawala
authored andcommitted
Show filters icon only when there are some variables to show (#116)
1 parent d47ffa6 commit b4b4843

File tree

2 files changed

+52
-54
lines changed

2 files changed

+52
-54
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
import { css } from '@emotion/css';
2-
import FilterListIcon from '@mui/icons-material/FilterList';
3-
import { Box, styled } from '@mui/material';
4-
import React, { FC, PureComponent } from 'react';
2+
import React, { PureComponent } from 'react';
53
import { connect, MapStateToProps } from 'react-redux';
64

7-
import { AnnotationQuery, DataQuery, TypedVariableModel, GrafanaTheme2 } from '@grafana/data';
8-
import { FnGlobalState } from 'app/core/reducers/fn-slice';
5+
import { AnnotationQuery, DataQuery, GrafanaTheme2 } from '@grafana/data';
6+
import { stylesFactory, Themeable2, withTheme2 } from '@grafana/ui';
97

108
import { StoreState } from '../../../../types';
119
import { getSubMenuVariables, getVariablesState } from '../../../variables/state/selectors';
10+
import { VariableModel } from '../../../variables/types';
1211
import { DashboardModel } from '../../state';
1312

1413
import { Annotations } from './Annotations';
1514
import { DashboardLinks } from './DashboardLinks';
1615
import { SubMenuItems } from './SubMenuItems';
17-
// import { VariableModel } from 'app/features/variables/types';
18-
import { Themeable2, stylesFactory, withTheme2 } from '@grafana-ui';
1916
import { DashboardLink } from '@grafana/schema/dist/esm/index';
2017

2118
interface OwnProps extends Themeable2 {
@@ -25,8 +22,7 @@ interface OwnProps extends Themeable2 {
2522
}
2623

2724
interface ConnectedProps {
28-
variables: TypedVariableModel[];
29-
hiddenVariables: FnGlobalState['hiddenVariables'];
25+
variables: VariableModel[];
3026
}
3127

3228
interface DispatchProps {}
@@ -56,17 +52,16 @@ class SubMenuUnConnected extends PureComponent<Props> {
5652

5753
const styles = getStyles(theme);
5854

55+
if (!dashboard.isSubMenuVisible()) {
56+
return null;
57+
}
58+
5959
const readOnlyVariables = dashboard.meta.isSnapshot ?? false;
6060

6161
return (
62-
<div className="submenu-controls">
63-
<form aria-label="Template variables" className={styles}>
64-
<FilterWithIcon />
65-
<SubMenuItems
66-
variables={variables}
67-
readOnly={readOnlyVariables}
68-
hiddenVariables={this.props.hiddenVariables}
69-
/>
62+
<div className={styles.submenu}>
63+
<form aria-label="Template variables" className={styles.formStyles} onSubmit={this.disableSubmitOnEnter}>
64+
<SubMenuItems variables={variables} readOnly={readOnlyVariables} />
7065
</form>
7166
<Annotations
7267
annotations={annotations}
@@ -86,25 +81,25 @@ const mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (
8681

8782
return {
8883
variables: getSubMenuVariables(uid, templatingState.variables),
89-
hiddenVariables: state.fnGlobalState.hiddenVariables,
9084
};
9185
};
9286

9387
const getStyles = stylesFactory((theme: GrafanaTheme2) => {
9488
return {
95-
formStyles: css({
96-
display: 'contents',
97-
flexWrap: 'wrap',
98-
}),
99-
submenu: css({
100-
display: 'flex',
101-
flexDirection: 'row',
102-
flexWrap: 'wrap',
103-
alignContent: 'flex-start',
104-
alignItems: 'flex-start',
105-
gap: `${theme.spacing(1)} ${theme.spacing(2)}`,
106-
padding: `0 0 ${theme.spacing(1)} 0`,
107-
}),
89+
formStyles: css`
90+
display: flex;
91+
flex-wrap: wrap;
92+
display: contents;
93+
`,
94+
submenu: css`
95+
display: flex;
96+
flex-direction: row;
97+
flex-wrap: wrap;
98+
align-content: flex-start;
99+
align-items: flex-start;
100+
gap: ${theme.spacing(1)} ${theme.spacing(2)};
101+
padding: 0 0 ${theme.spacing(1)} 0;
102+
`,
108103
spacer: css({
109104
flexGrow: 1,
110105
}),
@@ -114,20 +109,3 @@ const getStyles = stylesFactory((theme: GrafanaTheme2) => {
114109
export const SubMenu = withTheme2(connect(mapStateToProps)(SubMenuUnConnected));
115110

116111
SubMenu.displayName = 'SubMenu';
117-
118-
const FilterWithIcon: FC = () => (
119-
<FilterWithIconStyled>
120-
<FilterListIcon sx={{ color: '#3A785E' }} />
121-
FILTERS
122-
</FilterWithIconStyled>
123-
);
124-
125-
const FilterWithIconStyled = styled(Box)({
126-
display: 'flex',
127-
gap: 1,
128-
alignItems: 'center',
129-
color: '#3A785E',
130-
fontWeight: 600,
131-
lineHeight: '160%',
132-
fontSize: 12,
133-
});

public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx

+26-6
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
1-
import React, { useEffect, useState } from 'react';
1+
import { css } from '@emotion/css';
2+
import { useEffect, useState } from 'react';
23

4+
import { GrafanaTheme2, TypedVariableModel, VariableHide } from '@grafana/data';
35
import { selectors } from '@grafana/e2e-selectors';
4-
import { useSelector } from 'app/types';
6+
import { useStyles2 } from '@grafana/ui';
57

68
import { PickerRenderer } from '../../../variables/pickers/PickerRenderer';
7-
import { VariableHide, VariableModel } from '../../../variables/types';
9+
import { useSelector } from 'app/types';
810

911
interface Props {
10-
variables: VariableModel[];
12+
variables: TypedVariableModel[];
1113
readOnly?: boolean;
1214
}
1315

16+
1417
export const SubMenuItems = ({ variables, readOnly }: Props) => {
15-
const [visibleVariables, setVisibleVariables] = useState<VariableModel[]>([]);
18+
const [visibleVariables, setVisibleVariables] = useState<TypedVariableModel[]>([]);
1619

1720
const hiddenVariables = useSelector((state) => state.fnGlobalState.hiddenVariables);
1821

22+
const styles = useStyles2(getStyles);
23+
1924
useEffect(() => {
2025
setVisibleVariables(
2126
variables.filter((state) => state.hide !== VariableHide.hideVariable && !hiddenVariables?.includes(state.id))
@@ -32,7 +37,7 @@ export const SubMenuItems = ({ variables, readOnly }: Props) => {
3237
return (
3338
<div
3439
key={variable.id}
35-
className="submenu-item gf-form-inline"
40+
className={styles.submenuItem}
3641
data-testid={selectors.pages.Dashboard.SubMenu.submenuItem}
3742
>
3843
<PickerRenderer variable={variable} readOnly={readOnly} />
@@ -42,3 +47,18 @@ export const SubMenuItems = ({ variables, readOnly }: Props) => {
4247
</>
4348
);
4449
};
50+
51+
const getStyles = (theme: GrafanaTheme2) => ({
52+
submenuItem: css({
53+
display: 'inline-block',
54+
55+
'.fa-caret-down': {
56+
fontSize: '75%',
57+
paddingLeft: theme.spacing(1),
58+
},
59+
60+
'.gf-form': {
61+
marginBottom: 0,
62+
},
63+
}),
64+
});

0 commit comments

Comments
 (0)