From 252c91cb3cef4bdd80da5b4f6260673bb4a804dd Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Fri, 10 Jan 2025 04:08:00 +0530 Subject: [PATCH] feat: emojis for teams --- cmd/teams.go | 6 +- .../components/admin/team/teams/TeamForm.vue | 85 +++++++++++-------- .../admin/team/teams/teamFormSchema.js | 1 + .../conversation/sidebar/AssignTeam.vue | 5 +- frontend/src/components/sidebar/Sidebar.vue | 2 +- internal/team/models/models.go | 4 +- internal/team/queries.sql | 4 +- internal/team/team.go | 8 +- internal/user/queries.sql | 2 +- 9 files changed, 68 insertions(+), 49 deletions(-) diff --git a/cmd/teams.go b/cmd/teams.go index 833d48b0..2e39ebcb 100644 --- a/cmd/teams.go +++ b/cmd/teams.go @@ -55,13 +55,14 @@ func handleCreateTeam(r *fastglue.Request) error { app = r.Context.(*App) name = string(r.RequestCtx.PostArgs().Peek("name")) timezone = string(r.RequestCtx.PostArgs().Peek("timezone")) + emoji = string(r.RequestCtx.PostArgs().Peek("emoji")) conversationAssignmentType = string(r.RequestCtx.PostArgs().Peek("conversation_assignment_type")) ) businessHrsID, err := strconv.Atoi(string(r.RequestCtx.PostArgs().Peek("business_hours_id"))) if err != nil || businessHrsID == 0 { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, "Invalid `business_hours_id`.", nil, envelope.InputError) } - if err := app.team.Create(name, timezone, conversationAssignmentType, businessHrsID); err != nil { + if err := app.team.Create(name, timezone, conversationAssignmentType, businessHrsID, emoji); err != nil { return sendErrorEnvelope(r, err) } return r.SendEnvelope("Team created successfully.") @@ -73,6 +74,7 @@ func handleUpdateTeam(r *fastglue.Request) error { app = r.Context.(*App) name = string(r.RequestCtx.PostArgs().Peek("name")) timezone = string(r.RequestCtx.PostArgs().Peek("timezone")) + emoji = string(r.RequestCtx.PostArgs().Peek("emoji")) conversationAssignmentType = string(r.RequestCtx.PostArgs().Peek("conversation_assignment_type")) ) id, err := strconv.Atoi(r.RequestCtx.UserValue("id").(string)) @@ -86,7 +88,7 @@ func handleUpdateTeam(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, "Invalid `business_hours_id`.", nil, envelope.InputError) } - if err = app.team.Update(id, name, timezone, conversationAssignmentType, businessHrsID); err != nil { + if err = app.team.Update(id, name, timezone, conversationAssignmentType, businessHrsID, emoji); err != nil { return sendErrorEnvelope(r, err) } return r.SendEnvelope(true) diff --git a/frontend/src/components/admin/team/teams/TeamForm.vue b/frontend/src/components/admin/team/teams/TeamForm.vue index 6a40d080..6b7d3162 100644 --- a/frontend/src/components/admin/team/teams/TeamForm.vue +++ b/frontend/src/components/admin/team/teams/TeamForm.vue @@ -1,7 +1,22 @@ + +function toggleEmojiPicker () { + isEmojiPickerVisible.value = !isEmojiPickerVisible.value +} + +function onSelectEmoji (emoji) { + form.setFieldValue('emoji', emoji.i || emoji) +} + \ No newline at end of file diff --git a/frontend/src/components/admin/team/teams/teamFormSchema.js b/frontend/src/components/admin/team/teams/teamFormSchema.js index b689cb41..954f05e9 100644 --- a/frontend/src/components/admin/team/teams/teamFormSchema.js +++ b/frontend/src/components/admin/team/teams/teamFormSchema.js @@ -8,6 +8,7 @@ export const teamFormSchema = z.object({ .min(2, { message: 'Team name must be at least 2 characters.' }), + emoji: z.string({ required_error: 'Emoji is required.' }), conversation_assignment_type: z.string({ required_error: 'Conversation assignment type is required.' }), business_hours_id : z.number({ required_error: 'Business hours is required.' }), timezone: z.string().optional(), diff --git a/frontend/src/components/conversation/sidebar/AssignTeam.vue b/frontend/src/components/conversation/sidebar/AssignTeam.vue index 8c59e004..09a52a74 100644 --- a/frontend/src/components/conversation/sidebar/AssignTeam.vue +++ b/frontend/src/components/conversation/sidebar/AssignTeam.vue @@ -13,8 +13,9 @@ No team found. - - {{ team.name }} + + {{ team.emoji }} {{ team.name }} - {{ team.name }} + {{ team.emoji }}{{ team.name }} diff --git a/internal/team/models/models.go b/internal/team/models/models.go index c3f9d9e8..cdcd8778 100644 --- a/internal/team/models/models.go +++ b/internal/team/models/models.go @@ -15,8 +15,8 @@ type Team struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` Emoji null.String `db:"emoji" json:"emoji"` Name string `db:"name" json:"name"` - ConversationAssignmentType string `db:"conversation_assignment_type" json:"conversation_assignment_type"` - Timezone string `db:"timezone" json:"timezone"` + ConversationAssignmentType string `db:"conversation_assignment_type" json:"conversation_assignment_type,omitempty"` + Timezone string `db:"timezone" json:"timezone,omitempty"` BusinessHoursID int `db:"business_hours_id" json:"business_hours_id,omitempty"` } diff --git a/internal/team/queries.sql b/internal/team/queries.sql index e4c53c8b..ec24d8d1 100644 --- a/internal/team/queries.sql +++ b/internal/team/queries.sql @@ -18,10 +18,10 @@ JOIN teams t ON t.id = tm.team_id WHERE t.id = $1; -- name: insert-team -INSERT INTO teams (name, timezone, conversation_assignment_type, business_hours_id) VALUES ($1, $2, $3, $4) RETURNING id; +INSERT INTO teams (name, timezone, conversation_assignment_type, business_hours_id, emoji) VALUES ($1, $2, $3, $4, $5) RETURNING id; -- name: update-team -UPDATE teams set name = $2, timezone = $3, conversation_assignment_type = $4, business_hours_id = $5 where id = $1; +UPDATE teams set name = $2, timezone = $3, conversation_assignment_type = $4, business_hours_id = $5, emoji = $6 where id = $1; -- name: upsert-user-teams WITH delete_old_teams AS ( diff --git a/internal/team/team.go b/internal/team/team.go index 4d7452c1..a7fed658 100644 --- a/internal/team/team.go +++ b/internal/team/team.go @@ -102,8 +102,8 @@ func (u *Manager) Get(id int) (models.Team, error) { } // Create creates a new team. -func (u *Manager) Create(name, timezone, conversationAssignmentType string, businessHrsID int) error { - if _, err := u.q.InsertTeam.Exec(name, timezone, conversationAssignmentType, businessHrsID); err != nil { +func (u *Manager) Create(name, timezone, conversationAssignmentType string, businessHrsID int, emoji string) error { + if _, err := u.q.InsertTeam.Exec(name, timezone, conversationAssignmentType, businessHrsID, emoji); err != nil { u.lo.Error("error inserting team", "error", err) return envelope.NewError(envelope.GeneralError, "Error creating team", nil) } @@ -111,8 +111,8 @@ func (u *Manager) Create(name, timezone, conversationAssignmentType string, busi } // Update updates an existing team. -func (u *Manager) Update(id int, name, timezone, conversationAssignmentType string, businessHrsID int) error { - if _, err := u.q.UpdateTeam.Exec(id, name, timezone, conversationAssignmentType, businessHrsID); err != nil { +func (u *Manager) Update(id int, name, timezone, conversationAssignmentType string, businessHrsID int, emoji string) error { + if _, err := u.q.UpdateTeam.Exec(id, name, timezone, conversationAssignmentType, businessHrsID, emoji); err != nil { u.lo.Error("error updating team", "error", err) return envelope.NewError(envelope.GeneralError, "Error updating team", nil) } diff --git a/internal/user/queries.sql b/internal/user/queries.sql index 56614c2f..c7c5e4ea 100644 --- a/internal/user/queries.sql +++ b/internal/user/queries.sql @@ -35,7 +35,7 @@ SELECT u.last_name, u.roles, COALESCE( - (SELECT json_agg(json_build_object('id', t.id, 'name', t.name)) + (SELECT json_agg(json_build_object('id', t.id, 'name', t.name, 'emoji', t.emoji)) FROM team_members tm JOIN teams t ON tm.team_id = t.id WHERE tm.user_id = u.id),