@fluentui/react-tree 9.0.0-beta.1 → 9.0.0-beta.3

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.
Files changed (34) hide show
  1. package/CHANGELOG.json +67 -1
  2. package/CHANGELOG.md +26 -2
  3. package/dist/index.d.ts +80 -22
  4. package/lib/hooks/index.js +1 -1
  5. package/lib/hooks/index.js.map +1 -1
  6. package/lib/hooks/useFlatTree.js +49 -0
  7. package/lib/hooks/useFlatTree.js.map +1 -0
  8. package/lib/hooks/useFlatTreeNavigation.js +6 -6
  9. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  10. package/lib/index.js +1 -1
  11. package/lib/index.js.map +1 -1
  12. package/lib/utils/createUnfilteredFlatTree.js +77 -0
  13. package/lib/utils/createUnfilteredFlatTree.js.map +1 -0
  14. package/lib/utils/createVisibleFlatTree.js +80 -0
  15. package/lib/utils/createVisibleFlatTree.js.map +1 -0
  16. package/lib/utils/flattenTree.js.map +1 -1
  17. package/lib-commonjs/hooks/index.js +1 -1
  18. package/lib-commonjs/hooks/index.js.map +1 -1
  19. package/lib-commonjs/hooks/useFlatTree.js +56 -0
  20. package/lib-commonjs/hooks/useFlatTree.js.map +1 -0
  21. package/lib-commonjs/hooks/useFlatTreeNavigation.js +6 -6
  22. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  23. package/lib-commonjs/index.js +3 -3
  24. package/lib-commonjs/index.js.map +1 -1
  25. package/lib-commonjs/utils/createUnfilteredFlatTree.js +84 -0
  26. package/lib-commonjs/utils/createUnfilteredFlatTree.js.map +1 -0
  27. package/lib-commonjs/utils/createVisibleFlatTree.js +87 -0
  28. package/lib-commonjs/utils/createVisibleFlatTree.js.map +1 -0
  29. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  30. package/package.json +8 -8
  31. package/lib/hooks/useFlatTreeItems.js +0 -134
  32. package/lib/hooks/useFlatTreeItems.js.map +0 -1
  33. package/lib-commonjs/hooks/useFlatTreeItems.js +0 -141
  34. package/lib-commonjs/hooks/useFlatTreeItems.js.map +0 -1
@@ -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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"}