@axinom/mosaic-ui 0.65.4 → 0.65.5
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/components/Utils/Postgraphile/CreateConnectionRenderer.d.ts +1 -1
- package/dist/components/Utils/Postgraphile/CreateConnectionRenderer.d.ts.map +1 -1
- package/dist/index.es.js +3 -3
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/Utils/Postgraphile/CreateConnectionRenderer.spec.ts +26 -115
- package/src/components/Utils/Postgraphile/CreateConnectionRenderer.tsx +4 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axinom/mosaic-ui",
|
|
3
|
-
"version": "0.65.
|
|
3
|
+
"version": "0.65.5",
|
|
4
4
|
"description": "UI components for building Axinom Mosaic applications",
|
|
5
5
|
"author": "Axinom",
|
|
6
6
|
"license": "PROPRIETARY",
|
|
@@ -112,5 +112,5 @@
|
|
|
112
112
|
"publishConfig": {
|
|
113
113
|
"access": "public"
|
|
114
114
|
},
|
|
115
|
-
"gitHead": "
|
|
115
|
+
"gitHead": "2dccfe1c1492cbb54be6b6e9af3602e717cdce57"
|
|
116
116
|
}
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
import { TagsRenderer } from '../../List';
|
|
2
1
|
import { createConnectionRenderer } from './CreateConnectionRenderer';
|
|
3
2
|
|
|
4
|
-
jest.mock('../../List', () => ({
|
|
5
|
-
TagsRenderer: jest.fn(),
|
|
6
|
-
}));
|
|
7
|
-
|
|
8
|
-
const mockTagsRenderer = TagsRenderer as jest.MockedFunction<
|
|
9
|
-
typeof TagsRenderer
|
|
10
|
-
>;
|
|
11
|
-
|
|
12
3
|
interface TestConnection {
|
|
13
4
|
nodes: { id: string; name: string }[];
|
|
14
5
|
}
|
|
@@ -18,70 +9,7 @@ interface StringConnection {
|
|
|
18
9
|
}
|
|
19
10
|
|
|
20
11
|
describe('createConnectionRenderer', () => {
|
|
21
|
-
|
|
22
|
-
jest.clearAllMocks();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
describe('with renderAsTags = true (default)', () => {
|
|
26
|
-
it('should call TagsRenderer with mapped values when renderAsTags is true', () => {
|
|
27
|
-
const mockReturnValue = 'Mocked Tags JSX Element';
|
|
28
|
-
mockTagsRenderer.mockReturnValue(mockReturnValue as any);
|
|
29
|
-
|
|
30
|
-
const connection: TestConnection = {
|
|
31
|
-
nodes: [
|
|
32
|
-
{ id: '1', name: 'Item 1' },
|
|
33
|
-
{ id: '2', name: 'Item 2' },
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const selector = (item: { id: string; name: string }) => item.name;
|
|
38
|
-
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
39
|
-
const result = renderer(connection);
|
|
40
|
-
|
|
41
|
-
expect(mockTagsRenderer).toHaveBeenCalledWith(['Item 1', 'Item 2']);
|
|
42
|
-
expect(result).toBe(mockReturnValue);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should throw error when nodes is undefined', () => {
|
|
46
|
-
const connection = { nodes: undefined } as unknown as TestConnection;
|
|
47
|
-
const selector = (item: { id: string; name: string }) => item.name;
|
|
48
|
-
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
49
|
-
|
|
50
|
-
expect(() => renderer(connection)).toThrow();
|
|
51
|
-
expect(mockTagsRenderer).not.toHaveBeenCalled();
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should throw error when value is null', () => {
|
|
55
|
-
const selector = (item: { id: string; name: string }) => item.name;
|
|
56
|
-
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
57
|
-
|
|
58
|
-
expect(() => renderer(null)).toThrow();
|
|
59
|
-
expect(mockTagsRenderer).not.toHaveBeenCalled();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('should throw error when value is undefined', () => {
|
|
63
|
-
const selector = (item: { id: string; name: string }) => item.name;
|
|
64
|
-
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
65
|
-
|
|
66
|
-
expect(() => renderer(undefined)).toThrow();
|
|
67
|
-
expect(mockTagsRenderer).not.toHaveBeenCalled();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should call TagsRenderer with empty array when nodes is empty', () => {
|
|
71
|
-
const mockReturnValue = 'Empty Tags JSX Element';
|
|
72
|
-
mockTagsRenderer.mockReturnValue(mockReturnValue as any);
|
|
73
|
-
|
|
74
|
-
const connection: TestConnection = { nodes: [] };
|
|
75
|
-
const selector = (item: { id: string; name: string }) => item.name;
|
|
76
|
-
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
77
|
-
const result = renderer(connection);
|
|
78
|
-
|
|
79
|
-
expect(mockTagsRenderer).toHaveBeenCalledWith([]);
|
|
80
|
-
expect(result).toBe(mockReturnValue);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('with renderAsTags = false', () => {
|
|
12
|
+
describe('basic functionality', () => {
|
|
85
13
|
it('should return comma-separated string using selector', () => {
|
|
86
14
|
const connection: TestConnection = {
|
|
87
15
|
nodes: [
|
|
@@ -92,13 +20,9 @@ describe('createConnectionRenderer', () => {
|
|
|
92
20
|
};
|
|
93
21
|
|
|
94
22
|
const selector = (item: { id: string; name: string }) => item.name;
|
|
95
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
96
|
-
selector,
|
|
97
|
-
false,
|
|
98
|
-
);
|
|
23
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
99
24
|
const result = renderer(connection);
|
|
100
25
|
|
|
101
|
-
expect(mockTagsRenderer).not.toHaveBeenCalled();
|
|
102
26
|
expect(result).toBe('Item 1, Item 2, Item 3');
|
|
103
27
|
});
|
|
104
28
|
|
|
@@ -108,10 +32,7 @@ describe('createConnectionRenderer', () => {
|
|
|
108
32
|
};
|
|
109
33
|
|
|
110
34
|
const selector = (item: string) => item;
|
|
111
|
-
const renderer = createConnectionRenderer<StringConnection>(
|
|
112
|
-
selector,
|
|
113
|
-
false,
|
|
114
|
-
);
|
|
35
|
+
const renderer = createConnectionRenderer<StringConnection>(selector);
|
|
115
36
|
const result = renderer(connection);
|
|
116
37
|
|
|
117
38
|
expect(result).toBe('apple, banana, cherry');
|
|
@@ -127,10 +48,7 @@ describe('createConnectionRenderer', () => {
|
|
|
127
48
|
|
|
128
49
|
const selector = (item: { id: string; name: string }, index: number) =>
|
|
129
50
|
`${index + 1}. ${item.name} (${item.id})`;
|
|
130
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
131
|
-
selector,
|
|
132
|
-
false,
|
|
133
|
-
);
|
|
51
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
134
52
|
const result = renderer(connection);
|
|
135
53
|
|
|
136
54
|
expect(result).toBe('1. Item 1 (1), 2. Item 2 (2)');
|
|
@@ -139,10 +57,7 @@ describe('createConnectionRenderer', () => {
|
|
|
139
57
|
it('should return empty string when nodes array is empty', () => {
|
|
140
58
|
const connection: TestConnection = { nodes: [] };
|
|
141
59
|
const selector = (item: { id: string; name: string }) => item.name;
|
|
142
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
143
|
-
selector,
|
|
144
|
-
false,
|
|
145
|
-
);
|
|
60
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
146
61
|
const result = renderer(connection);
|
|
147
62
|
|
|
148
63
|
expect(result).toBe('');
|
|
@@ -160,25 +75,33 @@ describe('createConnectionRenderer', () => {
|
|
|
160
75
|
};
|
|
161
76
|
|
|
162
77
|
const selector = (item: { id: number; value: number }) => item.value;
|
|
163
|
-
const renderer = createConnectionRenderer<NumberConnection>(
|
|
164
|
-
selector,
|
|
165
|
-
false,
|
|
166
|
-
);
|
|
78
|
+
const renderer = createConnectionRenderer<NumberConnection>(selector);
|
|
167
79
|
const result = renderer(connection);
|
|
168
80
|
|
|
169
81
|
expect(result).toBe('100, 200');
|
|
170
82
|
});
|
|
171
83
|
|
|
172
|
-
it('should throw error when connection.nodes is undefined
|
|
84
|
+
it('should throw error when connection.nodes is undefined', () => {
|
|
173
85
|
const connection = { nodes: undefined } as unknown as TestConnection;
|
|
174
86
|
const selector = (item: { id: string; name: string }) => item.name;
|
|
175
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
176
|
-
selector,
|
|
177
|
-
false,
|
|
178
|
-
);
|
|
87
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
179
88
|
|
|
180
89
|
expect(() => renderer(connection)).toThrow();
|
|
181
90
|
});
|
|
91
|
+
|
|
92
|
+
it('should throw error when value is null', () => {
|
|
93
|
+
const selector = (item: { id: string; name: string }) => item.name;
|
|
94
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
95
|
+
|
|
96
|
+
expect(() => renderer(null)).toThrow();
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('should throw error when value is undefined', () => {
|
|
100
|
+
const selector = (item: { id: string; name: string }) => item.name;
|
|
101
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
102
|
+
|
|
103
|
+
expect(() => renderer(undefined)).toThrow();
|
|
104
|
+
});
|
|
182
105
|
});
|
|
183
106
|
|
|
184
107
|
describe('edge cases', () => {
|
|
@@ -188,10 +111,7 @@ describe('createConnectionRenderer', () => {
|
|
|
188
111
|
};
|
|
189
112
|
|
|
190
113
|
const selector = (item: string) => item;
|
|
191
|
-
const renderer = createConnectionRenderer<StringConnection>(
|
|
192
|
-
selector,
|
|
193
|
-
false,
|
|
194
|
-
);
|
|
114
|
+
const renderer = createConnectionRenderer<StringConnection>(selector);
|
|
195
115
|
const result = renderer(connection);
|
|
196
116
|
|
|
197
117
|
expect(result).toBe('item, with comma, item with "quotes", normal item');
|
|
@@ -207,10 +127,7 @@ describe('createConnectionRenderer', () => {
|
|
|
207
127
|
};
|
|
208
128
|
|
|
209
129
|
const selector = (item: { id: string; name: string }) => item.name;
|
|
210
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
211
|
-
selector,
|
|
212
|
-
false,
|
|
213
|
-
);
|
|
130
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
214
131
|
const result = renderer(connection);
|
|
215
132
|
|
|
216
133
|
expect(result).toBe(', Item 2, ');
|
|
@@ -222,10 +139,7 @@ describe('createConnectionRenderer', () => {
|
|
|
222
139
|
};
|
|
223
140
|
|
|
224
141
|
const selector = (item: { id: string; name: string }) => item.name;
|
|
225
|
-
const renderer = createConnectionRenderer<TestConnection>(
|
|
226
|
-
selector,
|
|
227
|
-
false,
|
|
228
|
-
);
|
|
142
|
+
const renderer = createConnectionRenderer<TestConnection>(selector);
|
|
229
143
|
const result = renderer(connection);
|
|
230
144
|
|
|
231
145
|
expect(result).toBe('Single Item');
|
|
@@ -247,10 +161,7 @@ describe('createConnectionRenderer', () => {
|
|
|
247
161
|
|
|
248
162
|
const selector = (item: { customField: number; label: string }) =>
|
|
249
163
|
`${item.label}: ${item.customField}`;
|
|
250
|
-
const renderer = createConnectionRenderer<CustomConnection>(
|
|
251
|
-
selector,
|
|
252
|
-
false,
|
|
253
|
-
);
|
|
164
|
+
const renderer = createConnectionRenderer<CustomConnection>(selector);
|
|
254
165
|
const result = renderer(connection);
|
|
255
166
|
|
|
256
167
|
expect(result).toBe('Custom 1: 42, Custom 2: 84');
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { TagsRenderer } from '../../List';
|
|
3
2
|
|
|
4
3
|
interface Connection {
|
|
5
4
|
nodes: unknown[];
|
|
@@ -19,14 +18,14 @@ export type SelectorFunction<T> = (
|
|
|
19
18
|
*/
|
|
20
19
|
export function createConnectionRenderer<T extends Connection>(
|
|
21
20
|
selector: SelectorFunction<T['nodes'][number]>,
|
|
22
|
-
renderAsTags = true,
|
|
21
|
+
// renderAsTags = true,
|
|
23
22
|
): (val: unknown) => string | ReactNode {
|
|
24
23
|
const ConnectionRenderer = (val: unknown): string | ReactNode => {
|
|
25
24
|
const value = val as T;
|
|
26
25
|
|
|
27
|
-
if (renderAsTags) {
|
|
28
|
-
|
|
29
|
-
}
|
|
26
|
+
// if (renderAsTags) {
|
|
27
|
+
// return TagsRenderer(value.nodes.map(selector));
|
|
28
|
+
// }
|
|
30
29
|
|
|
31
30
|
return value.nodes.map(selector).join(', ');
|
|
32
31
|
};
|