Refactor team pages to react & design change (#12574)

* Rewriting team pages in react

* teams to react progress

* teams: getting team by id returns same DTO as search, needed for AvatarUrl

* teams: progress on new team pages

* fix: team test

* listing team members and removing team members now works

* teams: team member page now works

* ux: fixed adding team member issue

* refactoring TeamPicker to conform to react coding styles better

* teams: very close to being done with team page rewrite

* minor style tweak

* ux: polish to team pages

* feature: team pages in react & everything working

* fix: removed flickering when changing tabs by always rendering PageHeader
This commit is contained in:
Torkel Ödegaard
2018-07-11 11:23:07 -07:00
committed by GitHub
parent 18a8290c65
commit c03764ff8a
47 changed files with 1015 additions and 757 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ func TestAlertingApiEndpoint(t *testing.T) {
})
bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
query.Result = []*m.Team{}
query.Result = []*m.TeamDTO{}
return nil
})
+1 -1
View File
@@ -119,7 +119,7 @@ func TestAnnotationsApiEndpoint(t *testing.T) {
})
bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
query.Result = []*m.Team{}
query.Result = []*m.TeamDTO{}
return nil
})
+1 -1
View File
@@ -39,7 +39,7 @@ func TestDashboardSnapshotApiEndpoint(t *testing.T) {
return nil
})
teamResp := []*m.Team{}
teamResp := []*m.TeamDTO{}
bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
query.Result = teamResp
return nil
+2 -2
View File
@@ -61,7 +61,7 @@ func TestDashboardApiEndpoint(t *testing.T) {
})
bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
query.Result = []*m.Team{}
query.Result = []*m.TeamDTO{}
return nil
})
@@ -230,7 +230,7 @@ func TestDashboardApiEndpoint(t *testing.T) {
})
bus.AddHandler("test", func(query *m.GetTeamsByUserQuery) error {
query.Result = []*m.Team{}
query.Result = []*m.TeamDTO{}
return nil
})
+1
View File
@@ -93,5 +93,6 @@ func GetTeamByID(c *m.ReqContext) Response {
return Error(500, "Failed to get Team", err)
}
query.Result.AvatarUrl = dtos.GetGravatarUrlWithDefault(query.Result.Email, query.Result.Name)
return JSON(200, &query.Result)
}
+1 -1
View File
@@ -13,7 +13,7 @@ import (
func TestTeamApiEndpoint(t *testing.T) {
Convey("Given two teams", t, func() {
mockResult := models.SearchTeamQueryResult{
Teams: []*models.SearchTeamDto{
Teams: []*models.TeamDTO{
{Name: "team1"},
{Name: "team2"},
},
+8 -8
View File
@@ -49,13 +49,13 @@ type DeleteTeamCommand struct {
type GetTeamByIdQuery struct {
OrgId int64
Id int64
Result *Team
Result *TeamDTO
}
type GetTeamsByUserQuery struct {
OrgId int64
UserId int64 `json:"userId"`
Result []*Team `json:"teams"`
UserId int64 `json:"userId"`
Result []*TeamDTO `json:"teams"`
}
type SearchTeamsQuery struct {
@@ -68,7 +68,7 @@ type SearchTeamsQuery struct {
Result SearchTeamQueryResult
}
type SearchTeamDto struct {
type TeamDTO struct {
Id int64 `json:"id"`
OrgId int64 `json:"orgId"`
Name string `json:"name"`
@@ -78,8 +78,8 @@ type SearchTeamDto struct {
}
type SearchTeamQueryResult struct {
TotalCount int64 `json:"totalCount"`
Teams []*SearchTeamDto `json:"teams"`
Page int `json:"page"`
PerPage int `json:"perPage"`
TotalCount int64 `json:"totalCount"`
Teams []*TeamDTO `json:"teams"`
Page int `json:"page"`
PerPage int `json:"perPage"`
}
+5 -5
View File
@@ -30,7 +30,7 @@ type dashboardGuardianImpl struct {
dashId int64
orgId int64
acl []*m.DashboardAclInfoDTO
groups []*m.Team
teams []*m.TeamDTO
log log.Logger
}
@@ -186,15 +186,15 @@ func (g *dashboardGuardianImpl) GetAcl() ([]*m.DashboardAclInfoDTO, error) {
return g.acl, nil
}
func (g *dashboardGuardianImpl) getTeams() ([]*m.Team, error) {
if g.groups != nil {
return g.groups, nil
func (g *dashboardGuardianImpl) getTeams() ([]*m.TeamDTO, error) {
if g.teams != nil {
return g.teams, nil
}
query := m.GetTeamsByUserQuery{OrgId: g.orgId, UserId: g.user.UserId}
err := bus.Dispatch(&query)
g.groups = query.Result
g.teams = query.Result
return query.Result, err
}
+3 -3
View File
@@ -19,7 +19,7 @@ type scenarioContext struct {
givenUser *m.SignedInUser
givenDashboardID int64
givenPermissions []*m.DashboardAclInfoDTO
givenTeams []*m.Team
givenTeams []*m.TeamDTO
updatePermissions []*m.DashboardAcl
expectedFlags permissionFlags
callerFile string
@@ -84,11 +84,11 @@ func permissionScenario(desc string, dashboardID int64, sc *scenarioContext, per
return nil
})
teams := []*m.Team{}
teams := []*m.TeamDTO{}
for _, p := range permissions {
if p.TeamId > 0 {
teams = append(teams, &m.Team{Id: p.TeamId})
teams = append(teams, &m.TeamDTO{Id: p.TeamId})
}
}
+28 -16
View File
@@ -22,6 +22,16 @@ func init() {
bus.AddHandler("sql", GetTeamMembers)
}
func getTeamSelectSqlBase() string {
return `SELECT
team.id as id,
team.org_id,
team.name as name,
team.email as email,
(SELECT COUNT(*) from team_member where team_member.team_id = team.id) as member_count
FROM team as team `
}
func CreateTeam(cmd *m.CreateTeamCommand) error {
return inTransaction(func(sess *DBSession) error {
@@ -130,21 +140,15 @@ func isTeamNameTaken(orgId int64, name string, existingId int64, sess *DBSession
func SearchTeams(query *m.SearchTeamsQuery) error {
query.Result = m.SearchTeamQueryResult{
Teams: make([]*m.SearchTeamDto, 0),
Teams: make([]*m.TeamDTO, 0),
}
queryWithWildcards := "%" + query.Query + "%"
var sql bytes.Buffer
params := make([]interface{}, 0)
sql.WriteString(`select
team.id as id,
team.org_id,
team.name as name,
team.email as email,
(select count(*) from team_member where team_member.team_id = team.id) as member_count
from team as team
where team.org_id = ?`)
sql.WriteString(getTeamSelectSqlBase())
sql.WriteString(` WHERE team.org_id = ?`)
params = append(params, query.OrgId)
@@ -186,8 +190,14 @@ func SearchTeams(query *m.SearchTeamsQuery) error {
}
func GetTeamById(query *m.GetTeamByIdQuery) error {
var team m.Team
exists, err := x.Where("org_id=? and id=?", query.OrgId, query.Id).Get(&team)
var sql bytes.Buffer
sql.WriteString(getTeamSelectSqlBase())
sql.WriteString(` WHERE team.org_id = ? and team.id = ?`)
var team m.TeamDTO
exists, err := x.Sql(sql.String(), query.OrgId, query.Id).Get(&team)
if err != nil {
return err
}
@@ -202,13 +212,15 @@ func GetTeamById(query *m.GetTeamByIdQuery) error {
// GetTeamsByUser is used by the Guardian when checking a users' permissions
func GetTeamsByUser(query *m.GetTeamsByUserQuery) error {
query.Result = make([]*m.Team, 0)
query.Result = make([]*m.TeamDTO, 0)
sess := x.Table("team")
sess.Join("INNER", "team_member", "team.id=team_member.team_id")
sess.Where("team.org_id=? and team_member.user_id=?", query.OrgId, query.UserId)
var sql bytes.Buffer
err := sess.Find(&query.Result)
sql.WriteString(getTeamSelectSqlBase())
sql.WriteString(` INNER JOIN team_member on team.id = team_member.team_id`)
sql.WriteString(` WHERE team.org_id = ? and team_member.user_id = ?`)
err := x.Sql(sql.String(), query.OrgId, query.UserId).Find(&query.Result)
return err
}