From eeed398155f36745378689defb546531f6a03a52 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 17 Jul 2023 15:48:32 +0800 Subject: [PATCH] fix(plugin-infra): react as peer dependency (#3260) --- apps/web/src/adapters/local/index.tsx | 2 +- .../setting-modal/setting-sidebar/index.tsx | 2 +- .../setting-modal/workspace-setting/index.tsx | 2 +- apps/web/src/hooks/use-workspace.ts | 2 +- apps/web/src/layouts/workspace-layout.tsx | 2 +- .../components/card/workspace-card/index.tsx | 2 +- packages/plugin-infra/package.json | 5 +++ .../plugin-infra/src/__internal__/react.ts | 35 +++++++++++++++++++ .../src/__internal__/workspace.ts | 29 --------------- .../use-block-suite-workspace.spec.ts | 6 ++-- packages/plugin-infra/vite.config.ts | 1 + 11 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 packages/plugin-infra/src/__internal__/react.ts diff --git a/apps/web/src/adapters/local/index.tsx b/apps/web/src/adapters/local/index.tsx index f6d42ccb06..1bf1f8a141 100644 --- a/apps/web/src/adapters/local/index.tsx +++ b/apps/web/src/adapters/local/index.tsx @@ -19,7 +19,7 @@ import { import { createIndexedDBDownloadProvider } from '@affine/workspace/providers'; import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils'; import { nanoid } from '@blocksuite/store'; -import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/workspace'; +import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/react'; import { BlockSuitePageList, diff --git a/apps/web/src/components/affine/setting-modal/setting-sidebar/index.tsx b/apps/web/src/components/affine/setting-modal/setting-sidebar/index.tsx index a90f57ea50..6f8932466a 100644 --- a/apps/web/src/components/affine/setting-modal/setting-sidebar/index.tsx +++ b/apps/web/src/components/affine/setting-modal/setting-sidebar/index.tsx @@ -7,7 +7,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks'; import type { RootWorkspaceMetadata } from '@affine/workspace/atom'; import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-workspace-name'; -import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/workspace'; +import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/react'; import clsx from 'clsx'; import { useAtomValue } from 'jotai'; import type { FC } from 'react'; diff --git a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx index f3d9d3685a..53d656c0a0 100644 --- a/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx +++ b/apps/web/src/components/affine/setting-modal/workspace-setting/index.tsx @@ -1,5 +1,5 @@ import { WorkspaceDetailSkeleton } from '@affine/component/setting-components'; -import { usePassiveWorkspaceEffect } from '@toeverything/plugin-infra/__internal__/workspace'; +import { usePassiveWorkspaceEffect } from '@toeverything/plugin-infra/__internal__/react'; import { useSetAtom } from 'jotai'; import { useRouter } from 'next/router'; import { Suspense, useCallback } from 'react'; diff --git a/apps/web/src/hooks/use-workspace.ts b/apps/web/src/hooks/use-workspace.ts index ca215566c1..26a8d74a56 100644 --- a/apps/web/src/hooks/use-workspace.ts +++ b/apps/web/src/hooks/use-workspace.ts @@ -1,7 +1,7 @@ import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom'; import { assertExists } from '@blocksuite/global/utils'; import type { Workspace } from '@blocksuite/store'; -import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/workspace'; +import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/react'; import type { Atom } from 'jotai'; import { atom, useAtomValue } from 'jotai'; diff --git a/apps/web/src/layouts/workspace-layout.tsx b/apps/web/src/layouts/workspace-layout.tsx index bb8e2dd63a..49b939deae 100644 --- a/apps/web/src/layouts/workspace-layout.tsx +++ b/apps/web/src/layouts/workspace-layout.tsx @@ -32,7 +32,7 @@ import { useSensors, } from '@dnd-kit/core'; import { useBlockSuiteWorkspaceHelper } from '@toeverything/hooks/use-block-suite-workspace-helper'; -import { usePassiveWorkspaceEffect } from '@toeverything/plugin-infra/__internal__/workspace'; +import { usePassiveWorkspaceEffect } from '@toeverything/plugin-infra/__internal__/react'; import { currentPageIdAtom, currentWorkspaceIdAtom, diff --git a/packages/component/src/components/card/workspace-card/index.tsx b/packages/component/src/components/card/workspace-card/index.tsx index 79eae830ea..b54d2d168b 100644 --- a/packages/component/src/components/card/workspace-card/index.tsx +++ b/packages/component/src/components/card/workspace-card/index.tsx @@ -9,7 +9,7 @@ import { LocalWorkspaceIcon as DefaultLocalWorkspaceIcon, } from '@blocksuite/icons'; import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-workspace-name'; -import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/workspace'; +import { useStaticBlockSuiteWorkspace } from '@toeverything/plugin-infra/__internal__/react'; import type { FC } from 'react'; import { useCallback } from 'react'; diff --git a/packages/plugin-infra/package.json b/packages/plugin-infra/package.json index 5c3dbcb8d1..da00c2b651 100644 --- a/packages/plugin-infra/package.json +++ b/packages/plugin-infra/package.json @@ -23,6 +23,11 @@ "type": "./dist/__internal__/workspace.d.ts", "import": "./dist/__internal__/workspace.js", "require": "./dist/__internal__/workspace.cjs" + }, + "./__internal__/react": { + "type": "./dist/__internal__/react.d.ts", + "import": "./dist/__internal__/react.js", + "require": "./dist/__internal__/react.cjs" } }, "dependencies": { diff --git a/packages/plugin-infra/src/__internal__/react.ts b/packages/plugin-infra/src/__internal__/react.ts new file mode 100644 index 0000000000..fa926723a3 --- /dev/null +++ b/packages/plugin-infra/src/__internal__/react.ts @@ -0,0 +1,35 @@ +import type { Workspace } from '@blocksuite/store'; +import { type PassiveDocProvider } from '@blocksuite/store'; +import { useAtomValue } from 'jotai/react'; +import { useEffect } from 'react'; + +import { + getActiveBlockSuiteWorkspaceAtom, + workspacePassiveEffectWeakMap, +} from './workspace'; + +export function useStaticBlockSuiteWorkspace(id: string): Workspace { + return useAtomValue(getActiveBlockSuiteWorkspaceAtom(id)); +} + +export function usePassiveWorkspaceEffect(workspace: Workspace) { + useEffect(() => { + if (workspacePassiveEffectWeakMap.get(workspace) === true) { + return; + } + const providers = workspace.providers.filter( + (provider): provider is PassiveDocProvider => + 'passive' in provider && provider.passive === true + ); + providers.forEach(provider => { + provider.connect(); + }); + workspacePassiveEffectWeakMap.set(workspace, true); + return () => { + providers.forEach(provider => { + provider.disconnect(); + }); + workspacePassiveEffectWeakMap.delete(workspace); + }; + }, [workspace]); +} diff --git a/packages/plugin-infra/src/__internal__/workspace.ts b/packages/plugin-infra/src/__internal__/workspace.ts index 0b3e1e7f5e..72ee806512 100644 --- a/packages/plugin-infra/src/__internal__/workspace.ts +++ b/packages/plugin-infra/src/__internal__/workspace.ts @@ -1,9 +1,6 @@ import type { ActiveDocProvider, Workspace } from '@blocksuite/store'; -import type { PassiveDocProvider } from '@blocksuite/store'; -import { useAtomValue } from 'jotai/react'; import type { Atom } from 'jotai/vanilla'; import { atom } from 'jotai/vanilla'; -import { useEffect } from 'react'; /** * DO NOT ACCESS THIS MAP IN PRODUCTION, OR YOU WILL BE FIRED @@ -60,29 +57,3 @@ export function getActiveBlockSuiteWorkspaceAtom( } return workspacePassiveAtomWeakMap.get(workspace) as Atom>; } - -export function useStaticBlockSuiteWorkspace(id: string): Workspace { - return useAtomValue(getActiveBlockSuiteWorkspaceAtom(id)); -} - -export function usePassiveWorkspaceEffect(workspace: Workspace) { - useEffect(() => { - if (workspacePassiveEffectWeakMap.get(workspace) === true) { - return; - } - const providers = workspace.providers.filter( - (provider): provider is PassiveDocProvider => - 'passive' in provider && provider.passive === true - ); - providers.forEach(provider => { - provider.connect(); - }); - workspacePassiveEffectWeakMap.set(workspace, true); - return () => { - providers.forEach(provider => { - provider.disconnect(); - }); - workspacePassiveEffectWeakMap.delete(workspace); - }; - }, [workspace]); -} diff --git a/packages/plugin-infra/src/__tests__/use-block-suite-workspace.spec.ts b/packages/plugin-infra/src/__tests__/use-block-suite-workspace.spec.ts index ec6b4bf752..87aa31c4c0 100644 --- a/packages/plugin-infra/src/__tests__/use-block-suite-workspace.spec.ts +++ b/packages/plugin-infra/src/__tests__/use-block-suite-workspace.spec.ts @@ -7,10 +7,12 @@ import { getDefaultStore } from 'jotai/vanilla'; import { expect, test, vi } from 'vitest'; import { - getActiveBlockSuiteWorkspaceAtom, - INTERNAL_BLOCKSUITE_HASH_MAP, usePassiveWorkspaceEffect, useStaticBlockSuiteWorkspace, +} from '../__internal__/react'; +import { + getActiveBlockSuiteWorkspaceAtom, + INTERNAL_BLOCKSUITE_HASH_MAP, } from '../__internal__/workspace'; test('useStaticBlockSuiteWorkspace', async () => { diff --git a/packages/plugin-infra/vite.config.ts b/packages/plugin-infra/vite.config.ts index 4a6a417b33..44ae68c501 100644 --- a/packages/plugin-infra/vite.config.ts +++ b/packages/plugin-infra/vite.config.ts @@ -17,6 +17,7 @@ export default defineConfig({ root, 'src/__internal__/workspace.ts' ), + '__internal__/react': resolve(root, 'src/__internal__/react.ts'), }, }, rollupOptions: {