geonetwork-ui 2.8.0-dev.93d2d87c0 → 2.8.0-dev.94b119e28

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.
Files changed (206) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +5 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +26 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +7 -7
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -2
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -3
  8. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +1 -2
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +7 -3
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  12. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  13. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  14. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  15. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  17. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  18. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  19. package/esm2022/libs/feature/dataviz/src/index.mjs +2 -1
  20. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  21. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +18 -7
  22. package/esm2022/libs/feature/dataviz/src/lib/stac-view/stac-view.component.mjs +51 -0
  23. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  24. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  25. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  26. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  27. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +2 -1
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  29. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  30. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  31. package/esm2022/libs/feature/search/src/lib/constants.mjs +1 -2
  32. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  33. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  34. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  35. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  36. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  37. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  38. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  39. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  40. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  41. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  42. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  43. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  44. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  45. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  46. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  47. package/esm2022/translations/de.json +16 -3
  48. package/esm2022/translations/en.json +16 -4
  49. package/esm2022/translations/es.json +15 -2
  50. package/esm2022/translations/fr.json +16 -3
  51. package/esm2022/translations/it.json +17 -4
  52. package/esm2022/translations/nl.json +15 -2
  53. package/esm2022/translations/pt.json +15 -2
  54. package/esm2022/translations/sk.json +16 -3
  55. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs +35 -0
  56. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs.map +1 -0
  57. package/fesm2022/geonetwork-ui.mjs +457 -166
  58. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  59. package/index.d.ts +1 -0
  60. package/index.d.ts.map +1 -1
  61. package/index.ts +1 -0
  62. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  64. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  66. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  67. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  69. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  70. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  71. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  72. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  73. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  74. package/libs/common/domain/src/index.d.ts +3 -0
  75. package/libs/common/domain/src/index.d.ts.map +1 -0
  76. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  77. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  78. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  79. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  81. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  82. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  83. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  84. package/libs/feature/dataviz/src/index.d.ts +1 -0
  85. package/libs/feature/dataviz/src/index.d.ts.map +1 -1
  86. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  87. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  88. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts +16 -0
  89. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  90. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  91. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  92. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  93. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  94. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  95. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  96. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  97. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  98. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  99. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  100. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  101. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  102. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  103. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  105. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  106. package/libs/ui/elements/src/index.d.ts +1 -0
  107. package/libs/ui/elements/src/index.d.ts.map +1 -1
  108. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  109. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  110. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  111. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  112. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  113. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  114. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  116. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  117. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  118. package/libs/util/shared/src/index.d.ts +1 -0
  119. package/libs/util/shared/src/index.d.ts.map +1 -1
  120. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  121. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  122. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  123. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  124. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  125. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  126. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  127. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  128. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  129. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  130. package/package.json +1 -1
  131. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  132. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  133. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  134. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  135. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  136. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  137. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  138. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  139. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  140. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  141. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  142. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  143. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  144. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  145. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  146. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +0 -1
  147. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -4
  148. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  149. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  150. package/src/libs/common/domain/src/index.ts +2 -0
  151. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  152. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  153. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  154. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  155. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  156. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  157. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  158. package/src/libs/feature/dataviz/src/index.ts +1 -0
  159. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  160. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +16 -5
  161. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.css +0 -0
  162. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.html +40 -0
  163. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.ts +62 -0
  164. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  165. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  166. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  167. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  168. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  169. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  170. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  171. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  172. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  173. package/src/libs/feature/search/src/lib/constants.ts +0 -1
  174. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  175. package/src/libs/ui/elements/src/index.ts +1 -0
  176. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  177. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  178. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  179. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  180. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  181. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +69 -23
  182. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  183. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  184. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  185. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  186. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  187. package/src/libs/util/shared/src/index.ts +1 -0
  188. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  189. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  190. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  191. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  192. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  193. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  194. package/translations/de.json +16 -3
  195. package/translations/en.json +16 -4
  196. package/translations/es.json +15 -2
  197. package/translations/fr.json +16 -3
  198. package/translations/it.json +17 -4
  199. package/translations/nl.json +15 -2
  200. package/translations/pt.json +15 -2
  201. package/translations/sk.json +16 -3
  202. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  203. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  204. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  205. package/src/libs/common/domain/src/lib/index.ts +0 -2
  206. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +0 -54
@@ -8,6 +8,10 @@ import {
8
8
  } from '.'
9
9
  import { Router, Routes } from '@angular/router'
10
10
  import { ROUTER_CONFIG, RouterConfigModel } from './router.config'
11
+ import {
12
+ SortByEnum,
13
+ SortByField,
14
+ } from '../../../../../../libs/common/domain/src/lib/model/search'
11
15
 
12
16
  @Injectable({
13
17
  providedIn: 'root',
@@ -58,4 +62,8 @@ export class RouterService {
58
62
  getOrganizationPageRoute(): string {
59
63
  return ROUTER_ROUTE_ORGANIZATION
60
64
  }
65
+
66
+ getDefaultSort(): SortByField {
67
+ return SortByEnum.RESOURCE_DATES
68
+ }
61
69
  }
@@ -9,10 +9,7 @@ import {
9
9
  SetFilters,
10
10
  SetSortBy,
11
11
  } from '../../../../../../../libs/feature/search/src'
12
- import {
13
- FieldFilters,
14
- SortByEnum,
15
- } from '../../../../../../../libs/common/domain/src/lib/model/search'
12
+ import { FieldFilters } from '../../../../../../../libs/common/domain/src/lib/model/search'
16
13
  import { Actions, createEffect, ofType } from '@ngrx/effects'
17
14
  import { navigation } from '@ngrx/router-store/data-persistence'
18
15
  import { of, pairwise, startWith } from 'rxjs'
@@ -22,6 +19,7 @@ import { RouterFacade } from './router.facade'
22
19
  import { ROUTE_PARAMS } from '../constants'
23
20
  import { sortByFromString } from '../../../../../../../libs/util/shared/src'
24
21
  import { ROUTER_CONFIG, RouterConfigModel } from '../router.config'
22
+ import { RouterService } from '../router.service'
25
23
 
26
24
  @Injectable()
27
25
  export class RouterEffects {
@@ -31,7 +29,8 @@ export class RouterEffects {
31
29
  private _location: Location,
32
30
  private facade: RouterFacade,
33
31
  @Inject(ROUTER_CONFIG) private routerConfig: RouterConfigModel,
34
- private fieldsService: FieldsService
32
+ private fieldsService: FieldsService,
33
+ private routerService: RouterService
35
34
  ) {}
36
35
 
37
36
  navigate$ = createEffect(
@@ -61,7 +60,7 @@ export class RouterEffects {
61
60
  let sortBy =
62
61
  ROUTE_PARAMS.SORT in newParams
63
62
  ? sortByFromString(newParams[ROUTE_PARAMS.SORT])
64
- : SortByEnum.CHANGE_DATE
63
+ : this.routerService.getDefaultSort()
65
64
  let pageNumber =
66
65
  ROUTE_PARAMS.PAGE in newParams
67
66
  ? parseInt(newParams[ROUTE_PARAMS.PAGE])
@@ -70,7 +69,7 @@ export class RouterEffects {
70
69
  const oldSort =
71
70
  ROUTE_PARAMS.SORT in oldParams
72
71
  ? sortByFromString(oldParams[ROUTE_PARAMS.SORT])
73
- : SortByEnum.CHANGE_DATE
72
+ : this.routerService.getDefaultSort()
74
73
  if (JSON.stringify(sortBy) === JSON.stringify(oldSort)) {
75
74
  sortBy = null
76
75
  }
@@ -11,7 +11,6 @@ export const FIELDS_SUMMARY: FieldName[] = [
11
11
  'resourceAbstractObject',
12
12
  'overview',
13
13
  'logo',
14
- 'codelist_status_text',
15
14
  'link',
16
15
  'linkProtocol',
17
16
  'contactForResource*.organisation*',
@@ -13,7 +13,7 @@ import { TranslatePipe } from '@ngx-translate/core'
13
13
 
14
14
  interface SortChoice {
15
15
  label: string
16
- value: string
16
+ value: SortByField
17
17
  }
18
18
 
19
19
  @Component({
@@ -27,24 +27,20 @@ export class SortByComponent implements OnInit {
27
27
  choices: SortChoice[] = [
28
28
  {
29
29
  label: marker('results.sortBy.relevancy'),
30
- value: SortByEnum.RELEVANCY.join(','),
30
+ value: SortByEnum.RELEVANCY,
31
31
  },
32
32
  {
33
33
  label: marker('results.sortBy.dateStamp'),
34
- value: SortByEnum.CREATE_DATE.join(','),
35
- },
36
- {
37
- label: marker('results.sortBy.changeDate'),
38
- value: SortByEnum.CHANGE_DATE.join(','),
34
+ value: SortByEnum.RESOURCE_DATES,
39
35
  },
40
36
  {
41
37
  label: marker('results.sortBy.popularity'),
42
- value: SortByEnum.POPULARITY.join(','),
38
+ value: SortByEnum.POPULARITY,
43
39
  },
44
40
  ]
45
41
  currentSortBy$ = this.facade.sortBy$.pipe(
46
42
  filter((sortBy) => !!sortBy),
47
- map((sortBy) => sortBy.join(','))
43
+ map((sortBy) => sortBy)
48
44
  )
49
45
 
50
46
  constructor(
@@ -56,12 +52,12 @@ export class SortByComponent implements OnInit {
56
52
  if (this.isQualitySortable) {
57
53
  this.choices.push({
58
54
  label: marker('results.sortBy.qualityScore'),
59
- value: SortByEnum.QUALITY_SCORE.join(','),
55
+ value: SortByEnum.QUALITY_SCORE,
60
56
  })
61
57
  }
62
58
  }
63
59
 
64
- changeSortBy(criteriaAsString: string) {
65
- this.searchService.setSortBy(criteriaAsString.split(',') as SortByField)
60
+ changeSortBy(criteria: SortByField): void {
61
+ this.searchService.setSortBy(criteria)
66
62
  }
67
63
  }
@@ -14,6 +14,7 @@ export * from './lib/markdown-editor/markdown-editor.component'
14
14
  export * from './lib/markdown-parser/markdown-parser.component'
15
15
  export * from './lib/metadata-catalog/metadata-catalog.component'
16
16
  export * from './lib/metadata-contact/metadata-contact.component'
17
+ export * from './lib/metadata-doi/metadata-doi.component'
17
18
  export * from './lib/metadata-info/metadata-info.component'
18
19
  export * from './lib/metadata-quality-item/metadata-quality-item.component'
19
20
  export * from './lib/metadata-quality/metadata-quality.component'
@@ -1,15 +1,48 @@
1
- <a
2
- [href]="link.url"
3
- target="_blank"
4
- class="group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden"
5
- [ngClass]="cardClass"
6
- [title]="title"
7
- >
1
+ <ng-container *ngIf="isDatabase; else clickableLink">
2
+ <div [ngClass]="cardClass" [title]="title">
3
+ <ng-container *ngTemplateOutlet="cardContent"></ng-container>
4
+ <div
5
+ class="flex min-w-[32px]"
6
+ [ngClass]="size === 'S' ? 'items-end' : 'items-center'"
7
+ >
8
+ <div
9
+ class="gn-ui-card-icon"
10
+ [title]="'record.metadata.link.postgis.tooltip' | translate"
11
+ >
12
+ <ng-icon
13
+ class="inline-block card-icon align-middle"
14
+ name="iconoirDatabase"
15
+ ></ng-icon>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </ng-container>
20
+
21
+ <ng-template #clickableLink>
22
+ <a [href]="link.url" target="_blank" [ngClass]="cardClass" [title]="title">
23
+ <ng-container *ngTemplateOutlet="cardContent"></ng-container>
24
+ <div
25
+ class="flex min-w-[32px]"
26
+ [ngClass]="size === 'S' ? 'items-end' : 'items-center'"
27
+ >
28
+ <div class="gn-ui-card-icon">
29
+ <ng-icon
30
+ class="inline-block card-icon align-middle"
31
+ name="matOpenInNew"
32
+ ></ng-icon>
33
+ </div>
34
+ </div>
35
+ </a>
36
+ </ng-template>
37
+ <ng-template #cardContent>
8
38
  <div class="flex flex-col justify-between flex-1 min-w-0">
9
39
  <div class="gn-ui-card-title">
10
40
  {{ link.description || link.name }}
11
41
  </div>
12
42
  <div class="gn-ui-card-detail">
43
+ <ng-container *ngIf="isDatabase">
44
+ {{ 'record.metadata.link.postgis.table' | translate }}
45
+ </ng-container>
13
46
  {{ link.name }}
14
47
  </div>
15
48
  <p *ngIf="!link.name && !link.description" class="gn-ui-card-title">
@@ -20,21 +53,9 @@
20
53
  class="inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100"
21
54
  [style.background-color]="getLinkColor(link)"
22
55
  data-cy="download-format"
23
- >{{
24
- getLinkFormat(link) || ('downloads.format.unknown' | translate)
25
- }}</span
26
56
  >
57
+ {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}
58
+ </span>
27
59
  </div>
28
60
  </div>
29
- <div
30
- class="flex min-w-[32px]"
31
- [ngClass]="size === 'S' ? 'items-end' : 'items-center'"
32
- >
33
- <div class="gn-ui-card-icon">
34
- <ng-icon
35
- class="inline-block card-icon align-middle"
36
- name="matOpenInNew"
37
- ></ng-icon>
38
- </div>
39
- </div>
40
- </a>
61
+ </ng-template>
@@ -7,6 +7,7 @@ import {
7
7
  provideNgIconsConfig,
8
8
  } from '@ng-icons/core'
9
9
  import { matOpenInNew } from '@ng-icons/material-icons/baseline'
10
+ import { iconoirDatabase } from '@ng-icons/iconoir'
10
11
  import { getBadgeColor, getFileFormat } from '../../../../../../libs/util/shared/src'
11
12
  import { TranslatePipe } from '@ngx-translate/core'
12
13
 
@@ -21,6 +22,7 @@ type CardSize = 'L' | 'M' | 'S' | 'XS'
21
22
  providers: [
22
23
  provideIcons({
23
24
  matOpenInNew,
25
+ iconoirDatabase,
24
26
  }),
25
27
  provideNgIconsConfig({ size: '1.5em' }),
26
28
  ],
@@ -37,7 +39,7 @@ export class ExternalLinkCardComponent {
37
39
 
38
40
  @Input() set size(value: CardSize) {
39
41
  this._size = value
40
- this.cardClass = this.sizeClassMap[value]
42
+ this.cardClass = `group flex flex-row justify-between card-shadow rounded overflow-hidden ${this.sizeClassMap[value]}`
41
43
  }
42
44
  get size(): CardSize {
43
45
  return this._size
@@ -51,11 +53,18 @@ export class ExternalLinkCardComponent {
51
53
  return this.link.name || this.link.description || ''
52
54
  }
53
55
 
54
- getLinkFormat(link: any) {
56
+ get isDatabase(): boolean {
57
+ return (
58
+ this.link.type === 'service' &&
59
+ this.link.accessServiceProtocol === 'postgis'
60
+ )
61
+ }
62
+
63
+ getLinkFormat(link: DatasetOnlineResource): string {
55
64
  return getFileFormat(link)
56
65
  }
57
66
 
58
- getLinkColor(link: any) {
67
+ getLinkColor(link: DatasetOnlineResource): string {
59
68
  return getBadgeColor(getFileFormat(link))
60
69
  }
61
70
  }
@@ -0,0 +1,31 @@
1
+ <div
2
+ class="border border-gray-300 rounded-lg py-4 px-5 text-black flex justify-between items-center gap-4"
3
+ >
4
+ <div class="overflow-hidden flex-1">
5
+ <p class="text-base font-medium mb-3">DOI</p>
6
+ <p
7
+ class="text-base font-medium overflow-hidden text-ellipsis whitespace-nowrap"
8
+ [title]="code"
9
+ >
10
+ {{ code }}
11
+ </p>
12
+ </div>
13
+ <div class="flex gap-2 items-start">
14
+ <gn-ui-copy-text-button
15
+ [text]="code"
16
+ [displayText]="false"
17
+ [tooltipText]="'record.metadata.doi.copy' | translate"
18
+ class="[&>div]:flex [&>div]:items-center [&>div]:justify-center [&_button]:w-[40px] [&_button]:h-[32px] [&_button]:flex [&_button]:items-center [&_button]:justify-center [&_button]:hover:bg-gray-100 [&_button]:rounded-lg [&_button]:transition-colors [&_button]:border [&_button]:border-gray-300 [&_button]:px-2 [&_button]:py-1 [&_ng-icon]:w-5 [&_ng-icon]:h-5"
19
+ ></gn-ui-copy-text-button>
20
+ <a
21
+ *ngIf="link"
22
+ [href]="link"
23
+ target="_blank"
24
+ rel="noopener noreferrer"
25
+ class="w-[40px] h-[32px] flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors border border-gray-300 px-2 py-1"
26
+ [matTooltip]="'record.metadata.doi.open' | translate"
27
+ >
28
+ <ng-icon name="matOpenInNew" size="20"></ng-icon>
29
+ </a>
30
+ </div>
31
+ </div>
@@ -0,0 +1,30 @@
1
+ import { Component, Input } from '@angular/core'
2
+ import { CommonModule } from '@angular/common'
3
+ import { NgIcon, provideIcons } from '@ng-icons/core'
4
+ import { MatTooltipModule } from '@angular/material/tooltip'
5
+ import { matOpenInNew } from '@ng-icons/material-icons/baseline'
6
+ import { TranslatePipe } from '@ngx-translate/core'
7
+ import { CopyTextButtonComponent } from '../../../../../../libs/ui/inputs/src'
8
+
9
+ @Component({
10
+ selector: 'gn-ui-metadata-doi',
11
+ standalone: true,
12
+ imports: [
13
+ CommonModule,
14
+ MatTooltipModule,
15
+ NgIcon,
16
+ TranslatePipe,
17
+ CopyTextButtonComponent,
18
+ ],
19
+ templateUrl: './metadata-doi.component.html',
20
+ styleUrl: './metadata-doi.component.css',
21
+ viewProviders: [
22
+ provideIcons({
23
+ matOpenInNew,
24
+ }),
25
+ ],
26
+ })
27
+ export class MetadataDoiComponent {
28
+ @Input() code!: string
29
+ @Input() link?: string
30
+ }
@@ -3,7 +3,11 @@
3
3
  ghostClass="h-[178px]"
4
4
  [showContent]="fieldReady('abstract')"
5
5
  >
6
- <gn-ui-max-lines [maxLines]="6" *ngIf="metadata.abstract">
6
+ <gn-ui-max-lines
7
+ [maxLines]="6"
8
+ *ngIf="metadata.abstract"
9
+ data-test="metadata-info-abstract"
10
+ >
7
11
  <div class="mb-6">
8
12
  <gn-ui-markdown-parser
9
13
  [textContent]="metadata.abstract"
@@ -24,7 +28,7 @@
24
28
  ghostClass="h-[31px] w-3/4"
25
29
  [showContent]="fieldReady('keywords')"
26
30
  >
27
- <div *ngIf="metadata.keywords?.length">
31
+ <gn-ui-max-lines [maxLines]="7" *ngIf="metadata.keywords?.length">
28
32
  <div class="metadata-info-keywords sm:pb-4 flex flex-wrap gap-2">
29
33
  <gn-ui-badge
30
34
  class="inline-block lowercase"
@@ -34,7 +38,7 @@
34
38
  >{{ keyword.label }}</gn-ui-badge
35
39
  >
36
40
  </div>
37
- </div>
41
+ </gn-ui-max-lines>
38
42
  </gn-ui-content-ghost>
39
43
  </div>
40
44
 
@@ -101,19 +105,31 @@
101
105
  <gn-ui-expandable-panel
102
106
  *ngIf="
103
107
  (metadata.kind === 'dataset' && metadata.lineage) ||
108
+ resourceContact ||
109
+ metadata.resourceCreated ||
110
+ metadata.resourcePublished ||
104
111
  metadata.resourceUpdated ||
105
- metadata.updateFrequency ||
106
- (metadata.kind === 'dataset' && metadata.status)
112
+ (metadata.kind === 'dataset' && metadata.updateFrequency) ||
113
+ metadata.otherLanguages?.length ||
114
+ (metadata.kind === 'dataset' && temporalExtent)
107
115
  "
108
116
  [title]="'record.metadata.details' | translate"
109
117
  data-test="details-panel"
110
118
  >
111
- <div *ngIf="metadata.lineage" class="text-gray-900 flex flex-col mt-4 gap-2">
119
+ <div
120
+ *ngIf="metadata.kind === 'dataset' && metadata.lineage"
121
+ class="text-gray-900 flex flex-col mt-4 gap-2"
122
+ data-test="details-panel-lineage"
123
+ >
112
124
  <p class="whitespace-pre-line break-words text-gray-900" gnUiLinkify>
113
125
  {{ metadata.lineage }}
114
126
  </p>
115
127
  </div>
116
- <div class="flex flex-row gap-6 mt-5 mb-8" *ngIf="resourceContact">
128
+ <div
129
+ class="flex flex-row gap-6 mt-5 mb-8 resource-contact"
130
+ *ngIf="resourceContact"
131
+ data-test="details-panel-resource-contact"
132
+ >
117
133
  <div
118
134
  *ngIf="resourceContact.organization?.logoUrl?.href"
119
135
  class="flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden"
@@ -165,19 +181,40 @@
165
181
  <div
166
182
  class="py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700"
167
183
  >
168
- <div *ngIf="metadata.resourceCreated">
184
+ <div
185
+ *ngIf="metadata.resourceCreated"
186
+ data-test="details-panel-resource-created"
187
+ >
169
188
  <p class="text-sm" translate>record.metadata.creation</p>
170
- <p class="text-primary font-medium mt-1">
171
- {{ formatDate(metadata.resourceCreated) }}
172
- </p>
189
+ <p
190
+ class="text-primary font-medium mt-1 resource-created"
191
+ [gnUiHumanizeDate]="metadata.resourceCreated"
192
+ ></p>
173
193
  </div>
174
- <div *ngIf="metadata.resourcePublished">
194
+ <div
195
+ *ngIf="metadata.resourcePublished"
196
+ data-test="details-panel-resource-published"
197
+ >
175
198
  <p class="text-sm" translate>record.metadata.publication</p>
176
- <p class="text-primary font-medium mt-1">
177
- {{ formatDate(metadata.resourcePublished) }}
178
- </p>
199
+ <p
200
+ class="text-primary font-medium mt-1 resource-published"
201
+ [gnUiHumanizeDate]="metadata.resourcePublished"
202
+ ></p>
179
203
  </div>
180
- <div *ngIf="updateFrequency">
204
+ <div
205
+ *ngIf="metadata.resourceUpdated"
206
+ data-test="details-panel-resource-updated"
207
+ >
208
+ <p class="text-sm" translate>record.metadata.update</p>
209
+ <p
210
+ class="text-primary font-medium mt-1 resource-updated"
211
+ [gnUiHumanizeDate]="metadata.resourceUpdated"
212
+ ></p>
213
+ </div>
214
+ <div
215
+ *ngIf="metadata.kind === 'dataset' && metadata.updateFrequency"
216
+ data-test="details-panel-update-frequency"
217
+ >
181
218
  <p class="text-sm" translate>record.metadata.updateFrequency</p>
182
219
  <p
183
220
  class="text-primary font-medium mt-1 updateFrequency"
@@ -187,11 +224,14 @@
187
224
  {{ updateFrequency }}
188
225
  </p>
189
226
  </div>
190
- <div *ngIf="metadata.otherLanguages?.length">
227
+ <div
228
+ *ngIf="metadata.otherLanguages?.length"
229
+ data-test="details-panel-other-languages"
230
+ >
191
231
  <p class="text-sm mb-1" translate>record.metadata.languages</p>
192
232
  <div class="flex flex-row gap-1 flex-wrap">
193
233
  <p
194
- class="text-primary font-medium"
234
+ class="text-primary font-medium other-languages"
195
235
  translate
196
236
  *ngFor="let language of metadata.otherLanguages"
197
237
  >
@@ -199,9 +239,14 @@
199
239
  </p>
200
240
  </div>
201
241
  </div>
202
- <div *ngIf="temporalExtent">
242
+ <div
243
+ *ngIf="metadata.kind === 'dataset' && temporalExtent"
244
+ data-test="details-panel-temporal-extent"
245
+ >
203
246
  <p class="text-sm" translate>record.metadata.temporalExtent</p>
204
- <div class="flex flex-row gap-1 mb-1 text-primary font-medium">
247
+ <div
248
+ class="flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent"
249
+ >
205
250
  <p
206
251
  *ngIf="temporalExtent.start && temporalExtent.end"
207
252
  translate
@@ -252,9 +297,10 @@
252
297
  <div class="flex flex-col gap-4 mr-4 py-5 rounded text-gray-700">
253
298
  <div *ngIf="metadata.recordUpdated">
254
299
  <p class="text-sm" translate>record.metadata.updatedOn</p>
255
- <p class="text-primary font-medium">
256
- {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}
257
- </p>
300
+ <p
301
+ class="text-primary font-medium"
302
+ [gnUiHumanizeDate]="metadata.recordUpdated"
303
+ ></p>
258
304
  </div>
259
305
  <div *ngIf="metadata.landingPage">
260
306
  <p class="text-sm" translate>record.metadata.sheet</p>
@@ -26,7 +26,7 @@ import { matOpenInNew } from '@ng-icons/material-icons/baseline'
26
26
  import { matMailOutline } from '@ng-icons/material-icons/outline'
27
27
  import { ThumbnailComponent } from '../thumbnail/thumbnail.component'
28
28
  import { GnUiLinkifyDirective } from './linkify.directive'
29
-
29
+ import { GnUiHumanizeDateDirective } from '../../../../../../libs/util/shared/src'
30
30
  import { CommonModule } from '@angular/common'
31
31
  import { SpatialExtentComponent } from '../../../../../../libs/ui/map/src'
32
32
 
@@ -49,6 +49,7 @@ import { SpatialExtentComponent } from '../../../../../../libs/ui/map/src'
49
49
  CopyTextButtonComponent,
50
50
  NgIcon,
51
51
  GnUiLinkifyDirective,
52
+ GnUiHumanizeDateDirective,
52
53
  SpatialExtentComponent,
53
54
  ],
54
55
  viewProviders: [
@@ -146,12 +147,4 @@ export class MetadataInfoComponent {
146
147
  onKeywordClick(keyword: Keyword) {
147
148
  this.keyword.emit(keyword)
148
149
  }
149
-
150
- formatDate(date: Date): string {
151
- return this.dateService.formatDate(date)
152
- }
153
-
154
- formatDateTime(date: Date): string {
155
- return this.dateService.formatDateTime(date)
156
- }
157
150
  }
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  <div class="p-4 flex flex-col">
15
15
  <span>{{ userFeedbackParent.authorName }}</span>
16
- <span> {{ userFeedbackParent.date | timeSince }}</span>
16
+ <span [gnUiHumanizeDate]="userFeedbackParent.date"></span>
17
17
  </div>
18
18
  </div>
19
19
  <div data-cy="commentText" class="mt-4 whitespace-pre-line">
@@ -11,13 +11,13 @@ import {
11
11
  UserFeedbackViewModel,
12
12
  } from '../../../../../../libs/common/domain/src/lib/model/record'
13
13
  import { UserModel } from '../../../../../../libs/common/domain/src/lib/model/user'
14
- import { TimeSincePipe } from './time-since.pipe'
15
14
  import { CommonModule } from '@angular/common'
16
15
  import { ButtonComponent, TextAreaComponent } from '../../../../../../libs/ui/inputs/src'
17
16
  import { TranslatePipe } from '@ngx-translate/core'
18
17
  import { SpinningLoaderComponent } from '../../../../../../libs/ui/widgets/src'
19
18
  import { NgIcon, provideIcons } from '@ng-icons/core'
20
19
  import { matSendOutline } from '@ng-icons/material-icons/outline'
20
+ import { GnUiHumanizeDateDirective } from '../../../../../../libs/util/shared/src'
21
21
 
22
22
  @Component({
23
23
  selector: 'gn-ui-user-feedback-item',
@@ -27,11 +27,11 @@ import { matSendOutline } from '@ng-icons/material-icons/outline'
27
27
  standalone: true,
28
28
  imports: [
29
29
  CommonModule,
30
- TimeSincePipe,
31
30
  TextAreaComponent,
32
31
  TranslatePipe,
33
32
  ButtonComponent,
34
33
  SpinningLoaderComponent,
34
+ GnUiHumanizeDateDirective,
35
35
  NgIcon,
36
36
  ],
37
37
  viewProviders: [
@@ -90,8 +90,10 @@ export class DropdownSelectorComponent implements OnInit {
90
90
 
91
91
  get selectedChoice(): DropdownChoice {
92
92
  return (
93
- this.choices.find((choice) => choice.value === this.selected) ??
94
- this.choices[0]
93
+ this.choices.find(
94
+ (choice) =>
95
+ JSON.stringify(choice.value) === JSON.stringify(this.selected)
96
+ ) ?? this.choices[0]
95
97
  )
96
98
  }
97
99
 
@@ -0,0 +1,63 @@
1
+ import { LanguageCode2 } from './language-codes'
2
+ import {
3
+ ar,
4
+ az,
5
+ ca,
6
+ cs,
7
+ cy,
8
+ da,
9
+ de,
10
+ enUS,
11
+ es,
12
+ fi,
13
+ fr,
14
+ hy,
15
+ is,
16
+ it,
17
+ ka,
18
+ ko,
19
+ Locale,
20
+ nl,
21
+ nn,
22
+ pl,
23
+ pt,
24
+ ru,
25
+ sk,
26
+ sv,
27
+ tr,
28
+ uk,
29
+ zhCN,
30
+ } from 'date-fns/locale'
31
+
32
+ // all 2-char language codes should be listed here
33
+ const locales: Record<LanguageCode2, Locale> = {
34
+ en: enUS,
35
+ nl: nl,
36
+ fr: fr,
37
+ de: de,
38
+ ko: ko,
39
+ es: es,
40
+ cs: cs,
41
+ ca: ca,
42
+ fi: fi,
43
+ is: is,
44
+ it: it,
45
+ pt: pt,
46
+ ru: ru,
47
+ zh: zhCN,
48
+ sk: sk,
49
+ ar: ar,
50
+ da: da,
51
+ no: nn,
52
+ pl: pl,
53
+ sv: sv,
54
+ tr: tr,
55
+ hy: hy,
56
+ az: az,
57
+ ka: ka,
58
+ uk: uk,
59
+ cy: cy,
60
+ rm: enUS, // locale is unavailable
61
+ }
62
+
63
+ export default locales
@@ -4,3 +4,4 @@ export * from './lib/links'
4
4
  export * from './lib/image-fallback.directive'
5
5
  export * from './lib/gn-ui-version'
6
6
  export * from './lib/record'
7
+ export * from './lib/humanize-date.directive'