@civicactions/cmsds-open-data-components 1.5.0-alpha.0 → 1.6.0-alpha.2

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.
@@ -14,4 +14,25 @@
14
14
  overflow: hidden;
15
15
  text-overflow: ellipsis;
16
16
  white-space: nowrap;
17
- }
17
+ }
18
+
19
+ .dc-c-resize-handle {
20
+ height: 57px;
21
+ background-color: $color-primary-darkest;
22
+ width: 10px;
23
+ min-width: 10px;
24
+ display: block;
25
+ margin-left: -10px;
26
+ // position: absolute;
27
+ // right: 0;
28
+ // top: 0;
29
+ // padding: 10px;
30
+ z-index: 1000;
31
+ border-top: 2px solid rgb(50, 58, 69);
32
+ border-bottom: 2px solid rgb(50, 58, 69);
33
+ // border-right: 1px solid rgb(50, 58, 69) !important;
34
+ &.isResizing,
35
+ &:hover {
36
+ background-color: $color-primary-darker;
37
+ }
38
+ }
@@ -4,8 +4,8 @@
4
4
  color: $color-white;
5
5
  text-decoration: none;
6
6
  &::before {
7
- font-family: 'Font Awesome 5 Pro';
8
- content: '\f0c9';
7
+ font-family: "Font Awesome 5 Pro";
8
+ content: "\f0c9";
9
9
  color: $color-white;
10
10
  font-size: 18px;
11
11
  padding-right: 10px;
@@ -26,8 +26,8 @@
26
26
  padding-left: 0;
27
27
  padding-bottom: 16px;
28
28
  &::before {
29
- font-family: 'Font Awesome 5 Pro';
30
- content: '\f00d';
29
+ font-family: "Font Awesome 5 Pro";
30
+ content: "\f00d";
31
31
  color: $color-white;
32
32
  font-size: 18px;
33
33
  padding-right: 10px;
@@ -50,7 +50,7 @@
50
50
  z-index: 500;
51
51
  height: 100%;
52
52
  width: 100%;
53
- transition: left .7s;
53
+ transition: left 0.7s;
54
54
  padding: 50px 0;
55
55
  }
56
56
 
@@ -78,21 +78,30 @@
78
78
  width: 48px;
79
79
  height: 2px;
80
80
  background: $color-primary-alt-light;
81
- content: '';
81
+ content: "";
82
82
  }
83
83
  ul {
84
84
  list-style: none;
85
85
  margin: 0;
86
86
  padding: 0;
87
87
  }
88
- a {
89
- display: block;
88
+ a,
89
+ a:hover,
90
+ a:focus,
91
+ a:visited {
92
+ display: inline-block;
90
93
  color: $color-white;
94
+ text-decoration: none;
95
+ border-bottom: 2px solid transparent;
96
+ }
97
+ a:hover,
98
+ a:active {
99
+ border-bottom: 2px solid $color-primary-alt-light;
91
100
  }
92
101
  }
93
102
  .has-submenu > button::after {
94
- font-family: 'Font Awesome 5 Pro';
95
- content: '\f105';
103
+ font-family: "Font Awesome 5 Pro";
104
+ content: "\f105";
96
105
  color: $color-white;
97
106
  font-size: 18px;
98
107
  padding-right: 10px;
@@ -106,7 +115,7 @@
106
115
  font-weight: lighter;
107
116
  }
108
117
  .has-submenu.open > button::after {
109
- content: '\f107';
118
+ content: "\f107";
110
119
  }
111
120
  .dc-c-header--mobile-links {
112
121
  button {
@@ -123,15 +132,19 @@
123
132
  z-index: 501;
124
133
  background-color: transparent;
125
134
  }
126
- .dc-c-cmsheader-menu a, button { color: $color-white;}
127
- .cms-link-container a::before { color: $color-white; }
135
+ .dc-c-cmsheader-menu a,
136
+ button {
137
+ color: $color-white;
138
+ }
139
+ .cms-link-container a::before {
140
+ color: $color-white;
141
+ }
128
142
  .dc-c-mobile-header--menu {
129
143
  left: 0;
130
144
  }
131
145
  }
132
146
 
133
147
  .cms-link-container {
134
-
135
148
  display: block;
136
149
  margin-right: 20px;
137
150
  // margin-top: -5px;
@@ -139,14 +152,14 @@
139
152
  a {
140
153
  text-decoration: none;
141
154
  border-bottom: none;
142
-
155
+
143
156
  margin-right: 20px;
144
157
  display: inline-block;
145
158
  }
146
159
  a::before {
147
- font-family: 'Font Awesome 5 Pro';
148
- content: '\f33e';
149
- color: #323A45;
160
+ font-family: "Font Awesome 5 Pro";
161
+ content: "\f33e";
162
+ color: #323a45;
150
163
  font-size: 18px;
151
164
  padding-right: 10px;
152
165
  display: inline-block;
@@ -166,12 +179,10 @@
166
179
  }
167
180
  }
168
181
 
169
-
170
-
171
182
  .cms-text-container {
172
183
  display: block;
173
184
  padding-top: 28px;
174
- color: #6F757C;
185
+ color: #6f757c;
175
186
  }
176
187
 
177
188
  .dc-c-cmsheader-menu {
@@ -183,15 +194,15 @@
183
194
  a {
184
195
  margin: 3px 7px;
185
196
  padding: 0;
186
- color: #323A45;
197
+ color: #323a45;
187
198
  text-decoration: none;
188
199
  border-bottom: 1px solid;
189
200
  border-bottom-color: #eee;
190
- border-bottom-color: rgba(255,255,255,0.2);
201
+ border-bottom-color: rgba(255, 255, 255, 0.2);
191
202
  }
192
203
  a:hover,
193
204
  a:active {
194
- border-bottom: 2px solid #323A45;
205
+ border-bottom: 2px solid #323a45;
195
206
  }
196
207
  }
197
208
 
@@ -207,7 +218,7 @@
207
218
  height: 85px;
208
219
  width: 240px;
209
220
  float: left;
210
- border-right: 1px solid #D6D7D9;
221
+ border-right: 1px solid #d6d7d9;
211
222
  a {
212
223
  margin-top: 28px;
213
224
  margin-bottom: 20px;
@@ -270,9 +281,13 @@ nav.dc-c-site-menu {
270
281
  }
271
282
  }
272
283
 
273
- nav > ul li ul { display: none; }
284
+ nav > ul li ul {
285
+ display: none;
286
+ }
274
287
 
275
- nav > ul li.open ul { display: block; }
288
+ nav > ul li.open ul {
289
+ display: block;
290
+ }
276
291
  li.has-submenu {
277
292
  position: relative;
278
293
  }
@@ -304,7 +319,7 @@ li.has-submenu {
304
319
  }
305
320
 
306
321
  div.ds-c-dialog-wrap {
307
- background-color: rgba(0,113,188,0.9);
322
+ background-color: rgba(0, 113, 188, 0.9);
308
323
  }
309
324
 
310
325
  div.ds-c-dialog {
@@ -325,8 +340,8 @@ div.ds-c-dialog button {
325
340
  top: 24px;
326
341
  right: 24px;
327
342
  &::after {
328
- font-family: 'Font Awesome 5 Pro';
329
- content: '\f00d';
343
+ font-family: "Font Awesome 5 Pro";
344
+ content: "\f00d";
330
345
  height: 22px;
331
346
  font-size: 20px;
332
347
  line-height: 20px;
@@ -342,8 +357,8 @@ div.ds-c-dialog button {
342
357
 
343
358
  .dc-c-search-modal--button {
344
359
  &::before {
345
- font-family: 'Font Awesome 5 Pro';
346
- content: '\f002';
360
+ font-family: "Font Awesome 5 Pro";
361
+ content: "\f002";
347
362
  color: $color-white;
348
363
  font-size: 18px;
349
364
  padding-right: 10px;
@@ -357,4 +372,3 @@ div.ds-c-dialog button {
357
372
  font-weight: lighter;
358
373
  }
359
374
  }
360
-
@@ -8,6 +8,8 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports["default"] = void 0;
9
9
  exports.prepareColumns = prepareColumns;
10
10
 
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
11
13
  var _react = _interopRequireDefault(require("react"));
12
14
 
13
15
  var _dataCatalogComponents = require("@civicactions/data-catalog-components");
@@ -16,6 +18,14 @@ var _dataCatalogServices = require("@civicactions/data-catalog-services");
16
18
 
17
19
  var _designSystem = require("@cmsgov/design-system");
18
20
 
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+
25
+ function calculateMaxWidth(previewSize) {
26
+ return Math.floor(previewSize * 0.84);
27
+ }
28
+
19
29
  function prepareColumns(columns, schema) {
20
30
  return columns.map(function (column) {
21
31
  return {
@@ -38,7 +48,7 @@ function DefaultColumnFilter(_ref) {
38
48
  },
39
49
  labelClassName: "ds-u-visibility--screen-reader",
40
50
  name: accessor,
41
- value: filterValue || ''
51
+ value: filterValue || ""
42
52
  });
43
53
  }
44
54
 
@@ -48,26 +58,39 @@ var ResourcePreview = function ResourcePreview(_ref2) {
48
58
  options = _ref2.options,
49
59
  resource = _ref2.resource,
50
60
  customColumns = _ref2.customColumns,
51
- truncateCellHeader = _ref2.truncateCellHeader;
61
+ truncateCellHeader = _ref2.truncateCellHeader,
62
+ columnSettings = _ref2.columnSettings,
63
+ columnWidths = _ref2.columnWidths;
64
+
65
+ var previewContainer = _react["default"].useRef(null);
66
+
67
+ var columnDefaults = _objectSpread({
68
+ width: 200,
69
+ maxWidth: previewContainer.current ? calculateMaxWidth(previewContainer.current.offsetWidth) : 300,
70
+ minWidth: 100
71
+ }, columnWidths);
72
+
52
73
  var tableClasses = {
53
- tableContainerClassName: 'dc-c-table-container',
54
- headerCellClassName: 'ds-u-border--dark ds-u-padding--2 ds-u-border-y--2 ds-u-border-right--1 ds-u-font-weight--bold dc-c-table-header-cell',
55
- headerGroupClassName: 'dc-c-table-header-group',
74
+ tableContainerClassName: "dc-c-table-container",
75
+ headerCellClassName: "ds-u-border--dark ds-u-padding--2 ds-u-border-y--2 ds-u-font-weight--bold dc-c-table-header-cell",
76
+ headerGroupClassName: "dc-c-table-header-group",
56
77
  headerCellTextClassName: "".concat(truncateCellHeader ? "dc-truncate" : "", " ds-u-display--inline-block"),
57
- cellEvenRowClassName: 'ds-u-fill--gray-lightest',
78
+ cellEvenRowClassName: "ds-u-fill--gray-lightest",
58
79
  cellClassName: "".concat(tablePadding, " dc-truncate ds-u-padding-x--1"),
59
- filterTitleClassName: 'ds-u-font-weight--bold ds-u-padding-left--2 ds-u-fill--gray-lightest ds-u-display--block',
60
- headerFilterClassName: 'ds-u-padding-top--1 ds-u-fill--gray-lightest',
61
- headerFilterCellClassName: 'ds-u-padding-x--1 ds-u-padding-bottom--0 ds-u-border-bottom--0 ds-u-fill--gray-lightest',
62
- columnIsSortedClassName: 'dc-c-sort dc-c-sort--default',
63
- columnIsSortedAscClassName: 'dc-c-sort dc-c-sort--asc',
64
- columnIsSortedDecClassName: 'dc-c-sort dc-c-sort--desc',
65
- tableColumnResizer: 'dc-c-resize-handle',
66
- tableColumnIsResizing: 'isResizing'
80
+ filterTitleClassName: "ds-u-font-weight--bold ds-u-padding-left--2 ds-u-fill--gray-lightest ds-u-display--block",
81
+ headerFilterClassName: "ds-u-padding-top--1 ds-u-fill--gray-lightest",
82
+ headerFilterCellClassName: "ds-u-padding-x--1 ds-u-padding-bottom--0 ds-u-border-bottom--0 ds-u-fill--gray-lightest",
83
+ columnIsSortedClassName: "dc-c-sort dc-c-sort--default",
84
+ columnIsSortedAscClassName: "dc-c-sort dc-c-sort--asc",
85
+ columnIsSortedDecClassName: "dc-c-sort dc-c-sort--desc",
86
+ tableColumnResizer: "dc-c-resize-handle",
87
+ tableColumnIsResizing: "isResizing"
67
88
  };
68
89
  return /*#__PURE__*/_react["default"].createElement("div", {
90
+ ref: previewContainer,
91
+ id: "resource-preview",
69
92
  className: "ds-u-overflow--auto ds-u-border-x--1 ds-u-border-bottom--1"
70
- }, /*#__PURE__*/_react["default"].createElement(_dataCatalogComponents.DataTable, {
93
+ }, previewContainer.current && /*#__PURE__*/_react["default"].createElement(_dataCatalogComponents.DataTable, {
71
94
  filterTitle: "Filter columns",
72
95
  data: resource.values,
73
96
  columns: customColumns ? customColumns : prepareColumns(resource.columns, resource.schema[id]),
@@ -82,11 +105,7 @@ var ResourcePreview = function ResourcePreview(_ref2) {
82
105
  sortTransform: _dataCatalogServices.transformTableSortToQuerySort,
83
106
  tableClasses: tableClasses,
84
107
  className: "dc-c-datatable",
85
- columnDefaults: {
86
- width: 200,
87
- maxWidth: 300,
88
- minWidth: 50
89
- },
108
+ columnDefaults: columnDefaults,
90
109
  customColumnFilter: DefaultColumnFilter,
91
110
  options: options,
92
111
  CustomLoadingComponent: /*#__PURE__*/_react["default"].createElement("div", {
@@ -102,7 +121,7 @@ var ResourcePreview = function ResourcePreview(_ref2) {
102
121
 
103
122
  ResourcePreview.defaultProps = {
104
123
  options: {
105
- layout: 'flex',
124
+ layout: "flex",
106
125
  columnFilter: false,
107
126
  columnSort: true,
108
127
  columnResize: true
@@ -47,15 +47,17 @@ var DatasetBody = function DatasetBody(_ref) {
47
47
  var id = _ref.id,
48
48
  dataset = _ref.dataset,
49
49
  additionalParams = _ref.additionalParams,
50
- customColumns = _ref.customColumns;
50
+ customColumns = _ref.customColumns,
51
+ columnSettings = _ref.columnSettings,
52
+ columnWidths = _ref.columnWidths;
51
53
  var apiDocs = (0, _react.useRef)();
52
54
 
53
- var _useState = (0, _react.useState)('ds-u-padding-y--1'),
55
+ var _useState = (0, _react.useState)("ds-u-padding-y--1"),
54
56
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
55
57
  tablePadding = _useState2[0],
56
58
  setTablePadding = _useState2[1];
57
59
 
58
- var _useState3 = (0, _react.useState)(''),
60
+ var _useState3 = (0, _react.useState)(""),
59
61
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
60
62
  fileFormat = _useState4[0],
61
63
  setFileFormat = _useState4[1];
@@ -67,18 +69,18 @@ var DatasetBody = function DatasetBody(_ref) {
67
69
  distribution = distribution_array[0];
68
70
  }
69
71
 
70
- var resource = (0, _dataCatalogServices.useDatastore)('', process.env.REACT_APP_ROOT_URL, {
72
+ var resource = (0, _dataCatalogServices.useDatastore)("", process.env.REACT_APP_ROOT_URL, {
71
73
  limit: 10,
72
74
  manual: true
73
75
  }, additionalParams);
74
76
  (0, _react.useEffect)(function () {
75
77
  if (distribution.identifier) {
76
- var localFileFormat = '';
78
+ var localFileFormat = "";
77
79
 
78
80
  if (distribution.data.format) {
79
81
  localFileFormat = distribution.data.format.toUpperCase();
80
82
  } else if (distribution.data.mediaType) {
81
- var mediaType = distribution.data.mediaType.split('/');
83
+ var mediaType = distribution.data.mediaType.split("/");
82
84
 
83
85
  if (mediaType.length && mediaType[1]) {
84
86
  localFileFormat = mediaType[1].toUpperCase();
@@ -129,25 +131,33 @@ var DatasetBody = function DatasetBody(_ref) {
129
131
  id: distribution.identifier,
130
132
  tablePadding: tablePadding,
131
133
  resource: resource,
132
- customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[0].identifier])
134
+ customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[0].identifier]),
135
+ columnSettings: columnSettings,
136
+ options: {
137
+ layout: "flex",
138
+ columnFilter: false,
139
+ columnSort: true,
140
+ columnResize: true
141
+ },
142
+ columnWidths: columnWidths
133
143
  }), /*#__PURE__*/_react["default"].createElement(_ResourceFooter["default"], {
134
144
  resource: resource
135
145
  }), /*#__PURE__*/_react["default"].createElement(_ResourceInformation["default"], {
136
146
  resource: resource
137
- })) : /*#__PURE__*/_react["default"].createElement(Spinner, null)) : '', dataset.identifier && /*#__PURE__*/_react["default"].createElement(_DatasetAdditionalInformation["default"], {
147
+ })) : /*#__PURE__*/_react["default"].createElement(Spinner, null)) : "", dataset.identifier && /*#__PURE__*/_react["default"].createElement(_DatasetAdditionalInformation["default"], {
138
148
  datasetInfo: dataset
139
149
  }), Object.keys(distribution).length && fileFormat === "CSV" && dataset.identifier ? /*#__PURE__*/_react["default"].createElement("div", {
140
150
  ref: apiDocs
141
151
  }, /*#__PURE__*/_react["default"].createElement("h2", null, "Try the API"), /*#__PURE__*/_react["default"].createElement(_swaggerUiReact["default"], {
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' : ''),
143
- docExpansion: 'list',
152
+ 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" : ""),
153
+ docExpansion: "list",
144
154
  defaultModelsExpandDepth: -1
145
- })) : ''), /*#__PURE__*/_react["default"].createElement("div", {
155
+ })) : ""), /*#__PURE__*/_react["default"].createElement("div", {
146
156
  className: "ds-l-md-col--3 ds-l-sm-col--12"
147
157
  }, Object.keys(distribution).length ? /*#__PURE__*/_react["default"].createElement(_DatasetDownloads["default"], {
148
158
  downloadURL: distribution.data.downloadURL,
149
159
  type: fileFormat
150
- }) : '', /*#__PURE__*/_react["default"].createElement(_DatasetTags["default"], {
160
+ }) : "", /*#__PURE__*/_react["default"].createElement(_DatasetTags["default"], {
151
161
  keywords: dataset.keyword
152
162
  }), Object.keys(distribution).length && fileFormat === "CSV" ? /*#__PURE__*/_react["default"].createElement("div", {
153
163
  className: "dc-c-dataset-tags ds-u-margin-bottom--3 ds-u-padding--2 ds-u-border ds-u-border--1"
@@ -157,11 +167,11 @@ var DatasetBody = function DatasetBody(_ref) {
157
167
  variation: "transparent",
158
168
  onClick: function onClick() {
159
169
  return window.scrollTo({
160
- behavior: 'smooth',
170
+ behavior: "smooth",
161
171
  top: apiDocs.current.offsetTop
162
172
  });
163
173
  }
164
- }, "Scroll to dataset API")) : '')));
174
+ }, "Scroll to dataset API")) : "")));
165
175
  };
166
176
 
167
177
  DatasetBody.propTypes = {
@@ -28,7 +28,9 @@ var Dataset = function Dataset(_ref) {
28
28
  rootUrl = _ref.rootUrl,
29
29
  additionalParams = _ref.additionalParams,
30
30
  customColumns = _ref.customColumns,
31
- setDatasetTitle = _ref.setDatasetTitle;
31
+ setDatasetTitle = _ref.setDatasetTitle,
32
+ columnSettings = _ref.columnSettings,
33
+ columnWidths = _ref.columnWidths;
32
34
  var metastore = (0, _dataCatalogServices.useMetastoreDataset)(id, rootUrl, additionalParams);
33
35
  var dataset = metastore.dataset;
34
36
  var title = dataset.title ? dataset.title : "";
@@ -40,7 +42,9 @@ var Dataset = function Dataset(_ref) {
40
42
  }
41
43
  }, [title]);
42
44
 
43
- var notFoundContent = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h1", {
45
+ var notFoundContent = /*#__PURE__*/_react["default"].createElement("div", {
46
+ className: "ds-u-padding-top--3"
47
+ }, /*#__PURE__*/_react["default"].createElement("h1", {
44
48
  className: "ds-title"
45
49
  }, "Error: Dataset not found"), /*#__PURE__*/_react["default"].createElement("p", null, "We're sorry, but there is no dataset ID that matches your entry. You may have been directed here because:"), /*#__PURE__*/_react["default"].createElement("ol", null, /*#__PURE__*/_react["default"].createElement("li", null, "The address you typed contains a typo;"), /*#__PURE__*/_react["default"].createElement("li", null, "The requested dataset no longer exists.")), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("span", {
46
50
  className: "ds-u-font-weight--bold"
@@ -52,7 +56,9 @@ var Dataset = function Dataset(_ref) {
52
56
  id: id,
53
57
  dataset: dataset,
54
58
  additionalParams: additionalParams,
55
- customColumns: customColumns ? customColumns : []
59
+ customColumns: customColumns ? customColumns : [],
60
+ columnSettings: columnSettings,
61
+ columnWidths: columnWidths
56
62
  }));
57
63
  };
58
64
 
@@ -37,6 +37,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
37
37
 
38
38
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
39
39
 
40
+ var defaultSort = {
41
+ modified: "desc",
42
+ title: "asc",
43
+ "default": "modified"
44
+ };
45
+
40
46
  function updateUrl(selectedFacets, fulltext, sort) {
41
47
  var newParams = _objectSpread({}, selectedFacets);
42
48
 
@@ -59,13 +65,13 @@ function selectedFacetsMessage(facets, alternateTitles) {
59
65
  var keys = Object.keys(facets);
60
66
  keys.forEach(function (k) {
61
67
  if (facets[k].length) {
62
- message.push("".concat(alternateTitles[k], ": ").concat(facets[k].join(', ')));
68
+ message.push("".concat(alternateTitles[k], ": ").concat(facets[k].join(", ")));
63
69
  }
64
70
  });
65
- return message.join(' & ');
71
+ return message.join(" & ");
66
72
  }
67
73
 
68
- function transformUrlParamsToSearchObject(searchParams, facetList) {
74
+ function transformUrlParamsToSearchObject(searchParams, facetList, sortOptions) {
69
75
  var params = _qs["default"].parse(searchParams, {
70
76
  ignoreQueryPrefix: true
71
77
  });
@@ -77,8 +83,8 @@ function transformUrlParamsToSearchObject(searchParams, facetList) {
77
83
  return {
78
84
  selectedFacets: selectedFacets,
79
85
  fulltext: params.fulltext,
80
- sort: !params.sort ? "modified" : params.sort,
81
- sortOrder: !params.sort || params.sort === "modified" ? "desc" : "asc"
86
+ sort: !params.sort ? sortOptions["default"] : params.sort,
87
+ sortOrder: !params.sort ? sortOptions[sortOptions["default"]] : sortOptions[params.sort]
82
88
  };
83
89
  }
84
90
 
@@ -91,14 +97,17 @@ var DatasetSearch = function DatasetSearch(_ref) {
91
97
  fulltextLabelClassName = _ref.fulltextLabelClassName,
92
98
  fulltextPlaceholder = _ref.fulltextPlaceholder,
93
99
  formClassName = _ref.formClassName,
94
- additionalParams = _ref.additionalParams;
100
+ additionalParams = _ref.additionalParams,
101
+ sortOptions = _ref.sortOptions;
102
+
103
+ var sortOpt = _objectSpread(_objectSpread({}, defaultSort), sortOptions);
95
104
 
96
105
  var _useState = (0, _react.useState)(null),
97
106
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
98
107
  currentResultNumbers = _useState2[0],
99
108
  setCurrentResultNumbers = _useState2[1];
100
109
 
101
- var _useSearchAPI = (0, _dataCatalogServices.useSearchAPI)(rootUrl, _objectSpread({}, transformUrlParamsToSearchObject(location.search, ['theme', 'keyword'])), additionalParams),
110
+ var _useSearchAPI = (0, _dataCatalogServices.useSearchAPI)(rootUrl, _objectSpread({}, transformUrlParamsToSearchObject(location.search, ["theme", "keyword"], sortOpt)), additionalParams),
102
111
  fulltext = _useSearchAPI.fulltext,
103
112
  selectedFacets = _useSearchAPI.selectedFacets,
104
113
  loading = _useSearchAPI.loading,
@@ -119,7 +128,7 @@ var DatasetSearch = function DatasetSearch(_ref) {
119
128
  theme = _separateFacets.theme,
120
129
  keyword = _separateFacets.keyword;
121
130
 
122
- var _useState3 = (0, _react.useState)(''),
131
+ var _useState3 = (0, _react.useState)(""),
123
132
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
124
133
  filterText = _useState4[0],
125
134
  setFilterText = _useState4[1];
@@ -133,7 +142,7 @@ var DatasetSearch = function DatasetSearch(_ref) {
133
142
  _react["default"].useEffect(function () {
134
143
  var url = new URL(window.location);
135
144
  var searchParams = updateUrl(selectedFacets, fulltext, sort);
136
- window.history.pushState({}, '', "".concat(url.origin).concat(url.pathname).concat(searchParams));
145
+ window.history.pushState({}, "", "".concat(url.origin).concat(url.pathname).concat(searchParams));
137
146
  }, [fulltext, selectedFacets, sort]);
138
147
 
139
148
  (0, _react.useEffect)(function () {
@@ -153,12 +162,7 @@ var DatasetSearch = function DatasetSearch(_ref) {
153
162
  }
154
163
 
155
164
  function updateSort(value) {
156
- if (value === 'modified') {
157
- setSortOrder('desc');
158
- } else if (value === 'title') {
159
- setSortOrder('asc');
160
- }
161
-
165
+ setSortOrder(sortOpt[value]);
162
166
  setSort(value);
163
167
  }
164
168
 
@@ -201,11 +205,11 @@ var DatasetSearch = function DatasetSearch(_ref) {
201
205
  className: "ds-u-display--flex ds-u-justify-content--between ds-u-align-items--end"
202
206
  }, /*#__PURE__*/_react["default"].createElement("div", null, currentResultNumbers && /*#__PURE__*/_react["default"].createElement("p", {
203
207
  className: "ds-u-margin-y--0"
204
- }, "Showing ", currentResultNumbers.startingNumber, " - ", currentResultNumbers.endingNumber, " of ", currentResultNumbers.total, " datasets"), /*#__PURE__*/_react["default"].createElement("p", {
208
+ }, "Showing ", currentResultNumbers.startingNumber, " -", " ", currentResultNumbers.endingNumber, " of", " ", currentResultNumbers.total, " datasets"), /*#__PURE__*/_react["default"].createElement("p", {
205
209
  className: "ds-u-margin-y--0"
206
210
  }, selectedFacetsMessage(selectedFacets, {
207
- theme: 'Categories',
208
- keyword: 'Tags'
211
+ theme: "Categories",
212
+ keyword: "Tags"
209
213
  }))), /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
210
214
  className: "ds-u-padding--0 dc-c-clear-filters",
211
215
  variation: "transparent",
@@ -231,11 +235,11 @@ var DatasetSearch = function DatasetSearch(_ref) {
231
235
  className: "ds-u-padding--2 ds-u-margin-bottom--4 ds-u-border--1"
232
236
  }, /*#__PURE__*/_react["default"].createElement(_designSystem.Dropdown, {
233
237
  options: [{
234
- label: 'Recently Updated',
235
- value: 'modified'
238
+ label: "Recently Updated",
239
+ value: "modified"
236
240
  }, {
237
- label: 'Alphabetical',
238
- value: 'title'
241
+ label: "Alphabetical",
242
+ value: "title"
239
243
  }],
240
244
  value: sort,
241
245
  label: "Sort by",
@@ -50,9 +50,11 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
50
50
  location = _ref.location,
51
51
  apiDocPage = _ref.apiDocPage,
52
52
  additionalParams = _ref.additionalParams,
53
- customColumns = _ref.customColumns;
53
+ customColumns = _ref.customColumns,
54
+ columnSettings = _ref.columnSettings,
55
+ columnWidths = _ref.columnWidths;
54
56
 
55
- var _React$useState = _react["default"].useState('ds-u-padding-y--1'),
57
+ var _React$useState = _react["default"].useState("ds-u-padding-y--1"),
56
58
  _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
57
59
  tablePadding = _React$useState2[0],
58
60
  setTablePadding = _React$useState2[1];
@@ -79,7 +81,7 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
79
81
  })) : {
80
82
  conditions: []
81
83
  };
82
- var resource = (0, _dataCatalogServices.useDatastore)('', process.env.REACT_APP_ROOT_URL, _objectSpread(_objectSpread({}, options), {}, {
84
+ var resource = (0, _dataCatalogServices.useDatastore)("", process.env.REACT_APP_ROOT_URL, _objectSpread(_objectSpread({}, options), {}, {
83
85
  limit: 25,
84
86
  manual: true
85
87
  }), additionalParams);
@@ -151,7 +153,7 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
151
153
  className: "ds-u-text-align--left ds-u-font-weight--normal",
152
154
  onClick: function onClick() {
153
155
  return window.scrollTo({
154
- behavior: 'smooth',
156
+ behavior: "smooth",
155
157
  top: apiDocs.current.offsetTop
156
158
  });
157
159
  }
@@ -171,7 +173,15 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
171
173
  id: distribution.identifier,
172
174
  tablePadding: tablePadding,
173
175
  resource: resource,
174
- customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[distIndex].identifier])
176
+ customColumns: (0, _functions.buildCustomColHeaders)(customColumns, resource.columns, resource.schema[distribution_array[distIndex].identifier]),
177
+ columnSettings: columnSettings,
178
+ options: {
179
+ layout: "flex",
180
+ columnFilter: false,
181
+ columnSort: true,
182
+ columnResize: true
183
+ },
184
+ columnWidths: columnWidths
175
185
  }), /*#__PURE__*/_react["default"].createElement(_ResourceFooter["default"], {
176
186
  resource: resource
177
187
  }), filtersOpen && /*#__PURE__*/_react["default"].createElement(_ResourceFilter["default"], {
@@ -183,14 +193,14 @@ var FilteredResourceBody = function FilteredResourceBody(_ref) {
183
193
  })) : /*#__PURE__*/_react["default"].createElement(_designSystem.Spinner, null), dataset.identifier && /*#__PURE__*/_react["default"].createElement("div", {
184
194
  ref: apiDocs
185
195
  }, /*#__PURE__*/_react["default"].createElement("h2", null, "Try the API"), /*#__PURE__*/_react["default"].createElement(_swaggerUiReact["default"], {
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' : ''),
187
- docExpansion: 'list',
196
+ 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" : ""),
197
+ docExpansion: "list",
188
198
  defaultModelsExpandDepth: -1
189
199
  }))));
190
200
  };
191
201
 
192
202
  FilteredResourceBody.defaultProps = {
193
- apiDocPage: '/api'
203
+ apiDocPage: "/api"
194
204
  };
195
205
  var _default = FilteredResourceBody;
196
206
  exports["default"] = _default;
@@ -30,7 +30,9 @@ var FilteredResource = function FilteredResource(_ref) {
30
30
  apiDocPage = _ref.apiDocPage,
31
31
  additionalParams = _ref.additionalParams,
32
32
  customColumns = _ref.customColumns,
33
- setDatasetTitle = _ref.setDatasetTitle;
33
+ setDatasetTitle = _ref.setDatasetTitle,
34
+ columnSettings = _ref.columnSettings,
35
+ columnWidths = _ref.columnWidths;
34
36
 
35
37
  var _useState = (0, _react.useState)(false),
36
38
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -64,7 +66,9 @@ var FilteredResource = function FilteredResource(_ref) {
64
66
  }
65
67
  }, [dataset.distribution, dataset.error, distIndex]);
66
68
 
67
- var notFoundContent = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h1", {
69
+ var notFoundContent = /*#__PURE__*/_react["default"].createElement("div", {
70
+ className: "ds-u-padding-top--3"
71
+ }, /*#__PURE__*/_react["default"].createElement("h1", {
68
72
  className: "ds-title"
69
73
  }, "Error: Dataset not found"), /*#__PURE__*/_react["default"].createElement("p", null, "We're sorry, but there is no dataset ID that matches your entry. You may have been directed here because:"), /*#__PURE__*/_react["default"].createElement("ol", null, /*#__PURE__*/_react["default"].createElement("li", null, "The address you typed contains a typo;"), /*#__PURE__*/_react["default"].createElement("li", null, "The requested dataset no longer exists.")), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("span", {
70
74
  className: "ds-u-font-weight--bold"
@@ -79,7 +83,9 @@ var FilteredResource = function FilteredResource(_ref) {
79
83
  location: location,
80
84
  apiDocPage: apiDocPage,
81
85
  additionalParams: additionalParams,
82
- customColumns: customColumns ? customColumns : []
86
+ customColumns: customColumns ? customColumns : [],
87
+ columnSettings: columnSettings,
88
+ columnWidths: columnWidths
83
89
  })));
84
90
  };
85
91
 
@@ -13,7 +13,7 @@ var PageNotFound = function PageNotFound(_ref) {
13
13
  var siteUrl = _ref.siteUrl,
14
14
  content = _ref.content;
15
15
  return /*#__PURE__*/_react["default"].createElement("section", {
16
- className: "ds-l-container"
16
+ className: "ds-l-container ds-u-padding-top--3"
17
17
  }, content ? content : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h1", {
18
18
  className: "ds-title"
19
19
  }, "Error: Page not found"), /*#__PURE__*/_react["default"].createElement("p", null, "We're sorry, but there is no ", siteUrl, " web page that matches your entry. You may have been directed here because:"), /*#__PURE__*/_react["default"].createElement("ol", null, /*#__PURE__*/_react["default"].createElement("li", null, "The address you typed contains a typo;"), /*#__PURE__*/_react["default"].createElement("li", null, "The requested page may have expired or;"), /*#__PURE__*/_react["default"].createElement("li", null, "The requested page may have been moved.")), /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("span", {
@@ -70,7 +70,7 @@ var MobileHeader = function MobileHeader(_ref) {
70
70
 
71
71
  function handleClick(event) {
72
72
  // Links are wrapped in spans, this checks if the parent is an A, also check if in the search modal.
73
- if (event.target.parentElement.nodeName === 'A' || event.target.closest('.dc-c-search-dialog')) {
73
+ if (event.target.parentElement.nodeName === "A" || event.target.closest(".dc-c-search-dialog")) {
74
74
  setMenuOpen(false);
75
75
  }
76
76
  }
@@ -95,10 +95,10 @@ var MobileHeader = function MobileHeader(_ref) {
95
95
  };
96
96
  }, [menu.current, menuOpen]);
97
97
  return /*#__PURE__*/_react["default"].createElement("header", {
98
- className: "dc-c-header dc-c-mobile-header ".concat(menuOpen ? 'menu-open' : ''),
98
+ className: "dc-c-header dc-c-mobile-header ".concat(menuOpen ? "menu-open" : ""),
99
99
  "aria-label": "Site header"
100
100
  }, includeTopNav && /*#__PURE__*/_react["default"].createElement("div", {
101
- className: "dc-c-cmsheader ds-u-display--flex ds-u-padding-x--1 ds-u-align-items--center ".concat(mobile ? 'ds-u-justify-content--center' : 'ds-u-justify-content--between')
101
+ className: "dc-c-cmsheader ds-u-display--flex ds-u-padding-x--1 ds-u-align-items--center ".concat(mobile ? "ds-u-justify-content--center" : "ds-u-justify-content--between")
102
102
  }, /*#__PURE__*/_react["default"].createElement("div", {
103
103
  className: "cms-link-container"
104
104
  }, /*#__PURE__*/_react["default"].createElement("a", {
@@ -137,7 +137,6 @@ var MobileHeader = function MobileHeader(_ref) {
137
137
  }, customSearch ? customSearch : /*#__PURE__*/_react["default"].createElement(_SearchModal["default"], {
138
138
  searchFunc: function searchFunc(e) {
139
139
  e.preventDefault();
140
- console.log(e.target.value);
141
140
  },
142
141
  searchModalText: searchModalText,
143
142
  buttonSize: "small",
@@ -161,7 +160,6 @@ var MobileHeader = function MobileHeader(_ref) {
161
160
  }, customSearch ? customSearch : /*#__PURE__*/_react["default"].createElement(_SearchModal["default"], {
162
161
  searchFunc: function searchFunc(e) {
163
162
  e.preventDefault();
164
- console.log(e.target.value);
165
163
  },
166
164
  searchModalText: searchModalText,
167
165
  buttonSize: "small"
@@ -178,18 +176,18 @@ var MobileHeader = function MobileHeader(_ref) {
178
176
  links: links.topnav,
179
177
  menuName: "CMS Main Header",
180
178
  menuId: "cms-mobile-header",
181
- linkClasses: "ds-u-margin-left--1 ds-u-padding-bottom--2",
179
+ linkClasses: "ds-u-margin-left--1 ds-u-margin-bottom--2",
182
180
  menuClasses: "dc-c-header--links ds-u-font-size--small"
183
181
  }))));
184
182
  };
185
183
 
186
184
  MobileHeader.defaultProps = {
187
185
  org: {
188
- tagline: 'The Centers for Medicare and Medicaid Services',
189
- url: 'https://cms.gov',
190
- urlTitle: 'CMS.gov Centers for Medicare &amp; Medicaid Services',
186
+ tagline: "The Centers for Medicare and Medicaid Services",
187
+ url: "https://cms.gov",
188
+ urlTitle: "CMS.gov Centers for Medicare &amp; Medicaid Services",
191
189
  logo: _CMSGovLogoO["default"],
192
- logoAltText: 'CMS.gov Centers for Medicare &amp; Medicaid Services',
190
+ logoAltText: "CMS.gov Centers for Medicare &amp; Medicaid Services",
193
191
  inverseLogo: _CMSgov2xWhiteO["default"]
194
192
  },
195
193
  includeTopNav: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civicactions/cmsds-open-data-components",
3
- "version": "1.5.0-alpha.0",
3
+ "version": "1.6.0-alpha.2",
4
4
  "description": "Components for the open data catalog frontend using CMS Design System",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {