Skip to content

Commit

Permalink
feat: outline-plugin-pane support overflow-x scroll & delete node (#2376
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kyoonart authored and JackLian committed Aug 18, 2023
1 parent 8a86554 commit e22e8be
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 16 deletions.
4 changes: 3 additions & 1 deletion packages/plugin-outline-pane/src/controllers/tree-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ export default class TreeNode {
this.node.lock(flag);
this.event.emit(EVENT_NAMES.lockedChanged, flag);
}

deleteNode(node: IPublicModelNode) {
node && node.remove();
}
onFilterResultChanged(fn: () => void): IPublicTypeDisposable {
this.event.on(EVENT_NAMES.filterResultChanged, fn);
return () => {
Expand Down
11 changes: 11 additions & 0 deletions packages/plugin-outline-pane/src/icons/delete.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { SVGIcon, IconProps } from '@alilc/lowcode-utils';

export function IconDelete(props: IconProps) {
return (
<SVGIcon viewBox="0 0 1024 1024" {...props}>
<path d="M224 256v639.84A64 64 0 0 0 287.84 960h448.32A64 64 0 0 0 800 895.84V256h64a32 32 0 1 0 0-64H160a32 32 0 1 0 0 64h64zM384 96c0-17.664 14.496-32 31.904-32h192.192C625.696 64 640 78.208 640 96c0 17.664-14.496 32-31.904 32H415.904A31.872 31.872 0 0 1 384 96z m-96 191.744C288 270.208 302.4 256 320.224 256h383.552C721.6 256 736 270.56 736 287.744v576.512C736 881.792 721.6 896 703.776 896H320.224A32.224 32.224 0 0 1 288 864.256V287.744zM352 352c0-17.696 14.208-32.032 32-32.032 17.664 0 32 14.24 32 32v448c0 17.664-14.208 32-32 32-17.664 0-32-14.24-32-32V352z m128 0c0-17.696 14.208-32.032 32-32.032 17.664 0 32 14.24 32 32v448c0 17.664-14.208 32-32 32-17.664 0-32-14.24-32-32V352z m128 0c0-17.696 14.208-32.032 32-32.032 17.664 0 32 14.24 32 32v448c0 17.664-14.208 32-32 32-17.664 0-32-14.24-32-32V352z" />
</SVGIcon>
);
}

IconDelete.displayName = 'IconDelete';
1 change: 1 addition & 0 deletions packages/plugin-outline-pane/src/icons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ export * from './loop';
export * from './radio-active';
export * from './radio';
export * from './setting';
export * from './delete';
3 changes: 2 additions & 1 deletion packages/plugin-outline-pane/src/locale/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@
"Locked": "Locked",
"Hidden": "Hidden",
"Modal View": "Modal View",
"Rename": "Rename"
"Rename": "Rename",
"Delete": "Delete"
}
3 changes: 2 additions & 1 deletion packages/plugin-outline-pane/src/locale/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@
"Locked": "已锁定",
"Hidden": "已隐藏",
"Modal View": "模态视图层",
"Rename": "重命名"
"Rename": "重命名",
"Delete": "删除"
}
32 changes: 23 additions & 9 deletions packages/plugin-outline-pane/src/views/style.less
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
overflow: hidden;
margin-bottom: @treeNodeHeight;
user-select: none;
overflow-x: scroll;

.tree-node-modal {
margin: 5px;
Expand Down Expand Up @@ -80,7 +81,8 @@
}
}

.tree-node-modal-radio, .tree-node-modal-radio-active {
.tree-node-modal-radio,
.tree-node-modal-radio-active {
margin-right: 4px;
opacity: 0.8;
position: absolute;
Expand Down Expand Up @@ -139,7 +141,7 @@
content: ' ';
z-index: 2;
}
>.condition-group-title {
> .condition-group-title {
text-align: center;
background-color: #7b605b;
height: 14px;
Expand Down Expand Up @@ -167,7 +169,7 @@
content: ' ';
z-index: 2;
}
>.tree-node-slots-title {
> .tree-node-slots-title {
text-align: center;
background-color: rgb(144, 94, 190);
height: 14px;
Expand All @@ -183,7 +185,7 @@
&.insertion-at-slots {
padding-bottom: @treeNodeHeight;
border-bottom-color: rgb(182, 55, 55);
>.tree-node-slots-title {
> .tree-node-slots-title {
background-color: rgb(182, 55, 55);
}
&::before {
Expand Down Expand Up @@ -279,7 +281,10 @@
}
}

.tree-node-hide-btn, .tree-node-lock-btn, .tree-node-rename-btn {
.tree-node-hide-btn,
.tree-node-lock-btn,
.tree-node-rename-btn,
.tree-node-delete-btn {
opacity: 0;
color: var(--color-text);
line-height: 0;
Expand All @@ -293,18 +298,26 @@
}
}
&:hover {
.tree-node-hide-btn, .tree-node-lock-btn, .tree-node-rename-btn {
.tree-node-hide-btn,
.tree-node-lock-btn,
.tree-node-rename-btn,
.tree-node-delete-btn {
opacity: 0.5;
}
}
html.lc-cursor-dragging & {
// FIXME: only hide hover shows
.tree-node-hide-btn, .tree-node-lock-btn, .tree-node-rename-btn {
.tree-node-hide-btn,
.tree-node-lock-btn,
.tree-node-rename-btn {
display: none;
}
}
&.editing {
& > .tree-node-hide-btn, & >.tree-node-lock-btn, & >.tree-node-rename-btn {
& > .tree-node-hide-btn,
& > .tree-node-lock-btn,
& > .tree-node-rename-btn,
& > .tree-node-delete-btn {
display: none;
}
}
Expand Down Expand Up @@ -381,7 +394,8 @@
opacity: 0.8;
}
.tree-node-branches {
.tree-node-lock-btn, .tree-node-hide-btn {
.tree-node-lock-btn,
.tree-node-hide-btn {
opacity: 0;
}
}
Expand Down
32 changes: 28 additions & 4 deletions packages/plugin-outline-pane/src/views/tree-title.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import classNames from 'classnames';
import { createIcon } from '@alilc/lowcode-utils';
import { IPublicApiEvent } from '@alilc/lowcode-types';
import TreeNode from '../controllers/tree-node';
import { IconLock, IconUnlock, IconArrowRight, IconEyeClose, IconEye, IconCond, IconLoop, IconRadioActive, IconRadio, IconSetting } from '../icons';
import { IconLock, IconUnlock, IconArrowRight, IconEyeClose, IconEye, IconCond, IconLoop, IconRadioActive, IconRadio, IconSetting, IconDelete } from '../icons';

function emitOutlineEvent(event: IPublicApiEvent, type: string, treeNode: TreeNode, rest?: Record<string, unknown>) {
const node = treeNode?.node;
Expand Down Expand Up @@ -100,7 +100,11 @@ export default class TreeTitle extends PureComponent<{
});
});
}

deleteClick = () => {
const { treeNode } = this.props;
const { node } = treeNode;
treeNode.deleteNode(node);
};
render() {
const { treeNode, isModal } = this.props;
const { pluginContext } = treeNode;
Expand Down Expand Up @@ -131,6 +135,7 @@ export default class TreeTitle extends PureComponent<{
const shouldShowHideBtn = isCNode && isNodeParent && !isModal && couldHide;
const shouldShowLockBtn = config.get('enableCanvasLock', false) && isContainer && isCNode && isNodeParent && ((couldLock && !node.isLocked) || (couldUnlock && node.isLocked));
const shouldEditBtn = isCNode && isNodeParent;
const shouldDeleteBtn = isCNode && isNodeParent && node?.canPerformAction('remove');
return (
<div
className={classNames('tree-node-title', { editing })}
Expand Down Expand Up @@ -214,8 +219,28 @@ export default class TreeTitle extends PureComponent<{
</div>
{shouldShowHideBtn && <HideBtn hidden={this.props.hidden} treeNode={treeNode} />}
{shouldShowLockBtn && <LockBtn locked={this.props.locked} treeNode={treeNode} />}
{shouldEditBtn && <RenameBtn treeNode={treeNode} onClick={this.enableEdit} /> }
{shouldEditBtn && <RenameBtn treeNode={treeNode} onClick={this.enableEdit} />}
{shouldDeleteBtn && <DeleteBtn treeNode={treeNode} onClick={this.deleteClick} />}
</div>
);
}
}

class DeleteBtn extends PureComponent<{
treeNode: TreeNode;
onClick: () => void;
}> {
render() {
const { intl, common } = this.props.treeNode.pluginContext;
const { Tip } = common.editorCabin;
return (
<div
className="tree-node-delete-btn"
onClick={this.props.onClick}
>
<IconDelete />
{/* @ts-ignore */}
<Tip>{intl('Delete')}</Tip>
</div>
);
}
Expand Down Expand Up @@ -297,7 +322,6 @@ class ExpandBtn extends PureComponent<{
expanded: boolean;
expandable: boolean;
}> {

render() {
const { treeNode, expanded, expandable } = this.props;
if (!expandable) {
Expand Down

0 comments on commit e22e8be

Please sign in to comment.