From 9d51f9596f38570a99a371ee903b60b4a40bd99b Mon Sep 17 00:00:00 2001 From: EYHN Date: Thu, 28 Dec 2023 09:57:26 +0000 Subject: [PATCH] refactor(component): make component pure (#5427) --- packages/frontend/component/package.json | 2 - .../app-sidebar/app-updater-button/index.tsx | 155 +++++++----------- .../components/card/workspace-card/index.tsx | 17 +- .../use-block-suite-page-preview.spec.ts | 69 ++++++++ .../page-list/page-content-preview.tsx | 5 +- .../use-block-suite-page-preview.ts | 0 .../use-block-suite-workspace-page.ts | 46 ++++++ .../src/components/workspace-list/index.tsx | 19 ++- .../user-with-workspace-list/index.tsx | 2 +- .../workspace-list/index.tsx | 18 +- .../src/components/root-app-sidebar/index.tsx | 4 +- .../root-app-sidebar/updater-button.tsx | 21 +++ .../hooks/src/__tests__/index.spec.ts | 36 ---- .../frontend/hooks/src/use-app-updater.ts | 10 +- .../src/use-block-suite-workspace-page.ts | 124 +++----------- .../frontend/hooks/src/use-workspace-info.ts | 24 ++- .../stories/app-updater-button.stories.tsx | 21 +-- .../src/stories/workspace-list.stories.tsx | 3 + yarn.lock | 4 +- 19 files changed, 307 insertions(+), 273 deletions(-) create mode 100644 packages/frontend/component/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts rename packages/frontend/{hooks/src => component/src/components/page-list}/use-block-suite-page-preview.ts (100%) create mode 100644 packages/frontend/component/src/components/page-list/use-block-suite-workspace-page.ts create mode 100644 packages/frontend/core/src/components/root-app-sidebar/updater-button.tsx diff --git a/packages/frontend/component/package.json b/packages/frontend/component/package.json index 9259f1ec55..ae0f832791 100644 --- a/packages/frontend/component/package.json +++ b/packages/frontend/component/package.json @@ -42,8 +42,6 @@ "@radix-ui/react-toast": "^1.1.5", "@radix-ui/react-toolbar": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", - "@toeverything/hooks": "workspace:*", - "@toeverything/infra": "workspace:*", "@toeverything/theme": "^0.7.24", "@vanilla-extract/dynamic": "^2.0.3", "bytes": "^3.1.2", diff --git a/packages/frontend/component/src/components/app-sidebar/app-updater-button/index.tsx b/packages/frontend/component/src/components/app-sidebar/app-updater-button/index.tsx index bf9025d78f..d183c068c9 100644 --- a/packages/frontend/component/src/components/app-sidebar/app-updater-button/index.tsx +++ b/packages/frontend/component/src/components/app-sidebar/app-updater-button/index.tsx @@ -1,17 +1,18 @@ import { Unreachable } from '@affine/env/constant'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { CloseIcon, NewIcon, ResetIcon } from '@blocksuite/icons'; -import { useAppUpdater } from '@toeverything/hooks/use-app-updater'; import clsx from 'clsx'; import { useCallback, useMemo } from 'react'; import { Tooltip } from '../../../ui/tooltip'; import * as styles from './index.css'; -export interface AddPageButtonPureProps { - onClickUpdate: () => void; - onDismissCurrentChangelog: () => void; - currentChangelogUnread: boolean; +export interface AddPageButtonProps { + onQuitAndInstall: () => void; + onDownloadUpdate: () => void; + onDismissChangelog: () => void; + onOpenChangelog: () => void; + changelogUnread: boolean; updateReady: boolean; updateAvailable: { version: string; @@ -33,8 +34,8 @@ interface ButtonContentProps { autoDownload: boolean; downloadProgress: number | null; appQuitting: boolean; - currentChangelogUnread: boolean; - onDismissCurrentChangelog: () => void; + changelogUnread: boolean; + onDismissChangelog: () => void; } function DownloadUpdate({ updateAvailable }: ButtonContentProps) { @@ -114,14 +115,14 @@ function OpenDownloadPage({ updateAvailable }: ButtonContentProps) { ); } -function WhatsNew({ onDismissCurrentChangelog }: ButtonContentProps) { +function WhatsNew({ onDismissChangelog }: ButtonContentProps) { const t = useAFFiNEI18N(); const onClickClose: React.MouseEventHandler = useCallback( e => { - onDismissCurrentChangelog(); + onDismissChangelog(); e.stopPropagation(); }, - [onDismissCurrentChangelog] + [onDismissChangelog] ); return ( <> @@ -149,42 +150,76 @@ const getButtonContentRenderer = (props: ButtonContentProps) => { } } else if (props.updateAvailable && !props.updateAvailable?.allowAutoUpdate) { return OpenDownloadPage; - } else if (props.currentChangelogUnread) { + } else if (props.changelogUnread) { return WhatsNew; } return null; }; -export function AppUpdaterButtonPure({ +export function AppUpdaterButton({ updateReady, - onClickUpdate, - onDismissCurrentChangelog, - currentChangelogUnread, + changelogUnread, + onDismissChangelog, + onDownloadUpdate, + onQuitAndInstall, + onOpenChangelog, updateAvailable, autoDownload, downloadProgress, appQuitting, className, style, -}: AddPageButtonPureProps) { +}: AddPageButtonProps) { + const handleClick = useCallback(() => { + if (updateReady) { + onQuitAndInstall(); + } else if (updateAvailable) { + if (updateAvailable.allowAutoUpdate) { + if (autoDownload) { + // wait for download to finish + } else { + onDownloadUpdate(); + } + } else { + window.open( + `https://github.com/toeverything/AFFiNE/releases/tag/v${updateAvailable.version}`, + '_blank' + ); + } + } else if (changelogUnread) { + window.open(runtimeConfig.changelogUrl, '_blank'); + onOpenChangelog(); + } else { + throw new Unreachable(); + } + }, [ + updateReady, + updateAvailable, + changelogUnread, + onQuitAndInstall, + autoDownload, + onDownloadUpdate, + onOpenChangelog, + ]); + const contentProps = useMemo( () => ({ updateReady, updateAvailable, - currentChangelogUnread, + changelogUnread, autoDownload, downloadProgress, appQuitting, - onDismissCurrentChangelog, + onDismissChangelog, }), [ updateReady, updateAvailable, - currentChangelogUnread, + changelogUnread, autoDownload, downloadProgress, appQuitting, - onDismissCurrentChangelog, + onDismissChangelog, ] ); @@ -222,6 +257,10 @@ export function AppUpdaterButtonPure({ updateReady, ]); + if (!updateAvailable && !changelogUnread) { + return null; + } + return wrapWithTooltip(