123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { ReportDataService } from "./reportData.service";
- import { Report, Messenger } from "../types";
- class ReportCreatedMessenger implements Messenger {
- deliveryMessage(report: Report, user: string): void {
- console.log(`A new report with id ${report.id} was created by the user ${user}`);
- }
- }
- class ReportApprovedMessenger implements Messenger {
- deliveryMessage(report: Report) {
- console.log(`The report id: ${report.id} is now ${report.approved ? 'approved' : 'rejected'}`);
- }
- }
- class ReportRejectMessenger implements Messenger {
- // "noUnusedParameters" doesn't complain about parameters named "_*"
- deliveryMessage(_report: Report, user: string) {
- console.log(`The user ${user} has reject one of your reports`);
- }
- }
- type MessengerEventsHandled =
- 'MessengerReportCreated' |
- 'MessengerReportApproved' |
- 'MessengerReportRejected';
- function getMessenger(event: MessengerEventsHandled): Messenger {
- switch (event) {
- case 'MessengerReportCreated':
- return new ReportCreatedMessenger();
- case 'MessengerReportApproved':
- return new ReportApprovedMessenger();
- case 'MessengerReportRejected':
- return new ReportRejectMessenger();
- // No need for a default: all cases possible based on the type are
- // covered. This is called "exhaustive check".
- }
- }
- export class MessengerWatcher {
- constructor(private ReportDataService: ReportDataService) { }
- watch() {
- this
- .ReportDataService
- .reportCreated
- .subscribe(report => getMessenger('MessengerReportCreated')
- .deliveryMessage(report, 'someUser'));
- this
- .ReportDataService
- .reportApprovedReject
- .subscribe(({ report, user }) => {
- const eventType = report.approved ?
- 'MessengerReportApproved' :
- 'MessengerReportRejected';
- getMessenger(eventType)
- .deliveryMessage(report, user);
- });
- }
- }
|