@memberjunction/ng-trees 5.42.0 → 5.44.0
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/dist/lib/ng-trees.module.d.ts +2 -1
- package/dist/lib/ng-trees.module.d.ts.map +1 -1
- package/dist/lib/ng-trees.module.js +7 -3
- package/dist/lib/ng-trees.module.js.map +1 -1
- package/dist/lib/tree/tree.component.js +31 -37
- package/dist/lib/tree/tree.component.js.map +1 -1
- package/package.json +7 -5
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -7
- package/dist/__tests__/index.test.js.map +0 -1
- package/dist/__tests__/tree-events.test.d.ts +0 -2
- package/dist/__tests__/tree-events.test.d.ts.map +0 -1
- package/dist/__tests__/tree-events.test.js +0 -101
- package/dist/__tests__/tree-events.test.js.map +0 -1
- package/dist/__tests__/tree-types.test.d.ts +0 -2
- package/dist/__tests__/tree-types.test.d.ts.map +0 -1
- package/dist/__tests__/tree-types.test.js +0 -82
- package/dist/__tests__/tree-types.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it, expect } from 'vitest';\n\ndescribe('@memberjunction/ng-trees', () => {\n it('should have a passing test', () => {\n expect(true).toBe(true);\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-events.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tree-events.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { TreeEventArgs, CancelableTreeEventArgs, NodeEventArgs, CancelableNodeEventArgs, BeforeNodeSelectEventArgs, AfterNodeSelectEventArgs, AfterDataLoadEventArgs, AfterSearchEventArgs } from '../lib/events/tree-events';
|
|
3
|
-
import { createDefaultTreeNode } from '../lib/models/tree-types';
|
|
4
|
-
const mockTree = {};
|
|
5
|
-
describe('TreeEventArgs', () => {
|
|
6
|
-
it('should set tree reference and timestamp', () => {
|
|
7
|
-
const event = new TreeEventArgs(mockTree);
|
|
8
|
-
expect(event.Tree).toBe(mockTree);
|
|
9
|
-
expect(event.Timestamp).toBeInstanceOf(Date);
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
describe('CancelableTreeEventArgs', () => {
|
|
13
|
-
it('should default Cancel to false', () => {
|
|
14
|
-
const event = new CancelableTreeEventArgs(mockTree);
|
|
15
|
-
expect(event.Cancel).toBe(false);
|
|
16
|
-
expect(event.CancelReason).toBeUndefined();
|
|
17
|
-
});
|
|
18
|
-
it('should allow setting Cancel to true', () => {
|
|
19
|
-
const event = new CancelableTreeEventArgs(mockTree);
|
|
20
|
-
event.Cancel = true;
|
|
21
|
-
event.CancelReason = 'Access denied';
|
|
22
|
-
expect(event.Cancel).toBe(true);
|
|
23
|
-
expect(event.CancelReason).toBe('Access denied');
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe('NodeEventArgs', () => {
|
|
27
|
-
it('should include the node', () => {
|
|
28
|
-
const node = createDefaultTreeNode({ ID: 'n1', Label: 'Test' });
|
|
29
|
-
const event = new NodeEventArgs(mockTree, node);
|
|
30
|
-
expect(event.Node).toBe(node);
|
|
31
|
-
expect(event.Tree).toBe(mockTree);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
describe('CancelableNodeEventArgs', () => {
|
|
35
|
-
it('should include node and be cancelable', () => {
|
|
36
|
-
const node = createDefaultTreeNode({ ID: 'n1' });
|
|
37
|
-
const event = new CancelableNodeEventArgs(mockTree, node);
|
|
38
|
-
expect(event.Node).toBe(node);
|
|
39
|
-
expect(event.Cancel).toBe(false);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe('BeforeNodeSelectEventArgs', () => {
|
|
43
|
-
it('should capture selection context', () => {
|
|
44
|
-
const node = createDefaultTreeNode({ ID: 'n1' });
|
|
45
|
-
const current = [createDefaultTreeNode({ ID: 'n2' })];
|
|
46
|
-
const event = new BeforeNodeSelectEventArgs(mockTree, node, true, current);
|
|
47
|
-
expect(event.Node).toBe(node);
|
|
48
|
-
expect(event.IsAdditive).toBe(true);
|
|
49
|
-
expect(event.CurrentSelection).toHaveLength(1);
|
|
50
|
-
expect(event.Cancel).toBe(false);
|
|
51
|
-
});
|
|
52
|
-
it('should create a copy of current selection', () => {
|
|
53
|
-
const current = [createDefaultTreeNode({ ID: 'n2' })];
|
|
54
|
-
const event = new BeforeNodeSelectEventArgs(mockTree, createDefaultTreeNode(), false, current);
|
|
55
|
-
current.push(createDefaultTreeNode({ ID: 'n3' }));
|
|
56
|
-
expect(event.CurrentSelection).toHaveLength(1);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('AfterNodeSelectEventArgs', () => {
|
|
60
|
-
it('should capture before and after selection', () => {
|
|
61
|
-
const node = createDefaultTreeNode({ ID: 'n1' });
|
|
62
|
-
const prev = [createDefaultTreeNode({ ID: 'old' })];
|
|
63
|
-
const next = [createDefaultTreeNode({ ID: 'n1' })];
|
|
64
|
-
const event = new AfterNodeSelectEventArgs(mockTree, node, false, next, prev);
|
|
65
|
-
expect(event.WasAdditive).toBe(false);
|
|
66
|
-
expect(event.NewSelection).toHaveLength(1);
|
|
67
|
-
expect(event.PreviousSelection).toHaveLength(1);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('AfterDataLoadEventArgs', () => {
|
|
71
|
-
it('should calculate total nodes', () => {
|
|
72
|
-
const event = new AfterDataLoadEventArgs(mockTree, true, 10, 25, 150);
|
|
73
|
-
expect(event.Success).toBe(true);
|
|
74
|
-
expect(event.BranchCount).toBe(10);
|
|
75
|
-
expect(event.LeafCount).toBe(25);
|
|
76
|
-
expect(event.TotalNodes).toBe(35);
|
|
77
|
-
expect(event.LoadTimeMs).toBe(150);
|
|
78
|
-
expect(event.Error).toBeUndefined();
|
|
79
|
-
});
|
|
80
|
-
it('should include error on failure', () => {
|
|
81
|
-
const event = new AfterDataLoadEventArgs(mockTree, false, 0, 0, 50, 'Network error');
|
|
82
|
-
expect(event.Success).toBe(false);
|
|
83
|
-
expect(event.Error).toBe('Network error');
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
describe('AfterSearchEventArgs', () => {
|
|
87
|
-
it('should separate branch and leaf match counts', () => {
|
|
88
|
-
const branches = [createDefaultTreeNode({ ID: 'b1', Type: 'branch' })];
|
|
89
|
-
const leaves = [
|
|
90
|
-
createDefaultTreeNode({ ID: 'l1', Type: 'leaf' }),
|
|
91
|
-
createDefaultTreeNode({ ID: 'l2', Type: 'leaf' })
|
|
92
|
-
];
|
|
93
|
-
const event = new AfterSearchEventArgs(mockTree, 'test', [...branches, ...leaves]);
|
|
94
|
-
expect(event.SearchText).toBe('test');
|
|
95
|
-
expect(event.MatchCount).toBe(3);
|
|
96
|
-
expect(event.BranchMatchCount).toBe(1);
|
|
97
|
-
expect(event.LeafMatchCount).toBe(2);
|
|
98
|
-
expect(event.MatchedNodes).toHaveLength(3);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
//# sourceMappingURL=tree-events.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-events.test.js","sourceRoot":"","sources":["../../src/__tests__/tree-events.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from 'vitest';\nimport {\n TreeEventArgs,\n CancelableTreeEventArgs,\n NodeEventArgs,\n CancelableNodeEventArgs,\n BeforeNodeSelectEventArgs,\n AfterNodeSelectEventArgs,\n AfterDataLoadEventArgs,\n AfterSearchEventArgs\n} from '../lib/events/tree-events';\nimport { createDefaultTreeNode } from '../lib/models/tree-types';\n\nconst mockTree = {} as never;\n\ndescribe('TreeEventArgs', () => {\n it('should set tree reference and timestamp', () => {\n const event = new TreeEventArgs(mockTree);\n expect(event.Tree).toBe(mockTree);\n expect(event.Timestamp).toBeInstanceOf(Date);\n });\n});\n\ndescribe('CancelableTreeEventArgs', () => {\n it('should default Cancel to false', () => {\n const event = new CancelableTreeEventArgs(mockTree);\n expect(event.Cancel).toBe(false);\n expect(event.CancelReason).toBeUndefined();\n });\n\n it('should allow setting Cancel to true', () => {\n const event = new CancelableTreeEventArgs(mockTree);\n event.Cancel = true;\n event.CancelReason = 'Access denied';\n expect(event.Cancel).toBe(true);\n expect(event.CancelReason).toBe('Access denied');\n });\n});\n\ndescribe('NodeEventArgs', () => {\n it('should include the node', () => {\n const node = createDefaultTreeNode({ ID: 'n1', Label: 'Test' });\n const event = new NodeEventArgs(mockTree, node);\n expect(event.Node).toBe(node);\n expect(event.Tree).toBe(mockTree);\n });\n});\n\ndescribe('CancelableNodeEventArgs', () => {\n it('should include node and be cancelable', () => {\n const node = createDefaultTreeNode({ ID: 'n1' });\n const event = new CancelableNodeEventArgs(mockTree, node);\n expect(event.Node).toBe(node);\n expect(event.Cancel).toBe(false);\n });\n});\n\ndescribe('BeforeNodeSelectEventArgs', () => {\n it('should capture selection context', () => {\n const node = createDefaultTreeNode({ ID: 'n1' });\n const current = [createDefaultTreeNode({ ID: 'n2' })];\n const event = new BeforeNodeSelectEventArgs(mockTree, node, true, current);\n\n expect(event.Node).toBe(node);\n expect(event.IsAdditive).toBe(true);\n expect(event.CurrentSelection).toHaveLength(1);\n expect(event.Cancel).toBe(false);\n });\n\n it('should create a copy of current selection', () => {\n const current = [createDefaultTreeNode({ ID: 'n2' })];\n const event = new BeforeNodeSelectEventArgs(mockTree, createDefaultTreeNode(), false, current);\n current.push(createDefaultTreeNode({ ID: 'n3' }));\n expect(event.CurrentSelection).toHaveLength(1);\n });\n});\n\ndescribe('AfterNodeSelectEventArgs', () => {\n it('should capture before and after selection', () => {\n const node = createDefaultTreeNode({ ID: 'n1' });\n const prev = [createDefaultTreeNode({ ID: 'old' })];\n const next = [createDefaultTreeNode({ ID: 'n1' })];\n const event = new AfterNodeSelectEventArgs(mockTree, node, false, next, prev);\n\n expect(event.WasAdditive).toBe(false);\n expect(event.NewSelection).toHaveLength(1);\n expect(event.PreviousSelection).toHaveLength(1);\n });\n});\n\ndescribe('AfterDataLoadEventArgs', () => {\n it('should calculate total nodes', () => {\n const event = new AfterDataLoadEventArgs(mockTree, true, 10, 25, 150);\n expect(event.Success).toBe(true);\n expect(event.BranchCount).toBe(10);\n expect(event.LeafCount).toBe(25);\n expect(event.TotalNodes).toBe(35);\n expect(event.LoadTimeMs).toBe(150);\n expect(event.Error).toBeUndefined();\n });\n\n it('should include error on failure', () => {\n const event = new AfterDataLoadEventArgs(mockTree, false, 0, 0, 50, 'Network error');\n expect(event.Success).toBe(false);\n expect(event.Error).toBe('Network error');\n });\n});\n\ndescribe('AfterSearchEventArgs', () => {\n it('should separate branch and leaf match counts', () => {\n const branches = [createDefaultTreeNode({ ID: 'b1', Type: 'branch' })];\n const leaves = [\n createDefaultTreeNode({ ID: 'l1', Type: 'leaf' }),\n createDefaultTreeNode({ ID: 'l2', Type: 'leaf' })\n ];\n const event = new AfterSearchEventArgs(mockTree, 'test', [...branches, ...leaves]);\n\n expect(event.SearchText).toBe('test');\n expect(event.MatchCount).toBe(3);\n expect(event.BranchMatchCount).toBe(1);\n expect(event.LeafMatchCount).toBe(2);\n expect(event.MatchedNodes).toHaveLength(3);\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-types.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tree-types.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { createDefaultTreeNode, createDefaultBranchConfig, createDefaultLeafConfig } from '../lib/models/tree-types';
|
|
3
|
-
describe('createDefaultTreeNode', () => {
|
|
4
|
-
it('should create node with all default values', () => {
|
|
5
|
-
const node = createDefaultTreeNode();
|
|
6
|
-
expect(node.ID).toBe('');
|
|
7
|
-
expect(node.Label).toBe('');
|
|
8
|
-
expect(node.Type).toBe('branch');
|
|
9
|
-
expect(node.ParentID).toBeNull();
|
|
10
|
-
expect(node.Icon).toBe('fa-solid fa-folder');
|
|
11
|
-
expect(node.Data).toEqual({});
|
|
12
|
-
expect(node.Children).toEqual([]);
|
|
13
|
-
expect(node.Expanded).toBe(false);
|
|
14
|
-
expect(node.Selected).toBe(false);
|
|
15
|
-
expect(node.Level).toBe(0);
|
|
16
|
-
expect(node.Loading).toBe(false);
|
|
17
|
-
expect(node.Visible).toBe(true);
|
|
18
|
-
expect(node.MatchesSearch).toBe(false);
|
|
19
|
-
expect(node.EntityName).toBe('');
|
|
20
|
-
});
|
|
21
|
-
it('should allow partial overrides', () => {
|
|
22
|
-
const node = createDefaultTreeNode({
|
|
23
|
-
ID: 'node-1',
|
|
24
|
-
Label: 'Test Node',
|
|
25
|
-
Type: 'leaf',
|
|
26
|
-
Level: 2
|
|
27
|
-
});
|
|
28
|
-
expect(node.ID).toBe('node-1');
|
|
29
|
-
expect(node.Label).toBe('Test Node');
|
|
30
|
-
expect(node.Type).toBe('leaf');
|
|
31
|
-
expect(node.Level).toBe(2);
|
|
32
|
-
// Defaults preserved
|
|
33
|
-
expect(node.Icon).toBe('fa-solid fa-folder');
|
|
34
|
-
expect(node.Expanded).toBe(false);
|
|
35
|
-
});
|
|
36
|
-
it('should create independent instances', () => {
|
|
37
|
-
const node1 = createDefaultTreeNode({ ID: 'a' });
|
|
38
|
-
const node2 = createDefaultTreeNode({ ID: 'b' });
|
|
39
|
-
node1.Children.push(createDefaultTreeNode({ ID: 'child' }));
|
|
40
|
-
expect(node2.Children).toHaveLength(0);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('createDefaultBranchConfig', () => {
|
|
44
|
-
it('should create config with defaults', () => {
|
|
45
|
-
const config = createDefaultBranchConfig();
|
|
46
|
-
expect(config.EntityName).toBe('');
|
|
47
|
-
expect(config.DisplayField).toBe('Name');
|
|
48
|
-
expect(config.IDField).toBe('ID');
|
|
49
|
-
expect(config.ParentIDField).toBe('ParentID');
|
|
50
|
-
expect(config.DefaultIcon).toBe('fa-solid fa-folder');
|
|
51
|
-
expect(config.OrderBy).toBe('Name ASC');
|
|
52
|
-
});
|
|
53
|
-
it('should allow overrides', () => {
|
|
54
|
-
const config = createDefaultBranchConfig({
|
|
55
|
-
EntityName: 'MJ: Query Categories',
|
|
56
|
-
DefaultIcon: 'fa-solid fa-database'
|
|
57
|
-
});
|
|
58
|
-
expect(config.EntityName).toBe('MJ: Query Categories');
|
|
59
|
-
expect(config.DefaultIcon).toBe('fa-solid fa-database');
|
|
60
|
-
expect(config.DisplayField).toBe('Name'); // default preserved
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('createDefaultLeafConfig', () => {
|
|
64
|
-
it('should create config with defaults', () => {
|
|
65
|
-
const config = createDefaultLeafConfig();
|
|
66
|
-
expect(config.EntityName).toBe('');
|
|
67
|
-
expect(config.ParentField).toBe('');
|
|
68
|
-
expect(config.DisplayField).toBe('Name');
|
|
69
|
-
expect(config.IDField).toBe('ID');
|
|
70
|
-
expect(config.DefaultIcon).toBe('fa-solid fa-file');
|
|
71
|
-
expect(config.OrderBy).toBe('Name ASC');
|
|
72
|
-
});
|
|
73
|
-
it('should allow overrides', () => {
|
|
74
|
-
const config = createDefaultLeafConfig({
|
|
75
|
-
EntityName: 'MJ: Queries',
|
|
76
|
-
ParentField: 'CategoryID'
|
|
77
|
-
});
|
|
78
|
-
expect(config.EntityName).toBe('MJ: Queries');
|
|
79
|
-
expect(config.ParentField).toBe('CategoryID');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
//# sourceMappingURL=tree-types.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-types.test.js","sourceRoot":"","sources":["../../src/__tests__/tree-types.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from 'vitest';\nimport {\n createDefaultTreeNode,\n createDefaultBranchConfig,\n createDefaultLeafConfig\n} from '../lib/models/tree-types';\nimport type { TreeNode, TreeBranchConfig, TreeLeafConfig } from '../lib/models/tree-types';\n\ndescribe('createDefaultTreeNode', () => {\n it('should create node with all default values', () => {\n const node = createDefaultTreeNode();\n expect(node.ID).toBe('');\n expect(node.Label).toBe('');\n expect(node.Type).toBe('branch');\n expect(node.ParentID).toBeNull();\n expect(node.Icon).toBe('fa-solid fa-folder');\n expect(node.Data).toEqual({});\n expect(node.Children).toEqual([]);\n expect(node.Expanded).toBe(false);\n expect(node.Selected).toBe(false);\n expect(node.Level).toBe(0);\n expect(node.Loading).toBe(false);\n expect(node.Visible).toBe(true);\n expect(node.MatchesSearch).toBe(false);\n expect(node.EntityName).toBe('');\n });\n\n it('should allow partial overrides', () => {\n const node = createDefaultTreeNode({\n ID: 'node-1',\n Label: 'Test Node',\n Type: 'leaf',\n Level: 2\n });\n expect(node.ID).toBe('node-1');\n expect(node.Label).toBe('Test Node');\n expect(node.Type).toBe('leaf');\n expect(node.Level).toBe(2);\n // Defaults preserved\n expect(node.Icon).toBe('fa-solid fa-folder');\n expect(node.Expanded).toBe(false);\n });\n\n it('should create independent instances', () => {\n const node1 = createDefaultTreeNode({ ID: 'a' });\n const node2 = createDefaultTreeNode({ ID: 'b' });\n node1.Children.push(createDefaultTreeNode({ ID: 'child' }));\n expect(node2.Children).toHaveLength(0);\n });\n});\n\ndescribe('createDefaultBranchConfig', () => {\n it('should create config with defaults', () => {\n const config = createDefaultBranchConfig();\n expect(config.EntityName).toBe('');\n expect(config.DisplayField).toBe('Name');\n expect(config.IDField).toBe('ID');\n expect(config.ParentIDField).toBe('ParentID');\n expect(config.DefaultIcon).toBe('fa-solid fa-folder');\n expect(config.OrderBy).toBe('Name ASC');\n });\n\n it('should allow overrides', () => {\n const config = createDefaultBranchConfig({\n EntityName: 'MJ: Query Categories',\n DefaultIcon: 'fa-solid fa-database'\n });\n expect(config.EntityName).toBe('MJ: Query Categories');\n expect(config.DefaultIcon).toBe('fa-solid fa-database');\n expect(config.DisplayField).toBe('Name'); // default preserved\n });\n});\n\ndescribe('createDefaultLeafConfig', () => {\n it('should create config with defaults', () => {\n const config = createDefaultLeafConfig();\n expect(config.EntityName).toBe('');\n expect(config.ParentField).toBe('');\n expect(config.DisplayField).toBe('Name');\n expect(config.IDField).toBe('ID');\n expect(config.DefaultIcon).toBe('fa-solid fa-file');\n expect(config.OrderBy).toBe('Name ASC');\n });\n\n it('should allow overrides', () => {\n const config = createDefaultLeafConfig({\n EntityName: 'MJ: Queries',\n ParentField: 'CategoryID'\n });\n expect(config.EntityName).toBe('MJ: Queries');\n expect(config.ParentField).toBe('CategoryID');\n });\n});\n"]}
|