Initial Obsidian reminder notifier plugin
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import { App, Modal, Setting } from "obsidian";
|
||||
import { ReminderStore } from "./ReminderStore";
|
||||
import { formatDateTime } from "../utils/date";
|
||||
|
||||
export class ReminderListModal extends Modal {
|
||||
constructor(app: App, private store: ReminderStore, private showCompleted = false) {
|
||||
super(app);
|
||||
}
|
||||
|
||||
onOpen(): void {
|
||||
this.render();
|
||||
}
|
||||
|
||||
private render(): void {
|
||||
const { contentEl } = this;
|
||||
contentEl.empty();
|
||||
contentEl.createEl("h2", { text: this.showCompleted ? "All reminders" : "Active reminders" });
|
||||
|
||||
new Setting(contentEl)
|
||||
.addButton((button) => button
|
||||
.setButtonText(this.showCompleted ? "Show active only" : "Show all")
|
||||
.onClick(() => {
|
||||
this.showCompleted = !this.showCompleted;
|
||||
this.render();
|
||||
}));
|
||||
|
||||
const reminders = this.showCompleted
|
||||
? this.store.getAll()
|
||||
: this.store.getAll().filter((reminder) => !reminder.completed && reminder.status !== "cancelled" && reminder.status !== "sent" && reminder.status !== "done");
|
||||
if (!reminders.length) {
|
||||
contentEl.createEl("p", { text: this.showCompleted ? "No reminders." : "No active reminders." });
|
||||
return;
|
||||
}
|
||||
|
||||
const list = contentEl.createDiv({ cls: "reminder-notifier-list" });
|
||||
for (const reminder of reminders) {
|
||||
const item = list.createDiv({ cls: "reminder-notifier-item" });
|
||||
item.createDiv({ cls: "reminder-notifier-item-title", text: reminder.title });
|
||||
item.createDiv({
|
||||
cls: "reminder-notifier-item-meta",
|
||||
text: `${formatDateTime(reminder.dueAt)} - ${reminder.status} - ${reminder.channels.join(", ") || "all enabled"}`,
|
||||
});
|
||||
if (reminder.sourceFile) {
|
||||
item.createDiv({
|
||||
cls: "reminder-notifier-item-meta",
|
||||
text: `${reminder.sourceFile}${reminder.sourceLine ? `:${reminder.sourceLine}` : ""}`,
|
||||
});
|
||||
}
|
||||
if (reminder.lastError) {
|
||||
item.createDiv({ cls: "reminder-notifier-item-meta", text: `Last error: ${reminder.lastError}` });
|
||||
}
|
||||
|
||||
const actions = item.createDiv({ cls: "reminder-notifier-actions" });
|
||||
new Setting(actions)
|
||||
.addButton((button) => button
|
||||
.setButtonText("Snooze 15m")
|
||||
.onClick(async () => {
|
||||
await this.store.snooze(reminder.id, 15);
|
||||
this.render();
|
||||
}))
|
||||
.addButton((button) => button
|
||||
.setButtonText("Done")
|
||||
.onClick(async () => {
|
||||
await this.store.complete(reminder.id);
|
||||
this.render();
|
||||
}))
|
||||
.addButton((button) => button
|
||||
.setButtonText("Delete")
|
||||
.onClick(async () => {
|
||||
await this.store.remove(reminder.id);
|
||||
this.render();
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user