|
@@ -0,0 +1,99 @@
|
|
|
|
+import * as React from "react";
|
|
|
|
+import {
|
|
|
|
+ FlatTree,
|
|
|
|
+ TreeItem,
|
|
|
|
+ // flattenTree_unstable,
|
|
|
|
+ // TreeItemProps,
|
|
|
|
+ TreeItemPersonaLayout,
|
|
|
|
+ TreeItemLayout,
|
|
|
|
+ useHeadlessFlatTree_unstable,
|
|
|
|
+ HeadlessFlatTreeItemProps,
|
|
|
|
+} from "@fluentui/react-components";
|
|
|
|
+import {
|
|
|
|
+ Button,
|
|
|
|
+ Menu,
|
|
|
|
+ MenuItem,
|
|
|
|
+ MenuList,
|
|
|
|
+ MenuPopover,
|
|
|
|
+ MenuTrigger,
|
|
|
|
+ useRestoreFocusTarget,
|
|
|
|
+} from "@fluentui/react-components";
|
|
|
|
+import { Edit20Regular, MoreHorizontal20Regular, CardUiFilled } from "@fluentui/react-icons";
|
|
|
|
+
|
|
|
|
+type FlatItem = HeadlessFlatTreeItemProps & { content: string };
|
|
|
|
+
|
|
|
|
+const flatTreeItems: FlatItem[] = [
|
|
|
|
+ { value: "1", content: "中联新技术工作室" },
|
|
|
|
+ { value: "1-1", parentValue: "1", content: "陈丹" },
|
|
|
|
+ { value: "1-2", parentValue: "1", content: "蔡青松" },
|
|
|
|
+ { value: "1-3", parentValue: "1", content: "唐渝林" },
|
|
|
|
+ { value: "1-4", parentValue: "1", content: "吴瑞强" },
|
|
|
|
+ { value: "1-5", parentValue: "1", content: "王华川" },
|
|
|
|
+ { value: "1-6", parentValue: "1", content: "涂建华" },
|
|
|
|
+ { value: "1-7", parentValue: "1", content: "杨东明" },
|
|
|
|
+ { value: "2", content: "中联敏捷" },
|
|
|
|
+ { value: "2-1", parentValue: "2", content: "范俊" },
|
|
|
|
+ { value: "2-2", parentValue: "2", content: "杨斌" },
|
|
|
|
+ { value: "2-2", parentValue: "2", content: "陈亮" },
|
|
|
|
+];
|
|
|
|
+
|
|
|
|
+const ActionsExample = () => (
|
|
|
|
+ <>
|
|
|
|
+ <Button aria-label="Edit" appearance="subtle" icon={<Edit20Regular />} />
|
|
|
|
+ <Menu>
|
|
|
|
+ <MenuTrigger disableButtonEnhancement>
|
|
|
|
+ <Button
|
|
|
|
+ aria-label="More options"
|
|
|
|
+ appearance="subtle"
|
|
|
|
+ icon={<MoreHorizontal20Regular />}
|
|
|
|
+ />
|
|
|
|
+ </MenuTrigger>
|
|
|
|
+
|
|
|
|
+ <MenuPopover>
|
|
|
|
+ <MenuList>
|
|
|
|
+ <MenuItem>新增</MenuItem>
|
|
|
|
+ <MenuItem>修改</MenuItem>
|
|
|
|
+ <MenuItem>删除</MenuItem>
|
|
|
|
+ </MenuList>
|
|
|
|
+ </MenuPopover>
|
|
|
|
+ </Menu>
|
|
|
|
+ </>
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+const UseHeadlessFlatTree = () => {
|
|
|
|
+ const flatTree = useHeadlessFlatTree_unstable(flatTreeItems);
|
|
|
|
+ const focusTargetAttribute = useRestoreFocusTarget();
|
|
|
|
+
|
|
|
|
+ return (
|
|
|
|
+ <FlatTree {...flatTree.getTreeProps()} aria-label="Flat Tree">
|
|
|
|
+ {Array.from(flatTree.items(), (flatTreeItem) => {
|
|
|
|
+ const { content, ...treeItemProps } = flatTreeItem.getTreeItemProps();
|
|
|
|
+ return (
|
|
|
|
+ <Menu key={flatTreeItem.value} positioning="below-end" openOnContext>
|
|
|
|
+ <MenuTrigger disableButtonEnhancement>
|
|
|
|
+ <TreeItem
|
|
|
|
+ aria-description="has actions"
|
|
|
|
+ {...focusTargetAttribute}
|
|
|
|
+ {...treeItemProps}
|
|
|
|
+ >
|
|
|
|
+ <TreeItemPersonaLayout
|
|
|
|
+ actions={<ActionsExample />}>
|
|
|
|
+ {content}
|
|
|
|
+ </TreeItemPersonaLayout>
|
|
|
|
+ </TreeItem>
|
|
|
|
+ </MenuTrigger>
|
|
|
|
+ <MenuPopover>
|
|
|
|
+ <MenuList>
|
|
|
|
+ <MenuItem>新增</MenuItem>
|
|
|
|
+ <MenuItem>修改</MenuItem>
|
|
|
|
+ <MenuItem>删除</MenuItem>
|
|
|
|
+ </MenuList>
|
|
|
|
+ </MenuPopover>
|
|
|
|
+ </Menu>
|
|
|
|
+ );
|
|
|
|
+ })}
|
|
|
|
+ </FlatTree>
|
|
|
|
+ );
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+export default UseHeadlessFlatTree
|