feat: the UI of importing Html/Markdown/Notion (#2533)

Co-authored-by: Himself65 <himself65@outlook.com>
This commit is contained in:
xiaodong zuo
2023-05-26 15:54:46 +08:00
committed by himself65
co-authored by Himself65
parent fd41659c4b
commit 2a95ddd63c
8 changed files with 37 additions and 2 deletions
@@ -70,7 +70,7 @@ export const BlockSuitePageList: React.FC<BlockSuitePageListProps> = ({
permanentlyDeletePage, permanentlyDeletePage,
cancelPublicPage, cancelPublicPage,
} = useBlockSuiteMetaHelper(blockSuiteWorkspace); } = useBlockSuiteMetaHelper(blockSuiteWorkspace);
const { createPage, createEdgeless, isPreferredEdgeless } = const { createPage, createEdgeless, importFile, isPreferredEdgeless } =
usePageHelper(blockSuiteWorkspace); usePageHelper(blockSuiteWorkspace);
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
const list = useMemo( const list = useMemo(
@@ -155,6 +155,7 @@ export const BlockSuitePageList: React.FC<BlockSuitePageListProps> = ({
<PageList <PageList
onCreateNewPage={createPage} onCreateNewPage={createPage}
onCreateNewEdgeless={createEdgeless} onCreateNewEdgeless={createEdgeless}
onImportFile={importFile}
isPublicWorkspace={isPublic} isPublicWorkspace={isPublic}
list={pageList} list={pageList}
/> />
@@ -23,9 +23,14 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
setPreferredMode(page.id, 'edgeless'); setPreferredMode(page.id, 'edgeless');
openPage(blockSuiteWorkspace.id, page.id); openPage(blockSuiteWorkspace.id, page.id);
}; };
const importFileAndOpen = async () => {
const { showImportModal } = await import('@blocksuite/blocks');
showImportModal({ workspace: blockSuiteWorkspace });
};
return { return {
createPage: createPageAndOpen, createPage: createPageAndOpen,
createEdgeless: createEdgelessAndOpen, createEdgeless: createEdgelessAndOpen,
importFile: importFileAndOpen,
isPreferredEdgeless: isPreferredEdgeless, isPreferredEdgeless: isPreferredEdgeless,
}; };
}; };
@@ -26,11 +26,13 @@ const AllPagesHead = ({
sorter, sorter,
createNewPage, createNewPage,
createNewEdgeless, createNewEdgeless,
importFile,
}: { }: {
isPublicWorkspace: boolean; isPublicWorkspace: boolean;
sorter: ReturnType<typeof useSorter<ListData>>; sorter: ReturnType<typeof useSorter<ListData>>;
createNewPage: () => void; createNewPage: () => void;
createNewEdgeless: () => void; createNewEdgeless: () => void;
importFile: () => void;
}) => { }) => {
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
const titleList = [ const titleList = [
@@ -56,6 +58,7 @@ const AllPagesHead = ({
<NewPageButton <NewPageButton
createNewPage={createNewPage} createNewPage={createNewPage}
createNewEdgeless={createNewEdgeless} createNewEdgeless={createNewEdgeless}
importFile={importFile}
/> />
), ),
showWhen: () => !isPublicWorkspace, showWhen: () => !isPublicWorkspace,
@@ -109,6 +112,7 @@ export const PageList = ({
list, list,
onCreateNewPage, onCreateNewPage,
onCreateNewEdgeless, onCreateNewEdgeless,
onImportFile,
}: PageListProps) => { }: PageListProps) => {
const sorter = useSorter<ListData>({ const sorter = useSorter<ListData>({
data: list, data: list,
@@ -124,6 +128,7 @@ export const PageList = ({
isPublicWorkspace={isPublicWorkspace} isPublicWorkspace={isPublicWorkspace}
createNewPage={onCreateNewPage} createNewPage={onCreateNewPage}
createNewEdgeless={onCreateNewEdgeless} createNewEdgeless={onCreateNewEdgeless}
importFile={onImportFile}
list={sorter.data} list={sorter.data}
/> />
); );
@@ -145,6 +150,7 @@ export const PageList = ({
sorter={sorter} sorter={sorter}
createNewPage={onCreateNewPage} createNewPage={onCreateNewPage}
createNewEdgeless={onCreateNewEdgeless} createNewEdgeless={onCreateNewEdgeless}
importFile={onImportFile}
/> />
<AllPagesBody <AllPagesBody
isPublicWorkspace={isPublicWorkspace} isPublicWorkspace={isPublicWorkspace}
@@ -1,5 +1,5 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; import { EdgelessIcon, ImportIcon, PageIcon } from '@blocksuite/icons';
import { useState } from 'react'; import { useState } from 'react';
import { DropdownButton } from '../../../ui/button/dropdown'; import { DropdownButton } from '../../../ui/button/dropdown';
@@ -9,11 +9,13 @@ import { BlockCard } from '../../card/block-card';
type NewPageButtonProps = { type NewPageButtonProps = {
createNewPage: () => void; createNewPage: () => void;
createNewEdgeless: () => void; createNewEdgeless: () => void;
importFile: () => void;
}; };
export const CreateNewPagePopup = ({ export const CreateNewPagePopup = ({
createNewPage, createNewPage,
createNewEdgeless, createNewEdgeless,
importFile,
}: NewPageButtonProps) => { }: NewPageButtonProps) => {
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
return ( return (
@@ -37,6 +39,12 @@ export const CreateNewPagePopup = ({
right={<EdgelessIcon width={20} height={20} />} right={<EdgelessIcon width={20} height={20} />}
onClick={createNewEdgeless} onClick={createNewEdgeless}
/> />
<BlockCard
title={t['com.affine.new_import']()}
desc={t['com.affine.import_file']()}
right={<ImportIcon width={20} height={20} />}
onClick={importFile}
/>
{/* TODO Import */} {/* TODO Import */}
</div> </div>
); );
@@ -45,6 +53,7 @@ export const CreateNewPagePopup = ({
export const NewPageButton = ({ export const NewPageButton = ({
createNewPage, createNewPage,
createNewEdgeless, createNewEdgeless,
importFile,
}: NewPageButtonProps) => { }: NewPageButtonProps) => {
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
@@ -68,6 +77,10 @@ export const NewPageButton = ({
createNewEdgeless(); createNewEdgeless();
setOpen(false); setOpen(false);
}} }}
importFile={() => {
importFile();
setOpen(false);
}}
/> />
} }
> >
@@ -21,10 +21,12 @@ const MobileHead = ({
isPublicWorkspace, isPublicWorkspace,
createNewPage, createNewPage,
createNewEdgeless, createNewEdgeless,
importFile,
}: { }: {
isPublicWorkspace: boolean; isPublicWorkspace: boolean;
createNewPage: () => void; createNewPage: () => void;
createNewEdgeless: () => void; createNewEdgeless: () => void;
importFile: () => void;
}) => { }) => {
const t = useAFFiNEI18N(); const t = useAFFiNEI18N();
return ( return (
@@ -43,6 +45,7 @@ const MobileHead = ({
<NewPageButton <NewPageButton
createNewPage={createNewPage} createNewPage={createNewPage}
createNewEdgeless={createNewEdgeless} createNewEdgeless={createNewEdgeless}
importFile={importFile}
/> />
</div> </div>
</TableCell> </TableCell>
@@ -57,11 +60,13 @@ export const AllPageListMobileView = ({
isPublicWorkspace, isPublicWorkspace,
createNewPage, createNewPage,
createNewEdgeless, createNewEdgeless,
importFile,
}: { }: {
isPublicWorkspace: boolean; isPublicWorkspace: boolean;
list: ListData[]; list: ListData[];
createNewPage: () => void; createNewPage: () => void;
createNewEdgeless: () => void; createNewEdgeless: () => void;
importFile: () => void;
}) => { }) => {
return ( return (
<StyledTableContainer> <StyledTableContainer>
@@ -70,6 +75,7 @@ export const AllPageListMobileView = ({
isPublicWorkspace={isPublicWorkspace} isPublicWorkspace={isPublicWorkspace}
createNewPage={createNewPage} createNewPage={createNewPage}
createNewEdgeless={createNewEdgeless} createNewEdgeless={createNewEdgeless}
importFile={importFile}
/> />
<AllPagesBody <AllPagesBody
isPublicWorkspace={isPublicWorkspace} isPublicWorkspace={isPublicWorkspace}
@@ -41,4 +41,5 @@ export type PageListProps = {
list: ListData[]; list: ListData[];
onCreateNewPage: () => void; onCreateNewPage: () => void;
onCreateNewEdgeless: () => void; onCreateNewEdgeless: () => void;
onImportFile: () => void;
}; };
@@ -63,6 +63,7 @@ AffineAllPageList.args = {
isPublicWorkspace: false, isPublicWorkspace: false,
onCreateNewPage: () => toast('Create new page'), onCreateNewPage: () => toast('Create new page'),
onCreateNewEdgeless: () => toast('Create new edgeless'), onCreateNewEdgeless: () => toast('Create new edgeless'),
onImportFile: () => toast('Import file'),
list: [ list: [
{ {
pageId: '1', pageId: '1',
+2
View File
@@ -23,6 +23,8 @@
"com.affine.write_with_a_blank_page": "Write with a blank page", "com.affine.write_with_a_blank_page": "Write with a blank page",
"com.affine.new_edgeless": "New Edgeless", "com.affine.new_edgeless": "New Edgeless",
"com.affine.draw_with_a_blank_whiteboard": "Draw with a blank whiteboard", "com.affine.draw_with_a_blank_whiteboard": "Draw with a blank whiteboard",
"com.affine.new_import": "Import",
"com.affine.import_file": "Support Markdown/Notion",
"New Keyword Page": "New '{{query}}' page", "New Keyword Page": "New '{{query}}' page",
"Find 0 result": "Find 0 result", "Find 0 result": "Find 0 result",
"Find results": "Find {{number}} results", "Find results": "Find {{number}} results",