datajunction-ui 0.0.1-a44.dev0 → 0.0.1-a44.dev1
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/package.json +1 -1
- package/src/app/pages/NodePage/LinkDimensionPopover.jsx +8 -7
- package/src/app/pages/NodePage/NodeColumnTab.jsx +85 -72
- package/src/app/pages/NodePage/__tests__/LinkDimensionPopover.test.jsx +3 -2
- package/src/app/pages/NodePage/__tests__/NodeColumnTab.test.jsx +4 -0
- package/src/app/pages/Root/index.tsx +12 -4
package/package.json
CHANGED
|
@@ -8,6 +8,7 @@ import { displayMessageAfterSubmit } from '../../../utils/form';
|
|
|
8
8
|
|
|
9
9
|
export default function LinkDimensionPopover({
|
|
10
10
|
column,
|
|
11
|
+
referencedDimensionNode,
|
|
11
12
|
node,
|
|
12
13
|
options,
|
|
13
14
|
onSubmit,
|
|
@@ -28,15 +29,15 @@ export default function LinkDimensionPopover({
|
|
|
28
29
|
};
|
|
29
30
|
}, [setPopoverAnchor]);
|
|
30
31
|
|
|
31
|
-
const columnDimension =
|
|
32
|
+
const columnDimension = referencedDimensionNode;
|
|
32
33
|
|
|
33
34
|
const handleSubmit = async (
|
|
34
35
|
{ node, column, dimension },
|
|
35
36
|
{ setSubmitting, setStatus },
|
|
36
37
|
) => {
|
|
37
38
|
setSubmitting(false);
|
|
38
|
-
if (
|
|
39
|
-
await unlinkDimension(node, column,
|
|
39
|
+
if (referencedDimensionNode && dimension === 'Remove') {
|
|
40
|
+
await unlinkDimension(node, column, referencedDimensionNode, setStatus);
|
|
40
41
|
} else {
|
|
41
42
|
await linkDimension(node, column, dimension, setStatus);
|
|
42
43
|
}
|
|
@@ -93,7 +94,7 @@ export default function LinkDimensionPopover({
|
|
|
93
94
|
column: column.name,
|
|
94
95
|
node: node.name,
|
|
95
96
|
dimension: '',
|
|
96
|
-
currentDimension:
|
|
97
|
+
currentDimension: referencedDimensionNode,
|
|
97
98
|
}}
|
|
98
99
|
onSubmit={handleSubmit}
|
|
99
100
|
>
|
|
@@ -110,10 +111,10 @@ export default function LinkDimensionPopover({
|
|
|
110
111
|
placeholder="Select dimension to link"
|
|
111
112
|
className=""
|
|
112
113
|
defaultValue={
|
|
113
|
-
|
|
114
|
+
referencedDimensionNode
|
|
114
115
|
? {
|
|
115
|
-
value:
|
|
116
|
-
label:
|
|
116
|
+
value: referencedDimensionNode,
|
|
117
|
+
label: referencedDimensionNode,
|
|
117
118
|
}
|
|
118
119
|
: ''
|
|
119
120
|
}
|
|
@@ -12,6 +12,8 @@ export default function NodeColumnTab({ node, djClient }) {
|
|
|
12
12
|
const [attributes, setAttributes] = useState([]);
|
|
13
13
|
const [dimensions, setDimensions] = useState([]);
|
|
14
14
|
const [columns, setColumns] = useState([]);
|
|
15
|
+
const [links, setLinks] = useState([]);
|
|
16
|
+
|
|
15
17
|
useEffect(() => {
|
|
16
18
|
const fetchData = async () => {
|
|
17
19
|
setColumns(await djClient.columns(node));
|
|
@@ -88,92 +90,103 @@ export default function NodeColumnTab({ node, djClient }) {
|
|
|
88
90
|
};
|
|
89
91
|
|
|
90
92
|
const columnList = columns => {
|
|
91
|
-
return columns.map(col =>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
aria-hidden="false"
|
|
107
|
-
>
|
|
108
|
-
{col.display_name}
|
|
109
|
-
</span>
|
|
110
|
-
</td>
|
|
111
|
-
<td>
|
|
112
|
-
<span
|
|
113
|
-
className={`node_type__${
|
|
114
|
-
node.type === 'cube' ? col.type : 'transform'
|
|
115
|
-
} badge node_type`}
|
|
93
|
+
return columns.map(col => {
|
|
94
|
+
const dimensionLinks = (links.length > 0 ? links : node?.dimension_links)
|
|
95
|
+
.map(link => [
|
|
96
|
+
link.dimension.name,
|
|
97
|
+
Object.entries(link.foreign_keys).filter(
|
|
98
|
+
entry => entry[0] === node.name + '.' + col.name,
|
|
99
|
+
),
|
|
100
|
+
])
|
|
101
|
+
.filter(keys => keys[1].length >= 1);
|
|
102
|
+
const referencedDimensionNode =
|
|
103
|
+
dimensionLinks.length > 0 ? dimensionLinks[0][0] : null;
|
|
104
|
+
return (
|
|
105
|
+
<tr key={col.name}>
|
|
106
|
+
<td
|
|
107
|
+
className="text-start"
|
|
116
108
|
role="columnheader"
|
|
117
|
-
aria-label="
|
|
109
|
+
aria-label="ColumnName"
|
|
118
110
|
aria-hidden="false"
|
|
119
111
|
>
|
|
120
|
-
{col.
|
|
121
|
-
</
|
|
122
|
-
</td>
|
|
123
|
-
{node.type !== 'cube' ? (
|
|
112
|
+
{col.name}
|
|
113
|
+
</td>
|
|
124
114
|
<td>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
<
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
115
|
+
<span
|
|
116
|
+
className=""
|
|
117
|
+
role="columnheader"
|
|
118
|
+
aria-label="ColumnDisplayName"
|
|
119
|
+
aria-hidden="false"
|
|
120
|
+
>
|
|
121
|
+
{col.display_name}
|
|
122
|
+
</span>
|
|
123
|
+
</td>
|
|
124
|
+
<td>
|
|
125
|
+
<span
|
|
126
|
+
className={`node_type__${
|
|
127
|
+
node.type === 'cube' ? col.type : 'transform'
|
|
128
|
+
} badge node_type`}
|
|
129
|
+
role="columnheader"
|
|
130
|
+
aria-label="ColumnType"
|
|
131
|
+
aria-hidden="false"
|
|
132
|
+
>
|
|
133
|
+
{col.type}
|
|
134
|
+
</span>
|
|
144
135
|
</td>
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
136
|
+
{node.type !== 'cube' ? (
|
|
137
|
+
<td>
|
|
138
|
+
{referencedDimensionNode !== null ? (
|
|
139
|
+
<a href={`/nodes/${referencedDimensionNode}`}>
|
|
140
|
+
{referencedDimensionNode}
|
|
141
|
+
</a>
|
|
142
|
+
) : (
|
|
143
|
+
''
|
|
144
|
+
)}
|
|
145
|
+
<LinkDimensionPopover
|
|
146
|
+
column={col}
|
|
147
|
+
referencedDimensionNode={referencedDimensionNode}
|
|
148
|
+
node={node}
|
|
149
|
+
options={dimensions}
|
|
150
|
+
onSubmit={async () => {
|
|
151
|
+
const res = await djClient.node(node.name);
|
|
152
|
+
setColumns(res.columns);
|
|
153
|
+
setLinks(res.dimension_links);
|
|
154
|
+
}}
|
|
155
|
+
/>
|
|
156
|
+
</td>
|
|
157
|
+
) : (
|
|
158
|
+
''
|
|
159
|
+
)}
|
|
160
|
+
{node.type !== 'cube' ? (
|
|
161
|
+
<td>
|
|
162
|
+
{showColumnAttributes(col)}
|
|
163
|
+
<EditColumnPopover
|
|
164
|
+
column={col}
|
|
165
|
+
node={node}
|
|
166
|
+
options={attributes}
|
|
167
|
+
onSubmit={async () => {
|
|
168
|
+
const res = await djClient.node(node.name);
|
|
169
|
+
setColumns(res.columns);
|
|
170
|
+
}}
|
|
171
|
+
/>
|
|
172
|
+
</td>
|
|
173
|
+
) : (
|
|
174
|
+
''
|
|
175
|
+
)}
|
|
149
176
|
<td>
|
|
150
|
-
{
|
|
151
|
-
<
|
|
177
|
+
{showColumnPartition(col)}
|
|
178
|
+
<PartitionColumnPopover
|
|
152
179
|
column={col}
|
|
153
180
|
node={node}
|
|
154
|
-
options={attributes}
|
|
155
181
|
onSubmit={async () => {
|
|
156
182
|
const res = await djClient.node(node.name);
|
|
157
183
|
setColumns(res.columns);
|
|
158
184
|
}}
|
|
159
185
|
/>
|
|
160
186
|
</td>
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
<td>
|
|
165
|
-
{showColumnPartition(col)}
|
|
166
|
-
<PartitionColumnPopover
|
|
167
|
-
column={col}
|
|
168
|
-
node={node}
|
|
169
|
-
onSubmit={async () => {
|
|
170
|
-
const res = await djClient.node(node.name);
|
|
171
|
-
setColumns(res.columns);
|
|
172
|
-
}}
|
|
173
|
-
/>
|
|
174
|
-
</td>
|
|
175
|
-
</tr>
|
|
176
|
-
));
|
|
187
|
+
</tr>
|
|
188
|
+
);
|
|
189
|
+
});
|
|
177
190
|
};
|
|
178
191
|
|
|
179
192
|
return (
|
|
@@ -42,6 +42,7 @@ describe('<LinkDimensionPopover />', () => {
|
|
|
42
42
|
<DJClientContext.Provider value={mockDjClient}>
|
|
43
43
|
<LinkDimensionPopover
|
|
44
44
|
column={column}
|
|
45
|
+
referencedDimensionNode={'default.dimension1'}
|
|
45
46
|
node={node}
|
|
46
47
|
options={options}
|
|
47
48
|
onSubmit={onSubmitMock}
|
|
@@ -94,7 +95,6 @@ describe('<LinkDimensionPopover />', () => {
|
|
|
94
95
|
};
|
|
95
96
|
const node = { name: 'default.node1' };
|
|
96
97
|
const options = [
|
|
97
|
-
{ value: 'Remove', label: '[Remove dimension link]' },
|
|
98
98
|
{ value: 'default.dimension1', label: 'Dimension 1' },
|
|
99
99
|
{ value: 'default.dimension2', label: 'Dimension 2' },
|
|
100
100
|
];
|
|
@@ -117,6 +117,7 @@ describe('<LinkDimensionPopover />', () => {
|
|
|
117
117
|
<DJClientContext.Provider value={mockDjClient}>
|
|
118
118
|
<LinkDimensionPopover
|
|
119
119
|
column={column}
|
|
120
|
+
referencedDimensionNode={'default.dimension1'}
|
|
120
121
|
node={node}
|
|
121
122
|
options={options}
|
|
122
123
|
onSubmit={onSubmitMock}
|
|
@@ -148,7 +149,7 @@ describe('<LinkDimensionPopover />', () => {
|
|
|
148
149
|
|
|
149
150
|
// Click on the 'Remove' option and save
|
|
150
151
|
fireEvent.keyDown(linkDimension.firstChild, { key: 'ArrowDown' });
|
|
151
|
-
fireEvent.click(screen.getByText('[Remove
|
|
152
|
+
fireEvent.click(screen.getByText('[Remove Dimension]'));
|
|
152
153
|
fireEvent.click(getByText('Save'));
|
|
153
154
|
getByText('Save').click();
|
|
154
155
|
|
|
@@ -98,6 +98,10 @@ describe('<NodeColumnTab />', () => {
|
|
|
98
98
|
'default.contractor.contractor_id = default.repair_orders.contractor_id',
|
|
99
99
|
join_cardinality: 'one_to_one',
|
|
100
100
|
role: 'contractor',
|
|
101
|
+
foreign_keys: {
|
|
102
|
+
'default.repair_orders.contractor_id':
|
|
103
|
+
'default.contractor.contractor_id',
|
|
104
|
+
},
|
|
101
105
|
},
|
|
102
106
|
],
|
|
103
107
|
};
|
|
@@ -24,11 +24,19 @@ export function Root() {
|
|
|
24
24
|
<div className="container d-flex align-items-center justify-content-between">
|
|
25
25
|
<div className="header">
|
|
26
26
|
<div className="logo">
|
|
27
|
-
<a
|
|
27
|
+
<a
|
|
28
|
+
href={'/'}
|
|
29
|
+
style={{
|
|
30
|
+
textTransform: 'none',
|
|
31
|
+
textDecoration: 'none',
|
|
32
|
+
color: '#000',
|
|
33
|
+
}}
|
|
34
|
+
>
|
|
28
35
|
<h2>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
<DJLogo />
|
|
37
|
+
Data<b>Junction</b>
|
|
38
|
+
</h2>
|
|
39
|
+
</a>
|
|
32
40
|
</div>
|
|
33
41
|
<Search />
|
|
34
42
|
<div className="menu">
|