@truedat/df 7.0.5 → 7.0.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/df",
3
- "version": "7.0.5",
3
+ "version": "7.0.7",
4
4
  "description": "Truedat Web Data Quality Module",
5
5
  "sideEffects": false,
6
6
  "jsnext:main": "src/index.js",
@@ -34,7 +34,7 @@
34
34
  "@testing-library/jest-dom": "^5.16.5",
35
35
  "@testing-library/react": "^12.0.0",
36
36
  "@testing-library/user-event": "^13.2.1",
37
- "@truedat/test": "7.0.5",
37
+ "@truedat/test": "7.0.7",
38
38
  "babel-jest": "^28.1.0",
39
39
  "babel-plugin-dynamic-import-node": "^2.3.3",
40
40
  "babel-plugin-lodash": "^3.3.4",
@@ -87,8 +87,8 @@
87
87
  },
88
88
  "dependencies": {
89
89
  "@apollo/client": "^3.7.1",
90
- "@truedat/auth": "7.0.5",
91
- "@truedat/core": "7.0.5",
90
+ "@truedat/auth": "7.0.7",
91
+ "@truedat/core": "7.0.7",
92
92
  "decode-uri-component": "^0.2.2",
93
93
  "path-to-regexp": "^1.7.0",
94
94
  "prop-types": "^15.8.1",
@@ -109,5 +109,5 @@
109
109
  "react-dom": ">= 16.8.6 < 17",
110
110
  "semantic-ui-react": ">= 2.0.3 < 2.2"
111
111
  },
112
- "gitHead": "d76d7852ddb993ed53f0266ec17858119e731bbf"
112
+ "gitHead": "f780d02b3356b69c61023b14b61400ffb779e33d"
113
113
  }
@@ -8,8 +8,8 @@ import { linkTo } from "@truedat/core/routes";
8
8
  import { CSVFileModal } from "@truedat/core/components";
9
9
  import { HistoryBackButton } from "@truedat/core/components";
10
10
  import { ConfirmModal } from "@truedat/core/components";
11
+ import Hierarchy from "@truedat/core/components/Hierarchy";
11
12
  import HierarchyCrumbs from "./HierarchyCrumbs";
12
- import Hierarchy from "./Hierarchy";
13
13
 
14
14
  const getLastId = _.flow(
15
15
  _.pathOr([], "nodes"),
@@ -38,9 +38,7 @@ DropdownField.propTypes = {
38
38
 
39
39
  const makeMapStateToProps = () => {
40
40
  const mapStateToProps = (state, props) => ({
41
- loading:
42
- (_.path("field.type")(props) == "system" && state.systemsLoading) ||
43
- (_.path("field.type")(props) == "domain" && state.domainsLoading),
41
+ loading: _.path("field.type")(props) == "system" && state.systemsLoading,
44
42
  });
45
43
  return mapStateToProps;
46
44
  };
@@ -1,316 +0,0 @@
1
- import React, { useState } from "react";
2
- import PropTypes from "prop-types";
3
- import { useIntl } from "react-intl";
4
- import { Icon, Grid, Label, Input, Form } from "semantic-ui-react";
5
- import { DescriptionInput } from "@truedat/core/components";
6
-
7
- const ListHierarchyItem = ({
8
- node,
9
- hierarchy,
10
- onChange,
11
- addNode,
12
- removeNode,
13
- isEditionMode,
14
- }) => {
15
- const { formatMessage } = useIntl();
16
- const { id, name, error, editionStatus, description } = node;
17
- const [expanded, setExpanded] = useState(false);
18
- const [mouseOver, setMouseOver] = useState(false);
19
- const generation = hierarchy.nodes.filter((n) => n.parentId == id);
20
- const hasChildren = !generation.length == 0;
21
-
22
- return (
23
- <li
24
- key={id}
25
- onMouseOver={() => setMouseOver(true)}
26
- onMouseOut={() => setMouseOver(false)}
27
- >
28
- <Icon
29
- className="li_trash"
30
- size="large"
31
- name="cut"
32
- title={formatMessage({ id: "hierarchy.delete_node" })}
33
- style={{
34
- cursor: "pointer",
35
- visibility:
36
- isEditionMode && !hasChildren && mouseOver ? "visible" : "hidden",
37
- }}
38
- onClick={() => removeNode(id)}
39
- />
40
-
41
- <div
42
- style={{
43
- display: "flex",
44
- flexDirection: "row",
45
- alignItems: "self-start",
46
- }}
47
- >
48
- <div>
49
- <Input
50
- labelPosition="left"
51
- type="text"
52
- placeholder={formatMessage({ id: "hierarchy.node" })}
53
- value={name == null ? "" : name}
54
- error={error}
55
- {...(!isEditionMode && {
56
- "data-tooltip": name == null ? "" : name,
57
- "data-position": "top left",
58
- })}
59
- className={isEditionMode ? "" : "hierarchyNode"}
60
- disabled={!isEditionMode}
61
- onChange={(_e, { value }) =>
62
- onChange(id, { name: value, description: description })
63
- }
64
- >
65
- {!hasChildren ? (
66
- isEditionMode && mouseOver && name && name != "" ? (
67
- <Label
68
- basic
69
- title={formatMessage({ id: "hierarchy.add_child" })}
70
- onClick={() => {
71
- addNode(id, null);
72
- setExpanded(true);
73
- }}
74
- >
75
- <Icon
76
- fitted
77
- name="times circle outline"
78
- style={{ transform: "rotate(45deg)", cursor: "pointer" }}
79
- color={
80
- editionStatus == "dirty"
81
- ? "orange"
82
- : editionStatus == "added"
83
- ? "green"
84
- : null
85
- }
86
- />
87
- </Label>
88
- ) : (
89
- <Label basic>
90
- <Icon
91
- fitted
92
- name="circle outline"
93
- color={
94
- editionStatus == "dirty"
95
- ? "orange"
96
- : editionStatus == "added"
97
- ? "green"
98
- : null
99
- }
100
- />
101
- </Label>
102
- )
103
- ) : (
104
- <Label
105
- basic
106
- title={
107
- expanded
108
- ? formatMessage({ id: "hierarchy.collapse_node" })
109
- : formatMessage({ id: "hierarchy.expand_node" })
110
- }
111
- >
112
- <Icon
113
- fitted
114
- onClick={() => setExpanded(!expanded)}
115
- style={{ cursor: "pointer" }}
116
- color={
117
- editionStatus == "dirty"
118
- ? "orange"
119
- : editionStatus == "added"
120
- ? "green"
121
- : null
122
- }
123
- name={expanded ? "dot circle outline" : "circle"}
124
- />
125
- </Label>
126
- )}
127
- <input />
128
- </Input>
129
- </div>
130
-
131
- <div className="description_wrapper">
132
- <DescriptionInput
133
- disabled={!isEditionMode}
134
- value={description}
135
- onChange={(_e, { value }) =>
136
- onChange(id, { name: name, description: value })
137
- }
138
- />
139
- </div>
140
- </div>
141
- {generation.length == 0 || !expanded ? null : (
142
- <ListHierarchy
143
- hierarchy={hierarchy}
144
- parentId={id}
145
- onItemChange={onChange}
146
- addNode={addNode}
147
- removeNode={removeNode}
148
- isEditionMode={isEditionMode}
149
- />
150
- )}
151
- </li>
152
- );
153
- };
154
-
155
- ListHierarchyItem.propTypes = {
156
- node: PropTypes.object,
157
- hierarchy: PropTypes.object,
158
- onChange: PropTypes.func,
159
- addNode: PropTypes.func,
160
- removeNode: PropTypes.func,
161
- isEditionMode: PropTypes.bool,
162
- };
163
-
164
- const ListHierarchy = ({
165
- hierarchy,
166
- parentId = null,
167
- onItemChange,
168
- addNode,
169
- removeNode,
170
- isEditionMode,
171
- }) => {
172
- const { formatMessage } = useIntl();
173
- const [newNodeName, setNewNodeName] = useState();
174
- const generation = hierarchy.nodes.filter(
175
- (node) => node.parentId == parentId
176
- );
177
- const addNodeTo = (id = null) => (
178
- <Form
179
- onSubmit={() => {
180
- addNode(id, newNodeName);
181
- setNewNodeName("");
182
- }}
183
- >
184
- <Input
185
- labelPosition={newNodeName && newNodeName !== "" ? "right" : null}
186
- onChange={(_e, { value }) => setNewNodeName(value)}
187
- placeholder={formatMessage({ id: "hierarchy.new_node" })}
188
- value={newNodeName}
189
- >
190
- <input />
191
-
192
- {!newNodeName || newNodeName == "" ? null : (
193
- <Label
194
- style={{ cursor: "pointer" }}
195
- onClick={() => {
196
- addNode(id, newNodeName);
197
- setNewNodeName("");
198
- }}
199
- >
200
- {formatMessage({ id: "hierarchy.add" })}
201
- </Label>
202
- )}
203
- </Input>
204
- </Form>
205
- );
206
-
207
- return generation.length == 0 ? (
208
- isEditionMode ? (
209
- <ul className="wtree expanded">
210
- <li>{addNodeTo()}</li>
211
- </ul>
212
- ) : null
213
- ) : (
214
- <ul className="wtree expanded">
215
- {generation.map((node) => {
216
- return (
217
- <ListHierarchyItem
218
- key={node.id}
219
- node={node}
220
- hierarchy={hierarchy}
221
- onChange={onItemChange}
222
- addNode={addNode}
223
- removeNode={removeNode}
224
- isEditionMode={isEditionMode}
225
- />
226
- );
227
- })}
228
- {isEditionMode ? (
229
- <li className="add_node" key={generation.length}>
230
- <div>{addNodeTo(parentId)}</div>
231
- </li>
232
- ) : null}
233
- </ul>
234
- );
235
- };
236
-
237
- ListHierarchy.propTypes = {
238
- hierarchy: PropTypes.object,
239
- parentId: PropTypes.number,
240
- onItemChange: PropTypes.func,
241
- addNode: PropTypes.func,
242
- removeNode: PropTypes.func,
243
- isEditionMode: PropTypes.bool,
244
- };
245
-
246
- const Hierarchy = ({
247
- addNode,
248
- hierarchy,
249
- parentId = null,
250
- updateMetadata,
251
- updateNode,
252
- removeNode,
253
- isEditionMode,
254
- }) => {
255
- const { formatMessage } = useIntl();
256
- return (
257
- <Grid.Column>
258
- <Grid.Row>
259
- <div
260
- style={{
261
- display: "flex",
262
- flexDirection: "row",
263
- alignItems: "self-start",
264
- }}
265
- >
266
- <Input
267
- type="text"
268
- placeholder={formatMessage({ id: "hierarchy.name" })}
269
- disabled={!isEditionMode}
270
- {...(!isEditionMode && {
271
- "data-tooltip": hierarchy.name == null ? "" : hierarchy.name,
272
- "data-position": "top left",
273
- })}
274
- style={isEditionMode ? {} : { opacity: 1 }}
275
- value={hierarchy.name}
276
- onChange={(_e, { value }) =>
277
- updateMetadata({
278
- name: value,
279
- description: hierarchy.description,
280
- })
281
- }
282
- />
283
- <div className="description_wrapper">
284
- <DescriptionInput
285
- disabled={!isEditionMode}
286
- value={hierarchy.description}
287
- onChange={(_e, { value }) =>
288
- updateMetadata({ name: hierarchy.name, description: value })
289
- }
290
- />
291
- </div>
292
- </div>
293
- </Grid.Row>
294
- <ListHierarchy
295
- hierarchy={hierarchy}
296
- parentId={parentId}
297
- onItemChange={updateNode}
298
- addNode={addNode}
299
- removeNode={removeNode}
300
- isEditionMode={isEditionMode}
301
- />
302
- </Grid.Column>
303
- );
304
- };
305
-
306
- Hierarchy.propTypes = {
307
- addNode: PropTypes.func,
308
- hierarchy: PropTypes.object,
309
- parentId: PropTypes.number,
310
- updateMetadata: PropTypes.func,
311
- updateNode: PropTypes.func,
312
- removeNode: PropTypes.func,
313
- isEditionMode: PropTypes.bool,
314
- };
315
-
316
- export default Hierarchy;
@@ -1,42 +0,0 @@
1
- import React from "react";
2
- import { render } from "@truedat/test/render";
3
- import Hierarchy from "../Hierarchy";
4
- import en from "../../../messages/en";
5
-
6
- const hierarchy = {
7
- id: 1,
8
- name: "Baggins",
9
- description: "bar",
10
- nodes: [
11
- {
12
- id: 11,
13
- name: "Fosco",
14
- parentId: null,
15
- },
16
- {
17
- id: 12,
18
- name: "Fosco children",
19
- parentId: 11,
20
- },
21
- ],
22
- };
23
- const props = { hierarchy: hierarchy, isEditionMode: false };
24
-
25
- const renderOpts = {
26
- messages: { en: en },
27
- };
28
-
29
- describe("<Hierarchy />", () => {
30
- it("matches the last snapshot with edition mode false", () => {
31
- const { container } = render(<Hierarchy {...props} />, renderOpts);
32
- expect(container).toMatchSnapshot();
33
- });
34
-
35
- it("matches snapshot with edition mode", () => {
36
- const { container } = render(
37
- <Hierarchy {...{ ...props, isEditionMode: true }} />,
38
- renderOpts
39
- );
40
- expect(container).toMatchSnapshot();
41
- });
42
- });
@@ -1,189 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`<Hierarchy /> matches snapshot with edition mode 1`] = `
4
- <div>
5
- <div
6
- class="column"
7
- >
8
- <div
9
- class="row"
10
- >
11
- <div
12
- style="display: flex; flex-direction: row; align-items: self-start;"
13
- >
14
- <div
15
- class="ui input"
16
- >
17
- <input
18
- placeholder="Hierarchy name"
19
- type="text"
20
- value="Baggins"
21
- />
22
- </div>
23
- <div
24
- class="description_wrapper"
25
- >
26
- <div
27
- class="description"
28
- >
29
- bar
30
- </div>
31
- </div>
32
- </div>
33
- </div>
34
- <ul
35
- class="wtree expanded"
36
- >
37
- <li>
38
- <i
39
- aria-hidden="true"
40
- class="cut large icon li_trash"
41
- style="cursor: pointer; visibility: hidden;"
42
- title="Delete node"
43
- />
44
- <div
45
- style="display: flex; flex-direction: row; align-items: self-start;"
46
- >
47
- <div>
48
- <div
49
- class="ui left labeled input"
50
- >
51
- <div
52
- class="ui basic label"
53
- title="Expand"
54
- >
55
- <i
56
- aria-hidden="true"
57
- class="circle fitted icon"
58
- style="cursor: pointer;"
59
- />
60
- </div>
61
- <input
62
- placeholder="Node"
63
- type="text"
64
- value="Fosco"
65
- />
66
- </div>
67
- </div>
68
- <div
69
- class="description_wrapper"
70
- >
71
- <div
72
- class="description"
73
- >
74
- Add description
75
- </div>
76
- </div>
77
- </div>
78
- </li>
79
- <li
80
- class="add_node"
81
- >
82
- <div>
83
- <form
84
- class="ui form"
85
- >
86
- <div
87
- class="ui input"
88
- >
89
- <input
90
- placeholder="New node"
91
- type="text"
92
- value=""
93
- />
94
- </div>
95
- </form>
96
- </div>
97
- </li>
98
- </ul>
99
- </div>
100
- </div>
101
- `;
102
-
103
- exports[`<Hierarchy /> matches the last snapshot with edition mode false 1`] = `
104
- <div>
105
- <div
106
- class="column"
107
- >
108
- <div
109
- class="row"
110
- >
111
- <div
112
- style="display: flex; flex-direction: row; align-items: self-start;"
113
- >
114
- <div
115
- class="ui disabled input"
116
- data-position="top left"
117
- data-tooltip="Baggins"
118
- style="opacity: 1;"
119
- >
120
- <input
121
- disabled=""
122
- placeholder="Hierarchy name"
123
- tabindex="-1"
124
- type="text"
125
- value="Baggins"
126
- />
127
- </div>
128
- <div
129
- class="description_wrapper"
130
- >
131
- <div
132
- class="description disabled"
133
- >
134
- bar
135
- </div>
136
- </div>
137
- </div>
138
- </div>
139
- <ul
140
- class="wtree expanded"
141
- >
142
- <li>
143
- <i
144
- aria-hidden="true"
145
- class="cut large icon li_trash"
146
- style="cursor: pointer; visibility: hidden;"
147
- title="Delete node"
148
- />
149
- <div
150
- style="display: flex; flex-direction: row; align-items: self-start;"
151
- >
152
- <div>
153
- <div
154
- class="ui disabled left labeled input hierarchyNode"
155
- data-position="top left"
156
- data-tooltip="Fosco"
157
- >
158
- <div
159
- class="ui basic label"
160
- title="Expand"
161
- >
162
- <i
163
- aria-hidden="true"
164
- class="circle fitted icon"
165
- style="cursor: pointer;"
166
- />
167
- </div>
168
- <input
169
- disabled=""
170
- placeholder="Node"
171
- tabindex="-1"
172
- type="text"
173
- value="Fosco"
174
- />
175
- </div>
176
- </div>
177
- <div
178
- class="description_wrapper"
179
- >
180
- <div
181
- class="description disabled"
182
- />
183
- </div>
184
- </div>
185
- </li>
186
- </ul>
187
- </div>
188
- </div>
189
- `;