@urbanos/react-discovery-ui 2.1.43 → 2.1.45
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/README.md +2 -2
- package/lib/components/collapsable-box/collapsable-box.js +8 -1
- package/lib/components/data-view/data-view.js +211 -165
- package/lib/components/data-view/data-view.scss +9 -1
- package/lib/components/data-view/data-view.test.js +24 -30
- package/lib/components/dataset-dictionary/dataset-dictionary.js +132 -76
- package/lib/components/dataset-dictionary/dataset-dictionary.scss +4 -2
- package/lib/components/dataset-dictionary/dataset-dictionary.test.js +18 -27
- package/lib/components/dataset-metadata/dataset-metadata.js +180 -146
- package/lib/components/dataset-metadata/dataset-metadata.test.js +23 -12
- package/lib/components/dataset-preview/dataset-preview.js +0 -1
- package/lib/pages/query-view/query-view.test.js +0 -1
- package/lib/pages/user-profile-view/user-profile-view.js +106 -27
- package/lib/pages/user-profile-view/user-profile-view.test.js +4 -7
- package/package.json +2 -2
|
@@ -7,156 +7,190 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
require("./dataset-metadata.scss");
|
|
10
|
-
var _reactTable =
|
|
11
|
-
require("react-table/react-table.css");
|
|
10
|
+
var _reactTable = require("@tanstack/react-table");
|
|
12
11
|
var _collapsableBox = _interopRequireDefault(require("../../components/collapsable-box"));
|
|
13
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
13
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
15
|
-
function
|
|
16
|
-
function
|
|
17
|
-
function
|
|
18
|
-
function
|
|
19
|
-
function
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
function _default() {
|
|
29
|
-
_classCallCheck(this, _default);
|
|
30
|
-
return _callSuper(this, _default, arguments);
|
|
31
|
-
}
|
|
32
|
-
_inherits(_default, _Component);
|
|
33
|
-
return _createClass(_default, [{
|
|
34
|
-
key: "render",
|
|
35
|
-
value: function render() {
|
|
36
|
-
var dataset = this.props.dataset;
|
|
37
|
-
if (!this.props.dataset) {
|
|
38
|
-
return /*#__PURE__*/_react.default.createElement("div", null);
|
|
39
|
-
}
|
|
40
|
-
var referenceUrls = dataset.referenceUrls || [];
|
|
41
|
-
var data = [{
|
|
42
|
-
Field: 'Maintainer',
|
|
43
|
-
Value: mailto(dataset.contactEmail, dataset.contactName)
|
|
44
|
-
}, {
|
|
45
|
-
Field: 'Last Updated',
|
|
46
|
-
Value: dataset.modified
|
|
47
|
-
}, {
|
|
48
|
-
Field: 'Data Last Ingested',
|
|
49
|
-
Value: dataset.lastUpdatedDate
|
|
50
|
-
}, {
|
|
51
|
-
Field: 'Rights',
|
|
52
|
-
Value: dataset.rights
|
|
53
|
-
}, {
|
|
54
|
-
Field: 'Spatial',
|
|
55
|
-
Value: dataset.spatial
|
|
56
|
-
}, {
|
|
57
|
-
Field: 'Temporal',
|
|
58
|
-
Value: dataset.temporal
|
|
59
|
-
}, {
|
|
60
|
-
Field: 'Release Date',
|
|
61
|
-
Value: dataset.issuedDate
|
|
62
|
-
}, {
|
|
63
|
-
Field: 'Frequency',
|
|
64
|
-
Value: dataset.publishFrequency
|
|
65
|
-
}, {
|
|
66
|
-
Field: 'Data Dictionary URL',
|
|
67
|
-
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
68
|
-
role: "link",
|
|
69
|
-
href: dataset.describedByUrl,
|
|
70
|
-
target: "_blank"
|
|
71
|
-
}, dataset.describedByUrl)
|
|
72
|
-
}, {
|
|
73
|
-
Field: 'Data Dictionary Type',
|
|
74
|
-
Value: dataset.describedByMimeType
|
|
75
|
-
}, {
|
|
76
|
-
Field: 'Collection',
|
|
77
|
-
Value: dataset.parentDataset
|
|
78
|
-
}, {
|
|
79
|
-
Field: 'Language',
|
|
80
|
-
Value: dataset.language
|
|
81
|
-
}, {
|
|
82
|
-
Field: 'Homepage URL',
|
|
83
|
-
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
84
|
-
role: "link",
|
|
85
|
-
href: dataset.homepage,
|
|
86
|
-
target: "_blank"
|
|
87
|
-
}, dataset.homepage)
|
|
88
|
-
}, {
|
|
89
|
-
Field: 'Related Documents',
|
|
90
|
-
Value: referenceUrls.map(function (url) {
|
|
91
|
-
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("a", {
|
|
92
|
-
role: "link",
|
|
93
|
-
href: url,
|
|
94
|
-
target: "_blank"
|
|
95
|
-
}, url));
|
|
96
|
-
})
|
|
97
|
-
}, {
|
|
98
|
-
Field: 'Source URL',
|
|
99
|
-
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
100
|
-
role: "link",
|
|
101
|
-
href: dataset.sourceUrl,
|
|
102
|
-
target: "_blank"
|
|
103
|
-
}, dataset.sourceUrl)
|
|
104
|
-
}, {
|
|
105
|
-
Field: 'Source Type',
|
|
106
|
-
Value: dataset.sourceType
|
|
107
|
-
}, {
|
|
108
|
-
Field: 'License',
|
|
109
|
-
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
110
|
-
role: "link",
|
|
111
|
-
href: dataset.license,
|
|
112
|
-
target: "_blank"
|
|
113
|
-
}, dataset.license)
|
|
114
|
-
}, {
|
|
115
|
-
Field: 'Category',
|
|
116
|
-
Value: dataset.catagories
|
|
117
|
-
}, {
|
|
118
|
-
Field: 'Count - Downloads',
|
|
119
|
-
Value: dataset.downloads
|
|
120
|
-
}, {
|
|
121
|
-
Field: 'Count - API Queries',
|
|
122
|
-
Value: dataset.queries
|
|
123
|
-
}, {
|
|
124
|
-
Field: 'Access Level',
|
|
125
|
-
Value: dataset.accessLevel
|
|
126
|
-
}, {
|
|
127
|
-
Field: 'Table Name',
|
|
128
|
-
Value: dataset.systemName
|
|
129
|
-
}];
|
|
130
|
-
var columns = [{
|
|
131
|
-
Header: 'Field',
|
|
132
|
-
accessor: 'Field',
|
|
133
|
-
headerClassName: 'table-header',
|
|
134
|
-
width: 160
|
|
135
|
-
}, {
|
|
136
|
-
Header: 'Value',
|
|
137
|
-
accessor: 'Value',
|
|
14
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
15
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
16
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
17
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
18
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
19
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
20
|
+
var MetadataTable = function MetadataTable(_ref) {
|
|
21
|
+
var data = _ref.data;
|
|
22
|
+
var columns = (0, _react.useMemo)(function () {
|
|
23
|
+
return [{
|
|
24
|
+
header: 'Field',
|
|
25
|
+
accessorKey: 'Field',
|
|
26
|
+
meta: {
|
|
138
27
|
headerClassName: 'table-header'
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
28
|
+
},
|
|
29
|
+
size: 160
|
|
30
|
+
}, {
|
|
31
|
+
header: 'Value',
|
|
32
|
+
accessorKey: 'Value',
|
|
33
|
+
meta: {
|
|
34
|
+
headerClassName: 'table-header'
|
|
35
|
+
},
|
|
36
|
+
cell: function cell(info) {
|
|
37
|
+
var _info$getValue;
|
|
38
|
+
return (_info$getValue = info.getValue()) !== null && _info$getValue !== void 0 ? _info$getValue : null;
|
|
39
|
+
}
|
|
40
|
+
}];
|
|
41
|
+
}, []);
|
|
42
|
+
var _React$useState = _react.default.useState([{
|
|
43
|
+
id: 'Field',
|
|
44
|
+
desc: false
|
|
45
|
+
}]),
|
|
46
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
47
|
+
sorting = _React$useState2[0],
|
|
48
|
+
setSorting = _React$useState2[1];
|
|
49
|
+
var table = (0, _reactTable.useReactTable)({
|
|
50
|
+
data: data,
|
|
51
|
+
columns: columns,
|
|
52
|
+
state: {
|
|
53
|
+
sorting: sorting
|
|
54
|
+
},
|
|
55
|
+
onSortingChange: setSorting,
|
|
56
|
+
getCoreRowModel: (0, _reactTable.getCoreRowModel)(),
|
|
57
|
+
getSortedRowModel: (0, _reactTable.getSortedRowModel)()
|
|
58
|
+
});
|
|
59
|
+
return /*#__PURE__*/_react.default.createElement("table", null, /*#__PURE__*/_react.default.createElement("thead", null, table.getHeaderGroups().map(function (headerGroup) {
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
61
|
+
key: headerGroup.id
|
|
62
|
+
}, headerGroup.headers.map(function (header) {
|
|
63
|
+
var _header$column$column;
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement("th", {
|
|
65
|
+
key: header.id,
|
|
66
|
+
scope: "col",
|
|
67
|
+
className: ((_header$column$column = header.column.columnDef.meta) === null || _header$column$column === void 0 ? void 0 : _header$column$column.headerClassName) || '',
|
|
68
|
+
style: {
|
|
69
|
+
width: header.column.getSize() !== 150 ? "".concat(header.column.getSize(), "px") : undefined,
|
|
70
|
+
cursor: 'pointer'
|
|
71
|
+
},
|
|
72
|
+
onClick: header.column.getToggleSortingHandler(),
|
|
73
|
+
"aria-sort": header.column.getIsSorted() === 'asc' ? 'ascending' : header.column.getIsSorted() === 'desc' ? 'descending' : 'none',
|
|
74
|
+
tabIndex: 0,
|
|
75
|
+
onKeyDown: function onKeyDown(e) {
|
|
76
|
+
if (e.key === 'Enter' || e.key === ' ') header.column.getToggleSortingHandler()(e);
|
|
77
|
+
}
|
|
78
|
+
}, (0, _reactTable.flexRender)(header.column.columnDef.header, header.getContext()), header.column.getIsSorted() === 'asc' ? ' ↑' : header.column.getIsSorted() === 'desc' ? ' ↓' : '');
|
|
79
|
+
}));
|
|
80
|
+
})), /*#__PURE__*/_react.default.createElement("tbody", null, table.getRowModel().rows.map(function (row) {
|
|
81
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
82
|
+
key: row.id
|
|
83
|
+
}, row.getVisibleCells().map(function (cell) {
|
|
84
|
+
return /*#__PURE__*/_react.default.createElement("td", {
|
|
85
|
+
key: cell.id
|
|
86
|
+
}, (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext()));
|
|
87
|
+
}));
|
|
88
|
+
})));
|
|
89
|
+
};
|
|
90
|
+
var _default = exports.default = function _default(_ref2) {
|
|
91
|
+
var dataset = _ref2.dataset;
|
|
92
|
+
if (!dataset) return /*#__PURE__*/_react.default.createElement("div", null);
|
|
93
|
+
var referenceUrls = dataset.referenceUrls || [];
|
|
94
|
+
var data = [{
|
|
95
|
+
Field: 'Maintainer',
|
|
96
|
+
Value: mailto(dataset.contactEmail, dataset.contactName)
|
|
97
|
+
}, {
|
|
98
|
+
Field: 'Last Updated',
|
|
99
|
+
Value: dataset.modified
|
|
100
|
+
}, {
|
|
101
|
+
Field: 'Data Last Ingested',
|
|
102
|
+
Value: dataset.lastUpdatedDate
|
|
103
|
+
}, {
|
|
104
|
+
Field: 'Rights',
|
|
105
|
+
Value: dataset.rights
|
|
106
|
+
}, {
|
|
107
|
+
Field: 'Spatial',
|
|
108
|
+
Value: dataset.spatial
|
|
109
|
+
}, {
|
|
110
|
+
Field: 'Temporal',
|
|
111
|
+
Value: dataset.temporal
|
|
112
|
+
}, {
|
|
113
|
+
Field: 'Release Date',
|
|
114
|
+
Value: dataset.issuedDate
|
|
115
|
+
}, {
|
|
116
|
+
Field: 'Frequency',
|
|
117
|
+
Value: dataset.publishFrequency
|
|
118
|
+
}, {
|
|
119
|
+
Field: 'Data Dictionary URL',
|
|
120
|
+
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
121
|
+
role: "link",
|
|
122
|
+
href: dataset.describedByUrl,
|
|
123
|
+
target: "_blank"
|
|
124
|
+
}, dataset.describedByUrl)
|
|
125
|
+
}, {
|
|
126
|
+
Field: 'Data Dictionary Type',
|
|
127
|
+
Value: dataset.describedByMimeType
|
|
128
|
+
}, {
|
|
129
|
+
Field: 'Collection',
|
|
130
|
+
Value: dataset.parentDataset
|
|
131
|
+
}, {
|
|
132
|
+
Field: 'Language',
|
|
133
|
+
Value: dataset.language
|
|
134
|
+
}, {
|
|
135
|
+
Field: 'Homepage URL',
|
|
136
|
+
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
137
|
+
role: "link",
|
|
138
|
+
href: dataset.homepage,
|
|
139
|
+
target: "_blank"
|
|
140
|
+
}, dataset.homepage)
|
|
141
|
+
}, {
|
|
142
|
+
Field: 'Related Documents',
|
|
143
|
+
Value: referenceUrls.map(function (url) {
|
|
144
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
145
|
+
key: url
|
|
146
|
+
}, /*#__PURE__*/_react.default.createElement("a", {
|
|
147
|
+
role: "link",
|
|
148
|
+
href: url,
|
|
149
|
+
target: "_blank"
|
|
150
|
+
}, url));
|
|
151
|
+
})
|
|
152
|
+
}, {
|
|
153
|
+
Field: 'Source URL',
|
|
154
|
+
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
155
|
+
role: "link",
|
|
156
|
+
href: dataset.sourceUrl,
|
|
157
|
+
target: "_blank"
|
|
158
|
+
}, dataset.sourceUrl)
|
|
159
|
+
}, {
|
|
160
|
+
Field: 'Source Type',
|
|
161
|
+
Value: dataset.sourceType
|
|
162
|
+
}, {
|
|
163
|
+
Field: 'License',
|
|
164
|
+
Value: /*#__PURE__*/_react.default.createElement("a", {
|
|
165
|
+
role: "link",
|
|
166
|
+
href: dataset.license,
|
|
167
|
+
target: "_blank"
|
|
168
|
+
}, dataset.license)
|
|
169
|
+
}, {
|
|
170
|
+
Field: 'Category',
|
|
171
|
+
Value: dataset.catagories
|
|
172
|
+
}, {
|
|
173
|
+
Field: 'Count - Downloads',
|
|
174
|
+
Value: dataset.downloads
|
|
175
|
+
}, {
|
|
176
|
+
Field: 'Count - API Queries',
|
|
177
|
+
Value: dataset.queries
|
|
178
|
+
}, {
|
|
179
|
+
Field: 'Access Level',
|
|
180
|
+
Value: dataset.accessLevel
|
|
181
|
+
}, {
|
|
182
|
+
Field: 'Table Name',
|
|
183
|
+
Value: dataset.systemName
|
|
184
|
+
}];
|
|
185
|
+
return /*#__PURE__*/_react.default.createElement("dataset-metadata", {
|
|
186
|
+
class: "dataset-metadata"
|
|
187
|
+
}, /*#__PURE__*/_react.default.createElement(_collapsableBox.default, {
|
|
188
|
+
title: "Additional Information",
|
|
189
|
+
expanded: true
|
|
190
|
+
}, /*#__PURE__*/_react.default.createElement(MetadataTable, {
|
|
191
|
+
data: data
|
|
192
|
+
})));
|
|
193
|
+
};
|
|
160
194
|
function mailto(email, name) {
|
|
161
195
|
if (email) {
|
|
162
196
|
return /*#__PURE__*/_react.default.createElement("a", {
|
|
@@ -1,24 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mount } from 'enzyme'
|
|
2
2
|
import DatasetMetadata from './dataset-metadata'
|
|
3
3
|
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
6
|
+
writable: true,
|
|
7
|
+
value: jest.fn().mockImplementation(query => ({
|
|
8
|
+
matches: true
|
|
9
|
+
}))
|
|
10
|
+
})
|
|
11
|
+
})
|
|
12
|
+
|
|
4
13
|
describe('additional info element', () => {
|
|
5
14
|
test('card to render text based on props', () => {
|
|
6
|
-
const subject =
|
|
7
|
-
const
|
|
8
|
-
|
|
15
|
+
const subject = mount(<DatasetMetadata dataset={{ spatial: 'Ohio' }} />)
|
|
16
|
+
const cells = subject.find('td')
|
|
17
|
+
const spatialValue = cells.filterWhere(td => td.text() === 'Ohio')
|
|
18
|
+
expect(spatialValue.length).toBe(1)
|
|
9
19
|
})
|
|
10
20
|
|
|
11
21
|
test('card renders mailto link correctly', () => {
|
|
12
|
-
const subject =
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
expect(
|
|
22
|
+
const subject = mount(<DatasetMetadata dataset={{ contactName: 'John', contactEmail: 'john@smith.com' }} />)
|
|
23
|
+
const link = subject.find('a[href="mailto:john@smith.com"]')
|
|
24
|
+
expect(link.length).toBe(1)
|
|
25
|
+
expect(link.text()).toBe('John')
|
|
16
26
|
})
|
|
17
27
|
|
|
18
28
|
test('referenceUrls renders correctly', () => {
|
|
19
|
-
const subject =
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
expect(
|
|
29
|
+
const subject = mount(<DatasetMetadata dataset={{ referenceUrls: ['https://www.google.com', 'https://www.facebook.com'] }} />)
|
|
30
|
+
const googleLink = subject.find('a[href="https://www.google.com"]')
|
|
31
|
+
const facebookLink = subject.find('a[href="https://www.facebook.com"]')
|
|
32
|
+
expect(googleLink.length).toBe(1)
|
|
33
|
+
expect(facebookLink.length).toBe(1)
|
|
23
34
|
})
|
|
24
35
|
})
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
require("./dataset-preview.scss");
|
|
10
|
-
require("react-table/react-table.css");
|
|
11
10
|
var _collapsableBox = _interopRequireDefault(require("../../components/collapsable-box"));
|
|
12
11
|
var _dataView = _interopRequireDefault(require("../data-view"));
|
|
13
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -3,7 +3,6 @@ import { shallow } from 'enzyme'
|
|
|
3
3
|
import QueryView from './query-view'
|
|
4
4
|
import QueryForm from '../../components/query-form'
|
|
5
5
|
import LoadingElement from '../../components/generic-elements/loading-element'
|
|
6
|
-
import ReactTable from 'react-table'
|
|
7
6
|
|
|
8
7
|
// Currently, shallow rendering is not compatible with React hooks.
|
|
9
8
|
// We've utilized a strategy found here https://blog.carbonfive.com/2019/08/05/shallow-testing-hooks-with-enzyme/
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _auth0LoginZone = _interopRequireDefault(require("../../components/auth0-login-zone"));
|
|
10
|
-
var _reactTable =
|
|
10
|
+
var _reactTable = require("@tanstack/react-table");
|
|
11
11
|
var _reactModal = _interopRequireDefault(require("react-modal"));
|
|
12
12
|
var _reactAriaModal = _interopRequireDefault(require("react-aria-modal"));
|
|
13
13
|
var _DeleteForever = _interopRequireDefault(require("@material-ui/icons/DeleteForever"));
|
|
@@ -69,25 +69,34 @@ var UserProfileView = function UserProfileView(props) {
|
|
|
69
69
|
}
|
|
70
70
|
_reactModal.default.setAppElement('*');
|
|
71
71
|
var columns = [{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
header: 'Title',
|
|
73
|
+
accessorKey: 'title',
|
|
74
|
+
meta: {
|
|
75
|
+
headerClassName: 'table-header'
|
|
76
|
+
}
|
|
75
77
|
}, {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
header: 'Date Created',
|
|
79
|
+
accessorKey: 'created',
|
|
80
|
+
meta: {
|
|
81
|
+
headerClassName: 'table-header'
|
|
82
|
+
}
|
|
79
83
|
}, {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
header: 'Date Modified',
|
|
85
|
+
accessorKey: 'updated',
|
|
86
|
+
meta: {
|
|
87
|
+
headerClassName: 'table-header'
|
|
88
|
+
}
|
|
83
89
|
}, {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
id: 'delete',
|
|
91
|
+
header: '',
|
|
92
|
+
meta: {
|
|
93
|
+
headerClassName: 'table-header',
|
|
94
|
+
className: 'centered'
|
|
95
|
+
},
|
|
96
|
+
size: 50,
|
|
97
|
+
enableSorting: false,
|
|
98
|
+
cell: function cell(_ref) {
|
|
99
|
+
var row = _ref.row;
|
|
91
100
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
92
101
|
className: "delete-icon",
|
|
93
102
|
tabIndex: "0",
|
|
@@ -95,11 +104,11 @@ var UserProfileView = function UserProfileView(props) {
|
|
|
95
104
|
role: "button",
|
|
96
105
|
onKeyDownCapture: function onKeyDownCapture(event) {
|
|
97
106
|
if (event.key === ' ' || event.key === 'Enter') {
|
|
98
|
-
openDeleteModalForVisualization(original.id);
|
|
107
|
+
openDeleteModalForVisualization(row.original.id);
|
|
99
108
|
}
|
|
100
109
|
},
|
|
101
110
|
onClick: function onClick() {
|
|
102
|
-
openDeleteModalForVisualization(original.id);
|
|
111
|
+
openDeleteModalForVisualization(row.original.id);
|
|
103
112
|
}
|
|
104
113
|
}, /*#__PURE__*/_react.default.createElement(_DeleteForever.default, null));
|
|
105
114
|
}
|
|
@@ -139,16 +148,86 @@ var UserProfileView = function UserProfileView(props) {
|
|
|
139
148
|
className: "workspaces-header"
|
|
140
149
|
}, "Saved Workspaces"))), /*#__PURE__*/_react.default.createElement("div", {
|
|
141
150
|
id: "user-visualizations-table"
|
|
142
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
143
|
-
|
|
151
|
+
}, /*#__PURE__*/_react.default.createElement(VisualizationsTable, {
|
|
152
|
+
visualizations: visualizations,
|
|
144
153
|
columns: columns,
|
|
145
|
-
|
|
154
|
+
loading: loading
|
|
155
|
+
}))), modal);
|
|
156
|
+
};
|
|
157
|
+
var VisualizationsTable = function VisualizationsTable(_ref2) {
|
|
158
|
+
var visualizations = _ref2.visualizations,
|
|
159
|
+
columns = _ref2.columns,
|
|
160
|
+
loading = _ref2.loading;
|
|
161
|
+
var _useState5 = (0, _react.useState)([{
|
|
146
162
|
id: 'updated',
|
|
147
163
|
desc: true
|
|
148
|
-
}],
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
164
|
+
}]),
|
|
165
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
166
|
+
sorting = _useState6[0],
|
|
167
|
+
setSorting = _useState6[1];
|
|
168
|
+
var table = (0, _reactTable.useReactTable)({
|
|
169
|
+
data: visualizations,
|
|
170
|
+
columns: columns,
|
|
171
|
+
state: {
|
|
172
|
+
sorting: sorting
|
|
173
|
+
},
|
|
174
|
+
onSortingChange: setSorting,
|
|
175
|
+
getCoreRowModel: (0, _reactTable.getCoreRowModel)(),
|
|
176
|
+
getSortedRowModel: (0, _reactTable.getSortedRowModel)(),
|
|
177
|
+
getPaginationRowModel: (0, _reactTable.getPaginationRowModel)(),
|
|
178
|
+
initialState: {
|
|
179
|
+
pagination: {
|
|
180
|
+
pageSize: 10
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
if (loading) {
|
|
185
|
+
return /*#__PURE__*/_react.default.createElement(_loadingElement.default, {
|
|
186
|
+
className: "spinner"
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("table", null, /*#__PURE__*/_react.default.createElement("thead", null, table.getHeaderGroups().map(function (headerGroup) {
|
|
190
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
191
|
+
key: headerGroup.id
|
|
192
|
+
}, headerGroup.headers.map(function (header) {
|
|
193
|
+
var _header$column$column;
|
|
194
|
+
return /*#__PURE__*/_react.default.createElement("th", {
|
|
195
|
+
key: header.id,
|
|
196
|
+
scope: "col",
|
|
197
|
+
className: ((_header$column$column = header.column.columnDef.meta) === null || _header$column$column === void 0 ? void 0 : _header$column$column.headerClassName) || '',
|
|
198
|
+
style: {
|
|
199
|
+
width: header.column.getSize() !== 150 ? "".concat(header.column.getSize(), "px") : undefined,
|
|
200
|
+
cursor: header.column.getCanSort() ? 'pointer' : undefined
|
|
201
|
+
},
|
|
202
|
+
onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined,
|
|
203
|
+
"aria-sort": header.column.getIsSorted() === 'asc' ? 'ascending' : header.column.getIsSorted() === 'desc' ? 'descending' : undefined
|
|
204
|
+
}, header.isPlaceholder ? null : (0, _reactTable.flexRender)(header.column.columnDef.header, header.getContext()), header.column.getIsSorted() === 'asc' ? ' ↑' : header.column.getIsSorted() === 'desc' ? ' ↓' : '');
|
|
205
|
+
}));
|
|
206
|
+
})), /*#__PURE__*/_react.default.createElement("tbody", null, table.getRowModel().rows.map(function (row, i) {
|
|
207
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
208
|
+
key: row.id,
|
|
209
|
+
className: i % 2 === 0 ? 'striped-row' : ''
|
|
210
|
+
}, row.getVisibleCells().map(function (cell) {
|
|
211
|
+
var _cell$column$columnDe;
|
|
212
|
+
return /*#__PURE__*/_react.default.createElement("td", {
|
|
213
|
+
key: cell.id,
|
|
214
|
+
className: ((_cell$column$columnDe = cell.column.columnDef.meta) === null || _cell$column$columnDe === void 0 ? void 0 : _cell$column$columnDe.className) || ''
|
|
215
|
+
}, (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext()));
|
|
216
|
+
}));
|
|
217
|
+
}))), table.getPageCount() > 1 && /*#__PURE__*/_react.default.createElement("div", {
|
|
218
|
+
className: "pagination"
|
|
219
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
220
|
+
onClick: function onClick() {
|
|
221
|
+
return table.previousPage();
|
|
222
|
+
},
|
|
223
|
+
disabled: !table.getCanPreviousPage(),
|
|
224
|
+
"aria-label": "Previous page"
|
|
225
|
+
}, '<'), /*#__PURE__*/_react.default.createElement("span", null, "Page ", table.getState().pagination.pageIndex + 1, " of ", table.getPageCount()), /*#__PURE__*/_react.default.createElement("button", {
|
|
226
|
+
onClick: function onClick() {
|
|
227
|
+
return table.nextPage();
|
|
228
|
+
},
|
|
229
|
+
disabled: !table.getCanNextPage(),
|
|
230
|
+
"aria-label": "Next page"
|
|
231
|
+
}, '>')));
|
|
153
232
|
};
|
|
154
233
|
var _default = exports.default = UserProfileView;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { shallow, mount } from 'enzyme'
|
|
2
2
|
import UserProfileView from './user-profile-view'
|
|
3
3
|
import LoadingElement from '../../components/generic-elements/loading-element'
|
|
4
|
-
import ReactTable from 'react-table'
|
|
5
4
|
import ErrorComponent from '../../components/generic-elements/error-component'
|
|
6
5
|
import AriaModal from 'react-aria-modal'
|
|
7
6
|
import createAuth0Client from '@auth0/auth0-spa-js'
|
|
@@ -39,14 +38,12 @@ describe('user profile view', () => {
|
|
|
39
38
|
visualizations: visualizations,
|
|
40
39
|
auth: { isAuthenticated: true },
|
|
41
40
|
loadSuccess: true
|
|
42
|
-
})
|
|
41
|
+
}, mount)
|
|
43
42
|
})
|
|
44
43
|
|
|
45
44
|
it("provides a table with the visualizations' information", () => {
|
|
46
|
-
expect(subject.find(
|
|
47
|
-
expect(subject.find(
|
|
48
|
-
expect(subject.find(ReactTable).props().data[0].id).toEqual('id1')
|
|
49
|
-
expect(subject.find(ReactTable).props().data[1].id).toEqual('id2')
|
|
45
|
+
expect(subject.find('#user-visualizations-table table')).toHaveLength(1)
|
|
46
|
+
expect(subject.find('#user-visualizations-table tbody tr')).toHaveLength(2)
|
|
50
47
|
})
|
|
51
48
|
})
|
|
52
49
|
|
|
@@ -57,7 +54,7 @@ describe('user profile view', () => {
|
|
|
57
54
|
|
|
58
55
|
it('shows an error message', () => {
|
|
59
56
|
expect(subject.find(ErrorComponent)).toHaveLength(1)
|
|
60
|
-
expect(subject.find(
|
|
57
|
+
expect(subject.find('#user-visualizations-table')).toHaveLength(0)
|
|
61
58
|
})
|
|
62
59
|
})
|
|
63
60
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@urbanos/react-discovery-ui",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.45",
|
|
4
4
|
"description": "React component for dataset discovery UI",
|
|
5
5
|
"main": "./lib/ReactDiscoveryUI.js",
|
|
6
6
|
"repository": {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"@babel/runtime": "^7.26.7",
|
|
23
23
|
"@material-ui/core": "^4.12.4",
|
|
24
24
|
"@material-ui/icons": "^4.11.3",
|
|
25
|
+
"@tanstack/react-table": "^8.21.3",
|
|
25
26
|
"@testing-library/jest-dom": "^5.17.0",
|
|
26
27
|
"@testing-library/react": "^12.1.5",
|
|
27
28
|
"@trendmicro/react-dropdown": "^1.4.0",
|
|
@@ -62,7 +63,6 @@
|
|
|
62
63
|
"react-share": "^2.4.0",
|
|
63
64
|
"react-simple-code-editor": "^0.11.3",
|
|
64
65
|
"react-svg-inline": "^2.1.1",
|
|
65
|
-
"react-table": "~6.10.3",
|
|
66
66
|
"react-tooltip": "3.11.1",
|
|
67
67
|
"redux": "^4.2.1",
|
|
68
68
|
"redux-saga": "^0.16.2",
|