Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(tree): tree 组件修改为 composition api #837

Merged
merged 54 commits into from
Nov 25, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
a36e8ac
fix(tree): 解决 tree 组件指定 keys 属性后,next 版本可能导致 dom 无限刷新的问题
TabSpace May 5, 2022
f29481f
Merge remote-tracking branch 'upstream/develop' into develop
TabSpace Aug 17, 2022
0ecd815
fix(tree): 解决 tree 组件指定 keys 属性后,next 版本可能导致 dom 无限刷新的问题
TabSpace May 5, 2022
a1db603
Merge branch 'develop' of github.com:TabSpace/tdesign-vue into develop
TabSpace Sep 11, 2022
bf57645
test(tree): 迁移 keys 校验脚本到组件目录内部
TabSpace Sep 11, 2022
bf7a612
docs(tree): 完善调试文档
TabSpace Sep 11, 2022
664c67b
test(tree): tree组件属性变更示例,用随机时间戳作为属性变更例子
TabSpace Sep 12, 2022
8b505cf
test(tree): tree 组件单元测试文件命名规范化
TabSpace Sep 12, 2022
fa94bc9
test(tree): 改进测试代码传参方式,完善代码注释
TabSpace Sep 12, 2022
e385990
test(tree): 完善组件单元测试,提供对公共 api 的单元测试代码
TabSpace Sep 12, 2022
af5f497
test(tree): tree 组件,完善节点插入方法的单元测试
TabSpace Sep 13, 2022
e83e057
refactor(tree): 提取 store, cache 相关方法到 composition api
TabSpace Sep 19, 2022
43b33d4
refactor(tree): tree 组件 composition api 重构,添加原先的公共方法
TabSpace Sep 19, 2022
0a8e9eb
refactor(tree): tree 组件重新实现空数据与类名的生成
TabSpace Oct 8, 2022
e681870
refactor(tree): tree组件提取节点创建方法到 composition api
TabSpace Oct 8, 2022
41d7464
refactor(tree): tree 组件 composition api 实现节点呈现
TabSpace Oct 8, 2022
7f03e64
refactor(tree): tree 组件,迁移主要节点操作逻辑到 composition api
TabSpace Oct 12, 2022
18a5213
refactor(tree): tree 组件,完善监听逻辑的重构
TabSpace Oct 12, 2022
d9e2f47
refactor(tree): tree 组件,移除调试用的注释代码
TabSpace Oct 12, 2022
d9faa8c
refactor(tree): tree 组件,完成基本 composition api 重构,细节还有待调试
TabSpace Oct 13, 2022
18931dd
refactor(tree): tree 组件重构解决操作区域未渲染的问题
TabSpace Oct 13, 2022
5ec4934
refactor(tree): td-tree 组件 composition api 重构通过单元测试
TabSpace Oct 14, 2022
96bf4e0
refactor(tree): tree-item 组件重构为 composition api , 实现基础渲染逻辑抽离
TabSpace Oct 17, 2022
2679734
refactor(tree): tree-item 组件初步实现列表形式渲染的 composition api 重构
TabSpace Oct 18, 2022
939f1dd
chore(tree): treeItem 组件完成 composition api 基本重构
TabSpace Nov 2, 2022
95f161c
refactor(tree): 移除嵌套布局代码
TabSpace Nov 2, 2022
250f1f3
refactor(tree): 解决单元测试时代码类型报错的问题
TabSpace Nov 2, 2022
44f8486
refactor(tree): tree 组件动画样式完善
TabSpace Nov 3, 2022
feac031
refactor(tree): 更新依赖的 common 组件
TabSpace Nov 3, 2022
3ff4e77
refactor(tree): tree 组件更新 common 依赖
TabSpace Nov 3, 2022
27e614f
chore(tree): tree 组件修改,合并 upstream
TabSpace Nov 3, 2022
2052992
test(tree): tree 组件适配 vitest
TabSpace Nov 3, 2022
871e324
test(tree): tree 组件单测改进,移除 done 方法,替换为 promise api
TabSpace Nov 3, 2022
303b639
chore(tree): merge upsteam
TabSpace Nov 16, 2022
bfff126
refactor(tree): 初步合并拖动功能
TabSpace Nov 16, 2022
8bd6f92
refactor(tree): td-tree 合并 draggable 事件功能
TabSpace Nov 16, 2022
c536036
refactor(tree): 实现节点普通事件的抽离封装
TabSpace Nov 16, 2022
c1a3151
refactor(tree): 封装事件派发方法
TabSpace Nov 16, 2022
7c31401
refactor(tree): tree 组件,进一步拆分逻辑到多个文件,onDrag mixin 变更为 composition api 代码
TabSpace Nov 17, 2022
530b01c
refactor(tree): tree item 组件进一步抽离子组件
TabSpace Nov 17, 2022
62d6975
refactor(tree): 实现拖动能力的 composition api 基本重构,有待调试
TabSpace Nov 17, 2022
651c536
refactor(tree): 实现取得节点 dom
TabSpace Nov 17, 2022
98907eb
refactor(tree): 更新 _common 依赖
TabSpace Nov 21, 2022
200fb88
refactor(tree): 实现对接拖动排序逻辑
TabSpace Nov 23, 2022
6dcb193
refactor(tree): 完善拖动,修复动画与图标偏移
TabSpace Nov 23, 2022
b3d1d0b
refactor(tree): 改进上层属性传递方式
TabSpace Nov 23, 2022
89b0a3a
refactor(tree): tree 组件重构,解决过滤结果为空时空列表状态未呈现的问题
TabSpace Nov 23, 2022
f0c65d3
Merge remote-tracking branch 'upstream/develop' into develop
TabSpace Nov 23, 2022
dc14a35
refactor(tree): 更新 src/_common
TabSpace Nov 23, 2022
85e9f91
fix(tree): 解决依赖缺失的问题
TabSpace Nov 23, 2022
96a05ed
chore(tree): 更新 src/_common
TabSpace Nov 25, 2022
36f170a
Merge remote-tracking branch 'upstream/develop' into develop
TabSpace Nov 25, 2022
6d0f0e1
chore(tree): 更新 src/_common
TabSpace Nov 25, 2022
8c8e991
chore(tree): 更新 src/_common
TabSpace Nov 25, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor(tree): tree组件提取节点创建方法到 composition api
  • Loading branch information
TabSpace committed Oct 8, 2022
commit e68187076d7c56e65f8a03136144bcdc5b91f054
21 changes: 2 additions & 19 deletions src/tree/hooks/useCache.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,8 @@
import pick from 'lodash/pick';
import { TdTreeProps } from '../type';

export interface TypeTreeScope {
checkProps?: TdTreeProps['checkProps'];
disableCheck?: TdTreeProps['disableCheck'];
empty?: TdTreeProps['empty'];
icon?: TdTreeProps['icon'];
label?: TdTreeProps['label'];
line?: TdTreeProps['line'];
operations?: TdTreeProps['operations'];
}

export interface TypeTreeCache {
nodesMap: Map<string, any>;
mouseEvent?: Event;
scope: TypeTreeScope;
scopedSlots: any;
}
import { TypeTreeProps, TypeTreeCache } from '../interface';

// 提供缓存对象
export default function useCache(props: TdTreeProps) {
export default function useCache(props: TypeTreeProps) {
const cache: TypeTreeCache = {
// 缓存渲染节点
nodesMap: new Map(),
Expand Down
30 changes: 30 additions & 0 deletions src/tree/hooks/useTreeNodes.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { TypeTreeProps, TypeTreeState } from '../interface';
import TreeItem from '../tree-item';
import TreeNode from '../../_common/js/tree/tree-node';

export default function useTreeNodes(props: TypeTreeProps, state: TypeTreeState) {
// 创建单个 tree 节点
const renderItem = (node: TreeNode) => {
const { nested, cache } = state;
const { expandOnClickNode } = props;
const { scope, scopedSlots } = cache;

const treeItem = (
<TreeItem
key={node.value}
node={node}
nested={nested}
treeScope={scope}
proxyScope={scopedSlots}
// onClick={this.handleClick}
// onChange={this.handleChange}
expandOnClickNode={expandOnClickNode}
/>
);
return treeItem;
};

return {
renderItem,
};
}
10 changes: 2 additions & 8 deletions src/tree/hooks/useTreeStore.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import pick from 'lodash/pick';
import TreeStore from '../../_common/js/tree/tree-store';
import { TdTreeProps } from '../type';
import { TypeValueMode, TypeEventState, TypeTreeNodeModel } from '../interface';
import { TypeTreeProps, TypeValueMode, TypeTreeNodeModel } from '../interface';

export interface TypeUseStoreOptions {
onLoad?: (info: TypeEventState) => void;
onUpdate?: () => void;
}

export default function useTreeStore(props: TdTreeProps) {
export default function useTreeStore(props: TypeTreeProps) {
const {
actived, value, valueMode, filter, keys,
} = props;
Expand Down
61 changes: 44 additions & 17 deletions src/tree/interface.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,42 @@
import TreeNode from '../_common/js/tree/tree-node';

import { VNode } from 'vue';
import { ComputedRef } from '@vue/composition-api';
import { TNode, TreeOptionData } from '../common';

import TreeStore from '../_common/js/tree/tree-store';
import TreeNode from '../_common/js/tree/tree-node';
import { TypeTreeEventState } from '../_common/js/tree/types';
import {
TdTreeProps,
TreeNodeModel,
TreeInstanceFunctions,
TreeNodeValue as TdTreeNodeValue,
TreeNodeState as TdTreeNodeState,
TdTreeProps, TreeNodeModel, TreeInstanceFunctions, TreeNodeValue, TreeNodeState,
} from './type';

import {
TypeTreeEventState,
} from '../_common/js/tree/types';
// 在这个文件做统一的类型梳理
// 所有类型,接口,都用 Type 作为名称前缀

export type TreeProps = TdTreeProps;
export * from './type';

export type TypeTdTreeProps = TdTreeProps;
export type TypeVNode = VNode;

export type TypeTreeProps = TdTreeProps;

export type TypeTNodeState = TreeNodeValue;

export type TreeNodeState = TdTreeNodeState;
export type TypeTNodeValue = TreeNodeState;

export type TreeNodeValue = TdTreeNodeValue;
export type TypeTreeNode = TreeNode;

export type TypeTreeStore = TreeStore;

export type TypeValueMode = TdTreeProps['valueMode'];

export type TypeTNodeProp = string | TNode<TypeTreeNodeModel>;

export type TypeTreeNodeModel = TreeNodeModel<TreeOptionData>;

export type TypeTargetNode = TdTreeNodeValue | TreeNode | TypeTreeNodeModel;
export type TypeTargetNode = TreeNodeValue | TypeTreeNode | TypeTreeNodeModel;

export interface TypeEventState extends TypeTreeEventState {
mouseEvent?: MouseEvent;
event?: Event;
path?: TreeNode[];
path?: TypeTreeNode[];
}

export interface TypeMark {
Expand All @@ -56,3 +58,28 @@ export interface TypeGetTNodeOption {
node?: TreeNode;
createElement?: Vue.CreateElement;
}

export interface TypeTreeScope {
checkProps?: TdTreeProps['checkProps'];
disableCheck?: TdTreeProps['disableCheck'];
empty?: TdTreeProps['empty'];
icon?: TdTreeProps['icon'];
label?: TdTreeProps['label'];
line?: TdTreeProps['line'];
operations?: TdTreeProps['operations'];
}

export interface TypeTreeCache {
nodesMap: Map<string, any>;
mouseEvent?: Event;
scope: TypeTreeScope;
scopedSlots: any;
}

export interface TypeTreeState {
store: TypeTreeStore;
cache: TypeTreeCache;
itemMaxHeight: ComputedRef<number>;
vScrollEnable: ComputedRef<boolean>;
nested: ComputedRef<boolean>;
}
Loading