geonetwork-ui 2.7.0-dev.65c46841b → 2.7.0-dev.7488c1064

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 (79) hide show
  1. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -6
  2. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +47 -3
  3. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -3
  4. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +11 -1
  5. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  6. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  7. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  8. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  9. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +5 -4
  10. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +5 -4
  11. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +5 -4
  12. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  13. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  14. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  15. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  16. package/esm2022/libs/util/shared/src/lib/utils/mobile-screen.mjs +9 -0
  17. package/esm2022/translations/de.json +10 -0
  18. package/esm2022/translations/en.json +10 -0
  19. package/esm2022/translations/es.json +10 -0
  20. package/esm2022/translations/fr.json +10 -0
  21. package/esm2022/translations/it.json +10 -0
  22. package/esm2022/translations/nl.json +10 -0
  23. package/esm2022/translations/pt.json +10 -0
  24. package/esm2022/translations/sk.json +10 -0
  25. package/fesm2022/geonetwork-ui.mjs +2492 -2288
  26. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  27. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  28. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  29. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  30. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
  31. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  32. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  33. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  34. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  35. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  36. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  37. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -0
  38. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  39. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +1 -0
  40. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -1
  41. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +1 -0
  42. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  43. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  44. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  45. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  46. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  47. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  48. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  49. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  50. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts +2 -0
  51. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts.map +1 -0
  52. package/package.json +1 -1
  53. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -5
  54. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +50 -3
  55. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +7 -5
  56. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +11 -0
  57. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +3 -1
  58. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  59. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  60. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  61. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +12 -11
  62. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -1
  63. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +4 -1
  64. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +7 -1
  65. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +7 -1
  66. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +3 -1
  67. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  68. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  69. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  70. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  71. package/src/libs/util/shared/src/lib/utils/mobile-screen.ts +14 -0
  72. package/translations/de.json +10 -0
  73. package/translations/en.json +10 -0
  74. package/translations/es.json +10 -0
  75. package/translations/fr.json +10 -0
  76. package/translations/it.json +10 -0
  77. package/translations/nl.json +10 -0
  78. package/translations/pt.json +10 -0
  79. package/translations/sk.json +10 -0
@@ -6,7 +6,7 @@ import { DatasetFeatureCatalog } from '../../../../../../libs/common/domain/src/
6
6
  import { FormsModule } from '@angular/forms'
7
7
  import { of } from 'rxjs'
8
8
  import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators'
9
- import { createFuzzyFilter } from '../../../../../../libs/util/shared/src'
9
+ import { createFuzzyFilter, getIsMobile } from '../../../../../../libs/util/shared/src'
10
10
  import { iconoirSearch } from '@ng-icons/iconoir'
11
11
 
12
12
  @Component({
@@ -39,6 +39,8 @@ export class SearchFeatureCatalogComponent {
39
39
  return this._featureCatalog
40
40
  }
41
41
 
42
+ isMobile$ = getIsMobile()
43
+
42
44
  @Output() filteredFeatureCatalogChange =
43
45
  new EventEmitter<DatasetFeatureCatalog>()
44
46
  filteredFeatureCatalog: DatasetFeatureCatalog
@@ -231,6 +231,7 @@ export function loadAppConfig() {
231
231
  'filter_geometry_url',
232
232
  'search_preset',
233
233
  'advanced_filters',
234
+ 'limit',
234
235
  ],
235
236
  warnings,
236
237
  errors
@@ -257,6 +258,7 @@ export function loadAppConfig() {
257
258
  filters: param.filters,
258
259
  })),
259
260
  ADVANCED_FILTERS: parsedSearchSection.advanced_filters,
261
+ LIMIT: parsedSearchSection.limit,
260
262
  } as SearchConfig)
261
263
 
262
264
  const parsedMetadataQualitySection = parseConfigSection(
@@ -60,6 +60,7 @@ export interface SearchConfig {
60
60
  FILTER_GEOMETRY_DATA?: string
61
61
  SEARCH_PRESET?: SearchPreset[]
62
62
  ADVANCED_FILTERS?: []
63
+ LIMIT?: number
63
64
  }
64
65
 
65
66
  export interface MetadataQualityConfig {
@@ -1,8 +1,11 @@
1
- import { Feature, FeatureCollection, Geometry } from 'geojson'
1
+ import type { Feature, FeatureCollection, Geometry, Position } from 'geojson'
2
2
 
3
+ /**
4
+ * @returns The geometry if available, otherwise null.
5
+ */
3
6
  export function getGeometryFromGeoJSON(
4
7
  data: FeatureCollection | Feature | Geometry
5
- ): Geometry {
8
+ ): Geometry | null {
6
9
  if (data.type === 'FeatureCollection') {
7
10
  return data?.features?.[0]?.geometry || null
8
11
  }
@@ -24,3 +27,70 @@ export function getGeometryFromGeoJSON(
24
27
  }
25
28
  return null
26
29
  }
30
+
31
+ // FIXME: this type should be more generic across the project
32
+ export type BoundingBox = [number, number, number, number]
33
+
34
+ export function getGeometryBoundingBox(geometry: Geometry): BoundingBox {
35
+ // use the bounding box if specified in the GeoJSON object
36
+ if (geometry.bbox) {
37
+ return geometry.bbox.length > 4
38
+ ? [geometry.bbox[0], geometry.bbox[1], geometry.bbox[3], geometry.bbox[4]]
39
+ : (geometry.bbox as BoundingBox)
40
+ }
41
+
42
+ const coordinatesReducer = (prev: BoundingBox, coords: Position) =>
43
+ [
44
+ Math.min(prev[0], coords[0]),
45
+ Math.min(prev[1], coords[1]),
46
+ Math.max(prev[2], coords[0]),
47
+ Math.max(prev[3], coords[1]),
48
+ ] as BoundingBox
49
+ const coordinatesArrayReducer = (
50
+ prev: BoundingBox,
51
+ coordsArray: Position[]
52
+ ) => {
53
+ const bbox = coordsArray.reduce(coordinatesReducer, emptyExtent)
54
+ return [
55
+ Math.min(prev[0], bbox[0]),
56
+ Math.min(prev[1], bbox[1]),
57
+ Math.max(prev[2], bbox[2]),
58
+ Math.max(prev[3], bbox[3]),
59
+ ] as BoundingBox
60
+ }
61
+ const emptyExtent = [Infinity, Infinity, -Infinity, -Infinity] as BoundingBox
62
+
63
+ switch (geometry.type) {
64
+ case 'MultiPolygon':
65
+ return geometry.coordinates.reduce((prev, polygonCoords) => {
66
+ const bbox = polygonCoords.reduce(coordinatesArrayReducer, emptyExtent)
67
+ return [
68
+ Math.min(prev[0], bbox[0]),
69
+ Math.min(prev[1], bbox[1]),
70
+ Math.max(prev[2], bbox[2]),
71
+ Math.max(prev[3], bbox[3]),
72
+ ] as BoundingBox
73
+ }, emptyExtent)
74
+ case 'GeometryCollection':
75
+ return geometry.geometries.reduce((prev, geom) => {
76
+ const bbox = getGeometryBoundingBox(geom)
77
+ return [
78
+ Math.min(prev[0], bbox[0]),
79
+ Math.min(prev[1], bbox[1]),
80
+ Math.max(prev[2], bbox[2]),
81
+ Math.max(prev[3], bbox[3]),
82
+ ] as BoundingBox
83
+ }, emptyExtent)
84
+ case 'Polygon':
85
+ case 'MultiLineString':
86
+ return geometry.coordinates.reduce(coordinatesArrayReducer, emptyExtent)
87
+ case 'LineString':
88
+ case 'MultiPoint':
89
+ return geometry.coordinates.reduce<BoundingBox>(
90
+ coordinatesReducer,
91
+ emptyExtent
92
+ )
93
+ case 'Point':
94
+ return coordinatesReducer(emptyExtent, geometry.coordinates)
95
+ }
96
+ }
@@ -4,6 +4,7 @@ export * from './format-fields'
4
4
  export * from './fuzzy-filter'
5
5
  export * from './geojson'
6
6
  export * from './image-resize'
7
+ export * from './mobile-screen'
7
8
  export * from './no-duplicate-file-name'
8
9
  export * from './parse'
9
10
  export * from './remove-whitespace'
@@ -0,0 +1,14 @@
1
+ import { fromEvent, startWith, map, shareReplay } from 'rxjs'
2
+
3
+ /**
4
+ * This returns true when the screen size is under 768px, which is the mobile threshold.
5
+ */
6
+ const MOBILE_MAX_WIDTH = 768
7
+
8
+ export function getIsMobile() {
9
+ return fromEvent(window, 'resize').pipe(
10
+ startWith(window.innerWidth),
11
+ map(() => window.innerWidth < MOBILE_MAX_WIDTH),
12
+ shareReplay({ bufferSize: 1, refCount: true })
13
+ )
14
+ }
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "",
391
391
  "record.metadata.about": "Beschreibung",
392
392
  "record.metadata.api": "API",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "Schließen",
394
404
  "record.metadata.api.form.closeForm": "Formular schließen",
395
405
  "record.metadata.api.form.create": "Ihre Anfrage erstellen",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "Service",
391
391
  "record.metadata.about": "Description",
392
392
  "record.metadata.api": "API",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "GPFDL",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "esriRest",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "maplibre-style",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "ogcFeatures",
397
+ "record.metadata.api.accessServiceProtocol.other": "other",
398
+ "record.metadata.api.accessServiceProtocol.tms": "tms",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "wfs",
400
+ "record.metadata.api.accessServiceProtocol.wms": "wms",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "wmts",
402
+ "record.metadata.api.accessServiceProtocol.wps": "wps",
393
403
  "record.metadata.api.form.closeButton": "Close",
394
404
  "record.metadata.api.form.closeForm": "Close the form",
395
405
  "record.metadata.api.form.create": "Create your request",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "",
391
391
  "record.metadata.about": "",
392
392
  "record.metadata.api": "",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "",
394
404
  "record.metadata.api.form.closeForm": "",
395
405
  "record.metadata.api.form.create": "",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "Service",
391
391
  "record.metadata.about": "A propos",
392
392
  "record.metadata.api": "API",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "autre",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "Fermer",
394
404
  "record.metadata.api.form.closeForm": "Fermer le panneau de personnalisation",
395
405
  "record.metadata.api.form.create": "Paramétrer votre requête",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "Servizio",
391
391
  "record.metadata.about": "Descrizione",
392
392
  "record.metadata.api": "API",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "Chiude",
394
404
  "record.metadata.api.form.closeForm": "Chiude il pannello di personalizzazione",
395
405
  "record.metadata.api.form.create": "Configura la sua richiesta",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "",
391
391
  "record.metadata.about": "",
392
392
  "record.metadata.api": "",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "",
394
404
  "record.metadata.api.form.closeForm": "",
395
405
  "record.metadata.api.form.create": "",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "",
391
391
  "record.metadata.about": "",
392
392
  "record.metadata.api": "",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "",
394
404
  "record.metadata.api.form.closeForm": "",
395
405
  "record.metadata.api.form.create": "",
@@ -390,6 +390,16 @@
390
390
  "record.kind.service": "",
391
391
  "record.metadata.about": "O",
392
392
  "record.metadata.api": "API",
393
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
394
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
395
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
396
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
397
+ "record.metadata.api.accessServiceProtocol.other": "",
398
+ "record.metadata.api.accessServiceProtocol.tms": "",
399
+ "record.metadata.api.accessServiceProtocol.wfs": "",
400
+ "record.metadata.api.accessServiceProtocol.wms": "",
401
+ "record.metadata.api.accessServiceProtocol.wmts": "",
402
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
403
  "record.metadata.api.form.closeButton": "Zavrieť",
394
404
  "record.metadata.api.form.closeForm": "Zavrieť formulár",
395
405
  "record.metadata.api.form.create": "Vytvoriť požiadavku",