@civicactions/cmsds-open-data-components 0.20.0-alpha.2 → 1.1.0-alpha.1

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.
@@ -7,8 +7,8 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.isSelected = isSelected;
11
10
  exports["default"] = void 0;
11
+ exports.isSelected = isSelected;
12
12
 
13
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
14
 
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _react2 = require("@testing-library/react");
8
+
9
+ require("@testing-library/jest-dom/extend-expect");
10
+
11
+ var _index = _interopRequireDefault(require("./index"));
12
+
13
+ /**
14
+ * @jest-environment jsdom
15
+ */
16
+ describe('<ResourceConditionalField />', function () {
17
+ test('Placeholder', function () {
18
+ expect(true).toBeTruthy();
19
+ });
20
+ });
@@ -9,15 +9,33 @@ exports["default"] = void 0;
9
9
 
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
11
 
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
12
14
  var _react = _interopRequireDefault(require("react"));
13
15
 
14
16
  var _designSystem = require("@cmsgov/design-system");
15
17
 
18
+ var _reactDatepicker = _interopRequireDefault(require("react-datepicker"));
19
+
16
20
  var _close = _interopRequireDefault(require("../../assets/icons/close"));
17
21
 
22
+ require("react-datepicker/dist/react-datepicker.css");
23
+
24
+ function convertUTCToLocalDate(date) {
25
+ if (!date) {
26
+ return date;
27
+ }
28
+
29
+ date = new Date(date);
30
+ date = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
31
+ return date;
32
+ }
33
+
18
34
  function buildOperatorOptions(type) {
19
35
  switch (type) {
20
- case 'text':
36
+ case 'text': // Will change from text to string in future update
37
+
38
+ case 'string':
21
39
  return [{
22
40
  label: "Is",
23
41
  value: "="
@@ -32,8 +50,30 @@ function buildOperatorOptions(type) {
32
50
  value: "in"
33
51
  }];
34
52
 
53
+ case 'date':
54
+ return [{
55
+ label: "Is",
56
+ value: "="
57
+ }, {
58
+ label: "Is Not",
59
+ value: "<>"
60
+ }, {
61
+ label: "Greater Than",
62
+ value: ">"
63
+ }, {
64
+ label: "Less Than",
65
+ value: "<"
66
+ }];
67
+
35
68
  default:
36
- return [];
69
+ // These 2 should be safe for all data types
70
+ return [{
71
+ label: "Is",
72
+ value: "="
73
+ }, {
74
+ label: "Is Not",
75
+ value: "<>"
76
+ }];
37
77
  }
38
78
  }
39
79
 
@@ -54,22 +94,87 @@ var ResourceConditionField = function ResourceConditionField(_ref) {
54
94
  schema = _ref.schema,
55
95
  update = _ref.update;
56
96
  var fields = schema.fields;
57
- var operatorOptions = [];
58
- var columnOptions = Object.keys(fields).map(function (key) {
97
+
98
+ var _React$useState = _react["default"].useState(data.value ? new Date(data.value) : new Date(Date.now())),
99
+ _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
100
+ startDate = _React$useState2[0],
101
+ setStartDate = _React$useState2[1];
102
+
103
+ var _React$useState3 = _react["default"].useState(Object.keys(fields).map(function (key) {
59
104
  return {
60
105
  label: fields[key].description ? fields[key].description : key,
61
106
  value: key
62
107
  };
63
- });
64
-
65
- if (data.property) {
66
- operatorOptions = buildOperatorOptions(fields[data.property].type).map(function (opt) {
67
- return {
68
- label: opt.label,
69
- value: opt.value
70
- };
71
- });
72
- }
108
+ })),
109
+ _React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
110
+ propertyOptions = _React$useState4[0],
111
+ setPropertyOptions = _React$useState4[1];
112
+
113
+ var _React$useState5 = _react["default"].useState(data.property),
114
+ _React$useState6 = (0, _slicedToArray2["default"])(_React$useState5, 2),
115
+ property = _React$useState6[0],
116
+ setProperty = _React$useState6[1];
117
+
118
+ var _React$useState7 = _react["default"].useState(data.operator),
119
+ _React$useState8 = (0, _slicedToArray2["default"])(_React$useState7, 2),
120
+ operator = _React$useState8[0],
121
+ setOperator = _React$useState8[1];
122
+
123
+ var _React$useState9 = _react["default"].useState([{
124
+ label: '--',
125
+ value: ''
126
+ }]),
127
+ _React$useState10 = (0, _slicedToArray2["default"])(_React$useState9, 2),
128
+ operatorOptions = _React$useState10[0],
129
+ setOperatorOptions = _React$useState10[1];
130
+
131
+ var _React$useState11 = _react["default"].useState(data.value),
132
+ _React$useState12 = (0, _slicedToArray2["default"])(_React$useState11, 2),
133
+ value = _React$useState12[0],
134
+ setValue = _React$useState12[1];
135
+
136
+ _react["default"].useEffect(function () {
137
+ if (property) {
138
+ var opOptions = buildOperatorOptions(fields[property].mysql_type ? fields[property].mysql_type : fields[property].type).map(function (opt) {
139
+ return {
140
+ label: opt.label,
141
+ value: opt.value
142
+ };
143
+ });
144
+ update(index, 'property', property);
145
+
146
+ if (!operator) {
147
+ setOperator(opOptions[0].value);
148
+ }
149
+
150
+ setOperatorOptions(opOptions);
151
+ } else {
152
+ update(index, 'property', property);
153
+ setOperator('');
154
+ setValue('');
155
+ setOperatorOptions([{
156
+ label: '--',
157
+ value: ''
158
+ }]);
159
+ }
160
+ }, [property, operator]);
161
+
162
+ _react["default"].useEffect(function () {
163
+ if (operator) {
164
+ update(index, 'operator', operator);
165
+ } else {
166
+ update(index, 'operator', '');
167
+ }
168
+ }, [operator]);
169
+
170
+ _react["default"].useEffect(function () {
171
+ if (value) {
172
+ console.log(value);
173
+ update(index, 'value', value);
174
+ } else {
175
+ update(index, 'value', '');
176
+ }
177
+ }, [value]);
73
178
 
74
179
  return /*#__PURE__*/_react["default"].createElement("fieldset", null, /*#__PURE__*/_react["default"].createElement("div", {
75
180
  className: "ds-l-form-row"
@@ -77,38 +182,48 @@ var ResourceConditionField = function ResourceConditionField(_ref) {
77
182
  options: [{
78
183
  label: 'Select column',
79
184
  value: ''
80
- }].concat((0, _toConsumableArray2["default"])(columnOptions)),
81
- value: data.property,
185
+ }].concat((0, _toConsumableArray2["default"])(propertyOptions)),
186
+ value: property,
82
187
  onChange: function onChange(e) {
83
- return update(index, 'property', e.target.value);
188
+ return setProperty(e.target.value);
84
189
  },
85
190
  label: "Filter column",
86
191
  labelClassName: "ds-u-margin-top--0 ds-u-visibility--screen-reader",
87
192
  name: "column_name_".concat(index),
88
193
  className: "ds-l-col--6"
89
194
  }), /*#__PURE__*/_react["default"].createElement(_designSystem.Dropdown, {
90
- options: [{
91
- label: '--',
92
- value: ''
93
- }].concat((0, _toConsumableArray2["default"])(operatorOptions)),
94
- value: data.operator,
95
- disabled: !data.property ? true : false,
195
+ options: (0, _toConsumableArray2["default"])(operatorOptions),
196
+ value: operator,
197
+ disabled: !property ? true : false,
96
198
  onChange: function onChange(e) {
97
- return update(index, 'operator', e.target.value);
199
+ return setOperator(e.target.value);
98
200
  },
99
201
  labelClassName: "ds-u-margin-top--0 ds-u-visibility--screen-reader",
100
202
  size: "small",
101
- label: "Filter Operator",
203
+ label: "Filter operator",
102
204
  name: "filter_operator_".concat(index),
103
205
  className: "ds-l-col--3"
104
206
  })), /*#__PURE__*/_react["default"].createElement("div", {
105
207
  className: "ds-l-form-row"
106
- }, /*#__PURE__*/_react["default"].createElement(_designSystem.TextField, {
107
- hint: data.operator.toLowerCase() === 'in' ? "Separate values with a comma." : '',
108
- value: cleanText(data.value, data.operator),
109
- disabled: !data.property || !data.operator ? true : false,
208
+ }, property && (fields[property].mysql_type === 'date' || fields[property].type === 'date') ? /*#__PURE__*/_react["default"].createElement("div", {
209
+ className: "ds-u-clearfix ds-l-col--11"
210
+ }, /*#__PURE__*/_react["default"].createElement(_reactDatepicker["default"], {
211
+ selected: convertUTCToLocalDate(startDate),
212
+ onChange: function onChange(date) {
213
+ console.log(date);
214
+ setStartDate(date);
215
+ setValue(date.toJSON().slice(0, 10));
216
+ },
217
+ showMonthDropdown: true,
218
+ showYearDropdown: true,
219
+ dropdownMode: "select",
220
+ className: "ds-c-field"
221
+ })) : /*#__PURE__*/_react["default"].createElement(_designSystem.TextField, {
222
+ hint: operator.toLowerCase() === 'in' ? "Separate values with a comma." : '',
223
+ value: cleanText(value, operator),
224
+ disabled: !property ? true : false,
110
225
  onChange: function onChange(e) {
111
- return update(index, 'value', e.target.value);
226
+ return setValue(e.target.value);
112
227
  },
113
228
  label: "Filter value",
114
229
  labelClassName: "ds-u-margin-top--0",
@@ -117,6 +232,7 @@ var ResourceConditionField = function ResourceConditionField(_ref) {
117
232
  }), /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
118
233
  className: "ds-l-col--1",
119
234
  variation: "transparent",
235
+ "aria-label": "Remove filter",
120
236
  onClick: function onClick(e) {
121
237
  e.preventDefault();
122
238
  remove(index);
@@ -63,23 +63,41 @@ var ResourceFilter = function ResourceFilter(_ref) {
63
63
  setConditions(newConditions);
64
64
  }
65
65
 
66
- function removeAll() {
67
- setFormConditions([_objectSpread({}, defaultCondition)]);
68
- setConditions([]);
69
- }
70
-
71
66
  function updateByIndex(index, key, value) {
72
67
  var newConditions = (0, _toConsumableArray2["default"])(formConditions);
73
68
  newConditions[index][key] = value;
74
69
  setFormConditions(newConditions);
75
70
  }
76
71
 
72
+ function removeAll() {
73
+ setFormConditions([]);
74
+ setConditions([]);
75
+ }
76
+
77
77
  function submitFilters(e) {
78
78
  e.preventDefault();
79
79
 
80
80
  if (formConditions.length) {
81
- var updatedConditions = formConditions.map(function (cond) {
81
+ var updatedConditions = formConditions.filter(function (cond) {
82
+ if (cond.property) {
83
+ return cond;
84
+ }
85
+
86
+ return false;
87
+ }).map(function (cond) {
88
+ if (cond.operator === '=' || cond.operator === '<>') {
89
+ if (Array.isArray(cond.value)) {
90
+ cond.value = cond.value.join();
91
+ }
92
+
93
+ cond.value = cond.value.replace(/(^\%+|\%+$)/mg, '');
94
+ }
95
+
82
96
  if (cond.operator.toLowerCase() === 'like') {
97
+ if (Array.isArray(cond.value)) {
98
+ cond.value = cond.value.join();
99
+ }
100
+
83
101
  var cleanedValue = cond.value.replace(/(^\%+|\%+$)/mg, '');
84
102
  cond.value = "%".concat(cleanedValue, "%");
85
103
  }
@@ -92,10 +110,8 @@ var ResourceFilter = function ResourceFilter(_ref) {
92
110
 
93
111
  if (Array.isArray(cond.value)) {
94
112
  cond.value = cond.value.map(function (v) {
95
- return v.trim();
113
+ return v.trim().replace(/(^\%+|\%+$)/mg, '');
96
114
  });
97
- } else {
98
- cond.value = cond.value.trim();
99
115
  }
100
116
 
101
117
  return cond;
@@ -105,7 +121,7 @@ var ResourceFilter = function ResourceFilter(_ref) {
105
121
  }
106
122
 
107
123
  return /*#__PURE__*/_react["default"].createElement(_designSystem.HelpDrawer, {
108
- footerTitle: "Update Actions",
124
+ footerTitle: "Update actions",
109
125
  footerBody: /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
110
126
  className: "ds-u-margin-right--1",
111
127
  onClick: function onClick(e) {
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
+
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+
11
+ var _react = _interopRequireDefault(require("react"));
12
+
13
+ var _reactHooks = require("@testing-library/react-hooks");
14
+
15
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
16
+
17
+ var _react2 = require("@testing-library/react");
18
+
19
+ require("@testing-library/jest-dom/extend-expect");
20
+
21
+ var _index = _interopRequireDefault(require("./index"));
22
+
23
+ /**
24
+ * @jest-environment jsdom
25
+ */
26
+ // import { act } from 'react-dom/test-utils';
27
+ var columns = ["column_1", "column_2", "column_3"];
28
+ var sampleDefaultCondition = {
29
+ operator: '',
30
+ property: '',
31
+ value: ''
32
+ };
33
+ var sampleSchema = {
34
+ "1234-abcd": {
35
+ fields: {
36
+ column_1: {
37
+ description: "",
38
+ type: "text"
39
+ },
40
+ column_2: {
41
+ description: "",
42
+ type: "text"
43
+ },
44
+ column_3: {
45
+ description: "",
46
+ type: "text"
47
+ }
48
+ }
49
+ }
50
+ };
51
+ var sampleResource = {
52
+ columns: columns,
53
+ conditions: [],
54
+ properties: undefined,
55
+ schema: sampleSchema,
56
+ setConditions: function setConditions() {
57
+ return {};
58
+ }
59
+ };
60
+ var sampleResource2 = {
61
+ columns: columns,
62
+ conditions: [{
63
+ operator: 'like',
64
+ property: 'column_2',
65
+ value: 'dkan'
66
+ }],
67
+ properties: undefined,
68
+ schema: sampleSchema,
69
+ setConditions: function setConditions() {
70
+ return {};
71
+ }
72
+ };
73
+
74
+ var BasicFilter = /*#__PURE__*/_react["default"].createElement(_index["default"], {
75
+ id: "1234-abcd",
76
+ filterOpen: true,
77
+ setFilterOpen: function setFilterOpen() {
78
+ return !filterOpen;
79
+ },
80
+ defaultCondition: sampleDefaultCondition,
81
+ resource: sampleResource,
82
+ includeSearchParams: true
83
+ });
84
+
85
+ var PreFilledFilter = /*#__PURE__*/_react["default"].createElement(_index["default"], {
86
+ id: "1234-abcd",
87
+ filterOpen: true,
88
+ setFilterOpen: function setFilterOpen() {
89
+ return !filterOpen;
90
+ },
91
+ defaultCondition: sampleDefaultCondition,
92
+ resource: sampleResource2,
93
+ includeSearchParams: true
94
+ });
95
+
96
+ var WrapperComponent = function WrapperComponent() {
97
+ var _React$useState = _react["default"].useState([]),
98
+ _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
99
+ conditions = _React$useState2[0],
100
+ setConditions = _React$useState2[1];
101
+
102
+ return /*#__PURE__*/_react["default"].createElement(_index["default"], {
103
+ id: "1234-abcd",
104
+ filterOpen: true,
105
+ setFilterOpen: function setFilterOpen() {
106
+ return !filterOpen;
107
+ },
108
+ defaultCondition: sampleDefaultCondition,
109
+ resource: {
110
+ columns: columns,
111
+ conditions: conditions,
112
+ properties: undefined,
113
+ schema: sampleSchema,
114
+ setConditions: setConditions
115
+ },
116
+ includeSearchParams: true
117
+ });
118
+ };
119
+
120
+ describe('Resource Filter Functions', function () {
121
+ test('renders with header and close button', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
122
+ return _regenerator["default"].wrap(function _callee$(_context) {
123
+ while (1) {
124
+ switch (_context.prev = _context.next) {
125
+ case 0:
126
+ (0, _react2.render)(BasicFilter);
127
+ expect(_react2.screen.getByRole('heading', {
128
+ level: 3,
129
+ name: "Add filters"
130
+ })).toBeInTheDocument();
131
+ expect(_react2.screen.getByRole('button', {
132
+ name: "Close help drawer"
133
+ })).toBeInTheDocument();
134
+
135
+ case 3:
136
+ case "end":
137
+ return _context.stop();
138
+ }
139
+ }
140
+ }, _callee);
141
+ })));
142
+ test('renders with footer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
143
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
144
+ while (1) {
145
+ switch (_context2.prev = _context2.next) {
146
+ case 0:
147
+ (0, _react2.render)(BasicFilter);
148
+ expect(_react2.screen.getByRole('heading', {
149
+ level: 4,
150
+ name: "Update actions"
151
+ })).toBeInTheDocument();
152
+ expect(_react2.screen.getByRole('button', {
153
+ name: "Update table"
154
+ })).toBeInTheDocument();
155
+
156
+ case 3:
157
+ case "end":
158
+ return _context2.stop();
159
+ }
160
+ }
161
+ }, _callee2);
162
+ })));
163
+ test('does not render Remove all filters button with less than 2 filters', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
164
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
165
+ while (1) {
166
+ switch (_context3.prev = _context3.next) {
167
+ case 0:
168
+ (0, _react2.render)(BasicFilter);
169
+ expect(_react2.screen.queryByRole('button', {
170
+ name: "Remove all filters"
171
+ })).not.toBeInTheDocument();
172
+
173
+ case 2:
174
+ case "end":
175
+ return _context3.stop();
176
+ }
177
+ }
178
+ }, _callee3);
179
+ })));
180
+ test('renders an empty field on clean start', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
181
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
182
+ while (1) {
183
+ switch (_context4.prev = _context4.next) {
184
+ case 0:
185
+ (0, _react2.render)(BasicFilter);
186
+ expect(_react2.screen.getByLabelText('Filter column')).toBeInTheDocument();
187
+ expect(_react2.screen.getByLabelText('Filter operator')).toBeInTheDocument();
188
+ expect(_react2.screen.getByLabelText('Filter value')).toBeInTheDocument();
189
+ expect(_react2.screen.getByDisplayValue('Select column')).toBeInTheDocument();
190
+ expect(_react2.screen.getByDisplayValue('--')).toBeInTheDocument();
191
+ expect(_react2.screen.getByRole('button', {
192
+ name: "Remove filter"
193
+ })).toBeInTheDocument();
194
+ expect(_react2.screen.getByRole('button', {
195
+ name: "+ Add another filter"
196
+ })).toBeInTheDocument();
197
+
198
+ case 8:
199
+ case "end":
200
+ return _context4.stop();
201
+ }
202
+ }
203
+ }, _callee4);
204
+ })));
205
+ test('test basic filter', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
206
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
207
+ while (1) {
208
+ switch (_context7.prev = _context7.next) {
209
+ case 0:
210
+ (0, _react2.render)(BasicFilter);
211
+ expect(_react2.screen.getByDisplayValue('Select column')).toBeInTheDocument();
212
+ expect(_react2.screen.getByRole('option', {
213
+ name: 'Select column'
214
+ }).selected).toBe(true);
215
+ expect(_react2.screen.getByRole('option', {
216
+ name: 'column_1'
217
+ }).selected).toBe(false);
218
+ expect(_react2.screen.getByRole('option', {
219
+ name: '--'
220
+ }).selected).toBe(true);
221
+ expect(_react2.screen.getByLabelText('Filter value')).toBeDisabled();
222
+ _context7.next = 8;
223
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
224
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
225
+ while (1) {
226
+ switch (_context5.prev = _context5.next) {
227
+ case 0:
228
+ _userEvent["default"].selectOptions(_react2.screen.getByRole('combobox', {
229
+ name: 'Filter column'
230
+ }), ['column_1']);
231
+
232
+ case 1:
233
+ case "end":
234
+ return _context5.stop();
235
+ }
236
+ }
237
+ }, _callee5);
238
+ })));
239
+
240
+ case 8:
241
+ expect(_react2.screen.getByRole('option', {
242
+ name: 'Select column'
243
+ }).selected).toBe(false);
244
+ expect(_react2.screen.getByRole('option', {
245
+ name: 'column_1'
246
+ }).selected).toBe(true);
247
+ expect(_react2.screen.getByRole('option', {
248
+ name: 'Is'
249
+ }).selected).toBe(true);
250
+ expect(_react2.screen.getByLabelText('Filter value')).not.toBeDisabled();
251
+ _context7.next = 14;
252
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
253
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
254
+ while (1) {
255
+ switch (_context6.prev = _context6.next) {
256
+ case 0:
257
+ _userEvent["default"].selectOptions(_react2.screen.getByRole('combobox', {
258
+ name: 'Filter column'
259
+ }), ['Select column']);
260
+
261
+ case 1:
262
+ case "end":
263
+ return _context6.stop();
264
+ }
265
+ }
266
+ }, _callee6);
267
+ })));
268
+
269
+ case 14:
270
+ expect(_react2.screen.getByRole('option', {
271
+ name: 'Select column'
272
+ }).selected).toBe(true);
273
+ expect(_react2.screen.getByRole('option', {
274
+ name: 'column_1'
275
+ }).selected).toBe(false);
276
+ expect(_react2.screen.getByRole('option', {
277
+ name: '--'
278
+ }).selected).toBe(true);
279
+ expect(_react2.screen.getByLabelText('Filter value')).toBeDisabled();
280
+
281
+ case 18:
282
+ case "end":
283
+ return _context7.stop();
284
+ }
285
+ }
286
+ }, _callee7);
287
+ })));
288
+ test('opens pre-filled', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
289
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
290
+ while (1) {
291
+ switch (_context8.prev = _context8.next) {
292
+ case 0:
293
+ (0, _react2.render)(PreFilledFilter);
294
+ expect(_react2.screen.getByDisplayValue('column_2')).toBeInTheDocument();
295
+ expect(_react2.screen.getByRole('option', {
296
+ name: 'column_2'
297
+ }).selected).toBe(true);
298
+ expect(_react2.screen.getByRole('option', {
299
+ name: 'Contains'
300
+ }).selected).toBe(true);
301
+ expect(_react2.screen.getByLabelText('Filter value')).not.toBeDisabled();
302
+ expect(_react2.screen.getByDisplayValue('dkan')).toBeInTheDocument();
303
+
304
+ case 6:
305
+ case "end":
306
+ return _context8.stop();
307
+ }
308
+ }
309
+ }, _callee8);
310
+ })));
311
+ test('remove all works', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
312
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
313
+ while (1) {
314
+ switch (_context11.prev = _context11.next) {
315
+ case 0:
316
+ (0, _react2.render)(PreFilledFilter);
317
+ expect(_react2.screen.getByRole('option', {
318
+ name: 'column_2'
319
+ }).selected).toBe(true);
320
+ expect(_react2.screen.getByRole('option', {
321
+ name: 'Contains'
322
+ }).selected).toBe(true);
323
+ expect(_react2.screen.getByDisplayValue('dkan')).toBeInTheDocument();
324
+ expect(_react2.screen.queryAllByLabelText('Filter value').length).toBe(1);
325
+ expect(_react2.screen.getByRole('button', {
326
+ name: '+ Add another filter'
327
+ })).toBeInTheDocument();
328
+ expect(_react2.screen.queryByRole('button', {
329
+ name: 'Remove all filters'
330
+ })).not.toBeInTheDocument();
331
+ _context11.next = 9;
332
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
333
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
334
+ while (1) {
335
+ switch (_context9.prev = _context9.next) {
336
+ case 0:
337
+ _userEvent["default"].click(_react2.screen.getByRole('button', {
338
+ name: '+ Add another filter'
339
+ }));
340
+
341
+ case 1:
342
+ case "end":
343
+ return _context9.stop();
344
+ }
345
+ }
346
+ }, _callee9);
347
+ })));
348
+
349
+ case 9:
350
+ expect(_react2.screen.queryAllByLabelText('Filter value').length).toBe(2);
351
+ expect(_react2.screen.getByRole('button', {
352
+ name: 'Remove all filters'
353
+ })).toBeInTheDocument();
354
+ _context11.next = 13;
355
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
356
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
357
+ while (1) {
358
+ switch (_context10.prev = _context10.next) {
359
+ case 0:
360
+ _userEvent["default"].click(_react2.screen.getByRole('button', {
361
+ name: 'Remove all filters'
362
+ }));
363
+
364
+ case 1:
365
+ case "end":
366
+ return _context10.stop();
367
+ }
368
+ }
369
+ }, _callee10);
370
+ })));
371
+
372
+ case 13:
373
+ expect(_react2.screen.queryAllByLabelText('Filter value').length).toBe(0);
374
+
375
+ case 14:
376
+ case "end":
377
+ return _context11.stop();
378
+ }
379
+ }
380
+ }, _callee11);
381
+ })));
382
+ test('url updates correctly', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
383
+ return _regenerator["default"].wrap(function _callee14$(_context14) {
384
+ while (1) {
385
+ switch (_context14.prev = _context14.next) {
386
+ case 0:
387
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(WrapperComponent, null));
388
+
389
+ _userEvent["default"].selectOptions(_react2.screen.getByRole('combobox', {
390
+ name: 'Filter column'
391
+ }), ['column_1']);
392
+
393
+ _context14.next = 4;
394
+ return _userEvent["default"].type(_react2.screen.getByLabelText('Filter value'), 'dkan', {
395
+ delay: 1
396
+ });
397
+
398
+ case 4:
399
+ _context14.next = 6;
400
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
401
+ return _regenerator["default"].wrap(function _callee12$(_context12) {
402
+ while (1) {
403
+ switch (_context12.prev = _context12.next) {
404
+ case 0:
405
+ case "end":
406
+ return _context12.stop();
407
+ }
408
+ }
409
+ }, _callee12);
410
+ })));
411
+
412
+ case 6:
413
+ _userEvent["default"].click(_react2.screen.getByRole('button', {
414
+ name: 'Update table'
415
+ }, {}));
416
+
417
+ _context14.next = 9;
418
+ return (0, _reactHooks.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
419
+ return _regenerator["default"].wrap(function _callee13$(_context13) {
420
+ while (1) {
421
+ switch (_context13.prev = _context13.next) {
422
+ case 0:
423
+ case "end":
424
+ return _context13.stop();
425
+ }
426
+ }
427
+ }, _callee13);
428
+ })));
429
+
430
+ case 9:
431
+ expect(window.location.search).toBe('?conditions[0][operator]=%3D&conditions[0][property]=column_1&conditions[0][value]=dkan');
432
+
433
+ case 10:
434
+ case "end":
435
+ return _context14.stop();
436
+ }
437
+ }
438
+ }, _callee14);
439
+ })));
440
+ });
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.prepareColumns = prepareColumns;
9
8
  exports["default"] = void 0;
9
+ exports.prepareColumns = prepareColumns;
10
10
 
11
11
  var _react = _interopRequireDefault(require("react"));
12
12
 
package/lib/index.js CHANGED
@@ -5,46 +5,40 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- Object.defineProperty(exports, "NavLink", {
9
- enumerable: true,
10
- get: function get() {
11
- return _NavLink["default"];
12
- }
13
- });
14
- Object.defineProperty(exports, "DatasetTags", {
8
+ Object.defineProperty(exports, "APIPage", {
15
9
  enumerable: true,
16
10
  get: function get() {
17
- return _DatasetTags["default"];
11
+ return _APIPage["default"];
18
12
  }
19
13
  });
20
- Object.defineProperty(exports, "DatasetDownloads", {
14
+ Object.defineProperty(exports, "ApiDocumentation", {
21
15
  enumerable: true,
22
16
  get: function get() {
23
- return _DatasetDownloads["default"];
17
+ return _ApiDocumentation["default"];
24
18
  }
25
19
  });
26
- Object.defineProperty(exports, "Pagination", {
20
+ Object.defineProperty(exports, "Breadcrumb", {
27
21
  enumerable: true,
28
22
  get: function get() {
29
- return _Pagination["default"];
23
+ return _Breadcrumb["default"];
30
24
  }
31
25
  });
32
- Object.defineProperty(exports, "Hero", {
26
+ Object.defineProperty(exports, "Dataset", {
33
27
  enumerable: true,
34
28
  get: function get() {
35
- return _Hero["default"];
29
+ return _Dataset["default"];
36
30
  }
37
31
  });
38
- Object.defineProperty(exports, "NavBar", {
32
+ Object.defineProperty(exports, "DatasetDownloads", {
39
33
  enumerable: true,
40
34
  get: function get() {
41
- return _NavBar["default"];
35
+ return _DatasetDownloads["default"];
42
36
  }
43
37
  });
44
- Object.defineProperty(exports, "SearchModal", {
38
+ Object.defineProperty(exports, "DatasetSearch", {
45
39
  enumerable: true,
46
40
  get: function get() {
47
- return _SearchModal["default"];
41
+ return _DatasetSearch["default"];
48
42
  }
49
43
  });
50
44
  Object.defineProperty(exports, "DatasetSearchListItem", {
@@ -53,58 +47,58 @@ Object.defineProperty(exports, "DatasetSearchListItem", {
53
47
  return _DatasetSearchListItem["default"];
54
48
  }
55
49
  });
56
- Object.defineProperty(exports, "SubMenu", {
50
+ Object.defineProperty(exports, "DatasetTags", {
57
51
  enumerable: true,
58
52
  get: function get() {
59
- return _SubMenu["default"];
53
+ return _DatasetTags["default"];
60
54
  }
61
55
  });
62
- Object.defineProperty(exports, "ApiDocumentation", {
56
+ Object.defineProperty(exports, "DrupalPage", {
63
57
  enumerable: true,
64
58
  get: function get() {
65
- return _ApiDocumentation["default"];
59
+ return _DrupalPage["default"];
66
60
  }
67
61
  });
68
- Object.defineProperty(exports, "ResourceConditionField", {
62
+ Object.defineProperty(exports, "FilteredResource", {
69
63
  enumerable: true,
70
64
  get: function get() {
71
- return _ResourceConditionField["default"];
65
+ return _FilteredResource["default"];
72
66
  }
73
67
  });
74
- Object.defineProperty(exports, "ResourceFilter", {
68
+ Object.defineProperty(exports, "Footer", {
75
69
  enumerable: true,
76
70
  get: function get() {
77
- return _ResourceFilter["default"];
71
+ return _Footer["default"];
78
72
  }
79
73
  });
80
- Object.defineProperty(exports, "ResourceHeader", {
74
+ Object.defineProperty(exports, "Header", {
81
75
  enumerable: true,
82
76
  get: function get() {
83
- return _ResourceHeader["default"];
77
+ return _header["default"];
84
78
  }
85
79
  });
86
- Object.defineProperty(exports, "ResourcePreview", {
80
+ Object.defineProperty(exports, "Hero", {
87
81
  enumerable: true,
88
82
  get: function get() {
89
- return _ResourcePreview["default"];
83
+ return _Hero["default"];
90
84
  }
91
85
  });
92
- Object.defineProperty(exports, "ResourceFooter", {
86
+ Object.defineProperty(exports, "MobileHeader", {
93
87
  enumerable: true,
94
88
  get: function get() {
95
- return _ResourceFooter["default"];
89
+ return _mobile_header["default"];
96
90
  }
97
91
  });
98
- Object.defineProperty(exports, "Breadcrumb", {
92
+ Object.defineProperty(exports, "NavBar", {
99
93
  enumerable: true,
100
94
  get: function get() {
101
- return _Breadcrumb["default"];
95
+ return _NavBar["default"];
102
96
  }
103
97
  });
104
- Object.defineProperty(exports, "TransformedDate", {
98
+ Object.defineProperty(exports, "NavLink", {
105
99
  enumerable: true,
106
100
  get: function get() {
107
- return _TransformedDate["default"];
101
+ return _NavLink["default"];
108
102
  }
109
103
  });
110
104
  Object.defineProperty(exports, "PageNotFound", {
@@ -113,52 +107,58 @@ Object.defineProperty(exports, "PageNotFound", {
113
107
  return _PageNotFound["default"];
114
108
  }
115
109
  });
116
- Object.defineProperty(exports, "Footer", {
110
+ Object.defineProperty(exports, "Pagination", {
117
111
  enumerable: true,
118
112
  get: function get() {
119
- return _Footer["default"];
113
+ return _Pagination["default"];
120
114
  }
121
115
  });
122
- Object.defineProperty(exports, "Dataset", {
116
+ Object.defineProperty(exports, "ResourceConditionField", {
123
117
  enumerable: true,
124
118
  get: function get() {
125
- return _Dataset["default"];
119
+ return _ResourceConditionField["default"];
126
120
  }
127
121
  });
128
- Object.defineProperty(exports, "DatasetSearch", {
122
+ Object.defineProperty(exports, "ResourceFilter", {
129
123
  enumerable: true,
130
124
  get: function get() {
131
- return _DatasetSearch["default"];
125
+ return _ResourceFilter["default"];
132
126
  }
133
127
  });
134
- Object.defineProperty(exports, "DrupalPage", {
128
+ Object.defineProperty(exports, "ResourceFooter", {
135
129
  enumerable: true,
136
130
  get: function get() {
137
- return _DrupalPage["default"];
131
+ return _ResourceFooter["default"];
138
132
  }
139
133
  });
140
- Object.defineProperty(exports, "Header", {
134
+ Object.defineProperty(exports, "ResourceHeader", {
141
135
  enumerable: true,
142
136
  get: function get() {
143
- return _header["default"];
137
+ return _ResourceHeader["default"];
144
138
  }
145
139
  });
146
- Object.defineProperty(exports, "MobileHeader", {
140
+ Object.defineProperty(exports, "ResourcePreview", {
147
141
  enumerable: true,
148
142
  get: function get() {
149
- return _mobile_header["default"];
143
+ return _ResourcePreview["default"];
150
144
  }
151
145
  });
152
- Object.defineProperty(exports, "FilteredResource", {
146
+ Object.defineProperty(exports, "SearchModal", {
153
147
  enumerable: true,
154
148
  get: function get() {
155
- return _FilteredResource["default"];
149
+ return _SearchModal["default"];
156
150
  }
157
151
  });
158
- Object.defineProperty(exports, "APIPage", {
152
+ Object.defineProperty(exports, "SubMenu", {
159
153
  enumerable: true,
160
154
  get: function get() {
161
- return _APIPage["default"];
155
+ return _SubMenu["default"];
156
+ }
157
+ });
158
+ Object.defineProperty(exports, "TransformedDate", {
159
+ enumerable: true,
160
+ get: function get() {
161
+ return _TransformedDate["default"];
162
162
  }
163
163
  });
164
164
  Object.defineProperty(exports, "useAddLoginLink", {
@@ -18,12 +18,13 @@ var APIPage = function APIPage(_ref) {
18
18
  className: "ds-l-container"
19
19
  }, /*#__PURE__*/_react["default"].createElement(_swaggerUiReact["default"], {
20
20
  url: "".concat(process.env.REACT_APP_ROOT_URL, "?").concat(hideAuth ? 'authentication=false&' : '').concat(additionalParams && additionalParams.ACA ? 'ACA=' + additionalParams.ACA + '&redirect=false' : ''),
21
- docExpansion: 'list'
21
+ docExpansion: 'list',
22
+ defaultModelsExpandDepth: -1
22
23
  }));
23
24
  };
24
25
 
25
26
  APIPage.defaultProps = {
26
- hideAuth: false
27
+ hideAuth: true
27
28
  };
28
29
  var _default = APIPage;
29
30
  exports["default"] = _default;
@@ -37,6 +37,8 @@ var _ResourceFooter = _interopRequireDefault(require("../../components/ResourceF
37
37
 
38
38
  var _ResourceInformation = _interopRequireDefault(require("../../components/ResourceInformation"));
39
39
 
40
+ var _functions = require("../FilteredResource/functions");
41
+
40
42
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
43
 
42
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -44,7 +46,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
44
46
  var DatasetBody = function DatasetBody(_ref) {
45
47
  var id = _ref.id,
46
48
  dataset = _ref.dataset,
47
- additionalParams = _ref.additionalParams;
49
+ additionalParams = _ref.additionalParams,
50
+ customColumns = _ref.customColumns;
48
51
  var apiDocs = (0, _react.useRef)();
49
52
 
50
53
  var _useState = (0, _react.useState)('ds-u-padding-y--1'),
@@ -125,7 +128,8 @@ var DatasetBody = function DatasetBody(_ref) {
125
128
  }), /*#__PURE__*/_react["default"].createElement(_ResourcePreview["default"], {
126
129
  id: distribution.identifier,
127
130
  tablePadding: tablePadding,
128
- resource: resource
131
+ resource: resource,
132
+ customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[0].identifier])
129
133
  }), /*#__PURE__*/_react["default"].createElement(_ResourceFooter["default"], {
130
134
  resource: resource
131
135
  }), /*#__PURE__*/_react["default"].createElement(_ResourceInformation["default"], {
@@ -136,7 +140,8 @@ var DatasetBody = function DatasetBody(_ref) {
136
140
  ref: apiDocs
137
141
  }, /*#__PURE__*/_react["default"].createElement("h2", null, "Try the API"), /*#__PURE__*/_react["default"].createElement(_swaggerUiReact["default"], {
138
142
  url: "".concat(process.env.REACT_APP_ROOT_URL, "/metastore/schemas/dataset/items/").concat(dataset.identifier, "/docs").concat(additionalParams && additionalParams.ACA ? '?ACA=' + additionalParams.ACA + '&redirect=false' : ''),
139
- docExpansion: 'list'
143
+ docExpansion: 'list',
144
+ defaultModelsExpandDepth: -1
140
145
  })) : ''), /*#__PURE__*/_react["default"].createElement("div", {
141
146
  className: "ds-l-md-col--3 ds-l-sm-col--12"
142
147
  }, Object.keys(distribution).length ? /*#__PURE__*/_react["default"].createElement(_DatasetDownloads["default"], {
@@ -20,7 +20,8 @@ var _PageNotFound = _interopRequireDefault(require("../PageNotFound"));
20
20
  var Dataset = function Dataset(_ref) {
21
21
  var id = _ref.id,
22
22
  rootUrl = _ref.rootUrl,
23
- additionalParams = _ref.additionalParams;
23
+ additionalParams = _ref.additionalParams,
24
+ customColumns = _ref.customColumns;
24
25
  var metastore = (0, _dataCatalogServices.useMetastoreDataset)(id, rootUrl, additionalParams);
25
26
  var dataset = metastore.dataset;
26
27
 
@@ -33,7 +34,8 @@ var Dataset = function Dataset(_ref) {
33
34
  }) : /*#__PURE__*/_react["default"].createElement(_DatasetBody["default"], {
34
35
  id: id,
35
36
  dataset: dataset,
36
- additionalParams: additionalParams
37
+ additionalParams: additionalParams,
38
+ customColumns: customColumns ? customColumns : []
37
39
  }));
38
40
  };
39
41
 
@@ -7,9 +7,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
+ exports["default"] = void 0;
10
11
  exports.selectedFacetsMessage = selectedFacetsMessage;
11
12
  exports.transformUrlParamsToSearchObject = transformUrlParamsToSearchObject;
12
- exports["default"] = void 0;
13
13
 
14
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
@@ -33,6 +33,8 @@ var _ResourcePreview = _interopRequireDefault(require("../../components/Resource
33
33
 
34
34
  var _ResourceFooter = _interopRequireDefault(require("../../components/ResourceFooter"));
35
35
 
36
+ var _functions = require("./functions");
37
+
36
38
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
39
 
38
40
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -47,7 +49,8 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
47
49
  distIndex = _ref.distIndex,
48
50
  location = _ref.location,
49
51
  apiDocPage = _ref.apiDocPage,
50
- additionalParams = _ref.additionalParams;
52
+ additionalParams = _ref.additionalParams,
53
+ customColumns = _ref.customColumns;
51
54
 
52
55
  var _React$useState = _react["default"].useState('ds-u-padding-y--1'),
53
56
  _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
@@ -158,7 +161,7 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
158
161
  onClick: function onClick() {
159
162
  return (0, _router.navigate)(apiDocPage);
160
163
  }
161
- }, "View API documentation")))), resource.columns ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_ResourceHeader["default"], {
164
+ }, "View API documentation")))), resource.columns && Object.keys(resource.schema).length ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_ResourceHeader["default"], {
162
165
  includeDensity: true,
163
166
  setTablePadding: setTablePadding,
164
167
  distribution: distribution,
@@ -167,7 +170,8 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
167
170
  }), /*#__PURE__*/_react["default"].createElement(_ResourcePreview["default"], {
168
171
  id: distribution.identifier,
169
172
  tablePadding: tablePadding,
170
- resource: resource
173
+ resource: resource,
174
+ customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[distIndex].identifier])
171
175
  }), /*#__PURE__*/_react["default"].createElement(_ResourceFooter["default"], {
172
176
  resource: resource
173
177
  }), filtersOpen && /*#__PURE__*/_react["default"].createElement(_ResourceFilter["default"], {
@@ -180,7 +184,8 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
180
184
  ref: apiDocs
181
185
  }, /*#__PURE__*/_react["default"].createElement("h2", null, "Try the API"), /*#__PURE__*/_react["default"].createElement(_swaggerUiReact["default"], {
182
186
  url: "".concat(process.env.REACT_APP_ROOT_URL, "/metastore/schemas/dataset/items/").concat(dataset.identifier, "/docs").concat(additionalParams && additionalParams.ACA ? '?ACA=' + additionalParams.ACA + '&redirect=false' : ''),
183
- docExpansion: 'list'
187
+ docExpansion: 'list',
188
+ defaultModelsExpandDepth: -1
184
189
  }))));
185
190
  };
186
191
 
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildCustomColHeaders = buildCustomColHeaders;
7
+
8
+ function buildCustomColHeaders(customHeaders, columns, schema) {
9
+ return columns.map(function (column) {
10
+ var customHeaderIndex = customHeaders.findIndex(function (header) {
11
+ return header.id === column;
12
+ });
13
+
14
+ if (customHeaderIndex > -1) {
15
+ return customHeaders[customHeaderIndex];
16
+ }
17
+
18
+ return {
19
+ Header: schema && schema.fields[column].description ? schema.fields[column].description : column,
20
+ accessor: column
21
+ };
22
+ });
23
+ }
@@ -28,7 +28,8 @@ var FilteredResource = function FilteredResource(_ref) {
28
28
  dist_id = _ref.dist_id,
29
29
  location = _ref.location,
30
30
  apiDocPage = _ref.apiDocPage,
31
- additionalParams = _ref.additionalParams;
31
+ additionalParams = _ref.additionalParams,
32
+ customColumns = _ref.customColumns;
32
33
 
33
34
  var _useState = (0, _react.useState)(false),
34
35
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -70,7 +71,8 @@ var FilteredResource = function FilteredResource(_ref) {
70
71
  distIndex: distIndex,
71
72
  location: location,
72
73
  apiDocPage: apiDocPage,
73
- additionalParams: additionalParams
74
+ additionalParams: additionalParams,
75
+ customColumns: customColumns ? customColumns : []
74
76
  })));
75
77
  };
76
78
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civicactions/cmsds-open-data-components",
3
- "version": "0.20.0-alpha.2",
3
+ "version": "1.1.0-alpha.1",
4
4
  "description": "Components for the open data catalog frontend using CMS Design System",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -20,13 +20,14 @@
20
20
  "license": "GPL-3.0",
21
21
  "dependencies": {
22
22
  "@civicactions/data-catalog-components": "^2.0.0-alpha.10",
23
- "@civicactions/data-catalog-services": "^1.0.0-alpha.13",
23
+ "@civicactions/data-catalog-services": "^1.0.0",
24
24
  "@cmsgov/design-system": "^2.7.0",
25
25
  "@reach/router": "^1.3.3",
26
26
  "enzyme": "^3.10.0",
27
27
  "enzyme-adapter-react-16": "^1.14.0",
28
28
  "prop-types": "^15.7.2",
29
29
  "qs": "^6.10.1",
30
+ "react-datepicker": "^4.2.1",
30
31
  "react-table": "^7.6.2",
31
32
  "react-text-truncate": "^0.16.0",
32
33
  "react-truncate": "^2.4.0",