From 2290760cbb71c0c061d4be3dc00fa20e9f1ec19a Mon Sep 17 00:00:00 2001 From: Innei Date: Wed, 25 Sep 2024 22:04:13 +0800 Subject: [PATCH] feat: expose present user profile modal for electron Signed-off-by: Innei --- apps/renderer/src/initialize/index.ts | 6 ------ apps/renderer/src/modules/profile/hooks.ts | 7 ++++--- .../renderer/src/providers/extension-expose-provider.tsx | 9 ++++++++- packages/shared/src/bridge.ts | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/renderer/src/initialize/index.ts b/apps/renderer/src/initialize/index.ts index 605bf2b74..e7244aff0 100644 --- a/apps/renderer/src/initialize/index.ts +++ b/apps/renderer/src/initialize/index.ts @@ -6,8 +6,6 @@ import duration from "dayjs/plugin/duration" import localizedFormat from "dayjs/plugin/localizedFormat" import relativeTime from "dayjs/plugin/relativeTime" import { enableMapSet } from "immer" -import React from "react" -import ReactDOM from "react-dom" import { isElectronBuild } from "~/constants" import { browserDB } from "~/database" @@ -99,10 +97,6 @@ export const initializeApp = async () => { data_hydrated_time: dataHydratedTime, version: APP_VERSION, }) - - // expose `React` `ReactDOM` to global, it's easier for developers to make plugins - window.React = React - window.ReactDOM = ReactDOM } import.meta.hot?.dispose(cleanup) diff --git a/apps/renderer/src/modules/profile/hooks.ts b/apps/renderer/src/modules/profile/hooks.ts index b17fbf8ef..5926d73ff 100644 --- a/apps/renderer/src/modules/profile/hooks.ts +++ b/apps/renderer/src/modules/profile/hooks.ts @@ -42,18 +42,19 @@ export const useUserSubscriptionsQuery = (userId: string | undefined) => { return subscriptions } -export const usePresentUserProfileModal = (variant: "drawer" | "dialog" = "dialog") => { +type Variant = "drawer" | "dialog" +export const usePresentUserProfileModal = (variant: Variant = "dialog") => { const { present } = useModalStack() return useCallback( - (userId: string | undefined) => { + (userId: string | undefined, overrideVariant?: Variant) => { if (!userId) return present({ title: "User Profile", content: () => createElement(UserProfileModalContent, { userId, - variant, + variant: overrideVariant || variant, }), CustomModalComponent: PlainModal, clickOutsideToDismiss: true, diff --git a/apps/renderer/src/providers/extension-expose-provider.tsx b/apps/renderer/src/providers/extension-expose-provider.tsx index 0cd9e62c9..053ef3782 100644 --- a/apps/renderer/src/providers/extension-expose-provider.tsx +++ b/apps/renderer/src/providers/extension-expose-provider.tsx @@ -8,6 +8,7 @@ import { getGeneralSettings } from "~/atoms/settings/general" import { getUISettings } from "~/atoms/settings/ui" import { useModalStack } from "~/components/ui/modal" import { FeedForm } from "~/modules/discover/feed-form" +import { usePresentUserProfileModal } from "~/modules/profile/hooks" import { ElectronCloseEvent, ElectronShowEvent } from "./invalidate-query-provider" @@ -39,6 +40,8 @@ export const ExtensionExposeProvider = () => { }, []) const { t } = useTranslation() + + const presentUserProfile = usePresentUserProfileModal("dialog") useEffect(() => { registerGlobalContext({ follow(id, options) { @@ -51,7 +54,11 @@ export const ExtensionExposeProvider = () => { ), }) }, + + profile(id, variant) { + presentUserProfile(id, variant) + }, }) - }, [present, t]) + }, [present, presentUserProfile, t]) return null } diff --git a/packages/shared/src/bridge.ts b/packages/shared/src/bridge.ts index 812d6d88c..f0f7b5a50 100644 --- a/packages/shared/src/bridge.ts +++ b/packages/shared/src/bridge.ts @@ -22,6 +22,7 @@ interface RenderGlobalContext { /// Actions follow: (id: string, options?: { isList: boolean }) => void + profile: (id: string, variant?: "drawer" | "dialog") => void /// Utils toast: typeof toast