From 5a8725b50767bb6faddca6e0af6cef2cfb28da29 Mon Sep 17 00:00:00 2001 From: Innei Date: Sun, 27 Oct 2024 12:05:21 +0800 Subject: [PATCH] fix(store): singleton store guard Signed-off-by: Innei --- .../src/modules/entry-column/layouts/EntryItemWrapper.tsx | 2 +- apps/renderer/src/modules/feed-column/category.tsx | 2 +- apps/renderer/src/modules/feed-column/item.tsx | 6 +++--- apps/renderer/src/store/utils/helper.ts | 7 +++++++ plugins/vite/hmr.ts | 5 +++++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/renderer/src/modules/entry-column/layouts/EntryItemWrapper.tsx b/apps/renderer/src/modules/entry-column/layouts/EntryItemWrapper.tsx index 18bc7fc11..d80803667 100644 --- a/apps/renderer/src/modules/entry-column/layouts/EntryItemWrapper.tsx +++ b/apps/renderer/src/modules/entry-column/layouts/EntryItemWrapper.tsx @@ -74,7 +74,7 @@ export const EntryItemWrapper: FC< [entry.entries.url], ) const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) - useAnyPointDown(() => setIsContextMenuOpen(false)) + useAnyPointDown(() => isContextMenuOpen && setIsContextMenuOpen(false)) const handleContextMenu: React.MouseEventHandler = useCallback( (e) => { e.preventDefault() diff --git a/apps/renderer/src/modules/feed-column/category.tsx b/apps/renderer/src/modules/feed-column/category.tsx index 23bae6d81..f37ec7356 100644 --- a/apps/renderer/src/modules/feed-column/category.tsx +++ b/apps/renderer/src/modules/feed-column/category.tsx @@ -145,7 +145,7 @@ function FeedCategoryImpl({ data: ids, view, categoryOpenStateData }: FeedCatego const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) useAnyPointDown(() => { - setIsContextMenuOpen(false) + isContextMenuOpen && setIsContextMenuOpen(false) }) const isCategoryIsWaiting = isChangePending diff --git a/apps/renderer/src/modules/feed-column/item.tsx b/apps/renderer/src/modules/feed-column/item.tsx index d8c75f958..65b4f84e6 100644 --- a/apps/renderer/src/modules/feed-column/item.tsx +++ b/apps/renderer/src/modules/feed-column/item.tsx @@ -81,7 +81,7 @@ const FeedItemImpl = ({ view, feedId, className }: FeedItemProps) => { const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) useAnyPointDown(() => { - setIsContextMenuOpen(false) + isContextMenuOpen && setIsContextMenuOpen(false) }) if (!feed) return null @@ -208,7 +208,7 @@ const ListItemImpl: Component<{ const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) useAnyPointDown(() => { - setIsContextMenuOpen(false) + isContextMenuOpen && setIsContextMenuOpen(false) }) const subscription = useSubscriptionByFeedId(listId) const navigate = useNavigateEntry() @@ -291,7 +291,7 @@ const InboxItemImpl: Component<{ const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) useAnyPointDown(() => { - setIsContextMenuOpen(false) + isContextMenuOpen && setIsContextMenuOpen(false) }) const navigate = useNavigateEntry() const handleNavigate = useCallback( diff --git a/apps/renderer/src/store/utils/helper.ts b/apps/renderer/src/store/utils/helper.ts index bca9bb580..ee6513f98 100644 --- a/apps/renderer/src/store/utils/helper.ts +++ b/apps/renderer/src/store/utils/helper.ts @@ -34,6 +34,11 @@ const storeMap = {} as Record> export const createZustandStore = = StateCreator>(name: string) => (store: T) => { + if (import.meta.env.DEV && window[`store_${name}`]) { + import.meta.hot?.send("message", "The store has been changed, reloading...") + globalThis.location.reload() + } + const newStore = import.meta.env.DEV ? createWithEqualityFn( devtools(store, { @@ -60,6 +65,8 @@ export const createZustandStore = }, ) + window[`store_${name}`] = newStore + return newStore } type FunctionKeys = { diff --git a/plugins/vite/hmr.ts b/plugins/vite/hmr.ts index 9dfd410dd..30ac9f1c3 100644 --- a/plugins/vite/hmr.ts +++ b/plugins/vite/hmr.ts @@ -44,6 +44,11 @@ function isNodeWithinCircularImports( export const circularImportRefreshPlugin = (): Plugin => ({ name: "circular-import-refresh", + configureServer(server) { + server.ws.on("message", (message) => { + console.info(message) + }) + }, handleHotUpdate({ file, server }: HmrContext) { const mod = server.moduleGraph.getModuleById(file)