@civicactions/cmsds-open-data-components 1.9.0-alpha.2 → 1.9.0-alpha.6

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.
@@ -1,3 +1,11 @@
1
+ .dc-dataset-search--facets-container .ds-c-accordion__content {
2
+ max-height: 32rem;
3
+ display: block;
4
+ }
5
+
1
6
  .dc-dataset-search--facets {
7
+ display: block;
2
8
  list-style: none;
9
+ position: relative;
10
+ max-height: 32rem;
3
11
  }
@@ -1,2 +1,6 @@
1
1
  @import './components';
2
2
  @import './templates';
3
+
4
+ .dc-c-word-break--all {
5
+ word-break: break-all;
6
+ }
@@ -1,103 +1,161 @@
1
- import React from 'react';
2
- import { Link } from '@reach/router';
3
- import TransformedDate from '../components/TransformedDate';
4
- import { frequencyMap } from './frequencyMap';
1
+ "use strict";
5
2
 
6
- export const defaultMetadataMapping = {
7
- modified: (data) => {
8
- return [{ label: 'Modified', value: <TransformedDate date={data} /> }];
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.defaultMetadataMapping = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _router = require("@reach/router");
13
+
14
+ var _TransformedDate = _interopRequireDefault(require("../components/TransformedDate"));
15
+
16
+ var _frequencyMap = require("./frequencyMap");
17
+
18
+ var defaultMetadataMapping = {
19
+ modified: function modified(data) {
20
+ return [{
21
+ label: 'Modified',
22
+ value: /*#__PURE__*/_react["default"].createElement(_TransformedDate["default"], {
23
+ date: data
24
+ })
25
+ }];
9
26
  },
10
- issued: (data) => {
11
- return [{ label: 'Issued', value: <TransformedDate date={data} /> }];
27
+ issued: function issued(data) {
28
+ return [{
29
+ label: 'Issued',
30
+ value: /*#__PURE__*/_react["default"].createElement(_TransformedDate["default"], {
31
+ date: data
32
+ })
33
+ }];
12
34
  },
13
- publisher: (data) => {
35
+ accrualPeriodicity: function accrualPeriodicity(data) {
36
+ return [{
37
+ label: 'Frequency',
38
+ value: _frequencyMap.frequencyMap[data].name
39
+ }];
40
+ },
41
+ publisher: function publisher(data) {
14
42
  if (data.data && data.data.name) {
15
- return [{ label: 'Publisher', value: data.data.name }];
43
+ return [{
44
+ label: 'Publisher',
45
+ value: data.data.name
46
+ }];
16
47
  } else {
17
48
  return [];
18
49
  }
19
50
  },
20
- identifier: (data) => {
21
- return [{ label: 'Identifier', value: data }];
51
+ identifier: function identifier(data) {
52
+ return [{
53
+ label: 'Identifier',
54
+ value: data
55
+ }];
22
56
  },
23
- contactPoint: (data) => {
24
- let rows = [];
57
+ contactPoint: function contactPoint(data) {
58
+ var rows = [];
59
+
25
60
  if (data.fn) {
26
- rows.push({ label: 'Contact', value: data.fn });
61
+ rows.push({
62
+ label: 'Contact',
63
+ value: data.fn
64
+ });
27
65
  }
66
+
28
67
  if (data.hasEmail) {
29
- rows.push({ label: 'Contact Email', value: data.hasEmail });
68
+ rows.push({
69
+ label: 'Contact Email',
70
+ value: data.hasEmail
71
+ });
30
72
  }
73
+
31
74
  return rows;
32
75
  },
33
- bureauCode: (data) => {
76
+ bureauCode: function bureauCode(data) {
34
77
  if (data.length) {
35
- return [{ label: 'Bureau Code', value: data[0] }];
78
+ return [{
79
+ label: 'Bureau Code',
80
+ value: data[0]
81
+ }];
36
82
  }
37
83
  },
38
- programCode: (data) => {
84
+ programCode: function programCode(data) {
39
85
  if (data.length) {
40
- return [{ label: 'Program Code', value: data[0] }];
86
+ return [{
87
+ label: 'Program Code',
88
+ value: data[0]
89
+ }];
41
90
  }
42
91
  },
43
- theme: (data) => {
44
- return [
45
- {
46
- label: 'Category',
47
- value: data
48
- .map((theme) => <span key={theme.data}>{theme.data}</span>)
49
- .reduce((prev, curr) => [prev, ', ', curr]),
50
- },
51
- ];
52
- },
53
- keyword: (data) => {
54
- return [
55
- {
56
- label: 'Tags',
57
- value: data
58
- .map((keyword) => (
59
- <Link key={keyword.data} to={`/datasets?keyword[]=${keyword.data}`}>
60
- {keyword.data}
61
- </Link>
62
- ))
63
- .reduce((prev, curr) => [prev, ', ', curr]),
64
- },
65
- ];
66
- },
67
- license: (data) => {
68
- return [{ label: 'License', value: data }];
92
+ theme: function theme(data) {
93
+ return [{
94
+ label: 'Category',
95
+ value: data.map(function (theme) {
96
+ return /*#__PURE__*/_react["default"].createElement(_router.Link, {
97
+ key: theme.data,
98
+ to: "/datasets?theme[]=".concat(theme.data)
99
+ }, theme.data);
100
+ }).reduce(function (prev, curr) {
101
+ return [prev, ', ', curr];
102
+ })
103
+ }];
69
104
  },
70
- accessLevel: (data) => {
71
- return [{ label: 'Public Access Level', value: data }];
105
+ keyword: function keyword(data) {
106
+ return [{
107
+ label: 'Tags',
108
+ value: data.map(function (keyword) {
109
+ return /*#__PURE__*/_react["default"].createElement(_router.Link, {
110
+ key: keyword.data,
111
+ to: "/datasets?keyword[]=".concat(keyword.data)
112
+ }, keyword.data);
113
+ }).reduce(function (prev, curr) {
114
+ return [prev, ', ', curr];
115
+ })
116
+ }];
72
117
  },
73
- references: (data) => {
74
- return [
75
- {
76
- label: 'Related Documents',
77
- value: (
78
- <ul className="ds-u-margin--0 ds-u-padding-y--0 ds-u-padding-left--2 ds-u-padding-right--0">
79
- {data.map((item) => (
80
- <li key={item}>
81
- <a href={item}>{item}</a>
82
- </li>
83
- ))}
84
- </ul>
85
- ),
86
- },
87
- ];
118
+ license: function license(data) {
119
+ return [{
120
+ label: 'License',
121
+ value: /*#__PURE__*/_react["default"].createElement("a", {
122
+ href: data
123
+ }, data)
124
+ }];
88
125
  },
89
- temporal: (data) => {
90
- return [{ label: 'Temporal Coverage', value: data }];
126
+ accessLevel: function accessLevel(data) {
127
+ return [{
128
+ label: 'Public Access Level',
129
+ value: data
130
+ }];
91
131
  },
92
- spatial: (data) => {
93
- return [{ label: 'Spacial/Geographical Coverage', value: data }];
132
+ temporal: function temporal(data) {
133
+ return [{
134
+ label: 'Temporal Coverage',
135
+ value: /*#__PURE__*/_react["default"].createElement("span", {
136
+ className: "dc-c-word-break--all"
137
+ }, data)
138
+ }];
94
139
  },
95
- accrualPeriodicity: (data) => {
96
- return [
97
- {
98
- label: 'Frequency',
99
- value: frequencyMap[data].name,
100
- },
101
- ];
140
+ spatial: function spatial(data) {
141
+ return [{
142
+ label: 'Spacial/Geographical Coverage',
143
+ value: data
144
+ }];
102
145
  },
146
+ references: function references(data) {
147
+ return [{
148
+ label: 'Related Documents',
149
+ value: /*#__PURE__*/_react["default"].createElement("ul", {
150
+ className: "ds-u-margin--0 ds-u-padding-y--0 ds-u-padding-left--2 ds-u-padding-right--0"
151
+ }, data.map(function (item) {
152
+ return /*#__PURE__*/_react["default"].createElement("li", {
153
+ key: item
154
+ }, /*#__PURE__*/_react["default"].createElement("a", {
155
+ href: item
156
+ }, item));
157
+ }))
158
+ }];
159
+ }
103
160
  };
161
+ exports.defaultMetadataMapping = defaultMetadataMapping;
@@ -0,0 +1,110 @@
1
+ import React from 'react';
2
+ import { Link } from '@reach/router';
3
+ import TransformedDate from '../components/TransformedDate';
4
+ import { frequencyMap } from './frequencyMap';
5
+
6
+ export const defaultMetadataMapping = {
7
+ modified: (data) => {
8
+ return [{ label: 'Modified', value: <TransformedDate date={data} /> }];
9
+ },
10
+ issued: (data) => {
11
+ return [{ label: 'Issued', value: <TransformedDate date={data} /> }];
12
+ },
13
+ accrualPeriodicity: (data) => {
14
+ return [
15
+ {
16
+ label: 'Frequency',
17
+ value: frequencyMap[data].name,
18
+ },
19
+ ];
20
+ },
21
+ publisher: (data) => {
22
+ if (data.data && data.data.name) {
23
+ return [{ label: 'Publisher', value: data.data.name }];
24
+ } else {
25
+ return [];
26
+ }
27
+ },
28
+ identifier: (data) => {
29
+ return [{ label: 'Identifier', value: data }];
30
+ },
31
+ contactPoint: (data) => {
32
+ let rows = [];
33
+ if (data.fn) {
34
+ rows.push({ label: 'Contact', value: data.fn });
35
+ }
36
+ if (data.hasEmail) {
37
+ rows.push({ label: 'Contact Email', value: data.hasEmail });
38
+ }
39
+ return rows;
40
+ },
41
+ bureauCode: (data) => {
42
+ if (data.length) {
43
+ return [{ label: 'Bureau Code', value: data[0] }];
44
+ }
45
+ },
46
+ programCode: (data) => {
47
+ if (data.length) {
48
+ return [{ label: 'Program Code', value: data[0] }];
49
+ }
50
+ },
51
+ theme: (data) => {
52
+ return [
53
+ {
54
+ label: 'Category',
55
+ value: data
56
+ .map((theme) => (
57
+ <Link key={theme.data} to={`/datasets?theme[]=${theme.data}`}>
58
+ {theme.data}
59
+ </Link>
60
+ ))
61
+ .reduce((prev, curr) => [prev, ', ', curr]),
62
+ },
63
+ ];
64
+ },
65
+ keyword: (data) => {
66
+ return [
67
+ {
68
+ label: 'Tags',
69
+ value: data
70
+ .map((keyword) => (
71
+ <Link key={keyword.data} to={`/datasets?keyword[]=${keyword.data}`}>
72
+ {keyword.data}
73
+ </Link>
74
+ ))
75
+ .reduce((prev, curr) => [prev, ', ', curr]),
76
+ },
77
+ ];
78
+ },
79
+ license: (data) => {
80
+ return [{ label: 'License', value: <a href={data}>{data}</a> }];
81
+ },
82
+ accessLevel: (data) => {
83
+ return [{ label: 'Public Access Level', value: data }];
84
+ },
85
+
86
+ temporal: (data) => {
87
+ return [
88
+ { label: 'Temporal Coverage', value: <span className="dc-c-word-break--all">{data}</span> },
89
+ ];
90
+ },
91
+ spatial: (data) => {
92
+ return [{ label: 'Spacial/Geographical Coverage', value: data }];
93
+ },
94
+ references: (data) => {
95
+ return [
96
+ {
97
+ label: 'Related Documents',
98
+ value: (
99
+ <ul className="ds-u-margin--0 ds-u-padding-y--0 ds-u-padding-left--2 ds-u-padding-right--0">
100
+ {data.map((item) => (
101
+ <li key={item}>
102
+ <a href={item}>{item}</a>
103
+ </li>
104
+ ))}
105
+ </ul>
106
+ ),
107
+ },
108
+ ];
109
+ },
110
+ };
@@ -38,7 +38,8 @@ var DatasetSearchFacets = function DatasetSearchFacets(_ref) {
38
38
  var title = _ref.title,
39
39
  facets = _ref.facets,
40
40
  onclickFunction = _ref.onclickFunction,
41
- selectedFacets = _ref.selectedFacets;
41
+ selectedFacets = _ref.selectedFacets,
42
+ loading = _ref.loading;
42
43
  var showLimit = 25;
43
44
 
44
45
  var _useState = (0, _react.useState)(true),
@@ -52,29 +53,19 @@ var DatasetSearchFacets = function DatasetSearchFacets(_ref) {
52
53
  setShowMore = _useState4[1];
53
54
 
54
55
  var filteredFacets = facets.filter(function (f) {
55
- return f.total > 0;
56
+ var selectedIndex = selectedFacets.findIndex(function (item) {
57
+ return item === f.name;
58
+ });
59
+ return f.total > 0 || selectedIndex !== -1;
56
60
  });
57
61
  return /*#__PURE__*/_react["default"].createElement("div", {
58
- className: "ds-u-margin-bottom--4"
59
- }, /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
60
- variation: "transparent",
61
- className: "dc-facet-block--toggle ds-h4 ds-u-margin-top--0 ds-u-padding-left--0 ".concat(isOpen ? 'open' : 'closed'),
62
- onClick: function onClick() {
63
- return setIsOpen(!isOpen);
64
- }
65
- }, title), isOpen && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("ul", {
62
+ className: "ds-u-margin-bottom--4 dc-dataset-search--facets-container"
63
+ }, /*#__PURE__*/_react["default"].createElement(_designSystem.Accordion, null, /*#__PURE__*/_react["default"].createElement(_designSystem.AccordionItem, {
64
+ heading: "".concat(title, " (").concat(filteredFacets.length, ")"),
65
+ defaultOpen: true
66
+ }, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, filteredFacets.length ? /*#__PURE__*/_react["default"].createElement("ul", {
66
67
  className: "dc-dataset-search--facets ds-u-padding--0 ds-u-margin--0"
67
- }, filteredFacets.filter(function (facet, index) {
68
- if (!showMore) {
69
- if (index <= showLimit) {
70
- return facet;
71
- } else {
72
- return false;
73
- }
74
- }
75
-
76
- return facet;
77
- }).map(function (f) {
68
+ }, filteredFacets.map(function (f) {
78
69
  return /*#__PURE__*/_react["default"].createElement("li", {
79
70
  key: f.name
80
71
  }, /*#__PURE__*/_react["default"].createElement(_designSystem.Choice, {
@@ -90,19 +81,14 @@ var DatasetSearchFacets = function DatasetSearchFacets(_ref) {
90
81
  });
91
82
  }
92
83
  }));
93
- })), !showMore && filteredFacets.length > showLimit && /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
94
- variation: "transparent",
95
- onClick: function onClick() {
96
- return setShowMore(true);
97
- }
98
- }, "Show more"), showMore && filteredFacets.length > showLimit && /*#__PURE__*/_react["default"].createElement(_designSystem.Button, {
99
- variation: "transparent",
100
- onClick: function onClick() {
101
- return setShowMore(false);
102
- }
103
- }, "Show less")));
84
+ })) : /*#__PURE__*/_react["default"].createElement("p", {
85
+ className: "ds-h5"
86
+ }, "No matching facets found.")))));
104
87
  };
105
88
 
89
+ DatasetSearchFacets.defaultProps = {
90
+ selectedFacets: []
91
+ };
106
92
  DatasetSearchFacets.propTypes = {
107
93
  title: _propTypes["default"].string.isRequired,
108
94
  facets: _propTypes["default"].arrayOf(_propTypes["default"].shape({
@@ -101,6 +101,11 @@ var DatasetSearch = function DatasetSearch(_ref) {
101
101
  currentResultNumbers = _useState2[0],
102
102
  setCurrentResultNumbers = _useState2[1];
103
103
 
104
+ var _useState3 = (0, _react.useState)(false),
105
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
106
+ noResults = _useState4[0],
107
+ setNoResults = _useState4[1];
108
+
104
109
  var _useSearchAPI = (0, _dataCatalogServices.useSearchAPI)(rootUrl, _objectSpread({}, transformUrlParamsToSearchObject(location.search, ['theme', 'keyword'], defaultSort)), additionalParams),
105
110
  fulltext = _useSearchAPI.fulltext,
106
111
  selectedFacets = _useSearchAPI.selectedFacets,
@@ -123,10 +128,10 @@ var DatasetSearch = function DatasetSearch(_ref) {
123
128
  theme = _separateFacets.theme,
124
129
  keyword = _separateFacets.keyword;
125
130
 
126
- var _useState3 = (0, _react.useState)(''),
127
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
128
- filterText = _useState4[0],
129
- setFilterText = _useState4[1];
131
+ var _useState5 = (0, _react.useState)(''),
132
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
133
+ filterText = _useState6[0],
134
+ setFilterText = _useState6[1];
130
135
 
131
136
  _react["default"].useEffect(function () {
132
137
  if (fulltext !== filterText) {
@@ -149,6 +154,12 @@ var DatasetSearch = function DatasetSearch(_ref) {
149
154
  startingNumber: startingNumber,
150
155
  endingNumber: Number(totalItems) < endingNumber ? Number(totalItems) : endingNumber
151
156
  });
157
+
158
+ if (totalItems <= 0 && currentResultNumbers !== null) {
159
+ setNoResults(true);
160
+ } else {
161
+ setNoResults(false);
162
+ }
152
163
  }, [totalItems, pageSize, page]);
153
164
 
154
165
  function changePage(page) {
@@ -208,7 +219,10 @@ var DatasetSearch = function DatasetSearch(_ref) {
208
219
  }
209
220
  }, "Clear all filters")), /*#__PURE__*/_react["default"].createElement("ol", {
210
221
  className: "dc-dataset-search-list ds-u-padding--0"
211
- }, items.map(function (item) {
222
+ }, noResults && /*#__PURE__*/_react["default"].createElement(_designSystem.Alert, {
223
+ variation: "error",
224
+ heading: "No results found."
225
+ }), items.map(function (item) {
212
226
  return /*#__PURE__*/_react["default"].createElement("li", {
213
227
  className: "ds-u-padding--0"
214
228
  }, /*#__PURE__*/_react["default"].createElement(_DatasetSearchListItem["default"], {
@@ -253,7 +267,8 @@ var DatasetSearch = function DatasetSearch(_ref) {
253
267
  title: "Categories",
254
268
  facets: theme,
255
269
  onclickFunction: updateSelectedFacets,
256
- selectedFacets: selectedFacets.theme
270
+ selectedFacets: selectedFacets.theme,
271
+ loading: loading
257
272
  }) : /*#__PURE__*/_react["default"].createElement(_designSystem.Spinner, {
258
273
  className: "ds-u-valign--middle",
259
274
  "aria-valuetext": "Categories loading",
@@ -262,7 +277,8 @@ var DatasetSearch = function DatasetSearch(_ref) {
262
277
  title: "Tags",
263
278
  facets: keyword,
264
279
  onclickFunction: updateSelectedFacets,
265
- selectedFacets: selectedFacets.keyword
280
+ selectedFacets: selectedFacets.keyword,
281
+ loading: loading
266
282
  }) : /*#__PURE__*/_react["default"].createElement(_designSystem.Spinner, {
267
283
  className: "ds-u-valign--middle",
268
284
  "aria-valuetext": "Tags loading",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civicactions/cmsds-open-data-components",
3
- "version": "1.9.0-alpha.2",
3
+ "version": "1.9.0-alpha.6",
4
4
  "description": "Components for the open data catalog frontend using CMS Design System",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {