From a6e9504b6f1a57de04e429ff0ce7753a9a2e5efd Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 3 Feb 2023 13:04:12 +1100 Subject: [PATCH] chore(menu): detect db update by comparing against prev value - syncs reload btn visibility b/w tabs - doesn't trigger when switching profiles if identical --- src/core/client.mjs | 5 ++--- src/core/menu/components/Checkbox.mjs | 9 +++++++-- src/core/menu/components/Input.mjs | 20 +++++++++++++++++--- src/core/menu/components/Select.mjs | 14 ++++++++++---- src/core/menu/components/Toggle.mjs | 9 +++++++-- src/core/menu/islands/List.mjs | 2 +- src/core/menu/islands/Options.mjs | 2 +- src/core/menu/islands/Profiles.mjs | 17 +++++++++-------- src/core/menu/islands/Telemetry.mjs | 8 ++++---- src/core/menu/menu.mjs | 2 +- 10 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/core/client.mjs b/src/core/client.mjs index dc8d0a8..9780a03 100644 --- a/src/core/client.mjs +++ b/src/core/client.mjs @@ -52,18 +52,17 @@ const insertMenu = async (db) => { let _contentWindow; const sendThemePing = () => { - if (!_contentWindow) return; const darkMode = document.body.classList.contains("dark"), notionTheme = darkMode ? "dark" : "light"; if (renderPing.theme === notionTheme) return; renderPing.theme = notionTheme; - _contentWindow.postMessage(renderPing, "*"); + _contentWindow?.postMessage?.(renderPing, "*"); }, sendRenderPing = (contentWindow) => { _contentWindow ??= contentWindow; if (!$modal.hasAttribute("open")) return; delete renderPing.theme; - _contentWindow.focus(); + _contentWindow?.focus?.(); sendThemePing(); }; diff --git a/src/core/menu/components/Checkbox.mjs b/src/core/menu/components/Checkbox.mjs index 8b49dba..af1bb6e 100644 --- a/src/core/menu/components/Checkbox.mjs +++ b/src/core/menu/components/Checkbox.mjs @@ -4,9 +4,10 @@ * (https://notion-enhancer.github.io/) under the MIT license */ -import { useState } from "../state.mjs"; +import { setState, useState } from "../state.mjs"; -function Checkbox({ _get, _set, ...props }) { +function Checkbox({ _get, _set, _requireReload = true, ...props }) { + let _initialValue; const { html, extendProps } = globalThis.__enhancerApi, $input = html` { const checked = (await _get?.()) ?? $input.checked; $input.checked = checked; + if (_requireReload) { + _initialValue ??= checked; + if (checked !== _initialValue) setState({ databaseUpdated: true }); + } }); return html`