Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
b7a8db49
Commit
b7a8db49
authored
Nov 22, 2017
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of github.com:grafana/grafana into develop
parents
9fc22e5a
ba511f3e
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
111 additions
and
20 deletions
+111
-20
pkg/services/sqlstore/dashboard_test.go
+2
-1
public/app/core/services/search_srv.ts
+1
-1
public/app/features/dashboard/dashboard_list_ctrl.ts
+35
-10
public/app/features/dashboard/partials/dashboardList.html
+16
-8
public/app/features/dashboard/specs/dashboard_list_ctrl.jest.ts
+57
-0
No files found.
pkg/services/sqlstore/dashboard_test.go
View file @
b7a8db49
...
...
@@ -381,10 +381,11 @@ func TestDashboardDataAccess(t *testing.T) {
childDash2
:=
insertTestDashboard
(
"child dash 2"
,
1
,
folder2
.
Id
,
false
,
"prod"
)
currentUser
:=
createUser
(
"viewer"
,
"Viewer"
,
false
)
var
rootFolderId
int64
=
0
Convey
(
"and one folder is expanded, the other collapsed"
,
func
()
{
Convey
(
"should return dashboards in root and expanded folder"
,
func
()
{
query
:=
&
search
.
FindPersistedDashboardsQuery
{
FolderIds
:
[]
int64
{
folder1
.
Id
},
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
}
query
:=
&
search
.
FindPersistedDashboardsQuery
{
FolderIds
:
[]
int64
{
rootFolderId
,
folder1
.
Id
},
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
currentUser
.
Id
,
OrgId
:
1
},
OrgId
:
1
}
err
:=
SearchDashboards
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
4
)
...
...
public/app/core/services/search_srv.ts
View file @
b7a8db49
...
...
@@ -52,7 +52,7 @@ export class SearchSrv {
}
search
(
options
)
{
if
(
!
options
.
query
)
{
if
(
!
options
.
query
&&
!
options
.
tag
)
{
return
this
.
browse
();
}
...
...
public/app/features/dashboard/dashboard_list_ctrl.ts
View file @
b7a8db49
...
...
@@ -5,6 +5,7 @@ import { SearchSrv } from 'app/core/services/search_srv';
export
class
DashboardListCtrl
{
public
sections
:
any
[];
tags
:
any
[];
selectedTagFilter
:
any
;
query
:
any
;
navModel
:
any
;
canDelete
=
false
;
...
...
@@ -15,14 +16,28 @@ export class DashboardListCtrl {
this
.
navModel
=
navModelSrv
.
getNav
(
'dashboards'
,
'dashboards'
);
this
.
query
=
{
query
:
''
,
mode
:
'tree'
,
tag
:
[]};
this
.
getDashboards
();
// this.getDashboards().then(() => {
// this.getTags();
// });
this
.
getDashboards
().
then
(()
=>
{
this
.
getTags
();
});
}
getDashboards
()
{
if
(
this
.
query
.
query
.
length
===
0
&&
this
.
query
.
tag
.
length
===
0
)
{
return
this
.
searchSrv
.
browse
().
then
((
result
)
=>
{
return
this
.
initDashboardList
(
result
);
});
}
return
this
.
searchSrv
.
search
(
this
.
query
).
then
((
result
)
=>
{
return
this
.
initDashboardList
(
result
);
});
}
initDashboardList
(
result
:
any
)
{
if
(
!
result
)
{
this
.
sections
=
[];
return
;
}
this
.
sections
=
result
;
...
...
@@ -33,7 +48,6 @@ export class DashboardListCtrl {
dashboard
.
checked
=
false
;
}
}
});
}
selectionChanged
()
{
...
...
@@ -119,11 +133,16 @@ export class DashboardListCtrl {
});
}
// getTags() {
// return this.backendSrv.get('/api/dashboards/tags').then((results) => {
// this.tags = results;
// });
// }
toggleFolder
(
section
)
{
return
this
.
searchSrv
.
toggleFolder
(
section
);
}
getTags
()
{
return
this
.
searchSrv
.
getDashboardTags
().
then
((
results
)
=>
{
this
.
tags
=
[{
term
:
'Filter By Tag'
,
disabled
:
true
}].
concat
(
results
);
this
.
selectedTagFilter
=
this
.
tags
[
0
];
});
}
filterByTag
(
tag
,
evt
)
{
this
.
query
.
tag
.
push
(
tag
);
...
...
@@ -134,6 +153,12 @@ export class DashboardListCtrl {
}
}
filterChange
()
{
this
.
query
.
tag
.
push
(
this
.
selectedTagFilter
.
term
);
this
.
selectedTagFilter
=
this
.
tags
[
0
];
this
.
getDashboards
();
}
removeTag
(
tag
,
evt
)
{
this
.
query
.
tag
=
_
.
without
(
this
.
query
.
tag
,
tag
);
this
.
getDashboards
();
...
...
public/app/features/dashboard/partials/dashboardList.html
View file @
b7a8db49
...
...
@@ -54,23 +54,31 @@
<div
class=
"admin-list-table"
style=
"height: 80%"
>
<div
gemini-scrollbar
>
<div
ng-show=
"ctrl.sections.length > 0"
>
<!-- <div>
<select class="gf-form-input" ng-model="ctrl.query.tags" ng-options="t.term for t in ctrl.tags" />
</div> -->
<div>
<select
class=
"gf-form-input"
ng-model=
"ctrl.selectedTagFilter"
ng-options=
"t.term disable when t.disabled for t in ctrl.tags"
ng-change=
"ctrl.filterChange(tag, $index)"
/>
</div>
<div
ng-repeat=
"section in ctrl.sections"
class=
"search-section"
>
<div
class=
"search-section__header pointer"
ng-show=
"::section.title"
>
<gf-form-switch
switch-class=
"gf-form-switch--table-cell"
on-change=
"ctrl.selectionChanged()"
checked=
"section.checked"
>
</gf-form-switch>
<a
class=
"search-section__header pointer"
ng-show=
"::section.title"
ng-click=
"section.collapsed = !section.collapsed
"
>
<a
ng-click=
"ctrl.toggleFolder(section)
"
>
<i
class=
"search-section__header__icon"
ng-class=
"section.icon"
></i>
<span
class=
"search-section__header__text"
>
{{::section.title}}
</span>
<i
class=
"fa fa-minus search-section__header__toggle"
ng-hide=
"section.collaps
ed"
></i>
<i
class=
"fa fa-plus search-section__header__toggle"
ng-show=
"section.collaps
ed"
></i>
<i
class=
"fa fa-minus search-section__header__toggle"
ng-show=
"section.expand
ed"
></i>
<i
class=
"fa fa-plus search-section__header__toggle"
ng-hide=
"section.expand
ed"
></i>
</a>
</div>
<div
ng-if=
"
!section.collaps
ed"
>
<div
ng-if=
"
section.expand
ed"
>
<div
ng-repeat=
"item in section.items"
class=
"search-item"
ng-class=
"{'selected': item.selected}"
>
<gf-form-switch
switch-class=
"gf-form-switch--table-cell"
...
...
@@ -124,7 +132,7 @@
</div>
</div>
<em
class=
"muted"
ng-hide=
"ctrl.
dashboard
s.length > 0"
>
<em
class=
"muted"
ng-hide=
"ctrl.
section
s.length > 0"
>
No Dashboards or Folders found.
</em>
</div>
...
...
public/app/features/dashboard/specs/dashboard_list_ctrl.jest.ts
View file @
b7a8db49
...
...
@@ -61,6 +61,63 @@ describe('DashboardListCtrl', () => {
});
});
describe
(
'when searching dashboards'
,
()
=>
{
beforeEach
(()
=>
{
const
response
=
[
{
id
:
410
,
title
:
"afolder"
,
type
:
"dash-folder"
,
items
:
[
{
id
:
399
,
title
:
"Dashboard Test"
,
url
:
"dashboard/db/dashboard-test"
,
icon
:
'fa fa-folder'
,
tags
:
[],
isStarred
:
false
,
folderId
:
410
,
folderTitle
:
"afolder"
,
folderSlug
:
"afolder"
}
],
tags
:
[],
isStarred
:
false
},
{
id
:
0
,
title
:
"Root"
,
icon
:
'fa fa-folder-open'
,
uri
:
"db/something-else"
,
type
:
"dash-db"
,
items
:
[
{
id
:
500
,
title
:
"Dashboard Test"
,
url
:
"dashboard/db/dashboard-test"
,
icon
:
'fa fa-folder'
,
tags
:
[],
isStarred
:
false
}
],
tags
:
[],
isStarred
:
false
,
}
];
ctrl
=
createCtrlWithStubs
(
response
);
ctrl
.
query
.
query
=
'd'
;
return
ctrl
.
getDashboards
();
});
it
(
'should set checked to false on all sections and children'
,
()
=>
{
expect
(
ctrl
.
sections
.
length
).
toEqual
(
2
);
expect
(
ctrl
.
sections
[
0
].
checked
).
toEqual
(
false
);
expect
(
ctrl
.
sections
[
0
].
items
[
0
].
checked
).
toEqual
(
false
);
expect
(
ctrl
.
sections
[
1
].
checked
).
toEqual
(
false
);
expect
(
ctrl
.
sections
[
1
].
items
[
0
].
checked
).
toEqual
(
false
);
});
});
describe
(
'when selecting dashboards'
,
()
=>
{
let
ctrl
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment