From 3b6e02e16e5dbf1f02cd1a9ea9a58e696fe5dedc Mon Sep 17 00:00:00 2001 From: jude Date: Sun, 20 Mar 2022 00:10:19 +0000 Subject: [PATCH] working on editing reminders --- web/src/routes/dashboard/guild.rs | 13 +++-- web/src/routes/dashboard/mod.rs | 53 +++++++++++++++++++ web/static/js/main.js | 17 ++++++ .../guild_reminder.html.tera | 2 +- 4 files changed, 81 insertions(+), 4 deletions(-) diff --git a/web/src/routes/dashboard/guild.rs b/web/src/routes/dashboard/guild.rs index 22b2a10..cb4556b 100644 --- a/web/src/routes/dashboard/guild.rs +++ b/web/src/routes/dashboard/guild.rs @@ -19,7 +19,8 @@ use crate::{ MAX_URL_LENGTH, MAX_USERNAME_LENGTH, MIN_INTERVAL, }, routes::dashboard::{ - create_database_channel, generate_uid, name_default, DeleteReminder, Reminder, + create_database_channel, generate_uid, name_default, DeleteReminder, PatchReminder, + Reminder, }, }; @@ -351,11 +352,17 @@ WHERE #[patch("/api/guild//reminders", data = "")] pub async fn edit_reminder( id: u64, - reminder: Json, + reminder: Json, serenity_context: &State, pool: &State>, ) -> JsonValue { - json!({"error": "Not implemented"}) + if let Some(enabled) = reminder.enabled { + sqlx::query!("UPDATE reminders SET enabled = ? WHERE uid = ?", enabled, reminder.uid) + .execute(pool.inner()) + .await; + } + + json!({}) } #[delete("/api/guild//reminders", data = "")] diff --git a/web/src/routes/dashboard/mod.rs b/web/src/routes/dashboard/mod.rs index 431a9f6..2e130a5 100644 --- a/web/src/routes/dashboard/mod.rs +++ b/web/src/routes/dashboard/mod.rs @@ -16,6 +16,8 @@ use crate::{ pub mod guild; pub mod user; +type Unset = Option; + fn name_default() -> String { "Reminder".to_string() } @@ -52,6 +54,57 @@ pub struct Reminder { utc_time: NaiveDateTime, } +#[derive(Deserialize)] +pub struct PatchReminder { + uid: String, + #[serde(default)] + attachment: Unset>>, + #[serde(default)] + attachment_name: Unset>, + #[serde(default)] + avatar: Unset>, + #[serde(default)] + content: Unset, + #[serde(default)] + embed_author: Unset, + #[serde(default)] + embed_author_url: Unset>, + #[serde(default)] + embed_color: Unset, + #[serde(default)] + embed_description: Unset, + #[serde(default)] + embed_footer: Unset, + #[serde(default)] + embed_footer_url: Unset>, + #[serde(default)] + embed_image_url: Unset>, + #[serde(default)] + embed_thumbnail_url: Unset>, + #[serde(default)] + embed_title: Unset, + #[serde(default)] + enabled: Unset, + #[serde(default)] + expires: Unset>, + #[serde(default)] + interval_seconds: Unset>, + #[serde(default)] + interval_months: Unset>, + #[serde(default)] + name: Unset, + #[serde(default)] + pin: Unset, + #[serde(default)] + restartable: Unset, + #[serde(default)] + tts: Unset, + #[serde(default)] + username: Unset>, + #[serde(default)] + utc_time: Unset, +} + pub fn generate_uid() -> String { let mut generator: OsRng = Default::default(); diff --git a/web/static/js/main.js b/web/static/js/main.js index 98408d5..c504ceb 100644 --- a/web/static/js/main.js +++ b/web/static/js/main.js @@ -138,6 +138,8 @@ async function fetch_reminders(guild_id) { for (let reminder of data) { let newFrame = $template.content.cloneNode(true); + newFrame.querySelector('.reminderContent').dataset.uid = reminder['uid']; + // populate channels set_channels(newFrame.querySelector('select.channel-selector')) @@ -155,6 +157,21 @@ async function fetch_reminders(guild_id) { } } + let guild = document.querySelector('.guildList a.is-active').dataset['guild']; + + let $enableBtn = newFrame.querySelector('.disable-enable'); + + $enableBtn.textContent = reminder['enabled'] ? 'Disable' : 'Enable'; + $enableBtn.addEventListener('click', () => { + fetch(`/dashboard/api/guild/${guild}/reminders`, { + method: 'PATCH', + body: JSON.stringify({ + uid: reminder['uid'], + enabled: false + }) + }) + }) + let timeInput = newFrame.querySelector('input[name="time"]'); let localTime = luxon.DateTime.fromISO(reminder["utc_time"]).setZone(timezone); timeInput.value = localTime.toFormat("yyyy-LL-dd'T'HH:mm:ss"); diff --git a/web/templates/reminder_dashboard/guild_reminder.html.tera b/web/templates/reminder_dashboard/guild_reminder.html.tera index cb47d95..16f38a3 100644 --- a/web/templates/reminder_dashboard/guild_reminder.html.tera +++ b/web/templates/reminder_dashboard/guild_reminder.html.tera @@ -204,7 +204,7 @@ -