mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-23 20:18:42 +08:00
feat: the UI of importing Html/Markdown/Notion (#2533)
Co-authored-by: Himself65 <himself65@outlook.com>
This commit is contained in:
co-authored by
Himself65
parent
fd41659c4b
commit
2a95ddd63c
@@ -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',
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user