Skip to content

Commit

Permalink
feat(reminders): fix some quirks
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesjo committed Nov 25, 2018
1 parent 6438e7f commit 75d8703
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 41 deletions.
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@
"rxjs": "^6.3.3",
"rxjs-compat": "^6.3.3",
"shortid": "^2.2.13",
"throttle-debounce": "^2.0.1",
"zone.js": "~0.8.26"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,58 +1,64 @@
<form (submit)="save()">
<mat-dialog-content>
<h2 class="mat-h2">{{isEdit ? 'Edit' : 'Add'}} reminder for note</h2>

<mat-form-field>
<!--[matDatepicker]="myDatepicker"-->
<input
matInput
placeholder="Title for notification"
type="text"
[(ngModel)]="title"
required
name="title">
<mat-error>You need to enter a title</mat-error>
<!--<mat-datepicker-toggle matPrefix-->
<!--[for]="myDatepicker"></mat-datepicker-toggle>-->
<!--<mat-datepicker #myDatepicker></mat-datepicker>-->
</mat-form-field>
<mat-form-field>
<!--[matDatepicker]="myDatepicker"-->
<input
matInput
placeholder="Datetime for reminder"
type="datetime-local"
[(ngModel)]="date"
required
name="date">
<mat-error>The entered value is not a date!</mat-error>
<mat-icon matPrefix="">schedule</mat-icon>
<!--<mat-datepicker-toggle matPrefix-->
<!--[for]="myDatepicker"></mat-datepicker-toggle>-->
<!--<mat-datepicker #myDatepicker></mat-datepicker>-->
</mat-form-field>

<div class="form-wrapper">
<mat-form-field>
<!--[matDatepicker]="myDatepicker"-->
<input
matInput
placeholder="Title for notification"
type="text"
[(ngModel)]="title"
required
name="title">
<mat-error>You need to enter a title</mat-error>
<!--<mat-datepicker-toggle matPrefix-->
<!--[for]="myDatepicker"></mat-datepicker-toggle>-->
<!--<mat-datepicker #myDatepicker></mat-datepicker>-->
</mat-form-field>
<mat-form-field>
<!--[matDatepicker]="myDatepicker"-->
<input
matInput
placeholder="Datetime for reminder"
type="datetime-local"
[(ngModel)]="date"
required
name="date">
<mat-error>The entered value is not a date!</mat-error>
<mat-icon matPrefix="">schedule</mat-icon>
<!--<mat-datepicker-toggle matPrefix-->
<!--[for]="myDatepicker"></mat-datepicker-toggle>-->
<!--<mat-datepicker #myDatepicker></mat-datepicker>-->
</mat-form-field>
</div>
</mat-dialog-content>

<mat-dialog-actions align="end">
<div class="wrap-buttons">
<button color="primary"
type="submit"
class="btn btn-primary submit-button"
mat-raised-button>Save Reminder
mat-raised-button>
<mat-icon>schedule</mat-icon>
{{isEdit ? 'Update' : 'Add'}} Reminder
</button>

<button type="button"
*ngIf="isEdit"
color="warn"
(click)="remove()"
class="btn btn-primary submit-button"
mat-raised-button>Delete Reminder
mat-raised-button>
<mat-icon>delete_forever</mat-icon>
Delete Reminder
</button>
<button type="button"
(click)="close()"
class="btn btn-primary submit-button"
mat-raised-button>Cancel
mat-raised-button>

Cancel
</button>
</div>
</mat-dialog-actions>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.form-wrapper{
display: flex;
flex-direction: column;
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ export class DialogAddNoteReminderComponent {
this.date = this._convertDate(new Date(this.reminder.remindAt));
this.title = this.reminder.title;
} else {
this.date = this._convertDate(new Date());
const offset = new Date().getTimezoneOffset();
this.date = this._convertDate(new Date(Date.now() - (offset * 1000 * 60)));
this.title = this.note.content.substr(0, 40);
}
}
Expand Down
1 change: 1 addition & 0 deletions src/app/note/note.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export class NoteModule {

this._reminderService.onReminderActive$.subscribe(reminder => {
if (!isDialogOpen && reminder && reminder.type === 'NOTE') {
isDialogOpen = true;
this._matDialog.open(DialogViewNoteReminderComponent, {
data: {
reminder: reminder,
Expand Down
13 changes: 9 additions & 4 deletions src/app/reminder/reminder.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import { RecurringConfig, Reminder, ReminderType } from './reminder.model';
import { SnackService } from '../core/snack/snack.service';
import shortid from 'shortid';
import { NotifyService } from '../core/notify/notify.service';
import { BehaviorSubject, Observable } from 'rxjs';
import { BehaviorSubject } from 'rxjs';
import { debounce, throttle } from 'throttle-debounce';

const WORKER_PATH = 'assets/web-workers/reminder.js';

Expand All @@ -15,6 +16,7 @@ const WORKER_PATH = 'assets/web-workers/reminder.js';
export class ReminderService {
private _w: Worker;
private _reminders: Reminder[];
private _throttledShowNotification = throttle(60000, this._showNotification.bind(this));

public onReminderActive$: BehaviorSubject<Reminder> = new BehaviorSubject(null);

Expand Down Expand Up @@ -56,13 +58,11 @@ export class ReminderService {
});
// this._persistenceService
this._saveModel(this._reminders);
console.log(this._reminders);
return id;
}

updateReminder(reminderId: string, reminderChanges: Partial<Reminder>) {
Object.assign(this.getById(reminderId), reminderChanges);
console.log(this._reminders);
this._saveModel(this._reminders);
}

Expand All @@ -82,17 +82,22 @@ export class ReminderService {
private _onReminderActivated(msg: MessageEvent) {
const reminder = msg.data as Reminder;
// TODO get related model here
this.onReminderActive$.next(reminder);
this._throttledShowNotification(reminder);
}

private _showNotification(reminder: Reminder) {
this._notifyService.notify({
title: reminder.title,
});
this.onReminderActive$.next(reminder);
}

private _loadFromLs(): Reminder[] {
return this._persistenceService.loadReminders() || [];
}

private _saveModel(reminders: Reminder[]) {
console.log('Reminder._saveModel', this._reminders);
this._persistenceService.saveReminders(reminders);
this._updateRemindersInWorker(this._reminders);
}
Expand Down
6 changes: 4 additions & 2 deletions src/assets/web-workers/reminder.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const CHECK_INTERVAL_DURATION = 1000;
const MESSAGE_INTERVAL_DURATION = 60000;
const MESSAGE_INTERVAL_DURATION = 10000;
let currentMessageTimerVal = 0;
let checkInterval;

Expand All @@ -15,13 +15,15 @@ const reInitCheckInterval = (reminders) => {
return;
}

setInterval(() => {
checkInterval = setInterval(() => {
const oldestDueReminder = reminders.reduce(
(minReminder, reminder) => (reminder.remindAt < minReminder.remindAt)
? reminder
: minReminder, reminders[0]
);

console.log('oldestDueReminder in:', (oldestDueReminder.remindAt - Date.now()) / 1000, oldestDueReminder);

if (oldestDueReminder && oldestDueReminder.remindAt < Date.now()) {
if (currentMessageTimerVal <= 0) {
self.postMessage(oldestDueReminder);
Expand Down

0 comments on commit 75d8703

Please sign in to comment.