-
Notifications
You must be signed in to change notification settings - Fork 120
/
folderTree.tsx
105 lines (94 loc) · 2.73 KB
/
folderTree.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import React from 'react';
import 'reflect-metadata';
import type { ITreeNodeItemProps } from 'mo/components/tree';
import type { IMenuItemProps } from 'mo/components/menu';
import type { UniqueId } from 'mo/common/types';
export enum FileTypes {
File = 'File',
Folder = 'Folder',
RootFolder = 'RootFolder',
}
export type FileType = keyof typeof FileTypes;
export enum FolderTreeEvent {
onSelectFile = 'folderTree.onSelectFile',
onDelete = 'folderTree.onDelete',
onRename = 'folderTree.onRename',
onUpdateFileName = 'folderTree.onUpdateFileName',
onRightClick = 'folderTree.onRightClick',
onContextMenuClick = 'folderTree.onContextMenuClick',
onCreate = 'folderTree.onCreate',
onLoadData = 'folderTree.onLoadData',
onDrop = 'folderTree.onDrop',
}
export interface IFolderInputEvent {
onFocus: () => void;
setValue: (value: string) => void;
}
export interface IFolderTreeSubItem {
data?: IFolderTreeNodeProps[];
contextMenu?: IMenuItemProps[];
folderPanelContextMenu?: IMenuItemProps[];
current?: IFolderTreeNodeProps | null;
}
export interface IFolderTree {
folderTree?: IFolderTreeSubItem;
entry?: React.ReactNode;
}
export interface IFolderTreeNodeProps extends ITreeNodeItemProps<any> {
location?: string;
content?: string;
fileType?: FileType;
children?: IFolderTreeNodeProps[];
}
export class TreeNodeModel implements IFolderTreeNodeProps {
id: UniqueId;
name?: string;
location?: string;
isLeaf?: boolean;
fileType: FileType = FileTypes.File;
children?: IFolderTreeNodeProps[];
icon?: string | JSX.Element;
isEditable?: boolean;
content?: string;
data?: any;
constructor(props: IFolderTreeNodeProps) {
const {
id,
name = '',
location = '',
fileType = FileTypes.File,
children = [],
icon = '',
isEditable = false,
content = '',
isLeaf = true,
data,
} = props;
this.fileType = fileType;
this.isEditable = isEditable;
this.name = name;
this.id = id;
this.location = location;
this.children = children;
this.icon = icon;
this.content = content;
this.data = data;
this.isLeaf = isLeaf;
}
}
export class IFolderTreeModel implements IFolderTree {
public folderTree: IFolderTreeSubItem;
public entry: React.ReactNode;
constructor(
folderTree: IFolderTreeSubItem = {
contextMenu: [],
current: null,
folderPanelContextMenu: [],
data: [],
},
entry?: React.ReactNode
) {
this.folderTree = folderTree;
this.entry = entry;
}
}