diff --git a/pkg/api/team.go b/pkg/api/team.go index 223ad404793..e4adb0bd430 100644 --- a/pkg/api/team.go +++ b/pkg/api/team.go @@ -86,12 +86,18 @@ func SearchTeams(c *m.ReqContext) Response { page = 1 } + var userIdFilter int64 + if c.QueryBool("showMine") { + userIdFilter = c.SignedInUser.UserId + } + query := m.SearchTeamsQuery{ - OrgId: c.OrgId, - Query: c.Query("query"), - Name: c.Query("name"), - Page: page, - Limit: perPage, + OrgId: c.OrgId, + Query: c.Query("query"), + Name: c.Query("name"), + UserIdFilter: userIdFilter, + Page: page, + Limit: perPage, } if err := bus.Dispatch(&query); err != nil { diff --git a/pkg/models/team.go b/pkg/models/team.go index bd0d803d9d3..bb9289ee5e5 100644 --- a/pkg/models/team.go +++ b/pkg/models/team.go @@ -61,11 +61,12 @@ type GetTeamsByUserQuery struct { } type SearchTeamsQuery struct { - Query string - Name string - Limit int - Page int - OrgId int64 + Query string + Name string + Limit int + Page int + OrgId int64 + UserIdFilter int64 Result SearchTeamQueryResult } diff --git a/pkg/services/sqlstore/team.go b/pkg/services/sqlstore/team.go index f7f7d7fc2cb..a9ee6979406 100644 --- a/pkg/services/sqlstore/team.go +++ b/pkg/services/sqlstore/team.go @@ -149,6 +149,10 @@ func SearchTeams(query *m.SearchTeamsQuery) error { params := make([]interface{}, 0) sql.WriteString(getTeamSelectSqlBase()) + if query.UserIdFilter > 0 { + sql.WriteString(`INNER JOIN team_member on team.id = team_member.team_id AND team_member.user_id = ?`) + params = append(params, query.UserIdFilter) + } sql.WriteString(` WHERE team.org_id = ?`) params = append(params, query.OrgId) diff --git a/public/app/features/teams/state/actions.ts b/public/app/features/teams/state/actions.ts index e2582839233..bfccddeefc5 100644 --- a/public/app/features/teams/state/actions.ts +++ b/public/app/features/teams/state/actions.ts @@ -1,8 +1,9 @@ import { ThunkAction } from 'redux-thunk'; import { getBackendSrv } from 'app/core/services/backend_srv'; -import { StoreState, Team, TeamGroup, TeamMember } from 'app/types'; +import { OrgRole, StoreState, Team, TeamGroup, TeamMember } from 'app/types'; import { updateNavIndex, UpdateNavIndexAction } from 'app/core/actions'; import { buildNavModel } from './navModel'; +import { contextSrv } from '../../../core/services/context_srv'; export enum ActionTypes { LoadTeams = 'LOAD_TEAMS', @@ -85,7 +86,8 @@ export const setSearchQuery = (searchQuery: string): SetSearchQueryAction => ({ export function loadTeams(): ThunkResult { return async dispatch => { - const response = await getBackendSrv().get('/api/teams/search', { perpage: 1000, page: 1 }); + const showMine = contextSrv.user.orgRole === OrgRole.Editor; + const response = await getBackendSrv().get('/api/teams/search', { perpage: 1000, page: 1, showMine }); dispatch(teamsLoaded(response.teams)); }; }