geonetwork-ui 2.8.0-dev.c77b0c7dd → 2.8.0-dev.cba2fd2eb

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 (174) 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/platform/gn4-platform.mapper.mjs +7 -3
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  11. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  12. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  13. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  15. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  16. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  17. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  18. package/esm2022/libs/feature/dataviz/src/index.mjs +2 -1
  19. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  20. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +18 -7
  21. package/esm2022/libs/feature/dataviz/src/lib/stac-view/stac-view.component.mjs +51 -0
  22. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  23. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  24. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  25. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  26. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +2 -1
  27. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  28. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  29. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  30. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  31. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  32. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +3 -3
  33. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  34. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  35. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
  36. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  37. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  38. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  39. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  40. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  41. package/esm2022/translations/de.json +16 -3
  42. package/esm2022/translations/en.json +17 -5
  43. package/esm2022/translations/es.json +15 -2
  44. package/esm2022/translations/fr.json +17 -4
  45. package/esm2022/translations/it.json +18 -5
  46. package/esm2022/translations/nl.json +15 -2
  47. package/esm2022/translations/pt.json +15 -2
  48. package/esm2022/translations/sk.json +16 -3
  49. package/fesm2022/geonetwork-ui.mjs +410 -103
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/index.d.ts +1 -0
  52. package/index.d.ts.map +1 -1
  53. package/index.ts +1 -0
  54. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  57. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  59. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  60. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  61. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  62. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  63. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  64. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  65. package/libs/common/domain/src/index.d.ts +3 -0
  66. package/libs/common/domain/src/index.d.ts.map +1 -0
  67. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  68. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  69. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  70. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  71. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  72. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  73. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  74. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  75. package/libs/feature/dataviz/src/index.d.ts +1 -0
  76. package/libs/feature/dataviz/src/index.d.ts.map +1 -1
  77. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  78. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  79. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts +16 -0
  80. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  81. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  82. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  83. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  84. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  85. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  86. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  87. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  88. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  89. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  90. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  91. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  92. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  93. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  94. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  95. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  96. package/libs/ui/elements/src/index.d.ts +1 -0
  97. package/libs/ui/elements/src/index.d.ts.map +1 -1
  98. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  99. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  100. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  101. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  102. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  103. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  104. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  105. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  106. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  107. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  108. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  109. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  110. package/package.json +1 -1
  111. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  112. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  113. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  114. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  115. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  116. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  117. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  118. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  119. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  120. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  121. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  122. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  123. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  124. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  125. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  126. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -4
  127. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  128. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  129. package/src/libs/common/domain/src/index.ts +2 -0
  130. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  131. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  132. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  133. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  134. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  135. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  136. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  137. package/src/libs/feature/dataviz/src/index.ts +1 -0
  138. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  139. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +16 -5
  140. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.css +0 -0
  141. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.html +40 -0
  142. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.ts +62 -0
  143. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  144. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  145. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  146. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  147. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  148. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  149. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  150. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  151. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  152. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  153. package/src/libs/ui/elements/src/index.ts +1 -0
  154. package/src/libs/ui/elements/src/lib/error/error.component.html +5 -1
  155. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  156. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  157. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  158. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  159. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  160. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +58 -16
  161. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  162. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  163. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  164. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  165. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  166. package/translations/de.json +16 -3
  167. package/translations/en.json +17 -5
  168. package/translations/es.json +15 -2
  169. package/translations/fr.json +17 -4
  170. package/translations/it.json +18 -5
  171. package/translations/nl.json +15 -2
  172. package/translations/pt.json +15 -2
  173. package/translations/sk.json +16 -3
  174. package/src/libs/common/domain/src/lib/index.ts +0 -2
@@ -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,37 @@
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">
189
+ <p class="text-primary font-medium mt-1 resource-created">
171
190
  {{ formatDate(metadata.resourceCreated) }}
172
191
  </p>
173
192
  </div>
174
- <div *ngIf="metadata.resourcePublished">
193
+ <div
194
+ *ngIf="metadata.resourcePublished"
195
+ data-test="details-panel-resource-published"
196
+ >
175
197
  <p class="text-sm" translate>record.metadata.publication</p>
176
- <p class="text-primary font-medium mt-1">
198
+ <p class="text-primary font-medium mt-1 resource-published">
177
199
  {{ formatDate(metadata.resourcePublished) }}
178
200
  </p>
179
201
  </div>
180
- <div *ngIf="updateFrequency">
202
+ <div
203
+ *ngIf="metadata.resourceUpdated"
204
+ data-test="details-panel-resource-updated"
205
+ >
206
+ <p class="text-sm" translate>record.metadata.update</p>
207
+ <p class="text-primary font-medium mt-1 resource-updated">
208
+ {{ formatDate(metadata.resourceUpdated) }}
209
+ </p>
210
+ </div>
211
+ <div
212
+ *ngIf="metadata.kind === 'dataset' && metadata.updateFrequency"
213
+ data-test="details-panel-update-frequency"
214
+ >
181
215
  <p class="text-sm" translate>record.metadata.updateFrequency</p>
182
216
  <p
183
217
  class="text-primary font-medium mt-1 updateFrequency"
@@ -187,11 +221,14 @@
187
221
  {{ updateFrequency }}
188
222
  </p>
189
223
  </div>
190
- <div *ngIf="metadata.otherLanguages?.length">
224
+ <div
225
+ *ngIf="metadata.otherLanguages?.length"
226
+ data-test="details-panel-other-languages"
227
+ >
191
228
  <p class="text-sm mb-1" translate>record.metadata.languages</p>
192
229
  <div class="flex flex-row gap-1 flex-wrap">
193
230
  <p
194
- class="text-primary font-medium"
231
+ class="text-primary font-medium other-languages"
195
232
  translate
196
233
  *ngFor="let language of metadata.otherLanguages"
197
234
  >
@@ -199,9 +236,14 @@
199
236
  </p>
200
237
  </div>
201
238
  </div>
202
- <div *ngIf="temporalExtent">
239
+ <div
240
+ *ngIf="metadata.kind === 'dataset' && temporalExtent"
241
+ data-test="details-panel-temporal-extent"
242
+ >
203
243
  <p class="text-sm" translate>record.metadata.temporalExtent</p>
204
- <div class="flex flex-row gap-1 mb-1 text-primary font-medium">
244
+ <div
245
+ class="flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent"
246
+ >
205
247
  <p
206
248
  *ngIf="temporalExtent.start && temporalExtent.end"
207
249
  translate
@@ -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
 
@@ -39,6 +39,10 @@ export class LinkClassifierService {
39
39
  return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA]
40
40
  case 'GPFDL':
41
41
  return [LinkUsage.API]
42
+ case 'postgis':
43
+ return [LinkUsage.UNKNOWN]
44
+ case 'stac':
45
+ return [LinkUsage.API]
42
46
  default:
43
47
  return [LinkUsage.UNKNOWN]
44
48
  }
@@ -150,6 +150,12 @@ export const FORMATS = {
150
150
  color: '#5A9E6F',
151
151
  mimeTypes: ['image/webp'],
152
152
  },
153
+ postgis: {
154
+ extensions: ['postgis'],
155
+ priority: 18,
156
+ color: '#336791',
157
+ mimeTypes: [],
158
+ },
153
159
  } as const
154
160
 
155
161
  export type FileFormat = keyof typeof FORMATS
@@ -195,6 +201,11 @@ export function getFileFormatFromServiceOutput(
195
201
  export function getFileFormat(
196
202
  link: DatasetOnlineResource | ServiceOnlineResource
197
203
  ): FileFormat {
204
+ if ('accessServiceProtocol' in link) {
205
+ if (link.accessServiceProtocol in FORMATS) {
206
+ return link.accessServiceProtocol as FileFormat
207
+ }
208
+ }
198
209
  if ('mimeType' in link) {
199
210
  const mimeTypeFormat = mimeTypeToFormat(link.mimeType)
200
211
  if (mimeTypeFormat !== null) {
@@ -1,4 +1,4 @@
1
- import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'
1
+ import { Injectable, InjectionToken, Injector } from '@angular/core'
2
2
  import { Location } from '@angular/common'
3
3
 
4
4
  export const PROXY_PATH = new InjectionToken<string>('proxyPath')
@@ -7,8 +7,12 @@ export const PROXY_PATH = new InjectionToken<string>('proxyPath')
7
7
  providedIn: 'root',
8
8
  })
9
9
  export class ProxyService {
10
+ private get proxyPath(): string | null {
11
+ return this.injector.get(PROXY_PATH, null)
12
+ }
13
+
10
14
  constructor(
11
- @Optional() @Inject(PROXY_PATH) private proxyPath: string,
15
+ private injector: Injector,
12
16
  private location: Location
13
17
  ) {}
14
18
 
@@ -6,12 +6,15 @@ export function sortByToStrings(sortBy: SortByField): string[] {
6
6
  }
7
7
 
8
8
  export function sortByToString(sortBy: SortByField): string {
9
- return sortByToStrings(sortBy)[0]
9
+ return sortByToStrings(sortBy).join(',')
10
10
  }
11
11
 
12
12
  export function sortByFromString(sortByString: string): SortByField {
13
- return [
14
- sortByString.startsWith('-') ? 'desc' : 'asc',
15
- sortByString.startsWith('-') ? sortByString.substring(1) : sortByString,
16
- ]
13
+ const fields = sortByString
14
+ .split(',')
15
+ .map((field) => [
16
+ field.startsWith('-') ? 'desc' : 'asc',
17
+ field.startsWith('-') ? field.substring(1) : field,
18
+ ]) as SortByField
19
+ return fields.length > 1 ? fields : (fields[0] as SortByField)
17
20
  }
@@ -418,6 +418,8 @@
418
418
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
419
419
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
420
420
  "record.metadata.api.accessServiceProtocol.other": "",
421
+ "record.metadata.api.accessServiceProtocol.postgis": "",
422
+ "record.metadata.api.accessServiceProtocol.stac": "",
421
423
  "record.metadata.api.accessServiceProtocol.tms": "",
422
424
  "record.metadata.api.accessServiceProtocol.wfs": "",
423
425
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -459,13 +461,16 @@
459
461
  "record.metadata.contact": "Kontakt",
460
462
  "record.metadata.creation": "Erstellungsdatum",
461
463
  "record.metadata.details": "Über die Daten",
464
+ "record.metadata.doi.copy": "",
465
+ "record.metadata.doi.open": "",
462
466
  "record.metadata.download": "Downloads",
463
467
  "record.metadata.feature.catalog": "",
464
468
  "record.metadata.formats": "Formate",
465
469
  "record.metadata.isGeographical": "Geographischer Datensatz",
466
470
  "record.metadata.keywords": "Stichworte",
467
471
  "record.metadata.languages": "Sprachen",
468
- "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
472
+ "record.metadata.link.postgis.table": "",
473
+ "record.metadata.link.postgis.tooltip": "",
469
474
  "record.metadata.linked.datasets": "Verknüpfte Datensätze",
470
475
  "record.metadata.linked.records": "Verknüpfte Inhalte",
471
476
  "record.metadata.linked.reuses": "Verknüpfte Wiederverwendungen",
@@ -506,6 +511,9 @@
506
511
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
507
512
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
508
513
  "record.metadata.related": "Entdecken Sie den Katalog",
514
+ "record.metadata.resourceCreated": "Erstellt am {date}",
515
+ "record.metadata.resourcePublished": "Veröffentlicht am {date}",
516
+ "record.metadata.resourceUpdated": "Zuletzt aktualisiert am {date}",
509
517
  "record.metadata.ressources.and.links": "Ressourcen und Links",
510
518
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
511
519
  "record.metadata.status": "Status",
@@ -518,8 +526,9 @@
518
526
  "record.metadata.title": "Titel",
519
527
  "record.metadata.topics": "Kategorien",
520
528
  "record.metadata.uniqueId": "Eindeutige Kennung",
529
+ "record.metadata.update": "Aktualisierungsdatum",
521
530
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
522
- "record.metadata.updatedOn": "Geändert am",
531
+ "record.metadata.updatedOn": "Informationen geändert am",
523
532
  "record.metadata.usage": "Nutzung und Einschränkungen",
524
533
  "record.metadata.userFeedbacks": "",
525
534
  "record.metadata.userFeedbacks.anonymousUser": "",
@@ -534,6 +543,7 @@
534
543
  "record.tab.chart": "Diagramm",
535
544
  "record.tab.data": "Tabelle",
536
545
  "record.tab.map": "Karte",
546
+ "record.tab.stac": "",
537
547
  "record.was.created.time": "erstellte diesen Ressource {time}",
538
548
  "records": "Datensätze",
539
549
  "results.layout.selectOne": "Layout auswählen",
@@ -542,7 +552,6 @@
542
552
  "results.records.hits.found": "{hits, plural, =0{Keine Ressource entsprechen der angegebenen Suche.} one{1 Ressource gefunden.} other{{hits} Ressourcen gefunden.}}",
543
553
  "results.records.hits.selected": "{ amount } ausgewählt",
544
554
  "results.showMore": "Mehr Ergebnisse anzeigen...",
545
- "results.sortBy.changeDate": "",
546
555
  "results.sortBy.dateStamp": "Neueste",
547
556
  "results.sortBy.popularity": "Beliebtheit",
548
557
  "results.sortBy.qualityScore": "Fertigstellungsanzeige",
@@ -626,6 +635,10 @@
626
635
  "service.metadata.spatialExtent": "",
627
636
  "share.tab.permalink": "Teilen",
628
637
  "share.tab.webComponent": "Integrieren",
638
+ "stac.filter.from": "",
639
+ "stac.filter.period": "",
640
+ "stac.filter.reset": "",
641
+ "stac.filter.to": "",
629
642
  "table.loading.data": "Daten werden geladen...",
630
643
  "table.object.count": "Objekte in diesem Datensatz",
631
644
  "table.paginator.firstPage": "Erste Seite",
@@ -241,7 +241,6 @@
241
241
  "editor.record.form.topics.inspire.intelligence": "Intelligence / Military",
242
242
  "editor.record.form.topics.inspire.location": "Location",
243
243
  "editor.record.form.topics.inspire.oceans": "Oceans",
244
- "editor.record.form.topics.inspire.placeholder": "Select an INSPIRE theme",
245
244
  "editor.record.form.topics.inspire.planning": "Planning / Cadastre",
246
245
  "editor.record.form.topics.inspire.society": "Society",
247
246
  "editor.record.form.topics.inspire.structure": "Structure",
@@ -419,6 +418,8 @@
419
418
  "record.metadata.api.accessServiceProtocol.maplibre-style": "maplibre-style",
420
419
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "ogcFeatures",
421
420
  "record.metadata.api.accessServiceProtocol.other": "other",
421
+ "record.metadata.api.accessServiceProtocol.postgis": "PostGIS",
422
+ "record.metadata.api.accessServiceProtocol.stac": "STAC",
422
423
  "record.metadata.api.accessServiceProtocol.tms": "tms",
423
424
  "record.metadata.api.accessServiceProtocol.wfs": "wfs",
424
425
  "record.metadata.api.accessServiceProtocol.wms": "wms",
@@ -460,13 +461,16 @@
460
461
  "record.metadata.contact": "Contact",
461
462
  "record.metadata.creation": "Date of creation",
462
463
  "record.metadata.details": "About the data",
464
+ "record.metadata.doi.copy": "Copy DOI",
465
+ "record.metadata.doi.open": "Open DOI link",
463
466
  "record.metadata.download": "Downloads",
464
467
  "record.metadata.feature.catalog": "Feature catalog",
465
468
  "record.metadata.formats": "Formats",
466
469
  "record.metadata.isGeographical": "Geographical dataset",
467
470
  "record.metadata.keywords": "Keywords",
468
471
  "record.metadata.languages": "Languages",
469
- "record.metadata.lastUpdate": "Last updated on {date}",
472
+ "record.metadata.link.postgis.table": "table :",
473
+ "record.metadata.link.postgis.tooltip": "PostGIS resources do not have access links",
470
474
  "record.metadata.linked.datasets": "Associated datasets",
471
475
  "record.metadata.linked.records": "Associated content",
472
476
  "record.metadata.linked.reuses": "Associated reuses",
@@ -507,6 +511,9 @@
507
511
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
508
512
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
509
513
  "record.metadata.related": "Explore the catalog",
514
+ "record.metadata.resourceCreated": "Created on {date}",
515
+ "record.metadata.resourcePublished": "Published on {date}",
516
+ "record.metadata.resourceUpdated": "Last updated on {date}",
510
517
  "record.metadata.ressources.and.links": "Resources and links",
511
518
  "record.metadata.sheet": "Original metadata",
512
519
  "record.metadata.status": "Status",
@@ -519,8 +526,9 @@
519
526
  "record.metadata.title": "Title",
520
527
  "record.metadata.topics": "Categories",
521
528
  "record.metadata.uniqueId": "Unique Identifier",
529
+ "record.metadata.update": "Date of update",
522
530
  "record.metadata.updateFrequency": "Data Update Frequency",
523
- "record.metadata.updatedOn": "Updated on",
531
+ "record.metadata.updatedOn": "Metadata modified on",
524
532
  "record.metadata.usage": "License and Conditions",
525
533
  "record.metadata.userFeedbacks": "Questions / Answers",
526
534
  "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
@@ -535,6 +543,7 @@
535
543
  "record.tab.chart": "Chart",
536
544
  "record.tab.data": "Table",
537
545
  "record.tab.map": "Map",
546
+ "record.tab.stac": "STAC",
538
547
  "record.was.created.time": "created this record {time}",
539
548
  "records": "datasets",
540
549
  "results.layout.selectOne": "Results layout",
@@ -543,7 +552,6 @@
543
552
  "results.records.hits.found": "{hits, plural, =0{No record match the specified search.} one{1 record found.} other{{hits} records found.}}",
544
553
  "results.records.hits.selected": "{ amount } selected",
545
554
  "results.showMore": "Show more results...",
546
- "results.sortBy.changeDate": "Last modification",
547
555
  "results.sortBy.dateStamp": "Newest",
548
556
  "results.sortBy.popularity": "Popularity",
549
557
  "results.sortBy.qualityScore": "Completion score",
@@ -554,7 +562,7 @@
554
562
  "search.error.organizationHasNoDataset": "This organization has no records yet.",
555
563
  "search.error.organizationNotFound": "This organization could not be found.",
556
564
  "search.error.receivedError": "An error was received",
557
- "search.error.recordHasnolink": "This record currently has no link yet, please come back later.",
565
+ "search.error.recordHasnolink": "This record currently has no link.",
558
566
  "search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.",
559
567
  "search.field.any.placeholder": "Search in the catalog ...",
560
568
  "search.field.sortBy": "Sort by:",
@@ -627,6 +635,10 @@
627
635
  "service.metadata.spatialExtent": "Spatial extent",
628
636
  "share.tab.permalink": "Share",
629
637
  "share.tab.webComponent": "Integrate",
638
+ "stac.filter.from": "From",
639
+ "stac.filter.period": "Period",
640
+ "stac.filter.reset": "Reset filters",
641
+ "stac.filter.to": "To",
630
642
  "table.loading.data": "Loading data...",
631
643
  "table.object.count": "Objects in this dataset",
632
644
  "table.paginator.firstPage": "First page",
@@ -418,6 +418,8 @@
418
418
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
419
419
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
420
420
  "record.metadata.api.accessServiceProtocol.other": "",
421
+ "record.metadata.api.accessServiceProtocol.postgis": "",
422
+ "record.metadata.api.accessServiceProtocol.stac": "",
421
423
  "record.metadata.api.accessServiceProtocol.tms": "",
422
424
  "record.metadata.api.accessServiceProtocol.wfs": "",
423
425
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -459,13 +461,16 @@
459
461
  "record.metadata.contact": "",
460
462
  "record.metadata.creation": "",
461
463
  "record.metadata.details": "",
464
+ "record.metadata.doi.copy": "",
465
+ "record.metadata.doi.open": "",
462
466
  "record.metadata.download": "",
463
467
  "record.metadata.feature.catalog": "",
464
468
  "record.metadata.formats": "",
465
469
  "record.metadata.isGeographical": "",
466
470
  "record.metadata.keywords": "",
467
471
  "record.metadata.languages": "",
468
- "record.metadata.lastUpdate": "",
472
+ "record.metadata.link.postgis.table": "",
473
+ "record.metadata.link.postgis.tooltip": "",
469
474
  "record.metadata.linked.datasets": "",
470
475
  "record.metadata.linked.records": "",
471
476
  "record.metadata.linked.reuses": "",
@@ -506,6 +511,9 @@
506
511
  "record.metadata.quality.updateFrequency.failed": "",
507
512
  "record.metadata.quality.updateFrequency.success": "",
508
513
  "record.metadata.related": "",
514
+ "record.metadata.resourceCreated": "",
515
+ "record.metadata.resourcePublished": "",
516
+ "record.metadata.resourceUpdated": "",
509
517
  "record.metadata.ressources.and.links": "Recursos y enlaces",
510
518
  "record.metadata.sheet": "",
511
519
  "record.metadata.status": "",
@@ -518,6 +526,7 @@
518
526
  "record.metadata.title": "",
519
527
  "record.metadata.topics": "",
520
528
  "record.metadata.uniqueId": "",
529
+ "record.metadata.update": "",
521
530
  "record.metadata.updateFrequency": "",
522
531
  "record.metadata.updatedOn": "",
523
532
  "record.metadata.usage": "",
@@ -534,6 +543,7 @@
534
543
  "record.tab.chart": "",
535
544
  "record.tab.data": "",
536
545
  "record.tab.map": "",
546
+ "record.tab.stac": "",
537
547
  "record.was.created.time": "",
538
548
  "records": "",
539
549
  "results.layout.selectOne": "",
@@ -542,7 +552,6 @@
542
552
  "results.records.hits.found": "",
543
553
  "results.records.hits.selected": "",
544
554
  "results.showMore": "",
545
- "results.sortBy.changeDate": "",
546
555
  "results.sortBy.dateStamp": "",
547
556
  "results.sortBy.popularity": "",
548
557
  "results.sortBy.qualityScore": "",
@@ -626,6 +635,10 @@
626
635
  "service.metadata.spatialExtent": "",
627
636
  "share.tab.permalink": "",
628
637
  "share.tab.webComponent": "",
638
+ "stac.filter.from": "",
639
+ "stac.filter.period": "",
640
+ "stac.filter.reset": "",
641
+ "stac.filter.to": "",
629
642
  "table.loading.data": "",
630
643
  "table.object.count": "",
631
644
  "table.paginator.firstPage": "Primera página",