From aaca0798e3db322a470ced71f6e850edf6ecd651 Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 15:43:55 +0800 Subject: [PATCH 01/15] feat(route): rename variables --- apps/ligo-virgo/src/pages/workspace/Home.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/ligo-virgo/src/pages/workspace/Home.tsx b/apps/ligo-virgo/src/pages/workspace/Home.tsx index 3ae0da1da5..1d6e0fb661 100644 --- a/apps/ligo-virgo/src/pages/workspace/Home.tsx +++ b/apps/ligo-virgo/src/pages/workspace/Home.tsx @@ -9,18 +9,19 @@ export function WorkspaceHome() { const { user } = useUserAndSpaces(); useEffect(() => { - const navigate_to_user_initial_page = async () => { - const [recent_pages, user_initial_page_id] = await Promise.all([ + const navigateToUserInitialPage = async () => { + const [recentPages, userInitialPageId] = await Promise.all([ services.api.userConfig.getRecentPages(workspace_id, user.id), services.api.userConfig.getUserInitialPage( workspace_id, user.id ), ]); - if (recent_pages.length === 0) { + // if recent pages if null, run initialize task + if (recentPages.length === 0) { await services.api.editorBlock.copyTemplateToPage( workspace_id, - user_initial_page_id, + userInitialPageId, TemplateFactory.generatePageTemplateByGroupKeys({ name: '👋 Get Started with AFFiNE', groupKeys: [ @@ -31,10 +32,11 @@ export function WorkspaceHome() { }) ); } - - navigate(`/${workspace_id}/${user_initial_page_id}`); + if (userInitialPageId) { + navigate(`/${workspace_id}/${userInitialPageId}`); + } }; - navigate_to_user_initial_page(); + navigateToUserInitialPage(); }, [navigate, user.id, workspace_id]); return null; From 5b7e1a06baef266ab6870077e9600151297cdad4 Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 15:51:05 +0800 Subject: [PATCH 02/15] feat(route): better refresh --- apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx | 1 - libs/datasource/state/src/user.ts | 5 ----- 2 files changed, 6 deletions(-) diff --git a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx index eb424f88c7..5ebc753516 100644 --- a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx +++ b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx @@ -9,7 +9,6 @@ import Pages from './pages'; export function WorkspaceContainer() { const { workspace_id } = useParams(); const { user, currentSpaceId } = useUserAndSpaces(); - if ( user && ![currentSpaceId, 'affine2vin277tcmafwq'].includes(workspace_id) diff --git a/libs/datasource/state/src/user.ts b/libs/datasource/state/src/user.ts index 063f9f7f04..40ffbd80d9 100644 --- a/libs/datasource/state/src/user.ts +++ b/libs/datasource/state/src/user.ts @@ -5,7 +5,6 @@ import { } from 'firebase/auth'; import { atom, useAtom } from 'jotai'; import { useEffect, useMemo } from 'react'; -import { useLocation, useNavigate } from 'react-router'; import { useIdentifyUser } from '@toeverything/datasource/feature-flags'; import { UserInfo } from '@toeverything/utils'; @@ -63,15 +62,11 @@ const BRAND_ID = 'AFFiNE'; const _localTrigger = atom(false); const _useUserAndSpacesForFreeLogin = () => { - const location = useLocation(); - const navigate = useNavigate(); const [user, setUser] = useAtom(_userAtom); const [loading, setLoading] = useAtom(_loadingAtom); - const [localTrigger] = useAtom(_localTrigger); useEffect(() => { if (loading) { - navigate(`/${BRAND_ID}`); setLoading(false); } }, []); From 61c266057a9bdc92f78c89cc29d6e83a6ed91d69 Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 19:09:28 +0800 Subject: [PATCH 03/15] feat(code): remove unused comment --- libs/components/editor-blocks/src/blocks/code/CodeView.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/libs/components/editor-blocks/src/blocks/code/CodeView.tsx b/libs/components/editor-blocks/src/blocks/code/CodeView.tsx index ff6638deb3..a1f4d9826a 100644 --- a/libs/components/editor-blocks/src/blocks/code/CodeView.tsx +++ b/libs/components/editor-blocks/src/blocks/code/CodeView.tsx @@ -162,9 +162,6 @@ export const CodeView = ({ block, editor }: CreateCodeView) => { }; useEffect(() => { handleLangChange(langType ? langType : DEFAULT_LANG); - // setTimeout(() => { - // focusCode(); - // }, 100); }, []); const copyCode = () => { From 9442c023e57de4e53f2ec3c4ddf0a61cfe2e6220 Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 19:13:03 +0800 Subject: [PATCH 04/15] refactor(workspace): rename workspaceId --- apps/ligo-virgo/src/pages/AppRoutes.tsx | 2 +- apps/ligo-virgo/src/pages/workspace/Home.tsx | 12 +++++----- .../pages/workspace/WorkspaceContainer.tsx | 12 +++------- .../workspace/docs/collapsible-page-tree.tsx | 8 +++---- .../common/src/lib/text/plugins/reflink.tsx | 6 ++--- .../src/blocks/page/PageView.tsx | 4 ++-- .../src/comment/use-add-comment.ts | 6 ++--- .../editor-plugins/src/search/Search.tsx | 2 +- .../header/EditorBoardSwitcher/Switcher.tsx | 2 +- libs/components/layout/src/header/Header.tsx | 6 ++--- .../layout/src/header/PageSettingPortal.tsx | 20 ++++++++-------- libs/components/layout/src/header/Title.tsx | 14 +++++------ .../settings-sidebar/Comments/use-comments.ts | 4 ++-- .../Settings/util/use-workspace-page.ts | 2 +- .../page-tree/tree-item/TreeItem.tsx | 6 ++--- .../page-tree/use-page-tree.ts | 24 +++++++++---------- .../src/services/editor-block/index.ts | 8 +++---- libs/datasource/state/src/page.ts | 2 +- 18 files changed, 67 insertions(+), 73 deletions(-) diff --git a/apps/ligo-virgo/src/pages/AppRoutes.tsx b/apps/ligo-virgo/src/pages/AppRoutes.tsx index 855f717b28..4f1d845324 100644 --- a/apps/ligo-virgo/src/pages/AppRoutes.tsx +++ b/apps/ligo-virgo/src/pages/AppRoutes.tsx @@ -21,7 +21,7 @@ export function LigoVirgoRoutes() { /> } /> diff --git a/apps/ligo-virgo/src/pages/workspace/Home.tsx b/apps/ligo-virgo/src/pages/workspace/Home.tsx index 1d6e0fb661..5034787eb1 100644 --- a/apps/ligo-virgo/src/pages/workspace/Home.tsx +++ b/apps/ligo-virgo/src/pages/workspace/Home.tsx @@ -5,22 +5,22 @@ import { useNavigate, useParams } from 'react-router-dom'; export function WorkspaceHome() { const navigate = useNavigate(); - const { workspace_id } = useParams(); + const { workspaceId } = useParams(); const { user } = useUserAndSpaces(); useEffect(() => { const navigateToUserInitialPage = async () => { const [recentPages, userInitialPageId] = await Promise.all([ - services.api.userConfig.getRecentPages(workspace_id, user.id), + services.api.userConfig.getRecentPages(workspaceId, user.id), services.api.userConfig.getUserInitialPage( - workspace_id, + workspaceId, user.id ), ]); // if recent pages if null, run initialize task if (recentPages.length === 0) { await services.api.editorBlock.copyTemplateToPage( - workspace_id, + workspaceId, userInitialPageId, TemplateFactory.generatePageTemplateByGroupKeys({ name: '👋 Get Started with AFFiNE', @@ -33,11 +33,11 @@ export function WorkspaceHome() { ); } if (userInitialPageId) { - navigate(`/${workspace_id}/${userInitialPageId}`); + navigate(`/${workspaceId}/${userInitialPageId}`); } }; navigateToUserInitialPage(); - }, [navigate, user.id, workspace_id]); + }, [navigate, user.id, workspaceId]); return null; } diff --git a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx index 5ebc753516..b025267ce7 100644 --- a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx +++ b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx @@ -7,14 +7,8 @@ import { WorkspaceHome } from './Home'; import Pages from './pages'; export function WorkspaceContainer() { - const { workspace_id } = useParams(); + const { workspaceId } = useParams(); const { user, currentSpaceId } = useUserAndSpaces(); - if ( - user && - ![currentSpaceId, 'affine2vin277tcmafwq'].includes(workspace_id) - ) { - // return ; - } return ( @@ -22,11 +16,11 @@ export function WorkspaceContainer() { } /> } + element={} /> } + element={} /> } /> diff --git a/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx b/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx index 9aef73aa22..a429e999cf 100644 --- a/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx +++ b/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx @@ -38,7 +38,7 @@ export type CollapsiblePageTreeProps = { export function CollapsiblePageTree(props: CollapsiblePageTreeProps) { const { className, style, children, title, initialOpen = true } = props; const navigate = useNavigate(); - const { workspace_id, page_id } = useParams(); + const { workspaceId, page_id } = useParams(); const { handleAddPage } = usePageTree(); const { addPageToday } = useCalendarHeatmap(); @@ -48,16 +48,16 @@ export function CollapsiblePageTree(props: CollapsiblePageTreeProps) { const create_page = useCallback(async () => { if (page_id) { const newPage = await services.api.editorBlock.create({ - workspace: workspace_id, + workspace: workspaceId, type: 'page' as const, }); await handleAddPage(newPage.id); addPageToday(); - navigate(`/${workspace_id}/${newPage.id}`); + navigate(`/${workspaceId}/${newPage.id}`); } - }, [addPageToday, handleAddPage, navigate, page_id, workspace_id]); + }, [addPageToday, handleAddPage, navigate, page_id, workspaceId]); const [newPageBtnVisible, setNewPageBtnVisible] = useState(false); diff --git a/libs/components/common/src/lib/text/plugins/reflink.tsx b/libs/components/common/src/lib/text/plugins/reflink.tsx index 2b0c42a643..5cbd90478f 100644 --- a/libs/components/common/src/lib/text/plugins/reflink.tsx +++ b/libs/components/common/src/lib/text/plugins/reflink.tsx @@ -2,8 +2,8 @@ import { useNavigate, useParams } from 'react-router-dom'; import { Descendant } from 'slate'; // eslint-disable-next-line @nrwl/nx/enforce-module-boundaries -import { BlockSearchItem } from '@toeverything/datasource/jwt'; import { styled } from '@toeverything/components/ui'; +import { BlockSearchItem } from '@toeverything/datasource/jwt'; import { BlockPreview } from '../../block-preview'; @@ -26,14 +26,14 @@ type InlineRefLinkProps = { }; export const InlineRefLink = ({ block, pageId }: InlineRefLinkProps) => { - const { workspace_id } = useParams(); + const { workspaceId } = useParams(); const navigate = useNavigate(); if (block) { return ( navigate(`/${workspace_id}/${pageId}`)} + onClick={() => navigate(`/${workspaceId}/${pageId}`)} /> ); } diff --git a/libs/components/editor-blocks/src/blocks/page/PageView.tsx b/libs/components/editor-blocks/src/blocks/page/PageView.tsx index 123021e361..cb932670bd 100644 --- a/libs/components/editor-blocks/src/blocks/page/PageView.tsx +++ b/libs/components/editor-blocks/src/blocks/page/PageView.tsx @@ -16,7 +16,7 @@ import { } from '../../components/text-manage'; export const PageView = ({ block, editor }: CreateView) => { - const { workspace_id } = useParams(); + const { workspaceId } = useParams(); const textRef = useRef(null); const [backLinks, setBackLinks] = useState>>(); @@ -100,7 +100,7 @@ export const PageView = ({ block, editor }: CreateView) => { className={style9(styles.content)} suppressContentEditableWarning > */} - + {/*{block.childrenIds.map(childId => (*/} {/* */} {/*))}*/} diff --git a/libs/components/editor-plugins/src/comment/use-add-comment.ts b/libs/components/editor-plugins/src/comment/use-add-comment.ts index d5572801aa..c2bc4680ad 100644 --- a/libs/components/editor-plugins/src/comment/use-add-comment.ts +++ b/libs/components/editor-plugins/src/comment/use-add-comment.ts @@ -1,6 +1,6 @@ -import { useState, useCallback } from 'react'; -import { useParams } from 'react-router-dom'; import { services } from '@toeverything/datasource/db-service'; +import { useCallback, useState } from 'react'; +import { useParams } from 'react-router-dom'; import { WithEditorSelectionType } from '../menu/inline-menu/types'; export const useAddComment = ({ @@ -8,7 +8,7 @@ export const useAddComment = ({ selectionInfo, setShow, }: WithEditorSelectionType) => { - const { workspace_id: workspaceId, page_id: pageId } = useParams(); + const { workspaceId, page_id: pageId } = useParams(); const [currentComment, setCurrentComment] = useState(''); const createComment = useCallback(async (): Promise<{ diff --git a/libs/components/editor-plugins/src/search/Search.tsx b/libs/components/editor-plugins/src/search/Search.tsx index 6092862416..3511b610c3 100644 --- a/libs/components/editor-plugins/src/search/Search.tsx +++ b/libs/components/editor-plugins/src/search/Search.tsx @@ -47,7 +47,7 @@ type SearchProps = { }; export const Search = (props: SearchProps) => { - const { workspace_id: workspaceId } = useParams(); + const { workspaceId } = useParams(); const navigate = useNavigate(); const [open, setOpen] = useState(false); diff --git a/libs/components/layout/src/header/EditorBoardSwitcher/Switcher.tsx b/libs/components/layout/src/header/EditorBoardSwitcher/Switcher.tsx index 6c8ab70372..918603d5ef 100644 --- a/libs/components/layout/src/header/EditorBoardSwitcher/Switcher.tsx +++ b/libs/components/layout/src/header/EditorBoardSwitcher/Switcher.tsx @@ -16,7 +16,7 @@ export const Switcher = () => { if (targetViewMode === pageViewMode) { return; } - const workspaceId = params['workspace_id']; + const workspaceId = params['workspaceId']; /** * There are two possible modes: * Page mode: /{workspaceId}/{pageId} diff --git a/libs/components/layout/src/header/Header.tsx b/libs/components/layout/src/header/Header.tsx index 0f9028b9ae..b025c81023 100644 --- a/libs/components/layout/src/header/Header.tsx +++ b/libs/components/layout/src/header/Header.tsx @@ -46,7 +46,7 @@ export const AffineHeader = () => { useUserAndSpaces(); const showCenterTab = - (params['workspace_id'] || pathname.includes('/space/')) && params['*']; + (params['workspaceId'] || pathname.includes('/space/')) && params['*']; if (hideAffineHeader(pathname)) { return null; @@ -82,7 +82,7 @@ export const AffineHeader = () => { isEdgelessView ? navigate( `/${ - params['workspace_id'] || + params['workspaceId'] || 'space' }/${params['*'].slice(0, -11)}` ) @@ -108,7 +108,7 @@ export const AffineHeader = () => { ? null : navigate( `/${ - params['workspace_id'] || + params['workspaceId'] || 'space' }/${params['*']}` + '/edgeless' ) diff --git a/libs/components/layout/src/header/PageSettingPortal.tsx b/libs/components/layout/src/header/PageSettingPortal.tsx index 115b5c95fd..6dfc07fec8 100644 --- a/libs/components/layout/src/header/PageSettingPortal.tsx +++ b/libs/components/layout/src/header/PageSettingPortal.tsx @@ -50,7 +50,7 @@ const MESSAGES = { function PageSettingPortal() { const [alertOpen, setAlertOpen] = useState(false); - const { workspace_id } = useParams(); + const { workspaceId } = useParams(); const [pageBlock, setPageBlock] = useState(); const params = useParams(); @@ -64,7 +64,7 @@ function PageSettingPortal() { const fetchPageBlock = useCallback(async () => { const dbPageBlock = await services.api.editorBlock.getBlock( - workspace_id, + workspaceId, pageId ); if (!dbPageBlock) return; @@ -78,11 +78,11 @@ function PageSettingPortal() { //@ts-ignore text.value[0].text, }); - }, [workspace_id, pageId]); + }, [workspaceId, pageId]); useEffect(() => { fetchPageBlock(); - }, [workspace_id, pageId, fetchPageBlock]); + }, [workspaceId, pageId, fetchPageBlock]); const redirectToPage = (newWorkspaceId: string, newPageId: string) => { navigate('/' + newWorkspaceId + '/' + newPageId); }; @@ -90,23 +90,23 @@ function PageSettingPortal() { const handleDuplicatePage = async () => { //create page const newPage = await services.api.editorBlock.create({ - workspace: workspace_id, + workspace: workspaceId, type: 'page' as const, }); //add page to tree await services.api.pageTree.addNextPageToWorkspace( - workspace_id, + workspaceId, pageId, newPage.id ); //copy source page to new page await services.api.editorBlock.copyPage( - workspace_id, + workspaceId, pageId, newPage.id ); - redirectToPage(workspace_id, newPage.id); + redirectToPage(workspaceId, newPage.id); }; const handleCopy = () => { @@ -128,7 +128,7 @@ function PageSettingPortal() { .inspector() .load() .then(() => { - window.location.href = `/${workspace_id}/`; + window.location.href = `/${workspaceId}/`; }); }; @@ -145,7 +145,7 @@ function PageSettingPortal() { fullWidthChecked: checked, }, id: pageId, - workspace: workspace_id, + workspace: workspaceId, }); }; diff --git a/libs/components/layout/src/header/Title.tsx b/libs/components/layout/src/header/Title.tsx index 0447cd52f6..dcd0c9e356 100644 --- a/libs/components/layout/src/header/Title.tsx +++ b/libs/components/layout/src/header/Title.tsx @@ -12,7 +12,7 @@ import { useUserAndSpaces } from '@toeverything/datasource/state'; export const CurrentPageTitle = () => { const { user } = useUserAndSpaces(); const params = useParams(); - const { workspace_id } = params; + const { workspaceId } = params; const [pageId, setPageId] = useState(''); const [pageTitle, setPageTitle] = useState(); /* card.7 */ @@ -25,9 +25,9 @@ export const CurrentPageTitle = () => { }, [params]); const fetchPageTitle = useCallback(async () => { - if (!workspace_id || !pageId) return; + if (!workspaceId || !pageId) return; const [pageEditorBlock] = await services.api.editorBlock.get({ - workspace: workspace_id, + workspace: workspaceId, ids: [pageId], }); /* card.7 */ @@ -39,21 +39,21 @@ export const CurrentPageTitle = () => { ?.map(v => v.text) .join('') ?? 'Untitled' ); - }, [pageId, workspace_id]); + }, [pageId, workspaceId]); useEffect(() => { if (user) fetchPageTitle(); }, [fetchPageTitle, user]); useEffect(() => { - if (!user || !workspace_id || !pageId || pageTitle === undefined) + if (!user || !workspaceId || !pageId || pageTitle === undefined) return () => {}; let unobserve: () => void; const auto_update_title = async () => { // console.log(';; title registration auto update'); unobserve = await services.api.editorBlock.observe( - { workspace: workspace_id, id: pageId }, + { workspace: workspaceId, id: pageId }, businessBlock => { // console.log(';; auto_update_title', businessBlock); fetchPageTitle(); @@ -65,7 +65,7 @@ export const CurrentPageTitle = () => { return () => { // unobserve?.(); }; - }, [fetchPageTitle, pageId, pageTitle, user, workspace_id]); + }, [fetchPageTitle, pageId, pageTitle, user, workspaceId]); useEffect(() => { document.title = pageTitle || ''; diff --git a/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts b/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts index 510b4e1bfb..245f83a56f 100644 --- a/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts +++ b/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts @@ -9,7 +9,7 @@ import { useParams } from 'react-router-dom'; import type { CommentInfo } from './type'; export const useComments = () => { - const { workspace_id: workspaceId, page_id: pageId } = useParams(); + const { workspaceId, page_id: pageId } = useParams(); const [comments, setComments] = useState([]); const [observeIds, setObserveIds] = useState([]); @@ -71,7 +71,7 @@ export const useComments = () => { }; export const useActiveComment = () => { - const { workspace_id: workspaceId, page_id: pageId } = useParams(); + const { workspaceId, page_id: pageId } = useParams(); const { currentEditors } = useCurrentEditors(); const editor = useMemo(() => { return currentEditors[pageId] as Virgo; diff --git a/libs/components/layout/src/settings-sidebar/Settings/util/use-workspace-page.ts b/libs/components/layout/src/settings-sidebar/Settings/util/use-workspace-page.ts index b9048e3ff4..48f07fc2c4 100644 --- a/libs/components/layout/src/settings-sidebar/Settings/util/use-workspace-page.ts +++ b/libs/components/layout/src/settings-sidebar/Settings/util/use-workspace-page.ts @@ -7,7 +7,7 @@ interface UseWorkspaceAndPageIdReturn { export const useWorkspaceAndPageId = (): UseWorkspaceAndPageIdReturn => { const params = useParams(); - const workspaceId = params['workspace_id']; + const workspaceId = params['workspaceId']; const pageId = params['*'].split('/')[0]; return { workspaceId, diff --git a/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx b/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx index 8ed5db75e8..dce5e1d035 100755 --- a/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx +++ b/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx @@ -57,7 +57,7 @@ export const TreeItem = forwardRef( }, ref ) => { - const { workspace_id, page_id } = useParams(); + const { workspaceId, page_id } = useParams(); const BooleanPageTreeItemMoreActions = useFlag( 'BooleanPageTreeItemMoreActions', true @@ -89,12 +89,12 @@ export const TreeItem = forwardRef( )} - + {value} {BooleanPageTreeItemMoreActions && ( diff --git a/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts b/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts index b088242ee2..77ba1bdda8 100755 --- a/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts +++ b/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts @@ -19,7 +19,7 @@ import { const page_tree_atom = atom([]); export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { - const { workspace_id, page_id } = useParams(); + const { workspaceId, page_id } = useParams(); const navigate = useNavigate(); const [items] = useAtom(page_tree_atom); const [activeId, setActiveId] = useState(undefined); @@ -56,11 +56,11 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { const savePageTreeData = useCallback( async (treeData?: TreeItem[]) => { await services.api.pageTree.setPageTree( - workspace_id, + workspaceId, treeData || [] ); }, - [workspace_id] + [workspaceId] ); const resetState = useCallback(() => { @@ -129,14 +129,14 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { const handleRemove = useCallback( async (id: string) => { await savePageTreeData(removeItem(items, id)); - await services.api.userConfig.removePage(workspace_id, id); + await services.api.userConfig.removePage(workspaceId, id); //remove page from jwst - await services.api.pageTree.removePage(workspace_id, id); + await services.api.pageTree.removePage(workspaceId, id); if (id === page_id) { - navigate(`/${workspace_id}`); + navigate(`/${workspaceId}`); } }, - [items, savePageTreeData, workspace_id] + [items, savePageTreeData, workspaceId] ); const handleAddPage = useCallback( @@ -177,14 +177,14 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { export const useDndTreeAutoUpdate = () => { const [, set_items] = useAtom(page_tree_atom); - const { workspace_id, page_id } = useParams(); + const { workspaceId, page_id } = useParams(); const fetch_page_tree_data = useCallback(async () => { const pages = await services.api.pageTree.getPageTree( - workspace_id + workspaceId ); set_items(pages); - }, [set_items, workspace_id]); + }, [set_items, workspaceId]); useEffect(() => { fetch_page_tree_data(); @@ -195,7 +195,7 @@ export const useDndTreeAutoUpdate = () => { let unobserve: () => void; const auto_update_page_tree = async () => { unobserve = await services.api.pageTree.observe( - { workspace: workspace_id, page: page_id }, + { workspace: workspaceId, page: page_id }, () => { fetch_page_tree_data(); } @@ -206,5 +206,5 @@ export const useDndTreeAutoUpdate = () => { return () => { unobserve?.(); }; - }, [fetch_page_tree_data, page_id, workspace_id]); + }, [fetch_page_tree_data, page_id, workspaceId]); }; diff --git a/libs/datasource/db-service/src/services/editor-block/index.ts b/libs/datasource/db-service/src/services/editor-block/index.ts index d24efb9221..4d5fc25348 100644 --- a/libs/datasource/db-service/src/services/editor-block/index.ts +++ b/libs/datasource/db-service/src/services/editor-block/index.ts @@ -265,18 +265,18 @@ export class EditorBlock extends ServiceBaseClass { } } async copyPage( - workspace_id: string, + workspaceId: string, source_page_id: string, new_page_id: string ): Promise { - const db = await this.database.getDatabase(workspace_id); + const db = await this.database.getDatabase(workspaceId); const source_page = await this.getBlock( - workspace_id, + workspaceId, source_page_id as 'block' ); const new_page = await this.getBlock( - workspace_id, + workspaceId, new_page_id as 'block' ); if (!source_page) { diff --git a/libs/datasource/state/src/page.ts b/libs/datasource/state/src/page.ts index e1706e508e..0e6249d881 100644 --- a/libs/datasource/state/src/page.ts +++ b/libs/datasource/state/src/page.ts @@ -9,7 +9,7 @@ const _currentEditors = atom({} as EditorsMap); /** hook for using editors outside page */ export const useCurrentEditors = () => { - const { workspace_id: workspaceId, page_id: pageId } = useParams(); + const { workspaceId, page_id: pageId } = useParams(); const { pathname } = useLocation(); const [currentEditors, setCurrentEditors] = useAtom(_currentEditors); From 281c3f6c4483a3b148f67f75f1e4098adfaa556e Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 19:20:37 +0800 Subject: [PATCH 05/15] refactor(page): rename pageId --- .../src/pages/workspace/Edgeless.tsx | 6 ++-- .../pages/workspace/WorkspaceContainer.tsx | 4 +-- .../src/pages/workspace/docs/Page.tsx | 6 ++-- .../workspace/docs/collapsible-page-tree.tsx | 6 ++-- .../workspace/docs/components/toc/TOC.tsx | 10 +++--- .../src/blocks/ref-link/ref-link-view.tsx | 8 ++--- .../src/comment/use-add-comment.ts | 2 +- .../menu/double-link-menu/DoubleLinkMenu.tsx | 2 +- .../src/menu/link-menu/LinkMenu.tsx | 2 +- .../settings-sidebar/Comments/use-comments.ts | 4 +-- .../calendar-heatmap/utils.ts | 4 +-- .../page-tree/tree-item/TreeItem.tsx | 6 ++-- .../page-tree/use-page-tree.ts | 16 +++++----- .../src/services/editor-block/index.ts | 31 +++++++++---------- libs/datasource/jwt/src/yjs/index.ts | 6 ++-- libs/datasource/state/src/page.ts | 2 +- libs/utils/src/utils.ts | 4 +-- 17 files changed, 58 insertions(+), 61 deletions(-) diff --git a/apps/ligo-virgo/src/pages/workspace/Edgeless.tsx b/apps/ligo-virgo/src/pages/workspace/Edgeless.tsx index c84ceda481..9d0b6a3aa1 100644 --- a/apps/ligo-virgo/src/pages/workspace/Edgeless.tsx +++ b/apps/ligo-virgo/src/pages/workspace/Edgeless.tsx @@ -14,7 +14,7 @@ type EdgelessProps = { }; export const Edgeless = (props: EdgelessProps) => { - const { page_id } = useParams(); + const { pageId } = useParams(); const { user } = useUserAndSpaces(); useEffect(() => { @@ -31,7 +31,5 @@ export const Edgeless = (props: EdgelessProps) => { update_recent_pages(); }, [user, props.workspace]); - return ( - - ); + return ; }; diff --git a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx index b025267ce7..a681e98803 100644 --- a/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx +++ b/apps/ligo-virgo/src/pages/workspace/WorkspaceContainer.tsx @@ -15,11 +15,11 @@ export function WorkspaceContainer() { }> } /> } /> } /> } /> diff --git a/apps/ligo-virgo/src/pages/workspace/docs/Page.tsx b/apps/ligo-virgo/src/pages/workspace/docs/Page.tsx index ba1897cc4a..2a4c4f1aa5 100644 --- a/apps/ligo-virgo/src/pages/workspace/docs/Page.tsx +++ b/apps/ligo-virgo/src/pages/workspace/docs/Page.tsx @@ -34,7 +34,7 @@ export function Page(props: PageProps) { const [activeTab, setActiveTab] = useState( TabMap.get(TAB_TITLE.PAGES).value ); - const { page_id } = useParams(); + const { pageId } = useParams(); const { showSpaceSidebar, fixedDisplay, setSpaceSidebarVisible } = useShowSpaceSidebar(); const dailyNotesFlag = useFlag('BooleanDailyNotes', false); @@ -79,7 +79,7 @@ export function Page(props: PageProps) {
- {page_id ? : null} + {pageId ? : null}
@@ -91,7 +91,7 @@ export function Page(props: PageProps) { - + ); } diff --git a/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx b/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx index a429e999cf..13f81c10f5 100644 --- a/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx +++ b/apps/ligo-virgo/src/pages/workspace/docs/collapsible-page-tree.tsx @@ -38,7 +38,7 @@ export type CollapsiblePageTreeProps = { export function CollapsiblePageTree(props: CollapsiblePageTreeProps) { const { className, style, children, title, initialOpen = true } = props; const navigate = useNavigate(); - const { workspaceId, page_id } = useParams(); + const { workspaceId, pageId } = useParams(); const { handleAddPage } = usePageTree(); const { addPageToday } = useCalendarHeatmap(); @@ -46,7 +46,7 @@ export function CollapsiblePageTree(props: CollapsiblePageTreeProps) { const [open, setOpen] = useState(initialOpen); const create_page = useCallback(async () => { - if (page_id) { + if (pageId) { const newPage = await services.api.editorBlock.create({ workspace: workspaceId, type: 'page' as const, @@ -57,7 +57,7 @@ export function CollapsiblePageTree(props: CollapsiblePageTreeProps) { navigate(`/${workspaceId}/${newPage.id}`); } - }, [addPageToday, handleAddPage, navigate, page_id, workspaceId]); + }, [addPageToday, handleAddPage, navigate, pageId, workspaceId]); const [newPageBtnVisible, setNewPageBtnVisible] = useState(false); diff --git a/apps/ligo-virgo/src/pages/workspace/docs/components/toc/TOC.tsx b/apps/ligo-virgo/src/pages/workspace/docs/components/toc/TOC.tsx index 0a5c442590..f22bf43fea 100644 --- a/apps/ligo-virgo/src/pages/workspace/docs/components/toc/TOC.tsx +++ b/apps/ligo-virgo/src/pages/workspace/docs/components/toc/TOC.tsx @@ -116,7 +116,7 @@ const renderTOCContent = tocDataSource => { }; export const TOC = () => { - const { page_id } = useParams(); + const { pageId } = useParams(); const [tocDataSource, setTocDataSource] = useState([]); const [activeBlockId, setActiveBlockId] = useState(''); @@ -124,7 +124,7 @@ export const TOC = () => { const listenerMapRef = useRef(new Map()); const { currentEditors } = useCurrentEditors(); - const editor = currentEditors[page_id] as Virgo; + const editor = currentEditors[pageId] as Virgo; const updateTocDataSource = useCallback(async () => { if (!editor) { @@ -134,7 +134,7 @@ export const TOC = () => { const listenerMap = listenerMapRef.current; /* page listener: trigger update-notice when add new group */ - const pageAsyncBlock = (await editor.getBlockByIds([page_id]))?.[0]; + const pageAsyncBlock = (await editor.getBlockByIds([pageId]))?.[0]; if (!listenerMap.has(pageAsyncBlock.id)) { listenerMap.set( pageAsyncBlock.id, @@ -144,7 +144,7 @@ export const TOC = () => { /* block listener: trigger update-notice when change block content */ const { children = [] } = - (await editor.queryByPageId(page_id))?.[0] || {}; + (await editor.queryByPageId(pageId))?.[0] || {}; const asyncBlocks = (await editor.getBlockByIds(children)) || []; const { tocContents } = await getContentByAsyncBlocks( asyncBlocks, @@ -155,7 +155,7 @@ export const TOC = () => { /* toc: flat content */ const tocDataSource = getPageTOC(asyncBlocks, tocContents); setTocDataSource(tocDataSource); - }, [editor, page_id]); + }, [editor, pageId]); /* init toc and add page/block update-listener & unmount-listener */ useEffect(() => { diff --git a/libs/components/editor-blocks/src/blocks/ref-link/ref-link-view.tsx b/libs/components/editor-blocks/src/blocks/ref-link/ref-link-view.tsx index e75773b641..ac2b5eb2cb 100644 --- a/libs/components/editor-blocks/src/blocks/ref-link/ref-link-view.tsx +++ b/libs/components/editor-blocks/src/blocks/ref-link/ref-link-view.tsx @@ -6,16 +6,16 @@ import { CreateView } from '@toeverything/framework/virgo'; type RefLinkView = CreateView; export const RefLinkView = ({ block, editor }: RefLinkView) => { - const page_id = useMemo(() => block.getProperty('reference'), [block]); + const pageId = useMemo(() => block.getProperty('reference'), [block]); const [block_content, set_block] = useState>[number]>(); useEffect(() => { editor - .search({ tag: `id:${page_id}` }) + .search({ tag: `id:${pageId}` }) .then(block => set_block(block[0])); - }, [editor, page_id]); + }, [editor, pageId]); - return ; + return ; }; diff --git a/libs/components/editor-plugins/src/comment/use-add-comment.ts b/libs/components/editor-plugins/src/comment/use-add-comment.ts index c2bc4680ad..cda2976882 100644 --- a/libs/components/editor-plugins/src/comment/use-add-comment.ts +++ b/libs/components/editor-plugins/src/comment/use-add-comment.ts @@ -8,7 +8,7 @@ export const useAddComment = ({ selectionInfo, setShow, }: WithEditorSelectionType) => { - const { workspaceId, page_id: pageId } = useParams(); + const { workspaceId, pageId } = useParams(); const [currentComment, setCurrentComment] = useState(''); const createComment = useCallback(async (): Promise<{ diff --git a/libs/components/editor-plugins/src/menu/double-link-menu/DoubleLinkMenu.tsx b/libs/components/editor-plugins/src/menu/double-link-menu/DoubleLinkMenu.tsx index 90f5e10c43..d83a09eff6 100644 --- a/libs/components/editor-plugins/src/menu/double-link-menu/DoubleLinkMenu.tsx +++ b/libs/components/editor-plugins/src/menu/double-link-menu/DoubleLinkMenu.tsx @@ -44,7 +44,7 @@ export const DoubleLinkMenu = ({ hooks, style, }: DoubleLinkMenuProps) => { - const { page_id: curPageId } = useParams(); + const { pageId: curPageId } = useParams(); const [isOpen, setIsOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const dialogRef = useRef(); diff --git a/libs/components/editor-plugins/src/menu/link-menu/LinkMenu.tsx b/libs/components/editor-plugins/src/menu/link-menu/LinkMenu.tsx index ddd178e449..81856eba4f 100644 --- a/libs/components/editor-plugins/src/menu/link-menu/LinkMenu.tsx +++ b/libs/components/editor-plugins/src/menu/link-menu/LinkMenu.tsx @@ -42,7 +42,7 @@ const normalizeUrl = (url: string) => { }; export const LinkMenu = ({ editor, hooks }: LinkMenuProps) => { - const { page_id: curPageId } = useParams(); + const { pageId: curPageId } = useParams(); const [isOpen, setIsOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const dialogRef = useRef(); diff --git a/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts b/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts index 245f83a56f..b3b13069fa 100644 --- a/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts +++ b/libs/components/layout/src/settings-sidebar/Comments/use-comments.ts @@ -9,7 +9,7 @@ import { useParams } from 'react-router-dom'; import type { CommentInfo } from './type'; export const useComments = () => { - const { workspaceId, page_id: pageId } = useParams(); + const { workspaceId, pageId } = useParams(); const [comments, setComments] = useState([]); const [observeIds, setObserveIds] = useState([]); @@ -71,7 +71,7 @@ export const useComments = () => { }; export const useActiveComment = () => { - const { workspaceId, page_id: pageId } = useParams(); + const { workspaceId, pageId } = useParams(); const { currentEditors } = useCurrentEditors(); const editor = useMemo(() => { return currentEditors[pageId] as Virgo; diff --git a/libs/components/layout/src/workspace-sidebar/calendar-heatmap/utils.ts b/libs/components/layout/src/workspace-sidebar/calendar-heatmap/utils.ts index 6b440103f0..76b1733ee0 100644 --- a/libs/components/layout/src/workspace-sidebar/calendar-heatmap/utils.ts +++ b/libs/components/layout/src/workspace-sidebar/calendar-heatmap/utils.ts @@ -47,8 +47,8 @@ export async function fetchActivitiesHeatmap( // const pages = await db.getByType('page'); const pages_with_ids = (await Promise.all( flattenedItems.map(async (page_item: any) => { - const page_id = page_item.id; - return [page_id, await db.get(page_id as 'page')]; + const pageId = page_item.id; + return [pageId, await db.get(pageId as 'page')]; }) )) as [string, BlockImplInstance][]; const pages = new Map(pages_with_ids); diff --git a/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx b/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx index dce5e1d035..ff26cb1caa 100755 --- a/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx +++ b/libs/components/layout/src/workspace-sidebar/page-tree/tree-item/TreeItem.tsx @@ -57,7 +57,9 @@ export const TreeItem = forwardRef( }, ref ) => { - const { workspaceId, page_id } = useParams(); + const params = useParams(); + const workspaceId = params['workspaceId']; + const curPageId = params['pageId']; const BooleanPageTreeItemMoreActions = useFlag( 'BooleanPageTreeItemMoreActions', true @@ -71,7 +73,7 @@ export const TreeItem = forwardRef( disableSelection={disableSelection} disableInteraction={disableInteraction} spacing={`${indentationWidth * depth + 12}px`} - active={pageId === page_id} + active={pageId === curPageId} {...props} > {childCount !== 0 ? ( diff --git a/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts b/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts index 77ba1bdda8..43f84f527d 100755 --- a/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts +++ b/libs/components/layout/src/workspace-sidebar/page-tree/use-page-tree.ts @@ -19,7 +19,7 @@ import { const page_tree_atom = atom([]); export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { - const { workspaceId, page_id } = useParams(); + const { workspaceId, pageId } = useParams(); const navigate = useNavigate(); const [items] = useAtom(page_tree_atom); const [activeId, setActiveId] = useState(undefined); @@ -132,7 +132,7 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { await services.api.userConfig.removePage(workspaceId, id); //remove page from jwst await services.api.pageTree.removePage(workspaceId, id); - if (id === page_id) { + if (id === pageId) { navigate(`/${workspaceId}`); } }, @@ -140,8 +140,8 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { ); const handleAddPage = useCallback( - async (page_id?: string) => { - await savePageTreeData([{ id: page_id, children: [] }, ...items]); + async (pageId?: string) => { + await savePageTreeData([{ id: pageId, children: [] }, ...items]); }, [items, savePageTreeData] ); @@ -177,7 +177,7 @@ export const usePageTree = ({ indentationWidth = 16 }: DndTreeProps = {}) => { export const useDndTreeAutoUpdate = () => { const [, set_items] = useAtom(page_tree_atom); - const { workspaceId, page_id } = useParams(); + const { workspaceId, pageId } = useParams(); const fetch_page_tree_data = useCallback(async () => { const pages = await services.api.pageTree.getPageTree( @@ -191,11 +191,11 @@ export const useDndTreeAutoUpdate = () => { }, [fetch_page_tree_data]); useEffect(() => { - if (!page_id) return () => {}; + if (!pageId) return () => {}; let unobserve: () => void; const auto_update_page_tree = async () => { unobserve = await services.api.pageTree.observe( - { workspace: workspaceId, page: page_id }, + { workspace: workspaceId, page: pageId }, () => { fetch_page_tree_data(); } @@ -206,5 +206,5 @@ export const useDndTreeAutoUpdate = () => { return () => { unobserve?.(); }; - }, [fetch_page_tree_data, page_id, workspaceId]); + }, [fetch_page_tree_data, pageId, workspaceId]); }; diff --git a/libs/datasource/db-service/src/services/editor-block/index.ts b/libs/datasource/db-service/src/services/editor-block/index.ts index 4d5fc25348..30b75a902c 100644 --- a/libs/datasource/db-service/src/services/editor-block/index.ts +++ b/libs/datasource/db-service/src/services/editor-block/index.ts @@ -266,36 +266,33 @@ export class EditorBlock extends ServiceBaseClass { } async copyPage( workspaceId: string, - source_page_id: string, - new_page_id: string + sourcePageId: string, + newPageId: string ): Promise { const db = await this.database.getDatabase(workspaceId); - const source_page = await this.getBlock( + const sourcePage = await this.getBlock( workspaceId, - source_page_id as 'block' + sourcePageId as 'block' ); - const new_page = await this.getBlock( - workspaceId, - new_page_id as 'block' - ); - if (!source_page) { + const newPage = await this.getBlock(workspaceId, newPageId as 'block'); + if (!sourcePage) { return false; } - const source_page_children = source_page.children; - const decorations = source_page.getDecorations(); + const sourcePageChildren = sourcePage.children; + const decorations = sourcePage.getDecorations(); Object.entries(decorations).forEach(([key, value]) => { - new_page?.setDecoration(key, source_page.getDecoration(key)); + newPage?.setDecoration(key, sourcePage.getDecoration(key)); }); //@ts-ignore - this.decorate_page_title(new_page, 'copy from '); + this.decorate_page_title(newPage, 'copy from '); - for (let i = 0; i < source_page_children.length; i++) { - const source_page_child = await db.get( - source_page_children[i] as 'block' + for (let i = 0; i < sourcePageChildren.length; i++) { + const sourcePageChild = await db.get( + sourcePageChildren[i] as 'block' ); - new_page?.insertChildren(source_page_child); + newPage?.insertChildren(sourcePageChild); } return true; } diff --git a/libs/datasource/jwt/src/yjs/index.ts b/libs/datasource/jwt/src/yjs/index.ts index 76db288ad3..d430d29083 100644 --- a/libs/datasource/jwt/src/yjs/index.ts +++ b/libs/datasource/jwt/src/yjs/index.ts @@ -350,7 +350,7 @@ export class YjsAdapter implements AsyncDatabaseAdapter { const [file] = (await fromEvent(handles)) as File[]; const binary = await file?.arrayBuffer(); console.log(this._provider.providers); - let { indexeddb } = ( + const { indexeddb } = ( this._provider.providers as any[] ).find(p => p.indexeddb); await indexeddb?.idb?.clearData(); @@ -391,9 +391,9 @@ export class YjsAdapter implements AsyncDatabaseAdapter { }, parse: () => this._doc.toJSON(), // eslint-disable-next-line @typescript-eslint/naming-convention - parse_page: (page_id: string) => { + parse_page: (pageId: string) => { const blocks = this._blocks.toJSON(); - return resolve_block(blocks, page_id); + return resolve_block(blocks, pageId); }, // eslint-disable-next-line @typescript-eslint/naming-convention parse_pages: (resolve = false) => { diff --git a/libs/datasource/state/src/page.ts b/libs/datasource/state/src/page.ts index 0e6249d881..273eb33764 100644 --- a/libs/datasource/state/src/page.ts +++ b/libs/datasource/state/src/page.ts @@ -9,7 +9,7 @@ const _currentEditors = atom({} as EditorsMap); /** hook for using editors outside page */ export const useCurrentEditors = () => { - const { workspaceId, page_id: pageId } = useParams(); + const { workspaceId, pageId } = useParams(); const { pathname } = useLocation(); const [currentEditors, setCurrentEditors] = useAtom(_currentEditors); diff --git a/libs/utils/src/utils.ts b/libs/utils/src/utils.ts index 28adc6c4d8..1efdef259f 100644 --- a/libs/utils/src/utils.ts +++ b/libs/utils/src/utils.ts @@ -6,8 +6,8 @@ export function getUserDisplayName(user?: UserInfo) { } /** - * Get page_id from URL - * @returns page_id + * Get pageId from URL + * @returns pageId */ export function getPageId() { const path = window.location.pathname.match(/\/(\w+)\/(\w+)/); From fed2c8dd903d24ae301434c281f52bc37c5482bd Mon Sep 17 00:00:00 2001 From: tzhangchi Date: Thu, 8 Sep 2022 20:22:26 +0800 Subject: [PATCH 06/15] feat(edit): more robust editing experience --- libs/components/editor-blocks/src/blocks/text/TextView.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/components/editor-blocks/src/blocks/text/TextView.tsx b/libs/components/editor-blocks/src/blocks/text/TextView.tsx index baae481c91..094d05f755 100644 --- a/libs/components/editor-blocks/src/blocks/text/TextView.tsx +++ b/libs/components/editor-blocks/src/blocks/text/TextView.tsx @@ -90,7 +90,9 @@ export const TextView = ({ await block.removeChildren(); await block.after(nextBlock); - editor.selectionManager.activeNodeByNodeId(nextBlock.id); + setTimeout(() => { + editor.selectionManager.activeNodeByNodeId(nextBlock.id, 'start'); + }); return true; }; From 5985d53625d6936b2500ccdedabf47cbd44865b6 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:31:48 +0800 Subject: [PATCH 07/15] fix: request url --- libs/datasource/i18n/src/scripts/request.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/datasource/i18n/src/scripts/request.ts b/libs/datasource/i18n/src/scripts/request.ts index 64e18bd9bd..3368feb634 100644 --- a/libs/datasource/i18n/src/scripts/request.ts +++ b/libs/datasource/i18n/src/scripts/request.ts @@ -36,7 +36,7 @@ const withTolgee = ( } else { // URL or URLLike + ?RequestInit if (typeof argArray[0] === 'string') { - argArray[0] = TOLGEE_API_URL + argArray[0]; + argArray[0] = `${TOLGEE_API_URL}/v2/projects${argArray[0]}`; } if (!argArray[1]) { argArray[1] = {}; From 2faa87213d253c3e6660a29271a795a3c3389000 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:32:04 +0800 Subject: [PATCH 08/15] feat(i18n): add check mode --- libs/datasource/i18n/src/scripts/sync.ts | 51 +++++++++++++++++++----- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/libs/datasource/i18n/src/scripts/sync.ts b/libs/datasource/i18n/src/scripts/sync.ts index 5b264bf329..c19da6c4ae 100644 --- a/libs/datasource/i18n/src/scripts/sync.ts +++ b/libs/datasource/i18n/src/scripts/sync.ts @@ -78,6 +78,42 @@ const differenceObject = ( return { add, remove, modify }; }; +function warnDiff(diff: { add: string[]; remove: string[]; modify: string[] }) { + if (!diff.add.length) { + } else { + console.log('New keys found:', diff.add.join(', ')); + //See https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-a-notice-message + process.env['CI'] && + console.log( + `::notice file=${BASE_JSON_PATH},line=1,title=New keys::${diff.add.join( + ', ' + )}` + ); + } + if (diff.remove.length) { + console.warn('[WARN]', 'Unused keys found:', diff.remove.join(', ')); + process.env['CI'] && + console.warn( + `::notice file=${BASE_JSON_PATH},line=1,title=Unused keys::${diff.remove.join( + ', ' + )}` + ); + } + if (diff.modify.length) { + console.warn( + '[WARN]', + 'Inconsistent keys found:', + diff.modify.join(', ') + ); + process.env['CI'] && + console.warn( + `::warning file=${BASE_JSON_PATH},line=1,title=Inconsistent keys::${diff.modify.join( + ', ' + )}` + ); + } +} + const main = async () => { console.log('Loading local base translations...'); const baseLocalTranslations = JSON.parse( @@ -107,17 +143,14 @@ const main = async () => { ); console.log(''); // new line - diff.add.length && console.log('New keys found:', diff.add.join(', ')); - diff.remove.length && - console.warn('[WARN]', 'Unused keys found:', diff.remove.join(', ')); - diff.modify.length && - console.warn( - '[WARN]', - 'Inconsistent keys found:', - diff.modify.join(', ') - ); + warnDiff(diff); console.log(''); // new line + if (process.argv.slice(2).includes('--check')) { + // check mode + return; + } + diff.add.forEach(async key => { const val = flatLocalTranslations[key]; console.log(`Creating new key: ${key} -> ${val}`); From 54f1db6fdccb17de8d5a7823b8a01f134a7e7e04 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:33:35 +0800 Subject: [PATCH 09/15] feat(i18n): add sync workflows --- .github/workflows/languages-sync.yml | 56 ++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/languages-sync.yml diff --git a/.github/workflows/languages-sync.yml b/.github/workflows/languages-sync.yml new file mode 100644 index 0000000000..871307ebf4 --- /dev/null +++ b/.github/workflows/languages-sync.yml @@ -0,0 +1,56 @@ +name: Languages Sync + +on: + push: + branches: [ "develop", "master" ] + paths: + - 'libs/datasource/i18n/**' + - '.github/workflows/languages-sync.yml' + pull_request: + branches: [ "develop", "master" ] + paths: + - 'libs/datasource/i18n/**' + - '.github/workflows/languages-sync.yml' + +# Cancels all previous workflow runs for pull requests that have not completed. +# See https://docs.github.com/en/actions/using-jobs/using-concurrency +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +jobs: + main: + strategy: + matrix: + node-version: [18] + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Use pnpm + uses: pnpm/action-setup@v2 + with: + version: 7 + + - name: Use Node.js ${{ matrix.node-version }} + # https://github.com/actions/setup-node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: Install node modules + run: pnpm install + + - name: Check Language Key + if: github.ref != 'refs/heads/develop' && github.ref != 'refs/heads/master' + run: pnpm run --recursive sync-languages:check + + - name: Sync Languages + if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master' + run: pnpm run --recursive sync-languages From 1018149ca4f0382f077aaeb73fde3dd100ee9801 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:33:58 +0800 Subject: [PATCH 10/15] chore(i18n): update package --- libs/datasource/i18n/README.md | 8 +++++--- libs/datasource/i18n/package.json | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libs/datasource/i18n/README.md b/libs/datasource/i18n/README.md index ff902b333c..c454be380a 100644 --- a/libs/datasource/i18n/README.md +++ b/libs/datasource/i18n/README.md @@ -8,7 +8,7 @@ import { useTranslation } from '@toeverything/datasource/i18n'; // base.json // { // 'Text': 'some text', -// 'Switch to language': 'Switch to {language}', +// 'Switch to language': 'Switch to {{language}}', // <- you can interpolation by curly brackets // }; const App = () => { @@ -41,10 +41,12 @@ const App = () => { export TOLGEE_API_KEY=tgpak_XXXXXXX ``` -- Run the `sync` script from package script +- Run the `sync-languages:check` to check all languages +- Run the `sync-languages` script to add new keys to the tolgee platform ## References +- [AFFiNE | Tolgee](https://i18n.affine.pro/) +- [Tolgee Documentation](https://tolgee.io/docs/) - [i18next](https://www.i18next.com/) - [react-i18next](https://react.i18next.com/) -- [Tolgee](https://tolgee.io/docs/) diff --git a/libs/datasource/i18n/package.json b/libs/datasource/i18n/package.json index 8f6afe9b85..cabc0a36b6 100644 --- a/libs/datasource/i18n/package.json +++ b/libs/datasource/i18n/package.json @@ -2,7 +2,8 @@ "name": "@toeverything/datasource/i18n", "version": "0.0.1", "scripts": { - "sync": "NODE_OPTIONS=--experimental-fetch ts-node src/scripts/sync.ts" + "sync-languages": "NODE_OPTIONS=--experimental-fetch ts-node src/scripts/sync.ts", + "sync-languages:check": "pnpm run sync-languages --check" }, "dependencies": { "i18next": "^21.9.1", From cbe508664d83b9c0c8775706ceeebcd1c7725212 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:34:27 +0800 Subject: [PATCH 11/15] chore(i18n): sunset lint workflows --- .github/workflows/lint.yml | 62 -------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 8efce5cbd4..0000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Lint - -on: - push: - branches: [master] - # pull_request: - # branches: [master] - -# Cancels all previous workflow runs for pull requests that have not completed. -# See https://docs.github.com/en/actions/using-jobs/using-concurrency -concurrency: - # The concurrency group contains the workflow name and the branch name for - # pull requests or the commit hash for any other events. - group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} - cancel-in-progress: true - -jobs: - main: - strategy: - matrix: - node-version: [16] - os: [ubuntu-latest] - runs-on: ${{ matrix.os }} - # TODO Remove the next line after cleaning all errors - continue-on-error: true - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Use pnpm - uses: pnpm/action-setup@v2 - with: - version: 7 - - - name: Use Node.js ${{ matrix.node-version }} - # https://github.com/actions/setup-node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: 'pnpm' - - - name: Install node modules - run: pnpm install - - - name: Lint - if: always() - run: pnpm run lint:with-cache - - # - name: Check - # if: always() - # run: pnpm run check - - # - name: Format Check - # if: always() - # run: pnpm run format:ci - - # - name: Build - # run: pnpm run build - - # - name: Test - # run: pnpm run test From a26ff35a7b35dfbdaea75f719d17d50bfd7029e5 Mon Sep 17 00:00:00 2001 From: alt0 Date: Fri, 9 Sep 2022 15:00:24 +0800 Subject: [PATCH 12/15] fix: landing page style & duplicate contact us --- apps/venus/src/app/IndexPage/Alternatives.tsx | 8 ++--- apps/venus/src/app/IndexPage/IndexPage.tsx | 8 ++--- apps/venus/src/app/common/Header.tsx | 29 +------------------ 3 files changed, 9 insertions(+), 36 deletions(-) diff --git a/apps/venus/src/app/IndexPage/Alternatives.tsx b/apps/venus/src/app/IndexPage/Alternatives.tsx index 17403e01c9..4c7645a9d8 100644 --- a/apps/venus/src/app/IndexPage/Alternatives.tsx +++ b/apps/venus/src/app/IndexPage/Alternatives.tsx @@ -7,7 +7,7 @@ import { useMediaQuery } from '@mui/material'; const Alternatives = styled(Box)<{ width: string }>(({ width }) => ({ position: 'relative', - width: '20em', + width: '24em', height: '128px', transform: 'translateY(-8px)', overflowY: 'hidden', @@ -21,7 +21,7 @@ const Alternatives = styled(Box)<{ width: string }>(({ width }) => ({ height: 'inherit', position: 'absolute', left: '0', - top: '0', + top: '-23px', paddingTop: '22px', lineHeight: '96px', '@media (max-width: 1024px)': { @@ -105,7 +105,7 @@ export const AlternativesProduct = () => { )} > { }} > - + { window.open(href); }} /> - { - window.open(href); - }} - />