Skip to content

Commit b5e95bb

Browse files
committed
feat(admin): allow sending emails
1 parent a2c73fd commit b5e95bb

File tree

8 files changed

+30
-8
lines changed

8 files changed

+30
-8
lines changed

src/app/components/admin/admin-sidebar/admin-sidebar.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<a class="nav-btn" [routerLink]="['/', routes.routes.admin._, routes.routes.admin.monitor]" routerLinkActive="active" (click)="hideFullMenu($event)">
1010
{{'admin.navbar.monitor' | translate}}
1111
</a>
12-
<!-- <a class="nav-btn" [routerLink]="['/', routes.routes.admin._, routes.routes.admin.email]" routerLinkActive="active" (click)="hideFullMenu($event)">-->
13-
<!-- {{'admin.navbar.email' | translate}}-->
14-
<!-- </a>-->
12+
<a class="nav-btn" [routerLink]="['/', routes.routes.admin._, routes.routes.admin.email]" routerLinkActive="active" (click)="hideFullMenu($event)">
13+
{{'admin.navbar.email' | translate}}
14+
</a>
1515
<ng-container *ngIf="oldFrontendUrl">
1616
<a *ngFor="let oldLink of oldFrontendButtons"
1717
class="nav-btn"

src/app/components/admin/admin-sidebar/admin-sidebar.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export class AdminSidebarComponent implements OnInit, OnDestroy {
2121
oldFrontendUrl = environment.oldFrontendUrl;
2222

2323
oldFrontendButtons = [
24-
['e-mail/', 'E-mail'],
2524
['forum/', 'Diskuze'],
2625
['achievements/', 'Trofeje'],
2726
['users/', 'Uživatelé'],

src/app/components/admin/page-admin-email/page-admin-email.component.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ <h2 class="title">{{'admin.email.title'|translate}}</h2>
5959
<div class="col-12">
6060
<button type="submit" class="btn btn-ksi w-100 btn-send" [disabled]="emailForm.disabled || !emailForm.valid" (click)="openCheckModal()">{{'admin.email.send.check'|translate}}</button>
6161
</div>
62+
<div class="col-12">
63+
<ng-container *ngIf="modalSendResult$ | async as result">
64+
<div class="alert alert-danger" *ngIf="result.error">
65+
{{result.error}}
66+
</div>
67+
<div class="alert alert-success" *ngIf="result.success">
68+
{{'admin.email.success'|translate : {count: result.count} }}
69+
</div>
70+
</ng-container>
71+
</div>
6272
</div>
6373

6474
<div class="row">

src/app/components/admin/page-admin-email/page-admin-email.component.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { TranslateService } from '@ngx-translate/core';
33
import { FormBuilder, Validators } from '@angular/forms';
44
import { map, mergeMap, shareReplay, take, tap } from 'rxjs/operators';
55
import { BackendService, ModalService, YearsService } from '../../../services';
6-
import { Observable } from 'rxjs';
6+
import {BehaviorSubject, Observable, Subject} from 'rxjs';
77
import { MappedFormControl, SubscribedComponent } from '../../../util';
8-
import { OpenedTemplate } from '../../../models';
8+
import {EmailResult, OpenedTemplate} from '../../../models';
99
import { environment } from '../../../../environments/environment';
1010

1111
@Component({
@@ -38,6 +38,9 @@ export class PageAdminEmailComponent extends SubscribedComponent implements OnIn
3838
modalCheckTemplate: TemplateRef<unknown>;
3939
modalCheck?: OpenedTemplate;
4040

41+
readonly modalSendResult: Subject<EmailResult | null> = new BehaviorSubject<EmailResult | null>(null);
42+
readonly modalSendResult$: Observable<EmailResult | null> = this.modalSendResult.asObservable();
43+
4144
constructor(
4245
private translate: TranslateService,
4346
private fb: FormBuilder,
@@ -108,6 +111,7 @@ export class PageAdminEmailComponent extends SubscribedComponent implements OnIn
108111

109112
sendEmail(): void {
110113
environment.logger.debug('[MAIL] sending', this.emailForm.value);
114+
this.modalSendResult.next(null);
111115

112116
this.backend.http.adminEmailSend({'e-mail': {
113117
Subject: this.emailForm.controls.subject.value,
@@ -122,8 +126,10 @@ export class PageAdminEmailComponent extends SubscribedComponent implements OnIn
122126
Type: this.emailForm.controls.type.value,
123127
Successful: this.emailForm.controls.successful.value,
124128
}}).subscribe((response) => {
125-
// TODO: show success toast
126129
this.modalCheck?.template.instance.close();
130+
131+
const result: EmailResult = 'error' in response ? { success: false, count: 0, error: response.error } : { success: true, count: response.count };
132+
this.modalSendResult.next(result);
127133
});
128134
}
129135
}

src/app/components/admin/page-admin-root/page-admin-root.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ <h2 class="title">{{'admin.root.title'|translate}}</h2>
55
<div class="cards">
66
<ksi-admin-section-card name="tasks"></ksi-admin-section-card>
77
<ksi-admin-section-card name="monitor"></ksi-admin-section-card>
8-
<!-- <ksi-admin-section-card name="email"></ksi-admin-section-card>-->
8+
<ksi-admin-section-card name="email"></ksi-admin-section-card>
99
</div>
1010
</div>
1111
</div>

src/app/models/admin-email.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface EmailResult {
2+
success: boolean;
3+
count: number;
4+
error?: string;
5+
}

src/app/models/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ export * from './task';
1313
export * from './prediction';
1414
export * from './admin-task.service';
1515
export * from './edulint.service';
16+
export * from './admin-email';

src/assets/i18n/cs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@
486486
"email": {
487487
"summary": "Tento email budu posílat {{successful}} {{sex}} {{school}} účastnících se ročníku {{year}}. Tento email je {{type}}. Pokročilé možnosti {{advancedUsed}} nastaveny.",
488488
"title": "Posílání emailů",
489+
"success": "Tvůj email se poslal {{count}} účastníkům.",
489490
"check": {
490491
"title": "Kontrola emailu před odesláním"
491492
},

0 commit comments

Comments
 (0)