From 82c1fd45bc37103949c55bd187a1057af99c778d Mon Sep 17 00:00:00 2001 From: ArjixWasTaken <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 19 Feb 2023 15:56:51 +0200 Subject: [PATCH] Save the custom timezone and handle edge cases. --- src/plugins/Timezones/Utils.ts | 5 ++- src/plugins/Timezones/index.tsx | 56 ++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/plugins/Timezones/Utils.ts b/src/plugins/Timezones/Utils.ts index 9387719c7..796a281ce 100644 --- a/src/plugins/Timezones/Utils.ts +++ b/src/plugins/Timezones/Utils.ts @@ -89,13 +89,12 @@ const bulkFetch = debounce(async () => { export function getUserTimezone(discordID: string): Promise { return new Promise(res => { - if (discordID in Cache) res(Cache[discordID]); - const timezone = (DataStore.get(DATASTORE_KEY) as Promise).then(tzs => tzs?.[discordID]); timezone.then(tz => { if (tz) res(tz); else { - if (discordID in requestQueue) requestQueue[discordID].push(res); + if (discordID in Cache) res(Cache[discordID]); + else if (discordID in requestQueue) requestQueue[discordID].push(res); // If not already added, then add it and call the debounced function to make sure the request gets executed else { requestQueue[discordID] = [res]; diff --git a/src/plugins/Timezones/index.tsx b/src/plugins/Timezones/index.tsx index f0db0d8e7..15b6f2143 100644 --- a/src/plugins/Timezones/index.tsx +++ b/src/plugins/Timezones/index.tsx @@ -182,7 +182,6 @@ export default definePlugin({ ], getProfileTimezonesComponent: (e: any) => { - const user = e.user as User; const [timezone, setTimezone] = React.useState(); @@ -192,6 +191,7 @@ export default definePlugin({ React.useEffect(() => { getUserTimezone(user.id).then(timezone => setTimezone(timezone)); + // Rerender every second to stay in sync. setInterval(forceUpdate, 1000); }, [user.id]); @@ -248,17 +248,65 @@ export default definePlugin({ > { setIsInEditMode(old => !old); }} + onClick={() => { + if (isInEditMode) { + if (timezone) { + DataStore.update(DATASTORE_KEY, (oldValue: TimezoneDB | undefined) => { + oldValue = oldValue || {}; + oldValue[user.id] = timezone as typeof timezones[number]; + return oldValue; + }).then(() => { + Toasts.show({ + type: Toasts.Type.SUCCESS, + message: "Timezone set!", + id: Toasts.genId() + }); + setIsInEditMode(false); + }).catch(err => { + console.error(err); + Toasts.show({ + type: Toasts.Type.FAILURE, + message: "Something went wrong, please try again later.", + id: Toasts.genId() + }); + }); + } else { + setIsInEditMode(false); + } + } else { + setIsInEditMode(true); + } + }} color="var(--primary-330)" height="16" width="16" /> - {isInEditMode && { setTimezone(undefined); setIsInEditMode(false); }} + onClick={() => { + DataStore.update(DATASTORE_KEY, (oldValue: TimezoneDB | undefined) => { + oldValue = oldValue || {}; + delete oldValue[user.id]; + return oldValue; + }).then(async () => { + Toasts.show({ + type: Toasts.Type.SUCCESS, + message: "Timezone removed!", + id: Toasts.genId() + }); + setIsInEditMode(false); + setTimezone(await getUserTimezone(user.id)); + }).catch(err => { + console.error(err); + Toasts.show({ + type: Toasts.Type.FAILURE, + message: "Something went wrong, please try again later.", + id: Toasts.genId() + }); + }); + }} color="var(--red-360)" height="16" width="16"