@fluentui/react-tree 9.0.0-beta.1 → 9.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.swcrc +30 -0
- package/CHANGELOG.json +448 -1
- package/CHANGELOG.md +135 -2
- package/dist/index.d.ts +139 -25
- package/lib/Tree.js.map +1 -1
- package/lib/TreeItem.js.map +1 -1
- package/lib/TreeItemLayout.js.map +1 -1
- package/lib/TreeItemPersonaLayout.js.map +1 -1
- package/lib/components/Tree/Tree.js.map +1 -1
- package/lib/components/Tree/Tree.types.js +1 -1
- package/lib/components/Tree/Tree.types.js.map +1 -1
- package/lib/components/Tree/index.js.map +1 -1
- package/lib/components/Tree/renderTree.js +5 -7
- package/lib/components/Tree/renderTree.js.map +1 -1
- package/lib/components/Tree/useTree.js +5 -4
- package/lib/components/Tree/useTree.js.map +1 -1
- package/lib/components/Tree/useTreeContextValues.js +3 -3
- package/lib/components/Tree/useTreeContextValues.js.map +1 -1
- package/lib/components/Tree/useTreeStyles.js.map +1 -1
- package/lib/components/TreeItem/TreeItem.js +10 -1
- package/lib/components/TreeItem/TreeItem.js.map +1 -1
- package/lib/components/TreeItem/TreeItem.types.js +1 -1
- package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
- package/lib/components/TreeItem/index.js.map +1 -1
- package/lib/components/TreeItem/renderTreeItem.js +6 -16
- package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib/components/TreeItem/useTreeItemStyles.js.map +1 -1
- package/lib/components/TreeItemLayout/TreeItemLayout.js +3 -1
- package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
- package/lib/components/TreeItemLayout/index.js.map +1 -1
- package/lib/components/TreeItemLayout/renderTreeItemLayout.js +4 -12
- package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayout.js +1 -0
- package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +3 -1
- package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +5 -17
- package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +1 -0
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +1 -1
- package/lib/contexts/index.js.map +1 -1
- package/lib/contexts/treeContext.js +1 -2
- package/lib/contexts/treeContext.js.map +1 -1
- package/lib/contexts/treeItemContext.js +2 -4
- package/lib/contexts/treeItemContext.js.map +1 -1
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useFlatTree.js +77 -0
- package/lib/hooks/useFlatTree.js.map +1 -0
- package/lib/hooks/useFlatTreeNavigation.js +10 -10
- package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib/hooks/useHTMLElementWalker.js +5 -5
- package/lib/hooks/useHTMLElementWalker.js.map +1 -1
- package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
- package/lib/hooks/useOpenItemsState.js.map +1 -1
- package/lib/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/ImmutableSet.js.map +1 -1
- package/lib/utils/assert.js +1 -0
- package/lib/utils/assert.js.map +1 -1
- package/lib/utils/createFlatTreeItems.js +109 -0
- package/lib/utils/createFlatTreeItems.js.map +1 -0
- package/lib/utils/flattenTree.js +75 -16
- package/lib/utils/flattenTree.js.map +1 -1
- package/lib/utils/nextTypeAheadElement.js +2 -2
- package/lib/utils/nextTypeAheadElement.js.map +1 -1
- package/lib/utils/normalizeOpenItems.js.map +1 -1
- package/lib/utils/tokens.js.map +1 -1
- package/lib/utils/treeItemFilter.js.map +1 -1
- package/lib-commonjs/Tree.js +5 -4
- package/lib-commonjs/Tree.js.map +1 -1
- package/lib-commonjs/TreeItem.js +5 -4
- package/lib-commonjs/TreeItem.js.map +1 -1
- package/lib-commonjs/TreeItemLayout.js +5 -4
- package/lib-commonjs/TreeItemLayout.js.map +1 -1
- package/lib-commonjs/TreeItemPersonaLayout.js +5 -4
- package/lib-commonjs/TreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/Tree/Tree.js +18 -22
- package/lib-commonjs/components/Tree/Tree.js.map +1 -1
- package/lib-commonjs/components/Tree/Tree.types.js +5 -2
- package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
- package/lib-commonjs/components/Tree/index.js +10 -9
- package/lib-commonjs/components/Tree/index.js.map +1 -1
- package/lib-commonjs/components/Tree/renderTree.js +16 -19
- package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useTree.js +88 -101
- package/lib-commonjs/components/Tree/useTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useTreeContextValues.js +22 -28
- package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
- package/lib-commonjs/components/Tree/useTreeStyles.js +31 -20
- package/lib-commonjs/components/Tree/useTreeStyles.js.map +1 -1
- package/lib-commonjs/components/TreeItem/TreeItem.js +18 -17
- package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/TreeItem.types.js +5 -3
- package/lib-commonjs/components/TreeItem/TreeItem.types.js.map +1 -1
- package/lib-commonjs/components/TreeItem/index.js +9 -8
- package/lib-commonjs/components/TreeItem/index.js.map +1 -1
- package/lib-commonjs/components/TreeItem/renderTreeItem.js +19 -33
- package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItem.js +229 -249
- package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +24 -20
- package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +353 -188
- package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +16 -15
- package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js +3 -2
- package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/index.js +9 -8
- package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +14 -28
- package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +42 -52
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +126 -88
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +18 -17
- package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js +3 -2
- package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/index.js +9 -8
- package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +17 -35
- package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +46 -61
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js +18 -15
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutContextValues.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js +165 -101
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +1 -1
- package/lib-commonjs/contexts/index.js +6 -5
- package/lib-commonjs/contexts/index.js.map +1 -1
- package/lib-commonjs/contexts/treeContext.js +25 -17
- package/lib-commonjs/contexts/treeContext.js.map +1 -1
- package/lib-commonjs/contexts/treeItemContext.js +20 -12
- package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
- package/lib-commonjs/hooks/index.js +7 -6
- package/lib-commonjs/hooks/index.js.map +1 -1
- package/lib-commonjs/hooks/useFlatTree.js +86 -0
- package/lib-commonjs/hooks/useFlatTree.js.map +1 -0
- package/lib-commonjs/hooks/useFlatTreeNavigation.js +73 -72
- package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib-commonjs/hooks/useHTMLElementWalker.js +94 -83
- package/lib-commonjs/hooks/useHTMLElementWalker.js.map +1 -1
- package/lib-commonjs/hooks/useNestedTreeNavigation.js +61 -58
- package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
- package/lib-commonjs/hooks/useOpenItemsState.js +32 -22
- package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
- package/lib-commonjs/hooks/useRovingTabIndexes.js +56 -53
- package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib-commonjs/index.js +48 -180
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utils/ImmutableSet.js +39 -38
- package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
- package/lib-commonjs/utils/assert.js +13 -9
- package/lib-commonjs/utils/assert.js.map +1 -1
- package/lib-commonjs/utils/createFlatTreeItems.js +126 -0
- package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -0
- package/lib-commonjs/utils/flattenTree.js +55 -32
- package/lib-commonjs/utils/flattenTree.js.map +1 -1
- package/lib-commonjs/utils/nextTypeAheadElement.js +18 -16
- package/lib-commonjs/utils/nextTypeAheadElement.js.map +1 -1
- package/lib-commonjs/utils/normalizeOpenItems.js +13 -9
- package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
- package/lib-commonjs/utils/tokens.js +30 -20
- package/lib-commonjs/utils/tokens.js.map +1 -1
- package/lib-commonjs/utils/treeItemFilter.js +9 -7
- package/lib-commonjs/utils/treeItemFilter.js.map +1 -1
- package/package.json +20 -15
- package/lib/hooks/useFlatTreeItems.js +0 -134
- package/lib/hooks/useFlatTreeItems.js.map +0 -1
- package/lib-commonjs/hooks/useFlatTreeItems.js +0 -141
- package/lib-commonjs/hooks/useFlatTreeItems.js.map +0 -1
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { useEventCallback } from '@fluentui/react-utilities';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { useFlatTreeNavigation } from './useFlatTreeNavigation';
|
|
4
|
-
import { useOpenItemsState } from './useOpenItemsState';
|
|
5
|
-
export function useFlatTreeItems_unstable(items, options) {
|
|
6
|
-
const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);
|
|
7
|
-
const [openItems, updateOpenItems] = useOpenItemsState(options !== null && options !== void 0 ? options : {});
|
|
8
|
-
const [navigate, treeRef] = useFlatTreeNavigation(references);
|
|
9
|
-
const handleOpenChange = useEventCallback((event, data) => {
|
|
10
|
-
event.preventDefault();
|
|
11
|
-
updateOpenItems(data);
|
|
12
|
-
});
|
|
13
|
-
const handleNavigation = useEventCallback((event, data) => {
|
|
14
|
-
event.preventDefault();
|
|
15
|
-
navigate(data);
|
|
16
|
-
});
|
|
17
|
-
const lazyFlatTreeItems = React.useMemo(() => createLazyFlatTreeItems(references, {
|
|
18
|
-
filter: item => isTreeItemVisible(item, {
|
|
19
|
-
openItems,
|
|
20
|
-
references
|
|
21
|
-
})
|
|
22
|
-
}), [references, openItems]);
|
|
23
|
-
return [{
|
|
24
|
-
ref: treeRef,
|
|
25
|
-
openItems,
|
|
26
|
-
onOpenChange: handleOpenChange,
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
28
|
-
onNavigation_unstable: handleNavigation
|
|
29
|
-
}, lazyFlatTreeItems];
|
|
30
|
-
}
|
|
31
|
-
function isTreeItemVisible(itemRef, {
|
|
32
|
-
openItems,
|
|
33
|
-
references
|
|
34
|
-
}) {
|
|
35
|
-
if (itemRef.props['aria-level'] === 1) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
while (itemRef.parentId !== undefined) {
|
|
39
|
-
if (!openItems.has(itemRef.parentId)) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
const parent = references.getParent(itemRef);
|
|
43
|
-
if (!parent) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
itemRef = parent;
|
|
47
|
-
}
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
function createTreeItemPropsRefs(flatTreeItemProps) {
|
|
51
|
-
var _a, _b;
|
|
52
|
-
const root = {
|
|
53
|
-
props: {
|
|
54
|
-
id: 'root',
|
|
55
|
-
leaf: false,
|
|
56
|
-
'aria-level': 0,
|
|
57
|
-
'aria-posinset': 0
|
|
58
|
-
},
|
|
59
|
-
childrenSize: 0,
|
|
60
|
-
index: -1
|
|
61
|
-
};
|
|
62
|
-
const treeItemPropsRefsPerId = new Map();
|
|
63
|
-
const refs = [];
|
|
64
|
-
for (let index = 0; index < flatTreeItemProps.length; index++) {
|
|
65
|
-
const {
|
|
66
|
-
parentId,
|
|
67
|
-
...treeItemProps
|
|
68
|
-
} = flatTreeItemProps[index];
|
|
69
|
-
const nextPartialItem = flatTreeItemProps[index + 1];
|
|
70
|
-
const currentParentRef = parentId ? (_a = treeItemPropsRefsPerId.get(parentId)) !== null && _a !== void 0 ? _a : root : root;
|
|
71
|
-
const isLeaf = (nextPartialItem === null || nextPartialItem === void 0 ? void 0 : nextPartialItem.parentId) !== treeItemProps.id;
|
|
72
|
-
const currentLevel = ((_b = currentParentRef.props['aria-level']) !== null && _b !== void 0 ? _b : 0) + 1;
|
|
73
|
-
currentParentRef.childrenSize++;
|
|
74
|
-
const treeItemPropsRef = {
|
|
75
|
-
props: {
|
|
76
|
-
...treeItemProps,
|
|
77
|
-
'aria-level': currentLevel,
|
|
78
|
-
'aria-posinset': currentParentRef.childrenSize,
|
|
79
|
-
leaf: isLeaf
|
|
80
|
-
},
|
|
81
|
-
parentId,
|
|
82
|
-
childrenSize: 0,
|
|
83
|
-
index: -1
|
|
84
|
-
};
|
|
85
|
-
treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);
|
|
86
|
-
refs.push(treeItemPropsRef);
|
|
87
|
-
}
|
|
88
|
-
function getParent(itemRef) {
|
|
89
|
-
const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;
|
|
90
|
-
return parentRef !== null && parentRef !== void 0 ? parentRef : null;
|
|
91
|
-
}
|
|
92
|
-
function get(id) {
|
|
93
|
-
var _a;
|
|
94
|
-
return (_a = treeItemPropsRefsPerId.get(id)) !== null && _a !== void 0 ? _a : null;
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
refs,
|
|
98
|
-
getParent,
|
|
99
|
-
get
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function createLazyFlatTreeItems(treeItemPropsRefs, {
|
|
103
|
-
filter = () => true
|
|
104
|
-
}) {
|
|
105
|
-
const flatTreeItems = {
|
|
106
|
-
get: treeItemPropsRefs.get,
|
|
107
|
-
toArray: () => flatTreeItems.map(identity),
|
|
108
|
-
map: fn => {
|
|
109
|
-
const items = [];
|
|
110
|
-
for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {
|
|
111
|
-
const currentItemRef = treeItemPropsRefs.refs[index];
|
|
112
|
-
const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);
|
|
113
|
-
if (!currentParentRef) {
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
if (filter(currentItemRef)) {
|
|
117
|
-
currentItemRef.index = index;
|
|
118
|
-
items.push(fn({
|
|
119
|
-
...currentItemRef.props,
|
|
120
|
-
'aria-setsize': currentParentRef.childrenSize
|
|
121
|
-
}));
|
|
122
|
-
} else {
|
|
123
|
-
index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return items;
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
return flatTreeItems;
|
|
130
|
-
}
|
|
131
|
-
function identity(item) {
|
|
132
|
-
return item;
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=useFlatTreeItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useEventCallback","React","useFlatTreeNavigation","useOpenItemsState","useFlatTreeItems_unstable","items","options","references","useMemo","createTreeItemPropsRefs","openItems","updateOpenItems","navigate","treeRef","handleOpenChange","event","data","preventDefault","handleNavigation","lazyFlatTreeItems","createLazyFlatTreeItems","filter","item","isTreeItemVisible","ref","onOpenChange","onNavigation_unstable","itemRef","props","parentId","undefined","has","parent","getParent","flatTreeItemProps","root","id","leaf","childrenSize","index","treeItemPropsRefsPerId","Map","refs","length","treeItemProps","nextPartialItem","currentParentRef","_a","get","isLeaf","currentLevel","_b","treeItemPropsRef","set","push","parentRef","treeItemPropsRefs","flatTreeItems","toArray","map","identity","fn","currentItemRef"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTreeItems.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport {\n TreeItemId,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport { TreeItemProps } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\n\nexport type FlatTreeItem = Required<Pick<TreeItemProps, 'id'>> &\n TreeItemProps & {\n parentId?: string;\n };\n\nexport type FlatTreeItemProps = Required<\n Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf' | 'aria-setsize'>\n> &\n TreeItemProps;\n\ntype TreeItemPropsReference = {\n props: Required<Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf'>> & TreeItemProps;\n parentId?: string;\n childrenSize: number;\n index: number;\n};\n\nexport type TreeItemPropsReferences = {\n refs: TreeItemPropsReference[];\n getParent(ref: TreeItemPropsReference): TreeItemPropsReference | null;\n get(id: string): TreeItemPropsReference | null;\n};\n\ntype LazyArray<Value> = {\n map<NextValue>(fn: (child: Value) => NextValue): NextValue[];\n toArray(): Value[];\n};\n\nexport type FlatTreeProps = Required<\n Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'> & { ref: React.Ref<HTMLDivElement> }\n>;\nexport type LazyFlatTreeItems = LazyArray<FlatTreeItemProps> & {\n get(id: string): TreeItemPropsReference | null;\n};\n\nexport type UseFlatTreeItemsOptions = Pick<TreeProps, 'openItems' | 'defaultOpenItems'>;\n\nexport function useFlatTreeItems_unstable(\n items: FlatTreeItem[],\n options?: UseFlatTreeItemsOptions,\n): readonly [FlatTreeProps, LazyFlatTreeItems] {\n const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);\n const [openItems, updateOpenItems] = useOpenItemsState(options ?? {});\n const [navigate, treeRef] = useFlatTreeNavigation(references);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n event.preventDefault();\n updateOpenItems(data);\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n event.preventDefault();\n navigate(data);\n },\n );\n\n const lazyFlatTreeItems = React.useMemo(\n () =>\n createLazyFlatTreeItems(references, {\n filter: item => isTreeItemVisible(item, { openItems, references }),\n }),\n [references, openItems],\n );\n\n return [\n {\n ref: treeRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n },\n lazyFlatTreeItems,\n ];\n}\n\nfunction isTreeItemVisible(\n itemRef: TreeItemPropsReference,\n {\n openItems,\n references,\n }: {\n openItems: ImmutableSet<TreeItemId>;\n references: TreeItemPropsReferences;\n },\n) {\n if (itemRef.props['aria-level'] === 1) {\n return true;\n }\n while (itemRef.parentId !== undefined) {\n if (!openItems.has(itemRef.parentId)) {\n return false;\n }\n const parent = references.getParent(itemRef);\n if (!parent) {\n return false;\n }\n itemRef = parent;\n }\n return true;\n}\n\nfunction createTreeItemPropsRefs(flatTreeItemProps: FlatTreeItem[]): TreeItemPropsReferences {\n const root: TreeItemPropsReference = {\n props: { id: 'root', leaf: false, 'aria-level': 0, 'aria-posinset': 0 },\n childrenSize: 0,\n index: -1,\n };\n const treeItemPropsRefsPerId = new Map<string, TreeItemPropsReference>();\n const refs: TreeItemPropsReference[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextPartialItem = flatTreeItemProps[index + 1] as FlatTreeItem | undefined;\n const currentParentRef = parentId ? treeItemPropsRefsPerId.get(parentId) ?? root : root;\n const isLeaf = nextPartialItem?.parentId !== treeItemProps.id;\n const currentLevel = (currentParentRef.props['aria-level'] ?? 0) + 1;\n currentParentRef.childrenSize++;\n\n const treeItemPropsRef: TreeItemPropsReference = {\n props: {\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentParentRef.childrenSize,\n leaf: isLeaf,\n },\n parentId,\n childrenSize: 0,\n index: -1,\n };\n treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);\n refs.push(treeItemPropsRef);\n }\n\n function getParent(itemRef: TreeItemPropsReference): TreeItemPropsReference | null {\n const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;\n return parentRef ?? null;\n }\n function get(id: string): TreeItemPropsReference | null {\n return treeItemPropsRefsPerId.get(id) ?? null;\n }\n\n return { refs, getParent, get };\n}\n\nfunction createLazyFlatTreeItems(\n treeItemPropsRefs: TreeItemPropsReferences,\n { filter = () => true }: { filter: (item: TreeItemPropsReference) => boolean },\n): LazyFlatTreeItems {\n const flatTreeItems: LazyFlatTreeItems = {\n get: treeItemPropsRefs.get,\n toArray: () => flatTreeItems.map(identity),\n map: fn => {\n const items: ReturnType<typeof fn>[] = [];\n for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {\n const currentItemRef = treeItemPropsRefs.refs[index];\n const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);\n if (!currentParentRef) {\n break;\n }\n if (filter(currentItemRef)) {\n currentItemRef.index = index;\n items.push(fn({ ...currentItemRef.props, 'aria-setsize': currentParentRef.childrenSize }));\n } else {\n index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;\n }\n }\n return items;\n },\n };\n return flatTreeItems;\n}\n\nfunction identity<T>(item: T) {\n return item;\n}\n"],"mappings":"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"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useFlatTreeItems_unstable = void 0;
|
|
7
|
-
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
|
8
|
-
const React = /*#__PURE__*/require("react");
|
|
9
|
-
const useFlatTreeNavigation_1 = /*#__PURE__*/require("./useFlatTreeNavigation");
|
|
10
|
-
const useOpenItemsState_1 = /*#__PURE__*/require("./useOpenItemsState");
|
|
11
|
-
function useFlatTreeItems_unstable(items, options) {
|
|
12
|
-
const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);
|
|
13
|
-
const [openItems, updateOpenItems] = useOpenItemsState_1.useOpenItemsState(options !== null && options !== void 0 ? options : {});
|
|
14
|
-
const [navigate, treeRef] = useFlatTreeNavigation_1.useFlatTreeNavigation(references);
|
|
15
|
-
const handleOpenChange = react_utilities_1.useEventCallback((event, data) => {
|
|
16
|
-
event.preventDefault();
|
|
17
|
-
updateOpenItems(data);
|
|
18
|
-
});
|
|
19
|
-
const handleNavigation = react_utilities_1.useEventCallback((event, data) => {
|
|
20
|
-
event.preventDefault();
|
|
21
|
-
navigate(data);
|
|
22
|
-
});
|
|
23
|
-
const lazyFlatTreeItems = React.useMemo(() => createLazyFlatTreeItems(references, {
|
|
24
|
-
filter: item => isTreeItemVisible(item, {
|
|
25
|
-
openItems,
|
|
26
|
-
references
|
|
27
|
-
})
|
|
28
|
-
}), [references, openItems]);
|
|
29
|
-
return [{
|
|
30
|
-
ref: treeRef,
|
|
31
|
-
openItems,
|
|
32
|
-
onOpenChange: handleOpenChange,
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
34
|
-
onNavigation_unstable: handleNavigation
|
|
35
|
-
}, lazyFlatTreeItems];
|
|
36
|
-
}
|
|
37
|
-
exports.useFlatTreeItems_unstable = useFlatTreeItems_unstable;
|
|
38
|
-
function isTreeItemVisible(itemRef, {
|
|
39
|
-
openItems,
|
|
40
|
-
references
|
|
41
|
-
}) {
|
|
42
|
-
if (itemRef.props['aria-level'] === 1) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
while (itemRef.parentId !== undefined) {
|
|
46
|
-
if (!openItems.has(itemRef.parentId)) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
const parent = references.getParent(itemRef);
|
|
50
|
-
if (!parent) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
itemRef = parent;
|
|
54
|
-
}
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
function createTreeItemPropsRefs(flatTreeItemProps) {
|
|
58
|
-
var _a, _b;
|
|
59
|
-
const root = {
|
|
60
|
-
props: {
|
|
61
|
-
id: 'root',
|
|
62
|
-
leaf: false,
|
|
63
|
-
'aria-level': 0,
|
|
64
|
-
'aria-posinset': 0
|
|
65
|
-
},
|
|
66
|
-
childrenSize: 0,
|
|
67
|
-
index: -1
|
|
68
|
-
};
|
|
69
|
-
const treeItemPropsRefsPerId = new Map();
|
|
70
|
-
const refs = [];
|
|
71
|
-
for (let index = 0; index < flatTreeItemProps.length; index++) {
|
|
72
|
-
const {
|
|
73
|
-
parentId,
|
|
74
|
-
...treeItemProps
|
|
75
|
-
} = flatTreeItemProps[index];
|
|
76
|
-
const nextPartialItem = flatTreeItemProps[index + 1];
|
|
77
|
-
const currentParentRef = parentId ? (_a = treeItemPropsRefsPerId.get(parentId)) !== null && _a !== void 0 ? _a : root : root;
|
|
78
|
-
const isLeaf = (nextPartialItem === null || nextPartialItem === void 0 ? void 0 : nextPartialItem.parentId) !== treeItemProps.id;
|
|
79
|
-
const currentLevel = ((_b = currentParentRef.props['aria-level']) !== null && _b !== void 0 ? _b : 0) + 1;
|
|
80
|
-
currentParentRef.childrenSize++;
|
|
81
|
-
const treeItemPropsRef = {
|
|
82
|
-
props: {
|
|
83
|
-
...treeItemProps,
|
|
84
|
-
'aria-level': currentLevel,
|
|
85
|
-
'aria-posinset': currentParentRef.childrenSize,
|
|
86
|
-
leaf: isLeaf
|
|
87
|
-
},
|
|
88
|
-
parentId,
|
|
89
|
-
childrenSize: 0,
|
|
90
|
-
index: -1
|
|
91
|
-
};
|
|
92
|
-
treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);
|
|
93
|
-
refs.push(treeItemPropsRef);
|
|
94
|
-
}
|
|
95
|
-
function getParent(itemRef) {
|
|
96
|
-
const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;
|
|
97
|
-
return parentRef !== null && parentRef !== void 0 ? parentRef : null;
|
|
98
|
-
}
|
|
99
|
-
function get(id) {
|
|
100
|
-
var _a;
|
|
101
|
-
return (_a = treeItemPropsRefsPerId.get(id)) !== null && _a !== void 0 ? _a : null;
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
refs,
|
|
105
|
-
getParent,
|
|
106
|
-
get
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
function createLazyFlatTreeItems(treeItemPropsRefs, {
|
|
110
|
-
filter = () => true
|
|
111
|
-
}) {
|
|
112
|
-
const flatTreeItems = {
|
|
113
|
-
get: treeItemPropsRefs.get,
|
|
114
|
-
toArray: () => flatTreeItems.map(identity),
|
|
115
|
-
map: fn => {
|
|
116
|
-
const items = [];
|
|
117
|
-
for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {
|
|
118
|
-
const currentItemRef = treeItemPropsRefs.refs[index];
|
|
119
|
-
const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);
|
|
120
|
-
if (!currentParentRef) {
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
if (filter(currentItemRef)) {
|
|
124
|
-
currentItemRef.index = index;
|
|
125
|
-
items.push(fn({
|
|
126
|
-
...currentItemRef.props,
|
|
127
|
-
'aria-setsize': currentParentRef.childrenSize
|
|
128
|
-
}));
|
|
129
|
-
} else {
|
|
130
|
-
index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return items;
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
return flatTreeItems;
|
|
137
|
-
}
|
|
138
|
-
function identity(item) {
|
|
139
|
-
return item;
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=useFlatTreeItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["react_utilities_1","require","React","useFlatTreeNavigation_1","useOpenItemsState_1","useFlatTreeItems_unstable","items","options","references","useMemo","createTreeItemPropsRefs","openItems","updateOpenItems","useOpenItemsState","navigate","treeRef","useFlatTreeNavigation","handleOpenChange","useEventCallback","event","data","preventDefault","handleNavigation","lazyFlatTreeItems","createLazyFlatTreeItems","filter","item","isTreeItemVisible","ref","onOpenChange","onNavigation_unstable","exports","itemRef","props","parentId","undefined","has","parent","getParent","flatTreeItemProps","root","id","leaf","childrenSize","index","treeItemPropsRefsPerId","Map","refs","length","treeItemProps","nextPartialItem","currentParentRef","_a","get","isLeaf","currentLevel","_b","treeItemPropsRef","set","push","parentRef","treeItemPropsRefs","flatTreeItems","toArray","map","identity","fn","currentItemRef"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTreeItems.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport {\n TreeItemId,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport { TreeItemProps } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\n\nexport type FlatTreeItem = Required<Pick<TreeItemProps, 'id'>> &\n TreeItemProps & {\n parentId?: string;\n };\n\nexport type FlatTreeItemProps = Required<\n Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf' | 'aria-setsize'>\n> &\n TreeItemProps;\n\ntype TreeItemPropsReference = {\n props: Required<Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf'>> & TreeItemProps;\n parentId?: string;\n childrenSize: number;\n index: number;\n};\n\nexport type TreeItemPropsReferences = {\n refs: TreeItemPropsReference[];\n getParent(ref: TreeItemPropsReference): TreeItemPropsReference | null;\n get(id: string): TreeItemPropsReference | null;\n};\n\ntype LazyArray<Value> = {\n map<NextValue>(fn: (child: Value) => NextValue): NextValue[];\n toArray(): Value[];\n};\n\nexport type FlatTreeProps = Required<\n Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'> & { ref: React.Ref<HTMLDivElement> }\n>;\nexport type LazyFlatTreeItems = LazyArray<FlatTreeItemProps> & {\n get(id: string): TreeItemPropsReference | null;\n};\n\nexport type UseFlatTreeItemsOptions = Pick<TreeProps, 'openItems' | 'defaultOpenItems'>;\n\nexport function useFlatTreeItems_unstable(\n items: FlatTreeItem[],\n options?: UseFlatTreeItemsOptions,\n): readonly [FlatTreeProps, LazyFlatTreeItems] {\n const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);\n const [openItems, updateOpenItems] = useOpenItemsState(options ?? {});\n const [navigate, treeRef] = useFlatTreeNavigation(references);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n event.preventDefault();\n updateOpenItems(data);\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n event.preventDefault();\n navigate(data);\n },\n );\n\n const lazyFlatTreeItems = React.useMemo(\n () =>\n createLazyFlatTreeItems(references, {\n filter: item => isTreeItemVisible(item, { openItems, references }),\n }),\n [references, openItems],\n );\n\n return [\n {\n ref: treeRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n },\n lazyFlatTreeItems,\n ];\n}\n\nfunction isTreeItemVisible(\n itemRef: TreeItemPropsReference,\n {\n openItems,\n references,\n }: {\n openItems: ImmutableSet<TreeItemId>;\n references: TreeItemPropsReferences;\n },\n) {\n if (itemRef.props['aria-level'] === 1) {\n return true;\n }\n while (itemRef.parentId !== undefined) {\n if (!openItems.has(itemRef.parentId)) {\n return false;\n }\n const parent = references.getParent(itemRef);\n if (!parent) {\n return false;\n }\n itemRef = parent;\n }\n return true;\n}\n\nfunction createTreeItemPropsRefs(flatTreeItemProps: FlatTreeItem[]): TreeItemPropsReferences {\n const root: TreeItemPropsReference = {\n props: { id: 'root', leaf: false, 'aria-level': 0, 'aria-posinset': 0 },\n childrenSize: 0,\n index: -1,\n };\n const treeItemPropsRefsPerId = new Map<string, TreeItemPropsReference>();\n const refs: TreeItemPropsReference[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextPartialItem = flatTreeItemProps[index + 1] as FlatTreeItem | undefined;\n const currentParentRef = parentId ? treeItemPropsRefsPerId.get(parentId) ?? root : root;\n const isLeaf = nextPartialItem?.parentId !== treeItemProps.id;\n const currentLevel = (currentParentRef.props['aria-level'] ?? 0) + 1;\n currentParentRef.childrenSize++;\n\n const treeItemPropsRef: TreeItemPropsReference = {\n props: {\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentParentRef.childrenSize,\n leaf: isLeaf,\n },\n parentId,\n childrenSize: 0,\n index: -1,\n };\n treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);\n refs.push(treeItemPropsRef);\n }\n\n function getParent(itemRef: TreeItemPropsReference): TreeItemPropsReference | null {\n const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;\n return parentRef ?? null;\n }\n function get(id: string): TreeItemPropsReference | null {\n return treeItemPropsRefsPerId.get(id) ?? null;\n }\n\n return { refs, getParent, get };\n}\n\nfunction createLazyFlatTreeItems(\n treeItemPropsRefs: TreeItemPropsReferences,\n { filter = () => true }: { filter: (item: TreeItemPropsReference) => boolean },\n): LazyFlatTreeItems {\n const flatTreeItems: LazyFlatTreeItems = {\n get: treeItemPropsRefs.get,\n toArray: () => flatTreeItems.map(identity),\n map: fn => {\n const items: ReturnType<typeof fn>[] = [];\n for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {\n const currentItemRef = treeItemPropsRefs.refs[index];\n const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);\n if (!currentParentRef) {\n break;\n }\n if (filter(currentItemRef)) {\n currentItemRef.index = index;\n items.push(fn({ ...currentItemRef.props, 'aria-setsize': currentParentRef.childrenSize }));\n } else {\n index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;\n }\n }\n return items;\n },\n };\n return flatTreeItems;\n}\n\nfunction identity<T>(item: T) {\n return item;\n}\n"],"mappings":"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"}
|