geonetwork-ui 2.3.0-dev.ff2a9db7 → 2.3.1
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.
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +2 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +9 -7
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +22 -7
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +14 -3
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +14 -2
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +30 -10
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +7 -3
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +14 -7
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +27 -5
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +1 -3
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +4 -4
- package/esm2022/libs/ui/elements/src/index.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +30 -0
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +6 -7
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +6 -6
- package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
- package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -1
- package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
- package/esm2022/translations/de.json +1 -0
- package/esm2022/translations/en.json +1 -0
- package/esm2022/translations/es.json +1 -0
- package/esm2022/translations/fr.json +1 -0
- package/esm2022/translations/it.json +1 -0
- package/esm2022/translations/nl.json +1 -0
- package/esm2022/translations/pt.json +1 -0
- package/fesm2022/geonetwork-ui.mjs +384 -287
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +2 -2
- package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +4 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +2 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +3 -3
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +6 -0
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +2 -2
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +5 -2
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/ui/elements/src/index.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/error/error.component.d.ts +16 -0
- package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -2
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
- package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
- package/libs/util/app-config/src/lib/model.d.ts +1 -0
- package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +9 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +3 -3
- package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +35 -31
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +67 -15
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +71 -13
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -3
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +16 -0
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +15 -1
- package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +6 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +31 -9
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +6 -2
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +15 -8
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +47 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +0 -2
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.html +4 -4
- package/src/libs/ui/elements/src/index.ts +1 -1
- package/src/libs/ui/elements/src/lib/{search-results-error/search-results-error.component.html → error/error.component.html} +18 -3
- package/src/libs/ui/elements/src/lib/{search-results-error/search-results-error.component.ts → error/error.component.ts} +5 -4
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +7 -8
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -4
- package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
- package/src/libs/util/app-config/src/lib/fixtures.ts +1 -0
- package/src/libs/util/app-config/src/lib/model.ts +1 -0
- package/translations/de.json +1 -0
- package/translations/en.json +1 -0
- package/translations/es.json +1 -0
- package/translations/fr.json +1 -0
- package/translations/it.json +1 -0
- package/translations/nl.json +1 -0
- package/translations/pt.json +1 -0
- package/translations/sk.json +1 -0
- package/esm2022/libs/ui/elements/src/lib/search-results-error/search-results-error.component.mjs +0 -29
- package/libs/ui/elements/src/lib/search-results-error/search-results-error.component.d.ts +0 -15
- package/libs/ui/elements/src/lib/search-results-error/search-results-error.component.d.ts.map +0 -1
- /package/src/libs/ui/elements/src/lib/{search-results-error/search-results-error.component.css → error/error.component.css} +0 -0
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core'
|
|
2
2
|
import { select, Store } from '@ngrx/store'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
defaultIfEmpty,
|
|
5
|
+
filter,
|
|
6
|
+
map,
|
|
7
|
+
mergeMap,
|
|
8
|
+
scan,
|
|
9
|
+
switchMap,
|
|
10
|
+
toArray,
|
|
11
|
+
} from 'rxjs/operators'
|
|
4
12
|
import * as MdViewActions from './mdview.actions'
|
|
5
13
|
import * as MdViewSelectors from './mdview.selectors'
|
|
6
14
|
import { LinkClassifierService, LinkUsage } from '../../../../../../libs/util/shared/src'
|
|
@@ -10,6 +18,9 @@ import {
|
|
|
10
18
|
UserFeedback,
|
|
11
19
|
} from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
12
20
|
import { AvatarServiceInterface } from '../../../../../../libs/api/repository/src'
|
|
21
|
+
import { OgcApiRecord } from '@camptocamp/ogc-client'
|
|
22
|
+
import { from, of } from 'rxjs'
|
|
23
|
+
import { DataService } from '../../../../../../libs/feature/dataviz/src'
|
|
13
24
|
|
|
14
25
|
@Injectable()
|
|
15
26
|
/**
|
|
@@ -21,8 +32,9 @@ import { AvatarServiceInterface } from '../../../../../../libs/api/repository/sr
|
|
|
21
32
|
export class MdViewFacade {
|
|
22
33
|
constructor(
|
|
23
34
|
private store: Store,
|
|
24
|
-
|
|
25
|
-
private avatarService: AvatarServiceInterface
|
|
35
|
+
public linkClassifier: LinkClassifierService,
|
|
36
|
+
private avatarService: AvatarServiceInterface,
|
|
37
|
+
public dataService: DataService
|
|
26
38
|
) {}
|
|
27
39
|
|
|
28
40
|
isPresent$ = this.store.pipe(
|
|
@@ -90,6 +102,38 @@ export class MdViewFacade {
|
|
|
90
102
|
)
|
|
91
103
|
)
|
|
92
104
|
|
|
105
|
+
geoDataLinksWithGeometry$ = this.allLinks$.pipe(
|
|
106
|
+
switchMap((links) =>
|
|
107
|
+
from(links).pipe(
|
|
108
|
+
mergeMap((link) => {
|
|
109
|
+
if (this.linkClassifier.hasUsage(link, LinkUsage.GEODATA)) {
|
|
110
|
+
if (
|
|
111
|
+
link.type === 'service' &&
|
|
112
|
+
link.accessServiceProtocol === 'ogcFeatures'
|
|
113
|
+
) {
|
|
114
|
+
return from(
|
|
115
|
+
this.dataService.getItemsFromOgcApi(link.url.href)
|
|
116
|
+
).pipe(
|
|
117
|
+
map((collectionRecords: OgcApiRecord) => {
|
|
118
|
+
return collectionRecords && collectionRecords.geometry
|
|
119
|
+
? link
|
|
120
|
+
: null
|
|
121
|
+
}),
|
|
122
|
+
defaultIfEmpty(null)
|
|
123
|
+
)
|
|
124
|
+
} else {
|
|
125
|
+
return of(link)
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
return of(null)
|
|
129
|
+
}
|
|
130
|
+
}),
|
|
131
|
+
toArray(),
|
|
132
|
+
map((links) => links.filter((link) => link !== null))
|
|
133
|
+
)
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
|
|
93
137
|
landingPageLinks$ = this.metadata$.pipe(
|
|
94
138
|
map((record) => ('landingPage' in record ? [record.landingPage] : []))
|
|
95
139
|
)
|
|
@@ -82,7 +82,6 @@ const metadataViewReducer = createReducer(
|
|
|
82
82
|
*/
|
|
83
83
|
on(MetadataViewActions.loadUserFeedbacks, (state) => ({
|
|
84
84
|
...state,
|
|
85
|
-
error: null,
|
|
86
85
|
allUserFeedbacksLoading: true,
|
|
87
86
|
})),
|
|
88
87
|
on(MetadataViewActions.addUserFeedback, (state) => ({
|
|
@@ -93,7 +92,6 @@ const metadataViewReducer = createReducer(
|
|
|
93
92
|
MetadataViewActions.loadUserFeedbacksSuccess,
|
|
94
93
|
(state, { userFeedbacks }) => ({
|
|
95
94
|
...state,
|
|
96
|
-
error: null,
|
|
97
95
|
userFeedbacks: userFeedbacks,
|
|
98
96
|
addUserFeedbackLoading: false,
|
|
99
97
|
allUserFeedbacksLoading: false,
|
|
@@ -42,16 +42,16 @@
|
|
|
42
42
|
</div>
|
|
43
43
|
|
|
44
44
|
<div class="p-4 max-w-[600px] m-auto text-[13px]">
|
|
45
|
-
<gn-ui-
|
|
45
|
+
<gn-ui-error
|
|
46
46
|
*ngIf="(errorCode$ | async) === 0"
|
|
47
47
|
[type]="errorTypes.COULD_NOT_REACH_API"
|
|
48
48
|
>
|
|
49
|
-
</gn-ui-
|
|
50
|
-
<gn-ui-
|
|
49
|
+
</gn-ui-error>
|
|
50
|
+
<gn-ui-error
|
|
51
51
|
*ngIf="(error$ | async) !== null && (errorCode$ | async) !== 0"
|
|
52
52
|
[type]="errorTypes.RECEIVED_ERROR"
|
|
53
53
|
[error]="errorMessage$ | async"
|
|
54
|
-
></gn-ui-
|
|
54
|
+
></gn-ui-error>
|
|
55
55
|
</div>
|
|
56
56
|
|
|
57
57
|
<ng-template #favoriteToggle let-record>
|
|
@@ -17,7 +17,7 @@ export * from './lib/pagination-buttons/pagination-buttons.component'
|
|
|
17
17
|
export * from './lib/pagination/pagination.component'
|
|
18
18
|
export * from './lib/record-api-form/record-api-form.component'
|
|
19
19
|
export * from './lib/related-record-card/related-record-card.component'
|
|
20
|
-
export * from './lib/
|
|
20
|
+
export * from './lib/error/error.component'
|
|
21
21
|
export * from './lib/thumbnail/thumbnail.component'
|
|
22
22
|
export * from './lib/ui-elements.module'
|
|
23
23
|
export * from './lib/user-preview/user-preview.component'
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
<div
|
|
2
2
|
class="p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg"
|
|
3
3
|
>
|
|
4
|
-
<div
|
|
4
|
+
<div
|
|
5
|
+
*ngIf="type === types.COULD_NOT_REACH_API"
|
|
6
|
+
data-test="could-not-reach-api-error"
|
|
7
|
+
>
|
|
5
8
|
<div class="relative opacity-40">
|
|
6
9
|
<mat-icon class="material-symbols-outlined face">face</mat-icon>
|
|
7
10
|
<mat-icon class="material-symbols-outlined question-mark1"
|
|
@@ -13,14 +16,26 @@
|
|
|
13
16
|
</div>
|
|
14
17
|
<div translate>search.error.couldNotReachApi</div>
|
|
15
18
|
</div>
|
|
16
|
-
<div
|
|
19
|
+
<div
|
|
20
|
+
*ngIf="type === types.DATASET_HAS_NO_LINK"
|
|
21
|
+
data-test="dataset-has-no-link-error"
|
|
22
|
+
>
|
|
23
|
+
<div class="relative opacity-40">
|
|
24
|
+
<mat-icon class="material-symbols-outlined face">computer</mat-icon>
|
|
25
|
+
</div>
|
|
26
|
+
<div translate>search.error.recordHasnolink</div>
|
|
27
|
+
</div>
|
|
28
|
+
<div *ngIf="type === types.RECEIVED_ERROR" data-test="received-error-error">
|
|
17
29
|
<div class="relative opacity-40">
|
|
18
30
|
<mat-icon class="material-symbols-outlined face">mood_bad</mat-icon>
|
|
19
31
|
</div>
|
|
20
32
|
<div translate>search.error.receivedError</div>
|
|
21
33
|
<div *ngIf="error">{{ error }}</div>
|
|
22
34
|
</div>
|
|
23
|
-
<div
|
|
35
|
+
<div
|
|
36
|
+
*ngIf="type === types.RECORD_NOT_FOUND"
|
|
37
|
+
data-test="record-not-found-error"
|
|
38
|
+
>
|
|
24
39
|
<div class="relative opacity-40">
|
|
25
40
|
<mat-icon class="material-symbols-outlined computer">computer</mat-icon>
|
|
26
41
|
<mat-icon class="material-symbols-outlined computer-question-mark"
|
|
@@ -4,15 +4,16 @@ export enum ErrorType {
|
|
|
4
4
|
COULD_NOT_REACH_API,
|
|
5
5
|
RECEIVED_ERROR,
|
|
6
6
|
RECORD_NOT_FOUND,
|
|
7
|
+
DATASET_HAS_NO_LINK,
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
@Component({
|
|
10
|
-
selector: 'gn-ui-
|
|
11
|
-
templateUrl: './
|
|
12
|
-
styleUrls: ['./
|
|
11
|
+
selector: 'gn-ui-error',
|
|
12
|
+
templateUrl: './error.component.html',
|
|
13
|
+
styleUrls: ['./error.component.css'],
|
|
13
14
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
14
15
|
})
|
|
15
|
-
export class
|
|
16
|
+
export class ErrorComponent {
|
|
16
17
|
@Input() type!: ErrorType
|
|
17
18
|
@Input() error?: string
|
|
18
19
|
@Input() recordId?: string
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ServiceProtocol,
|
|
6
6
|
} from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
7
7
|
import { mimeTypeToFormat } from '../../../../../../libs/util/shared/src'
|
|
8
|
-
import { BehaviorSubject, combineLatest, map, switchMap } from 'rxjs'
|
|
8
|
+
import { BehaviorSubject, combineLatest, filter, map, switchMap } from 'rxjs'
|
|
9
9
|
|
|
10
10
|
const DEFAULT_PARAMS = {
|
|
11
11
|
OFFSET: '',
|
|
@@ -54,7 +54,8 @@ export class RecordApiFormComponent {
|
|
|
54
54
|
this.offset$,
|
|
55
55
|
this.limit$,
|
|
56
56
|
this.format$,
|
|
57
|
-
|
|
57
|
+
// only compute the url if the endpoint was created
|
|
58
|
+
this.endpoint$.pipe(filter((endpoint) => !!endpoint)),
|
|
58
59
|
]).pipe(
|
|
59
60
|
switchMap(([offset, limit, format]) =>
|
|
60
61
|
this.generateApiQueryUrl(offset, limit, format)
|
|
@@ -121,11 +122,9 @@ export class RecordApiFormComponent {
|
|
|
121
122
|
this.supportOffset = this.endpoint.supportsStartIndex()
|
|
122
123
|
return this.endpoint.getServiceInfo() as OutputFormats
|
|
123
124
|
} else {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
)) as OutputFormats
|
|
128
|
-
}
|
|
125
|
+
return (await this.endpoint.getCollectionInfo(
|
|
126
|
+
this.firstCollection
|
|
127
|
+
)) as OutputFormats
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
|
|
@@ -136,7 +135,7 @@ export class RecordApiFormComponent {
|
|
|
136
135
|
await (this.endpoint as WfsEndpoint).isReady()
|
|
137
136
|
} else {
|
|
138
137
|
this.endpoint = new OgcApiEndpoint(this.apiBaseUrl)
|
|
139
|
-
this.firstCollection = (await this.endpoint.
|
|
138
|
+
this.firstCollection = (await this.endpoint.allCollections)[0].name
|
|
140
139
|
}
|
|
141
140
|
this.endpoint$.next(this.endpoint)
|
|
142
141
|
}
|
|
@@ -12,13 +12,12 @@ import { ApiCardComponent } from './api-card/api-card.component'
|
|
|
12
12
|
import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
|
|
13
13
|
import { UiLayoutModule } from '../../../../../libs/ui/layout/src'
|
|
14
14
|
import { TranslateModule } from '@ngx-translate/core'
|
|
15
|
-
import { LinkCardComponent } from './link-card/link-card.component'
|
|
16
15
|
import { RelatedRecordCardComponent } from './related-record-card/related-record-card.component'
|
|
17
16
|
import { MetadataContactComponent } from './metadata-contact/metadata-contact.component'
|
|
18
17
|
import { MetadataCatalogComponent } from './metadata-catalog/metadata-catalog.component'
|
|
19
18
|
import { MetadataQualityComponent } from './metadata-quality/metadata-quality.component'
|
|
20
19
|
import { MetadataQualityItemComponent } from './metadata-quality-item/metadata-quality-item.component'
|
|
21
|
-
import {
|
|
20
|
+
import { ErrorComponent } from './error/error.component'
|
|
22
21
|
import { PaginationComponent } from './pagination/pagination.component'
|
|
23
22
|
import { ThumbnailComponent } from './thumbnail/thumbnail.component'
|
|
24
23
|
import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
|
|
@@ -62,7 +61,7 @@ import { TimeSincePipe } from './user-feedback-item/time-since.pipe'
|
|
|
62
61
|
MetadataCatalogComponent,
|
|
63
62
|
MetadataQualityComponent,
|
|
64
63
|
MetadataQualityItemComponent,
|
|
65
|
-
|
|
64
|
+
ErrorComponent,
|
|
66
65
|
PaginationComponent,
|
|
67
66
|
AvatarComponent,
|
|
68
67
|
UserPreviewComponent,
|
|
@@ -84,7 +83,7 @@ import { TimeSincePipe } from './user-feedback-item/time-since.pipe'
|
|
|
84
83
|
MetadataCatalogComponent,
|
|
85
84
|
MetadataQualityComponent,
|
|
86
85
|
MetadataQualityItemComponent,
|
|
87
|
-
|
|
86
|
+
ErrorComponent,
|
|
88
87
|
PaginationComponent,
|
|
89
88
|
ThumbnailComponent,
|
|
90
89
|
AvatarComponent,
|
|
@@ -144,6 +144,7 @@ export function loadAppConfig() {
|
|
|
144
144
|
[],
|
|
145
145
|
[
|
|
146
146
|
'max_zoom',
|
|
147
|
+
'do_not_tile_wms',
|
|
147
148
|
'max_extent',
|
|
148
149
|
'baselayer',
|
|
149
150
|
'do_not_use_default_basemap',
|
|
@@ -158,6 +159,7 @@ export function loadAppConfig() {
|
|
|
158
159
|
? null
|
|
159
160
|
: ({
|
|
160
161
|
MAX_ZOOM: parsedMapSection.max_zoom,
|
|
162
|
+
DO_NOT_TILE_WMS: parsedMapSection.do_not_tile_wms,
|
|
161
163
|
MAX_EXTENT: parsedMapSection.max_extent,
|
|
162
164
|
EXTERNAL_VIEWER_URL_TEMPLATE:
|
|
163
165
|
parsedMapSection.external_viewer_url_template,
|
|
@@ -81,6 +81,7 @@ export const MAP_CONFIG_FIXTURE: MapConfig = {
|
|
|
81
81
|
MAX_ZOOM: 10,
|
|
82
82
|
MAX_EXTENT: [-418263.418776, 5251529.591305, 961272.067714, 6706890.609855],
|
|
83
83
|
DO_NOT_USE_DEFAULT_BASEMAP: false,
|
|
84
|
+
DO_NOT_TILE_WMS: false,
|
|
84
85
|
EXTERNAL_VIEWER_URL_TEMPLATE:
|
|
85
86
|
'https://example.com/myviewer/#/?actions=[{"type":"CATALOG:ADD_LAYERS_FROM_CATALOGS","layers":["${layer_name}"],"sources":[{"url":"${service_url}","type":"${service_type}"}]}]',
|
|
86
87
|
EXTERNAL_VIEWER_OPEN_NEW_TAB: true,
|
|
@@ -20,6 +20,7 @@ export interface LayerConfig {
|
|
|
20
20
|
|
|
21
21
|
export interface MapConfig {
|
|
22
22
|
MAX_ZOOM?: number
|
|
23
|
+
DO_NOT_TILE_WMS: boolean
|
|
23
24
|
MAX_EXTENT?: [number, number, number, number] // Expressed as [minx, miny, maxx, maxy]
|
|
24
25
|
EXTERNAL_VIEWER_URL_TEMPLATE?: string
|
|
25
26
|
EXTERNAL_VIEWER_OPEN_NEW_TAB?: boolean
|
package/translations/de.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
336
336
|
"search.error.receivedError": "Ein Fehler ist aufgetreten",
|
|
337
337
|
"search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "Suche Datensätze ...",
|
|
339
340
|
"search.field.sortBy": "Sortieren nach:",
|
|
340
341
|
"search.filters.clear": "Zurücksetzen",
|
package/translations/en.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "The API could not be reached",
|
|
336
336
|
"search.error.receivedError": "An error was received",
|
|
337
337
|
"search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.",
|
|
338
|
+
"search.error.recordHasnolink": "This record currently has no link yet, please come back later.",
|
|
338
339
|
"search.field.any.placeholder": "Search datasets ...",
|
|
339
340
|
"search.field.sortBy": "Sort by:",
|
|
340
341
|
"search.filters.clear": "Reset",
|
package/translations/es.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "",
|
|
336
336
|
"search.error.receivedError": "",
|
|
337
337
|
"search.error.recordNotFound": "",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "",
|
|
339
340
|
"search.field.sortBy": "",
|
|
340
341
|
"search.filters.clear": "",
|
package/translations/fr.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "Problème de connexion à l'API",
|
|
336
336
|
"search.error.receivedError": "Erreur retournée",
|
|
337
337
|
"search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
|
|
338
|
+
"search.error.recordHasnolink": "Ce dataset n'a pas encore de lien, réessayez plus tard s'il vous plaît.",
|
|
338
339
|
"search.field.any.placeholder": "Rechercher une donnée...",
|
|
339
340
|
"search.field.sortBy": "Trier par :",
|
|
340
341
|
"search.filters.clear": "Réinitialiser",
|
package/translations/it.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "Problema di connessione all'API",
|
|
336
336
|
"search.error.receivedError": "Errore ricevuto",
|
|
337
337
|
"search.error.recordNotFound": "Impossibile trovare questo dato",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "Cerca un dato...",
|
|
339
340
|
"search.field.sortBy": "Ordina per:",
|
|
340
341
|
"search.filters.clear": "Ripristina",
|
package/translations/nl.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "",
|
|
336
336
|
"search.error.receivedError": "",
|
|
337
337
|
"search.error.recordNotFound": "",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "",
|
|
339
340
|
"search.field.sortBy": "",
|
|
340
341
|
"search.filters.clear": "",
|
package/translations/pt.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "",
|
|
336
336
|
"search.error.receivedError": "",
|
|
337
337
|
"search.error.recordNotFound": "",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "",
|
|
339
340
|
"search.field.sortBy": "",
|
|
340
341
|
"search.filters.clear": "",
|
package/translations/sk.json
CHANGED
|
@@ -335,6 +335,7 @@
|
|
|
335
335
|
"search.error.couldNotReachApi": "K rozhraniu API sa nepodarilo pripojiť",
|
|
336
336
|
"search.error.receivedError": "Bola zaznamenaná chyba",
|
|
337
337
|
"search.error.recordNotFound": "Záznam s identifikátorom \"{ id }\" sa nepodarilo nájsť.",
|
|
338
|
+
"search.error.recordHasnolink": "",
|
|
338
339
|
"search.field.any.placeholder": "Hľadať datasety ...",
|
|
339
340
|
"search.field.sortBy": "Zoradiť podľa:",
|
|
340
341
|
"search.filters.clear": "Obnoviť",
|
package/esm2022/libs/ui/elements/src/lib/search-results-error/search-results-error.component.mjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
import * as i2 from "@angular/material/icon";
|
|
5
|
-
import * as i3 from "@ngx-translate/core";
|
|
6
|
-
export var ErrorType;
|
|
7
|
-
(function (ErrorType) {
|
|
8
|
-
ErrorType[ErrorType["COULD_NOT_REACH_API"] = 0] = "COULD_NOT_REACH_API";
|
|
9
|
-
ErrorType[ErrorType["RECEIVED_ERROR"] = 1] = "RECEIVED_ERROR";
|
|
10
|
-
ErrorType[ErrorType["RECORD_NOT_FOUND"] = 2] = "RECORD_NOT_FOUND";
|
|
11
|
-
})(ErrorType || (ErrorType = {}));
|
|
12
|
-
export class SearchResultsErrorComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.types = ErrorType;
|
|
15
|
-
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, decorators: [{
|
|
20
|
-
type: Component,
|
|
21
|
-
args: [{ selector: 'gn-ui-search-results-error', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"] }]
|
|
22
|
-
}], propDecorators: { type: [{
|
|
23
|
-
type: Input
|
|
24
|
-
}], error: [{
|
|
25
|
-
type: Input
|
|
26
|
-
}], recordId: [{
|
|
27
|
-
type: Input
|
|
28
|
-
}] } });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdHMtZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMvbGliL3NlYXJjaC1yZXN1bHRzLWVycm9yL3NlYXJjaC1yZXN1bHRzLWVycm9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9zZWFyY2gtcmVzdWx0cy1lcnJvci9zZWFyY2gtcmVzdWx0cy1lcnJvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTs7Ozs7QUFFekUsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQix1RUFBbUIsQ0FBQTtJQUNuQiw2REFBYyxDQUFBO0lBQ2QsaUVBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBUUQsTUFBTSxPQUFPLDJCQUEyQjtJQU54QztRQVVFLFVBQUssR0FBRyxTQUFTLENBQUE7S0FDbEI7OEdBTFksMkJBQTJCO2tHQUEzQiwyQkFBMkIsa0lDZHhDLDJ5Q0FtQ0E7OzJGRHJCYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmV4cG9ydCBlbnVtIEVycm9yVHlwZSB7XG4gIENPVUxEX05PVF9SRUFDSF9BUEksXG4gIFJFQ0VJVkVEX0VSUk9SLFxuICBSRUNPUkRfTk9UX0ZPVU5ELFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1zZWFyY2gtcmVzdWx0cy1lcnJvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtcmVzdWx0cy1lcnJvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1yZXN1bHRzLWVycm9yLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaFJlc3VsdHNFcnJvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHR5cGUhOiBFcnJvclR5cGVcbiAgQElucHV0KCkgZXJyb3I/OiBzdHJpbmdcbiAgQElucHV0KCkgcmVjb3JkSWQ/OiBzdHJpbmdcbiAgdHlwZXMgPSBFcnJvclR5cGVcbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJwLVsxLjdlbV0gYmctcmVkLTUwIHRleHQtcmVkLTgwMCB0ZXh0LVsxLjVlbV0gdGV4dC1jZW50ZXIgcm91bmRlZC1sZ1wiXG4+XG4gIDxkaXYgKm5nSWY9XCJ0eXBlID09PSB0eXBlcy5DT1VMRF9OT1RfUkVBQ0hfQVBJXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmFjZVwiPmZhY2U8L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBxdWVzdGlvbi1tYXJrMVwiXG4gICAgICAgID5xdWVzdGlvbl9tYXJrPC9tYXQtaWNvblxuICAgICAgPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBxdWVzdGlvbi1tYXJrMlwiXG4gICAgICAgID5xdWVzdGlvbl9tYXJrPC9tYXQtaWNvblxuICAgICAgPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdHJhbnNsYXRlPnNlYXJjaC5lcnJvci5jb3VsZE5vdFJlYWNoQXBpPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gdHlwZXMuUkVDRUlWRURfRVJST1JcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgb3BhY2l0eS00MFwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmYWNlXCI+bW9vZF9iYWQ8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdHJhbnNsYXRlPnNlYXJjaC5lcnJvci5yZWNlaXZlZEVycm9yPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImVycm9yXCI+e3sgZXJyb3IgfX08L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJ0eXBlID09PSB0eXBlcy5SRUNPUkRfTk9UX0ZPVU5EXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG9wYWNpdHktNDBcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY29tcHV0ZXJcIj5jb21wdXRlcjwvbWF0LWljb24+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNvbXB1dGVyLXF1ZXN0aW9uLW1hcmtcIlxuICAgICAgICA+cXVlc3Rpb25fbWFyazwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgaWQ6IHJlY29yZElkIH1cIj5cbiAgICAgIHNlYXJjaC5lcnJvci5yZWNvcmROb3RGb3VuZFxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiPnt7IGVycm9yIH19PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare enum ErrorType {
|
|
3
|
-
COULD_NOT_REACH_API = 0,
|
|
4
|
-
RECEIVED_ERROR = 1,
|
|
5
|
-
RECORD_NOT_FOUND = 2
|
|
6
|
-
}
|
|
7
|
-
export declare class SearchResultsErrorComponent {
|
|
8
|
-
type: ErrorType;
|
|
9
|
-
error?: string;
|
|
10
|
-
recordId?: string;
|
|
11
|
-
types: typeof ErrorType;
|
|
12
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SearchResultsErrorComponent, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SearchResultsErrorComponent, "gn-ui-search-results-error", never, { "type": { "alias": "type"; "required": false; }; "error": { "alias": "error"; "required": false; }; "recordId": { "alias": "recordId"; "required": false; }; }, {}, never, never, false, never>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=search-results-error.component.d.ts.map
|
package/libs/ui/elements/src/lib/search-results-error/search-results-error.component.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-results-error.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/elements/src/lib/search-results-error/search-results-error.component.ts"],"names":[],"mappings":";AAEA,oBAAY,SAAS;IACnB,mBAAmB,IAAA;IACnB,cAAc,IAAA;IACd,gBAAgB,IAAA;CACjB;AAED,qBAMa,2BAA2B;IAC7B,IAAI,EAAG,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,KAAK,mBAAY;yCAJN,2BAA2B;2CAA3B,2BAA2B;CAKvC"}
|