geonetwork-ui 2.10.0-dev.d3efc146c → 2.10.0-dev.dc20f8516
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/fesm2022/geonetwork-ui.mjs +942 -375
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/index.d.ts +176 -38
- package/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +9 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+ongules.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+roilaye.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +11 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +33 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +33 -0
- package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -0
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +68 -34
- package/src/libs/api/repository/src/lib/gn4/gn4.provider.ts +6 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +46 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +11 -5
- package/src/libs/common/domain/src/lib/model/user/group.model.ts +8 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +5 -0
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +6 -0
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +0 -1
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +10 -1
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.html +67 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.ts +39 -0
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +18 -3
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +33 -40
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/field-focus.directive.ts +41 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +32 -34
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +13 -13
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +18 -4
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +8 -7
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +6 -6
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.html +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.ts +89 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-topics/form-field-topics.component.ts +2 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.css +3 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.css +35 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +5 -1
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +77 -5
- package/src/libs/feature/editor/src/lib/fields.config.ts +60 -47
- package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +4 -0
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +1 -1
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +33 -0
- package/src/libs/feature/notify-reuse/src/index.ts +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.css +0 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.html +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.ts +21 -0
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +9 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.html +96 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.ts +45 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.html +41 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.ts +70 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -1
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +0 -1
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -5
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +0 -4
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +28 -67
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +30 -10
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +8 -0
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +2 -2
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +2 -1
- package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -1
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +15 -64
- package/src/libs/ui/map/src/lib/map-utils.ts +48 -0
- package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +0 -1
- package/src/libs/util/app-config/src/lib/app-config.ts +49 -0
- package/src/libs/util/app-config/src/lib/model.ts +7 -0
- package/src/libs/util/app-config/src/lib/parse-utils.ts +50 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +1 -1
- package/src/libs/util/shared/src/lib/record/quality-score.util.ts +33 -18
- package/src/libs/util/shared/src/lib/utils/geojson.ts +58 -1
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/src/libs/util/shared/src/lib/utils/user-display.ts +32 -0
- package/tailwind.base.css +17 -2
- package/translations/de.json +29 -20
- package/translations/en.json +29 -20
- package/translations/es.json +29 -20
- package/translations/fr.json +29 -20
- package/translations/it.json +29 -20
- package/translations/nl.json +29 -20
- package/translations/pt.json +29 -20
- package/translations/sk.json +29 -20
|
@@ -7,7 +7,7 @@ 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, inject, Injectable, NgModule, Injector, APP_INITIALIZER, makeEnvironmentProviders, ElementRef, HostListener, Input, Directive, Renderer2, DestroyRef, EventEmitter, Output, ViewChild, ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef, HostBinding, ViewContainerRef, TemplateRef, ViewChildren, ContentChild, ContentChildren, NgZone, ComponentFactoryResolver } from '@angular/core';
|
|
10
|
+
import { InjectionToken, inject, Injectable, NgModule, Injector, APP_INITIALIZER, makeEnvironmentProviders, ElementRef, HostListener, Input, Directive, Renderer2, DestroyRef, EventEmitter, Output, ViewChild, ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef, HostBinding, ViewContainerRef, TemplateRef, ViewChildren, ContentChild, ContentChildren, NgZone, ComponentFactoryResolver, afterNextRender, viewChildren } from '@angular/core';
|
|
11
11
|
import { HttpClient, HttpHeaders, HttpParams, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, HttpEventType } from '@angular/common/http';
|
|
12
12
|
import * as i4 from '@ngx-translate/core';
|
|
13
13
|
import { TranslateLoader, TranslateCompiler, TranslateDefaultParser, TranslateParser, TranslateService, provideTranslateService, TranslateDirective, TranslatePipe, TranslateModule } from '@ngx-translate/core';
|
|
@@ -18,12 +18,12 @@ import { of, map as map$2, lastValueFrom, fromEvent, startWith, shareReplay, fil
|
|
|
18
18
|
import { lt, valid, coerce, satisfies, ltr } from 'semver';
|
|
19
19
|
import chroma from 'chroma-js';
|
|
20
20
|
import * as i1$1 from '@angular/common';
|
|
21
|
-
import { Location, CommonModule, NgClass, NgTemplateOutlet, DatePipe } from '@angular/common';
|
|
21
|
+
import { Location, CommonModule, NgClass, NgTemplateOutlet, DatePipe, AsyncPipe } from '@angular/common';
|
|
22
22
|
import { formatDistance } from 'date-fns/formatDistance';
|
|
23
23
|
import { Scroll, NavigationEnd, Router, RouteReuseStrategy } from '@angular/router';
|
|
24
24
|
import { WmtsEndpoint, WmsEndpoint, WfsEndpoint, OgcApiEndpoint, sharedFetch, useCache, StacEndpoint, TmsEndpoint } from '@camptocamp/ogc-client';
|
|
25
25
|
import { getLength } from 'ol/sphere.js';
|
|
26
|
-
import { LineString
|
|
26
|
+
import { LineString } from 'ol/geom.js';
|
|
27
27
|
import * as i1 from '@ngrx/store';
|
|
28
28
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, Store, select, StoreModule } from '@ngrx/store';
|
|
29
29
|
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
@@ -31,7 +31,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
31
31
|
import { FeaturesClickEventType, FeaturesHoverEventType, MapClickEventType, MapExtentChangeEventType, SourceLoadErrorType, computeMapContextDiff, createViewFromLayer } from '@geospatial-sdk/core';
|
|
32
32
|
import { createMapFromContext, applyContextDiffToMap, listen } from '@geospatial-sdk/openlayers';
|
|
33
33
|
import { NgIconComponent, provideIcons, provideNgIconsConfig, NgIcon } from '@ng-icons/core';
|
|
34
|
-
import { matSwipeOutline, matErrorOutlineOutline, matComputerOutline, matLocationSearchingOutline, matLocationOnOutline, matCallOutline, matMailOutline as matMailOutline$1,
|
|
34
|
+
import { matSwipeOutline, matErrorOutlineOutline, matComputerOutline, matLocationSearchingOutline, matLocationOnOutline, matCallOutline, matInfoOutline, matMailOutline as matMailOutline$1, matCloseOutline, matWarningAmberOutline, matSendOutline, matHomeWorkOutline, matCloudDownloadOutline, matMapOutline, matAddCircleOutlineOutline, matLayersOutline, matDeleteOutline, matMoreHorizOutline } from '@ng-icons/material-icons/outline';
|
|
35
35
|
import { transformExtent } from 'ol/proj.js';
|
|
36
36
|
import { createLegendFromLayer } from '@geospatial-sdk/legend';
|
|
37
37
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition.js';
|
|
@@ -97,7 +97,7 @@ import { tablerFolderOpen } from '@ng-icons/tabler-icons';
|
|
|
97
97
|
import * as i3$1 from '@angular/material/radio';
|
|
98
98
|
import { MatRadioModule } from '@angular/material/radio';
|
|
99
99
|
import { MatIconModule } from '@angular/material/icon';
|
|
100
|
-
import * as
|
|
100
|
+
import * as i4$1 from '@angular/cdk/text-field';
|
|
101
101
|
import { TextFieldModule } from '@angular/cdk/text-field';
|
|
102
102
|
import * as i2$5 from '@ngrx/router-store';
|
|
103
103
|
import { getRouterSelectors, routerReducer, StoreRouterConnectingModule, FullRouterStateSerializer } from '@ngrx/router-store';
|
|
@@ -1467,6 +1467,25 @@ function readOverviews(rootEl) {
|
|
|
1467
1467
|
function readLineage$1(rootEl, translations) {
|
|
1468
1468
|
return pipe(findNestedElement('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage', 'gmd:statement'), extractLocalizedCharacterString('lineage', translations), map(([lineage]) => lineage))(rootEl);
|
|
1469
1469
|
}
|
|
1470
|
+
function extractSourceRecords(liLineageEl) {
|
|
1471
|
+
if (!liLineageEl)
|
|
1472
|
+
return [];
|
|
1473
|
+
return pipe(findChildrenElement('gmd:source', false), mapArray((el) => {
|
|
1474
|
+
const uuid = readAttribute('uuidref')(el);
|
|
1475
|
+
const title = readAttribute('xlink:title')(el);
|
|
1476
|
+
const href = readAttribute('xlink:href')(el);
|
|
1477
|
+
if (!uuid && !title && !href)
|
|
1478
|
+
return null;
|
|
1479
|
+
return {
|
|
1480
|
+
...(uuid ? { uuid } : {}),
|
|
1481
|
+
...(title ? { title } : {}),
|
|
1482
|
+
...(href ? { href } : {}),
|
|
1483
|
+
};
|
|
1484
|
+
}), filterArray((s) => s !== null))(liLineageEl);
|
|
1485
|
+
}
|
|
1486
|
+
function readSourceRecords$1(rootEl) {
|
|
1487
|
+
return extractSourceRecords(pipe(findNestedElement('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage'))(rootEl));
|
|
1488
|
+
}
|
|
1470
1489
|
function readUpdateFrequency(rootEl) {
|
|
1471
1490
|
return pipe(findIdentification(), findNestedElement('gmd:resourceMaintenance', 'gmd:MD_MaintenanceInformation'), extractUpdateFrequency(), map((updateFrequency) => updateFrequency || 'unknown'))(rootEl);
|
|
1472
1491
|
}
|
|
@@ -1999,6 +2018,14 @@ function writeGraphicOverviews(record, rootEl) {
|
|
|
1999
2018
|
function writeLineage$1(record, rootEl) {
|
|
2000
2019
|
pipe(findNestedChildOrCreate('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage', 'gmd:statement'), writeLocalizedCharacterString(record.lineage, record.translations?.lineage, record.defaultLanguage))(rootEl);
|
|
2001
2020
|
}
|
|
2021
|
+
function appendSourceRecords(sources) {
|
|
2022
|
+
return pipe(removeChildrenByName('gmd:source'), appendChildren(...sources
|
|
2023
|
+
.filter((source) => source.uuid || source.title || source.href)
|
|
2024
|
+
.map((source) => pipe(createElement('gmd:source'), source.uuid ? writeAttribute('uuidref', source.uuid) : noop, source.title ? writeAttribute('xlink:title', source.title) : noop, source.href ? writeAttribute('xlink:href', source.href) : noop))));
|
|
2025
|
+
}
|
|
2026
|
+
function writeSourceRecords$1(record, rootEl) {
|
|
2027
|
+
pipe(findNestedChildOrCreate('gmd:dataQualityInfo', 'gmd:DQ_DataQuality', 'gmd:lineage', 'gmd:LI_Lineage'), appendSourceRecords(record.sourceRecords))(rootEl);
|
|
2028
|
+
}
|
|
2002
2029
|
function getServiceEndpointProtocol(endpoint) {
|
|
2003
2030
|
switch (endpoint.accessServiceProtocol.toLowerCase()) {
|
|
2004
2031
|
case 'wfs':
|
|
@@ -2125,6 +2152,7 @@ class Iso19139Converter extends BaseConverter {
|
|
|
2125
2152
|
spatialRepresentation: readSpatialRepresentation,
|
|
2126
2153
|
overviews: readOverviews,
|
|
2127
2154
|
lineage: readLineage$1,
|
|
2155
|
+
sourceRecords: readSourceRecords$1,
|
|
2128
2156
|
onlineResources: readOnlineResources$2,
|
|
2129
2157
|
temporalExtents: readTemporalExtents,
|
|
2130
2158
|
spatialExtents: readSpatialExtents$1,
|
|
@@ -2162,6 +2190,7 @@ class Iso19139Converter extends BaseConverter {
|
|
|
2162
2190
|
spatialRepresentation: writeSpatialRepresentation$1,
|
|
2163
2191
|
overviews: writeGraphicOverviews,
|
|
2164
2192
|
lineage: writeLineage$1,
|
|
2193
|
+
sourceRecords: writeSourceRecords$1,
|
|
2165
2194
|
onlineResources: writeOnlineResources$1,
|
|
2166
2195
|
temporalExtents: writeTemporalExtents,
|
|
2167
2196
|
spatialExtents: writeSpatialExtents,
|
|
@@ -2285,12 +2314,14 @@ class Iso19139Converter extends BaseConverter {
|
|
|
2285
2314
|
const spatialRepresentation = this.readers['spatialRepresentation'](rootEl, tr);
|
|
2286
2315
|
const temporalExtents = this.readers['temporalExtents'](rootEl, tr);
|
|
2287
2316
|
const lineage = this.readers['lineage'](rootEl, tr);
|
|
2317
|
+
const sourceRecords = this.readers['sourceRecords'](rootEl, tr);
|
|
2288
2318
|
const updateFrequency = this.readers['updateFrequency'](rootEl, tr);
|
|
2289
2319
|
return this.afterRecordRead({
|
|
2290
2320
|
...this.readBaseRecord(rootEl, tr),
|
|
2291
2321
|
kind,
|
|
2292
2322
|
status,
|
|
2293
2323
|
lineage,
|
|
2324
|
+
...(sourceRecords && { sourceRecords }),
|
|
2294
2325
|
...(spatialRepresentation && { spatialRepresentation }),
|
|
2295
2326
|
temporalExtents,
|
|
2296
2327
|
updateFrequency,
|
|
@@ -2299,12 +2330,14 @@ class Iso19139Converter extends BaseConverter {
|
|
|
2299
2330
|
}
|
|
2300
2331
|
else if (kind === 'reuse') {
|
|
2301
2332
|
const lineage = this.readers['lineage'](rootEl, tr);
|
|
2333
|
+
const sourceRecords = this.readers['sourceRecords'](rootEl, tr);
|
|
2302
2334
|
const temporalExtents = this.readers['temporalExtents'](rootEl, tr);
|
|
2303
2335
|
const reuseType = this.readers['reuseType'](rootEl, tr);
|
|
2304
2336
|
return this.afterRecordRead({
|
|
2305
2337
|
...this.readBaseRecord(rootEl, tr),
|
|
2306
2338
|
kind,
|
|
2307
2339
|
lineage,
|
|
2340
|
+
...(sourceRecords && { sourceRecords }),
|
|
2308
2341
|
temporalExtents,
|
|
2309
2342
|
reuseType,
|
|
2310
2343
|
});
|
|
@@ -2390,6 +2423,8 @@ class Iso19139Converter extends BaseConverter {
|
|
|
2390
2423
|
this.writers['spatialExtents'](record, rootEl);
|
|
2391
2424
|
(fieldChanged('lineage') || fieldChanged('translations')) &&
|
|
2392
2425
|
this.writers['lineage'](record, rootEl);
|
|
2426
|
+
fieldChanged('sourceRecords') &&
|
|
2427
|
+
this.writers['sourceRecords'](record, rootEl);
|
|
2393
2428
|
}
|
|
2394
2429
|
fieldChanged('otherLanguages') &&
|
|
2395
2430
|
this.writers['otherLanguages'](record, rootEl);
|
|
@@ -2496,6 +2531,9 @@ function readLandingPage$1(rootEl) {
|
|
|
2496
2531
|
function readLineage(rootEl, translations) {
|
|
2497
2532
|
return pipe(findNestedElement('mdb:resourceLineage', 'mrl:LI_Lineage', 'mrl:statement'), extractLocalizedCharacterString('lineage', translations), map(([lineage]) => lineage))(rootEl);
|
|
2498
2533
|
}
|
|
2534
|
+
function readSourceRecords(rootEl) {
|
|
2535
|
+
return extractSourceRecords(pipe(findNestedElement('mdb:resourceLineage', 'mrl:LI_Lineage'))(rootEl));
|
|
2536
|
+
}
|
|
2499
2537
|
function extractDateInfo(type) {
|
|
2500
2538
|
return pipe(findChildrenElement('mdb:dateInfo', false), filterArray((el) => pipe(findChildElement('cit:CI_DateTypeCode'), readAttribute('codeListValue'))(el) === type), getAtIndex(0), findChildElement('cit:date'), extractDateTime());
|
|
2501
2539
|
}
|
|
@@ -2680,6 +2718,9 @@ function writeOtherLanguages(record, rootEl) {
|
|
|
2680
2718
|
}
|
|
2681
2719
|
appendChildren(...record.otherLanguages.map((lang) => pipe(createElement('mdb:otherLocale'), writeLocaleElement(lang))))(rootEl);
|
|
2682
2720
|
}
|
|
2721
|
+
function writeSourceRecords(record, rootEl) {
|
|
2722
|
+
pipe(findNestedChildOrCreate('mdb:resourceLineage', 'mrl:LI_Lineage'), appendSourceRecords(record.sourceRecords))(rootEl);
|
|
2723
|
+
}
|
|
2683
2724
|
|
|
2684
2725
|
class Iso191153Converter extends Iso19139Converter {
|
|
2685
2726
|
constructor() {
|
|
@@ -2694,6 +2735,7 @@ class Iso191153Converter extends Iso19139Converter {
|
|
|
2694
2735
|
this.readers['ownerOrganization'] = readOwnerOrganization$1;
|
|
2695
2736
|
this.readers['landingPage'] = readLandingPage$1;
|
|
2696
2737
|
this.readers['lineage'] = readLineage;
|
|
2738
|
+
this.readers['sourceRecords'] = readSourceRecords;
|
|
2697
2739
|
this.readers['onlineResources'] = readOnlineResources$1;
|
|
2698
2740
|
this.readers['defaultLanguage'] = readDefaultLanguage$1;
|
|
2699
2741
|
this.readers['otherLanguages'] = readOtherLanguages;
|
|
@@ -2712,6 +2754,7 @@ class Iso191153Converter extends Iso19139Converter {
|
|
|
2712
2754
|
this.writers['ownerOrganization'] = () => undefined; // fixme: find a way to store this value properly
|
|
2713
2755
|
this.writers['landingPage'] = writeLandingPage;
|
|
2714
2756
|
this.writers['lineage'] = writeLineage;
|
|
2757
|
+
this.writers['sourceRecords'] = writeSourceRecords;
|
|
2715
2758
|
this.writers['onlineResources'] = writeOnlineResources;
|
|
2716
2759
|
this.writers['status'] = writeStatus;
|
|
2717
2760
|
this.writers['spatialRepresentation'] = writeSpatialRepresentation;
|
|
@@ -2794,6 +2837,8 @@ class Iso191153Converter extends Iso19139Converter {
|
|
|
2794
2837
|
'gmd:MD_BrowseGraphic': 'mcc:MD_BrowseGraphic',
|
|
2795
2838
|
'gmd:fileName': 'mcc:fileName',
|
|
2796
2839
|
'gmd:fileDescription': 'mcc:fileDescription',
|
|
2840
|
+
// lineage sources
|
|
2841
|
+
'gmd:source': 'mrl:source',
|
|
2797
2842
|
// no more URL elements
|
|
2798
2843
|
'gmd:URL': 'gco:CharacterString',
|
|
2799
2844
|
});
|
|
@@ -3344,6 +3389,7 @@ class DcatApConverter extends BaseConverter {
|
|
|
3344
3389
|
updateFrequency: () => 'unknown',
|
|
3345
3390
|
overviews: () => [],
|
|
3346
3391
|
lineage: () => '',
|
|
3392
|
+
sourceRecords: () => [],
|
|
3347
3393
|
temporalExtents: () => [],
|
|
3348
3394
|
spatialRepresentation: () => undefined,
|
|
3349
3395
|
extras: () => undefined,
|
|
@@ -3377,6 +3423,7 @@ class DcatApConverter extends BaseConverter {
|
|
|
3377
3423
|
spatialRepresentation: () => undefined,
|
|
3378
3424
|
overviews: () => undefined,
|
|
3379
3425
|
lineage: () => undefined,
|
|
3426
|
+
sourceRecords: () => [],
|
|
3380
3427
|
onlineResources: () => undefined,
|
|
3381
3428
|
temporalExtents: () => undefined,
|
|
3382
3429
|
spatialExtents: () => undefined,
|
|
@@ -3422,6 +3469,7 @@ class DcatApConverter extends BaseConverter {
|
|
|
3422
3469
|
const spatialExtents = this.readers['spatialExtents'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3423
3470
|
const temporalExtents = this.readers['temporalExtents'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3424
3471
|
const lineage = this.readers['lineage'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3472
|
+
const sourceRecords = this.readers['sourceRecords'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3425
3473
|
const onlineResources = this.readers['onlineResources'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3426
3474
|
const updateFrequency = this.readers['updateFrequency'](dataStore, catalogRecord, tr, defaultLanguage);
|
|
3427
3475
|
return {
|
|
@@ -3448,6 +3496,7 @@ class DcatApConverter extends BaseConverter {
|
|
|
3448
3496
|
securityConstraints,
|
|
3449
3497
|
otherConstraints,
|
|
3450
3498
|
lineage,
|
|
3499
|
+
sourceRecords,
|
|
3451
3500
|
...(spatialRepresentation && { spatialRepresentation }),
|
|
3452
3501
|
overviews,
|
|
3453
3502
|
spatialExtents,
|
|
@@ -18737,6 +18786,14 @@ var de = {
|
|
|
18737
18786
|
"editor.record.form.draft.updateAlert": "Seit der Erstellung dieses Entwurfs wurde dieser Datensatz am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version können dessen Änderungen gelöscht werden. Um dies zu vermeiden, können Sie Ihre Änderungen rückgängig machen oder Ihre Version in voller Kenntnis der Sachlage veröffentlichen.",
|
|
18738
18787
|
"editor.record.form.field.abstract": "Kurzbeschreibung",
|
|
18739
18788
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
18789
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
18790
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
18791
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
18792
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
18793
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
18794
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
18795
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
18796
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
18740
18797
|
"editor.record.form.field.contacts": "Ansprechpartner - Email",
|
|
18741
18798
|
"editor.record.form.field.contacts.noContact": "Bitte geben Sie mindestens einen Ansprechpartner an.",
|
|
18742
18799
|
"editor.record.form.field.contacts.placeholder": "Kontakt auswählen",
|
|
@@ -18746,6 +18803,7 @@ var de = {
|
|
|
18746
18803
|
"editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
|
|
18747
18804
|
"editor.record.form.field.license": "Lizenz",
|
|
18748
18805
|
"editor.record.form.field.onlineLinkResources": "Beigefügte Ressourcen",
|
|
18806
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
18749
18807
|
"editor.record.form.field.onlineResource.cancel": "Abbrechen",
|
|
18750
18808
|
"editor.record.form.field.onlineResource.confirm": "Bestätigen",
|
|
18751
18809
|
"editor.record.form.field.onlineResource.dialogTitle": "Vorschau des Datensatzes bearbeiten",
|
|
@@ -18821,25 +18879,25 @@ var de = {
|
|
|
18821
18879
|
"editor.record.form.temporalExtents.addRange": "Zeitraum",
|
|
18822
18880
|
"editor.record.form.temporalExtents.date": "Datum",
|
|
18823
18881
|
"editor.record.form.temporalExtents.range": "Datumsbereich",
|
|
18824
|
-
"editor.record.form.topics.
|
|
18825
|
-
"editor.record.form.topics.
|
|
18826
|
-
"editor.record.form.topics.
|
|
18827
|
-
"editor.record.form.topics.
|
|
18828
|
-
"editor.record.form.topics.
|
|
18829
|
-
"editor.record.form.topics.
|
|
18830
|
-
"editor.record.form.topics.
|
|
18831
|
-
"editor.record.form.topics.
|
|
18832
|
-
"editor.record.form.topics.
|
|
18833
|
-
"editor.record.form.topics.
|
|
18834
|
-
"editor.record.form.topics.
|
|
18835
|
-
"editor.record.form.topics.
|
|
18836
|
-
"editor.record.form.topics.
|
|
18837
|
-
"editor.record.form.topics.
|
|
18838
|
-
"editor.record.form.topics.
|
|
18839
|
-
"editor.record.form.topics.
|
|
18840
|
-
"editor.record.form.topics.
|
|
18841
|
-
"editor.record.form.topics.
|
|
18842
|
-
"editor.record.form.topics.
|
|
18882
|
+
"editor.record.form.topics.iso.biota": "Biologie",
|
|
18883
|
+
"editor.record.form.topics.iso.boundaries": "Grenzen",
|
|
18884
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Klimatologie/Meteorologie/Atmosphäre",
|
|
18885
|
+
"editor.record.form.topics.iso.economy": "Wirtschaft",
|
|
18886
|
+
"editor.record.form.topics.iso.elevation": "Höhenangaben",
|
|
18887
|
+
"editor.record.form.topics.iso.environment": "Umwelt",
|
|
18888
|
+
"editor.record.form.topics.iso.farming": "Landwirtschaft",
|
|
18889
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Geowissenschaften",
|
|
18890
|
+
"editor.record.form.topics.iso.health": "Gesundheitswesen",
|
|
18891
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Bilddaten/Basiskarten/Landbedeckung",
|
|
18892
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Aufklärung/Militär",
|
|
18893
|
+
"editor.record.form.topics.iso.location": "Ortsangaben",
|
|
18894
|
+
"editor.record.form.topics.iso.oceans": "Meere",
|
|
18895
|
+
"editor.record.form.topics.iso.planningCadastre": "Planungsunterlagen/Kataster",
|
|
18896
|
+
"editor.record.form.topics.iso.society": "Gesellschaft",
|
|
18897
|
+
"editor.record.form.topics.iso.structure": "Bauwerke",
|
|
18898
|
+
"editor.record.form.topics.iso.transportation": "Verkehrswesen",
|
|
18899
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Ver- und Entsorgung/Nachrichtenwesen",
|
|
18900
|
+
"editor.record.form.topics.iso.inlandWaters": "Binnengewässer",
|
|
18843
18901
|
"editor.record.form.topics.placeholder": "Ein oder mehrere Themen auswählen",
|
|
18844
18902
|
"editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
|
|
18845
18903
|
"editor.record.importFromExternalFile.failure.body": "Beim Importieren des Datensatzes ist ein Fehler aufgetreten:",
|
|
@@ -19081,7 +19139,6 @@ var de = {
|
|
|
19081
19139
|
"record.metadata.preview.config.idle": "Standardvorschau festlegen",
|
|
19082
19140
|
"record.metadata.preview.config.saved": "Gespeichert!",
|
|
19083
19141
|
"record.metadata.preview.config.saving": "Speichern...",
|
|
19084
|
-
"record.metadata.producer": "Datenproduzent",
|
|
19085
19142
|
"record.metadata.publication": "Veröffentlichungsdatum",
|
|
19086
19143
|
"record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
|
|
19087
19144
|
"record.metadata.quality": "Metadatenqualität",
|
|
@@ -19107,6 +19164,7 @@ var de = {
|
|
|
19107
19164
|
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
19108
19165
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
19109
19166
|
"record.metadata.related": "Entdecken Sie den Katalog",
|
|
19167
|
+
"record.metadata.resource.contacts": "Kontakte zur Ressource",
|
|
19110
19168
|
"record.metadata.resourceCreated": "Erstellt",
|
|
19111
19169
|
"record.metadata.resourcePublished": "Veröffentlicht",
|
|
19112
19170
|
"record.metadata.resourceUpdated": "Zuletzt aktualisiert",
|
|
@@ -19411,6 +19469,14 @@ var en = {
|
|
|
19411
19469
|
"editor.record.form.draft.updateAlert": "Since you created this draft, the dataset has been updated on { date } by { user }. Publishing your draft might erase their edits. To avoid this, you need to either cancel your changes or knowingly publish your own version.",
|
|
19412
19470
|
"editor.record.form.field.abstract": "Abstract",
|
|
19413
19471
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
19472
|
+
"editor.record.form.field.contactDetails.email": "Contact email",
|
|
19473
|
+
"editor.record.form.field.contactDetails.email.placeholder": "example@domainname.com",
|
|
19474
|
+
"editor.record.form.field.contactDetails.firstName": "Contact first name",
|
|
19475
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "First name",
|
|
19476
|
+
"editor.record.form.field.contactDetails.lastName": "Contact last name",
|
|
19477
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "Last name",
|
|
19478
|
+
"editor.record.form.field.contactDetails.organization": "Contact organization",
|
|
19479
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "Company",
|
|
19414
19480
|
"editor.record.form.field.contacts": "Point of contact - Email",
|
|
19415
19481
|
"editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
|
|
19416
19482
|
"editor.record.form.field.contacts.placeholder": "Choose a contact",
|
|
@@ -19420,6 +19486,7 @@ var en = {
|
|
|
19420
19486
|
"editor.record.form.field.legalConstraints": "Legal constraint",
|
|
19421
19487
|
"editor.record.form.field.license": "License",
|
|
19422
19488
|
"editor.record.form.field.onlineLinkResources": "Attached resources",
|
|
19489
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
19423
19490
|
"editor.record.form.field.onlineResource.cancel": "Cancel",
|
|
19424
19491
|
"editor.record.form.field.onlineResource.confirm": "Confirm",
|
|
19425
19492
|
"editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
|
|
@@ -19495,25 +19562,25 @@ var en = {
|
|
|
19495
19562
|
"editor.record.form.temporalExtents.addRange": "Time period",
|
|
19496
19563
|
"editor.record.form.temporalExtents.date": "Date",
|
|
19497
19564
|
"editor.record.form.temporalExtents.range": "Date range",
|
|
19498
|
-
"editor.record.form.topics.
|
|
19499
|
-
"editor.record.form.topics.
|
|
19500
|
-
"editor.record.form.topics.
|
|
19501
|
-
"editor.record.form.topics.
|
|
19502
|
-
"editor.record.form.topics.
|
|
19503
|
-
"editor.record.form.topics.
|
|
19504
|
-
"editor.record.form.topics.
|
|
19505
|
-
"editor.record.form.topics.
|
|
19506
|
-
"editor.record.form.topics.
|
|
19507
|
-
"editor.record.form.topics.
|
|
19508
|
-
"editor.record.form.topics.
|
|
19509
|
-
"editor.record.form.topics.
|
|
19510
|
-
"editor.record.form.topics.
|
|
19511
|
-
"editor.record.form.topics.
|
|
19512
|
-
"editor.record.form.topics.
|
|
19513
|
-
"editor.record.form.topics.
|
|
19514
|
-
"editor.record.form.topics.
|
|
19515
|
-
"editor.record.form.topics.
|
|
19516
|
-
"editor.record.form.topics.
|
|
19565
|
+
"editor.record.form.topics.iso.biota": "Biota",
|
|
19566
|
+
"editor.record.form.topics.iso.boundaries": "Boundaries",
|
|
19567
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Climatology / Meteorology / Atmosphere",
|
|
19568
|
+
"editor.record.form.topics.iso.economy": "Economy",
|
|
19569
|
+
"editor.record.form.topics.iso.elevation": "Elevation",
|
|
19570
|
+
"editor.record.form.topics.iso.environment": "Environnement",
|
|
19571
|
+
"editor.record.form.topics.iso.farming": "Farming",
|
|
19572
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Geoscientific Information",
|
|
19573
|
+
"editor.record.form.topics.iso.health": "Health",
|
|
19574
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Imagery / Base Maps / Earth Cover",
|
|
19575
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Intelligence / Military",
|
|
19576
|
+
"editor.record.form.topics.iso.location": "Location",
|
|
19577
|
+
"editor.record.form.topics.iso.oceans": "Oceans",
|
|
19578
|
+
"editor.record.form.topics.iso.planningCadastre": "Planning / Cadastre",
|
|
19579
|
+
"editor.record.form.topics.iso.society": "Society",
|
|
19580
|
+
"editor.record.form.topics.iso.structure": "Structure",
|
|
19581
|
+
"editor.record.form.topics.iso.transportation": "Transportation",
|
|
19582
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Utilities / Communication",
|
|
19583
|
+
"editor.record.form.topics.iso.inlandWaters": "Inland Waters",
|
|
19517
19584
|
"editor.record.form.topics.placeholder": "Select one or several topics",
|
|
19518
19585
|
"editor.record.form.updateFrequency.planned": "This dataset is updated regularly",
|
|
19519
19586
|
"editor.record.importFromExternalFile.failure.body": "Failure",
|
|
@@ -19755,7 +19822,6 @@ var en = {
|
|
|
19755
19822
|
"record.metadata.preview.config.idle": "Set as default preview",
|
|
19756
19823
|
"record.metadata.preview.config.saved": "Saved !",
|
|
19757
19824
|
"record.metadata.preview.config.saving": "Saving...",
|
|
19758
|
-
"record.metadata.producer": "Data producer",
|
|
19759
19825
|
"record.metadata.publication": "Date of publication",
|
|
19760
19826
|
"record.metadata.publications": "{count, plural, =0{publication} one{publication} other{publications}}",
|
|
19761
19827
|
"record.metadata.quality": "Metadata Quality",
|
|
@@ -19781,6 +19847,7 @@ var en = {
|
|
|
19781
19847
|
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
19782
19848
|
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
19783
19849
|
"record.metadata.related": "Explore the catalog",
|
|
19850
|
+
"record.metadata.resource.contacts": "Contacts for the resource",
|
|
19784
19851
|
"record.metadata.resourceCreated": "Created",
|
|
19785
19852
|
"record.metadata.resourcePublished": "Published",
|
|
19786
19853
|
"record.metadata.resourceUpdated": "Last updated",
|
|
@@ -20085,6 +20152,14 @@ var es = {
|
|
|
20085
20152
|
"editor.record.form.draft.updateAlert": "",
|
|
20086
20153
|
"editor.record.form.field.abstract": "",
|
|
20087
20154
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
20155
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
20156
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
20157
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
20158
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
20159
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
20160
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
20161
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
20162
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
20088
20163
|
"editor.record.form.field.contacts": "Punto de contacto - Correo ",
|
|
20089
20164
|
"editor.record.form.field.contacts.noContact": "",
|
|
20090
20165
|
"editor.record.form.field.contacts.placeholder": "",
|
|
@@ -20094,6 +20169,7 @@ var es = {
|
|
|
20094
20169
|
"editor.record.form.field.legalConstraints": "",
|
|
20095
20170
|
"editor.record.form.field.license": "",
|
|
20096
20171
|
"editor.record.form.field.onlineLinkResources": "",
|
|
20172
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "",
|
|
20097
20173
|
"editor.record.form.field.onlineResource.cancel": "",
|
|
20098
20174
|
"editor.record.form.field.onlineResource.confirm": "",
|
|
20099
20175
|
"editor.record.form.field.onlineResource.dialogTitle": "",
|
|
@@ -20169,25 +20245,25 @@ var es = {
|
|
|
20169
20245
|
"editor.record.form.temporalExtents.addRange": "",
|
|
20170
20246
|
"editor.record.form.temporalExtents.date": "",
|
|
20171
20247
|
"editor.record.form.temporalExtents.range": "",
|
|
20172
|
-
"editor.record.form.topics.
|
|
20173
|
-
"editor.record.form.topics.
|
|
20174
|
-
"editor.record.form.topics.
|
|
20175
|
-
"editor.record.form.topics.
|
|
20176
|
-
"editor.record.form.topics.
|
|
20177
|
-
"editor.record.form.topics.
|
|
20178
|
-
"editor.record.form.topics.
|
|
20179
|
-
"editor.record.form.topics.
|
|
20180
|
-
"editor.record.form.topics.
|
|
20181
|
-
"editor.record.form.topics.
|
|
20182
|
-
"editor.record.form.topics.
|
|
20183
|
-
"editor.record.form.topics.
|
|
20184
|
-
"editor.record.form.topics.
|
|
20185
|
-
"editor.record.form.topics.
|
|
20186
|
-
"editor.record.form.topics.
|
|
20187
|
-
"editor.record.form.topics.
|
|
20188
|
-
"editor.record.form.topics.
|
|
20189
|
-
"editor.record.form.topics.
|
|
20190
|
-
"editor.record.form.topics.
|
|
20248
|
+
"editor.record.form.topics.iso.biota": "",
|
|
20249
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
20250
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
20251
|
+
"editor.record.form.topics.iso.economy": "",
|
|
20252
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
20253
|
+
"editor.record.form.topics.iso.environment": "",
|
|
20254
|
+
"editor.record.form.topics.iso.farming": "",
|
|
20255
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
20256
|
+
"editor.record.form.topics.iso.health": "",
|
|
20257
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
20258
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
20259
|
+
"editor.record.form.topics.iso.location": "",
|
|
20260
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
20261
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
20262
|
+
"editor.record.form.topics.iso.society": "",
|
|
20263
|
+
"editor.record.form.topics.iso.structure": "",
|
|
20264
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
20265
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
20266
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
20191
20267
|
"editor.record.form.topics.placeholder": "",
|
|
20192
20268
|
"editor.record.form.updateFrequency.planned": "Este conjunto de datos se actualiza regularmente.",
|
|
20193
20269
|
"editor.record.importFromExternalFile.failure.body": "",
|
|
@@ -20429,7 +20505,6 @@ var es = {
|
|
|
20429
20505
|
"record.metadata.preview.config.idle": "",
|
|
20430
20506
|
"record.metadata.preview.config.saved": "",
|
|
20431
20507
|
"record.metadata.preview.config.saving": "",
|
|
20432
|
-
"record.metadata.producer": "",
|
|
20433
20508
|
"record.metadata.publication": "",
|
|
20434
20509
|
"record.metadata.publications": "{count, plural, =0{} one{} other{}}",
|
|
20435
20510
|
"record.metadata.quality": "",
|
|
@@ -20455,6 +20530,7 @@ var es = {
|
|
|
20455
20530
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
20456
20531
|
"record.metadata.quality.updateFrequency.success": "",
|
|
20457
20532
|
"record.metadata.related": "",
|
|
20533
|
+
"record.metadata.resource.contacts": "",
|
|
20458
20534
|
"record.metadata.resourceCreated": "",
|
|
20459
20535
|
"record.metadata.resourcePublished": "",
|
|
20460
20536
|
"record.metadata.resourceUpdated": "",
|
|
@@ -20759,6 +20835,14 @@ var fr = {
|
|
|
20759
20835
|
"editor.record.form.draft.updateAlert": "Depuis la création de ce brouillon, ce jeu de données a été modifié le { date } par { user }. Publier votre version peut supprimer ses modifications. Pour éviter cela, vous pouvez annuler vos changements, ou publier votre version en connaissance de cause.",
|
|
20760
20836
|
"editor.record.form.field.abstract": "Description",
|
|
20761
20837
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
20838
|
+
"editor.record.form.field.contactDetails.email": "Email du point de contact",
|
|
20839
|
+
"editor.record.form.field.contactDetails.email.placeholder": "exemple@nomdedomaine.com",
|
|
20840
|
+
"editor.record.form.field.contactDetails.firstName": "Prénom du point de contact",
|
|
20841
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "Prénom",
|
|
20842
|
+
"editor.record.form.field.contactDetails.lastName": "Nom du point de contact",
|
|
20843
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "Nom",
|
|
20844
|
+
"editor.record.form.field.contactDetails.organization": "Organisation du point de contact",
|
|
20845
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "Company",
|
|
20762
20846
|
"editor.record.form.field.contacts": "Point de contact - Email",
|
|
20763
20847
|
"editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
|
|
20764
20848
|
"editor.record.form.field.contacts.placeholder": "Choisissez un contact",
|
|
@@ -20768,6 +20852,7 @@ var fr = {
|
|
|
20768
20852
|
"editor.record.form.field.legalConstraints": "Contrainte légale",
|
|
20769
20853
|
"editor.record.form.field.license": "Licence",
|
|
20770
20854
|
"editor.record.form.field.onlineLinkResources": "Ressources attachées",
|
|
20855
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Lien",
|
|
20771
20856
|
"editor.record.form.field.onlineResource.cancel": "Annuler",
|
|
20772
20857
|
"editor.record.form.field.onlineResource.confirm": "Valider",
|
|
20773
20858
|
"editor.record.form.field.onlineResource.dialogTitle": "Modifier l'aperçu du jeu de données",
|
|
@@ -20843,25 +20928,25 @@ var fr = {
|
|
|
20843
20928
|
"editor.record.form.temporalExtents.addRange": "Période de temps",
|
|
20844
20929
|
"editor.record.form.temporalExtents.date": "Date concernée",
|
|
20845
20930
|
"editor.record.form.temporalExtents.range": "Période concernée",
|
|
20846
|
-
"editor.record.form.topics.
|
|
20847
|
-
"editor.record.form.topics.
|
|
20848
|
-
"editor.record.form.topics.
|
|
20849
|
-
"editor.record.form.topics.
|
|
20850
|
-
"editor.record.form.topics.
|
|
20851
|
-
"editor.record.form.topics.
|
|
20852
|
-
"editor.record.form.topics.
|
|
20853
|
-
"editor.record.form.topics.
|
|
20854
|
-
"editor.record.form.topics.
|
|
20855
|
-
"editor.record.form.topics.
|
|
20856
|
-
"editor.record.form.topics.
|
|
20857
|
-
"editor.record.form.topics.
|
|
20858
|
-
"editor.record.form.topics.
|
|
20859
|
-
"editor.record.form.topics.
|
|
20860
|
-
"editor.record.form.topics.
|
|
20861
|
-
"editor.record.form.topics.
|
|
20862
|
-
"editor.record.form.topics.
|
|
20863
|
-
"editor.record.form.topics.
|
|
20864
|
-
"editor.record.form.topics.
|
|
20931
|
+
"editor.record.form.topics.iso.biota": "Biote",
|
|
20932
|
+
"editor.record.form.topics.iso.boundaries": "Limites",
|
|
20933
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Climatologie/Météorologie/Atmosphère",
|
|
20934
|
+
"editor.record.form.topics.iso.economy": "Économie",
|
|
20935
|
+
"editor.record.form.topics.iso.elevation": "Altitude",
|
|
20936
|
+
"editor.record.form.topics.iso.environment": "Environnement",
|
|
20937
|
+
"editor.record.form.topics.iso.farming": "Agriculture",
|
|
20938
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Informations géoscientifiques",
|
|
20939
|
+
"editor.record.form.topics.iso.health": "Santé",
|
|
20940
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Imagerie/Cartes de base/Occupation des terres",
|
|
20941
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Renseignement/Secteur militaire",
|
|
20942
|
+
"editor.record.form.topics.iso.location": "Localisation",
|
|
20943
|
+
"editor.record.form.topics.iso.oceans": "Océans",
|
|
20944
|
+
"editor.record.form.topics.iso.planningCadastre": "Planification/Cadastre",
|
|
20945
|
+
"editor.record.form.topics.iso.society": "Société",
|
|
20946
|
+
"editor.record.form.topics.iso.structure": "Structure",
|
|
20947
|
+
"editor.record.form.topics.iso.transportation": "Transport",
|
|
20948
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Services d’utilité publique/Communication",
|
|
20949
|
+
"editor.record.form.topics.iso.inlandWaters": "Eaux intérieures",
|
|
20865
20950
|
"editor.record.form.topics.placeholder": "Sélectionnez un ou plusieurs thèmes",
|
|
20866
20951
|
"editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement",
|
|
20867
20952
|
"editor.record.importFromExternalFile.failure.body": "Une erreur est survenue pendant l'import du jeu de données : ",
|
|
@@ -21103,7 +21188,6 @@ var fr = {
|
|
|
21103
21188
|
"record.metadata.preview.config.idle": "Définir l'aperçu par défaut",
|
|
21104
21189
|
"record.metadata.preview.config.saved": "Sauvegardé !",
|
|
21105
21190
|
"record.metadata.preview.config.saving": "Sauvegarde...",
|
|
21106
|
-
"record.metadata.producer": "Producteur de la donnée",
|
|
21107
21191
|
"record.metadata.publication": "Date de publication",
|
|
21108
21192
|
"record.metadata.publications": "{count, plural, =0{ressource} one{ressource} other{ressources}}",
|
|
21109
21193
|
"record.metadata.quality": "Description de la ressource",
|
|
@@ -21129,6 +21213,7 @@ var fr = {
|
|
|
21129
21213
|
"record.metadata.quality.updateFrequency.failed": "La fréquence de mise à jour n'est pas renseignée",
|
|
21130
21214
|
"record.metadata.quality.updateFrequency.success": "La fréquence de mise à jour est renseignée",
|
|
21131
21215
|
"record.metadata.related": "Explorez le catalogue",
|
|
21216
|
+
"record.metadata.resource.contacts": "Contacts liés à la donnée",
|
|
21132
21217
|
"record.metadata.resourceCreated": "Créé",
|
|
21133
21218
|
"record.metadata.resourcePublished": "Publié",
|
|
21134
21219
|
"record.metadata.resourceUpdated": "Mis à jour",
|
|
@@ -21433,6 +21518,14 @@ var it = {
|
|
|
21433
21518
|
"editor.record.form.draft.updateAlert": "Da quando è stata creata questa bozza, questo dataset è stato modificato il { date } da { user }. La pubblicazione della sua versione potrebbe rimuovere le loro modifiche. Per evitarlo, puoi annullare le sue modifiche o pubblicare la sua versione consapevolmente.",
|
|
21434
21519
|
"editor.record.form.field.abstract": "Riassunto",
|
|
21435
21520
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
21521
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
21522
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
21523
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
21524
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
21525
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
21526
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
21527
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
21528
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
21436
21529
|
"editor.record.form.field.contacts": "",
|
|
21437
21530
|
"editor.record.form.field.contacts.noContact": "Inserisci almeno un punto di contatto.",
|
|
21438
21531
|
"editor.record.form.field.contacts.placeholder": "Scegli un contatto",
|
|
@@ -21442,6 +21535,7 @@ var it = {
|
|
|
21442
21535
|
"editor.record.form.field.legalConstraints": "Vincolo legale",
|
|
21443
21536
|
"editor.record.form.field.license": "Licenza",
|
|
21444
21537
|
"editor.record.form.field.onlineLinkResources": "Risorse allegate",
|
|
21538
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
21445
21539
|
"editor.record.form.field.onlineResource.cancel": "Annulla",
|
|
21446
21540
|
"editor.record.form.field.onlineResource.confirm": "Convalida",
|
|
21447
21541
|
"editor.record.form.field.onlineResource.dialogTitle": "Modifica anteprima dataset",
|
|
@@ -21517,25 +21611,25 @@ var it = {
|
|
|
21517
21611
|
"editor.record.form.temporalExtents.addRange": "Periodo di tempo",
|
|
21518
21612
|
"editor.record.form.temporalExtents.date": "Data rilevante",
|
|
21519
21613
|
"editor.record.form.temporalExtents.range": "Periodo interessato",
|
|
21520
|
-
"editor.record.form.topics.
|
|
21521
|
-
"editor.record.form.topics.
|
|
21522
|
-
"editor.record.form.topics.
|
|
21523
|
-
"editor.record.form.topics.
|
|
21524
|
-
"editor.record.form.topics.
|
|
21525
|
-
"editor.record.form.topics.
|
|
21526
|
-
"editor.record.form.topics.
|
|
21527
|
-
"editor.record.form.topics.
|
|
21528
|
-
"editor.record.form.topics.
|
|
21529
|
-
"editor.record.form.topics.
|
|
21530
|
-
"editor.record.form.topics.
|
|
21531
|
-
"editor.record.form.topics.
|
|
21532
|
-
"editor.record.form.topics.
|
|
21533
|
-
"editor.record.form.topics.
|
|
21534
|
-
"editor.record.form.topics.
|
|
21535
|
-
"editor.record.form.topics.
|
|
21536
|
-
"editor.record.form.topics.
|
|
21537
|
-
"editor.record.form.topics.
|
|
21538
|
-
"editor.record.form.topics.
|
|
21614
|
+
"editor.record.form.topics.iso.biota": "",
|
|
21615
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
21616
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
21617
|
+
"editor.record.form.topics.iso.economy": "",
|
|
21618
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
21619
|
+
"editor.record.form.topics.iso.environment": "",
|
|
21620
|
+
"editor.record.form.topics.iso.farming": "",
|
|
21621
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
21622
|
+
"editor.record.form.topics.iso.health": "",
|
|
21623
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
21624
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
21625
|
+
"editor.record.form.topics.iso.location": "",
|
|
21626
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
21627
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
21628
|
+
"editor.record.form.topics.iso.society": "",
|
|
21629
|
+
"editor.record.form.topics.iso.structure": "",
|
|
21630
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
21631
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
21632
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
21539
21633
|
"editor.record.form.topics.placeholder": "",
|
|
21540
21634
|
"editor.record.form.updateFrequency.planned": "Questi dati dovrebbero essere aggiornati regolarmente",
|
|
21541
21635
|
"editor.record.importFromExternalFile.failure.body": "Ha successo un'errore durante l'importazione del dataset: ",
|
|
@@ -21777,7 +21871,6 @@ var it = {
|
|
|
21777
21871
|
"record.metadata.preview.config.idle": "",
|
|
21778
21872
|
"record.metadata.preview.config.saved": "",
|
|
21779
21873
|
"record.metadata.preview.config.saving": "",
|
|
21780
|
-
"record.metadata.producer": "Produttore dei dati",
|
|
21781
21874
|
"record.metadata.publication": "Data di pubblicazione",
|
|
21782
21875
|
"record.metadata.publications": "{count, plural, =0{pubblicazione} one{pubblicazione} other{pubblicazioni}}",
|
|
21783
21876
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -21803,6 +21896,7 @@ var it = {
|
|
|
21803
21896
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
21804
21897
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
21805
21898
|
"record.metadata.related": "Vedi anche",
|
|
21899
|
+
"record.metadata.resource.contacts": "Contatti per la risorsa",
|
|
21806
21900
|
"record.metadata.resourceCreated": "Creato",
|
|
21807
21901
|
"record.metadata.resourcePublished": "Pubblicato",
|
|
21808
21902
|
"record.metadata.resourceUpdated": "Ultimo aggiornamento",
|
|
@@ -22107,6 +22201,14 @@ var nl = {
|
|
|
22107
22201
|
"editor.record.form.draft.updateAlert": "",
|
|
22108
22202
|
"editor.record.form.field.abstract": "",
|
|
22109
22203
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
22204
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
22205
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
22206
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
22207
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
22208
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
22209
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
22210
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
22211
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
22110
22212
|
"editor.record.form.field.contacts": "",
|
|
22111
22213
|
"editor.record.form.field.contacts.noContact": "",
|
|
22112
22214
|
"editor.record.form.field.contacts.placeholder": "",
|
|
@@ -22116,6 +22218,7 @@ var nl = {
|
|
|
22116
22218
|
"editor.record.form.field.legalConstraints": "",
|
|
22117
22219
|
"editor.record.form.field.license": "",
|
|
22118
22220
|
"editor.record.form.field.onlineLinkResources": "",
|
|
22221
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "",
|
|
22119
22222
|
"editor.record.form.field.onlineResource.cancel": "",
|
|
22120
22223
|
"editor.record.form.field.onlineResource.confirm": "",
|
|
22121
22224
|
"editor.record.form.field.onlineResource.dialogTitle": "",
|
|
@@ -22191,25 +22294,25 @@ var nl = {
|
|
|
22191
22294
|
"editor.record.form.temporalExtents.addRange": "",
|
|
22192
22295
|
"editor.record.form.temporalExtents.date": "",
|
|
22193
22296
|
"editor.record.form.temporalExtents.range": "",
|
|
22194
|
-
"editor.record.form.topics.
|
|
22195
|
-
"editor.record.form.topics.
|
|
22196
|
-
"editor.record.form.topics.
|
|
22197
|
-
"editor.record.form.topics.
|
|
22198
|
-
"editor.record.form.topics.
|
|
22199
|
-
"editor.record.form.topics.
|
|
22200
|
-
"editor.record.form.topics.
|
|
22201
|
-
"editor.record.form.topics.
|
|
22202
|
-
"editor.record.form.topics.
|
|
22203
|
-
"editor.record.form.topics.
|
|
22204
|
-
"editor.record.form.topics.
|
|
22205
|
-
"editor.record.form.topics.
|
|
22206
|
-
"editor.record.form.topics.
|
|
22207
|
-
"editor.record.form.topics.
|
|
22208
|
-
"editor.record.form.topics.
|
|
22209
|
-
"editor.record.form.topics.
|
|
22210
|
-
"editor.record.form.topics.
|
|
22211
|
-
"editor.record.form.topics.
|
|
22212
|
-
"editor.record.form.topics.
|
|
22297
|
+
"editor.record.form.topics.iso.biota": "",
|
|
22298
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
22299
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
22300
|
+
"editor.record.form.topics.iso.economy": "",
|
|
22301
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
22302
|
+
"editor.record.form.topics.iso.environment": "",
|
|
22303
|
+
"editor.record.form.topics.iso.farming": "",
|
|
22304
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
22305
|
+
"editor.record.form.topics.iso.health": "",
|
|
22306
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
22307
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
22308
|
+
"editor.record.form.topics.iso.location": "",
|
|
22309
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
22310
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
22311
|
+
"editor.record.form.topics.iso.society": "",
|
|
22312
|
+
"editor.record.form.topics.iso.structure": "",
|
|
22313
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
22314
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
22315
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
22213
22316
|
"editor.record.form.topics.placeholder": "",
|
|
22214
22317
|
"editor.record.form.updateFrequency.planned": "Deze dataset wordt regelmatig bijgewerkt.",
|
|
22215
22318
|
"editor.record.importFromExternalFile.failure.body": "",
|
|
@@ -22451,7 +22554,6 @@ var nl = {
|
|
|
22451
22554
|
"record.metadata.preview.config.idle": "",
|
|
22452
22555
|
"record.metadata.preview.config.saved": "",
|
|
22453
22556
|
"record.metadata.preview.config.saving": "",
|
|
22454
|
-
"record.metadata.producer": "",
|
|
22455
22557
|
"record.metadata.publication": "",
|
|
22456
22558
|
"record.metadata.publications": "{count, plural, =0{} one{} other{}}",
|
|
22457
22559
|
"record.metadata.quality": "",
|
|
@@ -22477,6 +22579,7 @@ var nl = {
|
|
|
22477
22579
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
22478
22580
|
"record.metadata.quality.updateFrequency.success": "",
|
|
22479
22581
|
"record.metadata.related": "",
|
|
22582
|
+
"record.metadata.resource.contacts": "",
|
|
22480
22583
|
"record.metadata.resourceCreated": "",
|
|
22481
22584
|
"record.metadata.resourcePublished": "",
|
|
22482
22585
|
"record.metadata.resourceUpdated": "",
|
|
@@ -22781,6 +22884,14 @@ var pt = {
|
|
|
22781
22884
|
"editor.record.form.draft.updateAlert": "",
|
|
22782
22885
|
"editor.record.form.field.abstract": "",
|
|
22783
22886
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
22887
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
22888
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
22889
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
22890
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
22891
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
22892
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
22893
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
22894
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
22784
22895
|
"editor.record.form.field.contacts": "",
|
|
22785
22896
|
"editor.record.form.field.contacts.noContact": "",
|
|
22786
22897
|
"editor.record.form.field.contacts.placeholder": "",
|
|
@@ -22790,6 +22901,7 @@ var pt = {
|
|
|
22790
22901
|
"editor.record.form.field.legalConstraints": "",
|
|
22791
22902
|
"editor.record.form.field.license": "",
|
|
22792
22903
|
"editor.record.form.field.onlineLinkResources": "",
|
|
22904
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "",
|
|
22793
22905
|
"editor.record.form.field.onlineResource.cancel": "",
|
|
22794
22906
|
"editor.record.form.field.onlineResource.confirm": "",
|
|
22795
22907
|
"editor.record.form.field.onlineResource.dialogTitle": "",
|
|
@@ -22865,25 +22977,25 @@ var pt = {
|
|
|
22865
22977
|
"editor.record.form.temporalExtents.addRange": "",
|
|
22866
22978
|
"editor.record.form.temporalExtents.date": "",
|
|
22867
22979
|
"editor.record.form.temporalExtents.range": "",
|
|
22868
|
-
"editor.record.form.topics.
|
|
22869
|
-
"editor.record.form.topics.
|
|
22870
|
-
"editor.record.form.topics.
|
|
22871
|
-
"editor.record.form.topics.
|
|
22872
|
-
"editor.record.form.topics.
|
|
22873
|
-
"editor.record.form.topics.
|
|
22874
|
-
"editor.record.form.topics.
|
|
22875
|
-
"editor.record.form.topics.
|
|
22876
|
-
"editor.record.form.topics.
|
|
22877
|
-
"editor.record.form.topics.
|
|
22878
|
-
"editor.record.form.topics.
|
|
22879
|
-
"editor.record.form.topics.
|
|
22880
|
-
"editor.record.form.topics.
|
|
22881
|
-
"editor.record.form.topics.
|
|
22882
|
-
"editor.record.form.topics.
|
|
22883
|
-
"editor.record.form.topics.
|
|
22884
|
-
"editor.record.form.topics.
|
|
22885
|
-
"editor.record.form.topics.
|
|
22886
|
-
"editor.record.form.topics.
|
|
22980
|
+
"editor.record.form.topics.iso.biota": "",
|
|
22981
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
22982
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
22983
|
+
"editor.record.form.topics.iso.economy": "",
|
|
22984
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
22985
|
+
"editor.record.form.topics.iso.environment": "",
|
|
22986
|
+
"editor.record.form.topics.iso.farming": "",
|
|
22987
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
22988
|
+
"editor.record.form.topics.iso.health": "",
|
|
22989
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
22990
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
22991
|
+
"editor.record.form.topics.iso.location": "",
|
|
22992
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
22993
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
22994
|
+
"editor.record.form.topics.iso.society": "",
|
|
22995
|
+
"editor.record.form.topics.iso.structure": "",
|
|
22996
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
22997
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
22998
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
22887
22999
|
"editor.record.form.topics.placeholder": "",
|
|
22888
23000
|
"editor.record.form.updateFrequency.planned": "Este conjunto de dados é atualizado regularmente.",
|
|
22889
23001
|
"editor.record.importFromExternalFile.failure.body": "",
|
|
@@ -23125,7 +23237,6 @@ var pt = {
|
|
|
23125
23237
|
"record.metadata.preview.config.idle": "",
|
|
23126
23238
|
"record.metadata.preview.config.saved": "",
|
|
23127
23239
|
"record.metadata.preview.config.saving": "",
|
|
23128
|
-
"record.metadata.producer": "",
|
|
23129
23240
|
"record.metadata.publication": "",
|
|
23130
23241
|
"record.metadata.publications": "{count, plural, =0{} one{} other{}}",
|
|
23131
23242
|
"record.metadata.quality": "",
|
|
@@ -23151,6 +23262,7 @@ var pt = {
|
|
|
23151
23262
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
23152
23263
|
"record.metadata.quality.updateFrequency.success": "",
|
|
23153
23264
|
"record.metadata.related": "",
|
|
23265
|
+
"record.metadata.resource.contacts": "",
|
|
23154
23266
|
"record.metadata.resourceCreated": "",
|
|
23155
23267
|
"record.metadata.resourcePublished": "",
|
|
23156
23268
|
"record.metadata.resourceUpdated": "",
|
|
@@ -23455,6 +23567,14 @@ var sk = {
|
|
|
23455
23567
|
"editor.record.form.draft.updateAlert": "",
|
|
23456
23568
|
"editor.record.form.field.abstract": "",
|
|
23457
23569
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
23570
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
23571
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
23572
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
23573
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
23574
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
23575
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
23576
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
23577
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
23458
23578
|
"editor.record.form.field.contacts": "",
|
|
23459
23579
|
"editor.record.form.field.contacts.noContact": "",
|
|
23460
23580
|
"editor.record.form.field.contacts.placeholder": "",
|
|
@@ -23464,6 +23584,7 @@ var sk = {
|
|
|
23464
23584
|
"editor.record.form.field.legalConstraints": "",
|
|
23465
23585
|
"editor.record.form.field.license": "Licencia",
|
|
23466
23586
|
"editor.record.form.field.onlineLinkResources": "",
|
|
23587
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "",
|
|
23467
23588
|
"editor.record.form.field.onlineResource.cancel": "",
|
|
23468
23589
|
"editor.record.form.field.onlineResource.confirm": "",
|
|
23469
23590
|
"editor.record.form.field.onlineResource.dialogTitle": "",
|
|
@@ -23539,25 +23660,25 @@ var sk = {
|
|
|
23539
23660
|
"editor.record.form.temporalExtents.addRange": "",
|
|
23540
23661
|
"editor.record.form.temporalExtents.date": "",
|
|
23541
23662
|
"editor.record.form.temporalExtents.range": "",
|
|
23542
|
-
"editor.record.form.topics.
|
|
23543
|
-
"editor.record.form.topics.
|
|
23544
|
-
"editor.record.form.topics.
|
|
23545
|
-
"editor.record.form.topics.
|
|
23546
|
-
"editor.record.form.topics.
|
|
23547
|
-
"editor.record.form.topics.
|
|
23548
|
-
"editor.record.form.topics.
|
|
23549
|
-
"editor.record.form.topics.
|
|
23550
|
-
"editor.record.form.topics.
|
|
23551
|
-
"editor.record.form.topics.
|
|
23552
|
-
"editor.record.form.topics.
|
|
23553
|
-
"editor.record.form.topics.
|
|
23554
|
-
"editor.record.form.topics.
|
|
23555
|
-
"editor.record.form.topics.
|
|
23556
|
-
"editor.record.form.topics.
|
|
23557
|
-
"editor.record.form.topics.
|
|
23558
|
-
"editor.record.form.topics.
|
|
23559
|
-
"editor.record.form.topics.
|
|
23560
|
-
"editor.record.form.topics.
|
|
23663
|
+
"editor.record.form.topics.iso.biota": "",
|
|
23664
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
23665
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
23666
|
+
"editor.record.form.topics.iso.economy": "",
|
|
23667
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
23668
|
+
"editor.record.form.topics.iso.environment": "",
|
|
23669
|
+
"editor.record.form.topics.iso.farming": "",
|
|
23670
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
23671
|
+
"editor.record.form.topics.iso.health": "",
|
|
23672
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
23673
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
23674
|
+
"editor.record.form.topics.iso.location": "",
|
|
23675
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
23676
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
23677
|
+
"editor.record.form.topics.iso.society": "",
|
|
23678
|
+
"editor.record.form.topics.iso.structure": "",
|
|
23679
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
23680
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
23681
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
23561
23682
|
"editor.record.form.topics.placeholder": "",
|
|
23562
23683
|
"editor.record.form.updateFrequency.planned": "Táto množina údajov sa pravidelne aktualizuje",
|
|
23563
23684
|
"editor.record.importFromExternalFile.failure.body": "",
|
|
@@ -23799,7 +23920,6 @@ var sk = {
|
|
|
23799
23920
|
"record.metadata.preview.config.idle": "",
|
|
23800
23921
|
"record.metadata.preview.config.saved": "",
|
|
23801
23922
|
"record.metadata.preview.config.saving": "",
|
|
23802
|
-
"record.metadata.producer": "",
|
|
23803
23923
|
"record.metadata.publication": "dátum publikácia",
|
|
23804
23924
|
"record.metadata.publications": "{count, plural, =0{publikácia} one{publikácia} other{publikácie}}",
|
|
23805
23925
|
"record.metadata.quality": "Kvalita metadát",
|
|
@@ -23825,6 +23945,7 @@ var sk = {
|
|
|
23825
23945
|
"record.metadata.quality.updateFrequency.failed": "Frekvencia aktualizácie nie je určená",
|
|
23826
23946
|
"record.metadata.quality.updateFrequency.success": "Frekvencia aktualizácie je určená",
|
|
23827
23947
|
"record.metadata.related": "Súvisiace záznamy",
|
|
23948
|
+
"record.metadata.resource.contacts": "Kontakty k zdroju",
|
|
23828
23949
|
"record.metadata.resourceCreated": "",
|
|
23829
23950
|
"record.metadata.resourcePublished": "",
|
|
23830
23951
|
"record.metadata.resourceUpdated": "",
|
|
@@ -24417,6 +24538,7 @@ class Gn4Converter extends BaseConverter {
|
|
|
24417
24538
|
kind: 'dataset',
|
|
24418
24539
|
status: null,
|
|
24419
24540
|
lineage: null,
|
|
24541
|
+
sourceRecords: [],
|
|
24420
24542
|
recordUpdated: null,
|
|
24421
24543
|
recordPublished: null,
|
|
24422
24544
|
ownerOrganization: null,
|
|
@@ -24863,6 +24985,51 @@ function getGeometryBoundingBox(geometry) {
|
|
|
24863
24985
|
return coordinatesReducer(emptyExtent, geometry.coordinates);
|
|
24864
24986
|
}
|
|
24865
24987
|
}
|
|
24988
|
+
/**
|
|
24989
|
+
* Builds the closed GeoJSON Polygon matching the given bounding box.
|
|
24990
|
+
*/
|
|
24991
|
+
function bboxToPolygon(bbox) {
|
|
24992
|
+
const [minX, minY, maxX, maxY] = bbox;
|
|
24993
|
+
return {
|
|
24994
|
+
type: 'Polygon',
|
|
24995
|
+
coordinates: [
|
|
24996
|
+
[
|
|
24997
|
+
[minX, minY],
|
|
24998
|
+
[minX, maxY],
|
|
24999
|
+
[maxX, maxY],
|
|
25000
|
+
[maxX, minY],
|
|
25001
|
+
[minX, minY],
|
|
25002
|
+
],
|
|
25003
|
+
],
|
|
25004
|
+
};
|
|
25005
|
+
}
|
|
25006
|
+
/**
|
|
25007
|
+
* Returns the geometry carried by a spatial extent, falling back to the polygon
|
|
25008
|
+
* derived from its bounding box. Returns null when the extent has neither.
|
|
25009
|
+
*/
|
|
25010
|
+
function spatialExtentToGeometry(extent) {
|
|
25011
|
+
if (extent.geometry)
|
|
25012
|
+
return extent.geometry;
|
|
25013
|
+
if (extent.bbox)
|
|
25014
|
+
return bboxToPolygon(extent.bbox);
|
|
25015
|
+
return null;
|
|
25016
|
+
}
|
|
25017
|
+
/**
|
|
25018
|
+
* Converts a list of dataset spatial extents into a GeoJSON FeatureCollection,
|
|
25019
|
+
* e.g. to be used as the data source of a map layer.
|
|
25020
|
+
*/
|
|
25021
|
+
function spatialExtentsToFeatureCollection(extents) {
|
|
25022
|
+
return {
|
|
25023
|
+
type: 'FeatureCollection',
|
|
25024
|
+
features: extents.reduce((features, extent) => {
|
|
25025
|
+
const geometry = spatialExtentToGeometry(extent);
|
|
25026
|
+
if (geometry) {
|
|
25027
|
+
features.push({ type: 'Feature', properties: {}, geometry });
|
|
25028
|
+
}
|
|
25029
|
+
return features;
|
|
25030
|
+
}, []),
|
|
25031
|
+
};
|
|
25032
|
+
}
|
|
24866
25033
|
|
|
24867
25034
|
function downsizeImage(blob, maxWidth, maxHeight) {
|
|
24868
25035
|
return new Promise((resolve, reject) => {
|
|
@@ -25100,6 +25267,35 @@ function removeSearchParams(url, searchParams) {
|
|
|
25100
25267
|
return urlObj.toString();
|
|
25101
25268
|
}
|
|
25102
25269
|
|
|
25270
|
+
function getIndividualDisplayName(individual) {
|
|
25271
|
+
const nameParts = [individual.firstName, individual.lastName]
|
|
25272
|
+
.filter(Boolean)
|
|
25273
|
+
.join(' ');
|
|
25274
|
+
const orgPart = individual.organization?.name
|
|
25275
|
+
? ` (${individual.organization.name})`
|
|
25276
|
+
: '';
|
|
25277
|
+
if (nameParts)
|
|
25278
|
+
return `${nameParts}${orgPart}`;
|
|
25279
|
+
return individual.organization?.name ?? individual.email ?? '';
|
|
25280
|
+
}
|
|
25281
|
+
function getAddressLines(address) {
|
|
25282
|
+
return address
|
|
25283
|
+
? address
|
|
25284
|
+
.split(',')
|
|
25285
|
+
.map((part) => part.trim())
|
|
25286
|
+
.filter(Boolean)
|
|
25287
|
+
: [];
|
|
25288
|
+
}
|
|
25289
|
+
function toIndividual(user) {
|
|
25290
|
+
return {
|
|
25291
|
+
firstName: user.name,
|
|
25292
|
+
lastName: user.surname,
|
|
25293
|
+
email: user.email,
|
|
25294
|
+
role: 'unspecified',
|
|
25295
|
+
organization: user.organisation ? { name: user.organisation } : undefined,
|
|
25296
|
+
};
|
|
25297
|
+
}
|
|
25298
|
+
|
|
25103
25299
|
marker('downloads.wfs.featuretype.not.found');
|
|
25104
25300
|
const FORMATS = {
|
|
25105
25301
|
csv: {
|
|
@@ -25333,7 +25529,7 @@ function checkFileFormat(link, format) {
|
|
|
25333
25529
|
new RegExp(`[./]${format}`, 'i').test(link.name.toLowerCase())) ||
|
|
25334
25530
|
('url' in link &&
|
|
25335
25531
|
new RegExp(`[./]${format}`, 'i').test(link.url.toString())) ||
|
|
25336
|
-
('name' in link &&
|
|
25532
|
+
('name' in link && new RegExp(`\\b${format}\\b`, 'i').test(link.name)));
|
|
25337
25533
|
}
|
|
25338
25534
|
function getBadgeColor(linkFormat) {
|
|
25339
25535
|
for (const format in FORMATS) {
|
|
@@ -25526,9 +25722,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
25526
25722
|
}] } });
|
|
25527
25723
|
|
|
25528
25724
|
var name = "geonetwork-ui";
|
|
25529
|
-
var version = "2.10.0-dev.
|
|
25725
|
+
var version = "2.10.0-dev.dc20f8516";
|
|
25530
25726
|
var engines = {
|
|
25531
|
-
node: ">=
|
|
25727
|
+
node: ">=24"
|
|
25532
25728
|
};
|
|
25533
25729
|
var main = "./index.ts";
|
|
25534
25730
|
var type = "module";
|
|
@@ -25566,7 +25762,7 @@ var peerDependencies = {
|
|
|
25566
25762
|
};
|
|
25567
25763
|
var dependencies = {
|
|
25568
25764
|
"@biesbjerg/ngx-translate-extract-marker": "~1.0.0",
|
|
25569
|
-
"@camptocamp/ogc-client": "1.3.1-dev.
|
|
25765
|
+
"@camptocamp/ogc-client": "1.3.1-dev.bb345f0",
|
|
25570
25766
|
"@geospatial-sdk/core": "0.0.5-dev.61",
|
|
25571
25767
|
"@geospatial-sdk/geocoding": "0.0.5-dev.61",
|
|
25572
25768
|
"@geospatial-sdk/legend": "0.0.5-dev.61",
|
|
@@ -25626,17 +25822,26 @@ const GEONETWORK_UI_TAG_NAME = GEONETWORK_UI_VERSION.split('-')[1]?.startsWith('
|
|
|
25626
25822
|
: `v${packageJson.version}`;
|
|
25627
25823
|
|
|
25628
25824
|
const ValidatorMapper = {
|
|
25629
|
-
title: (record) => !!record?.title,
|
|
25630
|
-
abstract: (record) => !!record?.abstract,
|
|
25631
|
-
keywords: (record) => (record?.keywords?.length ?? 0) > 0,
|
|
25632
|
-
legalConstraints:
|
|
25633
|
-
record
|
|
25634
|
-
|
|
25635
|
-
|
|
25636
|
-
|
|
25637
|
-
|
|
25638
|
-
|
|
25639
|
-
|
|
25825
|
+
title: { validator: (record) => !!record?.title },
|
|
25826
|
+
abstract: { validator: (record) => !!record?.abstract },
|
|
25827
|
+
keywords: { validator: (record) => (record?.keywords?.length ?? 0) > 0 },
|
|
25828
|
+
legalConstraints: {
|
|
25829
|
+
validator: (record) => !!(record?.legalConstraints?.length &&
|
|
25830
|
+
record.legalConstraints.some((c) => c?.text?.trim().length > 0)),
|
|
25831
|
+
},
|
|
25832
|
+
contacts: {
|
|
25833
|
+
validator: (record) => !!record?.contacts?.[0]?.email &&
|
|
25834
|
+
record.contacts[0].email !== 'missing@missing.com',
|
|
25835
|
+
},
|
|
25836
|
+
updateFrequency: {
|
|
25837
|
+
validator: (record) => !!record?.updateFrequency && record.updateFrequency !== 'unknown',
|
|
25838
|
+
},
|
|
25839
|
+
topics: { validator: (record) => (record?.topics?.length ?? 0) > 0 },
|
|
25840
|
+
organisation: {
|
|
25841
|
+
validator: (record) => !!record?.contacts?.[0]?.organization?.name,
|
|
25842
|
+
alias: 'contacts',
|
|
25843
|
+
},
|
|
25844
|
+
source: { validator: (record) => !!record?.extras?.sourcesIdentifiers },
|
|
25640
25845
|
};
|
|
25641
25846
|
function getAllKeysValidator() {
|
|
25642
25847
|
return Object.keys(ValidatorMapper);
|
|
@@ -25667,7 +25872,8 @@ function getQualityValidators(record, propsToValidate) {
|
|
|
25667
25872
|
const filteredProps = propsToValidate.filter((prop) => getMappersFromKind(record.kind).includes(prop));
|
|
25668
25873
|
return filteredProps.map((name) => ({
|
|
25669
25874
|
name,
|
|
25670
|
-
validator: () => ValidatorMapper[name](record),
|
|
25875
|
+
validator: () => ValidatorMapper[name].validator(record),
|
|
25876
|
+
alias: ValidatorMapper[name].alias,
|
|
25671
25877
|
}));
|
|
25672
25878
|
}
|
|
25673
25879
|
|
|
@@ -26329,6 +26535,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
26329
26535
|
|
|
26330
26536
|
const minPublicationApiVersion = '4.2.5';
|
|
26331
26537
|
const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
|
|
26538
|
+
const DISABLE_DRAFT = new InjectionToken('gnDisableDraft', {
|
|
26539
|
+
factory: () => false,
|
|
26540
|
+
});
|
|
26541
|
+
const DEFAULT_RECORD_CONVERTER = new InjectionToken('defaultRecordConverter', {
|
|
26542
|
+
factory: () => new Iso19139Converter(),
|
|
26543
|
+
});
|
|
26332
26544
|
class Gn4Repository {
|
|
26333
26545
|
constructor() {
|
|
26334
26546
|
this.httpClient = inject(HttpClient);
|
|
@@ -26339,6 +26551,8 @@ class Gn4Repository {
|
|
|
26339
26551
|
this.platformService = inject(PlatformServiceInterface);
|
|
26340
26552
|
this.gn4LanguagesApi = inject(LanguagesApiService);
|
|
26341
26553
|
this.settingsService = inject(Gn4SettingsService);
|
|
26554
|
+
this.disableDraft = inject(DISABLE_DRAFT, { optional: true }) ?? false;
|
|
26555
|
+
this.defaultConverter = inject(DEFAULT_RECORD_CONVERTER);
|
|
26342
26556
|
this._draftsChanged = new Subject();
|
|
26343
26557
|
this.draftsChanged$ = this._draftsChanged.asObservable();
|
|
26344
26558
|
}
|
|
@@ -26478,7 +26692,9 @@ class Gn4Repository {
|
|
|
26478
26692
|
return this.settingsService.allowEditHarvested$.pipe(map$1((allowEditHarvested) => this.canEdit(record, allowEditHarvested)));
|
|
26479
26693
|
}
|
|
26480
26694
|
openRecordForEdition(uniqueIdentifier) {
|
|
26481
|
-
const draft$ =
|
|
26695
|
+
const draft$ = this.disableDraft
|
|
26696
|
+
? of(null)
|
|
26697
|
+
: of(this.getRecordFromLocalStorage(uniqueIdentifier));
|
|
26482
26698
|
const recordAsXml$ = this.getRecordAsXml(uniqueIdentifier);
|
|
26483
26699
|
return combineLatest([draft$, recordAsXml$]).pipe(switchMap(([draft, recordAsXml]) => {
|
|
26484
26700
|
const xml = draft ?? recordAsXml;
|
|
@@ -26489,8 +26705,14 @@ class Gn4Repository {
|
|
|
26489
26705
|
}));
|
|
26490
26706
|
}
|
|
26491
26707
|
openRecordForDuplication(uniqueIdentifier) {
|
|
26492
|
-
return this.
|
|
26493
|
-
|
|
26708
|
+
return this.platformService.getUserPermissionsByGroup().pipe(map$1((permissions) => {
|
|
26709
|
+
const groupId = permissions.find((p) => p.canApprove)?.groupId?.toString() ??
|
|
26710
|
+
permissions.find((p) => p.canEdit)?.groupId?.toString();
|
|
26711
|
+
if (!groupId)
|
|
26712
|
+
throw new Error('Current user has no writable group to duplicate into');
|
|
26713
|
+
return groupId;
|
|
26714
|
+
}), switchMap((groupId) => this.gn4RecordsApi
|
|
26715
|
+
.create(uniqueIdentifier, groupId, 'METADATA', '', false, undefined, true, false, undefined, 'body', false, {
|
|
26494
26716
|
httpHeaderAccept: 'application/json',
|
|
26495
26717
|
httpContentTypeSelected: 'application/json;charset=UTF-8',
|
|
26496
26718
|
})
|
|
@@ -26502,7 +26724,7 @@ class Gn4Repository {
|
|
|
26502
26724
|
.then((record) => {
|
|
26503
26725
|
return [record, xml, true];
|
|
26504
26726
|
}));
|
|
26505
|
-
}));
|
|
26727
|
+
}))));
|
|
26506
26728
|
}
|
|
26507
26729
|
saveRecord(record, referenceRecordSource, publishToAll = true) {
|
|
26508
26730
|
return this.platformService.getApiVersion().pipe(map$1((version) => {
|
|
@@ -26532,20 +26754,28 @@ class Gn4Repository {
|
|
|
26532
26754
|
return `${TEMPORARY_ID_PREFIX}${Date.now()}`;
|
|
26533
26755
|
}
|
|
26534
26756
|
saveRecordAsDraft(record, referenceRecordSource) {
|
|
26757
|
+
if (this.disableDraft)
|
|
26758
|
+
return of('');
|
|
26535
26759
|
return this.serializeRecordToXml(record, referenceRecordSource).pipe(tap$1((recordXml) => {
|
|
26536
26760
|
this.saveRecordToLocalStorage(recordXml, record.uniqueIdentifier);
|
|
26537
26761
|
this._draftsChanged.next();
|
|
26538
26762
|
}));
|
|
26539
26763
|
}
|
|
26540
26764
|
clearRecordDraft(uniqueIdentifier) {
|
|
26765
|
+
if (this.disableDraft)
|
|
26766
|
+
return;
|
|
26541
26767
|
this.removeRecordFromLocalStorage(uniqueIdentifier);
|
|
26542
26768
|
this._draftsChanged.next();
|
|
26543
26769
|
}
|
|
26544
26770
|
recordHasDraft(uniqueIdentifier) {
|
|
26771
|
+
if (this.disableDraft)
|
|
26772
|
+
return false;
|
|
26545
26773
|
return this.getRecordFromLocalStorage(uniqueIdentifier) !== null;
|
|
26546
26774
|
}
|
|
26547
26775
|
// generated by copilot
|
|
26548
26776
|
getAllDrafts() {
|
|
26777
|
+
if (this.disableDraft)
|
|
26778
|
+
return of([]);
|
|
26549
26779
|
const items = { ...window.localStorage };
|
|
26550
26780
|
const drafts = Object.keys(items)
|
|
26551
26781
|
.filter((key) => key.startsWith('geonetwork-ui-draft-'))
|
|
@@ -26556,6 +26786,8 @@ class Gn4Repository {
|
|
|
26556
26786
|
})));
|
|
26557
26787
|
}
|
|
26558
26788
|
getDraftsCount() {
|
|
26789
|
+
if (this.disableDraft)
|
|
26790
|
+
return of(0);
|
|
26559
26791
|
const items = { ...window.localStorage };
|
|
26560
26792
|
const draftCount = Object.keys(items)
|
|
26561
26793
|
.filter((key) => key.startsWith('geonetwork-ui-draft-'))
|
|
@@ -26605,10 +26837,10 @@ class Gn4Repository {
|
|
|
26605
26837
|
.pipe(map$1((response) => response.body), catchError((error) => error.status === 404 ? of(null) : throwError(() => error)));
|
|
26606
26838
|
}
|
|
26607
26839
|
serializeRecordToXml(record, referenceRecordSource) {
|
|
26608
|
-
// if there's a reference record, use that standard; otherwise, use
|
|
26840
|
+
// if there's a reference record, use that standard; otherwise, use standard based on configuration or default
|
|
26609
26841
|
const converter = referenceRecordSource
|
|
26610
26842
|
? findConverterForDocument(referenceRecordSource)
|
|
26611
|
-
:
|
|
26843
|
+
: this.defaultConverter;
|
|
26612
26844
|
return from(converter.writeRecord(record, referenceRecordSource));
|
|
26613
26845
|
}
|
|
26614
26846
|
getExternalRecordAsXml(recordDownloadUrl) {
|
|
@@ -26962,6 +27194,7 @@ class AuthService {
|
|
|
26962
27194
|
}
|
|
26963
27195
|
return baseUrl
|
|
26964
27196
|
.replace('${current_url}', new URL(this.location.prepareExternalUrl(this.location.path()), window.location.href).toString())
|
|
27197
|
+
.replace('${current_path}', this.location.prepareExternalUrl(this.location.path()))
|
|
26965
27198
|
.replace('${lang2}', toLang2(this.translateService.currentLang))
|
|
26966
27199
|
.replace('${lang3}', toLang3(this.translateService.currentLang));
|
|
26967
27200
|
}
|
|
@@ -27231,6 +27464,7 @@ class Gn4PlatformService {
|
|
|
27231
27464
|
constructor() {
|
|
27232
27465
|
this.meApi = inject(MeApiService);
|
|
27233
27466
|
this.usersApi = inject(UsersApiService);
|
|
27467
|
+
this.groupsApi = inject(GroupsApiService);
|
|
27234
27468
|
this.mapper = inject(Gn4PlatformMapper);
|
|
27235
27469
|
this.toolsApiService = inject(ToolsApiService);
|
|
27236
27470
|
this.registriesApiService = inject(RegistriesApiService);
|
|
@@ -27295,6 +27529,48 @@ class Gn4PlatformService {
|
|
|
27295
27529
|
getUsers() {
|
|
27296
27530
|
return this.users$;
|
|
27297
27531
|
}
|
|
27532
|
+
getUserPermissionsByGroup() {
|
|
27533
|
+
if (this.disableAuth)
|
|
27534
|
+
return of([]);
|
|
27535
|
+
return combineLatest([this.meApi.getMe(), this.groupsApi.getGroups()]).pipe(map$1(([meResponse, groups]) => {
|
|
27536
|
+
if (!meResponse)
|
|
27537
|
+
return [];
|
|
27538
|
+
if (meResponse.admin) {
|
|
27539
|
+
return groups.map((group) => ({
|
|
27540
|
+
groupId: group.id,
|
|
27541
|
+
groupName: group.name,
|
|
27542
|
+
isMember: true,
|
|
27543
|
+
canEdit: true,
|
|
27544
|
+
canApprove: true,
|
|
27545
|
+
canAdministrate: true,
|
|
27546
|
+
}));
|
|
27547
|
+
}
|
|
27548
|
+
const reviewerIds = meResponse.groupsWithReviewer ?? [];
|
|
27549
|
+
const editorIds = meResponse.groupsWithEditor ?? [];
|
|
27550
|
+
const memberIds = meResponse.groupsWithRegisteredUser ?? [];
|
|
27551
|
+
const adminIds = meResponse.groupsWithUserAdmin ?? [];
|
|
27552
|
+
const groupsById = new Map(groups.map((g) => [g.id, g]));
|
|
27553
|
+
return [
|
|
27554
|
+
...new Set([
|
|
27555
|
+
...reviewerIds,
|
|
27556
|
+
...editorIds,
|
|
27557
|
+
...groups.map((g) => g.id),
|
|
27558
|
+
]),
|
|
27559
|
+
]
|
|
27560
|
+
.filter((id) => groupsById.has(id))
|
|
27561
|
+
.map((id) => {
|
|
27562
|
+
const group = groupsById.get(id);
|
|
27563
|
+
return {
|
|
27564
|
+
groupId: group.id,
|
|
27565
|
+
groupName: group.name,
|
|
27566
|
+
isMember: memberIds.includes(id),
|
|
27567
|
+
canEdit: editorIds.includes(id),
|
|
27568
|
+
canApprove: reviewerIds.includes(id),
|
|
27569
|
+
canAdministrate: adminIds.includes(id),
|
|
27570
|
+
};
|
|
27571
|
+
});
|
|
27572
|
+
}));
|
|
27573
|
+
}
|
|
27298
27574
|
translateKey(key) {
|
|
27299
27575
|
// if the key is a URI, use the registries API to look for the translation
|
|
27300
27576
|
if (key.match(/^https?:\/\//)) {
|
|
@@ -27477,6 +27753,10 @@ function provideGn4(provideOptions) {
|
|
|
27477
27753
|
provide: DISABLE_AUTH,
|
|
27478
27754
|
useValue: provideOptions?.disableAuth,
|
|
27479
27755
|
},
|
|
27756
|
+
{
|
|
27757
|
+
provide: DISABLE_DRAFT,
|
|
27758
|
+
useValue: provideOptions?.disableDraft,
|
|
27759
|
+
},
|
|
27480
27760
|
{
|
|
27481
27761
|
provide: PlatformServiceInterface,
|
|
27482
27762
|
useClass: Gn4PlatformService,
|
|
@@ -27721,8 +28001,9 @@ class MapContainerComponent {
|
|
|
27721
28001
|
}
|
|
27722
28002
|
async ngOnChanges(changes) {
|
|
27723
28003
|
if ('context' in changes && !changes['context'].isFirstChange()) {
|
|
28004
|
+
const olMap = await this.openlayersMap;
|
|
27724
28005
|
const diff = computeMapContextDiff(this.processContext(changes['context'].currentValue), this.processContext(changes['context'].previousValue));
|
|
27725
|
-
await applyContextDiffToMap(
|
|
28006
|
+
await applyContextDiffToMap(olMap, diff);
|
|
27726
28007
|
if (this._resolvedExtentChange && diff.viewChanges) {
|
|
27727
28008
|
this._resolvedExtentChange.emit(this.calculateCurrentMapExtent());
|
|
27728
28009
|
}
|
|
@@ -27891,6 +28172,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
27891
28172
|
type: Output
|
|
27892
28173
|
}] } });
|
|
27893
28174
|
|
|
28175
|
+
/**
|
|
28176
|
+
* Default style for a spatial-extent layer: a solid black outline over a
|
|
28177
|
+
* translucent grey fill.
|
|
28178
|
+
*/
|
|
28179
|
+
const DEFAULT_SPATIAL_EXTENT_STYLE = {
|
|
28180
|
+
'stroke-color': 'black',
|
|
28181
|
+
'stroke-width': 2,
|
|
28182
|
+
'fill-color': 'rgba(153, 153, 153, 0.3)',
|
|
28183
|
+
};
|
|
28184
|
+
/**
|
|
28185
|
+
* Builds a GeoJSON map layer drawing the given spatial extents: each extent is
|
|
28186
|
+
* rendered from its own geometry or, when only a bounding box is available,
|
|
28187
|
+
* from a polygon derived from that box.
|
|
28188
|
+
*
|
|
28189
|
+
* @returns the layer, or `null` when none of the extents can be represented.
|
|
28190
|
+
*/
|
|
28191
|
+
function createSpatialExtentLayer(extents, overrides) {
|
|
28192
|
+
const data = spatialExtentsToFeatureCollection(extents);
|
|
28193
|
+
if (data.features.length === 0) {
|
|
28194
|
+
return null;
|
|
28195
|
+
}
|
|
28196
|
+
return {
|
|
28197
|
+
type: 'geojson',
|
|
28198
|
+
data,
|
|
28199
|
+
label: 'Spatial extents',
|
|
28200
|
+
style: DEFAULT_SPATIAL_EXTENT_STYLE,
|
|
28201
|
+
...overrides,
|
|
28202
|
+
};
|
|
28203
|
+
}
|
|
27894
28204
|
function prioritizePageScroll(interactions) {
|
|
27895
28205
|
interactions.clear();
|
|
27896
28206
|
interactions.extend(defaults({
|
|
@@ -27928,64 +28238,20 @@ function mouseWheelZoomCondition(event) {
|
|
|
27928
28238
|
|
|
27929
28239
|
class SpatialExtentComponent {
|
|
27930
28240
|
constructor() {
|
|
28241
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
27931
28242
|
this.spatialExtents$ = new BehaviorSubject([]);
|
|
27932
|
-
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1(
|
|
27933
|
-
|
|
27934
|
-
|
|
28243
|
+
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1((extents) => {
|
|
28244
|
+
const layer = createSpatialExtentLayer(extents);
|
|
28245
|
+
if (!layer) {
|
|
28246
|
+
return of(null);
|
|
27935
28247
|
}
|
|
27936
|
-
|
|
27937
|
-
type: 'FeatureCollection',
|
|
27938
|
-
features: [],
|
|
27939
|
-
};
|
|
27940
|
-
extents.forEach((extent) => {
|
|
27941
|
-
if (extent.geometry) {
|
|
27942
|
-
featureCollection.features.push({
|
|
27943
|
-
type: 'Feature',
|
|
27944
|
-
properties: {},
|
|
27945
|
-
geometry: extent.geometry,
|
|
27946
|
-
});
|
|
27947
|
-
}
|
|
27948
|
-
else if (extent.bbox?.length >= 0) {
|
|
27949
|
-
featureCollection.features.push({
|
|
27950
|
-
type: 'Feature',
|
|
27951
|
-
properties: {},
|
|
27952
|
-
geometry: this.bboxCoordsToGeometry(extent.bbox),
|
|
27953
|
-
});
|
|
27954
|
-
}
|
|
27955
|
-
});
|
|
27956
|
-
const layer = {
|
|
27957
|
-
type: 'geojson',
|
|
27958
|
-
data: featureCollection,
|
|
27959
|
-
label: 'Spatial extents',
|
|
27960
|
-
style: {
|
|
27961
|
-
'stroke-color': 'black',
|
|
27962
|
-
'stroke-width': 2,
|
|
27963
|
-
'fill-color': 'rgba(153, 153, 153, 0.3)',
|
|
27964
|
-
},
|
|
27965
|
-
};
|
|
27966
|
-
const view = await createViewFromLayer(layer);
|
|
27967
|
-
return {
|
|
27968
|
-
view,
|
|
27969
|
-
layers: [layer],
|
|
27970
|
-
};
|
|
28248
|
+
return from(createViewFromLayer(layer)).pipe(map$1((view) => ({ view, layers: [layer] })), tap$1(() => this._cdr.markForCheck()));
|
|
27971
28249
|
}));
|
|
27972
28250
|
this.error = '';
|
|
27973
28251
|
}
|
|
27974
28252
|
set spatialExtents(value) {
|
|
27975
28253
|
this.spatialExtents$.next(value);
|
|
27976
28254
|
}
|
|
27977
|
-
bboxCoordsToGeometry(bbox) {
|
|
27978
|
-
const geometry = new Polygon([
|
|
27979
|
-
[
|
|
27980
|
-
[bbox[0], bbox[1]],
|
|
27981
|
-
[bbox[0], bbox[3]],
|
|
27982
|
-
[bbox[2], bbox[3]],
|
|
27983
|
-
[bbox[2], bbox[1]],
|
|
27984
|
-
[bbox[0], bbox[1]],
|
|
27985
|
-
],
|
|
27986
|
-
]);
|
|
27987
|
-
return new GeoJSON().writeGeometryObject(geometry);
|
|
27988
|
-
}
|
|
27989
28255
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SpatialExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27990
28256
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", 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: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "extentChange", "sourceLoadError", "resolvedExtentChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
|
|
27991
28257
|
}
|
|
@@ -28018,6 +28284,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
28018
28284
|
|
|
28019
28285
|
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
28020
28286
|
|
|
28287
|
+
/**
|
|
28288
|
+
* Style of the extent overlay drawn on top of the previewed data: a dashed
|
|
28289
|
+
* black outline over a very light fill, so the extent stays readable without
|
|
28290
|
+
* hiding the data underneath.
|
|
28291
|
+
*/
|
|
28292
|
+
const RECORD_EXTENT_OVERLAY_STYLE = {
|
|
28293
|
+
'stroke-color': 'rgba(0, 0, 0, 0.6)',
|
|
28294
|
+
'stroke-width': 2,
|
|
28295
|
+
'stroke-line-dash': [8, 6],
|
|
28296
|
+
'fill-color': 'rgba(0, 0, 0, 0.03)',
|
|
28297
|
+
};
|
|
28021
28298
|
class MapUtilsService {
|
|
28022
28299
|
getRecordExtent(record) {
|
|
28023
28300
|
if (!('spatialExtents' in record) || record.spatialExtents.length === 0) {
|
|
@@ -28033,6 +28310,21 @@ class MapUtilsService {
|
|
|
28033
28310
|
return prev;
|
|
28034
28311
|
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
28035
28312
|
}
|
|
28313
|
+
/**
|
|
28314
|
+
* Builds a non-interactive overlay layer drawing the spatial extent(s)
|
|
28315
|
+
* declared in the record's metadata (bounding boxes and/or geometries).
|
|
28316
|
+
* Returns null when the record has no usable spatial extent.
|
|
28317
|
+
*
|
|
28318
|
+
* This is purely for display and is independent from the map's initial view,
|
|
28319
|
+
* which is derived separately (see {@link getRecordExtent}).
|
|
28320
|
+
*/
|
|
28321
|
+
getRecordExtentLayer(record) {
|
|
28322
|
+
return createSpatialExtentLayer(record.spatialExtents ?? [], {
|
|
28323
|
+
label: 'Spatial extent',
|
|
28324
|
+
clickable: false,
|
|
28325
|
+
style: RECORD_EXTENT_OVERLAY_STYLE,
|
|
28326
|
+
});
|
|
28327
|
+
}
|
|
28036
28328
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MapUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28037
28329
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
28038
28330
|
}
|
|
@@ -28130,6 +28422,36 @@ function checkMetadataLanguage(parsedConfigSection, outWarnings) {
|
|
|
28130
28422
|
}
|
|
28131
28423
|
return parsedConfigSection;
|
|
28132
28424
|
}
|
|
28425
|
+
function checkNewRecordDefaultLanguage(parsedConfigSection, outWarnings) {
|
|
28426
|
+
const lang2 = toLang2(parsedConfigSection.new_record_default_language.toLowerCase());
|
|
28427
|
+
if (!(lang2 in LANG_2_TO_3_MAPPER)) {
|
|
28428
|
+
outWarnings.push(`In the [editing] section: new_record_default_language = "${parsedConfigSection.new_record_default_language}" is not a recognized ISO 639 language code`);
|
|
28429
|
+
return {
|
|
28430
|
+
...parsedConfigSection,
|
|
28431
|
+
new_record_default_language: undefined,
|
|
28432
|
+
};
|
|
28433
|
+
}
|
|
28434
|
+
return {
|
|
28435
|
+
...parsedConfigSection,
|
|
28436
|
+
new_record_default_language: lang2,
|
|
28437
|
+
};
|
|
28438
|
+
}
|
|
28439
|
+
function checkNewRecordStandard(parsedConfigSection, outWarnings) {
|
|
28440
|
+
const standard = parsedConfigSection.new_record_standard;
|
|
28441
|
+
const normalizedStandard = typeof standard === 'string' ? standard.trim().toLowerCase() : null;
|
|
28442
|
+
if (normalizedStandard === 'iso19139' ||
|
|
28443
|
+
normalizedStandard === 'iso19115-3') {
|
|
28444
|
+
return {
|
|
28445
|
+
...parsedConfigSection,
|
|
28446
|
+
new_record_standard: normalizedStandard,
|
|
28447
|
+
};
|
|
28448
|
+
}
|
|
28449
|
+
outWarnings.push(`In the [editing] section: new_record_standard = "${standard}" is not a supported metadata standard`);
|
|
28450
|
+
return {
|
|
28451
|
+
...parsedConfigSection,
|
|
28452
|
+
new_record_standard: undefined,
|
|
28453
|
+
};
|
|
28454
|
+
}
|
|
28133
28455
|
|
|
28134
28456
|
/**
|
|
28135
28457
|
* This loader extends the default one based on JSON files but also loads custom translations
|
|
@@ -28170,6 +28492,10 @@ let searchConfig = null;
|
|
|
28170
28492
|
function getOptionalSearchConfig() {
|
|
28171
28493
|
return searchConfig;
|
|
28172
28494
|
}
|
|
28495
|
+
let editorConfig = null;
|
|
28496
|
+
function getOptionalEditorConfig() {
|
|
28497
|
+
return editorConfig;
|
|
28498
|
+
}
|
|
28173
28499
|
let metadataQualityConfig = null;
|
|
28174
28500
|
function getMetadataQualityConfig() {
|
|
28175
28501
|
return (metadataQualityConfig ||
|
|
@@ -28327,6 +28653,22 @@ function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
|
|
|
28327
28653
|
ENABLED: parsedMetadataQualitySection.enabled,
|
|
28328
28654
|
SORTABLE: parsedMetadataQualitySection.sortable,
|
|
28329
28655
|
};
|
|
28656
|
+
let parsedEditingSection = parseConfigSection(parsed, 'editing', [], ['new_record_default_language', 'new_record_standard'], warnings, errors);
|
|
28657
|
+
if (parsedEditingSection !== null &&
|
|
28658
|
+
parsedEditingSection.new_record_default_language !== undefined) {
|
|
28659
|
+
parsedEditingSection = checkNewRecordDefaultLanguage(parsedEditingSection, warnings);
|
|
28660
|
+
}
|
|
28661
|
+
if (parsedEditingSection !== null &&
|
|
28662
|
+
parsedEditingSection.new_record_standard !== undefined) {
|
|
28663
|
+
parsedEditingSection = checkNewRecordStandard(parsedEditingSection, warnings);
|
|
28664
|
+
}
|
|
28665
|
+
editorConfig =
|
|
28666
|
+
parsedEditingSection === null
|
|
28667
|
+
? null
|
|
28668
|
+
: {
|
|
28669
|
+
NEW_RECORD_DEFAULT_LANGUAGE: parsedEditingSection.new_record_default_language,
|
|
28670
|
+
NEW_RECORD_STANDARD: parsedEditingSection.new_record_standard,
|
|
28671
|
+
};
|
|
28330
28672
|
customTranslations = parseTranslationsConfigSection(parsed, 'translations');
|
|
28331
28673
|
if (errors.length) {
|
|
28332
28674
|
throw new Error(`One or more mandatory settings were missing from the configuration file.
|
|
@@ -28345,6 +28687,7 @@ function isConfigLoaded() {
|
|
|
28345
28687
|
function _reset() {
|
|
28346
28688
|
globalConfig = null;
|
|
28347
28689
|
themeConfig = null;
|
|
28690
|
+
editorConfig = null;
|
|
28348
28691
|
customTranslations = null;
|
|
28349
28692
|
}
|
|
28350
28693
|
const TRANSLATE_WITH_OVERRIDES_CONFIG = {
|
|
@@ -29113,9 +29456,15 @@ class ButtonComponent {
|
|
|
29113
29456
|
case 'gray':
|
|
29114
29457
|
this.btnClass = 'gn-ui-btn-gray';
|
|
29115
29458
|
break;
|
|
29459
|
+
case 'gray-light':
|
|
29460
|
+
this.btnClass = 'gn-ui-btn-gray-light';
|
|
29461
|
+
break;
|
|
29116
29462
|
case 'black':
|
|
29117
29463
|
this.btnClass = 'gn-ui-btn-black';
|
|
29118
29464
|
break;
|
|
29465
|
+
case 'primary-light':
|
|
29466
|
+
this.btnClass = 'gn-ui-btn-primary-light';
|
|
29467
|
+
break;
|
|
29119
29468
|
case 'default':
|
|
29120
29469
|
default:
|
|
29121
29470
|
this.btnClass = 'gn-ui-btn-default';
|
|
@@ -30227,7 +30576,8 @@ class UrlInputComponent {
|
|
|
30227
30576
|
this.cd.markForCheck();
|
|
30228
30577
|
this.valueChange.next(value);
|
|
30229
30578
|
}
|
|
30230
|
-
handleUpload(element) {
|
|
30579
|
+
handleUpload(element, event) {
|
|
30580
|
+
event.stopPropagation();
|
|
30231
30581
|
const value = element.value;
|
|
30232
30582
|
if (!value || !this.isValidUrl(value))
|
|
30233
30583
|
return;
|
|
@@ -30248,7 +30598,7 @@ class UrlInputComponent {
|
|
|
30248
30598
|
provideNgIconsConfig({
|
|
30249
30599
|
size: '1.5em',
|
|
30250
30600
|
}),
|
|
30251
|
-
], usesOnChanges: true, ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n @if (showValidateButton) {\n <gn-ui-button\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n }\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30601
|
+
], usesOnChanges: true, ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input, $event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n @if (showValidateButton) {\n <gn-ui-button\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input, $event)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n }\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30252
30602
|
}
|
|
30253
30603
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: UrlInputComponent, decorators: [{
|
|
30254
30604
|
type: Component,
|
|
@@ -30257,7 +30607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
30257
30607
|
provideNgIconsConfig({
|
|
30258
30608
|
size: '1.5em',
|
|
30259
30609
|
}),
|
|
30260
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n @if (showValidateButton) {\n <gn-ui-button\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n }\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
|
|
30610
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input, $event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n @if (showValidateButton) {\n <gn-ui-button\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input, $event)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n }\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
|
|
30261
30611
|
}], propDecorators: { value: [{
|
|
30262
30612
|
type: Input
|
|
30263
30613
|
}], extraClass: [{
|
|
@@ -34042,10 +34392,7 @@ class MetadataContactComponent {
|
|
|
34042
34392
|
: this.metadata.contactsForResource) || []);
|
|
34043
34393
|
}
|
|
34044
34394
|
get address() {
|
|
34045
|
-
|
|
34046
|
-
.split(',')
|
|
34047
|
-
.map((part) => part.trim());
|
|
34048
|
-
return addressParts;
|
|
34395
|
+
return getAddressLines(this.contacts[0]?.address);
|
|
34049
34396
|
}
|
|
34050
34397
|
onOrganizationClick() {
|
|
34051
34398
|
this.organizationClick.emit(this.shownOrganization);
|
|
@@ -34177,6 +34524,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34177
34524
|
}]
|
|
34178
34525
|
}] });
|
|
34179
34526
|
|
|
34527
|
+
class ContactDetailsComponent {
|
|
34528
|
+
get organization() {
|
|
34529
|
+
return this.contact?.organization;
|
|
34530
|
+
}
|
|
34531
|
+
get displayName() {
|
|
34532
|
+
return getIndividualDisplayName(this.contact);
|
|
34533
|
+
}
|
|
34534
|
+
get addressLines() {
|
|
34535
|
+
return getAddressLines(this.contact?.address);
|
|
34536
|
+
}
|
|
34537
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34538
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactDetailsComponent, isStandalone: true, selector: "gn-ui-contact-details", inputs: { contact: "contact" }, ngImport: i0, template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "ngmodule", type: TranslateModule }], viewProviders: [
|
|
34539
|
+
provideIcons({
|
|
34540
|
+
matCallOutline,
|
|
34541
|
+
matLocationOnOutline,
|
|
34542
|
+
matMailOutline,
|
|
34543
|
+
matOpenInNew,
|
|
34544
|
+
}),
|
|
34545
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34546
|
+
}
|
|
34547
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, decorators: [{
|
|
34548
|
+
type: Component,
|
|
34549
|
+
args: [{ selector: 'gn-ui-contact-details', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ThumbnailComponent, TranslateModule], viewProviders: [
|
|
34550
|
+
provideIcons({
|
|
34551
|
+
matCallOutline,
|
|
34552
|
+
matLocationOnOutline,
|
|
34553
|
+
matMailOutline,
|
|
34554
|
+
matOpenInNew,
|
|
34555
|
+
}),
|
|
34556
|
+
], template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n" }]
|
|
34557
|
+
}], propDecorators: { contact: [{
|
|
34558
|
+
type: Input
|
|
34559
|
+
}] } });
|
|
34560
|
+
|
|
34561
|
+
class ContactPillComponent {
|
|
34562
|
+
constructor() {
|
|
34563
|
+
this.host = inject((ElementRef));
|
|
34564
|
+
this.overlayOpen = false;
|
|
34565
|
+
this.overlayWidth = 0;
|
|
34566
|
+
this.overlayOffsetX = 0;
|
|
34567
|
+
this.overlayPositions = [
|
|
34568
|
+
{
|
|
34569
|
+
originX: 'start',
|
|
34570
|
+
originY: 'bottom',
|
|
34571
|
+
overlayX: 'start',
|
|
34572
|
+
overlayY: 'top',
|
|
34573
|
+
offsetY: 4,
|
|
34574
|
+
},
|
|
34575
|
+
{
|
|
34576
|
+
originX: 'start',
|
|
34577
|
+
originY: 'top',
|
|
34578
|
+
overlayX: 'start',
|
|
34579
|
+
overlayY: 'bottom',
|
|
34580
|
+
offsetY: -4,
|
|
34581
|
+
},
|
|
34582
|
+
];
|
|
34583
|
+
}
|
|
34584
|
+
get displayName() {
|
|
34585
|
+
return getIndividualDisplayName(this.contact);
|
|
34586
|
+
}
|
|
34587
|
+
toggleOverlay() {
|
|
34588
|
+
if (!this.overlayOpen) {
|
|
34589
|
+
// Calculate the width and horizontal offset of the overlay to align it with the parent element
|
|
34590
|
+
const parent = this.host.nativeElement.parentElement.getBoundingClientRect();
|
|
34591
|
+
const pill = this.host.nativeElement.getBoundingClientRect();
|
|
34592
|
+
this.overlayWidth = parent.width;
|
|
34593
|
+
this.overlayOffsetX = parent.left - pill.left;
|
|
34594
|
+
}
|
|
34595
|
+
this.overlayOpen = !this.overlayOpen;
|
|
34596
|
+
}
|
|
34597
|
+
closeOverlay() {
|
|
34598
|
+
this.overlayOpen = false;
|
|
34599
|
+
}
|
|
34600
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34601
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactPillComponent, isStandalone: true, selector: "gn-ui-contact-pill", inputs: { contact: "contact" }, ngImport: i0, template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$8.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$8.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ContactDetailsComponent, selector: "gn-ui-contact-details", inputs: ["contact"] }], viewProviders: [provideIcons({ matClose, matInfoOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34602
|
+
}
|
|
34603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, decorators: [{
|
|
34604
|
+
type: Component,
|
|
34605
|
+
args: [{ selector: 'gn-ui-contact-pill', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ButtonComponent, OverlayModule, ContactDetailsComponent], viewProviders: [provideIcons({ matClose, matInfoOutline })], template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n" }]
|
|
34606
|
+
}], propDecorators: { contact: [{
|
|
34607
|
+
type: Input
|
|
34608
|
+
}] } });
|
|
34609
|
+
|
|
34180
34610
|
class MetadataInfoComponent {
|
|
34181
34611
|
constructor() {
|
|
34182
34612
|
this.dateService = inject(DateService);
|
|
@@ -34232,20 +34662,32 @@ class MetadataInfoComponent {
|
|
|
34232
34662
|
const temporalExtents = this.metadata.kind === 'dataset' ? this.metadata.temporalExtents : [];
|
|
34233
34663
|
return getTemporalRangeUnion(temporalExtents, this.dateService);
|
|
34234
34664
|
}
|
|
34235
|
-
get shownOrganization() {
|
|
34236
|
-
return this.metadata.ownerOrganization;
|
|
34237
|
-
}
|
|
34238
|
-
get resourceContact() {
|
|
34239
|
-
return this.metadata.contactsForResource?.[0];
|
|
34240
|
-
}
|
|
34241
34665
|
fieldReady(propName) {
|
|
34242
34666
|
return !this.incomplete || propName in this.metadata;
|
|
34243
34667
|
}
|
|
34668
|
+
get contactGroups() {
|
|
34669
|
+
const groups = [];
|
|
34670
|
+
const indexByRole = new Map();
|
|
34671
|
+
for (const contact of this.metadata.contactsForResource ?? []) {
|
|
34672
|
+
if (indexByRole.has(contact.role)) {
|
|
34673
|
+
groups[indexByRole.get(contact.role)].contacts.push(contact);
|
|
34674
|
+
}
|
|
34675
|
+
else {
|
|
34676
|
+
indexByRole.set(contact.role, groups.length);
|
|
34677
|
+
groups.push({
|
|
34678
|
+
role: contact.role,
|
|
34679
|
+
roleLabel: RoleLabels.get(contact.role),
|
|
34680
|
+
contacts: [contact],
|
|
34681
|
+
});
|
|
34682
|
+
}
|
|
34683
|
+
}
|
|
34684
|
+
return groups;
|
|
34685
|
+
}
|
|
34244
34686
|
onKeywordClick(keyword) {
|
|
34245
34687
|
this.keyword.emit(keyword);
|
|
34246
34688
|
}
|
|
34247
34689
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34248
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", 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 @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-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 }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n >{{ keyword.label }}</gn-ui-badge\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track license) {\n @if (license.url) {\n <div 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 } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n @if (resourceContact) {\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n data-test=\"details-panel-resource-contact\"\n >\n @if (resourceContact.organization?.logoUrl?.href) {\n <div\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 }\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 @if (resourceContact.organization?.website) {\n <div>\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 }\n @if (resourceContact.email) {\n <div class=\"mt-4\">\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 @if (resourceContact.email) {\n <a\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 }\n </div>\n </div>\n }\n </div>\n </div>\n }\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 @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\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 }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\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}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\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>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\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 }\n @if (metadata.uniqueIdentifier) {\n <div>\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 }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\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 .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "directive", type: 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", "iconColor", "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: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
|
|
34690
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", 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 @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-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 }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div 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 } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\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 @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\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 }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\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}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\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>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\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 }\n @if (metadata.uniqueIdentifier) {\n <div>\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 }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\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)}\n"], dependencies: [{ kind: "directive", type: 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", "iconColor", "collapsed"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { 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: 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: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "component", type: ContactPillComponent, selector: "gn-ui-contact-pill", inputs: ["contact"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
|
|
34249
34691
|
provideIcons({
|
|
34250
34692
|
matOpenInNew,
|
|
34251
34693
|
matMailOutline: matMailOutline$1,
|
|
@@ -34259,21 +34701,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34259
34701
|
TranslatePipe,
|
|
34260
34702
|
MarkdownParserComponent,
|
|
34261
34703
|
ExpandablePanelComponent,
|
|
34704
|
+
ButtonComponent,
|
|
34262
34705
|
BadgeComponent,
|
|
34263
34706
|
ContentGhostComponent,
|
|
34264
|
-
ThumbnailComponent,
|
|
34265
34707
|
MaxLinesComponent,
|
|
34266
34708
|
CopyTextButtonComponent,
|
|
34267
34709
|
NgIcon,
|
|
34268
34710
|
GnUiLinkifyDirective,
|
|
34269
34711
|
GnUiHumanizeDateDirective,
|
|
34270
34712
|
SpatialExtentComponent,
|
|
34713
|
+
ContactPillComponent,
|
|
34271
34714
|
], viewProviders: [
|
|
34272
34715
|
provideIcons({
|
|
34273
34716
|
matOpenInNew,
|
|
34274
34717
|
matMailOutline: matMailOutline$1,
|
|
34275
34718
|
}),
|
|
34276
|
-
], 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 @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-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 }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n >{{ keyword.label }}</gn-ui-badge\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track license) {\n @if (license.url) {\n <div 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 } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n @if (resourceContact) {\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n data-test=\"details-panel-resource-contact\"\n >\n @if (resourceContact.organization?.logoUrl?.href) {\n <div\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 }\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 @if (resourceContact.organization?.website) {\n <div>\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 }\n @if (resourceContact.email) {\n <div class=\"mt-4\">\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 @if (resourceContact.email) {\n <a\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 }\n </div>\n </div>\n }\n </div>\n </div>\n }\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 @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\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 }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\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}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\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>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\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 }\n @if (metadata.uniqueIdentifier) {\n <div>\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 }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\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 .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
|
|
34719
|
+
], 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 @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-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 }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div 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 } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\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 @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\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 }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\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}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\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>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\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 }\n @if (metadata.uniqueIdentifier) {\n <div>\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 }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\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)}\n"] }]
|
|
34277
34720
|
}], propDecorators: { metadata: [{
|
|
34278
34721
|
type: Input
|
|
34279
34722
|
}], incomplete: [{
|
|
@@ -34743,7 +35186,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34743
35186
|
class InternalLinkCardComponent {
|
|
34744
35187
|
constructor() {
|
|
34745
35188
|
this.elementRef = inject(ElementRef);
|
|
34746
|
-
this.linkTarget = '_blank';
|
|
34747
35189
|
this.linkHref = null;
|
|
34748
35190
|
this.mdSelect = new EventEmitter();
|
|
34749
35191
|
this.subscription = new Subscription();
|
|
@@ -34771,7 +35213,7 @@ class InternalLinkCardComponent {
|
|
|
34771
35213
|
cardWidth <= 490);
|
|
34772
35214
|
}
|
|
34773
35215
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: InternalLinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34774
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: InternalLinkCardComponent, isStandalone: true, selector: "gn-ui-internal-link-card", inputs: { record: "record",
|
|
35216
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: InternalLinkCardComponent, isStandalone: true, selector: "gn-ui-internal-link-card", inputs: { record: "record", linkHref: "linkHref", metadataQualityDisplay: "metadataQualityDisplay", favoriteTemplate: "favoriteTemplate", size: "size" }, outputs: { mdSelect: "mdSelect" }, providers: [
|
|
34775
35217
|
provideIcons({
|
|
34776
35218
|
iconoirBank,
|
|
34777
35219
|
matLocationSearchingOutline,
|
|
@@ -34779,7 +35221,7 @@ class InternalLinkCardComponent {
|
|
|
34779
35221
|
provideNgIconsConfig({
|
|
34780
35222
|
size: '1.2em',
|
|
34781
35223
|
}),
|
|
34782
|
-
], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n
|
|
35224
|
+
], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n target=\"_self\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n @if (shouldShowThumbnail) {\n <div class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2\" [class.h-full]=\"size !== 'M'\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <!-- force max width here as long a-href urls within the markdown parser can cause layout issues -->\n <div class=\"grow max-w-[248px] sm:max-w-full\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n @if (size !== 'M') {\n <ng-container [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n }\n </div>\n </div>\n @if (size === 'M') {\n <ng-container [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n }\n</a>\n\n<ng-template #footerTpl>\n <div class=\"record-card__footer\">\n @if (record.ownerOrganization?.name) {\n <div\n data-cy=\"recordOrg\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n @if (!displayContactIconOnly) {\n <span\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n }\n </div>\n }\n <div class=\"record-card__footer__other\">\n <div class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\">\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n @if (metadataQualityDisplay) {\n <gn-ui-metadata-quality\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n [popoverDisplay]=\"true\"\n ></gn-ui-metadata-quality>\n }\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] gap-4 flex-wrap;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-[184px] h-[184px];}.size-M .record-card__thumbnail{@apply w-[138px] h-[138px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title,.size-M .record-card__title{@apply line-clamp-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract,.size-M .record-card__abstract{@apply line-clamp-3;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay", "popoverDisplay", "propsToValidate", "forceComputeScore"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KindBadgeComponent, selector: "gn-ui-kind-badge", inputs: ["styling", "contentTemplate", "kind", "extraClass"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
|
|
34783
35225
|
}
|
|
34784
35226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: InternalLinkCardComponent, decorators: [{
|
|
34785
35227
|
type: Component,
|
|
@@ -34799,11 +35241,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34799
35241
|
provideNgIconsConfig({
|
|
34800
35242
|
size: '1.2em',
|
|
34801
35243
|
}),
|
|
34802
|
-
], template: "<a\n [attr.href]=\"linkHref\"\n
|
|
35244
|
+
], template: "<a\n [attr.href]=\"linkHref\"\n target=\"_self\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n @if (shouldShowThumbnail) {\n <div class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2\" [class.h-full]=\"size !== 'M'\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <!-- force max width here as long a-href urls within the markdown parser can cause layout issues -->\n <div class=\"grow max-w-[248px] sm:max-w-full\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n @if (size !== 'M') {\n <ng-container [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n }\n </div>\n </div>\n @if (size === 'M') {\n <ng-container [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n }\n</a>\n\n<ng-template #footerTpl>\n <div class=\"record-card__footer\">\n @if (record.ownerOrganization?.name) {\n <div\n data-cy=\"recordOrg\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n @if (!displayContactIconOnly) {\n <span\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n }\n </div>\n }\n <div class=\"record-card__footer__other\">\n <div class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\">\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n @if (metadataQualityDisplay) {\n <gn-ui-metadata-quality\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n [popoverDisplay]=\"true\"\n ></gn-ui-metadata-quality>\n }\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] gap-4 flex-wrap;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-[184px] h-[184px];}.size-M .record-card__thumbnail{@apply w-[138px] h-[138px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title,.size-M .record-card__title{@apply line-clamp-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract,.size-M .record-card__abstract{@apply line-clamp-3;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"] }]
|
|
34803
35245
|
}], propDecorators: { record: [{
|
|
34804
35246
|
type: Input
|
|
34805
|
-
}], linkTarget: [{
|
|
34806
|
-
type: Input
|
|
34807
35247
|
}], linkHref: [{
|
|
34808
35248
|
type: Input
|
|
34809
35249
|
}], metadataQualityDisplay: [{
|
|
@@ -35407,11 +35847,11 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
35407
35847
|
this.size = 'L';
|
|
35408
35848
|
}
|
|
35409
35849
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordPreviewRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35410
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: RecordPreviewRowComponent, isStandalone: true, selector: "gn-ui-record-preview-row", host: { listeners: { "window:resize": "onResize()" } }, usesInheritance: true, ngImport: i0, template: "<gn-ui-internal-link-card\n [linkHref]=\"linkHref\"\n [
|
|
35850
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: RecordPreviewRowComponent, isStandalone: true, selector: "gn-ui-record-preview-row", host: { listeners: { "window:resize": "onResize()" } }, usesInheritance: true, ngImport: i0, template: "<gn-ui-internal-link-card\n [linkHref]=\"linkHref\"\n [record]=\"record\"\n [favoriteTemplate]=\"favoriteTemplate\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n (mdSelect)=\"mdSelect.emit($event)\"\n [size]=\"size\"\n>\n</gn-ui-internal-link-card>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "component", type: InternalLinkCardComponent, selector: "gn-ui-internal-link-card", inputs: ["record", "linkHref", "metadataQualityDisplay", "favoriteTemplate", "size"], outputs: ["mdSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
35411
35851
|
}
|
|
35412
35852
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
35413
35853
|
type: Component,
|
|
35414
|
-
args: [{ selector: 'gn-ui-record-preview-row', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [InternalLinkCardComponent], template: "<gn-ui-internal-link-card\n [linkHref]=\"linkHref\"\n [
|
|
35854
|
+
args: [{ selector: 'gn-ui-record-preview-row', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [InternalLinkCardComponent], template: "<gn-ui-internal-link-card\n [linkHref]=\"linkHref\"\n [record]=\"record\"\n [favoriteTemplate]=\"favoriteTemplate\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n (mdSelect)=\"mdSelect.emit($event)\"\n [size]=\"size\"\n>\n</gn-ui-internal-link-card>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"] }]
|
|
35415
35855
|
}], ctorParameters: () => [], propDecorators: { onResize: [{
|
|
35416
35856
|
type: HostListener,
|
|
35417
35857
|
args: ['window:resize']
|
|
@@ -40382,12 +40822,20 @@ class MapViewComponent {
|
|
|
40382
40822
|
layers: [],
|
|
40383
40823
|
view: null,
|
|
40384
40824
|
}), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
40825
|
+
// overlay the record's declared spatial extent on top of the data layers
|
|
40826
|
+
const extentLayer = this.mapUtils.getRecordExtentLayer(metadata);
|
|
40827
|
+
const layers = extentLayer
|
|
40828
|
+
? [...context.layers, extentLayer]
|
|
40829
|
+
: context.layers;
|
|
40830
|
+
// the view (initial zoom) is derived from the data layer or, as a
|
|
40831
|
+
// fallback, from the record extent — independently from the overlay above
|
|
40385
40832
|
if (context.view)
|
|
40386
|
-
return context;
|
|
40833
|
+
return { ...context, layers };
|
|
40387
40834
|
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
40388
40835
|
const view = extent ? { extent } : null;
|
|
40389
40836
|
return {
|
|
40390
40837
|
...context,
|
|
40838
|
+
layers,
|
|
40391
40839
|
view,
|
|
40392
40840
|
};
|
|
40393
40841
|
}), shareReplay$1(1));
|
|
@@ -41210,6 +41658,7 @@ const hasRecordChangedSinceDraft = createAction('[Editor] Has Record Changed Sin
|
|
|
41210
41658
|
const hasRecordChangedSinceDraftSuccess = createAction('[Editor] Has Record Changed Since Draft Success', props());
|
|
41211
41659
|
const isPublished = createAction('[Editor] Record Saved But Not Published', props());
|
|
41212
41660
|
const canEditRecord = createAction('[Editor] User can edit record', props());
|
|
41661
|
+
const setFocusedField = createAction('[Editor] Set focused field', props());
|
|
41213
41662
|
|
|
41214
41663
|
/**
|
|
41215
41664
|
* This file contains the configuration of the fields that will be displayed in the editor.
|
|
@@ -41515,76 +41964,86 @@ const SPATIAL_SCOPES = [
|
|
|
41515
41964
|
},
|
|
41516
41965
|
];
|
|
41517
41966
|
/************************************************************
|
|
41518
|
-
***************
|
|
41967
|
+
*************** ISO TOPICS **************
|
|
41519
41968
|
************************************************************
|
|
41520
41969
|
*/
|
|
41521
|
-
|
|
41522
|
-
|
|
41970
|
+
// label keys mirror the ISO MD_TopicCategoryCode value for consistency
|
|
41971
|
+
// TODO: correctly handle code lists; for instance, this code list is specific to ISO 19139
|
|
41972
|
+
const ISO_TOPICS = [
|
|
41973
|
+
{ value: 'biota', label: marker('editor.record.form.topics.iso.biota') },
|
|
41523
41974
|
{
|
|
41524
41975
|
value: 'boundaries',
|
|
41525
|
-
label: 'editor.record.form.topics.
|
|
41976
|
+
label: marker('editor.record.form.topics.iso.boundaries'),
|
|
41526
41977
|
},
|
|
41527
41978
|
{
|
|
41528
41979
|
value: 'climatologyMeteorologyAtmosphere',
|
|
41529
|
-
label: 'editor.record.form.topics.
|
|
41980
|
+
label: marker('editor.record.form.topics.iso.climatologyMeteorologyAtmosphere'),
|
|
41981
|
+
},
|
|
41982
|
+
{
|
|
41983
|
+
value: 'economy',
|
|
41984
|
+
label: marker('editor.record.form.topics.iso.economy'),
|
|
41985
|
+
},
|
|
41986
|
+
{
|
|
41987
|
+
value: 'elevation',
|
|
41988
|
+
label: marker('editor.record.form.topics.iso.elevation'),
|
|
41530
41989
|
},
|
|
41531
|
-
{ value: 'economy', label: 'editor.record.form.topics.inspire.economy' },
|
|
41532
|
-
{ value: 'elevation', label: 'editor.record.form.topics.inspire.elevation' },
|
|
41533
41990
|
{
|
|
41534
41991
|
value: 'environment',
|
|
41535
|
-
label: 'editor.record.form.topics.
|
|
41992
|
+
label: marker('editor.record.form.topics.iso.environment'),
|
|
41993
|
+
},
|
|
41994
|
+
{
|
|
41995
|
+
value: 'farming',
|
|
41996
|
+
label: marker('editor.record.form.topics.iso.farming'),
|
|
41997
|
+
},
|
|
41998
|
+
{
|
|
41999
|
+
value: 'geoscientificInformation',
|
|
42000
|
+
label: marker('editor.record.form.topics.iso.geoscientificInformation'),
|
|
41536
42001
|
},
|
|
41537
|
-
{ value: 'farming', label: 'editor.record.form.topics.inspire.farming' },
|
|
41538
42002
|
{
|
|
41539
|
-
value: '
|
|
41540
|
-
label: 'editor.record.form.topics.
|
|
42003
|
+
value: 'health',
|
|
42004
|
+
label: marker('editor.record.form.topics.iso.health'),
|
|
41541
42005
|
},
|
|
41542
|
-
{ value: 'health', label: 'editor.record.form.topics.inspire.health' },
|
|
41543
42006
|
{
|
|
41544
42007
|
value: 'imageryBaseMapsEarthCover',
|
|
41545
|
-
label: 'editor.record.form.topics.
|
|
42008
|
+
label: marker('editor.record.form.topics.iso.imageryBaseMapsEarthCover'),
|
|
42009
|
+
},
|
|
42010
|
+
{
|
|
42011
|
+
value: 'inlandWaters',
|
|
42012
|
+
label: marker('editor.record.form.topics.iso.inlandWaters'),
|
|
41546
42013
|
},
|
|
41547
|
-
{ value: 'inlandWaters', label: 'editor.record.form.topics.inspire.waters' },
|
|
41548
42014
|
{
|
|
41549
42015
|
value: 'intelligenceMilitary',
|
|
41550
|
-
label: 'editor.record.form.topics.
|
|
42016
|
+
label: marker('editor.record.form.topics.iso.intelligenceMilitary'),
|
|
42017
|
+
},
|
|
42018
|
+
{
|
|
42019
|
+
value: 'location',
|
|
42020
|
+
label: marker('editor.record.form.topics.iso.location'),
|
|
42021
|
+
},
|
|
42022
|
+
{
|
|
42023
|
+
value: 'oceans',
|
|
42024
|
+
label: marker('editor.record.form.topics.iso.oceans'),
|
|
41551
42025
|
},
|
|
41552
|
-
{ value: 'Location', label: 'editor.record.form.topics.inspire.location' },
|
|
41553
|
-
{ value: 'Oceans', label: 'editor.record.form.topics.inspire.oceans' },
|
|
41554
42026
|
{
|
|
41555
42027
|
value: 'planningCadastre',
|
|
41556
|
-
label: 'editor.record.form.topics.
|
|
42028
|
+
label: marker('editor.record.form.topics.iso.planningCadastre'),
|
|
42029
|
+
},
|
|
42030
|
+
{
|
|
42031
|
+
value: 'society',
|
|
42032
|
+
label: marker('editor.record.form.topics.iso.society'),
|
|
41557
42033
|
},
|
|
41558
|
-
{ value: 'Society', label: 'editor.record.form.topics.inspire.society' },
|
|
41559
|
-
{ value: 'Structure', label: 'editor.record.form.topics.inspire.structure' },
|
|
41560
42034
|
{
|
|
41561
|
-
value: '
|
|
41562
|
-
label: 'editor.record.form.topics.
|
|
42035
|
+
value: 'structure',
|
|
42036
|
+
label: marker('editor.record.form.topics.iso.structure'),
|
|
42037
|
+
},
|
|
42038
|
+
{
|
|
42039
|
+
value: 'transportation',
|
|
42040
|
+
label: marker('editor.record.form.topics.iso.transportation'),
|
|
41563
42041
|
},
|
|
41564
42042
|
{
|
|
41565
42043
|
value: 'utilitiesCommunication',
|
|
41566
|
-
label: 'editor.record.form.topics.
|
|
42044
|
+
label: marker('editor.record.form.topics.iso.utilitiesCommunication'),
|
|
41567
42045
|
},
|
|
41568
42046
|
];
|
|
41569
|
-
marker('editor.record.form.topics.inspire.biota');
|
|
41570
|
-
marker('editor.record.form.topics.inspire.boundaries');
|
|
41571
|
-
marker('editor.record.form.topics.inspire.climatology');
|
|
41572
|
-
marker('editor.record.form.topics.inspire.economy');
|
|
41573
|
-
marker('editor.record.form.topics.inspire.elevation');
|
|
41574
|
-
marker('editor.record.form.topics.inspire.environnement');
|
|
41575
|
-
marker('editor.record.form.topics.inspire.farming');
|
|
41576
|
-
marker('editor.record.form.topics.inspire.geoscientific');
|
|
41577
|
-
marker('editor.record.form.topics.inspire.health');
|
|
41578
|
-
marker('editor.record.form.topics.inspire.imagery');
|
|
41579
|
-
marker('editor.record.form.topics.inspire.intelligence');
|
|
41580
|
-
marker('editor.record.form.topics.inspire.location');
|
|
41581
|
-
marker('editor.record.form.topics.inspire.oceans');
|
|
41582
|
-
marker('editor.record.form.topics.inspire.planning');
|
|
41583
|
-
marker('editor.record.form.topics.inspire.society');
|
|
41584
|
-
marker('editor.record.form.topics.inspire.structure');
|
|
41585
|
-
marker('editor.record.form.topics.inspire.transportation');
|
|
41586
|
-
marker('editor.record.form.topics.inspire.utilities');
|
|
41587
|
-
marker('editor.record.form.topics.inspire.waters');
|
|
41588
42047
|
|
|
41589
42048
|
const EDITOR_FEATURE_KEY = 'editor';
|
|
41590
42049
|
const initialEditorState = {
|
|
@@ -41711,6 +42170,7 @@ class EditorFacade {
|
|
|
41711
42170
|
this.hasRecordChanged$ = this.store.pipe(select(selectHasRecordChanged));
|
|
41712
42171
|
this.isPublished$ = this.store.pipe(select(selectIsPublished));
|
|
41713
42172
|
this.canEditRecord$ = this.store.pipe(select(selectCanEditRecord));
|
|
42173
|
+
this.focusedField$ = this.actions$.pipe(ofType(setFocusedField), map$2(({ model }) => model));
|
|
41714
42174
|
}
|
|
41715
42175
|
openRecord(record, recordSource) {
|
|
41716
42176
|
this.store.dispatch(openRecord({
|
|
@@ -41737,6 +42197,9 @@ class EditorFacade {
|
|
|
41737
42197
|
setCurrentPage(page) {
|
|
41738
42198
|
this.store.dispatch(setCurrentPage({ page }));
|
|
41739
42199
|
}
|
|
42200
|
+
setFocusedField(model) {
|
|
42201
|
+
this.store.dispatch(setFocusedField({ model }));
|
|
42202
|
+
}
|
|
41740
42203
|
setFieldVisibility(field, visible) {
|
|
41741
42204
|
this.store.dispatch(setFieldVisibility({ field, visible }));
|
|
41742
42205
|
}
|
|
@@ -41858,37 +42321,34 @@ marker('editor.record.form.field.contacts');
|
|
|
41858
42321
|
marker('editor.record.form.field.organisation');
|
|
41859
42322
|
class MetadataQualityPanelComponent {
|
|
41860
42323
|
constructor() {
|
|
42324
|
+
this.facade = inject(EditorFacade);
|
|
41861
42325
|
this.propsToValidate = getAllKeysValidator();
|
|
41862
|
-
this.propertiesByPage = [
|
|
41863
|
-
|
|
41864
|
-
|
|
41865
|
-
|
|
41866
|
-
|
|
41867
|
-
|
|
41868
|
-
|
|
41869
|
-
|
|
41870
|
-
|
|
41871
|
-
|
|
41872
|
-
|
|
41873
|
-
|
|
41874
|
-
|
|
41875
|
-
}
|
|
41876
|
-
this.propertiesByPage = fieldsByPage
|
|
41877
|
-
.map((fields) => getQualityValidators(this.record, fields).map(({ name, validator }) => ({
|
|
41878
|
-
label: `editor.record.form.field.${name}`, // use same translations as in fields.config.ts
|
|
42326
|
+
this.propertiesByPage$ = combineLatest([
|
|
42327
|
+
this.facade.editorConfig$,
|
|
42328
|
+
this.facade.record$,
|
|
42329
|
+
]).pipe(map$2(([editorConfig, record]) => {
|
|
42330
|
+
if (!editorConfig || !record)
|
|
42331
|
+
return [];
|
|
42332
|
+
const validators = getQualityValidators(record, this.propsToValidate);
|
|
42333
|
+
return editorConfig.pages
|
|
42334
|
+
.map((page) => page.sections
|
|
42335
|
+
.flatMap((section) => section.fields)
|
|
42336
|
+
.flatMap(({ model }) => validators.filter((v) => (v.alias ?? v.name) === model))
|
|
42337
|
+
.map(({ name, validator, alias }) => ({
|
|
42338
|
+
label: `editor.record.form.field.${name}`,
|
|
41879
42339
|
value: validator(),
|
|
42340
|
+
model: (alias ?? name),
|
|
41880
42341
|
})))
|
|
41881
42342
|
.filter((arr) => arr.length > 0);
|
|
41882
|
-
}
|
|
42343
|
+
}));
|
|
41883
42344
|
}
|
|
41884
|
-
|
|
41885
|
-
|
|
41886
|
-
|
|
41887
|
-
|
|
41888
|
-
: `${baseClasses} bg-transparent hover:bg-transparent`;
|
|
42345
|
+
onCriterionClick(property) {
|
|
42346
|
+
if (!property.value) {
|
|
42347
|
+
this.facade.setFocusedField(property.model);
|
|
42348
|
+
}
|
|
41889
42349
|
}
|
|
41890
42350
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataQualityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41891
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel",
|
|
42351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel", providers: [
|
|
41892
42352
|
provideIcons({
|
|
41893
42353
|
iconoirSystemShut,
|
|
41894
42354
|
iconoirBadgeCheck,
|
|
@@ -41896,7 +42356,7 @@ class MetadataQualityPanelComponent {
|
|
|
41896
42356
|
provideNgIconsConfig({
|
|
41897
42357
|
size: '1.25em',
|
|
41898
42358
|
}),
|
|
41899
|
-
],
|
|
42359
|
+
], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (\n properties of (propertiesByPage$ | async) ?? [];\n track properties;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-2\">\n @for (property of properties; track property) {\n <gn-ui-button\n style=\"\n --gn-ui-button-justify: space-between;\n --gn-ui-button-height: 34px;\n --gn-ui-button-width: 100%;\n --gn-ui-button-border-width: 0;\n --gn-ui-button-color: black;\n --gn-ui-button-background: transparent;\n --gn-ui-button-bg-hover: #f3f4f6;\n --gn-ui-button-disabled-opacity: 1;\n \"\n [disabled]=\"property.value\"\n (buttonClick)=\"onCriterionClick(property)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (property.value) {\n <ng-icon class=\"text-primary\" name=\"iconoirBadgeCheck\"></ng-icon>\n } @else {\n <ng-icon\n class=\"text-neutral-300\"\n name=\"iconoirSystemShut\"\n ></ng-icon>\n }\n </div>\n </gn-ui-button>\n }\n @if (!isLast) {\n <hr class=\"border-gray-300 w-11/12 mx-auto\" />\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: 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: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
|
|
41900
42360
|
}
|
|
41901
42361
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataQualityPanelComponent, decorators: [{
|
|
41902
42362
|
type: Component,
|
|
@@ -41905,6 +42365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
41905
42365
|
TranslatePipe,
|
|
41906
42366
|
ButtonComponent,
|
|
41907
42367
|
NgIconComponent,
|
|
42368
|
+
AsyncPipe,
|
|
41908
42369
|
], providers: [
|
|
41909
42370
|
provideIcons({
|
|
41910
42371
|
iconoirSystemShut,
|
|
@@ -41913,12 +42374,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
41913
42374
|
provideNgIconsConfig({
|
|
41914
42375
|
size: '1.25em',
|
|
41915
42376
|
}),
|
|
41916
|
-
], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (properties of propertiesByPage
|
|
41917
|
-
}]
|
|
41918
|
-
type: Input
|
|
41919
|
-
}], record: [{
|
|
41920
|
-
type: Input
|
|
41921
|
-
}] } });
|
|
42377
|
+
], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (\n properties of (propertiesByPage$ | async) ?? [];\n track properties;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-2\">\n @for (property of properties; track property) {\n <gn-ui-button\n style=\"\n --gn-ui-button-justify: space-between;\n --gn-ui-button-height: 34px;\n --gn-ui-button-width: 100%;\n --gn-ui-button-border-width: 0;\n --gn-ui-button-color: black;\n --gn-ui-button-background: transparent;\n --gn-ui-button-bg-hover: #f3f4f6;\n --gn-ui-button-disabled-opacity: 1;\n \"\n [disabled]=\"property.value\"\n (buttonClick)=\"onCriterionClick(property)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (property.value) {\n <ng-icon class=\"text-primary\" name=\"iconoirBadgeCheck\"></ng-icon>\n } @else {\n <ng-icon\n class=\"text-neutral-300\"\n name=\"iconoirSystemShut\"\n ></ng-icon>\n }\n </div>\n </gn-ui-button>\n }\n @if (!isLast) {\n <hr class=\"border-gray-300 w-11/12 mx-auto\" />\n }\n </div>\n }\n</div>\n" }]
|
|
42378
|
+
}] });
|
|
41922
42379
|
|
|
41923
42380
|
const extraFlagMap = {
|
|
41924
42381
|
ar: 'arab',
|
|
@@ -42173,6 +42630,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42173
42630
|
args: ['actionMenuButton', { read: ElementRef }]
|
|
42174
42631
|
}] } });
|
|
42175
42632
|
|
|
42633
|
+
class FieldFocusDirective {
|
|
42634
|
+
constructor() {
|
|
42635
|
+
this.gnUiFieldFocusGlowClass = 'gn-ui-field-focus-glow';
|
|
42636
|
+
this.el = inject(ElementRef);
|
|
42637
|
+
}
|
|
42638
|
+
focusField(focusInnerTarget = true) {
|
|
42639
|
+
setTimeout(() => {
|
|
42640
|
+
const host = this.el.nativeElement;
|
|
42641
|
+
const glowClass = this.gnUiFieldFocusGlowClass;
|
|
42642
|
+
host.classList.remove(glowClass);
|
|
42643
|
+
void host.offsetWidth;
|
|
42644
|
+
host.classList.add(glowClass);
|
|
42645
|
+
host.addEventListener('animationend', () => host.classList.remove(glowClass), { once: true });
|
|
42646
|
+
host.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
42647
|
+
if (!focusInnerTarget) {
|
|
42648
|
+
return;
|
|
42649
|
+
}
|
|
42650
|
+
const target = host.querySelector('input, textarea, select, [contenteditable="true"]') ??
|
|
42651
|
+
host.querySelector('button:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
42652
|
+
target?.focus({ preventScroll: true });
|
|
42653
|
+
});
|
|
42654
|
+
}
|
|
42655
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FieldFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42656
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: FieldFocusDirective, isStandalone: true, selector: "[gnUiFieldFocus]", inputs: { gnUiFieldFocusGlowClass: "gnUiFieldFocusGlowClass" }, exportAs: ["fieldFocus"], ngImport: i0 }); }
|
|
42657
|
+
}
|
|
42658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FieldFocusDirective, decorators: [{
|
|
42659
|
+
type: Directive,
|
|
42660
|
+
args: [{
|
|
42661
|
+
selector: '[gnUiFieldFocus]',
|
|
42662
|
+
standalone: true,
|
|
42663
|
+
exportAs: 'fieldFocus',
|
|
42664
|
+
}]
|
|
42665
|
+
}], propDecorators: { gnUiFieldFocusGlowClass: [{
|
|
42666
|
+
type: Input
|
|
42667
|
+
}] } });
|
|
42668
|
+
|
|
42176
42669
|
class GenericKeywordsComponent {
|
|
42177
42670
|
constructor() {
|
|
42178
42671
|
this.platformService = inject(PlatformServiceInterface);
|
|
@@ -42660,9 +43153,7 @@ class FormFieldContactsForResourceComponent {
|
|
|
42660
43153
|
/**
|
|
42661
43154
|
* gn-ui-autocomplete
|
|
42662
43155
|
*/
|
|
42663
|
-
this.displayWithFn = (user) => user
|
|
42664
|
-
? `${user.name} ${user.surname} ${user.organisation ? `(${user.organisation})` : ''}`
|
|
42665
|
-
: ``;
|
|
43156
|
+
this.displayWithFn = (user) => getIndividualDisplayName(toIndividual(user));
|
|
42666
43157
|
/**
|
|
42667
43158
|
* gn-ui-autocomplete
|
|
42668
43159
|
*/
|
|
@@ -42754,7 +43245,7 @@ class FormFieldContactsForResourceComponent {
|
|
|
42754
43245
|
provideNgIconsConfig({
|
|
42755
43246
|
size: '1.5rem',
|
|
42756
43247
|
}),
|
|
42757
|
-
], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n @for (role of rolesToPick; track role) {\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n \n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n }\n </div>\n @if (roleSectionsToDisplay && roleSectionsToDisplay.length > 0) {\n <div class=\"mt-8\" data-test=\"displayedRoles\">\n @for (\n role of roleSectionsToDisplay;\n track role;\n let index = $index;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n @if (role !== 'unspecified' && role !== 'other') {\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n }\n @if (contactsForRessourceByRole.get(role); as contacts) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n }\n @if (!isLast) {\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" />\n }\n </div>\n }\n </div>\n }
|
|
43248
|
+
], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n @for (role of rolesToPick; track role) {\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n \n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n }\n </div>\n @if (value.length === 0) {\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n }\n @if (roleSectionsToDisplay && roleSectionsToDisplay.length > 0) {\n <div class=\"mt-8\" data-test=\"displayedRoles\">\n @for (\n role of roleSectionsToDisplay;\n track role;\n let index = $index;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n @if (role !== 'unspecified' && role !== 'other') {\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n }\n @if (contactsForRessourceByRole.get(role); as contacts) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n }\n @if (!isLast) {\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" />\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
42758
43249
|
}
|
|
42759
43250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
|
|
42760
43251
|
type: Component,
|
|
@@ -42771,13 +43262,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42771
43262
|
provideNgIconsConfig({
|
|
42772
43263
|
size: '1.5rem',
|
|
42773
43264
|
}),
|
|
42774
|
-
], template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n @for (role of rolesToPick; track role) {\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n \n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n }\n </div>\n @if (roleSectionsToDisplay && roleSectionsToDisplay.length > 0) {\n <div class=\"mt-8\" data-test=\"displayedRoles\">\n @for (\n role of roleSectionsToDisplay;\n track role;\n let index = $index;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n @if (role !== 'unspecified' && role !== 'other') {\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n }\n @if (contactsForRessourceByRole.get(role); as contacts) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n }\n @if (!isLast) {\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" />\n }\n </div>\n }\n </div>\n }
|
|
43265
|
+
], template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n @for (role of rolesToPick; track role) {\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n \n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n }\n </div>\n @if (value.length === 0) {\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n }\n @if (roleSectionsToDisplay && roleSectionsToDisplay.length > 0) {\n <div class=\"mt-8\" data-test=\"displayedRoles\">\n @for (\n role of roleSectionsToDisplay;\n track role;\n let index = $index;\n let isLast = $last\n ) {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n @if (role !== 'unspecified' && role !== 'other') {\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n }\n @if (contactsForRessourceByRole.get(role); as contacts) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n }\n @if (!isLast) {\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" />\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
|
|
42775
43266
|
}], propDecorators: { value: [{
|
|
42776
43267
|
type: Input
|
|
42777
43268
|
}], valueChange: [{
|
|
42778
43269
|
type: Output
|
|
42779
43270
|
}] } });
|
|
42780
43271
|
|
|
43272
|
+
class ContactDetailsFormComponent {
|
|
43273
|
+
constructor() {
|
|
43274
|
+
this.contactChange = new EventEmitter();
|
|
43275
|
+
}
|
|
43276
|
+
emitContactChange() {
|
|
43277
|
+
this.contactChange.emit(this.contact);
|
|
43278
|
+
}
|
|
43279
|
+
handleOrganizationChange(change) {
|
|
43280
|
+
this.contact.organization = {
|
|
43281
|
+
...(this.contact.organization ?? {}),
|
|
43282
|
+
...change,
|
|
43283
|
+
};
|
|
43284
|
+
this.emitContactChange();
|
|
43285
|
+
}
|
|
43286
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43287
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: ContactDetailsFormComponent, isStandalone: true, selector: "gn-ui-contact-details-form", inputs: { contact: "contact" }, outputs: { contactChange: "contactChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-7\">\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"min-w-0\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.lastName\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [(value)]=\"contact.lastName\"\n (valueChange)=\"emitContactChange()\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.lastName.placeholder'\n | translate\n \"\n data-test=\"contactDetailsLastName\"\n ></gn-ui-text-input>\n </div>\n <div class=\"min-w-0\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.firstName\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [(value)]=\"contact.firstName\"\n (valueChange)=\"emitContactChange()\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.firstName.placeholder'\n | translate\n \"\n data-test=\"contactDetailsFirstName\"\n ></gn-ui-text-input>\n </div>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.email\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [value]=\"contact.organization?.email ?? ''\"\n (valueChange)=\"handleOrganizationChange({ email: $event })\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.email.placeholder' | translate\n \"\n data-test=\"contactDetailsEmail\"\n ></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.organization\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [value]=\"contact.organization?.name ?? ''\"\n (valueChange)=\"handleOrganizationChange({ name: $event })\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.organization.placeholder'\n | translate\n \"\n data-test=\"contactDetailsOrganization\"\n ></gn-ui-text-input>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
43288
|
+
}
|
|
43289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsFormComponent, decorators: [{
|
|
43290
|
+
type: Component,
|
|
43291
|
+
args: [{ selector: 'gn-ui-contact-details-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [TextInputComponent, TranslateDirective, TranslatePipe], template: "<div class=\"flex flex-col gap-7\">\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"min-w-0\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.lastName\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [(value)]=\"contact.lastName\"\n (valueChange)=\"emitContactChange()\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.lastName.placeholder'\n | translate\n \"\n data-test=\"contactDetailsLastName\"\n ></gn-ui-text-input>\n </div>\n <div class=\"min-w-0\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.firstName\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [(value)]=\"contact.firstName\"\n (valueChange)=\"emitContactChange()\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.firstName.placeholder'\n | translate\n \"\n data-test=\"contactDetailsFirstName\"\n ></gn-ui-text-input>\n </div>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.email\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [value]=\"contact.organization?.email ?? ''\"\n (valueChange)=\"handleOrganizationChange({ email: $event })\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.email.placeholder' | translate\n \"\n data-test=\"contactDetailsEmail\"\n ></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.contactDetails.organization\n </h3>\n <gn-ui-text-input\n class=\"block w-full\"\n extraClass=\"w-full\"\n [value]=\"contact.organization?.name ?? ''\"\n (valueChange)=\"handleOrganizationChange({ name: $event })\"\n [placeholder]=\"\n 'editor.record.form.field.contactDetails.organization.placeholder'\n | translate\n \"\n data-test=\"contactDetailsOrganization\"\n ></gn-ui-text-input>\n </div>\n</div>\n" }]
|
|
43292
|
+
}], propDecorators: { contact: [{
|
|
43293
|
+
type: Input
|
|
43294
|
+
}], contactChange: [{
|
|
43295
|
+
type: Output
|
|
43296
|
+
}] } });
|
|
43297
|
+
|
|
42781
43298
|
class FormFieldContactsComponent {
|
|
42782
43299
|
constructor() {
|
|
42783
43300
|
this.platformServiceInterface = inject(PlatformServiceInterface);
|
|
@@ -42790,7 +43307,7 @@ class FormFieldContactsComponent {
|
|
|
42790
43307
|
/**
|
|
42791
43308
|
* gn-ui-autocomplete
|
|
42792
43309
|
*/
|
|
42793
|
-
this.displayWithFn = (user) =>
|
|
43310
|
+
this.displayWithFn = (user) => getIndividualDisplayName(toIndividual(user));
|
|
42794
43311
|
/**
|
|
42795
43312
|
* gn-ui-autocomplete
|
|
42796
43313
|
*/
|
|
@@ -42829,6 +43346,10 @@ class FormFieldContactsComponent {
|
|
|
42829
43346
|
this.contacts = contacts;
|
|
42830
43347
|
this.valueChange.emit(contacts);
|
|
42831
43348
|
}
|
|
43349
|
+
handleContactChanged(updatedContact, index) {
|
|
43350
|
+
const contacts = this.contacts.map((contact, i) => i === index ? updatedContact : contact);
|
|
43351
|
+
this.handleContactsChanged(contacts);
|
|
43352
|
+
}
|
|
42832
43353
|
/**
|
|
42833
43354
|
* gn-ui-autocomplete
|
|
42834
43355
|
*/
|
|
@@ -42850,7 +43371,7 @@ class FormFieldContactsComponent {
|
|
|
42850
43371
|
this.subscription.unsubscribe();
|
|
42851
43372
|
}
|
|
42852
43373
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42853
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n @if (contacts.length > 0) {\n
|
|
43374
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value", modelSpecifier: "modelSpecifier" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n @if (contacts.length > 0) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact let-index=\"index\">\n @if (modelSpecifier === 'contact:editableDetails') {\n <gn-ui-contact-details-form\n [contact]=\"contact\"\n (contactChange)=\"handleContactChanged($event, index)\"\n ></gn-ui-contact-details-form>\n } @else {\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n }\n </ng-template>\n } @else {\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: ContactDetailsFormComponent, selector: "gn-ui-contact-details-form", inputs: ["contact"], outputs: ["contactChange"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
42854
43375
|
}
|
|
42855
43376
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsComponent, decorators: [{
|
|
42856
43377
|
type: Component,
|
|
@@ -42859,10 +43380,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42859
43380
|
TranslateDirective,
|
|
42860
43381
|
TranslatePipe,
|
|
42861
43382
|
ContactCardComponent,
|
|
43383
|
+
ContactDetailsFormComponent,
|
|
42862
43384
|
SortableListComponent,
|
|
42863
|
-
], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n @if (contacts.length > 0) {\n
|
|
43385
|
+
], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n @if (contacts.length > 0) {\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact let-index=\"index\">\n @if (modelSpecifier === 'contact:editableDetails') {\n <gn-ui-contact-details-form\n [contact]=\"contact\"\n (contactChange)=\"handleContactChanged($event, index)\"\n ></gn-ui-contact-details-form>\n } @else {\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n }\n </ng-template>\n } @else {\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n }\n</div>\n" }]
|
|
42864
43386
|
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
42865
43387
|
type: Input
|
|
43388
|
+
}], modelSpecifier: [{
|
|
43389
|
+
type: Input
|
|
42866
43390
|
}], valueChange: [{
|
|
42867
43391
|
type: Output
|
|
42868
43392
|
}] } });
|
|
@@ -43642,30 +44166,28 @@ class FormFieldConstraintsShortcutsComponent {
|
|
|
43642
44166
|
'otherConstraints',
|
|
43643
44167
|
];
|
|
43644
44168
|
this.onDestroy$ = new Subject();
|
|
43645
|
-
|
|
43646
|
-
|
|
43647
|
-
|
|
43648
|
-
|
|
43649
|
-
|
|
43650
|
-
|
|
43651
|
-
|
|
43652
|
-
|
|
43653
|
-
|
|
43654
|
-
});
|
|
43655
|
-
// also hide constraints which are empty arrays
|
|
43656
|
-
const hideEmptyConstraints = (constraints$, model) => {
|
|
43657
|
-
const isConstraintNotEmpty$ = constraints$.pipe(takeUntil(this.onDestroy$), map$2((c) => c.length > 0), distinctUntilChanged$1());
|
|
43658
|
-
combineLatest([
|
|
43659
|
-
isConstraintNotEmpty$,
|
|
43660
|
-
this.anyToggleActivated$,
|
|
43661
|
-
]).subscribe(([isNotEmpty, anyToggleActivated]) => {
|
|
43662
|
-
const visible = isNotEmpty && !anyToggleActivated;
|
|
43663
|
-
this.editorFacade.setFieldVisibility({ model }, visible);
|
|
44169
|
+
// Deferred to afterNextRender to avoid dispatching store actions
|
|
44170
|
+
// synchronously during Angular's change detection cycle (NG0100)
|
|
44171
|
+
afterNextRender(() => {
|
|
44172
|
+
this.anyToggleActivated$
|
|
44173
|
+
.pipe(takeUntil(this.onDestroy$), distinctUntilChanged$1())
|
|
44174
|
+
.subscribe((anyToggleActivated) => {
|
|
44175
|
+
if (anyToggleActivated) {
|
|
44176
|
+
this.hideAllConstraintSections();
|
|
44177
|
+
}
|
|
43664
44178
|
});
|
|
43665
|
-
|
|
43666
|
-
|
|
43667
|
-
|
|
43668
|
-
|
|
44179
|
+
const hideEmptyConstraints = (constraints$, model) => {
|
|
44180
|
+
const isConstraintNotEmpty$ = constraints$.pipe(takeUntil(this.onDestroy$), map$2((c) => c.length > 0), distinctUntilChanged$1());
|
|
44181
|
+
combineLatest([isConstraintNotEmpty$, this.anyToggleActivated$])
|
|
44182
|
+
.pipe(takeUntil(this.onDestroy$))
|
|
44183
|
+
.subscribe(([isNotEmpty, anyToggleActivated]) => {
|
|
44184
|
+
const visible = isNotEmpty && !anyToggleActivated;
|
|
44185
|
+
this.editorFacade.setFieldVisibility({ model }, visible);
|
|
44186
|
+
});
|
|
44187
|
+
};
|
|
44188
|
+
hideEmptyConstraints(this.securityConstraints$, 'securityConstraints');
|
|
44189
|
+
hideEmptyConstraints(this.otherConstraints$, 'otherConstraints');
|
|
44190
|
+
});
|
|
43669
44191
|
}
|
|
43670
44192
|
ngOnDestroy() {
|
|
43671
44193
|
this.onDestroy$.next();
|
|
@@ -43730,7 +44252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
43730
44252
|
size: '1.5rem',
|
|
43731
44253
|
}),
|
|
43732
44254
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-2 mb-2\" data-cy=\"constraints-shortcut-toggles\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.constraint.not.applicable' | translate\"\n [value]=\"noApplicableConstraint$ | async\"\n (toggled)=\"onToggleChange('noApplicableConstraint', $event)\"\n >\n </gn-ui-check-toggle>\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.constraint.not.known' | translate\"\n [value]=\"noKnownConstraint$ | async\"\n (toggled)=\"onToggleChange('noKnownConstraint', $event)\"\n >\n </gn-ui-check-toggle>\n</div>\n\n@if ((anyToggleActivated$ | async) === false) {\n <div\n class=\"flex flex-row flex-wrap gap-2\"\n data-cy=\"constraints-shortcut-btns\"\n >\n @for (constraint of constraintButtonChoices; track constraint) {\n <gn-ui-button\n type=\"gray\"\n (buttonClick)=\"addConstraintSectionToDisplay(constraint)\"\n [disabled]=\"isConstraintButtonDisabled$(constraint) | async\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n \n <span>{{\n 'editor.record.form.constraint.' + constraint | translate\n }}</span>\n </gn-ui-button>\n }\n </div>\n}\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
|
|
43733
|
-
}] });
|
|
44255
|
+
}], ctorParameters: () => [] });
|
|
43734
44256
|
|
|
43735
44257
|
class ConstraintCardComponent {
|
|
43736
44258
|
constructor() {
|
|
@@ -43888,7 +44410,7 @@ class FormFieldTopicsComponent {
|
|
|
43888
44410
|
this.translateService = inject(TranslateService);
|
|
43889
44411
|
this.topics = [];
|
|
43890
44412
|
this.valueChange = new EventEmitter();
|
|
43891
|
-
this.availableTopics =
|
|
44413
|
+
this.availableTopics = ISO_TOPICS.map((topic) => {
|
|
43892
44414
|
return {
|
|
43893
44415
|
label: this.translateService.instant(topic.label),
|
|
43894
44416
|
value: topic.value,
|
|
@@ -43926,6 +44448,7 @@ class FormFieldComponent {
|
|
|
43926
44448
|
constructor() {
|
|
43927
44449
|
this.valueChange = new EventEmitter();
|
|
43928
44450
|
this.isOpenData = false;
|
|
44451
|
+
this.fieldFocus = inject(FieldFocusDirective);
|
|
43929
44452
|
}
|
|
43930
44453
|
toggleIsOpenData(event) {
|
|
43931
44454
|
this.isOpenData = event;
|
|
@@ -43992,7 +44515,7 @@ class FormFieldComponent {
|
|
|
43992
44515
|
}
|
|
43993
44516
|
}
|
|
43994
44517
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43995
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n [value]=\"valueAsString\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n ></textarea>\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordLicences"], outputs: ["recordLicencesChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "component", type: FormFieldTopicsComponent, selector: "gn-ui-form-field-topics", inputs: ["value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i3$2.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
44518
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], hostDirectives: [{ directive: FieldFocusDirective }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n [value]=\"valueAsString\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n ></textarea>\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n [modelSpecifier]=\"modelSpecifier\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [":host{scroll-margin-top:90px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordLicences"], outputs: ["recordLicencesChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value", "modelSpecifier"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "component", type: FormFieldTopicsComponent, selector: "gn-ui-form-field-topics", inputs: ["value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i4$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
43996
44519
|
}
|
|
43997
44520
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
43998
44521
|
type: Component,
|
|
@@ -44019,7 +44542,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
44019
44542
|
FormFieldSpatialToggleComponent,
|
|
44020
44543
|
FormFieldTopicsComponent,
|
|
44021
44544
|
TextFieldModule,
|
|
44022
|
-
], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n [value]=\"valueAsString\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n ></textarea>\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
|
|
44545
|
+
], hostDirectives: [FieldFocusDirective], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n [value]=\"valueAsString\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n ></textarea>\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n [modelSpecifier]=\"modelSpecifier\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [":host{scroll-margin-top:90px}\n"] }]
|
|
44023
44546
|
}], propDecorators: { uniqueIdentifier: [{
|
|
44024
44547
|
type: Input
|
|
44025
44548
|
}], model: [{
|
|
@@ -44042,7 +44565,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
44042
44565
|
class RecordFormComponent {
|
|
44043
44566
|
constructor() {
|
|
44044
44567
|
this.facade = inject(EditorFacade);
|
|
44568
|
+
this.subscription = new Subscription();
|
|
44045
44569
|
this.recordUniqueIdentifier$ = this.facade.record$.pipe(map$2((record) => record.uniqueIdentifier));
|
|
44570
|
+
this.focusFieldWithPage$ = this.facade.focusedField$.pipe(switchMap$1(async (field) => {
|
|
44571
|
+
const location = await this.getFieldLocation(field);
|
|
44572
|
+
return [field, location?.page ?? null, location?.section ?? -1];
|
|
44573
|
+
}));
|
|
44574
|
+
this.formFields = viewChildren(FormFieldComponent, ...(ngDevMode ? [{ debugName: "formFields" }] : []));
|
|
44575
|
+
this.sectionFocusDirectives = viewChildren('sectionFocus', ...(ngDevMode ? [{ debugName: "sectionFocusDirectives" }] : []));
|
|
44576
|
+
}
|
|
44577
|
+
focusField(model, sectionIndex) {
|
|
44578
|
+
const field = this.formFields().find((f) => f.model === model);
|
|
44579
|
+
if (field) {
|
|
44580
|
+
field.fieldFocus.focusField();
|
|
44581
|
+
return;
|
|
44582
|
+
}
|
|
44583
|
+
this.sectionFocusDirectives()[sectionIndex]?.focusField(false);
|
|
44584
|
+
}
|
|
44585
|
+
ngOnInit() {
|
|
44586
|
+
this.subscription.add(this.focusFieldWithPage$
|
|
44587
|
+
.pipe(withLatestFrom$1(this.facade.currentPage$, ([field, fieldPage, fieldSection], currentPage) => [field, fieldPage, fieldSection, currentPage]))
|
|
44588
|
+
.subscribe(([field, fieldPage, fieldSection, currentPage]) => {
|
|
44589
|
+
if (fieldPage !== null && fieldPage !== currentPage) {
|
|
44590
|
+
this.facade.setCurrentPage(fieldPage);
|
|
44591
|
+
}
|
|
44592
|
+
setTimeout(() => this.focusField(field, fieldSection));
|
|
44593
|
+
}));
|
|
44594
|
+
}
|
|
44595
|
+
ngOnDestroy() {
|
|
44596
|
+
this.subscription.unsubscribe();
|
|
44046
44597
|
}
|
|
44047
44598
|
handleFieldValueChange(model, newValue) {
|
|
44048
44599
|
if (!model) {
|
|
@@ -44056,13 +44607,29 @@ class RecordFormComponent {
|
|
|
44056
44607
|
sectionTracker(index, section) {
|
|
44057
44608
|
return section.labelKey;
|
|
44058
44609
|
}
|
|
44610
|
+
async getFieldLocation(model) {
|
|
44611
|
+
const config = await firstValueFrom(this.facade.editorConfig$);
|
|
44612
|
+
const page = config.pages.findIndex((p) => p.sections.some((s) => s.fields.some((f) => f.model === model)));
|
|
44613
|
+
if (page < 0) {
|
|
44614
|
+
return null;
|
|
44615
|
+
}
|
|
44616
|
+
const section = config.pages[page].sections
|
|
44617
|
+
.filter((s) => !s.hidden)
|
|
44618
|
+
.findIndex((s) => s.fields.some((f) => f.model === model));
|
|
44619
|
+
return { page, section };
|
|
44620
|
+
}
|
|
44059
44621
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44060
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n @for (\n section of facade.currentSections$ | async;\n track sectionTracker($index, section)\n ) {\n @if (!section.hidden) {\n <div
|
|
44622
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", viewQueries: [{ propertyName: "formFields", predicate: FormFieldComponent, descendants: true, isSignal: true }, { propertyName: "sectionFocusDirectives", predicate: ["sectionFocus"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n @for (\n section of facade.currentSections$ | async;\n track sectionTracker($index, section)\n ) {\n @if (!section.hidden) {\n <div\n class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow scroll-mt-[90px]\"\n gnUiFieldFocus\n #sectionFocus=\"fieldFocus\"\n >\n <div class=\"flex flex-col gap-2\">\n @if (section.labelKey) {\n <div class=\"text-2xl font-title text-black\" translate>\n {{ section.labelKey }}\n </div>\n }\n @if (section.descriptionKey) {\n <div class=\"text-gray-800 text-sm\" translate>\n {{ section.descriptionKey }}\n </div>\n }\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n @for (\n field of section.fieldsWithValues;\n track fieldTracker($index, field)\n ) {\n @if (!field.config.hidden) {\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n }\n }\n </div>\n </div>\n }\n }\n</div>\n", styles: [".gn-ui-field-focus-glow{position:relative}.gn-ui-field-focus-glow:after{content:\"\";position:absolute;inset:-8px;border-radius:8px;background-color:color-mix(in srgb,var(--color-primary) 12%,transparent);pointer-events:none;animation:gn-ui-field-focus-glow 3s ease-out forwards}.gn-ui-field-focus-glow:before{content:\"\";position:absolute;inset:-16px;border:2px dashed var(--color-primary);border-radius:10px;pointer-events:none;animation:gn-ui-field-focus-glow 3s ease-out forwards}@keyframes gn-ui-field-focus-glow{0%,55%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["uniqueIdentifier", "model", "modelSpecifier", "componentName", "config", "value"], outputs: ["valueChange"] }, { kind: "directive", type: FieldFocusDirective, selector: "[gnUiFieldFocus]", inputs: ["gnUiFieldFocusGlowClass"], exportAs: ["fieldFocus"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
44061
44623
|
}
|
|
44062
44624
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
44063
44625
|
type: Component,
|
|
44064
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
44065
|
-
|
|
44626
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
44627
|
+
CommonModule,
|
|
44628
|
+
FormFieldComponent,
|
|
44629
|
+
FieldFocusDirective,
|
|
44630
|
+
TranslateDirective,
|
|
44631
|
+
], template: "<div class=\"flex flex-col gap-6\">\n @for (\n section of facade.currentSections$ | async;\n track sectionTracker($index, section)\n ) {\n @if (!section.hidden) {\n <div\n class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow scroll-mt-[90px]\"\n gnUiFieldFocus\n #sectionFocus=\"fieldFocus\"\n >\n <div class=\"flex flex-col gap-2\">\n @if (section.labelKey) {\n <div class=\"text-2xl font-title text-black\" translate>\n {{ section.labelKey }}\n </div>\n }\n @if (section.descriptionKey) {\n <div class=\"text-gray-800 text-sm\" translate>\n {{ section.descriptionKey }}\n </div>\n }\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n @for (\n field of section.fieldsWithValues;\n track fieldTracker($index, field)\n ) {\n @if (!field.config.hidden) {\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n }\n }\n </div>\n </div>\n }\n }\n</div>\n", styles: [".gn-ui-field-focus-glow{position:relative}.gn-ui-field-focus-glow:after{content:\"\";position:absolute;inset:-8px;border-radius:8px;background-color:color-mix(in srgb,var(--color-primary) 12%,transparent);pointer-events:none;animation:gn-ui-field-focus-glow 3s ease-out forwards}.gn-ui-field-focus-glow:before{content:\"\";position:absolute;inset:-16px;border:2px dashed var(--color-primary);border-radius:10px;pointer-events:none;animation:gn-ui-field-focus-glow 3s ease-out forwards}@keyframes gn-ui-field-focus-glow{0%,55%{opacity:1}to{opacity:0}}\n"] }]
|
|
44632
|
+
}], propDecorators: { formFields: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => FormFieldComponent), { isSignal: true }] }], sectionFocusDirectives: [{ type: i0.ViewChildren, args: ['sectionFocus', { isSignal: true }] }] } });
|
|
44066
44633
|
|
|
44067
44634
|
function evaluate(expression) {
|
|
44068
44635
|
if (expression.match(/^\${.*}$/)) {
|
|
@@ -44682,5 +45249,5 @@ const CHART_TYPE_VALUES = [
|
|
|
44682
45249
|
* Generated bundle index. Do not edit.
|
|
44683
45250
|
*/
|
|
44684
45251
|
|
|
44685
|
-
export { ABOUT_SECTION, ADD_RESULTS, ADD_SEARCH, ANNEXES_SECTION, ASSOCIATED_RESOURCES_SECTION, AVAILABLE_LICENSES, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CHART_TYPE_VALUES, CLASSIFICATION_SECTION, CLEAR_ERROR, CLEAR_RESULTS, CONSTRAINTS_SHORTCUTS, CONTACTS, CONTACTS_FOR_RESOURCE_FIELD, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DATA_MANAGERS_SECTION, DEFAULT_CONFIGURATION, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, 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, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEOGRAPHICAL_COVERAGE_SECTION, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, INSPIRE_TOPICS, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LEGAL_CONSTRAINTS_FIELD, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, MAX_UPLOAD_SIZE_MB, METADATA_LANGUAGE, METADATA_POINT_OF_CONTACT_SECTION, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, OPEN_DATA_LICENSE, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OTHER_CONSTRAINTS_FIELD, OnlineResourceCardComponent, OnlineServiceResourceInputComponent, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_ABSTRACT_FIELD, RECORD_DATASET_URL_TOKEN, RECORD_GRAPHICAL_OVERVIEW_FIELD, RECORD_KEYWORDS_FIELD, RECORD_LICENSE_FIELD, RECORD_ONLINE_LINK_RESOURCES, RECORD_ONLINE_RESOURCES, RECORD_RESOURCE_CREATED_FIELD, RECORD_RESOURCE_UPDATED_FIELD, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, RECORD_SPATIAL_EXTENTS_FIELD, RECORD_SPATIAL_TOGGLE_FIELD, RECORD_TEMPORAL_EXTENTS_FIELD, RECORD_TITLE_FIELD, RECORD_TOPICS_FIELD, RECORD_UNIQUE_IDENTIFIER_FIELD, RECORD_UPDATED_FIELD, RECORD_UPDATE_FREQUENCY_FIELD, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESOURCE_IDENTIFIER_FIELD, 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, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordStatusValues, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RoleLabels, RoleValues, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SECURITY_CONSTRAINTS_FIELD, 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, SPATIAL_SCOPES, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, 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, SortByEnum, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TITLE_SECTION, TOPICS_SECTION, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, USE_AND_ACCESS_CONDITIONS_SECTION, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, 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, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, 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, setEditorConfiguration, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateFrequencyCodeValues, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
45252
|
+
export { ABOUT_SECTION, ADD_RESULTS, ADD_SEARCH, ANNEXES_SECTION, ASSOCIATED_RESOURCES_SECTION, AVAILABLE_LICENSES, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CHART_TYPE_VALUES, CLASSIFICATION_SECTION, CLEAR_ERROR, CLEAR_RESULTS, CONSTRAINTS_SHORTCUTS, CONTACTS, CONTACTS_FOR_RESOURCE_FIELD, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContactDetailsComponent, ContactPillComponent, ContentGhostComponent, CopyTextButtonComponent, DATA_MANAGERS_SECTION, DEFAULT_CONFIGURATION, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RECORD_CONVERTER, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_SPATIAL_EXTENT_STYLE, DISABLE_AUTH, DISABLE_DRAFT, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, 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, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldFocusDirective, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEOGRAPHICAL_COVERAGE_SECTION, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ISO_TOPICS, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LEGAL_CONSTRAINTS_FIELD, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, MAX_UPLOAD_SIZE_MB, METADATA_LANGUAGE, METADATA_POINT_OF_CONTACT_SECTION, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, OPEN_DATA_LICENSE, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OTHER_CONSTRAINTS_FIELD, OnlineResourceCardComponent, OnlineServiceResourceInputComponent, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_ABSTRACT_FIELD, RECORD_DATASET_URL_TOKEN, RECORD_GRAPHICAL_OVERVIEW_FIELD, RECORD_KEYWORDS_FIELD, RECORD_LICENSE_FIELD, RECORD_ONLINE_LINK_RESOURCES, RECORD_ONLINE_RESOURCES, RECORD_RESOURCE_CREATED_FIELD, RECORD_RESOURCE_UPDATED_FIELD, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, RECORD_SPATIAL_EXTENTS_FIELD, RECORD_SPATIAL_TOGGLE_FIELD, RECORD_TEMPORAL_EXTENTS_FIELD, RECORD_TITLE_FIELD, RECORD_TOPICS_FIELD, RECORD_UNIQUE_IDENTIFIER_FIELD, RECORD_UPDATED_FIELD, RECORD_UPDATE_FREQUENCY_FIELD, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESOURCE_IDENTIFIER_FIELD, 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, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordStatusValues, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RoleLabels, RoleValues, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SECURITY_CONSTRAINTS_FIELD, 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, SPATIAL_SCOPES, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, 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, SortByEnum, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TITLE_SECTION, TOPICS_SECTION, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, USE_AND_ACCESS_CONDITIONS_SECTION, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, bboxToPolygon, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, createSpatialExtentLayer, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAddressLines, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIndividualDisplayName, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalEditorConfig, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, 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, setEditorConfiguration, setFieldVisibility, setFocusedField, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, spatialExtentToGeometry, spatialExtentsToFeatureCollection, stripHtml, stripNamespace, tableItemsFixture, toDate, toIndividual, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateFrequencyCodeValues, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
44686
45253
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|