@eeacms/volto-cca-policy 0.1.41 → 0.1.43

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.
@@ -0,0 +1,2 @@
1
+ [ -n "$CI" ] && exit 0
2
+ yarn lint-staged
package/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ ### [0.1.43](https://github.com/eea/volto-cca-policy/compare/0.1.42...0.1.43) - 15 September 2023
8
+
9
+ #### :hammer_and_wrench: Others
10
+
11
+ - Refs #161485 - Solve search result breadcrumbs format in Health Catalogue. [GhitaB - [`46c4fb9`](https://github.com/eea/volto-cca-policy/commit/46c4fb99416763258116f14a449a4c6e2464d6d3)]
12
+ - Refs #161485 - Solve URL format in Health Catalogue. [GhitaB - [`5cbf970`](https://github.com/eea/volto-cca-policy/commit/5cbf9709681899cba2de0d0790e0fb0ef4735583)]
13
+ - Refs #161485 - WIP add custom horizontal card result, in order to personalize results URLS. [GhitaB - [`cebb56f`](https://github.com/eea/volto-cca-policy/commit/cebb56f0e45600aa005167d822693512e6559941)]
14
+ - Refs #257521 - Fix error in GeocharsWidget, when no value. [GhitaB - [`e372af6`](https://github.com/eea/volto-cca-policy/commit/e372af6bf417c74ea81a7c77852f3e829bdc656e)]
15
+ - Refs #257521 - Try: fix Jenkins [GhitaB - [`292618a`](https://github.com/eea/volto-cca-policy/commit/292618a8e9ecf1f748cb225af9c1371a5d3e27ca)]
16
+ - Refs #257521 - Fix GeolocationWidget error when no value (error in case study add form). [GhitaB - [`355478b`](https://github.com/eea/volto-cca-policy/commit/355478bcc7349a295b074d416b10ccfd5b807e8c)]
17
+ - test: fix comments [valentinab25 - [`dd918df`](https://github.com/eea/volto-cca-policy/commit/dd918df04d718c222a219b6a5d361872e5535bf6)]
18
+ - Refs #257521 - Enable slate popup (volto-slate-label). [GhitaB - [`f299392`](https://github.com/eea/volto-cca-policy/commit/f299392787ea01a1e3a60064d4d7c01dd1864ca2)]
19
+ - Code cleanup [Tiberiu Ichim - [`9704770`](https://github.com/eea/volto-cca-policy/commit/97047707c6916d55b617786ccdc8f52e6ed6b67b)]
20
+ - test: EN locales, pre-commit fix, feature PRs checks Refs #257193 [valentinab25 - [`2cacb91`](https://github.com/eea/volto-cca-policy/commit/2cacb91dd8d09807c5835a30e5b53f7d6dd31f5a)]
21
+ ### [0.1.42](https://github.com/eea/volto-cca-policy/compare/0.1.41...0.1.42) - 5 September 2023
22
+
23
+ #### :hammer_and_wrench: Others
24
+
25
+ - Refs #257400 - Add Key Type Measure - facet vocabulary terms instead of keys. [GhitaB - [`53070bc`](https://github.com/eea/volto-cca-policy/commit/53070bc9b32f31d1c7e64a05eb8a7409c8021029)]
26
+ - Refs #257400 - Add Key Type Measure - test vocab. [GhitaB - [`d42e3d3`](https://github.com/eea/volto-cca-policy/commit/d42e3d3c88585461a7f07deac4eaa853787fefbd)]
27
+ - Refs #257400 - Add Key Type Measure facet for ccaSearch. [GhitaB - [`242fa6d`](https://github.com/eea/volto-cca-policy/commit/242fa6dea274b1e9197642e42b5f6119a25abccc)]
28
+ - Also fix health catalog [Tiberiu Ichim - [`6695897`](https://github.com/eea/volto-cca-policy/commit/6695897b6e70b3d3708e2ef895b5bd5a9b2fe9f5)]
29
+ - Fix expiration date in search catalogue [Tiberiu Ichim - [`543dd0b`](https://github.com/eea/volto-cca-policy/commit/543dd0b4e950ea93dd35f2bfa9ceb4061a74e1fd)]
7
30
  ### [0.1.41](https://github.com/eea/volto-cca-policy/compare/0.1.40...0.1.41) - 1 September 2023
8
31
 
9
32
  #### :hammer_and_wrench: Others
package/cypress.config.js CHANGED
@@ -2,12 +2,12 @@ const { defineConfig } = require('cypress');
2
2
 
3
3
  module.exports = defineConfig({
4
4
  viewportWidth: 1280,
5
- defaultCommandTimeout: 8888,
5
+ defaultCommandTimeout: 5000,
6
6
  chromeWebSecurity: false,
7
7
  reporter: 'junit',
8
8
  video: true,
9
9
  retries: {
10
- runMode: 8,
10
+ runMode: 1,
11
11
  openMode: 0,
12
12
  },
13
13
  reporterOptions: {
@@ -0,0 +1,14 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: \n"
8
+ "Language: \n"
9
+ "Language-Team: \n"
10
+ "Content-Type: \n"
11
+ "Content-Transfer-Encoding: \n"
12
+ "Plural-Forms: \n"
13
+
14
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-cca-policy",
3
- "version": "0.1.41",
3
+ "version": "0.1.43",
4
4
  "description": "@eeacms/volto-cca-policy: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -22,6 +22,7 @@
22
22
  "@eeacms/volto-widget-geolocation",
23
23
  "@eeacms/volto-widget-dataprovenance",
24
24
  "@eeacms/volto-accordion-block",
25
+ "@eeacms/volto-slate-label",
25
26
  "@eeacms/volto-eea-design-system",
26
27
  "@eeacms/volto-globalsearch"
27
28
  ],
@@ -30,6 +31,7 @@
30
31
  "@eeacms/volto-eea-design-system": "*",
31
32
  "@eeacms/volto-globalsearch": "*",
32
33
  "@eeacms/volto-openlayers-map": "*",
34
+ "@eeacms/volto-slate-label": "*",
33
35
  "@eeacms/volto-widget-dataprovenance": "*",
34
36
  "@eeacms/volto-widget-geolocation": "*",
35
37
  "@eeacms/volto-widget-temporal-coverage": "*",
@@ -41,8 +43,31 @@
41
43
  "@plone/scripts": "*",
42
44
  "babel-plugin-transform-class-properties": "^6.24.1",
43
45
  "cypress-fail-fast": "^5.0.1",
46
+ "husky": "*",
47
+ "lint-staged": "*",
44
48
  "md5": "^2.3.0"
45
49
  },
50
+ "lint-staged": {
51
+ "src/**/*.{js,jsx,ts,tsx,json}": [
52
+ "make lint-fix",
53
+ "make prettier-fix"
54
+ ],
55
+ "src/**/*.{jsx}": [
56
+ "make i18n"
57
+ ],
58
+ "theme/**/*.{css,less}": [
59
+ "make stylelint-fix"
60
+ ],
61
+ "src/**/*.{css,less}": [
62
+ "make stylelint-fix"
63
+ ],
64
+ "theme/**/*.overrides": [
65
+ "make stylelint-fix"
66
+ ],
67
+ "src/**/*.overrides": [
68
+ "make stylelint-fix"
69
+ ]
70
+ },
46
71
  "scripts": {
47
72
  "release": "release-it",
48
73
  "release-major-beta": "release-it major --preRelease=beta",
@@ -60,6 +85,7 @@
60
85
  "lint:fix": "make lint-fix",
61
86
  "i18n": "make i18n",
62
87
  "cypress:run": "make cypress-run",
63
- "cypress:open": "make cypress-open"
88
+ "cypress:open": "make cypress-open",
89
+ "prepare": "husky install"
64
90
  }
65
91
  }
@@ -0,0 +1,103 @@
1
+ // Original: https://github.com/eea/volto-searchlib/blob/master/searchlib/components/Result/HorizontalCardItem.jsx
2
+ // We need custom href for results.
3
+ import React from 'react';
4
+ import { Label } from 'semantic-ui-react';
5
+ import {
6
+ SegmentedBreadcrumb,
7
+ StringList,
8
+ DateTime,
9
+ } from '@eeacms/search/components';
10
+ import { useAppConfig } from '@eeacms/search/lib/hocs';
11
+ import { firstWords, getTermDisplayValue } from '@eeacms/search/lib/utils';
12
+
13
+ import ExternalLink from '@eeacms/search/components/Result/ExternalLink';
14
+ import ResultContext from '@eeacms/search/components/Result/ResultContext';
15
+ import ContentClusters from '@eeacms/search/components/Result/ContentClusters';
16
+
17
+ const healthURL = (href) => {
18
+ return href.replace(/\/metadata\//, '/observatory/++aq++metadata/');
19
+ };
20
+
21
+ const healthBreadcrumb = (href) => {
22
+ // It's only cosmetic. We don't want to show ++aq...
23
+ return href.replace(/\/metadata\//, '/observatory/');
24
+ };
25
+
26
+ const ExtraContent = (props) => {
27
+ const { result, vocab } = props;
28
+ return (
29
+ <div>
30
+ <div className="result-bottom">
31
+ <div className="result-info">
32
+ {/* <span className="result-info-title">Published: </span> */}
33
+ <DateTime format="DATE_MED" value={result.issued} />
34
+ </div>
35
+ <div className="result-info">
36
+ <span className="result-info-title">Topics: </span>
37
+ <StringList value={result.tags} />
38
+ </div>
39
+ </div>
40
+ <div>
41
+ <div className="result-info result-source">
42
+ <span className="result-info-title">Source: </span>
43
+ <ExternalLink href={healthURL(result.href)}>
44
+ <strong title={result.source} className="source">
45
+ {firstWords(
46
+ getTermDisplayValue({
47
+ vocab,
48
+ field: 'cluster_name',
49
+ term: result.source,
50
+ }),
51
+ 8,
52
+ )}
53
+ </strong>
54
+ <SegmentedBreadcrumb
55
+ href={healthBreadcrumb(result.href)}
56
+ short={true}
57
+ maxChars={40}
58
+ />
59
+ </ExternalLink>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ );
64
+ };
65
+
66
+ const HealthHorizontalCardItem = (props) => {
67
+ const { result } = props;
68
+ const { appConfig, registry } = useAppConfig();
69
+ const { vocab = {} } = appConfig;
70
+ const clusters = result.clusterInfo;
71
+
72
+ const UniversalCard = registry.resolve['UniversalCard'].component;
73
+
74
+ const item = {
75
+ '@id': result.href,
76
+ title: (
77
+ <>
78
+ <ExternalLink href={healthURL(result.href)} title={result.title}>
79
+ {result.title}
80
+ {result.isNew && <Label className="new-item">New</Label>}
81
+ {result.isExpired && (
82
+ <Label className="archived-item">Archived</Label>
83
+ )}
84
+ </ExternalLink>
85
+ </>
86
+ ),
87
+ meta: <ContentClusters clusters={clusters} item={result} />,
88
+ description: props.children ? props.children : <ResultContext {...props} />,
89
+ preview_image_url: result.hasImage ? result.thumbUrl : undefined,
90
+ extra: <ExtraContent result={result} vocab={vocab} />,
91
+ };
92
+
93
+ const itemModel = {
94
+ hasImage: result.hasImage,
95
+ hasDescription: true,
96
+ imageOnRightSide: true,
97
+ '@type': 'searchItem',
98
+ };
99
+
100
+ return <UniversalCard item={item} itemModel={itemModel} />;
101
+ };
102
+
103
+ export default HealthHorizontalCardItem;
@@ -233,8 +233,8 @@ const EEAHeader = ({ pathname, token, items, history, subsite }) => {
233
233
  inverted={isHomePageInverse ? true : false}
234
234
  transparency={isHomePageInverse ? true : false}
235
235
  logo={
236
- <div {...(isSubsite ? { className: 'logo-wrapper' } : {})}>
237
- {!!subsite && subsite.title ? (
236
+ <div className={isSubsite && 'logo-wrapper'}>
237
+ {subsite?.title ? (
238
238
  <>
239
239
  {subsite.subsite_logo ? (
240
240
  <Logo
@@ -131,14 +131,6 @@ const GeocharsWidget = (props) => {
131
131
  );
132
132
  const [selectedCity, setSelectedCity] = useState('');
133
133
 
134
- const geoElements = JSON.parse(value).geoElements;
135
- const element = geoElements.element;
136
- const countries = geoElements.countries;
137
- const macroRegions = geoElements.macrotrans;
138
- const bioRegions = geoElements.biotrans;
139
- const subRegions = geoElements.subnational;
140
- const city = geoElements.city;
141
-
142
134
  const DEFAULT_GEOCHARS = {
143
135
  geoElements: {
144
136
  element: 'GLOBAL',
@@ -150,6 +142,21 @@ const GeocharsWidget = (props) => {
150
142
  },
151
143
  };
152
144
 
145
+ let geoElements;
146
+
147
+ if (value !== null) {
148
+ geoElements = JSON.parse(value).geoElements;
149
+ } else {
150
+ geoElements = DEFAULT_GEOCHARS;
151
+ }
152
+
153
+ const element = geoElements.element;
154
+ const countries = geoElements.countries;
155
+ const macroRegions = geoElements.macrotrans;
156
+ const bioRegions = geoElements.biotrans;
157
+ const subRegions = geoElements.subnational;
158
+ const city = geoElements.city;
159
+
153
160
  const getJSON = () => {
154
161
  return JSON.parse(value);
155
162
  };
@@ -56,6 +56,11 @@ const GeolocationWidget = (props) => {
56
56
  setAddress(event.target.value);
57
57
  };
58
58
 
59
+ const defaultValue = {
60
+ latitude: 55.6761,
61
+ longitude: 12.5683,
62
+ };
63
+
59
64
  const handleSearch = (e) => {
60
65
  e.preventDefault();
61
66
 
@@ -101,9 +106,11 @@ const GeolocationWidget = (props) => {
101
106
  </div>
102
107
  </div>
103
108
  <MapContainer
104
- key={`${value.latitude}_${value.longitude}`}
105
- longitude={value.longitude}
106
- latitude={value.latitude}
109
+ key={`${value?.latitude || defaultValue.latitude}_${
110
+ value?.longitude || defaultValue.longitude
111
+ }`}
112
+ longitude={value?.longitude || defaultValue.longitude}
113
+ latitude={value?.latitude || defaultValue.latitude}
107
114
  source={tileWMSSources[0]}
108
115
  />
109
116
  <div className="ui form">
@@ -112,14 +119,14 @@ const GeolocationWidget = (props) => {
112
119
  <Input
113
120
  type="number"
114
121
  placeholder="latitude"
115
- value={value.latitude}
122
+ value={value?.latitude || defaultValue.latitude}
116
123
  />
117
124
  </div>
118
125
  <div className="field">
119
126
  <Input
120
127
  type="number"
121
128
  placeholder="longitude"
122
- value={value.longitude}
129
+ value={value?.longitude || defaultValue.longitude}
123
130
  />
124
131
  </div>
125
132
  </div>
package/src/index.js CHANGED
@@ -14,6 +14,8 @@ import ToolView from './components/theme/Views/ToolView';
14
14
  import VideoView from './components/theme/Views/VideoView';
15
15
  import C3SIndicatorView from './components/theme/Views/C3SIndicatorView';
16
16
 
17
+ import HealthHorizontalCardItem from './components/Result/HealthHorizontalCardItem';
18
+
17
19
  import ccaLogo from '@eeacms/volto-cca-policy/../theme/assets/images/Header/climate-adapt-logo.svg';
18
20
  import eeaWhiteLogo from '@eeacms/volto-eea-design-system/../theme/themes/eea/assets/logo/eea-logo-white.svg';
19
21
  import europeanComissionLogo from '@eeacms/volto-cca-policy/../theme/assets/images/Footer/ec_logo.svg';
@@ -270,6 +272,11 @@ const applyConfig = (config) => {
270
272
  },
271
273
  ];
272
274
 
275
+ // Custom results
276
+ config.settings.searchlib.resolve.HealthHorizontalCardItem = {
277
+ component: HealthHorizontalCardItem,
278
+ };
279
+
273
280
  // Custom widgets
274
281
  config.widgets.id.geochars = GeocharsWidget;
275
282
  config.widgets.id.geolocation = GeolocationWidget;
@@ -2,8 +2,8 @@ import { mergeConfig } from '@eeacms/search';
2
2
  import { build_runtime_mappings } from '@eeacms/volto-globalsearch/utils';
3
3
 
4
4
  import facets from './facets-health';
5
+ import views from './views-health';
5
6
 
6
- // import views from './views';
7
7
  // import filters from './filters';
8
8
  // import vocabs from './vocabulary';
9
9
 
@@ -16,6 +16,7 @@ const getClientProxyAddress = () => {
16
16
 
17
17
  const ccaConfig = {
18
18
  title: 'ClimateAdapt Health',
19
+ ...views,
19
20
  };
20
21
 
21
22
  export const clusters = {
@@ -80,6 +81,7 @@ export default function installMainSearch(config) {
80
81
  });
81
82
 
82
83
  ccaHealthSearch.facets = facets;
84
+ // ccaHealthSearch.views = views;
83
85
 
84
86
  ccaHealthSearch.initialView.tilesLandingPageParams.sections = [
85
87
  {
@@ -50,6 +50,19 @@ export default function installMainSearch(config) {
50
50
  cluster_name: {
51
51
  cca: 'Climate-ADAPT',
52
52
  },
53
+ 'cca_key_type_measure.keyword': {
54
+ A1: 'A1: Policy Instruments',
55
+ A2: 'A2: Management and planning',
56
+ A3: 'A3: Coordination cooperation and networks',
57
+ B1: 'B1: Financing incentive instruments',
58
+ B2: 'B2: Insurance and risk sharing instruments',
59
+ C1: 'C1: Grey options',
60
+ C2: 'C2: Technological options',
61
+ D1: 'D1: Green options',
62
+ D2: 'D2: Blue options',
63
+ E1: 'E1: Information and awareness raising',
64
+ E2: 'E2: Capacity building empowering and lifestyle practices',
65
+ },
53
66
  },
54
67
  runtime_mappings: build_runtime_mappings(clusters),
55
68
  };
@@ -61,11 +74,11 @@ export default function installMainSearch(config) {
61
74
  cluster_name: 'cca',
62
75
  },
63
76
  });
64
- ccaSearch.permanentFilters.push({
65
- term: {
66
- cca_include_in_search: 'true',
67
- },
68
- });
77
+ // ccaSearch.permanentFilters.push({
78
+ // term: {
79
+ // cca_include_in_search: 'true',
80
+ // },
81
+ // });
69
82
 
70
83
  ccaSearch.permanentFilters.push({
71
84
  terms: {
@@ -172,6 +185,7 @@ export default function installMainSearch(config) {
172
185
  config.searchui.ccaSearch.host =
173
186
  process.env.RAZZLE_ES_PROXY_ADDR || getClientProxyAddress();
174
187
  }
188
+
175
189
  // console.log(config.searchui.ccaSearch);
176
190
 
177
191
  return config;
@@ -1,3 +1,6 @@
1
+ import { booleanFacet } from '@eeacms/search';
2
+ import { getTodayWithTime } from './utils';
3
+
1
4
  const special = [
2
5
  {
3
6
  field: 'issued.date',
@@ -53,43 +56,32 @@ const special = [
53
56
  },
54
57
  },
55
58
 
56
- {
59
+ booleanFacet(() => ({
57
60
  field: 'IncludeArchived',
58
61
  label: 'Include archived content',
59
- on: null,
62
+ id: 'archived-facet',
63
+ showInFacetsList: false,
64
+ showInSecondaryFacetsList: true,
65
+ isFilter: true, // filters don't need facet options to show up
66
+
67
+ // we want this to be applied by default
68
+ // when the facet is checked, then apply the `on` key:
60
69
  off: {
61
70
  constant_score: {
62
71
  filter: {
63
72
  bool: {
64
73
  should: [
65
- {
66
- bool: {
67
- must_not: {
68
- exists: {
69
- field: 'expires',
70
- },
71
- },
72
- },
73
- },
74
- {
75
- range: {
76
- expires: {
77
- gte: '2023-04-27T11:52:29Z',
78
- },
79
- },
80
- },
74
+ { bool: { must_not: { exists: { field: 'expires' } } } },
75
+ // Functions should be supported in the buildFilters
76
+ { range: { expires: { gte: getTodayWithTime() } } },
81
77
  ],
82
78
  },
83
79
  },
84
80
  },
85
81
  },
86
- factory: 'BooleanFacet',
87
- wrapper: 'DummySUIFacetWrapper',
88
- showInFacetsList: false,
89
- id: 'archived-facet',
90
- showInSecondaryFacetsList: true,
91
- isFilter: true,
92
- },
82
+ on: null,
83
+ })),
84
+
93
85
  {
94
86
  field: 'op_cluster',
95
87
  factory: 'MultiTermFacet',
@@ -1,3 +1,6 @@
1
+ import { booleanFacet } from '@eeacms/search';
2
+ import { getTodayWithTime } from './utils';
3
+
1
4
  const facets = [
2
5
  {
3
6
  field: 'cca_adaptation_sectors.keyword',
@@ -12,44 +15,31 @@ const facets = [
12
15
  showAllOptions: true,
13
16
  alwaysVisible: true,
14
17
  },
15
-
16
- {
18
+ booleanFacet(() => ({
17
19
  field: 'IncludeArchived',
18
20
  label: 'Include archived content',
19
- on: null,
21
+ id: 'archived-facet',
22
+ showInFacetsList: false,
23
+ showInSecondaryFacetsList: true,
24
+ isFilter: true, // filters don't need facet options to show up
25
+
26
+ // we want this to be applied by default
27
+ // when the facet is checked, then apply the `on` key:
20
28
  off: {
21
29
  constant_score: {
22
30
  filter: {
23
31
  bool: {
24
32
  should: [
25
- {
26
- bool: {
27
- must_not: {
28
- exists: {
29
- field: 'expires',
30
- },
31
- },
32
- },
33
- },
34
- {
35
- range: {
36
- expires: {
37
- gte: '2023-04-27T11:52:29Z',
38
- },
39
- },
40
- },
33
+ { bool: { must_not: { exists: { field: 'expires' } } } },
34
+ // Functions should be supported in the buildFilters
35
+ { range: { expires: { gte: getTodayWithTime() } } },
41
36
  ],
42
37
  },
43
38
  },
44
39
  },
45
40
  },
46
- factory: 'BooleanFacet',
47
- wrapper: 'DummySUIFacetWrapper',
48
- showInFacetsList: false,
49
- id: 'archived-facet',
50
- showInSecondaryFacetsList: true,
51
- isFilter: true,
52
- },
41
+ on: null,
42
+ })),
53
43
  {
54
44
  field: 'op_cluster',
55
45
  factory: 'MultiTermFacet',
@@ -1190,6 +1180,18 @@ const facets = [
1190
1180
  sortOn: 'custom',
1191
1181
  sortOnCustomLabel: 'Alphabetical',
1192
1182
  },
1183
+ {
1184
+ field: 'cca_key_type_measure.keyword',
1185
+ factory: 'MultiTermFacet',
1186
+ label: 'Key Type Measure',
1187
+ showInFacetsList: true,
1188
+ filterType: 'any',
1189
+ isFilterable: false,
1190
+ show: 10000,
1191
+ isMulti: true,
1192
+ sortOn: 'custom',
1193
+ sortOnCustomLabel: 'Alphabetical',
1194
+ },
1193
1195
  {
1194
1196
  field: 'cca_funding_programme.keyword',
1195
1197
  factory: 'MultiTermFacet',
@@ -0,0 +1,29 @@
1
+ export function getTodayWithTime() {
2
+ const d = new Date();
3
+ const month = d.getMonth() + 1;
4
+ const day = d.getDate();
5
+ const hour = d.getHours();
6
+ const minute = d.getMinutes();
7
+ const second = d.getSeconds();
8
+
9
+ const output = [
10
+ d.getFullYear(),
11
+ '-',
12
+ month < 10 ? '0' : '',
13
+ month,
14
+ '-',
15
+ day < 10 ? '0' : '',
16
+ day,
17
+ 'T',
18
+ hour < 10 ? '0' : '',
19
+ hour,
20
+ ':',
21
+ minute < 10 ? '0' : '',
22
+ minute,
23
+ ':',
24
+ second < 10 ? '0' : '',
25
+ second,
26
+ 'Z',
27
+ ].join('');
28
+ return output;
29
+ }
@@ -0,0 +1,15 @@
1
+ export default {
2
+ resultViews: [
3
+ {
4
+ id: 'healthHorizontalCardItem',
5
+ title: 'Health catalogue items',
6
+ icon: 'bars',
7
+ render: null,
8
+ isDefault: true,
9
+ factories: {
10
+ view: 'HorizontalCard.Group',
11
+ item: 'HealthHorizontalCardItem',
12
+ },
13
+ },
14
+ ],
15
+ };