@noya-app/noya-file-explorer 0.0.2
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/.eslintrc.js +11 -0
- package/.turbo/turbo-build.log +24 -0
- package/CHANGELOG.md +14 -0
- package/README.md +3 -0
- package/dist/index.css +1811 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +23279 -0
- package/dist/index.d.ts +23279 -0
- package/dist/index.js +1854 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1857 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
- package/src/MediaCollection.tsx +839 -0
- package/src/__tests__/deleteMediaItems.test.ts +125 -0
- package/src/__tests__/getDepthMap.test.ts +84 -0
- package/src/__tests__/getParentDirectories.test.ts +68 -0
- package/src/__tests__/getVisibleItems.test.ts +184 -0
- package/src/__tests__/moveMediaInsideFolder.test.ts +348 -0
- package/src/__tests__/movePathsIntoTarget.test.ts +229 -0
- package/src/__tests__/moveUpAFolder.test.ts +179 -0
- package/src/__tests__/updateExpandedMap.test.ts +157 -0
- package/src/__tests__/validateMediaItemRename.test.ts +200 -0
- package/src/index.css +1 -0
- package/src/index.ts +4 -0
- package/src/utils/files.ts +274 -0
- package/src/utils/mediaItemTree.ts +110 -0
- package/tsconfig.json +3 -0
- package/tsup.config.ts +13 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { MediaMap } from "@noya-app/noya-schemas";
|
|
2
|
+
import { expect, it } from "bun:test";
|
|
3
|
+
import { deleteMediaItems } from "../utils/files";
|
|
4
|
+
import {
|
|
5
|
+
createMediaAsset,
|
|
6
|
+
createMediaFolder,
|
|
7
|
+
createMediaItemTree,
|
|
8
|
+
} from "../utils/mediaItemTree";
|
|
9
|
+
it("should delete a folder with no children", () => {
|
|
10
|
+
const dir1 = createMediaFolder();
|
|
11
|
+
const media: MediaMap = { dir1 };
|
|
12
|
+
|
|
13
|
+
const tree = createMediaItemTree(media);
|
|
14
|
+
|
|
15
|
+
const result = deleteMediaItems({
|
|
16
|
+
selectedIds: [dir1.id],
|
|
17
|
+
media,
|
|
18
|
+
tree,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
expect(result).toEqual({});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should delete a folder and its immediate children", () => {
|
|
25
|
+
const dir1 = createMediaFolder();
|
|
26
|
+
const child1 = createMediaAsset({ assetId: "asset1" });
|
|
27
|
+
const child2 = createMediaFolder();
|
|
28
|
+
const dir3 = createMediaFolder();
|
|
29
|
+
const media: MediaMap = {
|
|
30
|
+
dir1,
|
|
31
|
+
"dir1/child1": child1,
|
|
32
|
+
"dir1/child2": child2,
|
|
33
|
+
dir3,
|
|
34
|
+
};
|
|
35
|
+
const tree = createMediaItemTree(media);
|
|
36
|
+
|
|
37
|
+
const result = deleteMediaItems({
|
|
38
|
+
selectedIds: [dir1.id],
|
|
39
|
+
media,
|
|
40
|
+
tree,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
expect(result).toEqual({ dir3 });
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("should delete a folder and all nested descendants", () => {
|
|
47
|
+
const dir1 = createMediaFolder();
|
|
48
|
+
const dir2 = createMediaFolder();
|
|
49
|
+
const dir3 = createMediaFolder();
|
|
50
|
+
const asset1 = createMediaAsset({ assetId: "asset1" });
|
|
51
|
+
const dir4 = createMediaFolder();
|
|
52
|
+
const media: MediaMap = {
|
|
53
|
+
dir1,
|
|
54
|
+
"dir1/dir2": dir2,
|
|
55
|
+
"dir1/dir2/dir3": dir3,
|
|
56
|
+
"dir1/dir2/dir3/asset1": asset1,
|
|
57
|
+
dir4,
|
|
58
|
+
};
|
|
59
|
+
const tree = createMediaItemTree(media);
|
|
60
|
+
const result = deleteMediaItems({
|
|
61
|
+
selectedIds: [dir1.id],
|
|
62
|
+
media,
|
|
63
|
+
tree,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
expect(result).toEqual({ dir4 });
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("should handle deleting folder with mixed content types", () => {
|
|
70
|
+
const dir1 = createMediaFolder();
|
|
71
|
+
const asset1 = createMediaAsset({ assetId: "asset1" });
|
|
72
|
+
const dir2 = createMediaFolder();
|
|
73
|
+
const asset2 = createMediaAsset({ assetId: "asset2" });
|
|
74
|
+
const asset3 = createMediaAsset({ assetId: "asset3" });
|
|
75
|
+
const media: MediaMap = {
|
|
76
|
+
dir1,
|
|
77
|
+
"dir1/asset1": asset1,
|
|
78
|
+
"dir1/dir2": dir2,
|
|
79
|
+
"dir1/dir2/asset2": asset2,
|
|
80
|
+
asset3,
|
|
81
|
+
};
|
|
82
|
+
const tree = createMediaItemTree(media);
|
|
83
|
+
const result = deleteMediaItems({
|
|
84
|
+
selectedIds: [dir1.id],
|
|
85
|
+
media,
|
|
86
|
+
tree,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
expect(result).toEqual({ asset3 });
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("should handle attempting to delete non-existent folder", () => {
|
|
93
|
+
const dir1 = createMediaFolder();
|
|
94
|
+
const asset1 = createMediaAsset({ assetId: "asset1" });
|
|
95
|
+
const media: MediaMap = { dir1, asset1 };
|
|
96
|
+
const tree = createMediaItemTree(media);
|
|
97
|
+
const result = deleteMediaItems({
|
|
98
|
+
selectedIds: ["non-existent"],
|
|
99
|
+
media,
|
|
100
|
+
tree,
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
expect(result).toEqual(media);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("should preserve sibling directories and their contents", () => {
|
|
107
|
+
const dir1 = createMediaFolder();
|
|
108
|
+
const dir2 = createMediaFolder();
|
|
109
|
+
const asset1 = createMediaAsset({ assetId: "asset1" });
|
|
110
|
+
const asset2 = createMediaAsset({ assetId: "asset2" });
|
|
111
|
+
const media: MediaMap = {
|
|
112
|
+
dir1,
|
|
113
|
+
dir2,
|
|
114
|
+
"dir1/asset1": asset1,
|
|
115
|
+
"dir2/asset2": asset2,
|
|
116
|
+
};
|
|
117
|
+
const tree = createMediaItemTree(media);
|
|
118
|
+
const result = deleteMediaItems({
|
|
119
|
+
selectedIds: [dir1.id],
|
|
120
|
+
media,
|
|
121
|
+
tree,
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
expect(result).toEqual({ dir2, "dir2/asset2": asset2 });
|
|
125
|
+
});
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { expect, it } from "bun:test";
|
|
2
|
+
import { getDepthMap } from "../utils/files";
|
|
3
|
+
import {
|
|
4
|
+
createMediaAsset,
|
|
5
|
+
createMediaFolder,
|
|
6
|
+
createMediaItemTree,
|
|
7
|
+
rootMediaItem,
|
|
8
|
+
} from "../utils/mediaItemTree";
|
|
9
|
+
|
|
10
|
+
it("should return empty map for empty tree", () => {
|
|
11
|
+
const tree = createMediaItemTree({});
|
|
12
|
+
const result = getDepthMap(rootMediaItem, tree, true);
|
|
13
|
+
expect(result).toEqual({ [rootMediaItem.id]: 0 });
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it("should set depth 0 for root level items", () => {
|
|
17
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
18
|
+
const asset2 = createMediaAsset({ assetId: "2" });
|
|
19
|
+
const tree = createMediaItemTree({ asset1, asset2 });
|
|
20
|
+
const result = getDepthMap(rootMediaItem, tree, true);
|
|
21
|
+
expect(result[asset1.id]).toBe(0);
|
|
22
|
+
expect(result[asset2.id]).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("should calculate correct depths for nested items", () => {
|
|
26
|
+
const parent = createMediaFolder();
|
|
27
|
+
const child = createMediaAsset({
|
|
28
|
+
assetId: "1",
|
|
29
|
+
});
|
|
30
|
+
const grandChild = createMediaAsset({ assetId: "2" });
|
|
31
|
+
const tree = createMediaItemTree({
|
|
32
|
+
parent,
|
|
33
|
+
"parent/child": child,
|
|
34
|
+
"parent/child/grandChild": grandChild,
|
|
35
|
+
});
|
|
36
|
+
const result = getDepthMap(rootMediaItem, tree, true);
|
|
37
|
+
expect(result[parent.id]).toBe(0);
|
|
38
|
+
expect(result[child.id]).toBe(1);
|
|
39
|
+
expect(result[grandChild.id]).toBe(2);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("should handle multiple branches with different depths", () => {
|
|
43
|
+
const parent1 = createMediaFolder();
|
|
44
|
+
const parent2 = createMediaFolder();
|
|
45
|
+
const child1 = createMediaAsset({ assetId: "1" });
|
|
46
|
+
const child2 = createMediaAsset({ assetId: "2" });
|
|
47
|
+
const grandChild = createMediaAsset({ assetId: "3" });
|
|
48
|
+
const tree = createMediaItemTree({
|
|
49
|
+
parent1,
|
|
50
|
+
parent2,
|
|
51
|
+
"parent1/child1": child1,
|
|
52
|
+
"parent2/child2": child2,
|
|
53
|
+
"parent1/child1/grandChild": grandChild,
|
|
54
|
+
});
|
|
55
|
+
const result = getDepthMap(rootMediaItem, tree, true);
|
|
56
|
+
expect(result[parent1.id]).toBe(0);
|
|
57
|
+
expect(result[parent2.id]).toBe(0);
|
|
58
|
+
expect(result[child1.id]).toBe(1);
|
|
59
|
+
expect(result[child2.id]).toBe(1);
|
|
60
|
+
expect(result[grandChild.id]).toBe(2);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("should handle orphaned items", () => {
|
|
64
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
65
|
+
const asset2 = createMediaAsset({ assetId: "2" });
|
|
66
|
+
const tree = createMediaItemTree({
|
|
67
|
+
"non-existent": asset1,
|
|
68
|
+
asset2,
|
|
69
|
+
});
|
|
70
|
+
const result = getDepthMap(rootMediaItem, tree, true);
|
|
71
|
+
expect(result[rootMediaItem.id]).toBe(0);
|
|
72
|
+
expect(result[asset2.id]).toBe(0);
|
|
73
|
+
expect(result[asset1.id]).toBe(0);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("should set all depths to 0 when showAllDescendants is false", () => {
|
|
77
|
+
const dir = createMediaFolder();
|
|
78
|
+
const asset = createMediaAsset({ assetId: "1" });
|
|
79
|
+
const tree = createMediaItemTree({ dir, "dir/asset": asset });
|
|
80
|
+
const result = getDepthMap(rootMediaItem, tree, false);
|
|
81
|
+
expect(result[rootMediaItem.id]).toBe(0);
|
|
82
|
+
expect(result[dir.id]).toBe(0);
|
|
83
|
+
expect(result[asset.id]).toBe(0);
|
|
84
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { MediaMap } from "@noya-app/noya-schemas";
|
|
2
|
+
import { expect, it } from "bun:test";
|
|
3
|
+
import { getParentDirectories } from "../utils/files";
|
|
4
|
+
import {
|
|
5
|
+
createMediaAsset,
|
|
6
|
+
createMediaFolder,
|
|
7
|
+
rootMediaItem,
|
|
8
|
+
} from "../utils/mediaItemTree";
|
|
9
|
+
|
|
10
|
+
it("should return root for non-existent directory", () => {
|
|
11
|
+
const dir1 = createMediaFolder();
|
|
12
|
+
const mediaMap: MediaMap = {
|
|
13
|
+
dir1: dir1,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const result = getParentDirectories(mediaMap, "non-existent");
|
|
17
|
+
expect(result).toEqual([rootMediaItem]);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("should return root and directory item for root-level directory", () => {
|
|
21
|
+
const dir1 = createMediaFolder();
|
|
22
|
+
const mediaMap: MediaMap = {
|
|
23
|
+
dir1,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const result = getParentDirectories(mediaMap, dir1.id);
|
|
27
|
+
expect(result).toEqual([rootMediaItem, dir1]);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("should return path for nested directory", () => {
|
|
31
|
+
const dir1 = createMediaFolder();
|
|
32
|
+
const dir2 = createMediaFolder();
|
|
33
|
+
const dir3 = createMediaFolder();
|
|
34
|
+
const mediaMap: MediaMap = {
|
|
35
|
+
dir1,
|
|
36
|
+
"dir1/dir2": dir2,
|
|
37
|
+
"dir1/dir2/dir3": dir3,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const result = getParentDirectories(mediaMap, dir3.id);
|
|
41
|
+
expect(result).toEqual([rootMediaItem, dir1, dir2, dir3]);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("should handle missing parent by returning root", () => {
|
|
45
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
46
|
+
const mediaMap: MediaMap = {
|
|
47
|
+
"dir3/asset1": asset1,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const result = getParentDirectories(mediaMap, asset1.id);
|
|
51
|
+
expect(result).toEqual([rootMediaItem]);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("should work with mixed file types in media array", () => {
|
|
55
|
+
const dir1 = createMediaFolder();
|
|
56
|
+
const file1 = createMediaAsset({ assetId: "1" });
|
|
57
|
+
const dir2 = createMediaFolder();
|
|
58
|
+
const file2 = createMediaAsset({ assetId: "2" });
|
|
59
|
+
const mediaMap: MediaMap = {
|
|
60
|
+
dir1,
|
|
61
|
+
"dir1/file1": file1,
|
|
62
|
+
"dir1/dir2": dir2,
|
|
63
|
+
"dir1/dir2/file2": file2,
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const result = getParentDirectories(mediaMap, dir2.id);
|
|
67
|
+
expect(result).toEqual([rootMediaItem, dir1, dir2]);
|
|
68
|
+
});
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { MediaMap } from "@noya-app/noya-schemas";
|
|
2
|
+
import { expect, it } from "bun:test";
|
|
3
|
+
import { getVisibleItems } from "../utils/files";
|
|
4
|
+
import {
|
|
5
|
+
createMediaAsset,
|
|
6
|
+
createMediaFolder,
|
|
7
|
+
createMediaItemTree,
|
|
8
|
+
rootMediaItem,
|
|
9
|
+
} from "../utils/mediaItemTree";
|
|
10
|
+
|
|
11
|
+
it("should return all items if no filter is applied", () => {
|
|
12
|
+
const item1 = createMediaAsset({ assetId: "1" });
|
|
13
|
+
const item2 = createMediaAsset({ assetId: "2" });
|
|
14
|
+
const media: MediaMap = { item1, item2 };
|
|
15
|
+
const tree = createMediaItemTree(media);
|
|
16
|
+
const result = getVisibleItems({
|
|
17
|
+
expandedMap: {},
|
|
18
|
+
fileKindFilter: "assets",
|
|
19
|
+
rootItemId: rootMediaItem.id,
|
|
20
|
+
tree,
|
|
21
|
+
showAllDescendants: true,
|
|
22
|
+
showRootItem: false,
|
|
23
|
+
});
|
|
24
|
+
expect(result).toEqual([item1, item2]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("should filter by file type - files only", () => {
|
|
28
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
29
|
+
const folder = createMediaFolder();
|
|
30
|
+
const asset2 = createMediaAsset({ assetId: "2" });
|
|
31
|
+
const media: MediaMap = { asset1, folder, asset2 };
|
|
32
|
+
const tree = createMediaItemTree(media);
|
|
33
|
+
const result = getVisibleItems({
|
|
34
|
+
tree,
|
|
35
|
+
expandedMap: {},
|
|
36
|
+
fileKindFilter: "assets",
|
|
37
|
+
rootItemId: rootMediaItem.id,
|
|
38
|
+
showAllDescendants: true,
|
|
39
|
+
showRootItem: false,
|
|
40
|
+
});
|
|
41
|
+
expect(result).toEqual([asset1, asset2]);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("should filter by file type - directories only", () => {
|
|
45
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
46
|
+
const folder = createMediaFolder();
|
|
47
|
+
const asset2 = createMediaAsset({ assetId: "2" });
|
|
48
|
+
const media: MediaMap = { asset1, folder, asset2 };
|
|
49
|
+
const tree = createMediaItemTree(media);
|
|
50
|
+
const result = getVisibleItems({
|
|
51
|
+
tree,
|
|
52
|
+
expandedMap: {},
|
|
53
|
+
fileKindFilter: "directories",
|
|
54
|
+
rootItemId: rootMediaItem.id,
|
|
55
|
+
showAllDescendants: true,
|
|
56
|
+
showRootItem: true,
|
|
57
|
+
});
|
|
58
|
+
expect(result).toEqual([rootMediaItem, folder]);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("should filter by parent ID", () => {
|
|
62
|
+
const parent = createMediaFolder();
|
|
63
|
+
const asset1 = createMediaAsset({
|
|
64
|
+
assetId: "1",
|
|
65
|
+
});
|
|
66
|
+
const asset2 = createMediaAsset({
|
|
67
|
+
assetId: "2",
|
|
68
|
+
});
|
|
69
|
+
const media: MediaMap = { parent, asset1, "parent/asset2": asset2 };
|
|
70
|
+
const tree = createMediaItemTree(media);
|
|
71
|
+
const result = getVisibleItems({
|
|
72
|
+
tree,
|
|
73
|
+
expandedMap: {},
|
|
74
|
+
fileKindFilter: "all",
|
|
75
|
+
rootItemId: parent.id,
|
|
76
|
+
showAllDescendants: true,
|
|
77
|
+
showRootItem: false,
|
|
78
|
+
});
|
|
79
|
+
expect(result).toEqual([asset2]);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("should show root level items when filtering by root ID", () => {
|
|
83
|
+
const asset1 = createMediaAsset({ assetId: "1" });
|
|
84
|
+
const asset2 = createMediaAsset({
|
|
85
|
+
assetId: "2",
|
|
86
|
+
});
|
|
87
|
+
const asset3 = createMediaAsset({ assetId: "3" });
|
|
88
|
+
const media: MediaMap = { asset1, "does not exist/asset2": asset2, asset3 };
|
|
89
|
+
const tree = createMediaItemTree(media);
|
|
90
|
+
const result = getVisibleItems({
|
|
91
|
+
tree,
|
|
92
|
+
expandedMap: {},
|
|
93
|
+
fileKindFilter: "all",
|
|
94
|
+
rootItemId: rootMediaItem.id,
|
|
95
|
+
showAllDescendants: true,
|
|
96
|
+
showRootItem: false,
|
|
97
|
+
});
|
|
98
|
+
expect(result).toEqual([asset1, asset3]);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("should show items based on expanded state", () => {
|
|
102
|
+
const dir1 = createMediaFolder();
|
|
103
|
+
const asset1 = createMediaAsset({
|
|
104
|
+
assetId: "1",
|
|
105
|
+
});
|
|
106
|
+
const dir2 = createMediaFolder();
|
|
107
|
+
const asset2 = createMediaAsset({
|
|
108
|
+
assetId: "2",
|
|
109
|
+
});
|
|
110
|
+
const media: MediaMap = {
|
|
111
|
+
dir1,
|
|
112
|
+
"dir1/asset1": asset1,
|
|
113
|
+
dir2,
|
|
114
|
+
"dir2/asset2": asset2,
|
|
115
|
+
};
|
|
116
|
+
const tree = createMediaItemTree(media);
|
|
117
|
+
const result = getVisibleItems({
|
|
118
|
+
tree,
|
|
119
|
+
expandedMap: { [dir1.id]: true, [dir2.id]: false },
|
|
120
|
+
fileKindFilter: "all",
|
|
121
|
+
rootItemId: rootMediaItem.id,
|
|
122
|
+
showAllDescendants: true,
|
|
123
|
+
showRootItem: false,
|
|
124
|
+
});
|
|
125
|
+
expect(result).toEqual([dir1, asset1, dir2]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it("should combine file type and parent ID filters", () => {
|
|
129
|
+
const parent1 = createMediaFolder();
|
|
130
|
+
const file1 = createMediaAsset({
|
|
131
|
+
assetId: "1",
|
|
132
|
+
});
|
|
133
|
+
const file2 = createMediaAsset({ assetId: "2" });
|
|
134
|
+
const parent2 = createMediaFolder();
|
|
135
|
+
const media: MediaMap = {
|
|
136
|
+
parent1,
|
|
137
|
+
"parent1/file1": file1,
|
|
138
|
+
file2,
|
|
139
|
+
"parent1/parent2": parent2,
|
|
140
|
+
};
|
|
141
|
+
const tree = createMediaItemTree(media);
|
|
142
|
+
const result = getVisibleItems({
|
|
143
|
+
tree,
|
|
144
|
+
expandedMap: {},
|
|
145
|
+
fileKindFilter: "assets",
|
|
146
|
+
rootItemId: parent1.id,
|
|
147
|
+
showAllDescendants: true,
|
|
148
|
+
showRootItem: false,
|
|
149
|
+
});
|
|
150
|
+
expect(result).toEqual([file1]);
|
|
151
|
+
});
|
|
152
|
+
it("should hide items in parent directories that are not expanded", () => {
|
|
153
|
+
const parent1 = createMediaFolder();
|
|
154
|
+
const asset1 = createMediaAsset({
|
|
155
|
+
assetId: "1",
|
|
156
|
+
});
|
|
157
|
+
const asset2 = createMediaAsset({
|
|
158
|
+
assetId: "2",
|
|
159
|
+
});
|
|
160
|
+
const parent2 = createMediaFolder();
|
|
161
|
+
const asset3 = createMediaAsset({
|
|
162
|
+
assetId: "3",
|
|
163
|
+
});
|
|
164
|
+
const media: MediaMap = {
|
|
165
|
+
parent1,
|
|
166
|
+
"parent1/asset1": asset1,
|
|
167
|
+
"parent1/asset2": asset2,
|
|
168
|
+
"parent1/parent2": parent2,
|
|
169
|
+
"parent1/parent2/asset3": asset3,
|
|
170
|
+
};
|
|
171
|
+
const tree = createMediaItemTree(media);
|
|
172
|
+
const result = getVisibleItems({
|
|
173
|
+
tree,
|
|
174
|
+
expandedMap: {
|
|
175
|
+
[parent1.id]: true,
|
|
176
|
+
[parent2.id]: undefined,
|
|
177
|
+
},
|
|
178
|
+
fileKindFilter: "all",
|
|
179
|
+
rootItemId: rootMediaItem.id,
|
|
180
|
+
showAllDescendants: true,
|
|
181
|
+
showRootItem: false,
|
|
182
|
+
});
|
|
183
|
+
expect(result).toEqual([parent1, asset1, asset2, parent2]);
|
|
184
|
+
});
|