geonetwork-ui 2.7.0-dev.47822f9d1 → 2.7.0-dev.4fe76116d

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 (215) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +4 -7
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +20 -20
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +4 -1
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +8 -4
  9. package/esm2022/libs/api/repository/src/index.mjs +2 -2
  10. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +5 -5
  11. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -6
  12. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +55 -12
  13. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +3 -3
  14. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +3 -3
  15. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -3
  16. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +20 -6
  17. package/esm2022/libs/api/repository/src/lib/metadata-language.token.mjs +3 -0
  18. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +15 -1
  19. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +3 -3
  20. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  21. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  22. package/esm2022/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.mjs +80 -0
  23. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +3 -3
  24. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.mjs +79 -0
  25. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +8 -3
  26. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  27. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +77 -3
  28. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  29. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +4 -2
  30. package/esm2022/libs/feature/router/src/lib/default/state/query-params.utils.mjs +4 -3
  31. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +3 -2
  32. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  33. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +5 -4
  35. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +5 -4
  36. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +4 -4
  37. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +21 -46
  38. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +7 -7
  39. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +1 -6
  40. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +5 -4
  41. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  42. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -2
  43. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  44. package/esm2022/libs/util/app-config/src/lib/parse-utils.mjs +5 -4
  45. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +50 -9
  46. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  47. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -2
  48. package/esm2022/libs/util/shared/src/lib/record/index.mjs +3 -0
  49. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +46 -0
  50. package/esm2022/libs/util/shared/src/lib/record/record.util.mjs +56 -0
  51. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  52. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  53. package/esm2022/libs/util/shared/src/lib/utils/mobile-screen.mjs +9 -0
  54. package/esm2022/translations/de.json +59 -20
  55. package/esm2022/translations/en.json +60 -21
  56. package/esm2022/translations/es.json +46 -7
  57. package/esm2022/translations/fr.json +65 -26
  58. package/esm2022/translations/it.json +59 -20
  59. package/esm2022/translations/nl.json +46 -7
  60. package/esm2022/translations/pt.json +46 -7
  61. package/esm2022/translations/sk.json +50 -11
  62. package/fesm2022/geonetwork-ui.mjs +3216 -2921
  63. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  64. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +1 -1
  66. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  67. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -1
  68. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  69. package/libs/api/repository/src/index.d.ts +1 -1
  70. package/libs/api/repository/src/index.d.ts.map +1 -1
  71. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  72. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -2
  73. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  74. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  75. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  76. package/libs/api/repository/src/lib/metadata-language.token.d.ts +5 -0
  77. package/libs/api/repository/src/lib/metadata-language.token.d.ts.map +1 -0
  78. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -0
  79. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  80. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  81. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  82. package/libs/feature/editor/src/index.d.ts +1 -0
  83. package/libs/feature/editor/src/index.d.ts.map +1 -1
  84. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts +19 -0
  85. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts.map +1 -0
  86. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts +28 -0
  87. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts.map +1 -0
  88. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -0
  89. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  90. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  91. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  92. package/libs/feature/editor/src/lib/fields.config.d.ts +8 -1
  93. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  94. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  95. package/libs/feature/map/src/lib/utils/map-utils.service.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/router/src/lib/default/state/query-params.utils.d.ts.map +1 -1
  98. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  99. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  100. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -0
  101. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  102. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +1 -0
  103. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -1
  104. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  105. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +7 -7
  106. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  107. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  108. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +1 -0
  109. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  110. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  111. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  112. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  113. package/libs/util/app-config/src/lib/parse-utils.d.ts.map +1 -1
  114. package/libs/util/i18n/src/lib/language-codes.d.ts +91 -31
  115. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  116. package/libs/util/shared/src/index.d.ts +1 -1
  117. package/libs/util/shared/src/index.d.ts.map +1 -1
  118. package/libs/util/shared/src/lib/links/link-utils.d.ts +1 -1
  119. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  120. package/libs/util/shared/src/lib/record/index.d.ts +3 -0
  121. package/libs/util/shared/src/lib/record/index.d.ts.map +1 -0
  122. package/libs/util/shared/src/lib/record/quality-score.util.d.ts +13 -0
  123. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -0
  124. package/libs/util/shared/src/lib/record/record.util.d.ts +3 -0
  125. package/libs/util/shared/src/lib/record/record.util.d.ts.map +1 -0
  126. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  127. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  128. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  129. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  130. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts +2 -0
  131. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts.map +1 -0
  132. package/package.json +11 -10
  133. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +3 -6
  134. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +3 -0
  135. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +47 -22
  136. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
  137. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +2 -2
  138. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  139. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +3 -3
  140. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.ts +3 -0
  141. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +7 -3
  142. package/src/libs/api/repository/src/index.ts +1 -1
  143. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -4
  144. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -5
  145. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +65 -14
  146. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  147. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +2 -2
  148. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +2 -2
  149. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +21 -8
  150. package/src/libs/api/repository/src/lib/metadata-language.token.ts +8 -0
  151. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -0
  152. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +0 -3
  153. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +2 -5
  154. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +3 -1
  155. package/src/libs/feature/editor/src/index.ts +1 -0
  156. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.css +0 -0
  157. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +37 -0
  158. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +90 -0
  159. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +2 -1
  160. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.css +0 -0
  161. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.html +20 -0
  162. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.ts +85 -0
  163. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +6 -0
  164. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
  165. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  166. package/src/libs/feature/editor/src/lib/fields.config.ts +85 -3
  167. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  168. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +3 -1
  169. package/src/libs/feature/router/src/lib/default/state/query-params.utils.ts +5 -2
  170. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +2 -1
  171. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  172. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  173. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +12 -11
  174. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -1
  175. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +4 -1
  176. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +7 -1
  177. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -0
  178. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +5 -1
  179. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -0
  180. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +21 -58
  181. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -6
  182. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +0 -6
  183. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +7 -1
  184. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +3 -1
  185. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  186. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -1
  187. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  188. package/src/libs/util/app-config/src/lib/parse-utils.ts +4 -7
  189. package/src/libs/util/i18n/src/lib/language-codes.ts +62 -11
  190. package/src/libs/util/shared/src/index.ts +1 -1
  191. package/src/libs/util/shared/src/lib/links/link-utils.ts +2 -1
  192. package/src/libs/util/shared/src/lib/record/index.ts +2 -0
  193. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +72 -0
  194. package/src/libs/util/shared/src/lib/{record.util.ts → record/record.util.ts} +1 -1
  195. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  196. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  197. package/src/libs/util/shared/src/lib/utils/mobile-screen.ts +14 -0
  198. package/translations/de.json +59 -20
  199. package/translations/en.json +60 -21
  200. package/translations/es.json +46 -7
  201. package/translations/fr.json +65 -26
  202. package/translations/it.json +59 -20
  203. package/translations/nl.json +46 -7
  204. package/translations/pt.json +46 -7
  205. package/translations/sk.json +50 -11
  206. package/esm2022/libs/api/repository/src/lib/metadata-language.mjs +0 -3
  207. package/esm2022/libs/util/app-config/src/lib/constants.mjs +0 -439
  208. package/esm2022/libs/util/shared/src/lib/record.util.mjs +0 -56
  209. package/libs/api/repository/src/lib/metadata-language.d.ts +0 -3
  210. package/libs/api/repository/src/lib/metadata-language.d.ts.map +0 -1
  211. package/libs/util/app-config/src/lib/constants.d.ts +0 -2
  212. package/libs/util/app-config/src/lib/constants.d.ts.map +0 -1
  213. package/libs/util/shared/src/lib/record.util.d.ts +0 -3
  214. package/libs/util/shared/src/lib/record.util.d.ts.map +0 -1
  215. package/src/libs/api/repository/src/lib/metadata-language.ts +0 -3
@@ -0,0 +1,85 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core'
2
+ import { CommonModule } from '@angular/common'
3
+ import { AutocompleteComponent, BadgeComponent } from '../../../../../../../../../libs/ui/inputs/src'
4
+ import { NgIconComponent } from '@ng-icons/core'
5
+ import { INSPIRE_THEMES } from '../../../../fields.config'
6
+ import { TranslatePipe, TranslateService } from '@ngx-translate/core'
7
+ import { of } from 'rxjs'
8
+
9
+ type AutocompleteItem = { title: string; value: string }
10
+
11
+ @Component({
12
+ selector: 'gn-ui-form-field-inspire-theme',
13
+ standalone: true,
14
+ imports: [
15
+ CommonModule,
16
+ AutocompleteComponent,
17
+ NgIconComponent,
18
+ BadgeComponent,
19
+ TranslatePipe,
20
+ ],
21
+ templateUrl: './form-field-inspire-theme.component.html',
22
+ styleUrl: './form-field-inspire-theme.component.css',
23
+ })
24
+ export class FormFieldInspireThemeComponent {
25
+ themes = []
26
+ @Input() set value(themes: string[]) {
27
+ this.themes = themes
28
+ }
29
+ @Output() valueChange: EventEmitter<string[]> = new EventEmitter()
30
+ availableThemes = INSPIRE_THEMES
31
+
32
+ displayWithFn = (item: AutocompleteItem) => {
33
+ return item?.title ? `${item.title}` : ''
34
+ }
35
+
36
+ autoCompleteAction = (query: string) => {
37
+ return of(
38
+ this.availableThemes
39
+ .filter((theme) =>
40
+ theme.value.toLowerCase().includes(query.toLowerCase())
41
+ )
42
+ .sort((a, b) => {
43
+ const aStarts = a.value.startsWith(query)
44
+ const bStarts = b.value.startsWith(query)
45
+
46
+ if (aStarts && !bStarts) return -1
47
+ if (!aStarts && bStarts) return 1
48
+ return 0
49
+ })
50
+ .map((theme) => {
51
+ return {
52
+ title: this.translateService.instant(theme.label),
53
+ value: theme.value,
54
+ }
55
+ })
56
+ )
57
+ }
58
+
59
+ constructor(private translateService: TranslateService) {}
60
+
61
+ handleItemSelection(item: AutocompleteItem) {
62
+ this.addTheme(item.value)
63
+ }
64
+
65
+ addTheme(theme: string) {
66
+ const duplicatedTheme = this.themes.find((t) => t === theme)
67
+ if (!duplicatedTheme) {
68
+ this.themes = [...this.themes, theme]
69
+ this.valueChange.emit(this.themes)
70
+ }
71
+ }
72
+
73
+ removeTheme(theme: string) {
74
+ console.log(this.themes)
75
+ this.themes = this.themes.filter((t) => t !== theme)
76
+ this.valueChange.emit(this.themes)
77
+ }
78
+
79
+ getTranslatedTheme(theme: string) {
80
+ const themeKey = this.availableThemes.find(
81
+ (avail) => avail.value === theme
82
+ )?.label
83
+ return themeKey ? this.translateService.instant(themeKey) : ''
84
+ }
85
+ }
@@ -109,6 +109,12 @@
109
109
  (valueChange)="valueChange.emit($event)"
110
110
  ></gn-ui-form-field-keywords>
111
111
  </ng-container>
112
+ <ng-container *ngSwitchCase="'topics'">
113
+ <gn-ui-form-field-inspire-theme
114
+ [value]="valueAsInspireTheme"
115
+ (valueChange)="valueChange.emit($event)"
116
+ ></gn-ui-form-field-inspire-theme>
117
+ </ng-container>
112
118
  <ng-container *ngSwitchCase="'licenses'">
113
119
  <gn-ui-form-field-license
114
120
  [label]="config.labelKey! | translate"
@@ -45,6 +45,7 @@ import { FormFieldConstraintsShortcutsComponent } from './form-field-constraints
45
45
  import { FormFieldConstraintsComponent } from './form-field-constraints/form-field-constraints.component'
46
46
  import { TextFieldModule } from '@angular/cdk/text-field'
47
47
  import { FormFieldSpatialToggleComponent } from './form-field-spatial-toggle/form-field-spatial-toggle.component'
48
+ import { FormFieldInspireThemeComponent } from './form-field-inspire-field/form-field-inspire-theme.component'
48
49
 
49
50
  @Component({
50
51
  selector: 'gn-ui-form-field',
@@ -73,6 +74,7 @@ import { FormFieldSpatialToggleComponent } from './form-field-spatial-toggle/for
73
74
  FormFieldConstraintsComponent,
74
75
  FormFieldConstraintsShortcutsComponent,
75
76
  FormFieldSpatialToggleComponent,
77
+ FormFieldInspireThemeComponent,
76
78
  TextFieldModule,
77
79
  ],
78
80
  })
@@ -128,6 +130,9 @@ export class FormFieldComponent {
128
130
  get valueAsKeywords() {
129
131
  return this.value as Array<Keyword>
130
132
  }
133
+ get valueAsInspireTheme() {
134
+ return this.value as Array<string>
135
+ }
131
136
  get valueAsConstraints() {
132
137
  return this.value as Array<Constraint>
133
138
  }
@@ -10,3 +10,4 @@ export * from './form-field-array/form-field-array.component'
10
10
  export * from './form-field-spatial-extent/form-field-spatial-extent.component'
11
11
  export * from './form-field.component'
12
12
  export * from './form-field-constraints-shortcuts/constraints.utils'
13
+ export * from './form-field-inspire-field/form-field-inspire-theme.component'
@@ -4,7 +4,10 @@ import {
4
4
  EditorField,
5
5
  EditorSection,
6
6
  } from './models/editor-config.model'
7
- import { Keyword } from '../../../../../libs/common/domain/src/lib/model/record'
7
+ import {
8
+ INSPIRE_theme,
9
+ Keyword,
10
+ } from '../../../../../libs/common/domain/src/lib/model/record'
8
11
 
9
12
  /**
10
13
  * This file contains the configuration of the fields that will be displayed in the editor.
@@ -63,8 +66,11 @@ export const RECORD_KEYWORDS_FIELD: EditorField = {
63
66
  model: 'keywords',
64
67
  formFieldConfig: {},
65
68
  }
66
- // keeping track of the label to not lose existing translation
67
- marker('editor.record.form.field.keywords')
69
+
70
+ export const RECORD_TOPICS_FIELD: EditorField = {
71
+ model: 'topics',
72
+ formFieldConfig: {},
73
+ }
68
74
 
69
75
  export const RECORD_RESOURCE_CREATED_FIELD: EditorField = {
70
76
  model: 'resourceCreated',
@@ -237,6 +243,13 @@ export const CLASSIFICATION_SECTION: EditorSection = {
237
243
  fields: [RECORD_KEYWORDS_FIELD],
238
244
  }
239
245
 
246
+ export const INSPIRE_SECTION: EditorSection = {
247
+ labelKey: marker('editor.record.form.section.inspire.label'),
248
+ descriptionKey: marker('editor.record.form.section.inspire.description'),
249
+ hidden: false,
250
+ fields: [RECORD_TOPICS_FIELD],
251
+ }
252
+
240
253
  export const USE_AND_ACCESS_CONDITIONS_SECTION: EditorSection = {
241
254
  labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
242
255
  hidden: false,
@@ -276,6 +289,7 @@ export const DEFAULT_CONFIGURATION: EditorConfig = {
276
289
  sections: [
277
290
  TITLE_SECTION,
278
291
  CLASSIFICATION_SECTION,
292
+ INSPIRE_SECTION,
279
293
  ABOUT_SECTION,
280
294
  GEOGRAPHICAL_COVERAGE_SECTION,
281
295
  ],
@@ -343,3 +357,71 @@ export const SPATIAL_SCOPES: Keyword[] = [
343
357
  type: 'theme',
344
358
  },
345
359
  ]
360
+
361
+ /************************************************************
362
+ *************** INSPIRE THEMES **************
363
+ ************************************************************
364
+ */
365
+
366
+ export const INSPIRE_THEMES: INSPIRE_theme[] = [
367
+ { value: 'biota', label: 'editor.record.form.inspire.biota' },
368
+ { value: 'boundaries', label: 'editor.record.form.inspire.boundaries' },
369
+ {
370
+ value: 'climatologyMeteorologyAtmosphere',
371
+ label: 'editor.record.form.inspire.climatology',
372
+ },
373
+ { value: 'economy', label: 'editor.record.form.inspire.economy' },
374
+ { value: 'elevation', label: 'editor.record.form.inspire.elevation' },
375
+ { value: 'environment', label: 'editor.record.form.inspire.environnement' },
376
+ { value: 'farming', label: 'editor.record.form.inspire.farming' },
377
+ {
378
+ value: 'geoscientific information',
379
+ label: 'editor.record.form.inspire.geoscientific',
380
+ },
381
+ { value: 'health', label: 'editor.record.form.inspire.health' },
382
+ {
383
+ value: 'imageryBaseMapsEarthCover',
384
+ label: 'editor.record.form.inspire.imagery',
385
+ },
386
+ {
387
+ value: 'intelligenceMilitary',
388
+ label: 'editor.record.form.inspire.intelligence',
389
+ },
390
+ { value: 'Location', label: 'editor.record.form.inspire.location' },
391
+ { value: 'Oceans', label: 'editor.record.form.inspire.oceans' },
392
+ {
393
+ value: 'planningCadastre',
394
+ label: 'editor.record.form.inspire.planning',
395
+ },
396
+ { value: 'Society', label: 'editor.record.form.inspire.society' },
397
+ { value: 'Structure', label: 'editor.record.form.inspire.structure' },
398
+ {
399
+ value: 'Transportation',
400
+ label: 'editor.record.form.inspire.transportation',
401
+ },
402
+ {
403
+ value: 'utilitiesCommunication',
404
+ label: 'editor.record.form.inspire.utilities',
405
+ },
406
+ { value: 'inlandWaters', label: 'editor.record.form.inspire.waters' },
407
+ ]
408
+
409
+ marker('editor.record.form.inspire.biota')
410
+ marker('editor.record.form.inspire.boundaries')
411
+ marker('editor.record.form.inspire.climatology')
412
+ marker('editor.record.form.inspire.economy')
413
+ marker('editor.record.form.inspire.elevation')
414
+ marker('editor.record.form.inspire.environnement')
415
+ marker('editor.record.form.inspire.farming')
416
+ marker('editor.record.form.inspire.geoscientific')
417
+ marker('editor.record.form.inspire.health')
418
+ marker('editor.record.form.inspire.imagery')
419
+ marker('editor.record.form.inspire.intelligence')
420
+ marker('editor.record.form.inspire.location')
421
+ marker('editor.record.form.inspire.oceans')
422
+ marker('editor.record.form.inspire.planning')
423
+ marker('editor.record.form.inspire.society')
424
+ marker('editor.record.form.inspire.structure')
425
+ marker('editor.record.form.inspire.transportation')
426
+ marker('editor.record.form.inspire.utilities')
427
+ marker('editor.record.form.inspire.waters')
@@ -1,25 +1,25 @@
1
1
  import { Injectable } from '@angular/core'
2
- import { extend, Extent } from 'ol/extent'
3
- import GeoJSON from 'ol/format/GeoJSON'
2
+ import { extend } from 'ol/extent'
4
3
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
5
-
6
- const GEOJSON = new GeoJSON()
4
+ import { BoundingBox, getGeometryBoundingBox } from '../../../../../../libs/util/shared/src'
7
5
 
8
6
  @Injectable({
9
7
  providedIn: 'root',
10
8
  })
11
9
  export class MapUtilsService {
12
- getRecordExtent(record: Partial<CatalogRecord>): Extent {
10
+ getRecordExtent(record: Partial<CatalogRecord>): BoundingBox {
13
11
  if (!('spatialExtents' in record) || record.spatialExtents.length === 0) {
14
12
  return null
15
13
  }
16
14
  // extend all the spatial extents into an including bbox
17
15
  return record.spatialExtents.reduce(
18
16
  (prev, curr) => {
19
- if ('bbox' in curr) return extend(prev, curr.bbox)
17
+ if ('bbox' in curr) return extend(prev, curr.bbox) as BoundingBox
20
18
  else if ('geometry' in curr) {
21
- const geom = GEOJSON.readGeometry(curr.geometry)
22
- return extend(prev, geom.getExtent())
19
+ return extend(
20
+ prev,
21
+ getGeometryBoundingBox(curr.geometry)
22
+ ) as BoundingBox
23
23
  }
24
24
  return prev
25
25
  },
@@ -389,7 +389,9 @@ export class MapViewComponent implements AfterViewInit {
389
389
  ) {
390
390
  // FIXME: here we're assuming that the TMS serves vector tiles only; should be checked with ogc-client first
391
391
  return of({
392
- url: link.url.toString().replace(/\/?$/, '/{z}/{x}/{y}.pbf'),
392
+ url: link.url
393
+ .toString()
394
+ .replace(/\/?$/, `/${link.name}/{z}/{x}/{y}.pbf`),
393
395
  type: 'xyz',
394
396
  tileFormat: 'application/vnd.mapbox-vector-tile',
395
397
  name: link.name,
@@ -14,7 +14,10 @@ export function flattenQueryParams(
14
14
  Array.isArray(flattened[key]) &&
15
15
  (flattened[key] as string[]).length > 0
16
16
  ) {
17
- flattened[key] = [(flattened[key] as string[]).join(',')]
17
+ const encoded = (flattened[key] as string[]).map((value) =>
18
+ typeof value === 'string' ? value.replace(/,/g, '%2C') : value
19
+ )
20
+ flattened[key] = [encoded.join(',')]
18
21
  } else if (isDateRange(flattened[key] as DateRange)) {
19
22
  const start = (flattened[key] as DateRange).start
20
23
  const end = (flattened[key] as DateRange).end
@@ -48,7 +51,7 @@ export function expandQueryParams(
48
51
  ...(end && { end: new Date(`${end}T00:00:00`) }),
49
52
  }
50
53
  } else {
51
- expanded[key] = value.split(',')
54
+ expanded[key] = value.split(',').map((v) => v.replace(/%2C/g, ','))
52
55
  }
53
56
  }
54
57
  }
@@ -63,7 +63,8 @@ export class RouterFacade {
63
63
  }
64
64
 
65
65
  goToOrganization(organizationName: string) {
66
- const path = `${this.routerService.getOrganizationPageRoute()}/${organizationName}`
66
+ const safeOrgName = organizationName.replace(/\//g, '')
67
+ const path = `${this.routerService.getOrganizationPageRoute()}/${safeOrgName}`
67
68
  this.go({
68
69
  path,
69
70
  queryParamsHandling: '',
@@ -8,6 +8,7 @@ import {
8
8
  SortByField,
9
9
  } from '../../../../../../libs/common/domain/src/lib/model/search'
10
10
  import { DEFAULT_PAGE_SIZE, FIELDS_SUMMARY } from '../constants'
11
+ import { getOptionalSearchConfig } from '../../../../../../libs/util/app-config/src'
11
12
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
12
13
 
13
14
  export const SEARCH_FEATURE_KEY = 'searchState'
@@ -55,7 +56,9 @@ export const initSearch = (): SearchStateSearch => {
55
56
  },
56
57
  params: {
57
58
  filters: {},
58
- pageSize: DEFAULT_PAGE_SIZE,
59
+ pageSize: getOptionalSearchConfig()?.LIMIT
60
+ ? getOptionalSearchConfig().LIMIT
61
+ : DEFAULT_PAGE_SIZE,
59
62
  currentPage: 0,
60
63
  favoritesOnly: false,
61
64
  useSpatialFilter: true,
@@ -67,7 +67,10 @@
67
67
  [ngClass]="{
68
68
  '!bg-primary': currentlyActive,
69
69
  }"
70
- >{{ link.accessServiceProtocol }}</span
70
+ translate
71
+ >record.metadata.api.accessServiceProtocol.{{
72
+ link.accessServiceProtocol
73
+ }}</span
71
74
  >
72
75
  <span
73
76
  *ngIf="link.accessServiceProtocol === 'GPFDL'"
@@ -13,8 +13,7 @@
13
13
  <span class="px-3">({{ linksCount }})</span>
14
14
  </div>
15
15
  <gn-ui-previous-next-buttons
16
- class="md:block hidden"
17
- *ngIf="_list?.pagesCount > 1"
16
+ *ngIf="(isMobile$ | async) === false && _list?.pagesCount > 1"
18
17
  [listComponent]="_list"
19
18
  ></gn-ui-previous-next-buttons>
20
19
  </div>
@@ -40,7 +39,7 @@
40
39
 
41
40
  <ng-container>
42
41
  <gn-ui-block-list
43
- class="md:block hidden"
42
+ *ngIf="(isMobile$ | async) === false"
44
43
  #blockList
45
44
  (listChanges)="updateList($event)"
46
45
  containerClass="gap-4 pt-5 pb-7"
@@ -57,12 +56,14 @@
57
56
  </gn-ui-block-list>
58
57
  </ng-container>
59
58
 
60
- <div class="mb-5 md:hidden block" *ngFor="let link of filteredLinks">
61
- <gn-ui-download-item
62
- size="M"
63
- [link]="link"
64
- [color]="getLinkColor(link)"
65
- [format]="getLinkFormat(link)"
66
- [isFromApi]="isFromApi(link)"
67
- ></gn-ui-download-item>
59
+ <div class="mb-5" *ngFor="let link of filteredLinks">
60
+ <ng-container *ngIf="(isMobile$ | async) === true">
61
+ <gn-ui-download-item
62
+ size="M"
63
+ [link]="link"
64
+ [color]="getLinkColor(link)"
65
+ [format]="getLinkFormat(link)"
66
+ [isFromApi]="isFromApi(link)"
67
+ ></gn-ui-download-item>
68
+ </ng-container>
68
69
  </div>
@@ -6,7 +6,11 @@ import {
6
6
  } from '@angular/core'
7
7
  import { TranslateDirective, TranslateService } from '@ngx-translate/core'
8
8
  import { marker } from '@biesbjerg/ngx-translate-extract-marker'
9
- import { getBadgeColor, getFileFormat } from '../../../../../../libs/util/shared/src'
9
+ import {
10
+ getBadgeColor,
11
+ getFileFormat,
12
+ getIsMobile,
13
+ } from '../../../../../../libs/util/shared/src'
10
14
  import { DatasetDownloadDistribution } from '../../../../../../libs/common/domain/src/lib/model/record'
11
15
  import { CommonModule } from '@angular/common'
12
16
  import { ButtonComponent } from '../../../../../../libs/ui/inputs/src'
@@ -50,6 +54,8 @@ export class DownloadsListComponent {
50
54
  return this.filteredLinks?.length || 0
51
55
  }
52
56
 
57
+ isMobile$ = getIsMobile()
58
+
53
59
  activeFilterFormats: FilterFormat[] = ['all']
54
60
 
55
61
  updateList($event: BlockListComponent) {
@@ -7,7 +7,10 @@
7
7
  class="shrink-0 text-[0.75em]"
8
8
  name="matLocationSearchingOutline"
9
9
  ></ng-icon>
10
- <span class="ml-1 hidden sm:inline-block shrink-0" *ngIf="showLabel" translate
10
+ <span
11
+ class="ml-1 inline-block shrink-0"
12
+ *ngIf="(isMobile$ | async) === false && showLabel"
13
+ translate
11
14
  >record.metadata.isGeographical</span
12
15
  >
13
16
  </div>
@@ -4,7 +4,11 @@ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/mode
4
4
  import { CommonModule } from '@angular/common'
5
5
  import { TranslateDirective, TranslatePipe } from '@ngx-translate/core'
6
6
  import { NgIcon, provideIcons } from '@ng-icons/core'
7
- import { LinkClassifierService, LinkUsage } from '../../../../../../libs/util/shared/src'
7
+ import {
8
+ getIsMobile,
9
+ LinkClassifierService,
10
+ LinkUsage,
11
+ } from '../../../../../../libs/util/shared/src'
8
12
 
9
13
  @Component({
10
14
  selector: 'gn-ui-geo-data-badge',
@@ -24,6 +28,8 @@ export class GeoDataBadgeComponent {
24
28
  @Input() styling = 'default'
25
29
  @Input() record: CatalogRecord
26
30
 
31
+ isMobile$ = getIsMobile()
32
+
27
33
  isGeodata() {
28
34
  const links =
29
35
  'onlineResources' in this.record ? this.record.onlineResources : []
@@ -68,6 +68,7 @@
68
68
  [smaller]="true"
69
69
  [metadata]="record"
70
70
  [metadataQualityDisplay]="metadataQualityDisplay"
71
+ [popoverDisplay]="true"
71
72
  ></gn-ui-metadata-quality>
72
73
  </div>
73
74
  <div
@@ -21,7 +21,11 @@ import { KindBadgeComponent } from '../kind-badge/kind-badge.component'
21
21
  import { MarkdownParserComponent } from '../markdown-parser/markdown-parser.component'
22
22
  import { MetadataQualityComponent } from '../metadata-quality/metadata-quality.component'
23
23
  import { ThumbnailComponent } from '../thumbnail/thumbnail.component'
24
- import { removeWhitespace, stripHtml } from '../../../../../../libs/util/shared/src'
24
+ import {
25
+ removeWhitespace,
26
+ stripHtml,
27
+ type ValidatorMapperKeys,
28
+ } from '../../../../../../libs/util/shared/src'
25
29
 
26
30
  type CardSize = 'L' | 'M' | 'S' | 'XS'
27
31
 
@@ -10,6 +10,7 @@
10
10
  class="flex-grow"
11
11
  ></gn-ui-progress-bar>
12
12
  <gn-ui-popover
13
+ *ngIf="popoverDisplay"
13
14
  [content]="popoverItems"
14
15
  theme="light-border"
15
16
  [class]="smaller ? 'ml-2' : 'ml-2 mt-1'"
@@ -14,15 +14,16 @@ import {
14
14
  PopoverComponent,
15
15
  ProgressBarComponent,
16
16
  } from '../../../../../../libs/ui/widgets/src'
17
+ import {
18
+ getQualityValidators,
19
+ getAllKeysValidator,
20
+ type ValidatorMapperKeys,
21
+ } from '../../../../../../libs/util/shared/src'
17
22
  import { CommonModule } from '@angular/common'
18
23
  import { TranslateDirective } from '@ngx-translate/core'
19
24
  import { NgIcon, provideIcons, provideNgIconsConfig } from '@ng-icons/core'
20
25
  import { matInfoOutline } from '@ng-icons/material-icons/outline'
21
26
 
22
- type QualityChecks = {
23
- [key: string]: (metadata: Partial<CatalogRecord>) => boolean
24
- }
25
-
26
27
  @Component({
27
28
  selector: 'gn-ui-metadata-quality',
28
29
  templateUrl: './metadata-quality.component.html',
@@ -48,77 +49,39 @@ type QualityChecks = {
48
49
  ],
49
50
  })
50
51
  export class MetadataQualityComponent implements OnChanges {
51
- @Input() metadata: Partial<CatalogRecord>
52
+ @Input() metadata: CatalogRecord
52
53
  @Input() smaller = false
53
54
  @Input() metadataQualityDisplay: boolean
55
+ @Input() popoverDisplay = true
56
+ @Input() propsToValidate?: ValidatorMapperKeys[]
57
+ @Input() forceComputeScore = false // Instead of returning es' quality score
54
58
 
55
59
  items: MetadataQualityItem[] = []
56
60
 
57
61
  get qualityScore() {
58
- const qualityScore = this.metadata?.extras?.qualityScore
62
+ const qualityScore = !this.forceComputeScore
63
+ ? this.metadata?.extras?.qualityScore
64
+ : this.computedQualityScore
65
+
59
66
  return typeof qualityScore === 'number'
60
67
  ? qualityScore
61
- : this.calculatedQualityScore
68
+ : this.computedQualityScore
62
69
  }
63
70
 
64
- get calculatedQualityScore(): number {
71
+ get computedQualityScore(): number {
65
72
  return Math.round(
66
73
  (this.items.filter(({ value }) => value).length * 100) / this.items.length
67
74
  )
68
75
  }
69
76
 
70
- private add(name: string, value: boolean) {
71
- if (this.metadataQualityDisplay?.[name] !== false) {
72
- this.items.push({ name, value })
73
- }
74
- }
75
- hasGetCapabilities(url: string): boolean {
76
- return url.toLowerCase().includes('capabilities')
77
- }
78
-
79
- private readonly COMMON_CHECKS: QualityChecks = {
80
- title: (metadata) => !!metadata?.title,
81
- description: (metadata) => !!metadata?.abstract,
82
- keywords: (metadata) => (metadata?.keywords?.length ?? 0) > 0,
83
- legalConstraints: (metadata) =>
84
- (metadata?.legalConstraints?.length ?? 0) > 0,
85
- contact: (metadata) => !!metadata?.contacts?.[0]?.email,
86
- }
87
-
88
- private readonly SPECIFIC_CHECKS: Record<string, QualityChecks> = {
89
- dataset: {
90
- updateFrequency: (metadata) => !!metadata?.updateFrequency,
91
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
92
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
93
- },
94
- service: {
95
- capabilities: (metadata) =>
96
- (metadata?.onlineResources ?? []).some((resource) =>
97
- this.hasGetCapabilities(resource?.url?.href ?? '')
98
- ),
99
- },
100
- reuse: {
101
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
102
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
103
- source: (metadata) => !!metadata?.extras?.sourcesIdentifiers,
104
- },
105
- }
106
-
107
77
  initialize() {
108
- this.items = []
109
-
110
- Object.entries(this.COMMON_CHECKS).forEach(([name, check]) => {
111
- this.add(name, check(this.metadata))
112
- })
113
-
114
- const datasetType = this.metadata?.kind
115
- if (datasetType && this.SPECIFIC_CHECKS[datasetType]) {
116
- Object.entries(this.SPECIFIC_CHECKS[datasetType]).forEach(
117
- ([name, check]) => {
118
- this.add(name, check(this.metadata))
119
- }
120
- )
78
+ if (!this.propsToValidate) {
79
+ this.propsToValidate = getAllKeysValidator()
121
80
  }
81
+
82
+ this.items = getQualityValidators(this.metadata, this.propsToValidate).map(
83
+ ({ name, validator }) => ({ name, value: validator() })
84
+ )
122
85
  }
123
86
 
124
87
  ngOnChanges(changes: SimpleChanges): void {
@@ -6,16 +6,16 @@ import { matCheck, matWarningAmber } from '@ng-icons/material-icons/baseline'
6
6
 
7
7
  marker('record.metadata.quality.title.success')
8
8
  marker('record.metadata.quality.title.failed')
9
- marker('record.metadata.quality.description.success')
10
- marker('record.metadata.quality.description.failed')
11
- marker('record.metadata.quality.topic.success')
12
- marker('record.metadata.quality.topic.failed')
9
+ marker('record.metadata.quality.abstract.success')
10
+ marker('record.metadata.quality.abstract.failed')
11
+ marker('record.metadata.quality.topics.success')
12
+ marker('record.metadata.quality.topics.failed')
13
13
  marker('record.metadata.quality.keywords.success')
14
14
  marker('record.metadata.quality.keywords.failed')
15
15
  marker('record.metadata.quality.legalConstraints.success')
16
16
  marker('record.metadata.quality.legalConstraints.failed')
17
- marker('record.metadata.quality.contact.success')
18
- marker('record.metadata.quality.contact.failed')
17
+ marker('record.metadata.quality.contacts.success')
18
+ marker('record.metadata.quality.contacts.failed')
19
19
  marker('record.metadata.quality.updateFrequency.success')
20
20
  marker('record.metadata.quality.updateFrequency.failed')
21
21
  marker('record.metadata.quality.organisation.success')
@@ -136,12 +136,6 @@ export class ServiceCapabilitiesComponent implements OnInit {
136
136
  }
137
137
 
138
138
  selectLayer(layer: WfsFeatureTypeFull | WmsLayerFull | WmtsLayer) {
139
- if (layer === this.selectedLayer) {
140
- this.selectedLayer = null
141
- this.layerInformation = []
142
- return
143
- }
144
-
145
139
  this.selectedLayer = layer
146
140
  const filteredInfo = []
147
141
  Object.keys(layer).map((key) => {