Skip to content

Commit b794428

Browse files
authored
feat(ui): Enhance time range selector (#9521)
Add basic styling to time range selector, auto close on update. This matches the behavior of the multiple project selector.
1 parent 36b4de0 commit b794428

File tree

3 files changed

+42
-19
lines changed

3 files changed

+42
-19
lines changed

src/sentry/static/sentry/app/components/organizations/timeRangeSelector/absoluteSelector.jsx

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,24 @@ export default class AbsoluteSelector extends React.Component {
3131
const {className, start, end, onChange} = this.props;
3232

3333
return (
34-
<Box p={2} className={className}>
35-
update time range (UTC)
36-
<DateTimeField
37-
name="start"
38-
label={t('From')}
39-
value={start}
40-
onChange={val => onChange('start', val)}
41-
/>
42-
<DateTimeField
43-
name="end"
44-
label={t('To')}
45-
value={end}
46-
onChange={val => onChange('end', val)}
47-
/>
34+
<Box className={className}>
35+
<Box mb={1}>{t('Update time range (UTC)')}</Box>
36+
<Box mb={1}>
37+
<DateTimeField
38+
name="start"
39+
label={t('From')}
40+
value={start}
41+
onChange={val => onChange('start', val)}
42+
/>
43+
</Box>
44+
<Box mb={1}>
45+
<DateTimeField
46+
name="end"
47+
label={t('To')}
48+
value={end}
49+
onChange={val => onChange('end', val)}
50+
/>
51+
</Box>
4852
</Box>
4953
);
5054
}

src/sentry/static/sentry/app/components/organizations/timeRangeSelector/index.jsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,27 @@ class TimeRangeSelector extends React.Component {
6060
showRelative: false,
6161
};
6262

63+
constructor() {
64+
super();
65+
this.state = {
66+
isOpen: false,
67+
};
68+
}
69+
6370
formatDate(date) {
6471
return moment(date).format('MMMM D, h:mm a');
6572
}
6673

74+
handleUpdate = () => {
75+
const {onUpdate} = this.props;
76+
if (typeof onUpdate === 'function') {
77+
onUpdate();
78+
}
79+
this.setState({
80+
isOpen: false,
81+
});
82+
};
83+
6784
render() {
6885
const {
6986
className,
@@ -73,7 +90,6 @@ class TimeRangeSelector extends React.Component {
7390
showAbsolute,
7491
showRelative,
7592
onChange,
76-
onUpdate,
7793
} = this.props;
7894
// Currently we will only show either absolute or relative selector, with "absolute" taking precedence
7995
// Maybe an ideal selector would allow the user to choose between the two if both types of dates were allowed
@@ -88,10 +104,13 @@ class TimeRangeSelector extends React.Component {
88104
<HeaderItem className={className} label={t('Time Range')}>
89105
<DropdownLink
90106
title={<DynamicWrapper value={summary} fixed="start to end" />}
91-
keepMenuOpen={true}
92107
anchorRight={true}
108+
keepMenuOpen={true}
109+
isOpen={this.state.isOpen}
110+
onOpen={() => this.setState({isOpen: true})}
111+
onClose={() => this.setState({isOpen: false})}
93112
>
94-
<Flex direction="column">
113+
<Flex direction="column" p={2}>
95114
{shouldShowAbsolute && (
96115
<AbsoluteSelector onChange={onChange} start={start} end={end} />
97116
)}
@@ -104,7 +123,7 @@ class TimeRangeSelector extends React.Component {
104123
)}
105124

106125
<div>
107-
<Button onClick={onUpdate}>{t('Update')}</Button>
126+
<Button onClick={this.handleUpdate}>{t('Update')}</Button>
108127
</div>
109128
</Flex>
110129
</DropdownLink>

src/sentry/static/sentry/app/components/organizations/timeRangeSelector/relativeSelector.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default class RelativeSelector extends React.Component {
3333
const {className, choices, value} = this.props;
3434

3535
return (
36-
<Box p={2} className={className}>
36+
<Box mb={1} className={className}>
3737
<SelectControl value={value} choices={choices} onChange={this.handleChange} />
3838
</Box>
3939
);

0 commit comments

Comments
 (0)