geonetwork-ui 2.6.0-dev.9df114cd4 → 2.6.0-dev.d216c4dea
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/base.converter.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -4
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -10
- package/esm2022/libs/api/repository/src/lib/gn4/gn4.provider.mjs +7 -1
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +2 -3
- package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +5 -5
- package/esm2022/libs/feature/record/src/index.mjs +1 -2
- package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +5 -9
- package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +7 -11
- package/esm2022/libs/feature/record/src/lib/record-meta/record-meta.component.mjs +1 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +8 -5
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +4 -6
- package/esm2022/libs/feature/router/src/lib/default/constants.mjs +3 -1
- package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
- package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +10 -2
- package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +9 -3
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +4 -4
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -15
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -2
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +26 -10
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/index.mjs +2 -1
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +8 -5
- package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +161 -0
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +15 -3
- package/esm2022/libs/ui/map/src/index.mjs +2 -1
- package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +79 -0
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +5 -4
- package/esm2022/libs/util/app-config/src/lib/app-config.mjs +2 -1
- package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -1
- package/esm2022/libs/util/shared/src/index.mjs +2 -1
- package/esm2022/libs/util/shared/src/lib/gn-ui-version.mjs +6 -0
- package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +2 -1
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +13 -6
- package/esm2022/translations/de.json +24 -3
- package/esm2022/translations/en.json +26 -5
- package/esm2022/translations/es.json +24 -3
- package/esm2022/translations/fr.json +24 -3
- package/esm2022/translations/it.json +24 -3
- package/esm2022/translations/nl.json +24 -3
- package/esm2022/translations/pt.json +24 -3
- package/fesm2022/geonetwork-ui.mjs +882 -451
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4.provider.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -2
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +6 -6
- package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
- package/libs/feature/record/src/index.d.ts +0 -1
- package/libs/feature/record/src/index.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +9 -1
- package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +2 -3
- package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +1 -2
- package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/record-meta/record-meta.component.d.ts +2 -2
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +3 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +7 -7
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/router/src/lib/default/constants.d.ts +2 -0
- package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
- package/libs/feature/router/src/lib/default/router.config.d.ts +2 -0
- package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
- package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
- package/libs/feature/router/src/lib/default/state/router.facade.d.ts +5 -0
- package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +5 -3
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
- package/libs/ui/elements/src/index.d.ts +1 -0
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +2 -2
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +30 -0
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +2 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
- package/libs/ui/map/src/index.d.ts +1 -0
- package/libs/ui/map/src/index.d.ts.map +1 -1
- package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts +15 -0
- package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts.map +1 -0
- package/libs/ui/search/src/lib/results-table/results-table.component.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/shared/src/index.d.ts +1 -0
- package/libs/util/shared/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/gn-ui-version.d.ts +3 -0
- package/libs/util/shared/src/lib/gn-ui-version.d.ts.map +1 -0
- package/libs/util/shared/src/lib/links/link-classifier.service.d.ts +3 -3
- package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +14 -7
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/base.converter.ts +1 -4
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +3 -3
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -9
- package/src/libs/api/repository/src/lib/gn4/gn4.provider.ts +6 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +2 -2
- package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +26 -26
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +2 -2
- package/src/libs/common/fixtures/src/lib/record-link.fixtures.ts +5 -5
- package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +1 -2
- package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +2 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +2 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -2
- package/src/libs/feature/record/src/index.ts +0 -1
- package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +2 -3
- package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +4 -5
- package/src/libs/feature/record/src/lib/record-meta/record-meta.component.ts +2 -2
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +5 -3
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +4 -7
- package/src/libs/feature/router/src/lib/default/constants.ts +2 -0
- package/src/libs/feature/router/src/lib/default/router.config.ts +2 -0
- package/src/libs/feature/router/src/lib/default/router.service.ts +10 -0
- package/src/libs/feature/router/src/lib/default/state/router.facade.ts +10 -1
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -2
- package/src/libs/feature/search/src/lib/feature-search.module.ts +0 -8
- package/src/libs/feature/search/src/lib/record-url.token.ts +10 -1
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.html +1 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +24 -5
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
- package/src/libs/ui/elements/src/index.ts +1 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +2 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +9 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +13 -4
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +12 -4
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +96 -0
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +183 -0
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -7
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -0
- package/src/libs/ui/map/src/index.ts +1 -0
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.css +0 -0
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.html +4 -0
- package/src/libs/{feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts → ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts} +7 -8
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +7 -4
- package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +2 -1
- package/src/libs/util/app-config/src/lib/app-config.ts +1 -0
- package/src/libs/util/app-config/src/lib/fixtures.ts +1 -0
- package/src/libs/util/shared/src/index.ts +1 -0
- package/src/libs/util/shared/src/lib/gn-ui-version.ts +8 -0
- package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +12 -3
- package/src/libs/util/shared/src/lib/links/link-utils.ts +30 -12
- package/tailwind.base.css +3 -3
- package/translations/de.json +24 -3
- package/translations/en.json +26 -5
- package/translations/es.json +24 -3
- package/translations/fr.json +24 -3
- package/translations/it.json +24 -3
- package/translations/nl.json +24 -3
- package/translations/pt.json +24 -3
- package/translations/sk.json +24 -3
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +0 -79
- package/esm2022/libs/feature/record/src/lib/gn-ui-version.token.mjs +0 -3
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +0 -15
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +0 -1
- package/libs/feature/record/src/lib/gn-ui-version.token.d.ts +0 -3
- package/libs/feature/record/src/lib/gn-ui-version.token.d.ts.map +0 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +0 -1
- package/src/libs/feature/record/src/lib/gn-ui-version.token.ts +0 -3
- /package/src/libs/{feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.css → ui/elements/src/lib/service-capabilities/service-capabilities.component.css} +0 -0
|
@@ -7,17 +7,17 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
|
7
7
|
import { format } from 'date-fns/format';
|
|
8
8
|
import { Namespace, Literal, lit, parse as parse$2, sym, BlankNode, graph } from 'rdflib';
|
|
9
9
|
import * as i0 from '@angular/core';
|
|
10
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Directive, Input, HostListener, HostBinding, Component, EventEmitter, ChangeDetectionStrategy, ViewChild, Output, ContentChild, ContentChildren, TemplateRef, Host, ElementRef, ViewChildren, ViewContainerRef,
|
|
10
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Directive, Input, HostListener, HostBinding, Component, EventEmitter, ChangeDetectionStrategy, ViewChild, Output, ContentChild, ContentChildren, TemplateRef, Host, ElementRef, ViewChildren, ViewContainerRef, ViewEncapsulation, Pipe, inject } from '@angular/core';
|
|
11
11
|
import * as i1 from '@angular/common/http';
|
|
12
12
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpEventType, HttpClientXsrfModule } from '@angular/common/http';
|
|
13
13
|
import * as i1$1 from '@ngx-translate/core';
|
|
14
14
|
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
15
15
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
16
16
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
17
|
-
import { map as map$1, catchError, tap as tap$1, shareReplay, filter, startWith, withLatestFrom, switchMap as switchMap$1, take, mergeMap, throttleTime, distinctUntilChanged, debounceTime, finalize, first as first$1, share, pairwise,
|
|
17
|
+
import { map as map$1, catchError, tap as tap$1, shareReplay, filter, startWith, withLatestFrom, switchMap as switchMap$1, take, mergeMap, throttleTime, distinctUntilChanged, debounceTime, finalize, delay, first as first$1, share, pairwise, defaultIfEmpty, toArray } from 'rxjs/operators';
|
|
18
18
|
import * as i1$2 from '@angular/common';
|
|
19
|
-
import { CommonModule, NgSwitch, NgSwitchCase, NgSwitchDefault,
|
|
20
|
-
import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, animationFrameScheduler, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, filter as filter$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1,
|
|
19
|
+
import { CommonModule, NgSwitch, NgSwitchCase, NgSwitchDefault, NgIf, NgClass, NgTemplateOutlet, NgOptimizedImage, DatePipe } from '@angular/common';
|
|
20
|
+
import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, animationFrameScheduler, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, timer, filter as filter$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, mergeMap as mergeMap$1, startWith as startWith$1, withLatestFrom as withLatestFrom$1, shareReplay as shareReplay$1, pairwise as pairwise$1 } from 'rxjs';
|
|
21
21
|
import { lt, valid, coerce, satisfies, ltr } from 'semver';
|
|
22
22
|
import chroma from 'chroma-js';
|
|
23
23
|
import { WmtsEndpoint, WmsEndpoint, WfsEndpoint, OgcApiEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
@@ -41,7 +41,7 @@ import { TagInputModule } from 'ngx-chips';
|
|
|
41
41
|
import * as i1$5 from '@angular/material/progress-spinner';
|
|
42
42
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
43
43
|
import tippy from 'tippy.js';
|
|
44
|
-
import { matErrorOutlineOutline, matInfoOutline, matComputerOutline, matCallOutline, matLocationOnOutline, matMailOutline as matMailOutline$1, matWarningAmberOutline, matCloseOutline, matLocationSearchingOutline, matEmailOutline, matPhoneOutline, matSendOutline, matMapOutline, matCloudDownloadOutline, matHomeWorkOutline,
|
|
44
|
+
import { matErrorOutlineOutline, matInfoOutline, matComputerOutline, matCallOutline, matLocationOnOutline, matSwipeOutline, matMailOutline as matMailOutline$1, matWarningAmberOutline, matCloseOutline, matLocationSearchingOutline, matEmailOutline, matPhoneOutline, matSendOutline, matMapOutline, matCloudDownloadOutline, matHomeWorkOutline, matLayersOutline, matAddCircleOutlineOutline } from '@ng-icons/material-icons/outline';
|
|
45
45
|
import * as i2 from '@angular/material/core';
|
|
46
46
|
import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
47
47
|
import * as i1$7 from '@angular/material/checkbox';
|
|
@@ -58,11 +58,17 @@ import * as i1$b from '@angular/material/dialog';
|
|
|
58
58
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
59
59
|
import * as i2$3 from '@angular/material/tabs';
|
|
60
60
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
61
|
-
import * as i1$
|
|
61
|
+
import * as i1$d from '@angular/router';
|
|
62
62
|
import { RouterLink, RouterModule, RouteReuseStrategy } from '@angular/router';
|
|
63
63
|
import { marked } from 'marked';
|
|
64
64
|
import Duration from 'duration-relativetimeformat';
|
|
65
65
|
import * as basicLightbox from 'basiclightbox';
|
|
66
|
+
import { FeaturesClickEventType, FeaturesHoverEventType, MapClickEventType, SourceLoadErrorType, computeMapContextDiff, createViewFromLayer } from '@geospatial-sdk/core';
|
|
67
|
+
import { listen, createMapFromContext, applyContextDiffToMap } from '@geospatial-sdk/openlayers';
|
|
68
|
+
import { createLegendFromLayer } from '@geospatial-sdk/legend';
|
|
69
|
+
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
70
|
+
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
71
|
+
import { Polygon } from 'ol/geom';
|
|
66
72
|
import { formatDistance } from 'date-fns/formatDistance';
|
|
67
73
|
import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
|
|
68
74
|
import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
|
|
@@ -72,11 +78,6 @@ import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
|
72
78
|
import { valid as valid$1 } from 'geojson-validation';
|
|
73
79
|
import { trigger, transition, animate, keyframes, style } from '@angular/animations';
|
|
74
80
|
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
75
|
-
import { FeaturesClickEventType, FeaturesHoverEventType, MapClickEventType, SourceLoadErrorType, computeMapContextDiff, createViewFromLayer } from '@geospatial-sdk/core';
|
|
76
|
-
import { listen, createMapFromContext, applyContextDiffToMap } from '@geospatial-sdk/openlayers';
|
|
77
|
-
import { createLegendFromLayer } from '@geospatial-sdk/legend';
|
|
78
|
-
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
79
|
-
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
80
81
|
import { extend } from 'ol/extent';
|
|
81
82
|
import * as TOML from '@ltd/j-toml';
|
|
82
83
|
import { Style, Fill, Stroke, Circle } from 'ol/style';
|
|
@@ -96,9 +97,8 @@ import * as i4 from '@angular/material/paginator';
|
|
|
96
97
|
import { MatPaginatorIntl, MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
97
98
|
import { LetDirective } from '@ngrx/component';
|
|
98
99
|
import axios from 'axios';
|
|
99
|
-
import * as i1$
|
|
100
|
+
import * as i1$e from '@angular/platform-browser';
|
|
100
101
|
import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
|
|
101
|
-
import { Polygon } from 'ol/geom';
|
|
102
102
|
import * as i4$1 from '@angular/material/radio';
|
|
103
103
|
import { MatRadioModule } from '@angular/material/radio';
|
|
104
104
|
import { MatIconModule } from '@angular/material/icon';
|
|
@@ -1351,8 +1351,8 @@ function extractServiceOnlineResources() {
|
|
|
1351
1351
|
else {
|
|
1352
1352
|
return {
|
|
1353
1353
|
type: 'endpoint',
|
|
1354
|
-
|
|
1355
|
-
protocol,
|
|
1354
|
+
url: url,
|
|
1355
|
+
accessServiceProtocol: protocol,
|
|
1356
1356
|
...(description && { description }),
|
|
1357
1357
|
translations,
|
|
1358
1358
|
};
|
|
@@ -1851,7 +1851,7 @@ function writeLineage$1(record, rootEl) {
|
|
|
1851
1851
|
pipe(findNestedChildOrCreate('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage', 'gmd:statement'), writeLocalizedCharacterString(record.lineage, record.translations?.lineage, record.defaultLanguage))(rootEl);
|
|
1852
1852
|
}
|
|
1853
1853
|
function getServiceEndpointProtocol(endpoint) {
|
|
1854
|
-
switch (endpoint.
|
|
1854
|
+
switch (endpoint.accessServiceProtocol.toLowerCase()) {
|
|
1855
1855
|
case 'wfs':
|
|
1856
1856
|
return 'OGC:WFS';
|
|
1857
1857
|
case 'wms':
|
|
@@ -1859,13 +1859,13 @@ function getServiceEndpointProtocol(endpoint) {
|
|
|
1859
1859
|
case 'wps':
|
|
1860
1860
|
return 'OGC:WPS';
|
|
1861
1861
|
default:
|
|
1862
|
-
return endpoint.
|
|
1862
|
+
return endpoint.accessServiceProtocol;
|
|
1863
1863
|
}
|
|
1864
1864
|
}
|
|
1865
1865
|
function createOnlineResource(onlineResource) {
|
|
1866
1866
|
let linkageUrl, functionCode, protocol;
|
|
1867
1867
|
if (onlineResource.type === 'endpoint') {
|
|
1868
|
-
linkageUrl = onlineResource.
|
|
1868
|
+
linkageUrl = onlineResource.url.toString();
|
|
1869
1869
|
protocol = getServiceEndpointProtocol(onlineResource);
|
|
1870
1870
|
functionCode = 'download';
|
|
1871
1871
|
}
|
|
@@ -18834,6 +18834,7 @@ var de = {
|
|
|
18834
18834
|
"editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
|
|
18835
18835
|
"editor.record.loadError.closeMessage": "Verstanden",
|
|
18836
18836
|
"editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
|
|
18837
|
+
"editor.record.lock.format": "",
|
|
18837
18838
|
"editor.record.lock.reason": "",
|
|
18838
18839
|
"editor.record.onlineResource.protocol.other": "",
|
|
18839
18840
|
"editor.record.onlineResourceError.body": "",
|
|
@@ -18893,7 +18894,6 @@ var de = {
|
|
|
18893
18894
|
"input.image.dropFileLabel": "",
|
|
18894
18895
|
"input.image.selectFileLabel": "",
|
|
18895
18896
|
"input.image.uploadErrorLabel": "",
|
|
18896
|
-
"input.image.uploadErrorRetry": "",
|
|
18897
18897
|
"input.image.uploadProgressCancel": "",
|
|
18898
18898
|
"input.image.uploadProgressLabel": "",
|
|
18899
18899
|
"language.ca": "Katalanisch",
|
|
@@ -18960,6 +18960,7 @@ var de = {
|
|
|
18960
18960
|
"record.card.metadata.contact": "",
|
|
18961
18961
|
"record.externalViewer.open": "In externem Kartenviewer öffnen",
|
|
18962
18962
|
"record.feature.limit": "Die Vorschau wurde aufgrund zu vieler Elemente deaktiviert",
|
|
18963
|
+
"record.kind.data": "",
|
|
18963
18964
|
"record.kind.dataset": "",
|
|
18964
18965
|
"record.kind.reuse": "",
|
|
18965
18966
|
"record.kind.service": "",
|
|
@@ -19033,13 +19034,12 @@ var de = {
|
|
|
19033
19034
|
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
19034
19035
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
19035
19036
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
19036
|
-
"record.metadata.related.contents": "
|
|
19037
|
+
"record.metadata.related.contents": "",
|
|
19037
19038
|
"record.metadata.ressources.and.links": "Ressourcen und Links",
|
|
19038
19039
|
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
19039
19040
|
"record.metadata.status": "Status",
|
|
19040
19041
|
"record.metadata.status.notPublished": "",
|
|
19041
19042
|
"record.metadata.status.published": "",
|
|
19042
|
-
"record.metadata.technical": "Technische Informationen",
|
|
19043
19043
|
"record.metadata.temporalExtent": "Zeitlicher Umfang",
|
|
19044
19044
|
"record.metadata.temporalExtent.fromDateToDate": "Von {start} bis {end}",
|
|
19045
19045
|
"record.metadata.temporalExtent.sinceDate": "Seit {start}",
|
|
@@ -19076,6 +19076,7 @@ var de = {
|
|
|
19076
19076
|
"results.sortBy.popularity": "Beliebtheit",
|
|
19077
19077
|
"results.sortBy.qualityScore": "Qualitätsbewertung",
|
|
19078
19078
|
"results.sortBy.relevancy": "Relevanz",
|
|
19079
|
+
"reuse.metadata.access": "",
|
|
19079
19080
|
"search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
|
|
19080
19081
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
19081
19082
|
"search.error.organizationHasNoDataset": "",
|
|
@@ -19125,6 +19126,26 @@ var de = {
|
|
|
19125
19126
|
"search.filters.useSpatialFilter": "Zuerst Datensätze im Interessenbereich anzeigen",
|
|
19126
19127
|
"search.filters.useSpatialFilterHelp": "Wenn diese Option aktiviert ist, werden Datensätze im Bereich des Katalogs zuerst angezeigt. Datensätze außerhalb dieses Bereichs werden nicht angezeigt.",
|
|
19127
19128
|
"search.filters.user": "Editor",
|
|
19129
|
+
"service.metadata.capabilities": "",
|
|
19130
|
+
"service.metadata.capabilities.abstract": "",
|
|
19131
|
+
"service.metadata.capabilities.attribution": "",
|
|
19132
|
+
"service.metadata.capabilities.availableCrs": "",
|
|
19133
|
+
"service.metadata.capabilities.defaultCrs": "",
|
|
19134
|
+
"service.metadata.capabilities.geometryName": "",
|
|
19135
|
+
"service.metadata.capabilities.geometryType": "",
|
|
19136
|
+
"service.metadata.capabilities.keywords": "",
|
|
19137
|
+
"service.metadata.capabilities.name": "",
|
|
19138
|
+
"service.metadata.capabilities.objectCount": "",
|
|
19139
|
+
"service.metadata.capabilities.otherCrs": "",
|
|
19140
|
+
"service.metadata.capabilities.outputFormats": "",
|
|
19141
|
+
"service.metadata.capabilities.resourceLinks": "",
|
|
19142
|
+
"service.metadata.capabilities.title": "",
|
|
19143
|
+
"service.metadata.filter": "",
|
|
19144
|
+
"service.metadata.filter.noLayers": "",
|
|
19145
|
+
"service.metadata.other": "",
|
|
19146
|
+
"service.metadata.question": "",
|
|
19147
|
+
"service.metadata.search": "",
|
|
19148
|
+
"service.metadata.spatialExtent": "",
|
|
19128
19149
|
"share.tab.permalink": "Teilen",
|
|
19129
19150
|
"share.tab.webComponent": "Integrieren",
|
|
19130
19151
|
"table.loading.data": "Daten werden geladen...",
|
|
@@ -19389,6 +19410,7 @@ var en = {
|
|
|
19389
19410
|
"editor.record.loadError.body": "The dataset could not be loaded:",
|
|
19390
19411
|
"editor.record.loadError.closeMessage": "Understood",
|
|
19391
19412
|
"editor.record.loadError.title": "Error loading dataset",
|
|
19413
|
+
"editor.record.lock.format": "Record with the format 'service' or 'reuse' are not editable",
|
|
19392
19414
|
"editor.record.lock.reason": "You are not an editor of the allowed groups",
|
|
19393
19415
|
"editor.record.onlineResource.protocol.other": "Other",
|
|
19394
19416
|
"editor.record.onlineResourceError.body": "An error happened while adding the resource:",
|
|
@@ -19448,7 +19470,6 @@ var en = {
|
|
|
19448
19470
|
"input.image.dropFileLabel": "or drop it here",
|
|
19449
19471
|
"input.image.selectFileLabel": "Select an image",
|
|
19450
19472
|
"input.image.uploadErrorLabel": "The image could not be uploaded",
|
|
19451
|
-
"input.image.uploadErrorRetry": "Retry",
|
|
19452
19473
|
"input.image.uploadProgressCancel": "Cancel",
|
|
19453
19474
|
"input.image.uploadProgressLabel": "Upload in progress...",
|
|
19454
19475
|
"language.ca": "Catalan",
|
|
@@ -19515,7 +19536,8 @@ var en = {
|
|
|
19515
19536
|
"record.card.metadata.contact": "Metadata Contact",
|
|
19516
19537
|
"record.externalViewer.open": "Open in the external map viewer",
|
|
19517
19538
|
"record.feature.limit": "Preview disabled due to too many elements",
|
|
19518
|
-
"record.kind.
|
|
19539
|
+
"record.kind.data": "Data",
|
|
19540
|
+
"record.kind.dataset": "Dataset",
|
|
19519
19541
|
"record.kind.reuse": "Reuse",
|
|
19520
19542
|
"record.kind.service": "Service",
|
|
19521
19543
|
"record.metadata.about": "Description",
|
|
@@ -19551,7 +19573,7 @@ var en = {
|
|
|
19551
19573
|
"record.metadata.api.form.zoneTitle": "Zone",
|
|
19552
19574
|
"record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
|
|
19553
19575
|
"record.metadata.api.gpfdl": "Data download",
|
|
19554
|
-
"record.metadata.capabilities": "",
|
|
19576
|
+
"record.metadata.capabilities": "Service capabilities",
|
|
19555
19577
|
"record.metadata.catalog": "Catalog",
|
|
19556
19578
|
"record.metadata.contact": "Contact",
|
|
19557
19579
|
"record.metadata.creation": "Date of creation",
|
|
@@ -19588,13 +19610,12 @@ var en = {
|
|
|
19588
19610
|
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
19589
19611
|
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
19590
19612
|
"record.metadata.related": "Related datasets",
|
|
19591
|
-
"record.metadata.related.contents": "Related
|
|
19613
|
+
"record.metadata.related.contents": "Related content",
|
|
19592
19614
|
"record.metadata.ressources.and.links": "Resources and links",
|
|
19593
19615
|
"record.metadata.sheet": "Original metadata",
|
|
19594
19616
|
"record.metadata.status": "Status",
|
|
19595
19617
|
"record.metadata.status.notPublished": "Not published",
|
|
19596
19618
|
"record.metadata.status.published": "Published",
|
|
19597
|
-
"record.metadata.technical": "Technical information",
|
|
19598
19619
|
"record.metadata.temporalExtent": "Temporal extent",
|
|
19599
19620
|
"record.metadata.temporalExtent.fromDateToDate": "From { start } to { end }",
|
|
19600
19621
|
"record.metadata.temporalExtent.sinceDate": "Since { start }",
|
|
@@ -19631,6 +19652,7 @@ var en = {
|
|
|
19631
19652
|
"results.sortBy.popularity": "Popularity",
|
|
19632
19653
|
"results.sortBy.qualityScore": "Quality score",
|
|
19633
19654
|
"results.sortBy.relevancy": "Relevancy",
|
|
19655
|
+
"reuse.metadata.access": "Access the reuse",
|
|
19634
19656
|
"search.autocomplete.error": "Suggestions could not be fetched:",
|
|
19635
19657
|
"search.error.couldNotReachApi": "The API could not be reached",
|
|
19636
19658
|
"search.error.organizationHasNoDataset": "This organization has no dataset yet.",
|
|
@@ -19680,6 +19702,26 @@ var en = {
|
|
|
19680
19702
|
"search.filters.useSpatialFilter": "Show datasets in the area of interest first",
|
|
19681
19703
|
"search.filters.useSpatialFilterHelp": "When this is enabled, datasets situated in the catalog's area of interest are shown first; records outside of this area will not show up.",
|
|
19682
19704
|
"search.filters.user": "Editor",
|
|
19705
|
+
"service.metadata.capabilities": "Technical information",
|
|
19706
|
+
"service.metadata.capabilities.abstract": "Abstract",
|
|
19707
|
+
"service.metadata.capabilities.attribution": "Attribution",
|
|
19708
|
+
"service.metadata.capabilities.availableCrs": "Available CRS",
|
|
19709
|
+
"service.metadata.capabilities.defaultCrs": "Default CRS",
|
|
19710
|
+
"service.metadata.capabilities.geometryName": "Geometry name",
|
|
19711
|
+
"service.metadata.capabilities.geometryType": "Geometry type",
|
|
19712
|
+
"service.metadata.capabilities.keywords": "Keywords",
|
|
19713
|
+
"service.metadata.capabilities.name": "Name",
|
|
19714
|
+
"service.metadata.capabilities.objectCount": "Object count",
|
|
19715
|
+
"service.metadata.capabilities.otherCrs": "Other CRS",
|
|
19716
|
+
"service.metadata.capabilities.outputFormats": "Output formats",
|
|
19717
|
+
"service.metadata.capabilities.resourceLinks": "Resource links",
|
|
19718
|
+
"service.metadata.capabilities.title": "Title",
|
|
19719
|
+
"service.metadata.filter": "Layers will be filtered by title and abstract",
|
|
19720
|
+
"service.metadata.filter.noLayers": "No layer matches your search",
|
|
19721
|
+
"service.metadata.other": "Other information",
|
|
19722
|
+
"service.metadata.question": "Ask a question",
|
|
19723
|
+
"service.metadata.search": "Search through the layer list",
|
|
19724
|
+
"service.metadata.spatialExtent": "Spatial extent",
|
|
19683
19725
|
"share.tab.permalink": "Share",
|
|
19684
19726
|
"share.tab.webComponent": "Integrate",
|
|
19685
19727
|
"table.loading.data": "Loading data...",
|
|
@@ -19944,6 +19986,7 @@ var es = {
|
|
|
19944
19986
|
"editor.record.loadError.body": "",
|
|
19945
19987
|
"editor.record.loadError.closeMessage": "",
|
|
19946
19988
|
"editor.record.loadError.title": "",
|
|
19989
|
+
"editor.record.lock.format": "",
|
|
19947
19990
|
"editor.record.lock.reason": "",
|
|
19948
19991
|
"editor.record.onlineResource.protocol.other": "",
|
|
19949
19992
|
"editor.record.onlineResourceError.body": "",
|
|
@@ -20003,7 +20046,6 @@ var es = {
|
|
|
20003
20046
|
"input.image.dropFileLabel": "",
|
|
20004
20047
|
"input.image.selectFileLabel": "",
|
|
20005
20048
|
"input.image.uploadErrorLabel": "",
|
|
20006
|
-
"input.image.uploadErrorRetry": "",
|
|
20007
20049
|
"input.image.uploadProgressCancel": "",
|
|
20008
20050
|
"input.image.uploadProgressLabel": "",
|
|
20009
20051
|
"language.ca": "Catalán",
|
|
@@ -20070,6 +20112,7 @@ var es = {
|
|
|
20070
20112
|
"record.card.metadata.contact": "",
|
|
20071
20113
|
"record.externalViewer.open": "",
|
|
20072
20114
|
"record.feature.limit": "",
|
|
20115
|
+
"record.kind.data": "",
|
|
20073
20116
|
"record.kind.dataset": "",
|
|
20074
20117
|
"record.kind.reuse": "",
|
|
20075
20118
|
"record.kind.service": "",
|
|
@@ -20143,13 +20186,12 @@ var es = {
|
|
|
20143
20186
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
20144
20187
|
"record.metadata.quality.updateFrequency.success": "",
|
|
20145
20188
|
"record.metadata.related": "",
|
|
20146
|
-
"record.metadata.related.contents": "
|
|
20189
|
+
"record.metadata.related.contents": "",
|
|
20147
20190
|
"record.metadata.ressources.and.links": "Recursos y enlaces",
|
|
20148
20191
|
"record.metadata.sheet": "",
|
|
20149
20192
|
"record.metadata.status": "",
|
|
20150
20193
|
"record.metadata.status.notPublished": "",
|
|
20151
20194
|
"record.metadata.status.published": "",
|
|
20152
|
-
"record.metadata.technical": "",
|
|
20153
20195
|
"record.metadata.temporalExtent": "",
|
|
20154
20196
|
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
20155
20197
|
"record.metadata.temporalExtent.sinceDate": "",
|
|
@@ -20186,6 +20228,7 @@ var es = {
|
|
|
20186
20228
|
"results.sortBy.popularity": "",
|
|
20187
20229
|
"results.sortBy.qualityScore": "",
|
|
20188
20230
|
"results.sortBy.relevancy": "",
|
|
20231
|
+
"reuse.metadata.access": "",
|
|
20189
20232
|
"search.autocomplete.error": "",
|
|
20190
20233
|
"search.error.couldNotReachApi": "",
|
|
20191
20234
|
"search.error.organizationHasNoDataset": "",
|
|
@@ -20235,6 +20278,26 @@ var es = {
|
|
|
20235
20278
|
"search.filters.useSpatialFilter": "",
|
|
20236
20279
|
"search.filters.useSpatialFilterHelp": "",
|
|
20237
20280
|
"search.filters.user": "",
|
|
20281
|
+
"service.metadata.capabilities": "",
|
|
20282
|
+
"service.metadata.capabilities.abstract": "",
|
|
20283
|
+
"service.metadata.capabilities.attribution": "",
|
|
20284
|
+
"service.metadata.capabilities.availableCrs": "",
|
|
20285
|
+
"service.metadata.capabilities.defaultCrs": "",
|
|
20286
|
+
"service.metadata.capabilities.geometryName": "",
|
|
20287
|
+
"service.metadata.capabilities.geometryType": "",
|
|
20288
|
+
"service.metadata.capabilities.keywords": "",
|
|
20289
|
+
"service.metadata.capabilities.name": "",
|
|
20290
|
+
"service.metadata.capabilities.objectCount": "",
|
|
20291
|
+
"service.metadata.capabilities.otherCrs": "",
|
|
20292
|
+
"service.metadata.capabilities.outputFormats": "",
|
|
20293
|
+
"service.metadata.capabilities.resourceLinks": "",
|
|
20294
|
+
"service.metadata.capabilities.title": "",
|
|
20295
|
+
"service.metadata.filter": "",
|
|
20296
|
+
"service.metadata.filter.noLayers": "",
|
|
20297
|
+
"service.metadata.other": "",
|
|
20298
|
+
"service.metadata.question": "",
|
|
20299
|
+
"service.metadata.search": "",
|
|
20300
|
+
"service.metadata.spatialExtent": "",
|
|
20238
20301
|
"share.tab.permalink": "",
|
|
20239
20302
|
"share.tab.webComponent": "",
|
|
20240
20303
|
"table.loading.data": "",
|
|
@@ -20499,6 +20562,7 @@ var fr = {
|
|
|
20499
20562
|
"editor.record.loadError.body": "Le jeu de données n'a pas pu être chargé :",
|
|
20500
20563
|
"editor.record.loadError.closeMessage": "Compris",
|
|
20501
20564
|
"editor.record.loadError.title": "Erreur lors du chargement",
|
|
20565
|
+
"editor.record.lock.format": "Les jeux de données de type 'service' et 'reuse' ne sont pas éditables",
|
|
20502
20566
|
"editor.record.lock.reason": "Vous n'êtes pas éditeur d'un des groupes autorisés.",
|
|
20503
20567
|
"editor.record.onlineResource.protocol.other": "Autre",
|
|
20504
20568
|
"editor.record.onlineResourceError.body": "Une erreur est survenue lors de l'ajout de la ressource :",
|
|
@@ -20558,7 +20622,6 @@ var fr = {
|
|
|
20558
20622
|
"input.image.dropFileLabel": "ou glissez-la ici",
|
|
20559
20623
|
"input.image.selectFileLabel": "Sélectionnez une image",
|
|
20560
20624
|
"input.image.uploadErrorLabel": "L'image n'a pas pu être chargée",
|
|
20561
|
-
"input.image.uploadErrorRetry": "Réessayer",
|
|
20562
20625
|
"input.image.uploadProgressCancel": "Annuler",
|
|
20563
20626
|
"input.image.uploadProgressLabel": "Chargement en cours...",
|
|
20564
20627
|
"language.ca": "Catalan",
|
|
@@ -20625,6 +20688,7 @@ var fr = {
|
|
|
20625
20688
|
"record.card.metadata.contact": "Contact de la métadonnée ",
|
|
20626
20689
|
"record.externalViewer.open": "Ouvrir dans le visualiseur externe",
|
|
20627
20690
|
"record.feature.limit": "L’aperçu a été désactivé en raison d’un trop grand nombre d'éléments",
|
|
20691
|
+
"record.kind.data": "Donnée",
|
|
20628
20692
|
"record.kind.dataset": "Donnée",
|
|
20629
20693
|
"record.kind.reuse": "Réutilisation",
|
|
20630
20694
|
"record.kind.service": "Service",
|
|
@@ -20698,13 +20762,12 @@ var fr = {
|
|
|
20698
20762
|
"record.metadata.quality.updateFrequency.failed": "La fréquence de mise à jour n'est pas renseignée",
|
|
20699
20763
|
"record.metadata.quality.updateFrequency.success": "La fréquence de mise à jour est renseignée",
|
|
20700
20764
|
"record.metadata.related": "Voir aussi",
|
|
20701
|
-
"record.metadata.related.contents": "
|
|
20765
|
+
"record.metadata.related.contents": "Contenu associé",
|
|
20702
20766
|
"record.metadata.ressources.and.links": "Ressources et liens",
|
|
20703
20767
|
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
20704
20768
|
"record.metadata.status": "Statut",
|
|
20705
20769
|
"record.metadata.status.notPublished": "Non publié",
|
|
20706
20770
|
"record.metadata.status.published": "Publié",
|
|
20707
|
-
"record.metadata.technical": "Informations techniques",
|
|
20708
20771
|
"record.metadata.temporalExtent": "Étendue temporelle",
|
|
20709
20772
|
"record.metadata.temporalExtent.fromDateToDate": "Du { start } au { end }",
|
|
20710
20773
|
"record.metadata.temporalExtent.sinceDate": "Depuis le { start }",
|
|
@@ -20741,6 +20804,7 @@ var fr = {
|
|
|
20741
20804
|
"results.sortBy.popularity": "Popularité",
|
|
20742
20805
|
"results.sortBy.qualityScore": "Indicateur de qualité",
|
|
20743
20806
|
"results.sortBy.relevancy": "Pertinence",
|
|
20807
|
+
"reuse.metadata.access": "Accéder à la réutilisation",
|
|
20744
20808
|
"search.autocomplete.error": "Les suggestions ne peuvent pas être récupérées",
|
|
20745
20809
|
"search.error.couldNotReachApi": "Problème de connexion à l'API",
|
|
20746
20810
|
"search.error.organizationHasNoDataset": "Cette organisation n'a pas encore de données.",
|
|
@@ -20790,6 +20854,26 @@ var fr = {
|
|
|
20790
20854
|
"search.filters.useSpatialFilter": "Mettre en avant les résultats sur la zone d'intérêt",
|
|
20791
20855
|
"search.filters.useSpatialFilterHelp": "Si cette option est activée, les jeux de données portant sur la zone d'intérêt du catalogue seront montrés en premier; les jeux de données situés en dehors de cette zone n'apparaîtront pas dans les résultats.",
|
|
20792
20856
|
"search.filters.user": "Éditeur",
|
|
20857
|
+
"service.metadata.capabilities": "Informations techniques",
|
|
20858
|
+
"service.metadata.capabilities.abstract": "Description",
|
|
20859
|
+
"service.metadata.capabilities.attribution": "Attribution",
|
|
20860
|
+
"service.metadata.capabilities.availableCrs": "CRS disponibles",
|
|
20861
|
+
"service.metadata.capabilities.defaultCrs": "CRS par défaut",
|
|
20862
|
+
"service.metadata.capabilities.geometryName": "Nom de la géométrie",
|
|
20863
|
+
"service.metadata.capabilities.geometryType": "Type de géométrie",
|
|
20864
|
+
"service.metadata.capabilities.keywords": "Mots-clés",
|
|
20865
|
+
"service.metadata.capabilities.name": "Nom",
|
|
20866
|
+
"service.metadata.capabilities.objectCount": "Nombre d'objets",
|
|
20867
|
+
"service.metadata.capabilities.otherCrs": "Autres CRS",
|
|
20868
|
+
"service.metadata.capabilities.outputFormats": "Formats de sortie",
|
|
20869
|
+
"service.metadata.capabilities.resourceLinks": "Liens vers les ressources",
|
|
20870
|
+
"service.metadata.capabilities.title": "Titre",
|
|
20871
|
+
"service.metadata.filter": "Les couches seront filtrées par titre et description",
|
|
20872
|
+
"service.metadata.filter.noLayers": "Aucune couche ne correspond à votre recherche",
|
|
20873
|
+
"service.metadata.other": "Autres informations",
|
|
20874
|
+
"service.metadata.question": "Poser une question",
|
|
20875
|
+
"service.metadata.search": "Rechercher dans la liste des couches",
|
|
20876
|
+
"service.metadata.spatialExtent": "Etendue spatiale",
|
|
20793
20877
|
"share.tab.permalink": "Partager",
|
|
20794
20878
|
"share.tab.webComponent": "Intégrer",
|
|
20795
20879
|
"table.loading.data": "Chargement des données...",
|
|
@@ -21054,6 +21138,7 @@ var it = {
|
|
|
21054
21138
|
"editor.record.loadError.body": "Impossibile caricare il dataset:",
|
|
21055
21139
|
"editor.record.loadError.closeMessage": "Capito",
|
|
21056
21140
|
"editor.record.loadError.title": "Errore durante il caricamento",
|
|
21141
|
+
"editor.record.lock.format": "",
|
|
21057
21142
|
"editor.record.lock.reason": "Non è un editore di uno dei gruppi autorizzati",
|
|
21058
21143
|
"editor.record.onlineResource.protocol.other": "Altro",
|
|
21059
21144
|
"editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
|
|
@@ -21113,7 +21198,6 @@ var it = {
|
|
|
21113
21198
|
"input.image.dropFileLabel": "oppure trascinalo qui",
|
|
21114
21199
|
"input.image.selectFileLabel": "Seleziona un'immagine",
|
|
21115
21200
|
"input.image.uploadErrorLabel": "Impossibile caricare l'immagine",
|
|
21116
|
-
"input.image.uploadErrorRetry": "Riprova",
|
|
21117
21201
|
"input.image.uploadProgressCancel": "Annulla",
|
|
21118
21202
|
"input.image.uploadProgressLabel": "Caricamento...",
|
|
21119
21203
|
"language.ca": "Catalano",
|
|
@@ -21180,6 +21264,7 @@ var it = {
|
|
|
21180
21264
|
"record.card.metadata.contact": "",
|
|
21181
21265
|
"record.externalViewer.open": "Aprire nel visualizzatore esterno",
|
|
21182
21266
|
"record.feature.limit": "La visualizzazione è stata disabilitata a causa di troppi elementi ",
|
|
21267
|
+
"record.kind.data": "",
|
|
21183
21268
|
"record.kind.dataset": "",
|
|
21184
21269
|
"record.kind.reuse": "",
|
|
21185
21270
|
"record.kind.service": "",
|
|
@@ -21253,13 +21338,12 @@ var it = {
|
|
|
21253
21338
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
21254
21339
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
21255
21340
|
"record.metadata.related": "Vedi anche",
|
|
21256
|
-
"record.metadata.related.contents": "
|
|
21341
|
+
"record.metadata.related.contents": "",
|
|
21257
21342
|
"record.metadata.ressources.and.links": "Risorse e collegamenti",
|
|
21258
21343
|
"record.metadata.sheet": "Origine del metadata",
|
|
21259
21344
|
"record.metadata.status": "Stato",
|
|
21260
21345
|
"record.metadata.status.notPublished": "Non pubblicato",
|
|
21261
21346
|
"record.metadata.status.published": "Pubblicato",
|
|
21262
|
-
"record.metadata.technical": "Informazioni tecniche",
|
|
21263
21347
|
"record.metadata.temporalExtent": "Periodo di tempo",
|
|
21264
21348
|
"record.metadata.temporalExtent.fromDateToDate": "Da {start} a {end}",
|
|
21265
21349
|
"record.metadata.temporalExtent.sinceDate": "Dal {start}",
|
|
@@ -21296,6 +21380,7 @@ var it = {
|
|
|
21296
21380
|
"results.sortBy.popularity": "Popolarità",
|
|
21297
21381
|
"results.sortBy.qualityScore": "Indicatore di qualità",
|
|
21298
21382
|
"results.sortBy.relevancy": "Rilevanza",
|
|
21383
|
+
"reuse.metadata.access": "",
|
|
21299
21384
|
"search.autocomplete.error": "Impossibile recuperare le suggerimenti",
|
|
21300
21385
|
"search.error.couldNotReachApi": "Problema di connessione all'API",
|
|
21301
21386
|
"search.error.organizationHasNoDataset": "Questa organizzazione non ha ancora dati.",
|
|
@@ -21345,6 +21430,26 @@ var it = {
|
|
|
21345
21430
|
"search.filters.useSpatialFilter": "Evidenzia i risultati nell'area di interesse",
|
|
21346
21431
|
"search.filters.useSpatialFilterHelp": "Se attivata, le schede relative all'area di interesse del catalogo saranno mostrate per prime; le schede al di fuori di questa area non appariranno nei risultati.",
|
|
21347
21432
|
"search.filters.user": "Editore",
|
|
21433
|
+
"service.metadata.capabilities": "Informazioni tecniche",
|
|
21434
|
+
"service.metadata.capabilities.abstract": "",
|
|
21435
|
+
"service.metadata.capabilities.attribution": "",
|
|
21436
|
+
"service.metadata.capabilities.availableCrs": "",
|
|
21437
|
+
"service.metadata.capabilities.defaultCrs": "",
|
|
21438
|
+
"service.metadata.capabilities.geometryName": "",
|
|
21439
|
+
"service.metadata.capabilities.geometryType": "",
|
|
21440
|
+
"service.metadata.capabilities.keywords": "",
|
|
21441
|
+
"service.metadata.capabilities.name": "",
|
|
21442
|
+
"service.metadata.capabilities.objectCount": "",
|
|
21443
|
+
"service.metadata.capabilities.otherCrs": "",
|
|
21444
|
+
"service.metadata.capabilities.outputFormats": "",
|
|
21445
|
+
"service.metadata.capabilities.resourceLinks": "",
|
|
21446
|
+
"service.metadata.capabilities.title": "",
|
|
21447
|
+
"service.metadata.filter": "",
|
|
21448
|
+
"service.metadata.filter.noLayers": "",
|
|
21449
|
+
"service.metadata.other": "",
|
|
21450
|
+
"service.metadata.question": "",
|
|
21451
|
+
"service.metadata.search": "",
|
|
21452
|
+
"service.metadata.spatialExtent": "",
|
|
21348
21453
|
"share.tab.permalink": "Condividere",
|
|
21349
21454
|
"share.tab.webComponent": "Incorporare",
|
|
21350
21455
|
"table.loading.data": "Caricamento dei dati...",
|
|
@@ -21609,6 +21714,7 @@ var nl = {
|
|
|
21609
21714
|
"editor.record.loadError.body": "",
|
|
21610
21715
|
"editor.record.loadError.closeMessage": "",
|
|
21611
21716
|
"editor.record.loadError.title": "",
|
|
21717
|
+
"editor.record.lock.format": "",
|
|
21612
21718
|
"editor.record.lock.reason": "",
|
|
21613
21719
|
"editor.record.onlineResource.protocol.other": "",
|
|
21614
21720
|
"editor.record.onlineResourceError.body": "",
|
|
@@ -21668,7 +21774,6 @@ var nl = {
|
|
|
21668
21774
|
"input.image.dropFileLabel": "",
|
|
21669
21775
|
"input.image.selectFileLabel": "",
|
|
21670
21776
|
"input.image.uploadErrorLabel": "",
|
|
21671
|
-
"input.image.uploadErrorRetry": "",
|
|
21672
21777
|
"input.image.uploadProgressCancel": "",
|
|
21673
21778
|
"input.image.uploadProgressLabel": "",
|
|
21674
21779
|
"language.ca": "Catalaans",
|
|
@@ -21735,6 +21840,7 @@ var nl = {
|
|
|
21735
21840
|
"record.card.metadata.contact": "",
|
|
21736
21841
|
"record.externalViewer.open": "",
|
|
21737
21842
|
"record.feature.limit": "",
|
|
21843
|
+
"record.kind.data": "",
|
|
21738
21844
|
"record.kind.dataset": "",
|
|
21739
21845
|
"record.kind.reuse": "",
|
|
21740
21846
|
"record.kind.service": "",
|
|
@@ -21808,13 +21914,12 @@ var nl = {
|
|
|
21808
21914
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
21809
21915
|
"record.metadata.quality.updateFrequency.success": "",
|
|
21810
21916
|
"record.metadata.related": "",
|
|
21811
|
-
"record.metadata.related.contents": "
|
|
21917
|
+
"record.metadata.related.contents": "",
|
|
21812
21918
|
"record.metadata.ressources.and.links": "Bronnen en links",
|
|
21813
21919
|
"record.metadata.sheet": "",
|
|
21814
21920
|
"record.metadata.status": "",
|
|
21815
21921
|
"record.metadata.status.notPublished": "",
|
|
21816
21922
|
"record.metadata.status.published": "",
|
|
21817
|
-
"record.metadata.technical": "",
|
|
21818
21923
|
"record.metadata.temporalExtent": "",
|
|
21819
21924
|
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
21820
21925
|
"record.metadata.temporalExtent.sinceDate": "",
|
|
@@ -21851,6 +21956,7 @@ var nl = {
|
|
|
21851
21956
|
"results.sortBy.popularity": "",
|
|
21852
21957
|
"results.sortBy.qualityScore": "",
|
|
21853
21958
|
"results.sortBy.relevancy": "",
|
|
21959
|
+
"reuse.metadata.access": "",
|
|
21854
21960
|
"search.autocomplete.error": "",
|
|
21855
21961
|
"search.error.couldNotReachApi": "",
|
|
21856
21962
|
"search.error.organizationHasNoDataset": "",
|
|
@@ -21900,6 +22006,26 @@ var nl = {
|
|
|
21900
22006
|
"search.filters.useSpatialFilter": "",
|
|
21901
22007
|
"search.filters.useSpatialFilterHelp": "",
|
|
21902
22008
|
"search.filters.user": "",
|
|
22009
|
+
"service.metadata.capabilities": "",
|
|
22010
|
+
"service.metadata.capabilities.abstract": "",
|
|
22011
|
+
"service.metadata.capabilities.attribution": "",
|
|
22012
|
+
"service.metadata.capabilities.availableCrs": "",
|
|
22013
|
+
"service.metadata.capabilities.defaultCrs": "",
|
|
22014
|
+
"service.metadata.capabilities.geometryName": "",
|
|
22015
|
+
"service.metadata.capabilities.geometryType": "",
|
|
22016
|
+
"service.metadata.capabilities.keywords": "",
|
|
22017
|
+
"service.metadata.capabilities.name": "",
|
|
22018
|
+
"service.metadata.capabilities.objectCount": "",
|
|
22019
|
+
"service.metadata.capabilities.otherCrs": "",
|
|
22020
|
+
"service.metadata.capabilities.outputFormats": "",
|
|
22021
|
+
"service.metadata.capabilities.resourceLinks": "",
|
|
22022
|
+
"service.metadata.capabilities.title": "",
|
|
22023
|
+
"service.metadata.filter": "",
|
|
22024
|
+
"service.metadata.filter.noLayers": "",
|
|
22025
|
+
"service.metadata.other": "",
|
|
22026
|
+
"service.metadata.question": "",
|
|
22027
|
+
"service.metadata.search": "",
|
|
22028
|
+
"service.metadata.spatialExtent": "",
|
|
21903
22029
|
"share.tab.permalink": "",
|
|
21904
22030
|
"share.tab.webComponent": "",
|
|
21905
22031
|
"table.loading.data": "",
|
|
@@ -22164,6 +22290,7 @@ var pt = {
|
|
|
22164
22290
|
"editor.record.loadError.body": "",
|
|
22165
22291
|
"editor.record.loadError.closeMessage": "",
|
|
22166
22292
|
"editor.record.loadError.title": "",
|
|
22293
|
+
"editor.record.lock.format": "",
|
|
22167
22294
|
"editor.record.lock.reason": "",
|
|
22168
22295
|
"editor.record.onlineResource.protocol.other": "",
|
|
22169
22296
|
"editor.record.onlineResourceError.body": "",
|
|
@@ -22223,7 +22350,6 @@ var pt = {
|
|
|
22223
22350
|
"input.image.dropFileLabel": "",
|
|
22224
22351
|
"input.image.selectFileLabel": "",
|
|
22225
22352
|
"input.image.uploadErrorLabel": "",
|
|
22226
|
-
"input.image.uploadErrorRetry": "",
|
|
22227
22353
|
"input.image.uploadProgressCancel": "",
|
|
22228
22354
|
"input.image.uploadProgressLabel": "",
|
|
22229
22355
|
"language.ca": "Catalão",
|
|
@@ -22290,6 +22416,7 @@ var pt = {
|
|
|
22290
22416
|
"record.card.metadata.contact": "",
|
|
22291
22417
|
"record.externalViewer.open": "",
|
|
22292
22418
|
"record.feature.limit": "",
|
|
22419
|
+
"record.kind.data": "",
|
|
22293
22420
|
"record.kind.dataset": "",
|
|
22294
22421
|
"record.kind.reuse": "",
|
|
22295
22422
|
"record.kind.service": "",
|
|
@@ -22363,13 +22490,12 @@ var pt = {
|
|
|
22363
22490
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
22364
22491
|
"record.metadata.quality.updateFrequency.success": "",
|
|
22365
22492
|
"record.metadata.related": "",
|
|
22366
|
-
"record.metadata.related.contents": "
|
|
22493
|
+
"record.metadata.related.contents": "",
|
|
22367
22494
|
"record.metadata.ressources.and.links": "Recursos e links",
|
|
22368
22495
|
"record.metadata.sheet": "",
|
|
22369
22496
|
"record.metadata.status": "",
|
|
22370
22497
|
"record.metadata.status.notPublished": "",
|
|
22371
22498
|
"record.metadata.status.published": "",
|
|
22372
|
-
"record.metadata.technical": "",
|
|
22373
22499
|
"record.metadata.temporalExtent": "",
|
|
22374
22500
|
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
22375
22501
|
"record.metadata.temporalExtent.sinceDate": "",
|
|
@@ -22406,6 +22532,7 @@ var pt = {
|
|
|
22406
22532
|
"results.sortBy.popularity": "",
|
|
22407
22533
|
"results.sortBy.qualityScore": "",
|
|
22408
22534
|
"results.sortBy.relevancy": "",
|
|
22535
|
+
"reuse.metadata.access": "",
|
|
22409
22536
|
"search.autocomplete.error": "",
|
|
22410
22537
|
"search.error.couldNotReachApi": "",
|
|
22411
22538
|
"search.error.organizationHasNoDataset": "",
|
|
@@ -22455,6 +22582,26 @@ var pt = {
|
|
|
22455
22582
|
"search.filters.useSpatialFilter": "",
|
|
22456
22583
|
"search.filters.useSpatialFilterHelp": "",
|
|
22457
22584
|
"search.filters.user": "",
|
|
22585
|
+
"service.metadata.capabilities": "",
|
|
22586
|
+
"service.metadata.capabilities.abstract": "",
|
|
22587
|
+
"service.metadata.capabilities.attribution": "",
|
|
22588
|
+
"service.metadata.capabilities.availableCrs": "",
|
|
22589
|
+
"service.metadata.capabilities.defaultCrs": "",
|
|
22590
|
+
"service.metadata.capabilities.geometryName": "",
|
|
22591
|
+
"service.metadata.capabilities.geometryType": "",
|
|
22592
|
+
"service.metadata.capabilities.keywords": "",
|
|
22593
|
+
"service.metadata.capabilities.name": "",
|
|
22594
|
+
"service.metadata.capabilities.objectCount": "",
|
|
22595
|
+
"service.metadata.capabilities.otherCrs": "",
|
|
22596
|
+
"service.metadata.capabilities.outputFormats": "",
|
|
22597
|
+
"service.metadata.capabilities.resourceLinks": "",
|
|
22598
|
+
"service.metadata.capabilities.title": "",
|
|
22599
|
+
"service.metadata.filter": "",
|
|
22600
|
+
"service.metadata.filter.noLayers": "",
|
|
22601
|
+
"service.metadata.other": "",
|
|
22602
|
+
"service.metadata.question": "",
|
|
22603
|
+
"service.metadata.search": "",
|
|
22604
|
+
"service.metadata.spatialExtent": "",
|
|
22458
22605
|
"share.tab.permalink": "",
|
|
22459
22606
|
"share.tab.webComponent": "",
|
|
22460
22607
|
"table.loading.data": "",
|
|
@@ -22803,8 +22950,8 @@ class Gn4FieldMapper {
|
|
|
22803
22950
|
return {
|
|
22804
22951
|
...distribution,
|
|
22805
22952
|
type,
|
|
22806
|
-
|
|
22807
|
-
|
|
22953
|
+
url: url,
|
|
22954
|
+
accessServiceProtocol: accessServiceProtocol,
|
|
22808
22955
|
};
|
|
22809
22956
|
}
|
|
22810
22957
|
};
|
|
@@ -23200,14 +23347,6 @@ class ElasticsearchService {
|
|
|
23200
23347
|
}
|
|
23201
23348
|
mustNotFilters() {
|
|
23202
23349
|
return [
|
|
23203
|
-
{
|
|
23204
|
-
...this.queryFilterOnValues('resourceType', [
|
|
23205
|
-
'service',
|
|
23206
|
-
'map',
|
|
23207
|
-
'map/static',
|
|
23208
|
-
'mapDigital',
|
|
23209
|
-
]),
|
|
23210
|
-
},
|
|
23211
23350
|
{
|
|
23212
23351
|
query_string: {
|
|
23213
23352
|
query: 'resourceType:featureCatalog AND !resourceType:dataset AND !cl_level.key:dataset',
|
|
@@ -23306,7 +23445,7 @@ class ElasticsearchService {
|
|
|
23306
23445
|
must_not: this.mustNotFilters(),
|
|
23307
23446
|
},
|
|
23308
23447
|
},
|
|
23309
|
-
_source: ['resourceTitleObject', 'uuid'],
|
|
23448
|
+
_source: ['resourceTitleObject', 'uuid', 'resourceType'],
|
|
23310
23449
|
from: 0,
|
|
23311
23450
|
size: 20,
|
|
23312
23451
|
};
|
|
@@ -25044,7 +25183,7 @@ function getLinkLabel(link) {
|
|
|
25044
25183
|
default:
|
|
25045
25184
|
format = getFileFormat(link);
|
|
25046
25185
|
}
|
|
25047
|
-
const label = link.description || link.name;
|
|
25186
|
+
const label = link.description || ('name' in link ? link.name : '');
|
|
25048
25187
|
return format ? `${label} (${format})` : label;
|
|
25049
25188
|
}
|
|
25050
25189
|
async function getLayers(url, serviceProtocol) {
|
|
@@ -25055,14 +25194,21 @@ async function getLayers(url, serviceProtocol) {
|
|
|
25055
25194
|
}
|
|
25056
25195
|
case 'wfs': {
|
|
25057
25196
|
const endpointWfs = await new WfsEndpoint(url).isReady();
|
|
25058
|
-
|
|
25197
|
+
const featureTypes = await endpointWfs.getFeatureTypes();
|
|
25198
|
+
const layers = await Promise.all(featureTypes.map(async (collection) => {
|
|
25199
|
+
return await endpointWfs.getFeatureTypeFull(collection.name);
|
|
25200
|
+
}));
|
|
25201
|
+
return layers;
|
|
25059
25202
|
}
|
|
25060
25203
|
case 'wms': {
|
|
25061
25204
|
const endpointWms = await new WmsEndpoint(url).isReady();
|
|
25062
|
-
|
|
25205
|
+
const layers = (await endpointWms
|
|
25063
25206
|
.getLayers()
|
|
25064
25207
|
.flatMap(wmsLayerFlatten)
|
|
25065
|
-
.filter((l) => l.name)
|
|
25208
|
+
.filter((l) => l.name)).map((collection) => {
|
|
25209
|
+
return endpointWms.getLayerByName(collection.name);
|
|
25210
|
+
});
|
|
25211
|
+
return layers;
|
|
25066
25212
|
}
|
|
25067
25213
|
case 'wmts': {
|
|
25068
25214
|
const endpointWmts = await new WmtsEndpoint(url).isReady();
|
|
@@ -25099,6 +25245,7 @@ var LinkUsage;
|
|
|
25099
25245
|
class LinkClassifierService {
|
|
25100
25246
|
getUsagesForLink(link) {
|
|
25101
25247
|
switch (link.type) {
|
|
25248
|
+
case 'endpoint':
|
|
25102
25249
|
case 'service': {
|
|
25103
25250
|
switch (link.accessServiceProtocol) {
|
|
25104
25251
|
case 'esriRest':
|
|
@@ -25147,6 +25294,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
25147
25294
|
}]
|
|
25148
25295
|
}] });
|
|
25149
25296
|
|
|
25297
|
+
var name = "geonetwork-ui";
|
|
25298
|
+
var version = "2.6.0-dev.d216c4dea";
|
|
25299
|
+
var engines = {
|
|
25300
|
+
node: ">=20"
|
|
25301
|
+
};
|
|
25302
|
+
var main = "./index.ts";
|
|
25303
|
+
var type = "module";
|
|
25304
|
+
var exports = {
|
|
25305
|
+
"./tailwind.base.config.js": "./tailwind.base.config.js",
|
|
25306
|
+
"./style.css": "./style.css"
|
|
25307
|
+
};
|
|
25308
|
+
var repository = {
|
|
25309
|
+
url: "https://github.com/geonetwork/geonetwork-ui"
|
|
25310
|
+
};
|
|
25311
|
+
var peerDependencies = {
|
|
25312
|
+
"@angular/animations": "17.x || 18.x || 19.x",
|
|
25313
|
+
"@angular/cdk": "17.x || 18.x || 19.x",
|
|
25314
|
+
"@angular/common": "17.x || 18.x || 19.x",
|
|
25315
|
+
"@angular/compiler": "17.x || 18.x || 19.x",
|
|
25316
|
+
"@angular/core": "17.x || 18.x || 19.x",
|
|
25317
|
+
"@angular/forms": "17.x || 18.x || 19.x",
|
|
25318
|
+
"@angular/material": "17.x || 18.x || 19.x",
|
|
25319
|
+
"@angular/material-moment-adapter": "17.x || 18.x || 19.x",
|
|
25320
|
+
"@angular/platform-browser": "17.x || 18.x || 19.x",
|
|
25321
|
+
"@angular/platform-browser-dynamic": "17.x || 18.x || 19.x",
|
|
25322
|
+
"@angular/router": "17.x || 18.x || 19.x",
|
|
25323
|
+
"@ngrx/component": "17.x || 18.x || 19.x",
|
|
25324
|
+
"@ngrx/effects": "17.x || 18.x || 19.x",
|
|
25325
|
+
"@ngrx/router-store": "17.x || 18.x || 19.x",
|
|
25326
|
+
"@ngrx/store": "17.x || 18.x || 19.x",
|
|
25327
|
+
"@ngrx/store-devtools": "17.x || 18.x || 19.x",
|
|
25328
|
+
"@ngrx/operators": "18.x",
|
|
25329
|
+
"@ngx-translate/core": "15.x",
|
|
25330
|
+
"@ngx-translate/http-loader": "16.x",
|
|
25331
|
+
rxjs: "7.x",
|
|
25332
|
+
"zone.js": "*",
|
|
25333
|
+
tailwindcss: "3.x"
|
|
25334
|
+
};
|
|
25335
|
+
var dependencies = {
|
|
25336
|
+
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
|
|
25337
|
+
"@camptocamp/ogc-client": "1.1.1-dev.3e2d3cc",
|
|
25338
|
+
"@geospatial-sdk/core": "0.0.5-dev.31",
|
|
25339
|
+
"@geospatial-sdk/geocoding": "0.0.5-dev.31",
|
|
25340
|
+
"@geospatial-sdk/legend": "0.0.5-dev.31",
|
|
25341
|
+
"@geospatial-sdk/openlayers": "0.0.5-dev.31",
|
|
25342
|
+
"@ltd/j-toml": "~1.35.2",
|
|
25343
|
+
"@messageformat/core": "^3.0.1",
|
|
25344
|
+
"@ng-icons/core": "29.10.0",
|
|
25345
|
+
"@ng-icons/iconoir": "29.10.0",
|
|
25346
|
+
"@ng-icons/material-icons": "29.10.0",
|
|
25347
|
+
"@ng-icons/tabler-icons": "29.10.0",
|
|
25348
|
+
"@nx/angular": "20.2.2",
|
|
25349
|
+
"@rgrove/parse-xml": "4.2.0",
|
|
25350
|
+
alasql: "4.6.0",
|
|
25351
|
+
axios: "1.7.9",
|
|
25352
|
+
basiclightbox: "^5.0.4",
|
|
25353
|
+
"chart.js": "4.4.7",
|
|
25354
|
+
"chroma-js": "3.1.2",
|
|
25355
|
+
"date-fns": "4.1.0",
|
|
25356
|
+
"document-register-element": "^1.14.10",
|
|
25357
|
+
"duration-relativetimeformat": "^2.0.4",
|
|
25358
|
+
"embla-carousel": "8.5.1",
|
|
25359
|
+
express: "^4.21.1",
|
|
25360
|
+
"geojson-validation": "^1.0.2",
|
|
25361
|
+
marked: "15.0.4",
|
|
25362
|
+
moment: "2.30.1",
|
|
25363
|
+
"ng-table-virtual-scroll": "1.6.1",
|
|
25364
|
+
"ngx-chips": "3.0.0",
|
|
25365
|
+
"ngx-dropzone": "3.1.0",
|
|
25366
|
+
"ngx-translate-messageformat-compiler": "7.0.0",
|
|
25367
|
+
ol: "^8.2.0",
|
|
25368
|
+
papaparse: "5.4.1",
|
|
25369
|
+
pg: "^8.9.0",
|
|
25370
|
+
proj4: "^2.9.2",
|
|
25371
|
+
rdflib: "^2.2.35",
|
|
25372
|
+
"reflect-metadata": "^0.1.13",
|
|
25373
|
+
semver: "7.6.3",
|
|
25374
|
+
"tippy.js": "6.3.7",
|
|
25375
|
+
tslib: "^2.3.0",
|
|
25376
|
+
typeorm: "^0.3.14",
|
|
25377
|
+
"whatwg-fetch": "^3.6.2",
|
|
25378
|
+
xlsx: "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz"
|
|
25379
|
+
};
|
|
25380
|
+
var packageJson = {
|
|
25381
|
+
name: name,
|
|
25382
|
+
version: version,
|
|
25383
|
+
engines: engines,
|
|
25384
|
+
main: main,
|
|
25385
|
+
type: type,
|
|
25386
|
+
exports: exports,
|
|
25387
|
+
repository: repository,
|
|
25388
|
+
peerDependencies: peerDependencies,
|
|
25389
|
+
dependencies: dependencies
|
|
25390
|
+
};
|
|
25391
|
+
|
|
25392
|
+
const GEONETWORK_UI_VERSION = packageJson.version;
|
|
25393
|
+
const GEONETWORK_UI_TAG_NAME = GEONETWORK_UI_VERSION.split('-')[1] === 'dev'
|
|
25394
|
+
? 'main'
|
|
25395
|
+
: `v${packageJson.version}`;
|
|
25396
|
+
|
|
25150
25397
|
const minApiVersion = '4.2.2';
|
|
25151
25398
|
class Gn4PlatformService {
|
|
25152
25399
|
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService, userfeedbackApiService, httpClient, recordsApiService) {
|
|
@@ -25340,12 +25587,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
25340
25587
|
type: Injectable
|
|
25341
25588
|
}], ctorParameters: () => [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }, { type: UserfeedbackApiService }, { type: i1.HttpClient }, { type: RecordsApiService }] });
|
|
25342
25589
|
|
|
25590
|
+
class RecordsRepositoryInterface {
|
|
25591
|
+
}
|
|
25592
|
+
|
|
25343
25593
|
function provideGn4() {
|
|
25344
25594
|
return [
|
|
25345
25595
|
{
|
|
25346
25596
|
provide: PlatformServiceInterface,
|
|
25347
25597
|
useClass: Gn4PlatformService,
|
|
25348
25598
|
},
|
|
25599
|
+
{
|
|
25600
|
+
provide: RecordsRepositoryInterface,
|
|
25601
|
+
useClass: Gn4Repository,
|
|
25602
|
+
},
|
|
25349
25603
|
Gn4PlatformMapper,
|
|
25350
25604
|
];
|
|
25351
25605
|
}
|
|
@@ -25777,6 +26031,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
25777
26031
|
type: Output
|
|
25778
26032
|
}] } });
|
|
25779
26033
|
|
|
26034
|
+
marker('editor.record.lock.reason');
|
|
26035
|
+
marker('editor.record.lock.format');
|
|
25780
26036
|
class InteractiveTableComponent {
|
|
25781
26037
|
constructor() {
|
|
25782
26038
|
this.items = [];
|
|
@@ -25794,15 +26050,24 @@ class InteractiveTableComponent {
|
|
|
25794
26050
|
.join(' '),
|
|
25795
26051
|
};
|
|
25796
26052
|
}
|
|
26053
|
+
getItemTitle(item) {
|
|
26054
|
+
if (!item.extras?.edit && !this.isDraftPage && item.kind === 'dataset') {
|
|
26055
|
+
return 'editor.record.lock.reason';
|
|
26056
|
+
}
|
|
26057
|
+
else if (item.kind !== 'dataset') {
|
|
26058
|
+
return 'editor.record.lock.format';
|
|
26059
|
+
}
|
|
26060
|
+
return '';
|
|
26061
|
+
}
|
|
25797
26062
|
handleRowClick(item) {
|
|
25798
26063
|
this.itemClick.emit(item);
|
|
25799
26064
|
}
|
|
25800
26065
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25801
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items", isDraftPage: "isDraftPage" }, outputs: { itemClick: "itemClick" }, providers: [provideIcons({ iconoirNavArrowDown, iconoirNavArrowUp })], queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents w-full\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell gap-1\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <ng-icon\n class=\"text-gray-600 -mb-2\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n name=\"iconoirNavArrowUp\"\n ></ng-icon>\n <ng-icon\n class=\"text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n name=\"iconoirNavArrowDown\"\n ></ng-icon>\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n data-cy=\"table-row\"\n [title]=\"
|
|
26066
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items", isDraftPage: "isDraftPage" }, outputs: { itemClick: "itemClick" }, providers: [provideIcons({ iconoirNavArrowDown, iconoirNavArrowUp })], queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents w-full\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell gap-1\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <ng-icon\n class=\"text-gray-600 -mb-2\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n name=\"iconoirNavArrowUp\"\n ></ng-icon>\n <ng-icon\n class=\"text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n name=\"iconoirNavArrowDown\"\n ></ng-icon>\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n data-cy=\"table-row\"\n [title]=\"getItemTitle(item) | translate\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-3 py-1.5 flex items-center bg-white transition-colors duration-75 truncate border-b border-gray-200\"\n [ngClass]=\"{\n 'text-purple-light cursor-default':\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',\n 'group-hover:text-main group-hover:bg-gray-50':\n (item.extras?.edit || isDraftPage) && item.kind === 'dataset',\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".table-header-cell{@apply text-gray-700 px-3 py-3 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}ng-icon{@apply w-4 h-4;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25802
26067
|
}
|
|
25803
26068
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
25804
26069
|
type: Component,
|
|
25805
|
-
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslateModule], providers: [provideIcons({ iconoirNavArrowDown, iconoirNavArrowUp })], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents w-full\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell gap-1\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <ng-icon\n class=\"text-gray-600 -mb-2\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n name=\"iconoirNavArrowUp\"\n ></ng-icon>\n <ng-icon\n class=\"text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n name=\"iconoirNavArrowDown\"\n ></ng-icon>\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n data-cy=\"table-row\"\n [title]=\"
|
|
26070
|
+
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslateModule], providers: [provideIcons({ iconoirNavArrowDown, iconoirNavArrowUp })], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents w-full\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell gap-1\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <ng-icon\n class=\"text-gray-600 -mb-2\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n name=\"iconoirNavArrowUp\"\n ></ng-icon>\n <ng-icon\n class=\"text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n name=\"iconoirNavArrowDown\"\n ></ng-icon>\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n data-cy=\"table-row\"\n [title]=\"getItemTitle(item) | translate\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-3 py-1.5 flex items-center bg-white transition-colors duration-75 truncate border-b border-gray-200\"\n [ngClass]=\"{\n 'text-purple-light cursor-default':\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',\n 'group-hover:text-main group-hover:bg-gray-50':\n (item.extras?.edit || isDraftPage) && item.kind === 'dataset',\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".table-header-cell{@apply text-gray-700 px-3 py-3 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}ng-icon{@apply w-4 h-4;}\n"] }]
|
|
25806
26071
|
}], propDecorators: { columns: [{
|
|
25807
26072
|
type: ContentChildren,
|
|
25808
26073
|
args: [InteractiveTableColumnComponent]
|
|
@@ -29418,7 +29683,7 @@ class MetadataContactComponent {
|
|
|
29418
29683
|
this.organizationClick.emit(this.shownOrganization);
|
|
29419
29684
|
}
|
|
29420
29685
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29421
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataContactComponent, isStandalone: true, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black
|
|
29686
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataContactComponent, isStandalone: true, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [
|
|
29422
29687
|
provideIcons({
|
|
29423
29688
|
matOpenInNew,
|
|
29424
29689
|
matCallOutline,
|
|
@@ -29438,7 +29703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
29438
29703
|
matPersonOutline,
|
|
29439
29704
|
matLocationOnOutline,
|
|
29440
29705
|
}),
|
|
29441
|
-
], template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black
|
|
29706
|
+
], template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
29442
29707
|
}], propDecorators: { metadata: [{
|
|
29443
29708
|
type: Input
|
|
29444
29709
|
}], organizationClick: [{
|
|
@@ -29523,6 +29788,316 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
29523
29788
|
}]
|
|
29524
29789
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
|
|
29525
29790
|
|
|
29791
|
+
const DO_NOT_USE_DEFAULT_BASEMAP = new InjectionToken('doNotUseDefaultBasemap', { factory: () => false });
|
|
29792
|
+
const BASEMAP_LAYERS = new InjectionToken('basemapLayers', { factory: () => [] });
|
|
29793
|
+
const MAP_VIEW_CONSTRAINTS = new InjectionToken('mapViewConstraints', {
|
|
29794
|
+
factory: () => ({}),
|
|
29795
|
+
});
|
|
29796
|
+
const VECTOR_STYLE_DEFAULT = new InjectionToken('vectorStyleDefault', {
|
|
29797
|
+
factory: () => ({
|
|
29798
|
+
fill: { color: 'rgba(255, 255, 255, 0.2)' },
|
|
29799
|
+
stroke: { color: '#ffcc33', width: 2 },
|
|
29800
|
+
}),
|
|
29801
|
+
});
|
|
29802
|
+
|
|
29803
|
+
const DEFAULT_BASEMAP_LAYER = {
|
|
29804
|
+
type: 'xyz',
|
|
29805
|
+
url: `https://{a-c}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png`,
|
|
29806
|
+
attributions: `<span>© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://carto.com/">Carto</a></span>`,
|
|
29807
|
+
};
|
|
29808
|
+
const DEFAULT_VIEW = {
|
|
29809
|
+
center: [0, 15],
|
|
29810
|
+
zoom: 2,
|
|
29811
|
+
};
|
|
29812
|
+
class MapContainerComponent {
|
|
29813
|
+
get featuresClick() {
|
|
29814
|
+
if (!this._featuresClick) {
|
|
29815
|
+
this.openlayersMap.then((olMap) => {
|
|
29816
|
+
listen(olMap, FeaturesClickEventType, ({ features }) => this._featuresClick.emit(features));
|
|
29817
|
+
});
|
|
29818
|
+
this._featuresClick = new EventEmitter();
|
|
29819
|
+
}
|
|
29820
|
+
return this._featuresClick;
|
|
29821
|
+
}
|
|
29822
|
+
get featuresHover() {
|
|
29823
|
+
if (!this._featuresHover) {
|
|
29824
|
+
this.openlayersMap.then((olMap) => {
|
|
29825
|
+
listen(olMap, FeaturesHoverEventType, ({ features }) => this._featuresHover.emit(features));
|
|
29826
|
+
});
|
|
29827
|
+
this._featuresHover = new EventEmitter();
|
|
29828
|
+
}
|
|
29829
|
+
return this._featuresHover;
|
|
29830
|
+
}
|
|
29831
|
+
get mapClick() {
|
|
29832
|
+
if (!this._mapClick) {
|
|
29833
|
+
this.openlayersMap.then((olMap) => {
|
|
29834
|
+
listen(olMap, MapClickEventType, ({ coordinate }) => this._mapClick.emit(coordinate));
|
|
29835
|
+
});
|
|
29836
|
+
this._mapClick = new EventEmitter();
|
|
29837
|
+
}
|
|
29838
|
+
return this._mapClick;
|
|
29839
|
+
}
|
|
29840
|
+
get sourceLoadError() {
|
|
29841
|
+
if (!this._sourceLoadError) {
|
|
29842
|
+
this.openlayersMap.then((olMap) => {
|
|
29843
|
+
listen(olMap, SourceLoadErrorType, (error) => this._sourceLoadError.emit(error));
|
|
29844
|
+
});
|
|
29845
|
+
this._sourceLoadError = new EventEmitter();
|
|
29846
|
+
}
|
|
29847
|
+
return this._sourceLoadError;
|
|
29848
|
+
}
|
|
29849
|
+
constructor(doNotUseDefaultBasemap, basemapLayers, mapViewConstraints) {
|
|
29850
|
+
this.doNotUseDefaultBasemap = doNotUseDefaultBasemap;
|
|
29851
|
+
this.basemapLayers = basemapLayers;
|
|
29852
|
+
this.mapViewConstraints = mapViewConstraints;
|
|
29853
|
+
this.openlayersMap = new Promise((resolve) => {
|
|
29854
|
+
this.olMapResolver = resolve;
|
|
29855
|
+
});
|
|
29856
|
+
}
|
|
29857
|
+
async ngAfterViewInit() {
|
|
29858
|
+
this.olMap = await createMapFromContext(this.processContext(this.context), this.container.nativeElement);
|
|
29859
|
+
this.displayMessage$ = merge(fromEvent(this.olMap, 'mapmuted').pipe(map$1(() => true)), fromEvent(this.olMap, 'movestart').pipe(map$1(() => false)), fromEvent(this.olMap, 'singleclick').pipe(map$1(() => false))).pipe(switchMap$1((muted) => muted
|
|
29860
|
+
? timer(2000).pipe(map$1(() => false), startWith(true), delay(400))
|
|
29861
|
+
: of(false)));
|
|
29862
|
+
this.olMapResolver(this.olMap);
|
|
29863
|
+
}
|
|
29864
|
+
async ngOnChanges(changes) {
|
|
29865
|
+
if ('context' in changes && !changes['context'].isFirstChange()) {
|
|
29866
|
+
const diff = computeMapContextDiff(this.processContext(changes['context'].currentValue), this.processContext(changes['context'].previousValue));
|
|
29867
|
+
await applyContextDiffToMap(this.olMap, diff);
|
|
29868
|
+
}
|
|
29869
|
+
}
|
|
29870
|
+
// This will apply basemap layers & view constraints
|
|
29871
|
+
processContext(context) {
|
|
29872
|
+
const processed = context
|
|
29873
|
+
? { ...context, view: context.view ?? DEFAULT_VIEW }
|
|
29874
|
+
: { layers: [], view: DEFAULT_VIEW };
|
|
29875
|
+
if (this.basemapLayers.length) {
|
|
29876
|
+
processed.layers = [...this.basemapLayers, ...processed.layers];
|
|
29877
|
+
}
|
|
29878
|
+
if (!this.doNotUseDefaultBasemap) {
|
|
29879
|
+
processed.layers = [DEFAULT_BASEMAP_LAYER, ...processed.layers];
|
|
29880
|
+
}
|
|
29881
|
+
if (this.mapViewConstraints.maxZoom) {
|
|
29882
|
+
processed.view = {
|
|
29883
|
+
maxZoom: this.mapViewConstraints.maxZoom,
|
|
29884
|
+
...processed.view,
|
|
29885
|
+
};
|
|
29886
|
+
}
|
|
29887
|
+
if (this.mapViewConstraints.maxExtent) {
|
|
29888
|
+
processed.view = {
|
|
29889
|
+
maxExtent: this.mapViewConstraints.maxExtent,
|
|
29890
|
+
...processed.view,
|
|
29891
|
+
};
|
|
29892
|
+
}
|
|
29893
|
+
if (processed.view &&
|
|
29894
|
+
!('zoom' in processed.view) &&
|
|
29895
|
+
!('center' in processed.view)) {
|
|
29896
|
+
if (this.mapViewConstraints.maxExtent) {
|
|
29897
|
+
processed.view = {
|
|
29898
|
+
extent: this.mapViewConstraints.maxExtent,
|
|
29899
|
+
...processed.view,
|
|
29900
|
+
};
|
|
29901
|
+
}
|
|
29902
|
+
else {
|
|
29903
|
+
processed.view = { ...DEFAULT_VIEW, ...processed.view };
|
|
29904
|
+
}
|
|
29905
|
+
}
|
|
29906
|
+
return processed;
|
|
29907
|
+
}
|
|
29908
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapContainerComponent, deps: [{ token: DO_NOT_USE_DEFAULT_BASEMAP }, { token: BASEMAP_LAYERS }, { token: MAP_VIEW_CONSTRAINTS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29909
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapContainerComponent, isStandalone: true, selector: "gn-ui-map-container", inputs: { context: "context" }, outputs: { featuresClick: "featuresClick", featuresHover: "featuresHover", mapClick: "mapClick", sourceLoadError: "sourceLoadError" }, providers: [
|
|
29910
|
+
provideIcons({ matSwipeOutline }),
|
|
29911
|
+
provideNgIconsConfig({
|
|
29912
|
+
size: '1.5em',
|
|
29913
|
+
}),
|
|
29914
|
+
], viewQueries: [{ propertyName: "container", first: true, predicate: ["map"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"h-full w-full\" #map></div>\n<div\n class=\"absolute inset-0 p-2 rounded z-40 transition-all flex flex-col justify-center items-center text-primary font-sans pointer-events-none\"\n [ngClass]=\"\n (displayMessage$ | async) ? 'visible opacity-100' : 'invisible opacity-0'\n \"\n>\n <div\n class=\"absolute z-[-1] inset-0 bg-gradient-to-b from-white to-primary-lightest opacity-60\"\n ></div>\n <ng-icon\n class=\"!w-16 !h-16 text-[64px] mb-4\"\n name=\"matSwipeOutline\"\n ></ng-icon>\n <p translate>map.navigation.message</p>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
29915
|
+
}
|
|
29916
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapContainerComponent, decorators: [{
|
|
29917
|
+
type: Component,
|
|
29918
|
+
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, TranslateModule, NgIconComponent], providers: [
|
|
29919
|
+
provideIcons({ matSwipeOutline }),
|
|
29920
|
+
provideNgIconsConfig({
|
|
29921
|
+
size: '1.5em',
|
|
29922
|
+
}),
|
|
29923
|
+
], template: "<div class=\"h-full w-full\" #map></div>\n<div\n class=\"absolute inset-0 p-2 rounded z-40 transition-all flex flex-col justify-center items-center text-primary font-sans pointer-events-none\"\n [ngClass]=\"\n (displayMessage$ | async) ? 'visible opacity-100' : 'invisible opacity-0'\n \"\n>\n <div\n class=\"absolute z-[-1] inset-0 bg-gradient-to-b from-white to-primary-lightest opacity-60\"\n ></div>\n <ng-icon\n class=\"!w-16 !h-16 text-[64px] mb-4\"\n name=\"matSwipeOutline\"\n ></ng-icon>\n <p translate>map.navigation.message</p>\n</div>\n" }]
|
|
29924
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
29925
|
+
type: Inject,
|
|
29926
|
+
args: [DO_NOT_USE_DEFAULT_BASEMAP]
|
|
29927
|
+
}] }, { type: undefined, decorators: [{
|
|
29928
|
+
type: Inject,
|
|
29929
|
+
args: [BASEMAP_LAYERS]
|
|
29930
|
+
}] }, { type: undefined, decorators: [{
|
|
29931
|
+
type: Inject,
|
|
29932
|
+
args: [MAP_VIEW_CONSTRAINTS]
|
|
29933
|
+
}] }], propDecorators: { context: [{
|
|
29934
|
+
type: Input
|
|
29935
|
+
}], featuresClick: [{
|
|
29936
|
+
type: Output
|
|
29937
|
+
}], featuresHover: [{
|
|
29938
|
+
type: Output
|
|
29939
|
+
}], mapClick: [{
|
|
29940
|
+
type: Output
|
|
29941
|
+
}], sourceLoadError: [{
|
|
29942
|
+
type: Output
|
|
29943
|
+
}], container: [{
|
|
29944
|
+
type: ViewChild,
|
|
29945
|
+
args: ['map']
|
|
29946
|
+
}] } });
|
|
29947
|
+
|
|
29948
|
+
const geometryKeys = ['geometry', 'the_geom'];
|
|
29949
|
+
class FeatureDetailComponent {
|
|
29950
|
+
get properties() {
|
|
29951
|
+
if (!this.feature)
|
|
29952
|
+
return [];
|
|
29953
|
+
return Object.keys(this.feature.properties).filter((prop) => !geometryKeys.includes(prop));
|
|
29954
|
+
}
|
|
29955
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29956
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeatureDetailComponent, isStandalone: true, selector: "gn-ui-feature-detail", inputs: { feature: "feature" }, ngImport: i0, template: "<div *ngIf=\"feature\" class=\"root\">\n <div class=\"property\" *ngFor=\"let propName of properties\">\n <div>{{ propName }}</div>\n <div class=\"font-bold\">{{ feature.properties[propName] }}</div>\n </div>\n</div>\n", styles: [".property{border-bottom:1px solid #f2f2f2;padding-bottom:.625rem;margin-bottom:.625rem;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
29957
|
+
}
|
|
29958
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureDetailComponent, decorators: [{
|
|
29959
|
+
type: Component,
|
|
29960
|
+
args: [{ selector: 'gn-ui-feature-detail', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div *ngIf=\"feature\" class=\"root\">\n <div class=\"property\" *ngFor=\"let propName of properties\">\n <div>{{ propName }}</div>\n <div class=\"font-bold\">{{ feature.properties[propName] }}</div>\n </div>\n</div>\n", styles: [".property{border-bottom:1px solid #f2f2f2;padding-bottom:.625rem;margin-bottom:.625rem;font-size:.75rem}\n"] }]
|
|
29961
|
+
}], propDecorators: { feature: [{
|
|
29962
|
+
type: Input
|
|
29963
|
+
}] } });
|
|
29964
|
+
|
|
29965
|
+
class MapLegendComponent {
|
|
29966
|
+
constructor() {
|
|
29967
|
+
this.legendStatusChange = new EventEmitter();
|
|
29968
|
+
}
|
|
29969
|
+
async ngOnChanges(changes) {
|
|
29970
|
+
if ('context' in changes) {
|
|
29971
|
+
const mapContext = changes['context'].currentValue;
|
|
29972
|
+
if (mapContext.layers && mapContext.layers.length > 0) {
|
|
29973
|
+
const mapContextLayer = mapContext.layers[0];
|
|
29974
|
+
this.legendHTML = await createLegendFromLayer(mapContextLayer);
|
|
29975
|
+
if (this.legendHTML) {
|
|
29976
|
+
this.legendStatusChange.emit(true);
|
|
29977
|
+
}
|
|
29978
|
+
}
|
|
29979
|
+
else {
|
|
29980
|
+
this.legendHTML = false;
|
|
29981
|
+
this.legendStatusChange.emit(false);
|
|
29982
|
+
}
|
|
29983
|
+
}
|
|
29984
|
+
}
|
|
29985
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29986
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapLegendComponent, isStandalone: true, selector: "gn-ui-map-legend", inputs: { context: "context" }, outputs: { legendStatusChange: "legendStatusChange" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"legendHTML\" [innerHTML]=\"legendHTML.outerHTML\"></div>\n", styles: [".geosdk--legend-container{overflow:auto;white-space:normal;word-wrap:break-word}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
29987
|
+
}
|
|
29988
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendComponent, decorators: [{
|
|
29989
|
+
type: Component,
|
|
29990
|
+
args: [{ selector: 'gn-ui-map-legend', standalone: true, encapsulation: ViewEncapsulation.None, imports: [NgIf], template: "<div *ngIf=\"legendHTML\" [innerHTML]=\"legendHTML.outerHTML\"></div>\n", styles: [".geosdk--legend-container{overflow:auto;white-space:normal;word-wrap:break-word}\n"] }]
|
|
29991
|
+
}], propDecorators: { context: [{
|
|
29992
|
+
type: Input
|
|
29993
|
+
}], legendStatusChange: [{
|
|
29994
|
+
type: Output
|
|
29995
|
+
}] } });
|
|
29996
|
+
|
|
29997
|
+
function prioritizePageScroll(interactions) {
|
|
29998
|
+
interactions.clear();
|
|
29999
|
+
interactions.extend(defaults({
|
|
30000
|
+
// remove rotate interactions
|
|
30001
|
+
altShiftDragRotate: false,
|
|
30002
|
+
pinchRotate: false,
|
|
30003
|
+
// replace drag and zoom interactions
|
|
30004
|
+
dragPan: false,
|
|
30005
|
+
mouseWheelZoom: false,
|
|
30006
|
+
})
|
|
30007
|
+
.extend([
|
|
30008
|
+
new DragPan({
|
|
30009
|
+
condition: dragPanCondition,
|
|
30010
|
+
}),
|
|
30011
|
+
new MouseWheelZoom({
|
|
30012
|
+
condition: mouseWheelZoomCondition,
|
|
30013
|
+
}),
|
|
30014
|
+
])
|
|
30015
|
+
.getArray());
|
|
30016
|
+
}
|
|
30017
|
+
function dragPanCondition(event) {
|
|
30018
|
+
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
30019
|
+
if (!dragPanCondition) {
|
|
30020
|
+
this.getMap().dispatchEvent('mapmuted');
|
|
30021
|
+
}
|
|
30022
|
+
// combine the condition with the default DragPan conditions
|
|
30023
|
+
return dragPanCondition && noModifierKeys(event) && primaryAction(event);
|
|
30024
|
+
}
|
|
30025
|
+
function mouseWheelZoomCondition(event) {
|
|
30026
|
+
if (!platformModifierKeyOnly(event) && event.type === 'wheel') {
|
|
30027
|
+
this.getMap().dispatchEvent('mapmuted');
|
|
30028
|
+
}
|
|
30029
|
+
return platformModifierKeyOnly(event);
|
|
30030
|
+
}
|
|
30031
|
+
|
|
30032
|
+
class SpatialExtentComponent {
|
|
30033
|
+
constructor() {
|
|
30034
|
+
this.spatialExtents$ = new BehaviorSubject([]);
|
|
30035
|
+
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1(async (extents) => {
|
|
30036
|
+
if (extents.length === 0) {
|
|
30037
|
+
return null; // null extent means default view
|
|
30038
|
+
}
|
|
30039
|
+
const featureCollection = {
|
|
30040
|
+
type: 'FeatureCollection',
|
|
30041
|
+
features: [],
|
|
30042
|
+
};
|
|
30043
|
+
extents.forEach((extent) => {
|
|
30044
|
+
if (extent.geometry) {
|
|
30045
|
+
featureCollection.features.push({
|
|
30046
|
+
type: 'Feature',
|
|
30047
|
+
properties: {},
|
|
30048
|
+
geometry: extent.geometry,
|
|
30049
|
+
});
|
|
30050
|
+
}
|
|
30051
|
+
else if (extent.bbox?.length >= 0) {
|
|
30052
|
+
featureCollection.features.push({
|
|
30053
|
+
type: 'Feature',
|
|
30054
|
+
properties: {},
|
|
30055
|
+
geometry: this.bboxCoordsToGeometry(extent.bbox),
|
|
30056
|
+
});
|
|
30057
|
+
}
|
|
30058
|
+
});
|
|
30059
|
+
const layer = {
|
|
30060
|
+
type: 'geojson',
|
|
30061
|
+
data: featureCollection,
|
|
30062
|
+
label: 'Spatial extents',
|
|
30063
|
+
style: {
|
|
30064
|
+
'stroke-color': 'black',
|
|
30065
|
+
'stroke-width': 2,
|
|
30066
|
+
},
|
|
30067
|
+
};
|
|
30068
|
+
const view = await createViewFromLayer(layer);
|
|
30069
|
+
return {
|
|
30070
|
+
view,
|
|
30071
|
+
layers: [layer],
|
|
30072
|
+
};
|
|
30073
|
+
}));
|
|
30074
|
+
this.error = '';
|
|
30075
|
+
}
|
|
30076
|
+
set spatialExtents(value) {
|
|
30077
|
+
this.spatialExtents$.next(value);
|
|
30078
|
+
}
|
|
30079
|
+
bboxCoordsToGeometry(bbox) {
|
|
30080
|
+
const geometry = new Polygon([
|
|
30081
|
+
[
|
|
30082
|
+
[bbox[0], bbox[1]],
|
|
30083
|
+
[bbox[0], bbox[3]],
|
|
30084
|
+
[bbox[2], bbox[3]],
|
|
30085
|
+
[bbox[2], bbox[1]],
|
|
30086
|
+
[bbox[0], bbox[1]],
|
|
30087
|
+
],
|
|
30088
|
+
]);
|
|
30089
|
+
return new GeoJSON().writeGeometryObject(geometry);
|
|
30090
|
+
}
|
|
30091
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpatialExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30092
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SpatialExtentComponent, isStandalone: true, selector: "gn-ui-spatial-extent", inputs: { spatialExtents: "spatialExtents" }, ngImport: i0, template: "<gn-ui-map-container\n class=\"h-full w-full\"\n [context]=\"mapContext$ | async\"\n></gn-ui-map-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }] }); }
|
|
30093
|
+
}
|
|
30094
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpatialExtentComponent, decorators: [{
|
|
30095
|
+
type: Component,
|
|
30096
|
+
args: [{ selector: 'gn-ui-spatial-extent', standalone: true, imports: [CommonModule, MapContainerComponent], template: "<gn-ui-map-container\n class=\"h-full w-full\"\n [context]=\"mapContext$ | async\"\n></gn-ui-map-container>\n" }]
|
|
30097
|
+
}], propDecorators: { spatialExtents: [{
|
|
30098
|
+
type: Input
|
|
30099
|
+
}] } });
|
|
30100
|
+
|
|
29526
30101
|
class MetadataInfoComponent {
|
|
29527
30102
|
constructor(dateService) {
|
|
29528
30103
|
this.dateService = dateService;
|
|
@@ -29575,7 +30150,7 @@ class MetadataInfoComponent {
|
|
|
29575
30150
|
}
|
|
29576
30151
|
}
|
|
29577
30152
|
get temporalExtent() {
|
|
29578
|
-
const temporalExtents = this.metadata.temporalExtents;
|
|
30153
|
+
const temporalExtents = this.metadata.kind === 'dataset' ? this.metadata.temporalExtents : [];
|
|
29579
30154
|
return getTemporalRangeUnion(temporalExtents, this.dateService);
|
|
29580
30155
|
}
|
|
29581
30156
|
get shownOrganization() {
|
|
@@ -29597,7 +30172,7 @@ class MetadataInfoComponent {
|
|
|
29597
30172
|
return this.dateService.formatDateTime(date);
|
|
29598
30173
|
}
|
|
29599
30174
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataInfoComponent, deps: [{ token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29600
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-primary text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }], viewProviders: [
|
|
30175
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.kind !== 'dataset' && metadata.spatialExtents\"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
|
|
29601
30176
|
provideIcons({
|
|
29602
30177
|
matOpenInNew,
|
|
29603
30178
|
matMailOutline: matMailOutline$1,
|
|
@@ -29618,12 +30193,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
29618
30193
|
CopyTextButtonComponent,
|
|
29619
30194
|
NgIcon,
|
|
29620
30195
|
GnUiLinkifyDirective,
|
|
30196
|
+
MapContainerComponent,
|
|
30197
|
+
SpatialExtentComponent,
|
|
29621
30198
|
], viewProviders: [
|
|
29622
30199
|
provideIcons({
|
|
29623
30200
|
matOpenInNew,
|
|
29624
30201
|
matMailOutline: matMailOutline$1,
|
|
29625
30202
|
}),
|
|
29626
|
-
], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-primary text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}\n"] }]
|
|
30203
|
+
], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.kind !== 'dataset' && metadata.spatialExtents\"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
|
|
29627
30204
|
}], ctorParameters: () => [{ type: DateService }], propDecorators: { metadata: [{
|
|
29628
30205
|
type: Input
|
|
29629
30206
|
}], incomplete: [{
|
|
@@ -29995,7 +30572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
29995
30572
|
type: Input
|
|
29996
30573
|
}] } });
|
|
29997
30574
|
|
|
29998
|
-
marker('record.kind.
|
|
30575
|
+
marker('record.kind.data');
|
|
29999
30576
|
marker('record.kind.reuse');
|
|
30000
30577
|
marker('record.kind.service');
|
|
30001
30578
|
class InternalLinkCardComponent {
|
|
@@ -30075,7 +30652,7 @@ class InternalLinkCardComponent {
|
|
|
30075
30652
|
return { text: '', icon: '' };
|
|
30076
30653
|
switch (this.record.kind.toLowerCase()) {
|
|
30077
30654
|
case 'dataset':
|
|
30078
|
-
return { text: 'record.kind.
|
|
30655
|
+
return { text: 'record.kind.data', icon: 'iconoirDatabase' };
|
|
30079
30656
|
case 'reuse':
|
|
30080
30657
|
return { text: 'record.kind.reuse', icon: 'iconoirMap' };
|
|
30081
30658
|
case 'service':
|
|
@@ -30143,6 +30720,154 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
30143
30720
|
type: Output
|
|
30144
30721
|
}] } });
|
|
30145
30722
|
|
|
30723
|
+
marker(`service.metadata.search`);
|
|
30724
|
+
marker(`service.metadata.capabilities.title`);
|
|
30725
|
+
marker(`service.metadata.capabilities.abstract`);
|
|
30726
|
+
marker(`service.metadata.capabilities.name`);
|
|
30727
|
+
marker(`service.metadata.capabilities.defaultCrs`);
|
|
30728
|
+
marker(`service.metadata.capabilities.availableCrs`);
|
|
30729
|
+
marker(`service.metadata.capabilities.otherCrs`);
|
|
30730
|
+
marker(`service.metadata.capabilities.objectCount`);
|
|
30731
|
+
marker(`service.metadata.capabilities.geometryName`);
|
|
30732
|
+
marker(`service.metadata.capabilities.geometryType`);
|
|
30733
|
+
marker(`service.metadata.capabilities.keywords`);
|
|
30734
|
+
marker(`service.metadata.capabilities.outputFormats`);
|
|
30735
|
+
marker(`service.metadata.capabilities.resourceLinks`);
|
|
30736
|
+
marker(`service.metadata.capabilities.attribution`);
|
|
30737
|
+
class ServiceCapabilitiesComponent {
|
|
30738
|
+
constructor(cdr, translateService) {
|
|
30739
|
+
this.cdr = cdr;
|
|
30740
|
+
this.translateService = translateService;
|
|
30741
|
+
this.apiLinks = [];
|
|
30742
|
+
this.availableLayers = [];
|
|
30743
|
+
this.filteredLayers = [];
|
|
30744
|
+
this.selectedLayer = null;
|
|
30745
|
+
this.layerInformation = [];
|
|
30746
|
+
this.searchQuery = '';
|
|
30747
|
+
this.loading = false;
|
|
30748
|
+
this.capabilitiesKeys = [
|
|
30749
|
+
'title',
|
|
30750
|
+
'abstract',
|
|
30751
|
+
'name',
|
|
30752
|
+
'defaultCrs',
|
|
30753
|
+
'availableCrs',
|
|
30754
|
+
'otherCrs',
|
|
30755
|
+
'objectCount',
|
|
30756
|
+
'geometryName',
|
|
30757
|
+
'geometryType',
|
|
30758
|
+
'keywords',
|
|
30759
|
+
'outputFormats',
|
|
30760
|
+
'resourceLinks',
|
|
30761
|
+
'attribution',
|
|
30762
|
+
];
|
|
30763
|
+
}
|
|
30764
|
+
ngOnInit() {
|
|
30765
|
+
this.loadLayers();
|
|
30766
|
+
}
|
|
30767
|
+
onSearchChange(event) {
|
|
30768
|
+
const input = event.target;
|
|
30769
|
+
this.searchQuery = input.value;
|
|
30770
|
+
if (!input.value) {
|
|
30771
|
+
this.searchActive = false;
|
|
30772
|
+
this.filteredLayers = this.availableLayers;
|
|
30773
|
+
}
|
|
30774
|
+
}
|
|
30775
|
+
onSearchEnter(event) {
|
|
30776
|
+
if (event.key === 'Enter') {
|
|
30777
|
+
this.searchActive = true;
|
|
30778
|
+
this.searchLayers();
|
|
30779
|
+
}
|
|
30780
|
+
}
|
|
30781
|
+
async loadLayers() {
|
|
30782
|
+
if (this.apiLinks.length > 0 &&
|
|
30783
|
+
this.apiLinks[0].accessServiceProtocol !== 'ogcFeatures') {
|
|
30784
|
+
this.loading = true;
|
|
30785
|
+
this.availableLayers = await getLayers(this.apiLinks[0].url.href, this.apiLinks[0].accessServiceProtocol);
|
|
30786
|
+
this.loading = false;
|
|
30787
|
+
this.cdr.detectChanges();
|
|
30788
|
+
this.filteredLayers = this.availableLayers;
|
|
30789
|
+
}
|
|
30790
|
+
else {
|
|
30791
|
+
this.availableLayers = [];
|
|
30792
|
+
}
|
|
30793
|
+
}
|
|
30794
|
+
selectLayer(layer) {
|
|
30795
|
+
if (layer === this.selectedLayer) {
|
|
30796
|
+
this.selectedLayer = null;
|
|
30797
|
+
this.layerInformation = [];
|
|
30798
|
+
return;
|
|
30799
|
+
}
|
|
30800
|
+
this.selectedLayer = layer;
|
|
30801
|
+
const filteredInfo = [];
|
|
30802
|
+
Object.keys(layer).map((key) => {
|
|
30803
|
+
if (this.capabilitiesKeys.includes(key)) {
|
|
30804
|
+
const displayName = this.translateService.instant(`service.metadata.capabilities.${key}`);
|
|
30805
|
+
if (key in layer && layer[key]?.length) {
|
|
30806
|
+
filteredInfo.push({ displayName, value: layer[key] });
|
|
30807
|
+
}
|
|
30808
|
+
}
|
|
30809
|
+
});
|
|
30810
|
+
this.layerInformation = filteredInfo;
|
|
30811
|
+
}
|
|
30812
|
+
isList(value) {
|
|
30813
|
+
return Array.isArray(value);
|
|
30814
|
+
}
|
|
30815
|
+
getExtraInputClass() {
|
|
30816
|
+
if (this.searchActive) {
|
|
30817
|
+
return 'h-14 border rounded-lg border-primary text-primary focus:border-primary hover:border-primary';
|
|
30818
|
+
}
|
|
30819
|
+
return 'h-14 border rounded-lg';
|
|
30820
|
+
}
|
|
30821
|
+
searchLayers() {
|
|
30822
|
+
this.searchActive = true;
|
|
30823
|
+
this.filteredLayers = this.availableLayers.filter((layer) => {
|
|
30824
|
+
const query = this.searchQuery.toLowerCase();
|
|
30825
|
+
if (layer.title) {
|
|
30826
|
+
return (layer.title.toLowerCase().includes(query) ||
|
|
30827
|
+
layer.abstract?.toLowerCase().includes(query));
|
|
30828
|
+
}
|
|
30829
|
+
else {
|
|
30830
|
+
return layer.name.toLowerCase().includes(query);
|
|
30831
|
+
}
|
|
30832
|
+
});
|
|
30833
|
+
if (!this.filteredLayers.includes(this.selectedLayer)) {
|
|
30834
|
+
this.selectedLayer = null;
|
|
30835
|
+
this.layerInformation = [];
|
|
30836
|
+
}
|
|
30837
|
+
}
|
|
30838
|
+
getExtraClass(layerItem) {
|
|
30839
|
+
return layerItem.title === this.selectedLayer?.title
|
|
30840
|
+
? `h-8 rounded-lg bg-primary-darker text-white hover:text-primary-darker hover:bg-white`
|
|
30841
|
+
: `h-8 rounded-lg`;
|
|
30842
|
+
}
|
|
30843
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceCapabilitiesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30844
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ServiceCapabilitiesComponent, isStandalone: true, selector: "gn-ui-service-capabilities", inputs: { apiLinks: "apiLinks" }, ngImport: i0, template: "<div style=\"height: 652px\" id=\"preview\" *ngIf=\"apiLinks.length > 0\">\n <div class=\"bg-primary-opacity-10 overflow-visible\" style=\"height: 512px\">\n <div class=\"container-lg px-4 lg:mx-auto\">\n <div>\n <div class=\"gn-ui-section-title mb-6\" translate>\n service.metadata.capabilities\n </div>\n <div\n *ngIf=\"loading\"\n class=\"flex justify-center w-full h-[200px] items-center\"\n >\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n <div *ngIf=\"!loading\">\n <div class=\"flex flex-row gap-5\">\n <div class=\"h-14 md:w-2/5 w-full mb-4 flex flex-row relative\">\n <gn-ui-text-input\n class=\"w-full\"\n [extraClass]=\"getExtraInputClass()\"\n [placeholder]=\"'service.metadata.search' | translate\"\n (input)=\"onSearchChange($event)\"\n (keydown.enter)=\"onSearchEnter($event)\"\n >\n </gn-ui-text-input>\n <div class=\"border-l absolute border-gray-200 right-0 h-14 w-14\">\n <gn-ui-button\n #inputBtn\n type=\"outline\"\n extraClass=\"h-12 w-12 border-0 absolute right-1 top-1\"\n (buttonClick)=\"searchLayers()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n </div>\n </div>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light\"\n class=\"w-14 h-14 border border-gray-300 rounded-lg flex justify-center items-center\"\n >\n <ng-icon name=\"matInfoOutline\" class=\"w-6 h-6 pt-0.5\"></ng-icon>\n </gn-ui-popover>\n </div>\n <div\n style=\"height: 500px\"\n class=\"bg-white shadow-xl rounded p-0 flex md:flex-row flex-col\"\n >\n <div\n class=\"flex flex-col gap-2 bg-gray-100 md:w-1/2 md:h-full w-full h-1/2 rounded-l overflow-y-auto py-5 pr-1 pl-3\"\n data-test=\"layer-list\"\n >\n <gn-ui-button\n *ngFor=\"let layerItem of filteredLayers\"\n type=\"outline\"\n [extraClass]=\"getExtraClass(layerItem)\"\n (buttonClick)=\"selectLayer(layerItem)\"\n >\n {{ layerItem.title || layerItem.name }}\n </gn-ui-button>\n <span *ngIf=\"filteredLayers.length === 0\" class=\"text-gray-800\">\n {{ 'service.metadata.filter.noLayers' | translate }}\n </span>\n </div>\n <div\n data-test=\"layer-information\"\n class=\"flex flex-col gap-4 md:h-full md:w-1/2 w-full h-1/2 py-5 px-10 overflow-y-auto\"\n >\n <div\n *ngFor=\"let item of layerInformation\"\n class=\"flex flex-row gap-4 border-b border-gray-200\"\n >\n <span class=\"font-semibold w-24\">{{ item.displayName }}</span>\n <div *ngIf=\"isList(item.value)\">\n <div\n *ngFor=\"let subItem of item.value\"\n class=\"flex flex-row break-words max-w-72\"\n >\n {{ subItem }}\n </div>\n </div>\n <div class=\"break-words max-w-72\" *ngIf=\"!isList(item.value)\">\n {{ item.value }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div translate>service.metadata.filter</div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }], viewProviders: [
|
|
30845
|
+
provideIcons({
|
|
30846
|
+
iconoirSearch,
|
|
30847
|
+
matInfoOutline,
|
|
30848
|
+
}),
|
|
30849
|
+
] }); }
|
|
30850
|
+
}
|
|
30851
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceCapabilitiesComponent, decorators: [{
|
|
30852
|
+
type: Component,
|
|
30853
|
+
args: [{ selector: 'gn-ui-service-capabilities', standalone: true, imports: [
|
|
30854
|
+
CommonModule,
|
|
30855
|
+
TranslateModule,
|
|
30856
|
+
ButtonComponent,
|
|
30857
|
+
TextInputComponent,
|
|
30858
|
+
NgIcon,
|
|
30859
|
+
PopoverComponent,
|
|
30860
|
+
SpinningLoaderComponent,
|
|
30861
|
+
], viewProviders: [
|
|
30862
|
+
provideIcons({
|
|
30863
|
+
iconoirSearch,
|
|
30864
|
+
matInfoOutline,
|
|
30865
|
+
}),
|
|
30866
|
+
], template: "<div style=\"height: 652px\" id=\"preview\" *ngIf=\"apiLinks.length > 0\">\n <div class=\"bg-primary-opacity-10 overflow-visible\" style=\"height: 512px\">\n <div class=\"container-lg px-4 lg:mx-auto\">\n <div>\n <div class=\"gn-ui-section-title mb-6\" translate>\n service.metadata.capabilities\n </div>\n <div\n *ngIf=\"loading\"\n class=\"flex justify-center w-full h-[200px] items-center\"\n >\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n <div *ngIf=\"!loading\">\n <div class=\"flex flex-row gap-5\">\n <div class=\"h-14 md:w-2/5 w-full mb-4 flex flex-row relative\">\n <gn-ui-text-input\n class=\"w-full\"\n [extraClass]=\"getExtraInputClass()\"\n [placeholder]=\"'service.metadata.search' | translate\"\n (input)=\"onSearchChange($event)\"\n (keydown.enter)=\"onSearchEnter($event)\"\n >\n </gn-ui-text-input>\n <div class=\"border-l absolute border-gray-200 right-0 h-14 w-14\">\n <gn-ui-button\n #inputBtn\n type=\"outline\"\n extraClass=\"h-12 w-12 border-0 absolute right-1 top-1\"\n (buttonClick)=\"searchLayers()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n </div>\n </div>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light\"\n class=\"w-14 h-14 border border-gray-300 rounded-lg flex justify-center items-center\"\n >\n <ng-icon name=\"matInfoOutline\" class=\"w-6 h-6 pt-0.5\"></ng-icon>\n </gn-ui-popover>\n </div>\n <div\n style=\"height: 500px\"\n class=\"bg-white shadow-xl rounded p-0 flex md:flex-row flex-col\"\n >\n <div\n class=\"flex flex-col gap-2 bg-gray-100 md:w-1/2 md:h-full w-full h-1/2 rounded-l overflow-y-auto py-5 pr-1 pl-3\"\n data-test=\"layer-list\"\n >\n <gn-ui-button\n *ngFor=\"let layerItem of filteredLayers\"\n type=\"outline\"\n [extraClass]=\"getExtraClass(layerItem)\"\n (buttonClick)=\"selectLayer(layerItem)\"\n >\n {{ layerItem.title || layerItem.name }}\n </gn-ui-button>\n <span *ngIf=\"filteredLayers.length === 0\" class=\"text-gray-800\">\n {{ 'service.metadata.filter.noLayers' | translate }}\n </span>\n </div>\n <div\n data-test=\"layer-information\"\n class=\"flex flex-col gap-4 md:h-full md:w-1/2 w-full h-1/2 py-5 px-10 overflow-y-auto\"\n >\n <div\n *ngFor=\"let item of layerInformation\"\n class=\"flex flex-row gap-4 border-b border-gray-200\"\n >\n <span class=\"font-semibold w-24\">{{ item.displayName }}</span>\n <div *ngIf=\"isList(item.value)\">\n <div\n *ngFor=\"let subItem of item.value\"\n class=\"flex flex-row break-words max-w-72\"\n >\n {{ subItem }}\n </div>\n </div>\n <div class=\"break-words max-w-72\" *ngIf=\"!isList(item.value)\">\n {{ item.value }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div translate>service.metadata.filter</div>\n </div>\n</ng-template>\n" }]
|
|
30867
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { apiLinks: [{
|
|
30868
|
+
type: Input
|
|
30869
|
+
}] } });
|
|
30870
|
+
|
|
30146
30871
|
class UiElementsModule {
|
|
30147
30872
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
30148
30873
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
|
|
@@ -30162,13 +30887,15 @@ class UiElementsModule {
|
|
|
30162
30887
|
TextInputComponent,
|
|
30163
30888
|
ImageInputComponent,
|
|
30164
30889
|
ApplicationBannerComponent,
|
|
30165
|
-
InternalLinkCardComponent
|
|
30890
|
+
InternalLinkCardComponent,
|
|
30891
|
+
ServiceCapabilitiesComponent], exports: [ThumbnailComponent,
|
|
30166
30892
|
AvatarComponent,
|
|
30167
30893
|
UserPreviewComponent,
|
|
30168
30894
|
MarkdownParserComponent,
|
|
30169
30895
|
ImageInputComponent,
|
|
30170
30896
|
ApplicationBannerComponent,
|
|
30171
|
-
InternalLinkCardComponent
|
|
30897
|
+
InternalLinkCardComponent,
|
|
30898
|
+
ServiceCapabilitiesComponent] }); }
|
|
30172
30899
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
|
|
30173
30900
|
provideNgIconsConfig({
|
|
30174
30901
|
size: '1.5em',
|
|
@@ -30189,7 +30916,8 @@ class UiElementsModule {
|
|
|
30189
30916
|
TextInputComponent,
|
|
30190
30917
|
ImageInputComponent,
|
|
30191
30918
|
ApplicationBannerComponent,
|
|
30192
|
-
InternalLinkCardComponent
|
|
30919
|
+
InternalLinkCardComponent,
|
|
30920
|
+
ServiceCapabilitiesComponent] }); }
|
|
30193
30921
|
}
|
|
30194
30922
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
|
|
30195
30923
|
type: NgModule,
|
|
@@ -30215,6 +30943,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
30215
30943
|
ImageInputComponent,
|
|
30216
30944
|
ApplicationBannerComponent,
|
|
30217
30945
|
InternalLinkCardComponent,
|
|
30946
|
+
ServiceCapabilitiesComponent,
|
|
30218
30947
|
],
|
|
30219
30948
|
providers: [
|
|
30220
30949
|
provideNgIconsConfig({
|
|
@@ -30230,6 +30959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
30230
30959
|
ImageInputComponent,
|
|
30231
30960
|
ApplicationBannerComponent,
|
|
30232
30961
|
InternalLinkCardComponent,
|
|
30962
|
+
ServiceCapabilitiesComponent,
|
|
30233
30963
|
],
|
|
30234
30964
|
}]
|
|
30235
30965
|
}] });
|
|
@@ -30570,8 +31300,9 @@ class ResultsTableComponent {
|
|
|
30570
31300
|
return getBadgeColor(format);
|
|
30571
31301
|
}
|
|
30572
31302
|
handleRecordClick(item) {
|
|
30573
|
-
if (item?.extras?.edit || this.isDraftPage)
|
|
31303
|
+
if ((item?.extras?.edit || this.isDraftPage) && item.kind === 'dataset') {
|
|
30574
31304
|
this.recordClick.emit(item);
|
|
31305
|
+
}
|
|
30575
31306
|
}
|
|
30576
31307
|
handleDuplicate(item) {
|
|
30577
31308
|
this.duplicateRecord.emit(item);
|
|
@@ -30608,7 +31339,7 @@ class ResultsTableComponent {
|
|
|
30608
31339
|
this.recordsSelectedChange.emit([[record], selected]);
|
|
30609
31340
|
}
|
|
30610
31341
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, deps: [{ token: i1$9.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30611
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", rollbackDraft: "rollbackDraft", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light'
|
|
31342
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", rollbackDraft: "rollbackDraft", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"(!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"(item.extras?.edit || isDraftPage) && item.kind === 'dataset'\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'\n \"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light':\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete", "isDraftPage"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
|
|
30612
31343
|
}
|
|
30613
31344
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
30614
31345
|
type: Component,
|
|
@@ -30622,7 +31353,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
30622
31353
|
ActionMenuComponent,
|
|
30623
31354
|
NgIconComponent,
|
|
30624
31355
|
CdkOverlayOrigin,
|
|
30625
|
-
], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light'
|
|
31356
|
+
], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"(!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"(item.extras?.edit || isDraftPage) && item.kind === 'dataset'\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'\n \"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light':\n (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
|
|
30626
31357
|
}], ctorParameters: () => [{ type: i1$9.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: DateService }], propDecorators: { records: [{
|
|
30627
31358
|
type: Input
|
|
30628
31359
|
}], selectedRecordsIdentifiers: [{
|
|
@@ -31653,9 +32384,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
31653
32384
|
type: Injectable
|
|
31654
32385
|
}], ctorParameters: () => [{ type: SearchFacade }] });
|
|
31655
32386
|
|
|
31656
|
-
class RecordsRepositoryInterface {
|
|
31657
|
-
}
|
|
31658
|
-
|
|
31659
32387
|
class FuzzySearchComponent {
|
|
31660
32388
|
constructor(searchFacade, searchService, recordsRepository) {
|
|
31661
32389
|
this.searchFacade = searchFacade;
|
|
@@ -31794,7 +32522,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
31794
32522
|
}] }] });
|
|
31795
32523
|
|
|
31796
32524
|
// expects the replacement key ${uuid}
|
|
31797
|
-
const
|
|
32525
|
+
const RECORD_DATASET_URL_TOKEN = new InjectionToken('record-dataset-url-token');
|
|
32526
|
+
const RECORD_SERVICE_URL_TOKEN = new InjectionToken('record-service-url-token');
|
|
32527
|
+
const RECORD_REUSE_URL_TOKEN = new InjectionToken('record-reuse-url-token');
|
|
31798
32528
|
|
|
31799
32529
|
class FavoriteStarComponent {
|
|
31800
32530
|
set record(value) {
|
|
@@ -31880,11 +32610,11 @@ class FavoriteStarComponent {
|
|
|
31880
32610
|
});
|
|
31881
32611
|
}
|
|
31882
32612
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31883
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FavoriteStarComponent, isStandalone: true, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 mt-0.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32613
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FavoriteStarComponent, isStandalone: true, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 mt-0.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31884
32614
|
}
|
|
31885
32615
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
31886
32616
|
type: Component,
|
|
31887
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, StarToggleComponent], template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 mt-0.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n" }]
|
|
32617
|
+
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, StarToggleComponent, TranslateModule], template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 mt-0.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n" }]
|
|
31888
32618
|
}], ctorParameters: () => [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }], propDecorators: { displayCount: [{
|
|
31889
32619
|
type: Input
|
|
31890
32620
|
}], record: [{
|
|
@@ -31895,10 +32625,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
31895
32625
|
}] } });
|
|
31896
32626
|
|
|
31897
32627
|
class ResultsListContainerComponent {
|
|
31898
|
-
constructor(facade, resultsLayoutConfig,
|
|
32628
|
+
constructor(facade, resultsLayoutConfig, recordDatasetUrlTemplate, recordServiceUrlTemplate, recordReuseUrlTemplate) {
|
|
31899
32629
|
this.facade = facade;
|
|
31900
32630
|
this.resultsLayoutConfig = resultsLayoutConfig;
|
|
31901
|
-
this.
|
|
32631
|
+
this.recordDatasetUrlTemplate = recordDatasetUrlTemplate;
|
|
32632
|
+
this.recordServiceUrlTemplate = recordServiceUrlTemplate;
|
|
32633
|
+
this.recordReuseUrlTemplate = recordReuseUrlTemplate;
|
|
31902
32634
|
this.showMore = 'auto';
|
|
31903
32635
|
this.mdSelect = new EventEmitter();
|
|
31904
32636
|
this.errorTypes = ErrorType;
|
|
@@ -31930,16 +32662,24 @@ class ResultsListContainerComponent {
|
|
|
31930
32662
|
this.facade.scroll();
|
|
31931
32663
|
}
|
|
31932
32664
|
getRecordUrl(metadata) {
|
|
31933
|
-
|
|
32665
|
+
const tokenMap = {
|
|
32666
|
+
dataset: this.recordDatasetUrlTemplate,
|
|
32667
|
+
service: this.recordServiceUrlTemplate,
|
|
32668
|
+
reuse: this.recordReuseUrlTemplate,
|
|
32669
|
+
};
|
|
32670
|
+
if (!this.recordDatasetUrlTemplate &&
|
|
32671
|
+
!this.recordServiceUrlTemplate &&
|
|
32672
|
+
!this.recordReuseUrlTemplate)
|
|
31934
32673
|
return null;
|
|
31935
|
-
|
|
32674
|
+
const urlKind = tokenMap[metadata.kind];
|
|
32675
|
+
return urlKind.replace('${uuid}', metadata.uniqueIdentifier);
|
|
31936
32676
|
}
|
|
31937
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsListContainerComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }, { token:
|
|
31938
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container *ngIf=\"allowShowMore$ | async\">\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-error>\n <gn-ui-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [":host{--gn-ui-button-height: 24px;--gn-ui-button-width: 24px;--gn-ui-button-color: var(--color-secondary);--gn-ui-button-border-width: 0px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: ErrorComponent, selector: "gn-ui-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["displayCount", "record"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
|
|
32677
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsListContainerComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }, { token: RECORD_DATASET_URL_TOKEN, optional: true }, { token: RECORD_SERVICE_URL_TOKEN }, { token: RECORD_REUSE_URL_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32678
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container *ngIf=\"allowShowMore$ | async\">\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n [style.--gn-ui-button-width]=\"!auto\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-error>\n <gn-ui-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [":host{--gn-ui-button-height: 24px;--gn-ui-button-width: 24px;--gn-ui-button-color: var(--color-secondary);--gn-ui-button-border-width: 0px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: ErrorComponent, selector: "gn-ui-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["displayCount", "record"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
|
|
31939
32679
|
}
|
|
31940
32680
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
|
|
31941
32681
|
type: Component,
|
|
31942
|
-
args: [{ selector: 'gn-ui-results-list-container', template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container *ngIf=\"allowShowMore$ | async\">\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-error>\n <gn-ui-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [":host{--gn-ui-button-height: 24px;--gn-ui-button-width: 24px;--gn-ui-button-color: var(--color-secondary);--gn-ui-button-border-width: 0px}\n"] }]
|
|
32682
|
+
args: [{ selector: 'gn-ui-results-list-container', template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container *ngIf=\"allowShowMore$ | async\">\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n [style.--gn-ui-button-width]=\"!auto\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-error>\n <gn-ui-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [":host{--gn-ui-button-height: 24px;--gn-ui-button-width: 24px;--gn-ui-button-color: var(--color-secondary);--gn-ui-button-border-width: 0px}\n"] }]
|
|
31943
32683
|
}], ctorParameters: () => [{ type: SearchFacade }, { type: undefined, decorators: [{
|
|
31944
32684
|
type: Inject,
|
|
31945
32685
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
@@ -31947,7 +32687,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
31947
32687
|
type: Optional
|
|
31948
32688
|
}, {
|
|
31949
32689
|
type: Inject,
|
|
31950
|
-
args: [
|
|
32690
|
+
args: [RECORD_DATASET_URL_TOKEN]
|
|
32691
|
+
}] }, { type: undefined, decorators: [{
|
|
32692
|
+
type: Inject,
|
|
32693
|
+
args: [RECORD_SERVICE_URL_TOKEN]
|
|
32694
|
+
}] }, { type: undefined, decorators: [{
|
|
32695
|
+
type: Inject,
|
|
32696
|
+
args: [RECORD_REUSE_URL_TOKEN]
|
|
31951
32697
|
}] }], propDecorators: { metadataQualityDisplay: [{
|
|
31952
32698
|
type: Input
|
|
31953
32699
|
}], layout: [{
|
|
@@ -32699,12 +33445,7 @@ class FeatureSearchModule {
|
|
|
32699
33445
|
FacetsModule,
|
|
32700
33446
|
SearchStateContainerDirective,
|
|
32701
33447
|
FilterDropdownComponent] }); }
|
|
32702
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureSearchModule,
|
|
32703
|
-
{
|
|
32704
|
-
provide: RecordsRepositoryInterface,
|
|
32705
|
-
useClass: Gn4Repository,
|
|
32706
|
-
},
|
|
32707
|
-
], imports: [CommonModule,
|
|
33448
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureSearchModule, imports: [CommonModule,
|
|
32708
33449
|
TranslateModule.forChild(),
|
|
32709
33450
|
StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
|
|
32710
33451
|
initialState,
|
|
@@ -32766,12 +33507,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
32766
33507
|
SearchStateContainerDirective,
|
|
32767
33508
|
FilterDropdownComponent,
|
|
32768
33509
|
],
|
|
32769
|
-
providers: [
|
|
32770
|
-
{
|
|
32771
|
-
provide: RecordsRepositoryInterface,
|
|
32772
|
-
useClass: Gn4Repository,
|
|
32773
|
-
},
|
|
32774
|
-
],
|
|
32775
33510
|
}]
|
|
32776
33511
|
}] });
|
|
32777
33512
|
|
|
@@ -33259,247 +33994,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
33259
33994
|
}]
|
|
33260
33995
|
}] });
|
|
33261
33996
|
|
|
33262
|
-
const DO_NOT_USE_DEFAULT_BASEMAP = new InjectionToken('doNotUseDefaultBasemap', { factory: () => false });
|
|
33263
|
-
const BASEMAP_LAYERS = new InjectionToken('basemapLayers', { factory: () => [] });
|
|
33264
|
-
const MAP_VIEW_CONSTRAINTS = new InjectionToken('mapViewConstraints', {
|
|
33265
|
-
factory: () => ({}),
|
|
33266
|
-
});
|
|
33267
|
-
const VECTOR_STYLE_DEFAULT = new InjectionToken('vectorStyleDefault', {
|
|
33268
|
-
factory: () => ({
|
|
33269
|
-
fill: { color: 'rgba(255, 255, 255, 0.2)' },
|
|
33270
|
-
stroke: { color: '#ffcc33', width: 2 },
|
|
33271
|
-
}),
|
|
33272
|
-
});
|
|
33273
|
-
|
|
33274
|
-
const DEFAULT_BASEMAP_LAYER = {
|
|
33275
|
-
type: 'xyz',
|
|
33276
|
-
url: `https://{a-c}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png`,
|
|
33277
|
-
attributions: `<span>© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://carto.com/">Carto</a></span>`,
|
|
33278
|
-
};
|
|
33279
|
-
const DEFAULT_VIEW = {
|
|
33280
|
-
center: [0, 15],
|
|
33281
|
-
zoom: 2,
|
|
33282
|
-
};
|
|
33283
|
-
class MapContainerComponent {
|
|
33284
|
-
get featuresClick() {
|
|
33285
|
-
if (!this._featuresClick) {
|
|
33286
|
-
this.openlayersMap.then((olMap) => {
|
|
33287
|
-
listen(olMap, FeaturesClickEventType, ({ features }) => this._featuresClick.emit(features));
|
|
33288
|
-
});
|
|
33289
|
-
this._featuresClick = new EventEmitter();
|
|
33290
|
-
}
|
|
33291
|
-
return this._featuresClick;
|
|
33292
|
-
}
|
|
33293
|
-
get featuresHover() {
|
|
33294
|
-
if (!this._featuresHover) {
|
|
33295
|
-
this.openlayersMap.then((olMap) => {
|
|
33296
|
-
listen(olMap, FeaturesHoverEventType, ({ features }) => this._featuresHover.emit(features));
|
|
33297
|
-
});
|
|
33298
|
-
this._featuresHover = new EventEmitter();
|
|
33299
|
-
}
|
|
33300
|
-
return this._featuresHover;
|
|
33301
|
-
}
|
|
33302
|
-
get mapClick() {
|
|
33303
|
-
if (!this._mapClick) {
|
|
33304
|
-
this.openlayersMap.then((olMap) => {
|
|
33305
|
-
listen(olMap, MapClickEventType, ({ coordinate }) => this._mapClick.emit(coordinate));
|
|
33306
|
-
});
|
|
33307
|
-
this._mapClick = new EventEmitter();
|
|
33308
|
-
}
|
|
33309
|
-
return this._mapClick;
|
|
33310
|
-
}
|
|
33311
|
-
get sourceLoadError() {
|
|
33312
|
-
if (!this._sourceLoadError) {
|
|
33313
|
-
this.openlayersMap.then((olMap) => {
|
|
33314
|
-
listen(olMap, SourceLoadErrorType, (error) => this._sourceLoadError.emit(error));
|
|
33315
|
-
});
|
|
33316
|
-
this._sourceLoadError = new EventEmitter();
|
|
33317
|
-
}
|
|
33318
|
-
return this._sourceLoadError;
|
|
33319
|
-
}
|
|
33320
|
-
constructor(doNotUseDefaultBasemap, basemapLayers, mapViewConstraints) {
|
|
33321
|
-
this.doNotUseDefaultBasemap = doNotUseDefaultBasemap;
|
|
33322
|
-
this.basemapLayers = basemapLayers;
|
|
33323
|
-
this.mapViewConstraints = mapViewConstraints;
|
|
33324
|
-
this.openlayersMap = new Promise((resolve) => {
|
|
33325
|
-
this.olMapResolver = resolve;
|
|
33326
|
-
});
|
|
33327
|
-
}
|
|
33328
|
-
async ngAfterViewInit() {
|
|
33329
|
-
this.olMap = await createMapFromContext(this.processContext(this.context), this.container.nativeElement);
|
|
33330
|
-
this.displayMessage$ = merge(fromEvent(this.olMap, 'mapmuted').pipe(map$1(() => true)), fromEvent(this.olMap, 'movestart').pipe(map$1(() => false)), fromEvent(this.olMap, 'singleclick').pipe(map$1(() => false))).pipe(switchMap$1((muted) => muted
|
|
33331
|
-
? timer(2000).pipe(map$1(() => false), startWith(true), delay(400))
|
|
33332
|
-
: of(false)));
|
|
33333
|
-
this.olMapResolver(this.olMap);
|
|
33334
|
-
}
|
|
33335
|
-
async ngOnChanges(changes) {
|
|
33336
|
-
if ('context' in changes && !changes['context'].isFirstChange()) {
|
|
33337
|
-
const diff = computeMapContextDiff(this.processContext(changes['context'].currentValue), this.processContext(changes['context'].previousValue));
|
|
33338
|
-
await applyContextDiffToMap(this.olMap, diff);
|
|
33339
|
-
}
|
|
33340
|
-
}
|
|
33341
|
-
// This will apply basemap layers & view constraints
|
|
33342
|
-
processContext(context) {
|
|
33343
|
-
const processed = context
|
|
33344
|
-
? { ...context, view: context.view ?? DEFAULT_VIEW }
|
|
33345
|
-
: { layers: [], view: DEFAULT_VIEW };
|
|
33346
|
-
if (this.basemapLayers.length) {
|
|
33347
|
-
processed.layers = [...this.basemapLayers, ...processed.layers];
|
|
33348
|
-
}
|
|
33349
|
-
if (!this.doNotUseDefaultBasemap) {
|
|
33350
|
-
processed.layers = [DEFAULT_BASEMAP_LAYER, ...processed.layers];
|
|
33351
|
-
}
|
|
33352
|
-
if (this.mapViewConstraints.maxZoom) {
|
|
33353
|
-
processed.view = {
|
|
33354
|
-
maxZoom: this.mapViewConstraints.maxZoom,
|
|
33355
|
-
...processed.view,
|
|
33356
|
-
};
|
|
33357
|
-
}
|
|
33358
|
-
if (this.mapViewConstraints.maxExtent) {
|
|
33359
|
-
processed.view = {
|
|
33360
|
-
maxExtent: this.mapViewConstraints.maxExtent,
|
|
33361
|
-
...processed.view,
|
|
33362
|
-
};
|
|
33363
|
-
}
|
|
33364
|
-
if (processed.view &&
|
|
33365
|
-
!('zoom' in processed.view) &&
|
|
33366
|
-
!('center' in processed.view)) {
|
|
33367
|
-
if (this.mapViewConstraints.maxExtent) {
|
|
33368
|
-
processed.view = {
|
|
33369
|
-
extent: this.mapViewConstraints.maxExtent,
|
|
33370
|
-
...processed.view,
|
|
33371
|
-
};
|
|
33372
|
-
}
|
|
33373
|
-
else {
|
|
33374
|
-
processed.view = { ...DEFAULT_VIEW, ...processed.view };
|
|
33375
|
-
}
|
|
33376
|
-
}
|
|
33377
|
-
return processed;
|
|
33378
|
-
}
|
|
33379
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapContainerComponent, deps: [{ token: DO_NOT_USE_DEFAULT_BASEMAP }, { token: BASEMAP_LAYERS }, { token: MAP_VIEW_CONSTRAINTS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33380
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapContainerComponent, isStandalone: true, selector: "gn-ui-map-container", inputs: { context: "context" }, outputs: { featuresClick: "featuresClick", featuresHover: "featuresHover", mapClick: "mapClick", sourceLoadError: "sourceLoadError" }, providers: [
|
|
33381
|
-
provideIcons({ matSwipeOutline }),
|
|
33382
|
-
provideNgIconsConfig({
|
|
33383
|
-
size: '1.5em',
|
|
33384
|
-
}),
|
|
33385
|
-
], viewQueries: [{ propertyName: "container", first: true, predicate: ["map"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"h-full w-full\" #map></div>\n<div\n class=\"absolute inset-0 p-2 rounded z-40 transition-all flex flex-col justify-center items-center text-primary font-sans pointer-events-none\"\n [ngClass]=\"\n (displayMessage$ | async) ? 'visible opacity-100' : 'invisible opacity-0'\n \"\n>\n <div\n class=\"absolute z-[-1] inset-0 bg-gradient-to-b from-white to-primary-lightest opacity-60\"\n ></div>\n <ng-icon\n class=\"!w-16 !h-16 text-[64px] mb-4\"\n name=\"matSwipeOutline\"\n ></ng-icon>\n <p translate>map.navigation.message</p>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33386
|
-
}
|
|
33387
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapContainerComponent, decorators: [{
|
|
33388
|
-
type: Component,
|
|
33389
|
-
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, TranslateModule, NgIconComponent], providers: [
|
|
33390
|
-
provideIcons({ matSwipeOutline }),
|
|
33391
|
-
provideNgIconsConfig({
|
|
33392
|
-
size: '1.5em',
|
|
33393
|
-
}),
|
|
33394
|
-
], template: "<div class=\"h-full w-full\" #map></div>\n<div\n class=\"absolute inset-0 p-2 rounded z-40 transition-all flex flex-col justify-center items-center text-primary font-sans pointer-events-none\"\n [ngClass]=\"\n (displayMessage$ | async) ? 'visible opacity-100' : 'invisible opacity-0'\n \"\n>\n <div\n class=\"absolute z-[-1] inset-0 bg-gradient-to-b from-white to-primary-lightest opacity-60\"\n ></div>\n <ng-icon\n class=\"!w-16 !h-16 text-[64px] mb-4\"\n name=\"matSwipeOutline\"\n ></ng-icon>\n <p translate>map.navigation.message</p>\n</div>\n" }]
|
|
33395
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
33396
|
-
type: Inject,
|
|
33397
|
-
args: [DO_NOT_USE_DEFAULT_BASEMAP]
|
|
33398
|
-
}] }, { type: undefined, decorators: [{
|
|
33399
|
-
type: Inject,
|
|
33400
|
-
args: [BASEMAP_LAYERS]
|
|
33401
|
-
}] }, { type: undefined, decorators: [{
|
|
33402
|
-
type: Inject,
|
|
33403
|
-
args: [MAP_VIEW_CONSTRAINTS]
|
|
33404
|
-
}] }], propDecorators: { context: [{
|
|
33405
|
-
type: Input
|
|
33406
|
-
}], featuresClick: [{
|
|
33407
|
-
type: Output
|
|
33408
|
-
}], featuresHover: [{
|
|
33409
|
-
type: Output
|
|
33410
|
-
}], mapClick: [{
|
|
33411
|
-
type: Output
|
|
33412
|
-
}], sourceLoadError: [{
|
|
33413
|
-
type: Output
|
|
33414
|
-
}], container: [{
|
|
33415
|
-
type: ViewChild,
|
|
33416
|
-
args: ['map']
|
|
33417
|
-
}] } });
|
|
33418
|
-
|
|
33419
|
-
const geometryKeys = ['geometry', 'the_geom'];
|
|
33420
|
-
class FeatureDetailComponent {
|
|
33421
|
-
get properties() {
|
|
33422
|
-
if (!this.feature)
|
|
33423
|
-
return [];
|
|
33424
|
-
return Object.keys(this.feature.properties).filter((prop) => !geometryKeys.includes(prop));
|
|
33425
|
-
}
|
|
33426
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33427
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeatureDetailComponent, isStandalone: true, selector: "gn-ui-feature-detail", inputs: { feature: "feature" }, ngImport: i0, template: "<div *ngIf=\"feature\" class=\"root\">\n <div class=\"property\" *ngFor=\"let propName of properties\">\n <div>{{ propName }}</div>\n <div class=\"font-bold\">{{ feature.properties[propName] }}</div>\n </div>\n</div>\n", styles: [".property{border-bottom:1px solid #f2f2f2;padding-bottom:.625rem;margin-bottom:.625rem;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33428
|
-
}
|
|
33429
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureDetailComponent, decorators: [{
|
|
33430
|
-
type: Component,
|
|
33431
|
-
args: [{ selector: 'gn-ui-feature-detail', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div *ngIf=\"feature\" class=\"root\">\n <div class=\"property\" *ngFor=\"let propName of properties\">\n <div>{{ propName }}</div>\n <div class=\"font-bold\">{{ feature.properties[propName] }}</div>\n </div>\n</div>\n", styles: [".property{border-bottom:1px solid #f2f2f2;padding-bottom:.625rem;margin-bottom:.625rem;font-size:.75rem}\n"] }]
|
|
33432
|
-
}], propDecorators: { feature: [{
|
|
33433
|
-
type: Input
|
|
33434
|
-
}] } });
|
|
33435
|
-
|
|
33436
|
-
class MapLegendComponent {
|
|
33437
|
-
constructor() {
|
|
33438
|
-
this.legendStatusChange = new EventEmitter();
|
|
33439
|
-
}
|
|
33440
|
-
async ngOnChanges(changes) {
|
|
33441
|
-
if ('context' in changes) {
|
|
33442
|
-
const mapContext = changes['context'].currentValue;
|
|
33443
|
-
if (mapContext.layers && mapContext.layers.length > 0) {
|
|
33444
|
-
const mapContextLayer = mapContext.layers[0];
|
|
33445
|
-
this.legendHTML = await createLegendFromLayer(mapContextLayer);
|
|
33446
|
-
if (this.legendHTML) {
|
|
33447
|
-
this.legendStatusChange.emit(true);
|
|
33448
|
-
}
|
|
33449
|
-
}
|
|
33450
|
-
else {
|
|
33451
|
-
this.legendHTML = false;
|
|
33452
|
-
this.legendStatusChange.emit(false);
|
|
33453
|
-
}
|
|
33454
|
-
}
|
|
33455
|
-
}
|
|
33456
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33457
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapLegendComponent, isStandalone: true, selector: "gn-ui-map-legend", inputs: { context: "context" }, outputs: { legendStatusChange: "legendStatusChange" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"legendHTML\" [innerHTML]=\"legendHTML.outerHTML\"></div>\n", styles: [".geosdk--legend-container{overflow:auto;white-space:normal;word-wrap:break-word}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
33458
|
-
}
|
|
33459
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendComponent, decorators: [{
|
|
33460
|
-
type: Component,
|
|
33461
|
-
args: [{ selector: 'gn-ui-map-legend', standalone: true, encapsulation: ViewEncapsulation.None, imports: [NgIf], template: "<div *ngIf=\"legendHTML\" [innerHTML]=\"legendHTML.outerHTML\"></div>\n", styles: [".geosdk--legend-container{overflow:auto;white-space:normal;word-wrap:break-word}\n"] }]
|
|
33462
|
-
}], propDecorators: { context: [{
|
|
33463
|
-
type: Input
|
|
33464
|
-
}], legendStatusChange: [{
|
|
33465
|
-
type: Output
|
|
33466
|
-
}] } });
|
|
33467
|
-
|
|
33468
|
-
function prioritizePageScroll(interactions) {
|
|
33469
|
-
interactions.clear();
|
|
33470
|
-
interactions.extend(defaults({
|
|
33471
|
-
// remove rotate interactions
|
|
33472
|
-
altShiftDragRotate: false,
|
|
33473
|
-
pinchRotate: false,
|
|
33474
|
-
// replace drag and zoom interactions
|
|
33475
|
-
dragPan: false,
|
|
33476
|
-
mouseWheelZoom: false,
|
|
33477
|
-
})
|
|
33478
|
-
.extend([
|
|
33479
|
-
new DragPan({
|
|
33480
|
-
condition: dragPanCondition,
|
|
33481
|
-
}),
|
|
33482
|
-
new MouseWheelZoom({
|
|
33483
|
-
condition: mouseWheelZoomCondition,
|
|
33484
|
-
}),
|
|
33485
|
-
])
|
|
33486
|
-
.getArray());
|
|
33487
|
-
}
|
|
33488
|
-
function dragPanCondition(event) {
|
|
33489
|
-
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
33490
|
-
if (!dragPanCondition) {
|
|
33491
|
-
this.getMap().dispatchEvent('mapmuted');
|
|
33492
|
-
}
|
|
33493
|
-
// combine the condition with the default DragPan conditions
|
|
33494
|
-
return dragPanCondition && noModifierKeys(event) && primaryAction(event);
|
|
33495
|
-
}
|
|
33496
|
-
function mouseWheelZoomCondition(event) {
|
|
33497
|
-
if (!platformModifierKeyOnly(event) && event.type === 'wheel') {
|
|
33498
|
-
this.getMap().dispatchEvent('mapmuted');
|
|
33499
|
-
}
|
|
33500
|
-
return platformModifierKeyOnly(event);
|
|
33501
|
-
}
|
|
33502
|
-
|
|
33503
33997
|
class MapStateContainerComponent {
|
|
33504
33998
|
constructor(mapFacade) {
|
|
33505
33999
|
this.mapFacade = mapFacade;
|
|
@@ -34151,6 +34645,7 @@ function loadAppConfig() {
|
|
|
34151
34645
|
'metadata_language',
|
|
34152
34646
|
'login_url',
|
|
34153
34647
|
'logout_url',
|
|
34648
|
+
'settings_url',
|
|
34154
34649
|
'web_component_embedder_url',
|
|
34155
34650
|
'languages',
|
|
34156
34651
|
'contact_email',
|
|
@@ -34301,6 +34796,7 @@ proxy_path = "/proxy/?url="
|
|
|
34301
34796
|
metadata_language = "fre"
|
|
34302
34797
|
login_url = "/cas/login?service="
|
|
34303
34798
|
logout_url = "/geonetwork/signout"
|
|
34799
|
+
settings_url = "/geonetwork/settings"
|
|
34304
34800
|
web_component_embedder_url = "/datahub/wc-embedder.html"
|
|
34305
34801
|
|
|
34306
34802
|
[map]
|
|
@@ -37164,15 +37660,13 @@ class MdViewFacade {
|
|
|
37164
37660
|
this.error$ = this.store.pipe(select(getMetadataError));
|
|
37165
37661
|
this.related$ = this.store.pipe(select(getRelated));
|
|
37166
37662
|
this.chartConfig$ = this.store.pipe(select(getChartConfig));
|
|
37167
|
-
this.allLinks$ = this.metadata$.pipe(map$1((record) =>
|
|
37168
|
-
? record.onlineResources
|
|
37169
|
-
: []));
|
|
37663
|
+
this.allLinks$ = this.metadata$.pipe(map$1((record) => ('onlineResources' in record ? record.onlineResources : [])));
|
|
37170
37664
|
this.apiLinks$ = this.allLinks$.pipe(map$1((links) => links
|
|
37171
37665
|
.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.API))
|
|
37172
37666
|
// Put links to IGN Géoplateforme first
|
|
37173
37667
|
.sort((dd1, dd2) => {
|
|
37174
|
-
return dd2
|
|
37175
|
-
'GPFDL'
|
|
37668
|
+
return dd2
|
|
37669
|
+
.accessServiceProtocol === 'GPFDL'
|
|
37176
37670
|
? 1
|
|
37177
37671
|
: undefined; // do not change the sorting otherwise
|
|
37178
37672
|
})));
|
|
@@ -37243,15 +37737,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
37243
37737
|
}], ctorParameters: () => [{ type: i1$3.Store }, { type: LinkClassifierService }, { type: AvatarServiceInterface }, { type: DataService }] });
|
|
37244
37738
|
|
|
37245
37739
|
class MdViewEffects {
|
|
37246
|
-
constructor(actions$, recordsRepository, platformServiceInterface) {
|
|
37740
|
+
constructor(actions$, recordsRepository, platformServiceInterface, router) {
|
|
37247
37741
|
this.actions$ = actions$;
|
|
37248
37742
|
this.recordsRepository = recordsRepository;
|
|
37249
37743
|
this.platformServiceInterface = platformServiceInterface;
|
|
37744
|
+
this.router = router;
|
|
37250
37745
|
/*
|
|
37251
37746
|
Metadata effects
|
|
37252
37747
|
*/
|
|
37253
37748
|
this.loadFullMetadata$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadata), switchMap$1(({ uuid }) => this.recordsRepository.getRecord(uuid)), map$1((record) => {
|
|
37254
|
-
if (record === null) {
|
|
37749
|
+
if (record === null || !this.router.url.includes(record.kind)) {
|
|
37255
37750
|
return loadFullMetadataFailure({ notFound: true });
|
|
37256
37751
|
}
|
|
37257
37752
|
return loadFullMetadataSuccess({ full: record });
|
|
@@ -37286,12 +37781,12 @@ class MdViewEffects {
|
|
|
37286
37781
|
}));
|
|
37287
37782
|
})))));
|
|
37288
37783
|
}
|
|
37289
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MdViewEffects, deps: [{ token: i1$c.Actions }, { token: RecordsRepositoryInterface }, { token: PlatformServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
37784
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MdViewEffects, deps: [{ token: i1$c.Actions }, { token: RecordsRepositoryInterface }, { token: PlatformServiceInterface }, { token: i1$d.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
37290
37785
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MdViewEffects }); }
|
|
37291
37786
|
}
|
|
37292
37787
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MdViewEffects, decorators: [{
|
|
37293
37788
|
type: Injectable
|
|
37294
|
-
}], ctorParameters: () => [{ type: i1$c.Actions }, { type: RecordsRepositoryInterface }, { type: PlatformServiceInterface }] });
|
|
37789
|
+
}], ctorParameters: () => [{ type: i1$c.Actions }, { type: RecordsRepositoryInterface }, { type: PlatformServiceInterface }, { type: i1$d.Router }] });
|
|
37295
37790
|
|
|
37296
37791
|
class CatalogTitleComponent {
|
|
37297
37792
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CatalogTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -37348,11 +37843,11 @@ class LanguageSwitcherComponent {
|
|
|
37348
37843
|
this.translate.use(value);
|
|
37349
37844
|
}
|
|
37350
37845
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37351
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LanguageSwitcherComponent, isStandalone: true, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageChoices\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }] }); }
|
|
37846
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LanguageSwitcherComponent, isStandalone: true, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageChoices\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1 rounded-lg\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }] }); }
|
|
37352
37847
|
}
|
|
37353
37848
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
37354
37849
|
type: Component,
|
|
37355
|
-
args: [{ selector: 'gn-ui-language-switcher', imports: [DropdownSelectorComponent], standalone: true, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageChoices\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
37850
|
+
args: [{ selector: 'gn-ui-language-switcher', imports: [DropdownSelectorComponent], standalone: true, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageChoices\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1 rounded-lg\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
37356
37851
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
37357
37852
|
type: Optional
|
|
37358
37853
|
}, {
|
|
@@ -37774,17 +38269,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
37774
38269
|
}]
|
|
37775
38270
|
}] });
|
|
37776
38271
|
|
|
37777
|
-
const GN_UI_VERSION = new InjectionToken('gnUiVersion');
|
|
37778
|
-
|
|
37779
38272
|
const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
|
|
37780
38273
|
class DataViewPermalinkComponent {
|
|
37781
38274
|
set viewType(value) {
|
|
37782
38275
|
this.viewType$.next(value);
|
|
37783
38276
|
}
|
|
37784
|
-
constructor(config, wcEmbedderBaseUrl,
|
|
38277
|
+
constructor(config, wcEmbedderBaseUrl, facade) {
|
|
37785
38278
|
this.config = config;
|
|
37786
38279
|
this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
|
|
37787
|
-
this.version = version;
|
|
37788
38280
|
this.facade = facade;
|
|
37789
38281
|
this.viewType$ = new BehaviorSubject('map');
|
|
37790
38282
|
this.permalinkUrl$ = combineLatest([
|
|
@@ -37793,7 +38285,7 @@ class DataViewPermalinkComponent {
|
|
|
37793
38285
|
this.facade.metadata$,
|
|
37794
38286
|
]).pipe(map$2(([viewType, config, metadata]) => {
|
|
37795
38287
|
const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
|
|
37796
|
-
url.searchParams.set('v', `${
|
|
38288
|
+
url.searchParams.set('v', `${GEONETWORK_UI_TAG_NAME}`);
|
|
37797
38289
|
if (viewType === 'chart') {
|
|
37798
38290
|
if (config) {
|
|
37799
38291
|
const { aggregation, xProperty, yProperty, chartType } = config;
|
|
@@ -37824,7 +38316,7 @@ class DataViewPermalinkComponent {
|
|
|
37824
38316
|
return url.toString();
|
|
37825
38317
|
}));
|
|
37826
38318
|
}
|
|
37827
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token:
|
|
38319
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37828
38320
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewPermalinkComponent, isStandalone: true, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
37829
38321
|
}
|
|
37830
38322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
|
|
@@ -37838,9 +38330,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
37838
38330
|
}, {
|
|
37839
38331
|
type: Inject,
|
|
37840
38332
|
args: [WEB_COMPONENT_EMBEDDER_URL]
|
|
37841
|
-
}] }, { type: undefined, decorators: [{
|
|
37842
|
-
type: Inject,
|
|
37843
|
-
args: [GN_UI_VERSION]
|
|
37844
38333
|
}] }, { type: MdViewFacade }], propDecorators: { viewType: [{
|
|
37845
38334
|
type: Input
|
|
37846
38335
|
}] } });
|
|
@@ -37919,16 +38408,15 @@ class DataViewWebComponentComponent {
|
|
|
37919
38408
|
set viewType(value) {
|
|
37920
38409
|
this.viewType$.next(value);
|
|
37921
38410
|
}
|
|
37922
|
-
constructor(config,
|
|
38411
|
+
constructor(config, facade) {
|
|
37923
38412
|
this.config = config;
|
|
37924
|
-
this.version = version;
|
|
37925
38413
|
this.facade = facade;
|
|
37926
38414
|
this.viewType$ = new BehaviorSubject('map');
|
|
37927
38415
|
this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
|
|
37928
38416
|
if (viewType === 'chart') {
|
|
37929
38417
|
if (config) {
|
|
37930
38418
|
const { aggregation, xProperty, yProperty, chartType } = config;
|
|
37931
|
-
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
38419
|
+
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
|
|
37932
38420
|
<gn-dataset-view-chart
|
|
37933
38421
|
api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
|
|
37934
38422
|
dataset-id="${metadata.uniqueIdentifier}"
|
|
@@ -37947,7 +38435,7 @@ class DataViewWebComponentComponent {
|
|
|
37947
38435
|
return '';
|
|
37948
38436
|
}
|
|
37949
38437
|
else if (viewType === 'table') {
|
|
37950
|
-
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
38438
|
+
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
|
|
37951
38439
|
<gn-dataset-view-table
|
|
37952
38440
|
api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
|
|
37953
38441
|
dataset-id="${metadata.uniqueIdentifier}"
|
|
@@ -37960,7 +38448,7 @@ class DataViewWebComponentComponent {
|
|
|
37960
38448
|
></gn-dataset-view-table>`;
|
|
37961
38449
|
}
|
|
37962
38450
|
else {
|
|
37963
|
-
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
38451
|
+
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
|
|
37964
38452
|
<gn-dataset-view-map
|
|
37965
38453
|
api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
|
|
37966
38454
|
dataset-id="${metadata.uniqueIdentifier}"
|
|
@@ -37974,7 +38462,7 @@ class DataViewWebComponentComponent {
|
|
|
37974
38462
|
}
|
|
37975
38463
|
}));
|
|
37976
38464
|
}
|
|
37977
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token:
|
|
38465
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37978
38466
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewWebComponentComponent, isStandalone: true, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
37979
38467
|
}
|
|
37980
38468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
|
|
@@ -37983,9 +38471,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
37983
38471
|
}], ctorParameters: () => [{ type: Configuration, decorators: [{
|
|
37984
38472
|
type: Inject,
|
|
37985
38473
|
args: [Configuration]
|
|
37986
|
-
}] }, { type: undefined, decorators: [{
|
|
37987
|
-
type: Inject,
|
|
37988
|
-
args: [GN_UI_VERSION]
|
|
37989
38474
|
}] }, { type: MdViewFacade }], propDecorators: { viewType: [{
|
|
37990
38475
|
type: Input
|
|
37991
38476
|
}] } });
|
|
@@ -38486,7 +38971,7 @@ class RecordMetaComponent {
|
|
|
38486
38971
|
this.meta.removeTag('property="og:url"');
|
|
38487
38972
|
this.meta.removeTag('property="og:title"');
|
|
38488
38973
|
}
|
|
38489
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, deps: [{ token: i1$
|
|
38974
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, deps: [{ token: i1$e.Meta }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38490
38975
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordMetaComponent, isStandalone: true, selector: "gn-ui-record-meta", inputs: { metadata: "metadata" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
38491
38976
|
}
|
|
38492
38977
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, decorators: [{
|
|
@@ -38497,7 +38982,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
38497
38982
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
38498
38983
|
standalone: true,
|
|
38499
38984
|
}]
|
|
38500
|
-
}], ctorParameters: () => [{ type: i1$
|
|
38985
|
+
}], ctorParameters: () => [{ type: i1$e.Meta }], propDecorators: { metadata: [{
|
|
38501
38986
|
type: Input
|
|
38502
38987
|
}] } });
|
|
38503
38988
|
|
|
@@ -39545,7 +40030,7 @@ class ImportRecordComponent {
|
|
|
39545
40030
|
},
|
|
39546
40031
|
});
|
|
39547
40032
|
}
|
|
39548
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, deps: [{ token: i1$
|
|
40033
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, deps: [{ token: i1$d.Router }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NotificationsService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39549
40034
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImportRecordComponent, isStandalone: true, selector: "gn-ui-import-record", outputs: { closeImportMenu: "closeImportMenu" }, providers: [
|
|
39550
40035
|
provideIcons({
|
|
39551
40036
|
iconoirImport,
|
|
@@ -39576,7 +40061,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
39576
40061
|
size: '1.5em',
|
|
39577
40062
|
}),
|
|
39578
40063
|
], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\" translate\n >dashboard.importRecord.importExternal.title</span\n >\n <span translate>dashboard.importRecord.importExternal.subtitle</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n" }]
|
|
39579
|
-
}], ctorParameters: () => [{ type: i1$
|
|
40064
|
+
}], ctorParameters: () => [{ type: i1$d.Router }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NotificationsService }, { type: RecordsRepositoryInterface }], propDecorators: { closeImportMenu: [{
|
|
39580
40065
|
type: Output
|
|
39581
40066
|
}] } });
|
|
39582
40067
|
|
|
@@ -39940,75 +40425,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
39940
40425
|
args: [{ selector: 'gn-ui-form-field-array', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-array works!</p>\n" }]
|
|
39941
40426
|
}] });
|
|
39942
40427
|
|
|
39943
|
-
class FormFieldMapContainerComponent {
|
|
39944
|
-
constructor() {
|
|
39945
|
-
this.spatialExtents$ = new BehaviorSubject([]);
|
|
39946
|
-
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1(async (extents) => {
|
|
39947
|
-
if (extents.length === 0) {
|
|
39948
|
-
return null; // null extent means default view
|
|
39949
|
-
}
|
|
39950
|
-
const featureCollection = {
|
|
39951
|
-
type: 'FeatureCollection',
|
|
39952
|
-
features: [],
|
|
39953
|
-
};
|
|
39954
|
-
extents.forEach((extent) => {
|
|
39955
|
-
if (extent.geometry) {
|
|
39956
|
-
featureCollection.features.push({
|
|
39957
|
-
type: 'Feature',
|
|
39958
|
-
properties: {},
|
|
39959
|
-
geometry: extent.geometry,
|
|
39960
|
-
});
|
|
39961
|
-
}
|
|
39962
|
-
else if (extent.bbox?.length >= 0) {
|
|
39963
|
-
featureCollection.features.push({
|
|
39964
|
-
type: 'Feature',
|
|
39965
|
-
properties: {},
|
|
39966
|
-
geometry: this.bboxCoordsToGeometry(extent.bbox),
|
|
39967
|
-
});
|
|
39968
|
-
}
|
|
39969
|
-
});
|
|
39970
|
-
const layer = {
|
|
39971
|
-
type: 'geojson',
|
|
39972
|
-
data: featureCollection,
|
|
39973
|
-
label: 'Spatial extents',
|
|
39974
|
-
style: {
|
|
39975
|
-
'stroke-color': 'black',
|
|
39976
|
-
'stroke-width': 2,
|
|
39977
|
-
},
|
|
39978
|
-
};
|
|
39979
|
-
const view = await createViewFromLayer(layer);
|
|
39980
|
-
return {
|
|
39981
|
-
view,
|
|
39982
|
-
layers: [layer],
|
|
39983
|
-
};
|
|
39984
|
-
}));
|
|
39985
|
-
this.error = '';
|
|
39986
|
-
}
|
|
39987
|
-
set spatialExtents(value) {
|
|
39988
|
-
this.spatialExtents$.next(value);
|
|
39989
|
-
}
|
|
39990
|
-
bboxCoordsToGeometry(bbox) {
|
|
39991
|
-
const geometry = new Polygon([
|
|
39992
|
-
[
|
|
39993
|
-
[bbox[0], bbox[1]],
|
|
39994
|
-
[bbox[0], bbox[3]],
|
|
39995
|
-
[bbox[2], bbox[3]],
|
|
39996
|
-
[bbox[2], bbox[1]],
|
|
39997
|
-
[bbox[0], bbox[1]],
|
|
39998
|
-
],
|
|
39999
|
-
]);
|
|
40000
|
-
return new GeoJSON().writeGeometryObject(geometry);
|
|
40001
|
-
}
|
|
40002
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldMapContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40003
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldMapContainerComponent, isStandalone: true, selector: "gn-ui-form-field-map-container", inputs: { spatialExtents: "spatialExtents" }, ngImport: i0, template: "<gn-ui-map-container [context]=\"mapContext$ | async\"></gn-ui-map-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
40004
|
-
}
|
|
40005
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldMapContainerComponent, decorators: [{
|
|
40006
|
-
type: Component,
|
|
40007
|
-
args: [{ selector: 'gn-ui-form-field-map-container', standalone: true, imports: [CommonModule, MapContainerComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-container [context]=\"mapContext$ | async\"></gn-ui-map-container>\n" }]
|
|
40008
|
-
}], propDecorators: { spatialExtents: [{
|
|
40009
|
-
type: Input
|
|
40010
|
-
}] } });
|
|
40011
|
-
|
|
40012
40428
|
/**
|
|
40013
40429
|
* This form field is not like the others, as it will read directly from the state to handle both spatial extents
|
|
40014
40430
|
* and place keywords.
|
|
@@ -40105,16 +40521,16 @@ class FormFieldSpatialExtentComponent {
|
|
|
40105
40521
|
this.editorFacade.updateRecordField('spatialExtents', spatialExtents);
|
|
40106
40522
|
}
|
|
40107
40523
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, deps: [{ token: PlatformServiceInterface }, { token: EditorFacade }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'editor.record.form.keywords.place.placeholder' | translate\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-
|
|
40524
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'editor.record.form.keywords.place.placeholder' | translate\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-spatial-extent\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-spatial-extent>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
40109
40525
|
}
|
|
40110
40526
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
|
|
40111
40527
|
type: Component,
|
|
40112
40528
|
args: [{ selector: 'gn-ui-form-field-spatial-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
40113
40529
|
CommonModule,
|
|
40114
40530
|
GenericKeywordsComponent,
|
|
40115
|
-
FormFieldMapContainerComponent,
|
|
40116
40531
|
TranslateModule,
|
|
40117
|
-
|
|
40532
|
+
SpatialExtentComponent,
|
|
40533
|
+
], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'editor.record.form.keywords.place.placeholder' | translate\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-spatial-extent\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-spatial-extent>\n </div>\n</div>\n" }]
|
|
40118
40534
|
}], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: EditorFacade }, { type: i1$1.TranslateService }] });
|
|
40119
40535
|
|
|
40120
40536
|
class ContactCardComponent {
|
|
@@ -40372,9 +40788,8 @@ class OnlineResourceCardComponent {
|
|
|
40372
40788
|
get subtitle() {
|
|
40373
40789
|
switch (this.onlineResource.type) {
|
|
40374
40790
|
case 'service':
|
|
40375
|
-
return `${this.onlineResource.accessServiceProtocol}`;
|
|
40376
40791
|
case 'endpoint':
|
|
40377
|
-
return `${this.onlineResource.
|
|
40792
|
+
return `${this.onlineResource.accessServiceProtocol}`;
|
|
40378
40793
|
case 'link':
|
|
40379
40794
|
case 'download':
|
|
40380
40795
|
return this.getFormat(this.onlineResource);
|
|
@@ -41531,6 +41946,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
41531
41946
|
const ROUTER_STATE_KEY = 'router';
|
|
41532
41947
|
const ROUTER_ROUTE_SEARCH = 'search';
|
|
41533
41948
|
const ROUTER_ROUTE_DATASET = 'dataset';
|
|
41949
|
+
const ROUTER_ROUTE_SERVICE = 'service';
|
|
41950
|
+
const ROUTER_ROUTE_REUSE = 'reuse';
|
|
41534
41951
|
const ROUTER_ROUTE_ORGANIZATION = 'organization';
|
|
41535
41952
|
var ROUTE_PARAMS;
|
|
41536
41953
|
(function (ROUTE_PARAMS) {
|
|
@@ -41563,6 +41980,14 @@ class RouterService {
|
|
|
41563
41980
|
path: `${ROUTER_ROUTE_DATASET}/:metadataUuid`,
|
|
41564
41981
|
component: this.routerConfig.recordRouteComponent,
|
|
41565
41982
|
},
|
|
41983
|
+
{
|
|
41984
|
+
path: `${ROUTER_ROUTE_SERVICE}/:metadataUuid`,
|
|
41985
|
+
component: this.routerConfig.recordRouteComponent,
|
|
41986
|
+
},
|
|
41987
|
+
{
|
|
41988
|
+
path: `${ROUTER_ROUTE_REUSE}/:metadataUuid`,
|
|
41989
|
+
component: this.routerConfig.recordRouteComponent,
|
|
41990
|
+
},
|
|
41566
41991
|
{
|
|
41567
41992
|
path: `${ROUTER_ROUTE_ORGANIZATION}/:name`,
|
|
41568
41993
|
component: this.routerConfig.organizationRouteComponent,
|
|
@@ -41575,7 +42000,7 @@ class RouterService {
|
|
|
41575
42000
|
getOrganizationPageRoute() {
|
|
41576
42001
|
return ROUTER_ROUTE_ORGANIZATION;
|
|
41577
42002
|
}
|
|
41578
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$
|
|
42003
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$d.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41579
42004
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, providedIn: 'root' }); }
|
|
41580
42005
|
}
|
|
41581
42006
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, decorators: [{
|
|
@@ -41586,7 +42011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
41586
42011
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
41587
42012
|
type: Inject,
|
|
41588
42013
|
args: [ROUTER_CONFIG]
|
|
41589
|
-
}] }, { type: i1$
|
|
42014
|
+
}] }, { type: i1$d.Router }] });
|
|
41590
42015
|
|
|
41591
42016
|
const goAction = createAction('[Router] Go', props());
|
|
41592
42017
|
const backAction = createAction('[Router] Back');
|
|
@@ -41658,13 +42083,19 @@ class RouterFacade {
|
|
|
41658
42083
|
this.currentRoute$ = this.store.pipe(select(selectCurrentRoute));
|
|
41659
42084
|
this.pathParams$ = this.store.pipe(select(selectRouteParams));
|
|
41660
42085
|
this.searchParams$ = this.currentRoute$.pipe(filter((route) => !!route), filter((route) => route.url[0]?.path.startsWith(ROUTER_ROUTE_SEARCH)), map$1((route) => route.queryParams), distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), map$1(expandQueryParams));
|
|
42086
|
+
this.routeMap = {
|
|
42087
|
+
dataset: ROUTER_ROUTE_DATASET,
|
|
42088
|
+
service: ROUTER_ROUTE_SERVICE,
|
|
42089
|
+
reuse: ROUTER_ROUTE_REUSE,
|
|
42090
|
+
};
|
|
41661
42091
|
}
|
|
41662
42092
|
goToMetadata(metadata) {
|
|
42093
|
+
const selectedRoute = this.routeMap[metadata.kind] || ROUTER_ROUTE_DATASET;
|
|
41663
42094
|
this.pathParams$
|
|
41664
42095
|
.pipe(take(1), filter((params) => params.metadataUuid !== metadata.uniqueIdentifier))
|
|
41665
42096
|
.subscribe(() => {
|
|
41666
42097
|
this.go({
|
|
41667
|
-
path: `${
|
|
42098
|
+
path: `${selectedRoute}/${metadata.uniqueIdentifier}`,
|
|
41668
42099
|
});
|
|
41669
42100
|
this.store.dispatch(setIncompleteMetadata({ incomplete: metadata }));
|
|
41670
42101
|
});
|
|
@@ -41891,12 +42322,12 @@ class RouterEffects {
|
|
|
41891
42322
|
this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
|
|
41892
42323
|
this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
|
|
41893
42324
|
}
|
|
41894
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$
|
|
42325
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$d.Router }, { token: i1$2.Location }, { token: RouterFacade }, { token: ROUTER_CONFIG }, { token: FieldsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41895
42326
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects }); }
|
|
41896
42327
|
}
|
|
41897
42328
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, decorators: [{
|
|
41898
42329
|
type: Injectable
|
|
41899
|
-
}], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$
|
|
42330
|
+
}], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$d.Router }, { type: i1$2.Location }, { type: RouterFacade }, { type: undefined, decorators: [{
|
|
41900
42331
|
type: Inject,
|
|
41901
42332
|
args: [ROUTER_CONFIG]
|
|
41902
42333
|
}] }, { type: FieldsService }] });
|
|
@@ -41956,5 +42387,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
41956
42387
|
* Generated bundle index. Do not edit.
|
|
41957
42388
|
*/
|
|
41958
42389
|
|
|
41959
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
42390
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
41960
42391
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|