geonetwork-ui 2.5.0-dev.ed99f2ef4 → 2.5.0-dev.f8f8616a0

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 (123) hide show
  1. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  2. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +2 -2
  3. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +2 -2
  4. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +2 -2
  5. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +2 -2
  6. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  7. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -23
  8. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +3 -4
  9. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  10. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +24 -5
  11. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +8 -6
  12. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +6 -3
  13. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +3 -3
  14. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  15. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  16. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +37 -2
  17. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +1 -6
  18. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +2 -7
  19. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  20. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -6
  21. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +5 -3
  22. package/esm2022/translations/de.json +1 -72
  23. package/esm2022/translations/en.json +1 -64
  24. package/esm2022/translations/es.json +0 -71
  25. package/esm2022/translations/fr.json +1 -72
  26. package/esm2022/translations/it.json +1 -72
  27. package/esm2022/translations/nl.json +0 -71
  28. package/esm2022/translations/pt.json +0 -71
  29. package/fesm2022/geonetwork-ui.mjs +96 -669
  30. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  31. package/libs/feature/editor/src/index.d.ts +1 -0
  32. package/libs/feature/editor/src/index.d.ts.map +1 -1
  33. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  34. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  35. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +1 -3
  36. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +1 -1
  37. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +2 -3
  38. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +1 -1
  39. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +4 -1
  40. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  41. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -2
  42. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  43. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  44. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  45. package/libs/ui/inputs/src/index.d.ts +0 -1
  46. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  47. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +16 -1
  48. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  49. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -28
  50. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  51. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -3
  52. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  53. package/libs/ui/widgets/src/index.d.ts +0 -1
  54. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  55. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +8 -9
  56. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  57. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/src/libs/feature/editor/src/index.ts +1 -0
  60. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  61. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -13
  62. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -20
  63. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -1
  64. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +24 -13
  65. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +23 -4
  66. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +71 -60
  67. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +4 -2
  68. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -0
  69. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  70. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +2 -2
  71. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
  72. package/src/libs/ui/inputs/src/index.ts +0 -1
  73. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +42 -0
  74. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -3
  75. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -7
  76. package/src/libs/ui/widgets/src/index.ts +0 -1
  77. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +2 -3
  78. package/src/libs/util/data-fetcher/src/lib/utils.ts +4 -2
  79. package/translations/de.json +1 -72
  80. package/translations/en.json +1 -64
  81. package/translations/es.json +0 -71
  82. package/translations/fr.json +1 -72
  83. package/translations/it.json +1 -72
  84. package/translations/nl.json +0 -71
  85. package/translations/pt.json +0 -71
  86. package/translations/sk.json +0 -71
  87. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +0 -78
  88. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +0 -55
  89. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts +0 -33
  90. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +0 -1
  91. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts +0 -21
  92. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts.map +0 -1
  93. package/src/libs/data-access/datafeeder/src/index.ts +0 -1
  94. package/src/libs/data-access/datafeeder/src/openapi/api/api.ts +0 -11
  95. package/src/libs/data-access/datafeeder/src/openapi/api/config.api.service.ts +0 -168
  96. package/src/libs/data-access/datafeeder/src/openapi/api/dataPublishing.api.service.ts +0 -270
  97. package/src/libs/data-access/datafeeder/src/openapi/api/fileUpload.api.service.ts +0 -734
  98. package/src/libs/data-access/datafeeder/src/openapi/api.module.ts +0 -46
  99. package/src/libs/data-access/datafeeder/src/openapi/configuration.ts +0 -125
  100. package/src/libs/data-access/datafeeder/src/openapi/encoder.ts +0 -20
  101. package/src/libs/data-access/datafeeder/src/openapi/index.ts +0 -5
  102. package/src/libs/data-access/datafeeder/src/openapi/model/analysisStatusEnum.api.model.ts +0 -24
  103. package/src/libs/data-access/datafeeder/src/openapi/model/boundingBox.api.model.ts +0 -20
  104. package/src/libs/data-access/datafeeder/src/openapi/model/cRS.api.model.ts +0 -25
  105. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +0 -45
  106. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishRequest.api.model.ts +0 -39
  107. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishingStatus.api.model.ts +0 -50
  108. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +0 -39
  109. package/src/libs/data-access/datafeeder/src/openapi/model/models.ts +0 -13
  110. package/src/libs/data-access/datafeeder/src/openapi/model/property.api.model.ts +0 -17
  111. package/src/libs/data-access/datafeeder/src/openapi/model/publishJobStatus.api.model.ts +0 -33
  112. package/src/libs/data-access/datafeeder/src/openapi/model/publishRequest.api.model.ts +0 -16
  113. package/src/libs/data-access/datafeeder/src/openapi/model/publishStatusEnum.api.model.ts +0 -20
  114. package/src/libs/data-access/datafeeder/src/openapi/model/publishStepEnum.api.model.ts +0 -42
  115. package/src/libs/data-access/datafeeder/src/openapi/model/uploadJobStatus.api.model.ts +0 -33
  116. package/src/libs/data-access/datafeeder/src/openapi/variables.ts +0 -9
  117. package/src/libs/data-access/datafeeder/src/spec.yaml +0 -537
  118. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.css +0 -36
  119. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.html +0 -23
  120. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +0 -81
  121. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.css +0 -3
  122. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.html +0 -13
  123. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.ts +0 -55
@@ -5,8 +5,8 @@ import {
5
5
  Output,
6
6
  } from '@angular/core'
7
7
  import { getLinkLabel, getLinkPriority } from '../../../../../../libs/util/shared/src'
8
- import { BehaviorSubject, combineLatest } from 'rxjs'
9
- import { map, tap } from 'rxjs/operators'
8
+ import { BehaviorSubject, combineLatest, of } from 'rxjs'
9
+ import { catchError, finalize, map, switchMap, tap } from 'rxjs/operators'
10
10
  import { MdViewFacade } from '../state'
11
11
  import { DatavizConfigurationModel } from '../../../../../../libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model'
12
12
  import { DatasetOnlineResource } from '../../../../../../libs/common/domain/src/lib/model/record'
@@ -17,6 +17,7 @@ import {
17
17
  } from '../../../../../../libs/feature/dataviz/src'
18
18
  import { CommonModule } from '@angular/common'
19
19
  import { TranslateModule } from '@ngx-translate/core'
20
+ import { PopupAlertComponent } from '../../../../../../libs/ui/widgets/src'
20
21
 
21
22
  @Component({
22
23
  selector: 'gn-ui-data-view',
@@ -30,15 +31,21 @@ import { TranslateModule } from '@ngx-translate/core'
30
31
  TableViewComponent,
31
32
  TranslateModule,
32
33
  ChartViewComponent,
34
+ PopupAlertComponent,
33
35
  ],
34
36
  })
35
37
  export class DataViewComponent {
36
38
  @Input() mode: 'table' | 'chart'
37
39
  @Input() displaySource = true
40
+ @Input() set exceedsLimit(value: boolean) {
41
+ this.excludeWfs$.next(value)
42
+ }
38
43
  @Output() chartConfig$ = new BehaviorSubject<DatavizConfigurationModel>(null)
39
44
  cacheActive$ = this.mdViewFacade.isHighUpdateFrequency$.pipe(
40
45
  map((highF) => !highF)
41
46
  )
47
+ hidePreview = false
48
+ excludeWfs$ = new BehaviorSubject(false)
42
49
  compatibleDataLinks$ = combineLatest([
43
50
  this.mdViewFacade.dataLinks$,
44
51
  this.mdViewFacade.geoDataLinks$,
@@ -52,7 +59,7 @@ export class DataViewComponent {
52
59
  dropdownChoices$ = this.compatibleDataLinks$.pipe(
53
60
  tap((links) => {
54
61
  if (links.indexOf(this.selectedLink$.value) === -1) {
55
- this.selectedLink$.next(links[0])
62
+ this.selectLink(JSON.stringify(links[0]))
56
63
  }
57
64
  }),
58
65
  map((links) =>
@@ -73,6 +80,18 @@ export class DataViewComponent {
73
80
  selectLink(linkAsString: string) {
74
81
  const link: DatasetOnlineResource = JSON.parse(linkAsString)
75
82
  link.url = new URL(link.url)
76
- this.selectedLink$.next(link)
83
+ this.excludeWfs$
84
+ .pipe(
85
+ tap((excludeWfs) => {
86
+ this.hidePreview =
87
+ link['accessServiceProtocol'] === 'wfs' &&
88
+ excludeWfs &&
89
+ this.mode === 'chart'
90
+ ? true
91
+ : false
92
+ this.selectedLink$.next(link)
93
+ })
94
+ )
95
+ .subscribe()
77
96
  }
78
97
  }
@@ -14,80 +14,91 @@
14
14
  >
15
15
  </gn-ui-external-viewer-button>
16
16
  </div>
17
- <div
18
- class="relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden"
19
- >
20
- <gn-ui-map-container
21
- #mapContainer
22
- [context]="mapContext$ | async"
23
- (featuresClick)="onMapFeatureSelect($event)"
24
- ></gn-ui-map-container>
25
- <div
26
- class="top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56"
27
- [class.hidden]="!selection"
17
+ <ng-container *ngIf="hidePreview; else mapView">
18
+ <gn-ui-popup-alert
19
+ type="warning"
20
+ icon="matErrorOutlineOutline"
21
+ class="block h-12 p-1"
28
22
  >
29
- <gn-ui-button
30
- type="light"
31
- (buttonClick)="resetSelection()"
32
- style="
33
- --gn-ui-button-padding: 0px;
34
- --gn-ui-button-width: 24px;
35
- --gn-ui-button-height: 24px;
36
- "
37
- extraClass="absolute right-[0.5em] ml-[8px] mr-[10px]"
38
- >
39
- <ng-icon name="matClose" class="align-middle text-sm"></ng-icon>
40
- </gn-ui-button>
41
- <gn-ui-feature-detail [feature]="selection"></gn-ui-feature-detail>
42
- </div>
43
-
23
+ <span translate>record.feature.limit</span>
24
+ </gn-ui-popup-alert>
25
+ </ng-container>
26
+ <ng-template #mapView>
44
27
  <div
45
- class="top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56"
46
- [ngClass]="{ 'right-[1em]': !selection, 'right-[16em]': selection }"
47
- [hidden]="!showLegend || !legendExists"
28
+ class="relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden"
48
29
  >
49
- <div class="flex justify-between items-center mb-2">
50
- <div class="text-primary font-bold">Legend</div>
30
+ <gn-ui-map-container
31
+ #mapContainer
32
+ [context]="mapContext$ | async"
33
+ (featuresClick)="onMapFeatureSelect($event)"
34
+ ></gn-ui-map-container>
35
+ <div
36
+ class="top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56"
37
+ [class.hidden]="!selection"
38
+ >
51
39
  <gn-ui-button
52
40
  type="light"
53
- (buttonClick)="toggleLegend()"
41
+ (buttonClick)="resetSelection()"
54
42
  style="
55
43
  --gn-ui-button-padding: 0px;
56
44
  --gn-ui-button-width: 24px;
57
45
  --gn-ui-button-height: 24px;
58
46
  "
59
- extraClass="ml-[8px] mr-[10px]"
47
+ extraClass="absolute right-[0.5em] ml-[8px] mr-[10px]"
60
48
  >
61
49
  <ng-icon name="matClose" class="align-middle text-sm"></ng-icon>
62
50
  </gn-ui-button>
51
+ <gn-ui-feature-detail [feature]="selection"></gn-ui-feature-detail>
63
52
  </div>
64
- <gn-ui-map-legend
65
- [context]="mapContext$ | async"
66
- (legendStatusChange)="onLegendStatusChange($event)"
67
- ></gn-ui-map-legend>
68
- </div>
69
53
 
70
- <gn-ui-button
71
- *ngIf="!showLegend && legendExists && !selection"
72
- type="outline"
73
- (buttonClick)="toggleLegend()"
74
- extraClass="absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white"
75
- >
76
- Legend
77
- </gn-ui-button>
54
+ <div
55
+ class="top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56"
56
+ [ngClass]="{ 'right-[1em]': !selection, 'right-[16em]': selection }"
57
+ [hidden]="!showLegend || !legendExists"
58
+ >
59
+ <div class="flex justify-between items-center mb-2">
60
+ <div class="text-primary font-bold">Legend</div>
61
+ <gn-ui-button
62
+ type="light"
63
+ (buttonClick)="toggleLegend()"
64
+ style="
65
+ --gn-ui-button-padding: 0px;
66
+ --gn-ui-button-width: 24px;
67
+ --gn-ui-button-height: 24px;
68
+ "
69
+ extraClass="ml-[8px] mr-[10px]"
70
+ >
71
+ <ng-icon name="matClose" class="align-middle text-sm"></ng-icon>
72
+ </gn-ui-button>
73
+ </div>
74
+ <gn-ui-map-legend
75
+ [context]="mapContext$ | async"
76
+ (legendStatusChange)="onLegendStatusChange($event)"
77
+ ></gn-ui-map-legend>
78
+ </div>
78
79
 
79
- <gn-ui-loading-mask
80
- *ngIf="loading"
81
- class="absolute inset-0"
82
- [message]="'map.loading.data' | translate"
83
- ></gn-ui-loading-mask>
84
- <gn-ui-popup-alert
85
- *ngIf="error"
86
- type="warning"
87
- icon="matErrorOutlineOutline"
88
- class="absolute m-2 inset-0"
89
- >
90
- <span translate>{{ error }}</span>
91
- </gn-ui-popup-alert>
92
- </div>
80
+ <gn-ui-button
81
+ *ngIf="!showLegend && legendExists && !selection"
82
+ type="outline"
83
+ (buttonClick)="toggleLegend()"
84
+ extraClass="absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white"
85
+ >
86
+ Legend
87
+ </gn-ui-button>
88
+
89
+ <gn-ui-loading-mask
90
+ *ngIf="loading"
91
+ class="absolute inset-0"
92
+ [message]="'map.loading.data' | translate"
93
+ ></gn-ui-loading-mask>
94
+ <gn-ui-popup-alert
95
+ *ngIf="error"
96
+ type="warning"
97
+ icon="matErrorOutlineOutline"
98
+ class="absolute m-2 inset-0"
99
+ >
100
+ <span translate>{{ error }}</span>
101
+ </gn-ui-popup-alert>
102
+ </div>
103
+ </ng-template>
93
104
  </div>
@@ -82,13 +82,14 @@ marker('wfs.feature.limit')
82
82
  viewProviders: [provideIcons({ matClose })],
83
83
  })
84
84
  export class MapViewComponent implements AfterViewInit {
85
- @Input() set excludeWfs(value: boolean) {
85
+ @Input() set exceedsLimit(value: boolean) {
86
86
  this.excludeWfs$.next(value)
87
87
  }
88
88
  @Input() displaySource = true
89
89
  @ViewChild('mapContainer') mapContainer: MapContainerComponent
90
90
 
91
91
  excludeWfs$ = new BehaviorSubject(false)
92
+ hidePreview = false
92
93
  selection: Feature
93
94
  showLegend = true
94
95
  legendExists = false
@@ -139,9 +140,10 @@ export class MapViewComponent implements AfterViewInit {
139
140
  return of([])
140
141
  }
141
142
  if (excludeWfs && link.accessServiceProtocol === 'wfs') {
142
- this.error = 'wfs.feature.limit'
143
+ this.hidePreview = true
143
144
  return of([])
144
145
  }
146
+ this.hidePreview = false
145
147
  this.loading = true
146
148
  this.error = null
147
149
  return this.getLayerFromLink(link).pipe(
@@ -9,4 +9,5 @@
9
9
  [preventCompleteOnSelection]="true"
10
10
  [autoFocus]="autoFocus"
11
11
  [allowSubmit]="true"
12
+ [forceTrackPosition]="forceTrackPosition"
12
13
  ></gn-ui-autocomplete>
@@ -28,6 +28,7 @@ import { SearchFilters } from '../../../../../../libs/api/metadata-converter/src
28
28
  export class FuzzySearchComponent implements OnInit {
29
29
  @ViewChild(AutocompleteComponent) autocomplete: AutocompleteComponent
30
30
  @Input() autoFocus = false
31
+ @Input() forceTrackPosition = false
31
32
  @Output() itemSelected = new EventEmitter<CatalogRecord>()
32
33
  @Output() inputSubmitted = new EventEmitter<string>()
33
34
  searchInputValue$: Observable<{ title: string }>
@@ -1,12 +1,12 @@
1
1
  <div
2
2
  *ngIf="message && bannerOpen"
3
- class="absolute top-0 text-wrap bg-white mt-4 max-h-24"
3
+ class="absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24"
4
4
  >
5
5
  <div
6
6
  class="flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20"
7
7
  [ngClass]="classList"
8
8
  >
9
- <div [ngClass]="{ 'pt-5': message.length > 200 }">
9
+ <div [ngClass]="message.length > 200 ? 'pt-5' : 'pt-1'">
10
10
  <ng-icon [name]="icon"></ng-icon>
11
11
  </div>
12
12
  <div class="flex flex-col justify-start gap-2.5">
@@ -1,4 +1,4 @@
1
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core'
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
2
  import { marked } from 'marked'
3
3
 
4
4
  @Component({
@@ -13,6 +13,6 @@ export class MarkdownParserComponent {
13
13
  @Input() whitoutStyles?: boolean
14
14
 
15
15
  get parsedMarkdown() {
16
- return marked.parse(this.textContent)
16
+ return marked.parse(this.textContent ?? '')
17
17
  }
18
18
  }
@@ -3,7 +3,6 @@ export * from './lib/badge/badge.component'
3
3
  export * from './lib/button/button.component'
4
4
  export * from './lib/check-toggle/check-toggle.component'
5
5
  export * from './lib/checkbox/checkbox.component'
6
- export * from './lib/chips-input/chips-input.component'
7
6
  export * from './lib/copy-text-button/copy-text-button.component'
8
7
  export * from './lib/date-picker/date-picker.component'
9
8
  export * from './lib/date-range-dropdown/date-range-dropdown.component'
@@ -83,6 +83,7 @@ export class AutocompleteComponent
83
83
  @Input() minCharacterCount? = 3
84
84
  // this will show a submit button next to the input; if false, a search icon will appear on the left
85
85
  @Input() allowSubmit = false
86
+ @Input() forceTrackPosition = false
86
87
  @Output() itemSelected = new EventEmitter<AutocompleteItem>()
87
88
  @Output() inputSubmitted = new EventEmitter<string>()
88
89
  @Output() inputCleared = new EventEmitter<void>()
@@ -98,6 +99,8 @@ export class AutocompleteComponent
98
99
  error: string | null = null
99
100
  suggestions$: Observable<AutocompleteItem[]>
100
101
  subscription = new Subscription()
102
+ private lastPosition: DOMRect | null = null
103
+ private intervalIdPosition: number | undefined
101
104
 
102
105
  @Input() displayWithFn: (item: AutocompleteItem) => string = (item) =>
103
106
  item.toString()
@@ -197,10 +200,49 @@ export class AutocompleteComponent
197
200
  this.inputRef.nativeElement.focus()
198
201
  this.cdRef.detectChanges()
199
202
  }
203
+
204
+ this.startTrackingPosition()
205
+ }
206
+
207
+ /**
208
+ * !!! This function is used only for web component mode,
209
+ * the autocomplete dropdown may not update its position
210
+ * if the page or container is disabling wind scroll.
211
+ */
212
+ private trackPosition = () => {
213
+ const dropdownOpened = this.triggerRef && this.triggerRef.panelOpen
214
+ const rect = this.inputRef.nativeElement.getBoundingClientRect()
215
+
216
+ if (
217
+ dropdownOpened &&
218
+ (!this.lastPosition ||
219
+ rect.top !== this.lastPosition.top ||
220
+ rect.left !== this.lastPosition.left)
221
+ ) {
222
+ this.triggerRef.updatePosition()
223
+ }
224
+
225
+ this.lastPosition = rect
226
+ requestAnimationFrame(this.trackPosition)
227
+ }
228
+
229
+ /**
230
+ * !!! This function is used only for web component mode,
231
+ * the autocomplete dropdown may not update its position
232
+ * if the page or container is disabling wind scroll.
233
+ */
234
+ startTrackingPosition() {
235
+ if (this.forceTrackPosition) {
236
+ requestAnimationFrame(this.trackPosition)
237
+ }
200
238
  }
201
239
 
202
240
  ngOnDestroy(): void {
203
241
  this.subscription?.unsubscribe()
242
+
243
+ if (this.intervalIdPosition) {
244
+ clearInterval(this.intervalIdPosition)
245
+ }
204
246
  }
205
247
 
206
248
  updateInputValue(value: AutocompleteItem) {
@@ -28,7 +28,6 @@ import { BadgeComponent } from './badge/badge.component'
28
28
  import { ButtonComponent } from './button/button.component'
29
29
  import { CheckToggleComponent } from './check-toggle/check-toggle.component'
30
30
  import { CheckboxComponent } from './checkbox/checkbox.component'
31
- import { ChipsInputComponent } from './chips-input/chips-input.component'
32
31
  import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component'
33
32
  import { DragAndDropFileInputComponent } from './drag-and-drop-file-input/drag-and-drop-file-input.component'
34
33
  import { DropdownMultiselectComponent } from './dropdown-multiselect/dropdown-multiselect.component'
@@ -40,7 +39,6 @@ import { ViewportIntersectorComponent } from './viewport-intersector/viewport-in
40
39
  @NgModule({
41
40
  declarations: [
42
41
  DragAndDropFileInputComponent,
43
- ChipsInputComponent,
44
42
  DropdownMultiselectComponent,
45
43
  ViewportIntersectorComponent,
46
44
  CheckboxComponent,
@@ -86,7 +84,6 @@ import { ViewportIntersectorComponent } from './viewport-intersector/viewport-in
86
84
  ButtonComponent,
87
85
  DragAndDropFileInputComponent,
88
86
  TextAreaComponent,
89
- ChipsInputComponent,
90
87
  DropdownMultiselectComponent,
91
88
  ViewportIntersectorComponent,
92
89
  CheckToggleComponent,
@@ -31,7 +31,7 @@ import { iconoirArrowUp, iconoirLink } from '@ng-icons/iconoir'
31
31
  ],
32
32
  changeDetection: ChangeDetectionStrategy.OnPush,
33
33
  })
34
- export class UrlInputComponent implements OnChanges {
34
+ export class UrlInputComponent {
35
35
  @Input() set value(v: string) {
36
36
  // we're making sure to only update the input if the URL representation of it has changed; otherwise we keep it identical
37
37
  // to avoid glitches when starting to write a URL and having some characters added/replaced automatically
@@ -59,12 +59,6 @@ export class UrlInputComponent implements OnChanges {
59
59
 
60
60
  constructor(private cd: ChangeDetectorRef) {}
61
61
 
62
- ngOnChanges(changes: SimpleChanges) {
63
- if (changes['value']) {
64
- this.inputValue = changes['value'].currentValue
65
- }
66
- }
67
-
68
62
  handleInput(event: Event) {
69
63
  const value = (event.target as HTMLInputElement).value
70
64
  this.inputValue = value
@@ -5,4 +5,3 @@ export * from './lib/loading-mask/loading-mask.component'
5
5
  export * from './lib/color-scale/color-scale.component'
6
6
  export * from './lib/popup-alert/popup-alert.component'
7
7
  export * from './lib/spinning-loader/spinning-loader.component'
8
- export * from './lib/step-bar/step-bar.component'
@@ -3,14 +3,13 @@ import { UtilSharedModule } from '../../../../../libs/util/shared/src'
3
3
  import { TranslateModule } from '@ngx-translate/core'
4
4
  import { NgxDropzoneModule } from 'ngx-dropzone'
5
5
  import { ColorScaleComponent } from './color-scale/color-scale.component'
6
- import { StepBarComponent } from './step-bar/step-bar.component'
7
6
  import { TagInputModule } from 'ngx-chips'
8
7
  import { FormsModule, ReactiveFormsModule } from '@angular/forms'
9
8
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'
10
9
  import { CommonModule } from '@angular/common'
11
10
 
12
11
  @NgModule({
13
- declarations: [ColorScaleComponent, StepBarComponent],
12
+ declarations: [ColorScaleComponent],
14
13
  imports: [
15
14
  CommonModule,
16
15
  TranslateModule.forChild(),
@@ -21,6 +20,6 @@ import { CommonModule } from '@angular/common'
21
20
  UtilSharedModule,
22
21
  MatProgressSpinnerModule,
23
22
  ],
24
- exports: [StepBarComponent],
23
+ exports: [],
25
24
  })
26
25
  export class UiWidgetsModule {}
@@ -62,9 +62,11 @@ export function fetchDataAsText(
62
62
  })
63
63
  .then(async (response) => {
64
64
  if (!response.ok) {
65
- throw FetchError.http(response.status, await response.text())
65
+ const clonedResponse = response.clone()
66
+ throw FetchError.http(response.status, await clonedResponse.text())
66
67
  }
67
- return response.text()
68
+ const clonedResponse = response.clone()
69
+ return clonedResponse.text()
68
70
  })
69
71
 
70
72
  return cacheActive ? useCache(fetchFactory, url, 'asText') : fetchFactory()
@@ -36,24 +36,6 @@
36
36
  "dashboard.records.userEmail": "E-Mail",
37
37
  "dashboard.records.username": "Benutzername",
38
38
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
39
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
40
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
41
- "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
42
- "datafeeder.analysisProgressBar.subtitle": "Die Analyse kann einige Minuten dauern. Bitte warten Sie.",
43
- "datafeeder.analysisProgressBar.title": "Analyse in Bearbeitung",
44
- "datafeeder.datasetValidation.datasetInformation": "Der bereitgestellte Datensatz enthält {number} Elemente",
45
- "datafeeder.datasetValidation.submitButton": "OK, meine Daten sind korrekt",
46
- "datafeeder.datasetValidation.title": "Stellen Sie sicher, dass Ihre Daten korrekt sind",
47
- "datafeeder.datasetValidation.unknown": " - ",
48
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
49
- "datafeeder.datasetValidationCsv.lineNumbers": "",
50
- "datafeeder.form.abstract": "Wie würden Sie Ihren Datensatz beschreiben?",
51
- "datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
52
- "datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
53
- "datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
54
- "datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
55
- "datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
56
- "datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
57
39
  "datafeeder.month.april": "April",
58
40
  "datafeeder.month.august": "August",
59
41
  "datafeeder.month.december": "Dezember",
@@ -66,59 +48,6 @@
66
48
  "datafeeder.month.november": "November",
67
49
  "datafeeder.month.october": "Oktober",
68
50
  "datafeeder.month.september": "September",
69
- "datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
70
- "datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
71
- "datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
72
- "datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
73
- "datafeeder.publish.upload": "Jetzt hochladen",
74
- "datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
75
- "datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
76
- "datafeeder.publishSuccess.mapViewer": "Kartenviewer",
77
- "datafeeder.publishSuccess.ogcFeature": "",
78
- "datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
79
- "datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
80
- "datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
81
- "datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
82
- "datafeeder.summarizePage.previous": "Zurück",
83
- "datafeeder.summarizePage.submit": "Absenden",
84
- "datafeeder.summarizePage.title": "Sie sind fast fertig...",
85
- "datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
86
- "datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
87
- "datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
88
- "datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
89
- "datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
90
- "datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
91
- "datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
92
- "datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
93
- "datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
94
- "datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
95
- "datafeeder.upload.error.title.fileSize": "Die Dateigröße ist zu groß",
96
- "datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
97
- "datafeeder.upload.illustration.enrichment": "Anreicherung",
98
- "datafeeder.upload.illustration.import": "Import",
99
- "datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
100
- "datafeeder.upload.illustration.validation": "Validierung",
101
- "datafeeder.upload.illustration.verification": "Überprüfung",
102
- "datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
103
- "datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
104
- "datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
105
- "datafeeder.upload.uploadButton": "Hochladen",
106
- "datafeeder.validation.csv.delimiter": "",
107
- "datafeeder.validation.csv.delimiter.comma": "",
108
- "datafeeder.validation.csv.delimiter.semicolon": "",
109
- "datafeeder.validation.csv.lat.field": "",
110
- "datafeeder.validation.csv.lng.field": "",
111
- "datafeeder.validation.csv.quote.double": "",
112
- "datafeeder.validation.csv.quote.none": "",
113
- "datafeeder.validation.csv.quote.simple": "",
114
- "datafeeder.validation.csv.quoteChar": "",
115
- "datafeeder.validation.encoding": "Codierung",
116
- "datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
117
- "datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
118
- "datafeeder.validation.projection": "Raumbezugssystem:",
119
- "datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
120
- "datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
121
- "datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
122
51
  "datafeeder.wizardSummarize.createdAt": "Erstellt am",
123
52
  "datafeeder.wizardSummarize.scale": "Maßstab",
124
53
  "datahub.header.datasets": "Datensätze",
@@ -425,7 +354,7 @@
425
354
  "record.action.rollback": "",
426
355
  "record.action.view": "Anzeigen",
427
356
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
428
- "record.feature.limit": "Die Ressource enthält mehr als {count} Features und kann hier nicht angezeigt werden.",
357
+ "record.feature.limit": "Die Vorschau wurde aufgrund zu vieler Elemente deaktiviert",
429
358
  "record.metadata.about": "Beschreibung",
430
359
  "record.metadata.api": "API",
431
360
  "record.metadata.api.form.closeButton": "Schließen",
@@ -36,16 +36,6 @@
36
36
  "dashboard.records.userEmail": "Email",
37
37
  "dashboard.records.username": "Username",
38
38
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
39
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
40
- "datafeeder.anaeditor.record.saveStatus.recordNotPublishedasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
41
- "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
42
- "datafeeder.form.abstract": "How would you describe your dataset?",
43
- "datafeeder.form.datepicker": "Do you know when the dataset was created?",
44
- "datafeeder.form.description": "Finally, please describe the process used to create the dataset",
45
- "datafeeder.form.dropdown": "For which scale was it created?",
46
- "datafeeder.form.tags": "Select one or more tags that fit your dataset",
47
- "datafeeder.form.title": "Give your dataset the best title",
48
- "datafeeder.formsPage.title": "Tell us more about your dataset",
49
39
  "datafeeder.month.april": "April",
50
40
  "datafeeder.month.august": "August",
51
41
  "datafeeder.month.december": "December",
@@ -58,59 +48,6 @@
58
48
  "datafeeder.month.november": "November",
59
49
  "datafeeder.month.october": "October",
60
50
  "datafeeder.month.september": "September",
61
- "datafeeder.publish.hint": "You can safely exit this page, you will be notified when the process is over",
62
- "datafeeder.publish.illustration.title": "Another dataset \n to publish?",
63
- "datafeeder.publish.subtitle": "Publishing may take several minutes.",
64
- "datafeeder.publish.title": "Thank you! \n Your dataset is being published",
65
- "datafeeder.publish.upload": "Upload it now",
66
- "datafeeder.publishSuccess.geonetworkRecord": "Metadata record",
67
- "datafeeder.publishSuccess.illustration.title": "Done, all is good!",
68
- "datafeeder.publishSuccess.mapViewer": "Map viewer",
69
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
70
- "datafeeder.publishSuccess.subtitle": "View your data in:",
71
- "datafeeder.publishSuccess.title": "Congratulations! \n Your dataset has been published",
72
- "datafeeder.publishSuccess.uploadAnotherData": "Upload another dataset",
73
- "datafeeder.summarizePage.illustration": "No mistake? Let's go!",
74
- "datafeeder.summarizePage.previous": "Previous",
75
- "datafeeder.summarizePage.submit": "Submit",
76
- "datafeeder.summarizePage.title": "You're almost there...",
77
- "datafeeder.upload.acceptedFormats": "Accepted file formats:",
78
- "datafeeder.upload.checkboxLabel": "I hold the rights to publish this dataset",
79
- "datafeeder.upload.error.subtitle.analysis": "Check that the file contains a valid geospatial dataset",
80
- "datafeeder.upload.error.subtitle.cantOpenFile": "Please check that the file is valid",
81
- "datafeeder.upload.error.subtitle.fileFormat": "Remember: only SHP",
82
- "datafeeder.upload.error.subtitle.fileSize": "Remember: {size} MB maximum",
83
- "datafeeder.upload.error.title.analysis": "Error during the dataset analysis",
84
- "datafeeder.upload.error.title.cantOpenFile": "Error while opening the file",
85
- "datafeeder.upload.error.title.fileFormat": "The selected file format is not supported",
86
- "datafeeder.upload.error.title.fileHasntSelected": "No file selected",
87
- "datafeeder.upload.error.title.fileSize": "The file size is too large",
88
- "datafeeder.upload.error.title.noRightsToSendData": "You are not allowed to publish this dataset",
89
- "datafeeder.upload.illustration.enrichment": "Enrichment",
90
- "datafeeder.upload.illustration.import": "Import",
91
- "datafeeder.upload.illustration.title": "Adding data \n has never been easier",
92
- "datafeeder.upload.illustration.validation": "Validation",
93
- "datafeeder.upload.illustration.verification": "Verification",
94
- "datafeeder.upload.inputLabel": "Import your file",
95
- "datafeeder.upload.maxFileSize": "Maximum file size is {size} MB",
96
- "datafeeder.upload.title": "Upload your dataset",
97
- "datafeeder.upload.uploadButton": "Upload",
98
- "datafeeder.validation.csv.delimiter": "Delimiter",
99
- "datafeeder.validation.csv.delimiter.comma": "Comma",
100
- "datafeeder.validation.csv.delimiter.semicolon": "Semicolon",
101
- "datafeeder.validation.csv.lat.field": "Latitude column",
102
- "datafeeder.validation.csv.lng.field": "Longitude column",
103
- "datafeeder.validation.csv.quote.double": "Double quote",
104
- "datafeeder.validation.csv.quote.none": "None",
105
- "datafeeder.validation.csv.quote.simple": "Single quote",
106
- "datafeeder.validation.csv.quoteChar": "Quote separator",
107
- "datafeeder.validation.encoding": "Encoding",
108
- "datafeeder.validation.extent.title": "Here is the dataset extent",
109
- "datafeeder.validation.extent.title.unknown": "The projection system is unknown",
110
- "datafeeder.validation.projection": "Spatial reference system:",
111
- "datafeeder.validation.projection.unknown": "Choose a spatial reference system",
112
- "datafeeder.validation.sample.title": "And a sample entity from the dataset",
113
- "datafeeder.wizard.emptyRequiredValuesMessage": "Please fill in mandatory fields",
114
51
  "datafeeder.wizardSummarize.createdAt": "Created at",
115
52
  "datafeeder.wizardSummarize.scale": "Scale",
116
53
  "datahub.header.datasets": "Datasets",
@@ -417,7 +354,7 @@
417
354
  "record.action.rollback": "Rollback",
418
355
  "record.action.view": "View",
419
356
  "record.externalViewer.open": "Open in the external map viewer",
420
- "record.feature.limit": "The resource contains more than {count} features and cannot be displayed here.",
357
+ "record.feature.limit": "Preview disabled due to too many elements",
421
358
  "record.metadata.about": "Description",
422
359
  "record.metadata.api": "API",
423
360
  "record.metadata.api.form.closeButton": "Close",