geonetwork-ui 2.7.0-dev.65c46841b → 2.7.0-dev.76c515d5b

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 (58) 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/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  5. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  6. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  7. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +5 -4
  8. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +5 -4
  9. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +5 -4
  10. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  11. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  12. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  13. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  14. package/esm2022/libs/util/shared/src/lib/utils/mobile-screen.mjs +9 -0
  15. package/fesm2022/geonetwork-ui.mjs +2400 -2286
  16. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  17. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  18. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  19. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  20. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
  21. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  22. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  23. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  24. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  25. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  26. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -0
  27. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  28. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +1 -0
  29. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -1
  30. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +1 -0
  31. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  32. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  33. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  34. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  35. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  36. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  37. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  38. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  39. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts +2 -0
  40. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts.map +1 -0
  41. package/package.json +1 -1
  42. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -5
  43. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +50 -3
  44. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +7 -5
  45. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +3 -1
  46. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  47. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  48. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +12 -11
  49. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -1
  50. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +4 -1
  51. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +7 -1
  52. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +7 -1
  53. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +3 -1
  54. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  55. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  56. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  57. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  58. package/src/libs/util/shared/src/lib/utils/mobile-screen.ts +14 -0
@@ -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
+ }