feat: add kanban card editable border
This commit is contained in:
@@ -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 />
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
Reference in New Issue
Block a user