feat: add kanban card editable border

This commit is contained in:
lawvs
2022-08-24 18:56:19 +08:00
parent aa62599d13
commit 876a875576
4 changed files with 22 additions and 34 deletions

View File

@@ -1,6 +1,6 @@
import { import {
KanbanBlockRender,
KanbanCard, KanbanCard,
useBlockRender,
useEditor, useEditor,
useKanban, useKanban,
} from '@toeverything/components/editor-core'; } from '@toeverything/components/editor-core';
@@ -14,9 +14,9 @@ import { useFlag } from '@toeverything/datasource/feature-flags';
import { useState, type MouseEvent } from 'react'; import { useState, type MouseEvent } from 'react';
import { useRefPage } from './RefPage'; import { useRefPage } from './RefPage';
const CardContent = styled('div')({ const CardContent = styled('div')(({ theme }) => ({
margin: '20px', margin: '20px',
}); }));
const CardActions = styled('div')({ const CardActions = styled('div')({
cursor: 'pointer', cursor: 'pointer',
@@ -82,42 +82,38 @@ const Overlay = styled('div')({
}, },
}); });
export const CardItem = ({ export const CardItem = ({ block }: { block: KanbanCard['block'] }) => {
id,
block,
}: {
id: KanbanCard['id'];
block: KanbanCard['block'];
}) => {
const { addSubItem } = useKanban(); const { addSubItem } = useKanban();
const { openSubPage } = useRefPage(); const { openSubPage } = useRefPage();
const [editable, setEditable] = useState(false); const [editableBlock, setEditableBlock] = useState<string | null>(null);
const showKanbanRefPageFlag = useFlag('ShowKanbanRefPage', false); const showKanbanRefPageFlag = useFlag('ShowKanbanRefPage', false);
const { editor } = useEditor(); const { editor } = useEditor();
const { BlockRender } = useBlockRender();
const onAddItem = async () => { const onAddItem = async () => {
setEditable(true); const newItem = await addSubItem(block);
await addSubItem(block); setEditableBlock(newItem.id);
}; };
const onClickCard = async () => { const onClickCard = async () => {
openSubPage(id); openSubPage(block.id);
}; };
const onClickPen = (e: MouseEvent<Element>) => { const onClickPen = (e: MouseEvent<Element>) => {
e.stopPropagation(); e.stopPropagation();
setEditable(true); setEditableBlock(block.id);
editor.selectionManager.activeNodeByNodeId(block.id); editor.selectionManager.activeNodeByNodeId(block.id);
}; };
return ( return (
<MuiClickAwayListener onClickAway={() => setEditable(false)}> <MuiClickAwayListener onClickAway={() => setEditableBlock(null)}>
<CardContainer> <CardContainer>
<CardContent> <CardContent>
<BlockRender blockId={id} /> <KanbanBlockRender
blockId={block.id}
activeBlock={editableBlock}
/>
</CardContent> </CardContent>
{showKanbanRefPageFlag && !editable && ( {showKanbanRefPageFlag && !editableBlock && (
<Overlay onClick={onClickCard}> <Overlay onClick={onClickCard}>
<IconButton backgroundColor="#fff" onClick={onClickPen}> <IconButton backgroundColor="#fff" onClick={onClickPen}>
<PenIcon /> <PenIcon />

View File

@@ -6,11 +6,6 @@ export * from './kanban';
export * from './kanban/types'; export * from './kanban/types';
export * from './recast-block'; export * from './recast-block';
export * from './recast-block/types'; export * from './recast-block/types';
export { export * from './render-block';
BlockRenderProvider,
RenderBlockChildren,
useBlockRender,
withTreeViewChildren,
} from './render-block';
export { MIN_PAGE_WIDTH, RenderRoot } from './RenderRoot'; export { MIN_PAGE_WIDTH, RenderRoot } from './RenderRoot';
export * from './utils'; export * from './utils';

View File

@@ -10,8 +10,6 @@ import {
RecastMetaProperty, RecastMetaProperty,
RecastPropertyId, RecastPropertyId,
} from '../recast-block/types'; } from '../recast-block/types';
import { BlockRenderProvider } from '../render-block';
import { KanbanBlockRender } from '../render-block/RenderKanbanBlock';
import { useInitKanbanEffect, useRecastKanban } from './kanban'; import { useInitKanbanEffect, useRecastKanban } from './kanban';
import { KanbanGroup } from './types'; import { KanbanGroup } from './types';
@@ -56,11 +54,9 @@ export const KanbanProvider = ({
}; };
return ( return (
<BlockRenderProvider blockRender={KanbanBlockRender}>
<KanbanContext.Provider value={value}> <KanbanContext.Provider value={value}>
{children} {children}
</KanbanContext.Provider> </KanbanContext.Provider>
</BlockRenderProvider>
); );
}; };

View File

@@ -1,4 +1,5 @@
export { BlockRenderProvider, useBlockRender } from './Context'; export { BlockRenderProvider, useBlockRender } from './Context';
export * from './RenderBlock'; export { NullBlockRender, RenderBlock } from './RenderBlock';
export * from './RenderBlockChildren'; export { RenderBlockChildren } from './RenderBlockChildren';
export { KanbanBlockRender } from './RenderKanbanBlock';
export { withTreeViewChildren } from './WithTreeViewChildren'; export { withTreeViewChildren } from './WithTreeViewChildren';