1
1
const $ = window . $ = require ( 'jquery' ) ;
2
2
import React from 'react' ;
3
-
4
3
import { Button } from 'react-bootstrap' ;
5
4
import Select from 'react-select' ;
6
5
import QueryTable from './QueryTable' ;
7
6
import DatabaseSelect from './DatabaseSelect' ;
8
- import { STATUS_OPTIONS } from '../common' ;
7
+ import { now , epochTimeXHoursAgo ,
8
+ epochTimeXDaysAgo , epochTimeXYearsAgo } from '../../modules/dates' ;
9
+ import { STATUS_OPTIONS , TIME_OPTIONS } from '../constants' ;
9
10
10
11
const propTypes = {
11
12
actions : React . PropTypes . object . isRequired ,
@@ -20,6 +21,8 @@ class QuerySearch extends React.PureComponent {
20
21
databaseId : null ,
21
22
userId : null ,
22
23
searchText : null ,
24
+ from : null ,
25
+ to : null ,
23
26
status : 'success' ,
24
27
queriesArray : [ ] ,
25
28
} ;
@@ -38,13 +41,44 @@ class QuerySearch extends React.PureComponent {
38
41
const val = ( db ) ? db . value : null ;
39
42
this . setState ( { databaseId : val } ) ;
40
43
}
41
- insertParams ( baseUrl , params ) {
42
- return baseUrl + '?' + params . join ( '&' ) ;
44
+ getTimeFromSelection ( selection ) {
45
+ switch ( selection ) {
46
+ case 'now' :
47
+ return now ( ) ;
48
+ case '1 hour ago' :
49
+ return epochTimeXHoursAgo ( 1 ) ;
50
+ case '1 day ago' :
51
+ return epochTimeXDaysAgo ( 1 ) ;
52
+ case '7 days ago' :
53
+ return epochTimeXDaysAgo ( 7 ) ;
54
+ case '28 days ago' :
55
+ return epochTimeXDaysAgo ( 28 ) ;
56
+ case '90 days ago' :
57
+ return epochTimeXDaysAgo ( 90 ) ;
58
+ case '1 year ago' :
59
+ return epochTimeXYearsAgo ( 1 ) ;
60
+ default :
61
+ return null ;
62
+ }
63
+ }
64
+ changeFrom ( user ) {
65
+ const val = ( user ) ? user . value : null ;
66
+ this . setState ( { from : val } ) ;
67
+ }
68
+ changeTo ( status ) {
69
+ const val = ( status ) ? status . value : null ;
70
+ this . setState ( { to : val } ) ;
43
71
}
44
72
changeUser ( user ) {
45
73
const val = ( user ) ? user . value : null ;
46
74
this . setState ( { userId : val } ) ;
47
75
}
76
+ insertParams ( baseUrl , params ) {
77
+ const validParams = params . filter (
78
+ function ( p ) { return p !== '' ; }
79
+ ) ;
80
+ return baseUrl + '?' + validParams . join ( '&' ) ;
81
+ }
48
82
changeStatus ( status ) {
49
83
const val = ( status ) ? status . value : null ;
50
84
this . setState ( { status : val } ) ;
@@ -67,10 +101,12 @@ class QuerySearch extends React.PureComponent {
67
101
}
68
102
refreshQueries ( ) {
69
103
const params = [
70
- `userId=${ this . state . userId } ` ,
71
- `databaseId=${ this . state . databaseId } ` ,
72
- `searchText=${ this . state . searchText } ` ,
73
- `status=${ this . state . status } ` ,
104
+ this . state . userId ? `user_id=${ this . state . userId } ` : '' ,
105
+ this . state . databaseId ? `database_id=${ this . state . databaseId } ` : '' ,
106
+ this . state . searchText ? `search_text=${ this . state . searchText } ` : '' ,
107
+ this . state . status ? `status=${ this . state . status } ` : '' ,
108
+ this . state . from ? `from=${ this . getTimeFromSelection ( this . state . from ) } ` : '' ,
109
+ this . state . to ? `to=${ this . getTimeFromSelection ( this . state . to ) } ` : '' ,
74
110
] ;
75
111
76
112
const url = this . insertParams ( '/caravel/search_queries' , params ) ;
@@ -113,9 +149,30 @@ class QuerySearch extends React.PureComponent {
113
149
placeholder = "Search Results"
114
150
/>
115
151
</ div >
116
- < div className = "col-sm-2" >
152
+ < div className = "col-sm-1" >
153
+ < Select
154
+ name = "select-from"
155
+ placeholder = "[From]-"
156
+ options = { TIME_OPTIONS .
157
+ slice ( 1 , TIME_OPTIONS . length ) . map ( ( t ) => ( { value : t , label : t } ) ) }
158
+ value = { this . state . from }
159
+ autosize = { false }
160
+ onChange = { this . changeFrom . bind ( this ) }
161
+ />
162
+ </ div >
163
+ < div className = "col-sm-1" >
164
+ < Select
165
+ name = "select-to"
166
+ placeholder = "[To]-"
167
+ options = { TIME_OPTIONS . map ( ( t ) => ( { value : t , label : t } ) ) }
168
+ value = { this . state . to }
169
+ autosize = { false }
170
+ onChange = { this . changeTo . bind ( this ) }
171
+ />
172
+ </ div >
173
+ < div className = "col-sm-1" >
117
174
< Select
118
- name = "select-state "
175
+ name = "select-status "
119
176
placeholder = "[Query Status]"
120
177
options = { STATUS_OPTIONS . map ( ( s ) => ( { value : s , label : s } ) ) }
121
178
value = { this . state . status }
@@ -130,7 +187,7 @@ class QuerySearch extends React.PureComponent {
130
187
</ div >
131
188
< QueryTable
132
189
columns = { [
133
- 'state' , 'db' , 'user' ,
190
+ 'state' , 'db' , 'user' , 'date' ,
134
191
'progress' , 'rows' , 'sql' , 'querylink' ,
135
192
] }
136
193
onUserClicked = { this . onUserClicked . bind ( this ) }
0 commit comments