From db39c109196c88fd571a573c5af9581a97c3c96a Mon Sep 17 00:00:00 2001 From: cosmos-explorer <88151306+cosmos-explorer@users.noreply.github.com> Date: Wed, 15 Mar 2023 04:27:17 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20allow=20users=20to=20send?= =?UTF-8?q?=20feedback=20to=20featbit's=20maintainers=20(#271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: added feedback feature * done * typo --------- Co-authored-by: deleteLater --- .../components/header/header.component.html | 71 ++++++--- .../components/header/header.component.less | 31 ++-- .../components/header/header.component.ts | 43 ++++++ .../src/app/core/services/feedback.service.ts | 19 +++ modules/front-end/src/locale/messages.xlf | 127 ++++++++++++---- modules/front-end/src/locale/messages.zh.xlf | 138 ++++++++++++++---- 6 files changed, 339 insertions(+), 90 deletions(-) create mode 100644 modules/front-end/src/app/core/services/feedback.service.ts diff --git a/modules/front-end/src/app/core/components/header/header.component.html b/modules/front-end/src/app/core/components/header/header.component.html index 87e517b2b..d9060dc01 100644 --- a/modules/front-end/src/app/core/components/header/header.component.html +++ b/modules/front-end/src/app/core/components/header/header.component.html @@ -6,47 +6,47 @@
-
+ +
-
-
-
-
+
+
+
{{currentOrganization?.name}} - + - {{currentProjectEnv?.projectName}} + {{currentProjectEnv?.projectName}} - + - {{currentProjectEnv?.envName}} + {{currentProjectEnv?.envName}} - +
+ nzType="icons:icon-copy"> {{currentProjectEnv?.envSecret}}
-
+
-
- +
+ +
- Save + + + Send feedback + +
+ + Email + + + + + + Message + + + + +
+
+ + + + + +
diff --git a/modules/front-end/src/app/core/components/header/header.component.less b/modules/front-end/src/app/core/components/header/header.component.less index bb57fbbfc..1374c9230 100644 --- a/modules/front-end/src/app/core/components/header/header.component.less +++ b/modules/front-end/src/app/core/components/header/header.component.less @@ -163,32 +163,37 @@ i:hover { } .header-btns { - width: 60px; - height: 60px; - float: right; display: flex; - flex-direction: row; align-items: center; - padding: 12px 8px; - background: @grey5-color; - border-radius: 42px; - gap: 32px; - position: relative; - margin-left: auto; - margin-right: 10px; - .guide-btn { + .header-btn { font-size: 18px; cursor: pointer; padding: 8px 13px; margin-top: 3px; border-radius: 42px; box-sizing: border-box; + + &.feedback { + font-size: 14px; + font-weight: 700; + + &:hover { + color: @green70-color; + } + } } - .guide-btn:hover { + .header-btn:hover { span { color: @green70-color; } } + + .org-btns { + display:flex; + justify-content: flex-end; + align-items: center + } } + diff --git a/modules/front-end/src/app/core/components/header/header.component.ts b/modules/front-end/src/app/core/components/header/header.component.ts index 44cb65c50..6c74af2fd 100644 --- a/modules/front-end/src/app/core/components/header/header.component.ts +++ b/modules/front-end/src/app/core/components/header/header.component.ts @@ -10,6 +10,8 @@ import { NzMessageService } from "ng-zorro-antd/message"; import { MessageQueueService } from "@services/message-queue.service"; import { Observable } from "rxjs"; import { copyToClipboard } from '@utils/index'; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { FeedbackService } from "@services/feedback.service"; @Component({ selector: 'app-header', @@ -38,11 +40,18 @@ export class HeaderComponent implements OnInit { private organizationService: OrganizationService, private projectService: ProjectService, private message: NzMessageService, + private fb: FormBuilder, + private feedbackService: FeedbackService, private readonly breadcrumbService: BreadcrumbService, private permissionsService: PermissionsService, private messageQueueService: MessageQueueService, ) { this.breadcrumbs$ = breadcrumbService.breadcrumbs$; + + this.feedbackForm = this.fb.group({ + email: ['', [Validators.required, Validators.email]], + message:['',[Validators.required]] + }); } ngOnInit(): void { @@ -151,4 +160,38 @@ export class HeaderComponent implements OnInit { () => this.message.success($localize `:@@common.copy-success:Copied`) ); } + + // feedback + feedbackModalVisible = false; + sendingFeedback = false; + feedbackForm: FormGroup; + + openFeedbackModal() { + this.feedbackModalVisible = true; + this.feedbackForm.reset(); + } + sendFeedback() { + if (this.feedbackForm.invalid) { + for (const i in this.feedbackForm.controls) { + this.feedbackForm.controls[i].markAsDirty(); + this.feedbackForm.controls[i].updateValueAndValidity(); + } + } + + this.sendingFeedback = true; + const { email, message } = this.feedbackForm.value; + + this.feedbackService.sendFeedback(email, message).subscribe({ + next: () => { + this.message.success($localize `:@@common.feedback-success-message:Thank you for sending us your feedback, we'll get back to you very soon!`); + }, + error: () => { + this.message.error($localize `:@@common.feedback-failure-message:We were not able to send your feedback, Please try again!`); + }, + complete: () => { + this.sendingFeedback = false; + this.feedbackModalVisible = false; + } + }); + } } diff --git a/modules/front-end/src/app/core/services/feedback.service.ts b/modules/front-end/src/app/core/services/feedback.service.ts new file mode 100644 index 000000000..e4734cfe6 --- /dev/null +++ b/modules/front-end/src/app/core/services/feedback.service.ts @@ -0,0 +1,19 @@ +import { HttpClient, HttpHeaders } from "@angular/common/http"; +import { Injectable } from "@angular/core"; +import { Observable } from "rxjs"; + +@Injectable({ + providedIn: 'root' +}) +export class FeedbackService { + private url = "https://www.featbit.co/api/feedback"; + private headers: HttpHeaders; + + constructor(private http: HttpClient) { + this.headers = new HttpHeaders().set('token', 'uxeizS3tlCXRKLOi4GPtAU1OcVl3RkDR54HKlbt7tVZGaWTtmvfZYheQDUGLr4troWdksluYijZHGDKB'); + } + + sendFeedback(email: string, message: string): Observable { + return this.http.post(this.url, { email, message }, { headers: this.headers }); + } +} diff --git a/modules/front-end/src/locale/messages.xlf b/modules/front-end/src/locale/messages.xlf index 07ab6ebd6..87af57093 100644 --- a/modules/front-end/src/locale/messages.xlf +++ b/modules/front-end/src/locale/messages.xlf @@ -334,6 +334,10 @@ src/app/core/components/header/header.component.html 79,80 + + src/app/core/components/header/header.component.html + 110,111 + src/app/core/components/props-drawer/props-drawer.component.html 103 @@ -1694,11 +1698,18 @@ 242,243 + + Feedback + + src/app/core/components/header/header.component.html + 9,10 + + Quick Start Guide src/app/core/components/header/header.component.html - 9 + 10 @@ -1722,32 +1733,101 @@ 73,75 + + Send feedback + + src/app/core/components/header/header.component.html + 90,91 + + + + Email + + src/app/core/components/header/header.component.html + 94,95 + + + src/app/features/login/do-login/do-login.component.html + 7,8 + + + src/app/features/safe/iam/groups/details/team/team.component.html + 28 + + + src/app/features/safe/iam/policies/details/team/team.component.html + 29 + + + src/app/features/safe/iam/team/details/setting/setting.component.html + 18 + + + src/app/features/safe/iam/team/index/index.component.html + 30 + + + + Email cannot be empty + + src/app/core/components/header/header.component.html + 95,96 + + + + Message + + src/app/core/components/header/header.component.html + 100,101 + + + + Message is mandatory + + src/app/core/components/header/header.component.html + 101 + + + + Have you any feedback for us? + + src/app/core/components/header/header.component.html + 102,104 + + + + Send + + src/app/core/components/header/header.component.html + 111,112 + + You don't have permissions to read project list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 52 + 61 You don't have permissions to read environment list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 53 + 62 You don't have permissions to read project and environment list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 53 + 62 Copied src/app/core/components/header/header.component.ts - 151 + 160 src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.ts @@ -1798,6 +1878,20 @@ 181 + + Thank you for sending us your feedback, we'll get back to you very soon! + + src/app/core/components/header/header.component.ts + 186 + + + + We were not able to send your feedback, Please try again! + + src/app/core/components/header/header.component.ts + 189 + + Add team member @@ -2922,29 +3016,6 @@ 39,40 - - Email - - src/app/features/login/do-login/do-login.component.html - 7,8 - - - src/app/features/safe/iam/groups/details/team/team.component.html - 28 - - - src/app/features/safe/iam/policies/details/team/team.component.html - 29 - - - src/app/features/safe/iam/team/details/setting/setting.component.html - 18 - - - src/app/features/safe/iam/team/index/index.component.html - 30 - - username is mandatory diff --git a/modules/front-end/src/locale/messages.zh.xlf b/modules/front-end/src/locale/messages.zh.xlf index f8e94c889..576348729 100644 --- a/modules/front-end/src/locale/messages.zh.xlf +++ b/modules/front-end/src/locale/messages.zh.xlf @@ -367,6 +367,10 @@ src/app/core/components/header/header.component.html 79,80 + + src/app/core/components/header/header.component.html + 110,111 + src/app/core/components/props-drawer/props-drawer.component.html 103 @@ -1809,11 +1813,19 @@ 关闭 + + Feedback + + src/app/core/components/header/header.component.html + 9,10 + + 反馈 + Quick Start Guide src/app/core/components/header/header.component.html - 9 + 10 快速开始引导 @@ -1841,11 +1853,87 @@ 环境 + + Send feedback + + src/app/core/components/header/header.component.html + 90,91 + + 发送反馈 + + + Email + + src/app/core/components/header/header.component.html + 94,95 + + + src/app/features/login/do-login/do-login.component.html + 7,8 + + + src/app/features/safe/iam/groups/details/team/team.component.html + 28 + + + src/app/features/safe/iam/policies/details/team/team.component.html + 29 + + + src/app/features/safe/iam/team/details/setting/setting.component.html + 18 + + + src/app/features/safe/iam/team/index/index.component.html + 30 + + 邮箱 + + + Email cannot be empty + + src/app/core/components/header/header.component.html + 95,96 + + 邮箱不能为空 + + + Message + + src/app/core/components/header/header.component.html + 100,101 + + 信息 + + + Message is mandatory + + src/app/core/components/header/header.component.html + 101 + + 信息不能为空 + + + Have you any feedback for us? + + src/app/core/components/header/header.component.html + 102,104 + + 反馈信息 + + + Send + + src/app/core/components/header/header.component.html + 111,112 + + 发送 + You don't have permissions to read project list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 52 + 61 您没有查看项目列表的权限, 请联系账户管理员添加相关权限 @@ -1853,7 +1941,7 @@ You don't have permissions to read environment list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 53 + 62 您没有查看该环境列表的权限, 请联系账户管理员添加相关权限 @@ -1861,7 +1949,7 @@ You don't have permissions to read project and environment list, please contact the admin to grant you the necessary permissions src/app/core/components/header/header.component.ts - 53 + 62 您没有查看项目环境列表的权限, 请联系账户管理员添加相关权限 @@ -1869,7 +1957,7 @@ Copied src/app/core/components/header/header.component.ts - 151 + 160 src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.ts @@ -1921,6 +2009,22 @@ 复制成功 + + Thank you for sending us your feedback, we'll get back to you very soon! + + src/app/core/components/header/header.component.ts + 186 + + 感谢您给我们发送反馈,我们会尽快和您联系! + + + We were not able to send your feedback, Please try again! + + src/app/core/components/header/header.component.ts + 189 + + 反馈发送失败,请稍后重试! + Add team member @@ -3132,30 +3236,6 @@ 登录 - - Email - - src/app/features/login/do-login/do-login.component.html - 7,8 - - - src/app/features/safe/iam/groups/details/team/team.component.html - 28 - - - src/app/features/safe/iam/policies/details/team/team.component.html - 29 - - - src/app/features/safe/iam/team/details/setting/setting.component.html - 18 - - - src/app/features/safe/iam/team/index/index.component.html - 30 - - 邮箱 - username is mandatory