geonetwork-ui 2.8.0-dev.50da356b9 → 2.8.0-dev.5186798f7

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 (159) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +3 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +24 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +7 -7
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -2
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -3
  6. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +1 -2
  7. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  8. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  9. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +26 -8
  10. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  11. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  12. package/esm2022/libs/feature/record/src/index.mjs +2 -1
  13. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  14. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  15. package/esm2022/libs/feature/record/src/lib/stac-view/stac-view.component.mjs +138 -0
  16. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  17. package/esm2022/libs/feature/search/src/lib/constants.mjs +1 -2
  18. package/esm2022/libs/ui/elements/src/index.mjs +3 -1
  19. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +1 -1
  20. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  21. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  22. package/esm2022/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.mjs +18 -0
  23. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  24. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  25. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +21 -7
  26. package/esm2022/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.mjs +35 -0
  27. package/esm2022/libs/ui/layout/src/lib/paginable.interface.mjs +1 -1
  28. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +13 -5
  29. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  30. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  31. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  32. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  33. package/esm2022/translations/de.json +14 -4
  34. package/esm2022/translations/en.json +14 -4
  35. package/esm2022/translations/es.json +10 -0
  36. package/esm2022/translations/fr.json +14 -4
  37. package/esm2022/translations/it.json +15 -5
  38. package/esm2022/translations/nl.json +10 -0
  39. package/esm2022/translations/pt.json +10 -0
  40. package/esm2022/translations/sk.json +11 -1
  41. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs +35 -0
  42. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs.map +1 -0
  43. package/fesm2022/geonetwork-ui.mjs +522 -151
  44. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  45. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  48. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  50. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  51. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  52. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  53. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -1
  54. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  55. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -1
  56. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  57. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  58. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  59. package/libs/feature/record/src/index.d.ts +1 -0
  60. package/libs/feature/record/src/index.d.ts.map +1 -1
  61. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  62. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  63. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  64. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  65. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts +35 -0
  66. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  67. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  68. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  69. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  70. package/libs/ui/elements/src/index.d.ts +2 -0
  71. package/libs/ui/elements/src/index.d.ts.map +1 -1
  72. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  73. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  74. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  75. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  76. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts +8 -0
  77. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts.map +1 -0
  78. package/libs/ui/inputs/src/index.d.ts +1 -0
  79. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  80. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +5 -0
  81. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  82. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts +12 -0
  83. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts.map +1 -0
  84. package/libs/ui/layout/src/lib/paginable.interface.d.ts +3 -3
  85. package/libs/ui/layout/src/lib/paginable.interface.d.ts.map +1 -1
  86. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +2 -1
  87. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -1
  88. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  89. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  90. package/libs/util/shared/src/index.d.ts +1 -0
  91. package/libs/util/shared/src/index.d.ts.map +1 -1
  92. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  93. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  94. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  95. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  96. package/package.json +1 -1
  97. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  98. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  99. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  100. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  101. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  102. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  103. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  104. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  105. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  106. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +26 -0
  107. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  108. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  109. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  110. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +0 -1
  111. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  112. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +8 -1
  113. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +30 -5
  114. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  115. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  116. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  117. package/src/libs/feature/record/src/index.ts +1 -0
  118. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  119. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  120. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.css +3 -0
  121. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.html +68 -0
  122. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.ts +190 -0
  123. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  124. package/src/libs/feature/search/src/lib/constants.ts +0 -1
  125. package/src/libs/ui/elements/src/index.ts +2 -0
  126. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  127. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  128. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  129. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +67 -21
  130. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  131. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.css +0 -0
  132. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.html +13 -0
  133. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.ts +15 -0
  134. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  135. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  136. package/src/libs/ui/inputs/src/index.ts +1 -0
  137. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +17 -1
  138. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.css +0 -0
  139. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.html +15 -0
  140. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.ts +41 -0
  141. package/src/libs/ui/layout/src/lib/paginable.interface.ts +3 -3
  142. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.html +12 -6
  143. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.ts +4 -1
  144. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  145. package/src/libs/util/shared/src/index.ts +1 -0
  146. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  147. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  148. package/translations/de.json +14 -4
  149. package/translations/en.json +14 -4
  150. package/translations/es.json +10 -0
  151. package/translations/fr.json +14 -4
  152. package/translations/it.json +15 -5
  153. package/translations/nl.json +10 -0
  154. package/translations/pt.json +10 -0
  155. package/translations/sk.json +11 -1
  156. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  157. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  158. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  159. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +0 -54
@@ -0,0 +1,41 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ EventEmitter,
5
+ Input,
6
+ Output,
7
+ } from '@angular/core'
8
+ import { DatePickerComponent } from '../date-picker/date-picker.component'
9
+ import { DatasetTemporalExtent } from '../../../../../../libs/common/domain/src/lib/model/record/metadata.model'
10
+ import { TranslateDirective } from '@ngx-translate/core'
11
+ import { CommonModule } from '@angular/common'
12
+
13
+ @Component({
14
+ selector: 'gn-ui-date-range-inputs',
15
+ standalone: true,
16
+ imports: [CommonModule, TranslateDirective, DatePickerComponent],
17
+ templateUrl: './date-range-inputs.component.html',
18
+ styleUrl: './date-range-inputs.component.css',
19
+ changeDetection: ChangeDetectionStrategy.OnPush,
20
+ })
21
+ export class DateRangeInputsComponent {
22
+ @Input() temporalExtent: DatasetTemporalExtent | null
23
+ @Output() temporalExtentChange =
24
+ new EventEmitter<DatasetTemporalExtent | null>()
25
+
26
+ onStartDateChange(date: Date) {
27
+ this.temporalExtent = {
28
+ ...this.temporalExtent,
29
+ start: date,
30
+ }
31
+ this.temporalExtentChange.emit(this.temporalExtent)
32
+ }
33
+
34
+ onEndDateChange(date: Date) {
35
+ this.temporalExtent = {
36
+ ...this.temporalExtent,
37
+ end: date,
38
+ }
39
+ this.temporalExtentChange.emit(this.temporalExtent)
40
+ }
41
+ }
@@ -6,9 +6,9 @@
6
6
  export interface Paginable {
7
7
  isFirstPage: boolean
8
8
  isLastPage: boolean
9
- pagesCount: number
10
- currentPage: number
11
- goToPage(index: number): void
9
+ pagesCount?: number
10
+ currentPage?: number
11
+ goToPage?(index: number): void
12
12
  goToNextPage(): void
13
13
  goToPrevPage(): void
14
14
  }
@@ -3,28 +3,34 @@
3
3
  data-test="previousButton"
4
4
  type="light"
5
5
  [extraClass]="
6
- 'w-10 h-8 px-2 py-1 rounded-lg ' +
6
+ 'w-auto min-w-10 h-8 px-2 py-1 rounded-lg ' +
7
7
  (!listComponent.isFirstPage
8
- ? 'border border-gray-300'
9
- : 'border border-gray-100')
8
+ ? 'border border-gray-300 text-main'
9
+ : 'border border-gray-100 text-gray-300')
10
10
  "
11
11
  [disabled]="listComponent.isFirstPage"
12
12
  (buttonClick)="listComponent.goToPrevPage()"
13
13
  >
14
14
  <ng-icon name="matArrowBackIos"></ng-icon>
15
+ <span *ngIf="displayLabels" class="ml-2" translate
16
+ >pagination.previousPage</span
17
+ >
15
18
  </gn-ui-button>
16
19
  <gn-ui-button
17
20
  data-test="nextButton"
18
21
  type="light"
19
22
  [extraClass]="
20
- 'w-10 h-8 px-2 py-1 rounded-lg ' +
23
+ 'w-auto min-w-10 h-8 px-2 py-1 rounded-lg ' +
21
24
  (!listComponent.isLastPage
22
- ? 'border border-gray-300'
23
- : 'border border-gray-100')
25
+ ? 'border border-gray-300 text-main'
26
+ : 'border border-gray-100 text-gray-300')
24
27
  "
25
28
  [disabled]="listComponent.isLastPage"
26
29
  (buttonClick)="listComponent.goToNextPage()"
27
30
  >
31
+ <span *ngIf="displayLabels" class="mr-2" translate
32
+ >pagination.nextPage</span
33
+ >
28
34
  <ng-icon name="matArrowForwardIos"></ng-icon>
29
35
  </gn-ui-button>
30
36
  </div>
@@ -10,13 +10,15 @@ import {
10
10
  } from '@ng-icons/material-icons/baseline'
11
11
  import { Paginable } from '../paginable.interface'
12
12
  import { ButtonComponent } from '../../../../../../libs/ui/inputs/src'
13
+ import { CommonModule } from '@angular/common'
14
+ import { TranslateDirective } from '@ngx-translate/core'
13
15
 
14
16
  @Component({
15
17
  selector: 'gn-ui-previous-next-buttons',
16
18
  templateUrl: './previous-next-buttons.component.html',
17
19
  styleUrls: ['./previous-next-buttons.component.css'],
18
20
  standalone: true,
19
- imports: [ButtonComponent, NgIconComponent],
21
+ imports: [CommonModule, ButtonComponent, NgIconComponent, TranslateDirective],
20
22
  providers: [
21
23
  provideIcons({ matArrowBackIos, matArrowForwardIos }),
22
24
  provideNgIconsConfig({
@@ -26,4 +28,5 @@ import { ButtonComponent } from '../../../../../../libs/ui/inputs/src'
26
28
  })
27
29
  export class PreviousNextButtonsComponent {
28
30
  @Input() listComponent: Paginable
31
+ @Input() displayLabels = false
29
32
  }
@@ -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'
@@ -0,0 +1,35 @@
1
+ import { Renderer2, Directive, ElementRef, Input, OnInit } from '@angular/core'
2
+ import { DateService } from './services/date.service'
3
+
4
+ @Directive({
5
+ selector: '[gnUiHumanizeDate]',
6
+ standalone: true,
7
+ })
8
+ export class GnUiHumanizeDateDirective implements OnInit {
9
+ @Input() gnUiHumanizeDate: Date | string
10
+
11
+ constructor(
12
+ private dateService: DateService,
13
+ private el: ElementRef,
14
+ private renderer: Renderer2
15
+ ) {}
16
+
17
+ async ngOnInit() {
18
+ await this.updateElement()
19
+ }
20
+
21
+ private async updateElement(): Promise<void> {
22
+ const dateValue = this.gnUiHumanizeDate
23
+
24
+ const fullDateTime = this.dateService.formatDateTime(dateValue)
25
+ const relativeDate =
26
+ await this.dateService.formatRelativeDateTime(dateValue)
27
+
28
+ this.renderer.setAttribute(this.el.nativeElement, 'title', fullDateTime)
29
+ this.renderer.setProperty(
30
+ this.el.nativeElement,
31
+ 'textContent',
32
+ relativeDate
33
+ )
34
+ }
35
+ }
@@ -1,10 +1,18 @@
1
1
  import { Injectable } from '@angular/core'
2
2
  import { TranslateService } from '@ngx-translate/core'
3
+ import { type Locale } from 'date-fns/locale'
4
+ import { formatDistance } from 'date-fns/formatDistance'
5
+
6
+ const DEFAULT_LANGUAGE = 'en'
3
7
 
4
8
  @Injectable({
5
9
  providedIn: 'root',
6
10
  })
7
11
  export class DateService {
12
+ dateLocales = import('../../../../../../libs/util/i18n/src/lib/date-locales').then(
13
+ (obj) => obj.default
14
+ )
15
+
8
16
  constructor(private translateService: TranslateService) {}
9
17
 
10
18
  private getDateObject(date: Date | string): Date {
@@ -22,11 +30,17 @@ export class DateService {
22
30
  locale: string
23
31
  dateObj: Date
24
32
  } {
25
- const locale = this.translateService.currentLang || 'en-US'
33
+ const locale = this.translateService.currentLang || DEFAULT_LANGUAGE
26
34
  const dateObj = this.getDateObject(date)
27
35
  return { locale, dateObj }
28
36
  }
29
37
 
38
+ private async getDateLocale(): Promise<Locale> {
39
+ const lang = this.translateService.currentLang || DEFAULT_LANGUAGE
40
+ const locales = await this.dateLocales
41
+ return locales[lang]
42
+ }
43
+
30
44
  formatDate(
31
45
  date: Date | string,
32
46
  options?: Intl.DateTimeFormatOptions
@@ -42,4 +56,16 @@ export class DateService {
42
56
  const { locale, dateObj } = this.getLocaleAndDate(date)
43
57
  return dateObj.toLocaleString(locale, options)
44
58
  }
59
+
60
+ async formatRelativeDateTime(date: Date | string): Promise<string> {
61
+ const dateObj = this.getDateObject(date)
62
+
63
+ const now = new Date()
64
+ const locale = await this.getDateLocale()
65
+
66
+ return formatDistance(dateObj, now, {
67
+ addSuffix: true,
68
+ locale: locale,
69
+ })
70
+ }
45
71
  }
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "",
63
63
  "dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
64
64
  "dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
65
+ "daterange.filter.from": "",
66
+ "daterange.filter.period": "",
67
+ "daterange.filter.to": "",
65
68
  "domain.contact.role.author": "",
66
69
  "domain.contact.role.collaborator": "",
67
70
  "domain.contact.role.contributor": "",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "Nächste Seite",
398
401
  "pagination.page": "Seite",
399
402
  "pagination.pageOf": "von",
403
+ "pagination.previousPage": "Vorherige Seite",
400
404
  "record.action.delete": "Löschen",
401
405
  "record.action.download": "Herunterladen",
402
406
  "record.action.duplicate": "",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "Kontakt",
462
466
  "record.metadata.creation": "Erstellungsdatum",
463
467
  "record.metadata.details": "Über die Daten",
468
+ "record.metadata.doi.copy": "",
469
+ "record.metadata.doi.open": "",
464
470
  "record.metadata.download": "Downloads",
465
471
  "record.metadata.feature.catalog": "",
466
472
  "record.metadata.formats": "Formate",
@@ -509,9 +515,9 @@
509
515
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
510
516
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
511
517
  "record.metadata.related": "Entdecken Sie den Katalog",
512
- "record.metadata.resourceCreated": "Erstellt am {date}",
513
- "record.metadata.resourcePublished": "Veröffentlicht am {date}",
514
- "record.metadata.resourceUpdated": "Zuletzt aktualisiert am {date}",
518
+ "record.metadata.resourceCreated": "Erstellt",
519
+ "record.metadata.resourcePublished": "Veröffentlicht",
520
+ "record.metadata.resourceUpdated": "Zuletzt aktualisiert",
515
521
  "record.metadata.ressources.and.links": "Ressourcen und Links",
516
522
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
517
523
  "record.metadata.status": "Status",
@@ -524,8 +530,9 @@
524
530
  "record.metadata.title": "Titel",
525
531
  "record.metadata.topics": "Kategorien",
526
532
  "record.metadata.uniqueId": "Eindeutige Kennung",
533
+ "record.metadata.update": "Aktualisierungsdatum",
527
534
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
528
- "record.metadata.updatedOn": "Geändert am",
535
+ "record.metadata.updatedOn": "Informationen geändert",
529
536
  "record.metadata.usage": "Nutzung und Einschränkungen",
530
537
  "record.metadata.userFeedbacks": "",
531
538
  "record.metadata.userFeedbacks.anonymousUser": "",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "Diagramm",
541
548
  "record.tab.data": "Tabelle",
542
549
  "record.tab.map": "Karte",
550
+ "record.tab.stac": "",
543
551
  "record.was.created.time": "erstellte diesen Ressource {time}",
544
552
  "records": "Datensätze",
545
553
  "results.layout.selectOne": "Layout auswählen",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "",
632
640
  "share.tab.permalink": "Teilen",
633
641
  "share.tab.webComponent": "Integrieren",
642
+ "stac.filter.reset": "",
643
+ "stac.results.noResults": "Ihre Suchfilter lieferten keine Ergebnisse",
634
644
  "table.loading.data": "Daten werden geladen...",
635
645
  "table.object.count": "Objekte in diesem Datensatz",
636
646
  "table.paginator.firstPage": "Erste Seite",
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "Access to this resource is restricted",
63
63
  "dataset.error.unknown": "The data cannot be displayed: \"{ info }\"",
64
64
  "dataset.error.unsupportedType": "The following content type is unsupported: \"{ info }\"",
65
+ "daterange.filter.from": "From",
66
+ "daterange.filter.period": "Period",
67
+ "daterange.filter.to": "To",
65
68
  "domain.contact.role.author": "Author",
66
69
  "domain.contact.role.collaborator": "Collaborator",
67
70
  "domain.contact.role.contributor": "Contributor",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "Next page",
398
401
  "pagination.page": "Page",
399
402
  "pagination.pageOf": "of",
403
+ "pagination.previousPage": "Previous page",
400
404
  "record.action.delete": "Delete",
401
405
  "record.action.download": "Download",
402
406
  "record.action.duplicate": "Duplicate",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "Contact",
462
466
  "record.metadata.creation": "Date of creation",
463
467
  "record.metadata.details": "About the data",
468
+ "record.metadata.doi.copy": "Copy DOI",
469
+ "record.metadata.doi.open": "Open DOI link",
464
470
  "record.metadata.download": "Downloads",
465
471
  "record.metadata.feature.catalog": "Feature catalog",
466
472
  "record.metadata.formats": "Formats",
@@ -509,9 +515,9 @@
509
515
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
510
516
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
511
517
  "record.metadata.related": "Explore the catalog",
512
- "record.metadata.resourceCreated": "Created on {date}",
513
- "record.metadata.resourcePublished": "Published on {date}",
514
- "record.metadata.resourceUpdated": "Last updated on {date}",
518
+ "record.metadata.resourceCreated": "Created",
519
+ "record.metadata.resourcePublished": "Published",
520
+ "record.metadata.resourceUpdated": "Last updated",
515
521
  "record.metadata.ressources.and.links": "Resources and links",
516
522
  "record.metadata.sheet": "Original metadata",
517
523
  "record.metadata.status": "Status",
@@ -524,8 +530,9 @@
524
530
  "record.metadata.title": "Title",
525
531
  "record.metadata.topics": "Categories",
526
532
  "record.metadata.uniqueId": "Unique Identifier",
533
+ "record.metadata.update": "Date of update",
527
534
  "record.metadata.updateFrequency": "Data Update Frequency",
528
- "record.metadata.updatedOn": "Updated on",
535
+ "record.metadata.updatedOn": "Metadata modified",
529
536
  "record.metadata.usage": "License and Conditions",
530
537
  "record.metadata.userFeedbacks": "Questions / Answers",
531
538
  "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "Chart",
541
548
  "record.tab.data": "Table",
542
549
  "record.tab.map": "Map",
550
+ "record.tab.stac": "STAC",
543
551
  "record.was.created.time": "created this record {time}",
544
552
  "records": "datasets",
545
553
  "results.layout.selectOne": "Results layout",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "Spatial extent",
632
640
  "share.tab.permalink": "Share",
633
641
  "share.tab.webComponent": "Integrate",
642
+ "stac.filter.reset": "Reset filters",
643
+ "stac.results.noResults": "Your search filters did not match any items",
634
644
  "table.loading.data": "Loading data...",
635
645
  "table.object.count": "Objects in this dataset",
636
646
  "table.paginator.firstPage": "First page",
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "",
63
63
  "dataset.error.unknown": "",
64
64
  "dataset.error.unsupportedType": "",
65
+ "daterange.filter.from": "",
66
+ "daterange.filter.period": "",
67
+ "daterange.filter.to": "",
65
68
  "domain.contact.role.author": "",
66
69
  "domain.contact.role.collaborator": "",
67
70
  "domain.contact.role.contributor": "",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "",
398
401
  "pagination.page": "",
399
402
  "pagination.pageOf": "",
403
+ "pagination.previousPage": "",
400
404
  "record.action.delete": "",
401
405
  "record.action.download": "",
402
406
  "record.action.duplicate": "",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "",
462
466
  "record.metadata.creation": "",
463
467
  "record.metadata.details": "",
468
+ "record.metadata.doi.copy": "",
469
+ "record.metadata.doi.open": "",
464
470
  "record.metadata.download": "",
465
471
  "record.metadata.feature.catalog": "",
466
472
  "record.metadata.formats": "",
@@ -524,6 +530,7 @@
524
530
  "record.metadata.title": "",
525
531
  "record.metadata.topics": "",
526
532
  "record.metadata.uniqueId": "",
533
+ "record.metadata.update": "",
527
534
  "record.metadata.updateFrequency": "",
528
535
  "record.metadata.updatedOn": "",
529
536
  "record.metadata.usage": "",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "",
541
548
  "record.tab.data": "",
542
549
  "record.tab.map": "",
550
+ "record.tab.stac": "",
543
551
  "record.was.created.time": "",
544
552
  "records": "",
545
553
  "results.layout.selectOne": "",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "",
632
640
  "share.tab.permalink": "",
633
641
  "share.tab.webComponent": "",
642
+ "stac.filter.reset": "",
643
+ "stac.results.noResults": "",
634
644
  "table.loading.data": "",
635
645
  "table.object.count": "",
636
646
  "table.paginator.firstPage": "Primera página",
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "L’accès à cette ressource est restreint",
63
63
  "dataset.error.unknown": "Les données ne peuvent être affichées: \"{ info }\"",
64
64
  "dataset.error.unsupportedType": "Le type de contenu suivant n'est pas pris en charge: \"{ info }\"",
65
+ "daterange.filter.from": "Du",
66
+ "daterange.filter.period": "Choix de la période",
67
+ "daterange.filter.to": "Au",
65
68
  "domain.contact.role.author": "Auteur",
66
69
  "domain.contact.role.collaborator": "Collaborateur",
67
70
  "domain.contact.role.contributor": "Contributeur",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "Page suivante",
398
401
  "pagination.page": "Page",
399
402
  "pagination.pageOf": "sur",
403
+ "pagination.previousPage": "Page précédente",
400
404
  "record.action.delete": "Supprimer",
401
405
  "record.action.download": "Télécharger",
402
406
  "record.action.duplicate": "Dupliquer",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "Contact",
462
466
  "record.metadata.creation": "Date de création",
463
467
  "record.metadata.details": "À propos de la donnée",
468
+ "record.metadata.doi.copy": "Copier le DOI",
469
+ "record.metadata.doi.open": "Ouvrir le lien DOI",
464
470
  "record.metadata.download": "Téléchargements",
465
471
  "record.metadata.feature.catalog": "Catalogue d'attributs",
466
472
  "record.metadata.formats": "Formats",
@@ -509,9 +515,9 @@
509
515
  "record.metadata.quality.updateFrequency.failed": "La fréquence de mise à jour n'est pas renseignée",
510
516
  "record.metadata.quality.updateFrequency.success": "La fréquence de mise à jour est renseignée",
511
517
  "record.metadata.related": "Explorez le catalogue",
512
- "record.metadata.resourceCreated": "Créé le {date}",
513
- "record.metadata.resourcePublished": "Publié le {date}",
514
- "record.metadata.resourceUpdated": "Mis à jour le {date}",
518
+ "record.metadata.resourceCreated": "Créé",
519
+ "record.metadata.resourcePublished": "Publié",
520
+ "record.metadata.resourceUpdated": "Mis à jour",
515
521
  "record.metadata.ressources.and.links": "Ressources et liens",
516
522
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
517
523
  "record.metadata.status": "Statut",
@@ -524,8 +530,9 @@
524
530
  "record.metadata.title": "Intitulé",
525
531
  "record.metadata.topics": "Catégories",
526
532
  "record.metadata.uniqueId": "Identificateur de ressource unique",
533
+ "record.metadata.update": "Date de mise à jour",
527
534
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
528
- "record.metadata.updatedOn": "Modifié le",
535
+ "record.metadata.updatedOn": "Fiche de métadonnées modifiée",
529
536
  "record.metadata.usage": "Licences et conditions d'utilisation",
530
537
  "record.metadata.userFeedbacks": "Questions / Réponses",
531
538
  "record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "Graphique",
541
548
  "record.tab.data": "Tableau",
542
549
  "record.tab.map": "Carte",
550
+ "record.tab.stac": "STAC",
543
551
  "record.was.created.time": "a créé cette ressource {time}",
544
552
  "records": "Enregistrements",
545
553
  "results.layout.selectOne": "Affichage des résultats",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "Etendue spatiale",
632
640
  "share.tab.permalink": "Partager",
633
641
  "share.tab.webComponent": "Intégrer",
642
+ "stac.filter.reset": "Réinitialiser les filtres",
643
+ "stac.results.noResults": "Vos filtres ne permettent pas d’afficher de résultats",
634
644
  "table.loading.data": "Chargement des données...",
635
645
  "table.object.count": "enregistrements dans ce jeu de données",
636
646
  "table.paginator.firstPage": "Première page",
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "L'accesso a questa risorsa è limitato",
63
63
  "dataset.error.unknown": "Impossibile visualizzare i dati: \"{info}\"",
64
64
  "dataset.error.unsupportedType": "Il seguente tipo di contenuto non è supportato: \"{info}\"",
65
+ "daterange.filter.from": "",
66
+ "daterange.filter.period": "",
67
+ "daterange.filter.to": "",
65
68
  "domain.contact.role.author": "Autore",
66
69
  "domain.contact.role.collaborator": "Collaboratore",
67
70
  "domain.contact.role.contributor": "Collaboratore",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "Pagina successiva",
398
401
  "pagination.page": "pagina",
399
402
  "pagination.pageOf": "di",
403
+ "pagination.previousPage": "",
400
404
  "record.action.delete": "Elimina",
401
405
  "record.action.download": "Scarica",
402
406
  "record.action.duplicate": "Duplicato",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "Contatto",
462
466
  "record.metadata.creation": "Data di creazione",
463
467
  "record.metadata.details": "A proposito del dati",
468
+ "record.metadata.doi.copy": "",
469
+ "record.metadata.doi.open": "",
464
470
  "record.metadata.download": "Download",
465
471
  "record.metadata.feature.catalog": "Catalogo dei oggetti",
466
472
  "record.metadata.formats": "Formati",
@@ -509,11 +515,11 @@
509
515
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
510
516
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
511
517
  "record.metadata.related": "Vedi anche",
512
- "record.metadata.resourceCreated": "Creato il {date}",
513
- "record.metadata.resourcePublished": "Pubblicato il {date}",
514
- "record.metadata.resourceUpdated": "Ultimo aggiornamento il {date}",
518
+ "record.metadata.resourceCreated": "Creato",
519
+ "record.metadata.resourcePublished": "Pubblicato",
520
+ "record.metadata.resourceUpdated": "Ultimo aggiornamento",
515
521
  "record.metadata.ressources.and.links": "Risorse e collegamenti",
516
- "record.metadata.sheet": "Origine del metadata",
522
+ "record.metadata.sheet": "Origine dei metadati",
517
523
  "record.metadata.status": "Stato",
518
524
  "record.metadata.status.notPublished": "Non pubblicato",
519
525
  "record.metadata.status.published": "Pubblicato",
@@ -524,8 +530,9 @@
524
530
  "record.metadata.title": "Titolo",
525
531
  "record.metadata.topics": "Categorie",
526
532
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
533
+ "record.metadata.update": "Data di aggiornamento",
527
534
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
528
- "record.metadata.updatedOn": "Modificato il",
535
+ "record.metadata.updatedOn": "Metadati modificati",
529
536
  "record.metadata.usage": "Licenze e limiti di utilizzo",
530
537
  "record.metadata.userFeedbacks": "Domande / Risposte",
531
538
  "record.metadata.userFeedbacks.anonymousUser": "Per pubblicare un commento, effettua il login.",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "Grafico",
541
548
  "record.tab.data": "Tabella",
542
549
  "record.tab.map": "Mappa",
550
+ "record.tab.stac": "",
543
551
  "record.was.created.time": "ha creato questi dati {time}",
544
552
  "records": "record",
545
553
  "results.layout.selectOne": "Mostra risultati",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "Estensione spaziale",
632
640
  "share.tab.permalink": "Condividere",
633
641
  "share.tab.webComponent": "Incorporare",
642
+ "stac.filter.reset": "",
643
+ "stac.results.noResults": "",
634
644
  "table.loading.data": "Caricamento dei dati...",
635
645
  "table.object.count": "record in questi dati",
636
646
  "table.paginator.firstPage": "Prima pagina",
@@ -62,6 +62,9 @@
62
62
  "dataset.error.restrictedAccess": "",
63
63
  "dataset.error.unknown": "",
64
64
  "dataset.error.unsupportedType": "",
65
+ "daterange.filter.from": "",
66
+ "daterange.filter.period": "",
67
+ "daterange.filter.to": "",
65
68
  "domain.contact.role.author": "",
66
69
  "domain.contact.role.collaborator": "",
67
70
  "domain.contact.role.contributor": "",
@@ -397,6 +400,7 @@
397
400
  "pagination.nextPage": "",
398
401
  "pagination.page": "",
399
402
  "pagination.pageOf": "",
403
+ "pagination.previousPage": "",
400
404
  "record.action.delete": "",
401
405
  "record.action.download": "",
402
406
  "record.action.duplicate": "",
@@ -461,6 +465,8 @@
461
465
  "record.metadata.contact": "",
462
466
  "record.metadata.creation": "",
463
467
  "record.metadata.details": "",
468
+ "record.metadata.doi.copy": "",
469
+ "record.metadata.doi.open": "",
464
470
  "record.metadata.download": "",
465
471
  "record.metadata.feature.catalog": "",
466
472
  "record.metadata.formats": "",
@@ -524,6 +530,7 @@
524
530
  "record.metadata.title": "",
525
531
  "record.metadata.topics": "",
526
532
  "record.metadata.uniqueId": "",
533
+ "record.metadata.update": "",
527
534
  "record.metadata.updateFrequency": "",
528
535
  "record.metadata.updatedOn": "",
529
536
  "record.metadata.usage": "",
@@ -540,6 +547,7 @@
540
547
  "record.tab.chart": "",
541
548
  "record.tab.data": "",
542
549
  "record.tab.map": "",
550
+ "record.tab.stac": "",
543
551
  "record.was.created.time": "",
544
552
  "records": "",
545
553
  "results.layout.selectOne": "",
@@ -631,6 +639,8 @@
631
639
  "service.metadata.spatialExtent": "",
632
640
  "share.tab.permalink": "",
633
641
  "share.tab.webComponent": "",
642
+ "stac.filter.reset": "",
643
+ "stac.results.noResults": "",
634
644
  "table.loading.data": "",
635
645
  "table.object.count": "",
636
646
  "table.paginator.firstPage": "",