From 999d1553e1ce45adf58f6082b160bc1147dc592b Mon Sep 17 00:00:00 2001 From: enahum Date: Mon, 19 Dec 2016 10:05:46 -0300 Subject: PLT-4167 Team Sidebar (#4569) * PLT-4167 Team Sidebar * Address feedback from PM * change route from my_members to members * bug fixes * Updating styles for teams sidebar (#4681) * Added PM changes * Fix corner cases * Addressing feedback * use two different endpoints * Bug fixes * Rename model and client functions, using preferences to store last team and channel viewed * Fix mobile notification count and closing the team sidebar * unit test, fixed bad merge and retrieve from cached when available * bug fixes * use id for last channel in preferences, query optimization * Updating multi team css (#4830) --- model/client.go | 30 ++++++++++++++++++++++++++++++ model/preference.go | 1 + model/team_member.go | 25 +++++++++++++++++++++++++ model/websocket_message.go | 1 + 4 files changed, 57 insertions(+) (limited to 'model') diff --git a/model/client.go b/model/client.go index b8bd9fc44..431c4fa8a 100644 --- a/model/client.go +++ b/model/client.go @@ -1752,6 +1752,36 @@ func (c *Client) GetTeamMembers(teamId string, offset int, limit int) (*Result, } } +// GetMyTeamMembers will return an array with team member objects that the current user +// is a member of. Must be authenticated. +func (c *Client) GetMyTeamMembers() (*Result, *AppError) { + if r, err := c.DoApiGet("/teams/members", "", ""); err != nil { + return nil, err + } else { + defer closeBody(r) + return &Result{r.Header.Get(HEADER_REQUEST_ID), + r.Header.Get(HEADER_ETAG_SERVER), TeamMembersFromJson(r.Body)}, nil + } +} + +// GetMyTeamsUnread will return an array with TeamUnread objects that contain the amount of +// unread messages and mentions the current user has for the teams it belongs to. +// An optional team ID can be set to exclude that team from the results. Must be authenticated. +func (c *Client) GetMyTeamsUnread(teamId string) (*Result, *AppError) { + endpoint := "/teams/unread" + + if teamId != "" { + endpoint += fmt.Sprintf("?id=%s", url.QueryEscape(teamId)) + } + if r, err := c.DoApiGet(endpoint, "", ""); err != nil { + return nil, err + } else { + defer closeBody(r) + return &Result{r.Header.Get(HEADER_REQUEST_ID), + r.Header.Get(HEADER_ETAG_SERVER), TeamsUnreadFromJson(r.Body)}, nil + } +} + // GetTeamMember will return a team member object based on the team id and user id provided. // Must be authenticated. func (c *Client) GetTeamMember(teamId string, userId string) (*Result, *AppError) { diff --git a/model/preference.go b/model/preference.go index cc35768cb..94807d2c9 100644 --- a/model/preference.go +++ b/model/preference.go @@ -33,6 +33,7 @@ const ( PREFERENCE_CATEGORY_LAST = "last" PREFERENCE_NAME_LAST_CHANNEL = "channel" + PREFERENCE_NAME_LAST_TEAM = "team" PREFERENCE_CATEGORY_NOTIFICATIONS = "notifications" PREFERENCE_NAME_EMAIL_INTERVAL = "email_interval" diff --git a/model/team_member.go b/model/team_member.go index a040e916b..36a567a45 100644 --- a/model/team_member.go +++ b/model/team_member.go @@ -16,6 +16,12 @@ type TeamMember struct { DeleteAt int64 `json:"delete_at"` } +type TeamUnread struct { + TeamId string `json:"team_id"` + MsgCount int64 `json:"msg_count"` + MentionCount int64 `json:"mention_count"` +} + func (o *TeamMember) ToJson() string { b, err := json.Marshal(o) if err != nil { @@ -55,6 +61,25 @@ func TeamMembersFromJson(data io.Reader) []*TeamMember { } } +func TeamsUnreadToJson(o []*TeamUnread) string { + if b, err := json.Marshal(o); err != nil { + return "[]" + } else { + return string(b) + } +} + +func TeamsUnreadFromJson(data io.Reader) []*TeamUnread { + decoder := json.NewDecoder(data) + var o []*TeamUnread + err := decoder.Decode(&o) + if err == nil { + return o + } else { + return nil + } +} + func (o *TeamMember) IsValid() *AppError { if len(o.TeamId) != 26 { diff --git a/model/websocket_message.go b/model/websocket_message.go index c3530c038..5c956d576 100644 --- a/model/websocket_message.go +++ b/model/websocket_message.go @@ -18,6 +18,7 @@ const ( WEBSOCKET_EVENT_DIRECT_ADDED = "direct_added" WEBSOCKET_EVENT_NEW_USER = "new_user" WEBSOCKET_EVENT_LEAVE_TEAM = "leave_team" + WEBSOCKET_EVENT_UPDATE_TEAM = "update_team" WEBSOCKET_EVENT_USER_ADDED = "user_added" WEBSOCKET_EVENT_USER_UPDATED = "user_updated" WEBSOCKET_EVENT_USER_REMOVED = "user_removed" -- cgit v1.2.3-1-g7c22