76 lines
2.7 KiB
TypeScript
76 lines
2.7 KiB
TypeScript
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();
|
|
}));
|
|
}
|
|
}
|
|
}
|