geonetwork-ui 2.10.0-dev.0d4a494fa → 2.10.0-dev.0d851f690
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 +499 -126
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/index.d.ts +104 -29
- package/index.d.ts.map +1 -1
- package/package.json +2 -2
- 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/common/domain/src/lib/model/record/metadata.model.ts +11 -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.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 +38 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +33 -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.component.css +37 -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.ts +59 -3
- package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +4 -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/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 +37 -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 +4 -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 +11 -10
- 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 +36 -0
- package/src/libs/util/app-config/src/lib/model.ts +4 -0
- package/src/libs/util/app-config/src/lib/parse-utils.ts +23 -1
- package/src/libs/util/shared/src/lib/record/quality-score.util.ts +33 -18
- 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 +11 -2
- package/translations/de.json +10 -1
- package/translations/en.json +10 -1
- package/translations/es.json +10 -1
- package/translations/fr.json +10 -1
- package/translations/it.json +10 -1
- package/translations/nl.json +10 -1
- package/translations/pt.json +10 -1
- package/translations/sk.json +10 -1
|
@@ -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,7 +18,7 @@ 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';
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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": "",
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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": "",
|
|
@@ -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": "",
|
|
@@ -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": "",
|
|
@@ -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,
|
|
@@ -25100,6 +25222,35 @@ function removeSearchParams(url, searchParams) {
|
|
|
25100
25222
|
return urlObj.toString();
|
|
25101
25223
|
}
|
|
25102
25224
|
|
|
25225
|
+
function getIndividualDisplayName(individual) {
|
|
25226
|
+
const nameParts = [individual.firstName, individual.lastName]
|
|
25227
|
+
.filter(Boolean)
|
|
25228
|
+
.join(' ');
|
|
25229
|
+
const orgPart = individual.organization?.name
|
|
25230
|
+
? ` (${individual.organization.name})`
|
|
25231
|
+
: '';
|
|
25232
|
+
if (nameParts)
|
|
25233
|
+
return `${nameParts}${orgPart}`;
|
|
25234
|
+
return individual.organization?.name ?? individual.email ?? '';
|
|
25235
|
+
}
|
|
25236
|
+
function getAddressLines(address) {
|
|
25237
|
+
return address
|
|
25238
|
+
? address
|
|
25239
|
+
.split(',')
|
|
25240
|
+
.map((part) => part.trim())
|
|
25241
|
+
.filter(Boolean)
|
|
25242
|
+
: [];
|
|
25243
|
+
}
|
|
25244
|
+
function toIndividual(user) {
|
|
25245
|
+
return {
|
|
25246
|
+
firstName: user.name,
|
|
25247
|
+
lastName: user.surname,
|
|
25248
|
+
email: user.email,
|
|
25249
|
+
role: 'unspecified',
|
|
25250
|
+
organization: user.organisation ? { name: user.organisation } : undefined,
|
|
25251
|
+
};
|
|
25252
|
+
}
|
|
25253
|
+
|
|
25103
25254
|
marker('downloads.wfs.featuretype.not.found');
|
|
25104
25255
|
const FORMATS = {
|
|
25105
25256
|
csv: {
|
|
@@ -25526,7 +25677,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
25526
25677
|
}] } });
|
|
25527
25678
|
|
|
25528
25679
|
var name = "geonetwork-ui";
|
|
25529
|
-
var version = "2.10.0-dev.
|
|
25680
|
+
var version = "2.10.0-dev.0d851f690";
|
|
25530
25681
|
var engines = {
|
|
25531
25682
|
node: ">=20"
|
|
25532
25683
|
};
|
|
@@ -25566,7 +25717,7 @@ var peerDependencies = {
|
|
|
25566
25717
|
};
|
|
25567
25718
|
var dependencies = {
|
|
25568
25719
|
"@biesbjerg/ngx-translate-extract-marker": "~1.0.0",
|
|
25569
|
-
"@camptocamp/ogc-client": "1.3.1-dev.
|
|
25720
|
+
"@camptocamp/ogc-client": "1.3.1-dev.afd9c26",
|
|
25570
25721
|
"@geospatial-sdk/core": "0.0.5-dev.61",
|
|
25571
25722
|
"@geospatial-sdk/geocoding": "0.0.5-dev.61",
|
|
25572
25723
|
"@geospatial-sdk/legend": "0.0.5-dev.61",
|
|
@@ -25626,17 +25777,26 @@ const GEONETWORK_UI_TAG_NAME = GEONETWORK_UI_VERSION.split('-')[1]?.startsWith('
|
|
|
25626
25777
|
: `v${packageJson.version}`;
|
|
25627
25778
|
|
|
25628
25779
|
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
|
-
|
|
25780
|
+
title: { validator: (record) => !!record?.title },
|
|
25781
|
+
abstract: { validator: (record) => !!record?.abstract },
|
|
25782
|
+
keywords: { validator: (record) => (record?.keywords?.length ?? 0) > 0 },
|
|
25783
|
+
legalConstraints: {
|
|
25784
|
+
validator: (record) => !!(record?.legalConstraints?.length &&
|
|
25785
|
+
record.legalConstraints.some((c) => c?.text?.trim().length > 0)),
|
|
25786
|
+
},
|
|
25787
|
+
contacts: {
|
|
25788
|
+
validator: (record) => !!record?.contacts?.[0]?.email &&
|
|
25789
|
+
record.contacts[0].email !== 'missing@missing.com',
|
|
25790
|
+
},
|
|
25791
|
+
updateFrequency: {
|
|
25792
|
+
validator: (record) => !!record?.updateFrequency && record.updateFrequency !== 'unknown',
|
|
25793
|
+
},
|
|
25794
|
+
topics: { validator: (record) => (record?.topics?.length ?? 0) > 0 },
|
|
25795
|
+
organisation: {
|
|
25796
|
+
validator: (record) => !!record?.contacts?.[0]?.organization?.name,
|
|
25797
|
+
alias: 'contacts',
|
|
25798
|
+
},
|
|
25799
|
+
source: { validator: (record) => !!record?.extras?.sourcesIdentifiers },
|
|
25640
25800
|
};
|
|
25641
25801
|
function getAllKeysValidator() {
|
|
25642
25802
|
return Object.keys(ValidatorMapper);
|
|
@@ -25667,7 +25827,8 @@ function getQualityValidators(record, propsToValidate) {
|
|
|
25667
25827
|
const filteredProps = propsToValidate.filter((prop) => getMappersFromKind(record.kind).includes(prop));
|
|
25668
25828
|
return filteredProps.map((name) => ({
|
|
25669
25829
|
name,
|
|
25670
|
-
validator: () => ValidatorMapper[name](record),
|
|
25830
|
+
validator: () => ValidatorMapper[name].validator(record),
|
|
25831
|
+
alias: ValidatorMapper[name].alias,
|
|
25671
25832
|
}));
|
|
25672
25833
|
}
|
|
25673
25834
|
|
|
@@ -26978,6 +27139,7 @@ class AuthService {
|
|
|
26978
27139
|
}
|
|
26979
27140
|
return baseUrl
|
|
26980
27141
|
.replace('${current_url}', new URL(this.location.prepareExternalUrl(this.location.path()), window.location.href).toString())
|
|
27142
|
+
.replace('${current_path}', this.location.prepareExternalUrl(this.location.path()))
|
|
26981
27143
|
.replace('${lang2}', toLang2(this.translateService.currentLang))
|
|
26982
27144
|
.replace('${lang3}', toLang3(this.translateService.currentLang));
|
|
26983
27145
|
}
|
|
@@ -27741,8 +27903,9 @@ class MapContainerComponent {
|
|
|
27741
27903
|
}
|
|
27742
27904
|
async ngOnChanges(changes) {
|
|
27743
27905
|
if ('context' in changes && !changes['context'].isFirstChange()) {
|
|
27906
|
+
const olMap = await this.openlayersMap;
|
|
27744
27907
|
const diff = computeMapContextDiff(this.processContext(changes['context'].currentValue), this.processContext(changes['context'].previousValue));
|
|
27745
|
-
await applyContextDiffToMap(
|
|
27908
|
+
await applyContextDiffToMap(olMap, diff);
|
|
27746
27909
|
if (this._resolvedExtentChange && diff.viewChanges) {
|
|
27747
27910
|
this._resolvedExtentChange.emit(this.calculateCurrentMapExtent());
|
|
27748
27911
|
}
|
|
@@ -27948,10 +28111,11 @@ function mouseWheelZoomCondition(event) {
|
|
|
27948
28111
|
|
|
27949
28112
|
class SpatialExtentComponent {
|
|
27950
28113
|
constructor() {
|
|
28114
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
27951
28115
|
this.spatialExtents$ = new BehaviorSubject([]);
|
|
27952
|
-
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1(
|
|
28116
|
+
this.mapContext$ = this.spatialExtents$.pipe(switchMap$1((extents) => {
|
|
27953
28117
|
if (extents.length === 0) {
|
|
27954
|
-
return null;
|
|
28118
|
+
return of(null);
|
|
27955
28119
|
}
|
|
27956
28120
|
const featureCollection = {
|
|
27957
28121
|
type: 'FeatureCollection',
|
|
@@ -27983,11 +28147,7 @@ class SpatialExtentComponent {
|
|
|
27983
28147
|
'fill-color': 'rgba(153, 153, 153, 0.3)',
|
|
27984
28148
|
},
|
|
27985
28149
|
};
|
|
27986
|
-
|
|
27987
|
-
return {
|
|
27988
|
-
view,
|
|
27989
|
-
layers: [layer],
|
|
27990
|
-
};
|
|
28150
|
+
return from(createViewFromLayer(layer)).pipe(map$1((view) => ({ view, layers: [layer] })), tap$1(() => this._cdr.markForCheck()));
|
|
27991
28151
|
}));
|
|
27992
28152
|
this.error = '';
|
|
27993
28153
|
}
|
|
@@ -28150,6 +28310,20 @@ function checkMetadataLanguage(parsedConfigSection, outWarnings) {
|
|
|
28150
28310
|
}
|
|
28151
28311
|
return parsedConfigSection;
|
|
28152
28312
|
}
|
|
28313
|
+
function checkNewRecordDefaultLanguage(parsedConfigSection, outWarnings) {
|
|
28314
|
+
const lang2 = toLang2(parsedConfigSection.new_record_default_language.toLowerCase());
|
|
28315
|
+
if (!(lang2 in LANG_2_TO_3_MAPPER)) {
|
|
28316
|
+
outWarnings.push(`In the [editing] section: new_record_default_language = "${parsedConfigSection.new_record_default_language}" is not a recognized ISO 639 language code`);
|
|
28317
|
+
return {
|
|
28318
|
+
...parsedConfigSection,
|
|
28319
|
+
new_record_default_language: undefined,
|
|
28320
|
+
};
|
|
28321
|
+
}
|
|
28322
|
+
return {
|
|
28323
|
+
...parsedConfigSection,
|
|
28324
|
+
new_record_default_language: lang2,
|
|
28325
|
+
};
|
|
28326
|
+
}
|
|
28153
28327
|
|
|
28154
28328
|
/**
|
|
28155
28329
|
* This loader extends the default one based on JSON files but also loads custom translations
|
|
@@ -28190,6 +28364,10 @@ let searchConfig = null;
|
|
|
28190
28364
|
function getOptionalSearchConfig() {
|
|
28191
28365
|
return searchConfig;
|
|
28192
28366
|
}
|
|
28367
|
+
let editorConfig = null;
|
|
28368
|
+
function getOptionalEditorConfig() {
|
|
28369
|
+
return editorConfig;
|
|
28370
|
+
}
|
|
28193
28371
|
let metadataQualityConfig = null;
|
|
28194
28372
|
function getMetadataQualityConfig() {
|
|
28195
28373
|
return (metadataQualityConfig ||
|
|
@@ -28347,6 +28525,17 @@ function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
|
|
|
28347
28525
|
ENABLED: parsedMetadataQualitySection.enabled,
|
|
28348
28526
|
SORTABLE: parsedMetadataQualitySection.sortable,
|
|
28349
28527
|
};
|
|
28528
|
+
let parsedEditingSection = parseConfigSection(parsed, 'editing', [], ['new_record_default_language'], warnings, errors);
|
|
28529
|
+
if (parsedEditingSection !== null &&
|
|
28530
|
+
parsedEditingSection.new_record_default_language !== undefined) {
|
|
28531
|
+
parsedEditingSection = checkNewRecordDefaultLanguage(parsedEditingSection, warnings);
|
|
28532
|
+
}
|
|
28533
|
+
editorConfig =
|
|
28534
|
+
parsedEditingSection === null
|
|
28535
|
+
? null
|
|
28536
|
+
: {
|
|
28537
|
+
NEW_RECORD_DEFAULT_LANGUAGE: parsedEditingSection.new_record_default_language,
|
|
28538
|
+
};
|
|
28350
28539
|
customTranslations = parseTranslationsConfigSection(parsed, 'translations');
|
|
28351
28540
|
if (errors.length) {
|
|
28352
28541
|
throw new Error(`One or more mandatory settings were missing from the configuration file.
|
|
@@ -28365,6 +28554,7 @@ function isConfigLoaded() {
|
|
|
28365
28554
|
function _reset() {
|
|
28366
28555
|
globalConfig = null;
|
|
28367
28556
|
themeConfig = null;
|
|
28557
|
+
editorConfig = null;
|
|
28368
28558
|
customTranslations = null;
|
|
28369
28559
|
}
|
|
28370
28560
|
const TRANSLATE_WITH_OVERRIDES_CONFIG = {
|
|
@@ -29136,6 +29326,9 @@ class ButtonComponent {
|
|
|
29136
29326
|
case 'black':
|
|
29137
29327
|
this.btnClass = 'gn-ui-btn-black';
|
|
29138
29328
|
break;
|
|
29329
|
+
case 'primary-light':
|
|
29330
|
+
this.btnClass = 'gn-ui-btn-primary-light';
|
|
29331
|
+
break;
|
|
29139
29332
|
case 'default':
|
|
29140
29333
|
default:
|
|
29141
29334
|
this.btnClass = 'gn-ui-btn-default';
|
|
@@ -30247,7 +30440,8 @@ class UrlInputComponent {
|
|
|
30247
30440
|
this.cd.markForCheck();
|
|
30248
30441
|
this.valueChange.next(value);
|
|
30249
30442
|
}
|
|
30250
|
-
handleUpload(element) {
|
|
30443
|
+
handleUpload(element, event) {
|
|
30444
|
+
event.stopPropagation();
|
|
30251
30445
|
const value = element.value;
|
|
30252
30446
|
if (!value || !this.isValidUrl(value))
|
|
30253
30447
|
return;
|
|
@@ -30268,7 +30462,7 @@ class UrlInputComponent {
|
|
|
30268
30462
|
provideNgIconsConfig({
|
|
30269
30463
|
size: '1.5em',
|
|
30270
30464
|
}),
|
|
30271
|
-
], 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 }); }
|
|
30465
|
+
], 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 }); }
|
|
30272
30466
|
}
|
|
30273
30467
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: UrlInputComponent, decorators: [{
|
|
30274
30468
|
type: Component,
|
|
@@ -30277,7 +30471,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
30277
30471
|
provideNgIconsConfig({
|
|
30278
30472
|
size: '1.5em',
|
|
30279
30473
|
}),
|
|
30280
|
-
], 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"] }]
|
|
30474
|
+
], 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"] }]
|
|
30281
30475
|
}], propDecorators: { value: [{
|
|
30282
30476
|
type: Input
|
|
30283
30477
|
}], extraClass: [{
|
|
@@ -34062,10 +34256,7 @@ class MetadataContactComponent {
|
|
|
34062
34256
|
: this.metadata.contactsForResource) || []);
|
|
34063
34257
|
}
|
|
34064
34258
|
get address() {
|
|
34065
|
-
|
|
34066
|
-
.split(',')
|
|
34067
|
-
.map((part) => part.trim());
|
|
34068
|
-
return addressParts;
|
|
34259
|
+
return getAddressLines(this.contacts[0]?.address);
|
|
34069
34260
|
}
|
|
34070
34261
|
onOrganizationClick() {
|
|
34071
34262
|
this.organizationClick.emit(this.shownOrganization);
|
|
@@ -34197,6 +34388,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34197
34388
|
}]
|
|
34198
34389
|
}] });
|
|
34199
34390
|
|
|
34391
|
+
class ContactDetailsComponent {
|
|
34392
|
+
get organization() {
|
|
34393
|
+
return this.contact?.organization;
|
|
34394
|
+
}
|
|
34395
|
+
get displayName() {
|
|
34396
|
+
return getIndividualDisplayName(this.contact);
|
|
34397
|
+
}
|
|
34398
|
+
get addressLines() {
|
|
34399
|
+
return getAddressLines(this.contact?.address);
|
|
34400
|
+
}
|
|
34401
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34402
|
+
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 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: [
|
|
34403
|
+
provideIcons({
|
|
34404
|
+
matCallOutline,
|
|
34405
|
+
matLocationOnOutline,
|
|
34406
|
+
matMailOutline,
|
|
34407
|
+
matOpenInNew,
|
|
34408
|
+
}),
|
|
34409
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34410
|
+
}
|
|
34411
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, decorators: [{
|
|
34412
|
+
type: Component,
|
|
34413
|
+
args: [{ selector: 'gn-ui-contact-details', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ThumbnailComponent, TranslateModule], viewProviders: [
|
|
34414
|
+
provideIcons({
|
|
34415
|
+
matCallOutline,
|
|
34416
|
+
matLocationOnOutline,
|
|
34417
|
+
matMailOutline,
|
|
34418
|
+
matOpenInNew,
|
|
34419
|
+
}),
|
|
34420
|
+
], template: "<div\n class=\"bg-gray-50 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" }]
|
|
34421
|
+
}], propDecorators: { contact: [{
|
|
34422
|
+
type: Input
|
|
34423
|
+
}] } });
|
|
34424
|
+
|
|
34425
|
+
class ContactPillComponent {
|
|
34426
|
+
constructor() {
|
|
34427
|
+
this.host = inject((ElementRef));
|
|
34428
|
+
this.overlayOpen = false;
|
|
34429
|
+
this.overlayWidth = 0;
|
|
34430
|
+
this.overlayOffsetX = 0;
|
|
34431
|
+
this.overlayPositions = [
|
|
34432
|
+
{
|
|
34433
|
+
originX: 'start',
|
|
34434
|
+
originY: 'bottom',
|
|
34435
|
+
overlayX: 'start',
|
|
34436
|
+
overlayY: 'top',
|
|
34437
|
+
offsetY: 4,
|
|
34438
|
+
},
|
|
34439
|
+
{
|
|
34440
|
+
originX: 'start',
|
|
34441
|
+
originY: 'top',
|
|
34442
|
+
overlayX: 'start',
|
|
34443
|
+
overlayY: 'bottom',
|
|
34444
|
+
offsetY: -4,
|
|
34445
|
+
},
|
|
34446
|
+
];
|
|
34447
|
+
}
|
|
34448
|
+
get displayName() {
|
|
34449
|
+
return getIndividualDisplayName(this.contact);
|
|
34450
|
+
}
|
|
34451
|
+
toggleOverlay() {
|
|
34452
|
+
if (!this.overlayOpen) {
|
|
34453
|
+
// Calculate the width and horizontal offset of the overlay to align it with the parent element
|
|
34454
|
+
const parent = this.host.nativeElement.parentElement.getBoundingClientRect();
|
|
34455
|
+
const pill = this.host.nativeElement.getBoundingClientRect();
|
|
34456
|
+
this.overlayWidth = parent.width;
|
|
34457
|
+
this.overlayOffsetX = parent.left - pill.left;
|
|
34458
|
+
}
|
|
34459
|
+
this.overlayOpen = !this.overlayOpen;
|
|
34460
|
+
}
|
|
34461
|
+
closeOverlay() {
|
|
34462
|
+
this.overlayOpen = false;
|
|
34463
|
+
}
|
|
34464
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34465
|
+
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 ? 'primary' : '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 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 group-hover:border-white group-hover:text-white\"\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 }); }
|
|
34466
|
+
}
|
|
34467
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, decorators: [{
|
|
34468
|
+
type: Component,
|
|
34469
|
+
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 ? 'primary' : '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 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 group-hover:border-white group-hover:text-white\"\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" }]
|
|
34470
|
+
}], propDecorators: { contact: [{
|
|
34471
|
+
type: Input
|
|
34472
|
+
}] } });
|
|
34473
|
+
|
|
34200
34474
|
class MetadataInfoComponent {
|
|
34201
34475
|
constructor() {
|
|
34202
34476
|
this.dateService = inject(DateService);
|
|
@@ -34252,20 +34526,32 @@ class MetadataInfoComponent {
|
|
|
34252
34526
|
const temporalExtents = this.metadata.kind === 'dataset' ? this.metadata.temporalExtents : [];
|
|
34253
34527
|
return getTemporalRangeUnion(temporalExtents, this.dateService);
|
|
34254
34528
|
}
|
|
34255
|
-
get shownOrganization() {
|
|
34256
|
-
return this.metadata.ownerOrganization;
|
|
34257
|
-
}
|
|
34258
|
-
get resourceContact() {
|
|
34259
|
-
return this.metadata.contactsForResource?.[0];
|
|
34260
|
-
}
|
|
34261
34529
|
fieldReady(propName) {
|
|
34262
34530
|
return !this.incomplete || propName in this.metadata;
|
|
34263
34531
|
}
|
|
34532
|
+
get contactGroups() {
|
|
34533
|
+
const groups = [];
|
|
34534
|
+
const indexByRole = new Map();
|
|
34535
|
+
for (const contact of this.metadata.contactsForResource ?? []) {
|
|
34536
|
+
if (indexByRole.has(contact.role)) {
|
|
34537
|
+
groups[indexByRole.get(contact.role)].contacts.push(contact);
|
|
34538
|
+
}
|
|
34539
|
+
else {
|
|
34540
|
+
indexByRole.set(contact.role, groups.length);
|
|
34541
|
+
groups.push({
|
|
34542
|
+
role: contact.role,
|
|
34543
|
+
roleLabel: RoleLabels.get(contact.role),
|
|
34544
|
+
contacts: [contact],
|
|
34545
|
+
});
|
|
34546
|
+
}
|
|
34547
|
+
}
|
|
34548
|
+
return groups;
|
|
34549
|
+
}
|
|
34264
34550
|
onKeywordClick(keyword) {
|
|
34265
34551
|
this.keyword.emit(keyword);
|
|
34266
34552
|
}
|
|
34267
34553
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34268
|
-
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: [
|
|
34554
|
+
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 bg-gray-50 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: [
|
|
34269
34555
|
provideIcons({
|
|
34270
34556
|
matOpenInNew,
|
|
34271
34557
|
matMailOutline: matMailOutline$1,
|
|
@@ -34279,21 +34565,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34279
34565
|
TranslatePipe,
|
|
34280
34566
|
MarkdownParserComponent,
|
|
34281
34567
|
ExpandablePanelComponent,
|
|
34568
|
+
ButtonComponent,
|
|
34282
34569
|
BadgeComponent,
|
|
34283
34570
|
ContentGhostComponent,
|
|
34284
|
-
ThumbnailComponent,
|
|
34285
34571
|
MaxLinesComponent,
|
|
34286
34572
|
CopyTextButtonComponent,
|
|
34287
34573
|
NgIcon,
|
|
34288
34574
|
GnUiLinkifyDirective,
|
|
34289
34575
|
GnUiHumanizeDateDirective,
|
|
34290
34576
|
SpatialExtentComponent,
|
|
34577
|
+
ContactPillComponent,
|
|
34291
34578
|
], viewProviders: [
|
|
34292
34579
|
provideIcons({
|
|
34293
34580
|
matOpenInNew,
|
|
34294
34581
|
matMailOutline: matMailOutline$1,
|
|
34295
34582
|
}),
|
|
34296
|
-
], 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"] }]
|
|
34583
|
+
], 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 bg-gray-50 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"] }]
|
|
34297
34584
|
}], propDecorators: { metadata: [{
|
|
34298
34585
|
type: Input
|
|
34299
34586
|
}], incomplete: [{
|
|
@@ -34763,7 +35050,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34763
35050
|
class InternalLinkCardComponent {
|
|
34764
35051
|
constructor() {
|
|
34765
35052
|
this.elementRef = inject(ElementRef);
|
|
34766
|
-
this.linkTarget = '_blank';
|
|
34767
35053
|
this.linkHref = null;
|
|
34768
35054
|
this.mdSelect = new EventEmitter();
|
|
34769
35055
|
this.subscription = new Subscription();
|
|
@@ -34791,7 +35077,7 @@ class InternalLinkCardComponent {
|
|
|
34791
35077
|
cardWidth <= 490);
|
|
34792
35078
|
}
|
|
34793
35079
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: InternalLinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34794
|
-
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",
|
|
35080
|
+
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: [
|
|
34795
35081
|
provideIcons({
|
|
34796
35082
|
iconoirBank,
|
|
34797
35083
|
matLocationSearchingOutline,
|
|
@@ -34799,7 +35085,7 @@ class InternalLinkCardComponent {
|
|
|
34799
35085
|
provideNgIconsConfig({
|
|
34800
35086
|
size: '1.2em',
|
|
34801
35087
|
}),
|
|
34802
|
-
], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n
|
|
35088
|
+
], 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"] }] }); }
|
|
34803
35089
|
}
|
|
34804
35090
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: InternalLinkCardComponent, decorators: [{
|
|
34805
35091
|
type: Component,
|
|
@@ -34819,11 +35105,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
34819
35105
|
provideNgIconsConfig({
|
|
34820
35106
|
size: '1.2em',
|
|
34821
35107
|
}),
|
|
34822
|
-
], template: "<a\n [attr.href]=\"linkHref\"\n
|
|
35108
|
+
], 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"] }]
|
|
34823
35109
|
}], propDecorators: { record: [{
|
|
34824
35110
|
type: Input
|
|
34825
|
-
}], linkTarget: [{
|
|
34826
|
-
type: Input
|
|
34827
35111
|
}], linkHref: [{
|
|
34828
35112
|
type: Input
|
|
34829
35113
|
}], metadataQualityDisplay: [{
|
|
@@ -35427,11 +35711,11 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
35427
35711
|
this.size = 'L';
|
|
35428
35712
|
}
|
|
35429
35713
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordPreviewRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35430
|
-
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 [
|
|
35714
|
+
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 }); }
|
|
35431
35715
|
}
|
|
35432
35716
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
35433
35717
|
type: Component,
|
|
35434
|
-
args: [{ selector: 'gn-ui-record-preview-row', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [InternalLinkCardComponent], template: "<gn-ui-internal-link-card\n [linkHref]=\"linkHref\"\n [
|
|
35718
|
+
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"] }]
|
|
35435
35719
|
}], ctorParameters: () => [], propDecorators: { onResize: [{
|
|
35436
35720
|
type: HostListener,
|
|
35437
35721
|
args: ['window:resize']
|
|
@@ -41230,6 +41514,7 @@ const hasRecordChangedSinceDraft = createAction('[Editor] Has Record Changed Sin
|
|
|
41230
41514
|
const hasRecordChangedSinceDraftSuccess = createAction('[Editor] Has Record Changed Since Draft Success', props());
|
|
41231
41515
|
const isPublished = createAction('[Editor] Record Saved But Not Published', props());
|
|
41232
41516
|
const canEditRecord = createAction('[Editor] User can edit record', props());
|
|
41517
|
+
const setFocusedField = createAction('[Editor] Set focused field', props());
|
|
41233
41518
|
|
|
41234
41519
|
/**
|
|
41235
41520
|
* This file contains the configuration of the fields that will be displayed in the editor.
|
|
@@ -41731,6 +42016,7 @@ class EditorFacade {
|
|
|
41731
42016
|
this.hasRecordChanged$ = this.store.pipe(select(selectHasRecordChanged));
|
|
41732
42017
|
this.isPublished$ = this.store.pipe(select(selectIsPublished));
|
|
41733
42018
|
this.canEditRecord$ = this.store.pipe(select(selectCanEditRecord));
|
|
42019
|
+
this.focusedField$ = this.actions$.pipe(ofType(setFocusedField), map$2(({ model }) => model));
|
|
41734
42020
|
}
|
|
41735
42021
|
openRecord(record, recordSource) {
|
|
41736
42022
|
this.store.dispatch(openRecord({
|
|
@@ -41757,6 +42043,9 @@ class EditorFacade {
|
|
|
41757
42043
|
setCurrentPage(page) {
|
|
41758
42044
|
this.store.dispatch(setCurrentPage({ page }));
|
|
41759
42045
|
}
|
|
42046
|
+
setFocusedField(model) {
|
|
42047
|
+
this.store.dispatch(setFocusedField({ model }));
|
|
42048
|
+
}
|
|
41760
42049
|
setFieldVisibility(field, visible) {
|
|
41761
42050
|
this.store.dispatch(setFieldVisibility({ field, visible }));
|
|
41762
42051
|
}
|
|
@@ -41878,37 +42167,34 @@ marker('editor.record.form.field.contacts');
|
|
|
41878
42167
|
marker('editor.record.form.field.organisation');
|
|
41879
42168
|
class MetadataQualityPanelComponent {
|
|
41880
42169
|
constructor() {
|
|
42170
|
+
this.facade = inject(EditorFacade);
|
|
41881
42171
|
this.propsToValidate = getAllKeysValidator();
|
|
41882
|
-
this.propertiesByPage = [
|
|
41883
|
-
|
|
41884
|
-
|
|
41885
|
-
|
|
41886
|
-
|
|
41887
|
-
|
|
41888
|
-
|
|
41889
|
-
|
|
41890
|
-
|
|
41891
|
-
|
|
41892
|
-
|
|
41893
|
-
|
|
41894
|
-
|
|
41895
|
-
}
|
|
41896
|
-
this.propertiesByPage = fieldsByPage
|
|
41897
|
-
.map((fields) => getQualityValidators(this.record, fields).map(({ name, validator }) => ({
|
|
41898
|
-
label: `editor.record.form.field.${name}`, // use same translations as in fields.config.ts
|
|
42172
|
+
this.propertiesByPage$ = combineLatest([
|
|
42173
|
+
this.facade.editorConfig$,
|
|
42174
|
+
this.facade.record$,
|
|
42175
|
+
]).pipe(map$2(([editorConfig, record]) => {
|
|
42176
|
+
if (!editorConfig || !record)
|
|
42177
|
+
return [];
|
|
42178
|
+
const validators = getQualityValidators(record, this.propsToValidate);
|
|
42179
|
+
return editorConfig.pages
|
|
42180
|
+
.map((page) => page.sections
|
|
42181
|
+
.flatMap((section) => section.fields)
|
|
42182
|
+
.flatMap(({ model }) => validators.filter((v) => (v.alias ?? v.name) === model))
|
|
42183
|
+
.map(({ name, validator, alias }) => ({
|
|
42184
|
+
label: `editor.record.form.field.${name}`,
|
|
41899
42185
|
value: validator(),
|
|
42186
|
+
model: (alias ?? name),
|
|
41900
42187
|
})))
|
|
41901
42188
|
.filter((arr) => arr.length > 0);
|
|
41902
|
-
}
|
|
42189
|
+
}));
|
|
41903
42190
|
}
|
|
41904
|
-
|
|
41905
|
-
|
|
41906
|
-
|
|
41907
|
-
|
|
41908
|
-
: `${baseClasses} bg-transparent hover:bg-transparent`;
|
|
42191
|
+
onCriterionClick(property) {
|
|
42192
|
+
if (!property.value) {
|
|
42193
|
+
this.facade.setFocusedField(property.model);
|
|
42194
|
+
}
|
|
41909
42195
|
}
|
|
41910
42196
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataQualityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41911
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel",
|
|
42197
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel", providers: [
|
|
41912
42198
|
provideIcons({
|
|
41913
42199
|
iconoirSystemShut,
|
|
41914
42200
|
iconoirBadgeCheck,
|
|
@@ -41916,7 +42202,7 @@ class MetadataQualityPanelComponent {
|
|
|
41916
42202
|
provideNgIconsConfig({
|
|
41917
42203
|
size: '1.25em',
|
|
41918
42204
|
}),
|
|
41919
|
-
],
|
|
42205
|
+
], 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" }] }); }
|
|
41920
42206
|
}
|
|
41921
42207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataQualityPanelComponent, decorators: [{
|
|
41922
42208
|
type: Component,
|
|
@@ -41925,6 +42211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
41925
42211
|
TranslatePipe,
|
|
41926
42212
|
ButtonComponent,
|
|
41927
42213
|
NgIconComponent,
|
|
42214
|
+
AsyncPipe,
|
|
41928
42215
|
], providers: [
|
|
41929
42216
|
provideIcons({
|
|
41930
42217
|
iconoirSystemShut,
|
|
@@ -41933,12 +42220,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
41933
42220
|
provideNgIconsConfig({
|
|
41934
42221
|
size: '1.25em',
|
|
41935
42222
|
}),
|
|
41936
|
-
], 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
|
|
41937
|
-
}]
|
|
41938
|
-
type: Input
|
|
41939
|
-
}], record: [{
|
|
41940
|
-
type: Input
|
|
41941
|
-
}] } });
|
|
42223
|
+
], 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" }]
|
|
42224
|
+
}] });
|
|
41942
42225
|
|
|
41943
42226
|
const extraFlagMap = {
|
|
41944
42227
|
ar: 'arab',
|
|
@@ -42193,6 +42476,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42193
42476
|
args: ['actionMenuButton', { read: ElementRef }]
|
|
42194
42477
|
}] } });
|
|
42195
42478
|
|
|
42479
|
+
class FieldFocusDirective {
|
|
42480
|
+
constructor() {
|
|
42481
|
+
this.gnUiFieldFocusGlowClass = 'gn-ui-field-focus-glow';
|
|
42482
|
+
this.el = inject(ElementRef);
|
|
42483
|
+
}
|
|
42484
|
+
focusField() {
|
|
42485
|
+
setTimeout(() => {
|
|
42486
|
+
const host = this.el.nativeElement;
|
|
42487
|
+
const glowClass = this.gnUiFieldFocusGlowClass;
|
|
42488
|
+
host.classList.remove(glowClass);
|
|
42489
|
+
void host.offsetWidth;
|
|
42490
|
+
host.classList.add(glowClass);
|
|
42491
|
+
host.addEventListener('animationend', () => host.classList.remove(glowClass), { once: true });
|
|
42492
|
+
host.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
42493
|
+
const target = host.querySelector('input, textarea, select, [contenteditable="true"]') ??
|
|
42494
|
+
host.querySelector('button:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
42495
|
+
target?.focus({ preventScroll: true });
|
|
42496
|
+
});
|
|
42497
|
+
}
|
|
42498
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FieldFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42499
|
+
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 }); }
|
|
42500
|
+
}
|
|
42501
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FieldFocusDirective, decorators: [{
|
|
42502
|
+
type: Directive,
|
|
42503
|
+
args: [{
|
|
42504
|
+
selector: '[gnUiFieldFocus]',
|
|
42505
|
+
standalone: true,
|
|
42506
|
+
exportAs: 'fieldFocus',
|
|
42507
|
+
}]
|
|
42508
|
+
}], propDecorators: { gnUiFieldFocusGlowClass: [{
|
|
42509
|
+
type: Input
|
|
42510
|
+
}] } });
|
|
42511
|
+
|
|
42196
42512
|
class GenericKeywordsComponent {
|
|
42197
42513
|
constructor() {
|
|
42198
42514
|
this.platformService = inject(PlatformServiceInterface);
|
|
@@ -42680,9 +42996,7 @@ class FormFieldContactsForResourceComponent {
|
|
|
42680
42996
|
/**
|
|
42681
42997
|
* gn-ui-autocomplete
|
|
42682
42998
|
*/
|
|
42683
|
-
this.displayWithFn = (user) => user
|
|
42684
|
-
? `${user.name} ${user.surname} ${user.organisation ? `(${user.organisation})` : ''}`
|
|
42685
|
-
: ``;
|
|
42999
|
+
this.displayWithFn = (user) => getIndividualDisplayName(toIndividual(user));
|
|
42686
43000
|
/**
|
|
42687
43001
|
* gn-ui-autocomplete
|
|
42688
43002
|
*/
|
|
@@ -42774,7 +43088,7 @@ class FormFieldContactsForResourceComponent {
|
|
|
42774
43088
|
provideNgIconsConfig({
|
|
42775
43089
|
size: '1.5rem',
|
|
42776
43090
|
}),
|
|
42777
|
-
], 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 }
|
|
43091
|
+
], 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 }); }
|
|
42778
43092
|
}
|
|
42779
43093
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
|
|
42780
43094
|
type: Component,
|
|
@@ -42791,13 +43105,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42791
43105
|
provideNgIconsConfig({
|
|
42792
43106
|
size: '1.5rem',
|
|
42793
43107
|
}),
|
|
42794
|
-
], 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 }
|
|
43108
|
+
], 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"] }]
|
|
42795
43109
|
}], propDecorators: { value: [{
|
|
42796
43110
|
type: Input
|
|
42797
43111
|
}], valueChange: [{
|
|
42798
43112
|
type: Output
|
|
42799
43113
|
}] } });
|
|
42800
43114
|
|
|
43115
|
+
class ContactDetailsFormComponent {
|
|
43116
|
+
constructor() {
|
|
43117
|
+
this.contactChange = new EventEmitter();
|
|
43118
|
+
}
|
|
43119
|
+
emitContactChange() {
|
|
43120
|
+
this.contactChange.emit(this.contact);
|
|
43121
|
+
}
|
|
43122
|
+
handleOrganizationChange(change) {
|
|
43123
|
+
this.contact.organization = {
|
|
43124
|
+
...(this.contact.organization ?? {}),
|
|
43125
|
+
...change,
|
|
43126
|
+
};
|
|
43127
|
+
this.emitContactChange();
|
|
43128
|
+
}
|
|
43129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43130
|
+
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 }); }
|
|
43131
|
+
}
|
|
43132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsFormComponent, decorators: [{
|
|
43133
|
+
type: Component,
|
|
43134
|
+
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" }]
|
|
43135
|
+
}], propDecorators: { contact: [{
|
|
43136
|
+
type: Input
|
|
43137
|
+
}], contactChange: [{
|
|
43138
|
+
type: Output
|
|
43139
|
+
}] } });
|
|
43140
|
+
|
|
42801
43141
|
class FormFieldContactsComponent {
|
|
42802
43142
|
constructor() {
|
|
42803
43143
|
this.platformServiceInterface = inject(PlatformServiceInterface);
|
|
@@ -42810,7 +43150,7 @@ class FormFieldContactsComponent {
|
|
|
42810
43150
|
/**
|
|
42811
43151
|
* gn-ui-autocomplete
|
|
42812
43152
|
*/
|
|
42813
|
-
this.displayWithFn = (user) =>
|
|
43153
|
+
this.displayWithFn = (user) => getIndividualDisplayName(toIndividual(user));
|
|
42814
43154
|
/**
|
|
42815
43155
|
* gn-ui-autocomplete
|
|
42816
43156
|
*/
|
|
@@ -42849,6 +43189,10 @@ class FormFieldContactsComponent {
|
|
|
42849
43189
|
this.contacts = contacts;
|
|
42850
43190
|
this.valueChange.emit(contacts);
|
|
42851
43191
|
}
|
|
43192
|
+
handleContactChanged(updatedContact, index) {
|
|
43193
|
+
const contacts = this.contacts.map((contact, i) => i === index ? updatedContact : contact);
|
|
43194
|
+
this.handleContactsChanged(contacts);
|
|
43195
|
+
}
|
|
42852
43196
|
/**
|
|
42853
43197
|
* gn-ui-autocomplete
|
|
42854
43198
|
*/
|
|
@@ -42870,7 +43214,7 @@ class FormFieldContactsComponent {
|
|
|
42870
43214
|
this.subscription.unsubscribe();
|
|
42871
43215
|
}
|
|
42872
43216
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42873
|
-
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
|
|
43217
|
+
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 }); }
|
|
42874
43218
|
}
|
|
42875
43219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldContactsComponent, decorators: [{
|
|
42876
43220
|
type: Component,
|
|
@@ -42879,10 +43223,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
42879
43223
|
TranslateDirective,
|
|
42880
43224
|
TranslatePipe,
|
|
42881
43225
|
ContactCardComponent,
|
|
43226
|
+
ContactDetailsFormComponent,
|
|
42882
43227
|
SortableListComponent,
|
|
42883
|
-
], 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
|
|
43228
|
+
], 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" }]
|
|
42884
43229
|
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
42885
43230
|
type: Input
|
|
43231
|
+
}], modelSpecifier: [{
|
|
43232
|
+
type: Input
|
|
42886
43233
|
}], valueChange: [{
|
|
42887
43234
|
type: Output
|
|
42888
43235
|
}] } });
|
|
@@ -43662,30 +44009,29 @@ class FormFieldConstraintsShortcutsComponent {
|
|
|
43662
44009
|
'otherConstraints',
|
|
43663
44010
|
];
|
|
43664
44011
|
this.onDestroy$ = new Subject();
|
|
43665
|
-
|
|
43666
|
-
|
|
43667
|
-
|
|
43668
|
-
|
|
43669
|
-
|
|
43670
|
-
|
|
43671
|
-
|
|
43672
|
-
|
|
43673
|
-
|
|
43674
|
-
});
|
|
43675
|
-
// also hide constraints which are empty arrays
|
|
43676
|
-
const hideEmptyConstraints = (constraints$, model) => {
|
|
43677
|
-
const isConstraintNotEmpty$ = constraints$.pipe(takeUntil(this.onDestroy$), map$2((c) => c.length > 0), distinctUntilChanged$1());
|
|
43678
|
-
combineLatest([
|
|
43679
|
-
isConstraintNotEmpty$,
|
|
43680
|
-
this.anyToggleActivated$,
|
|
43681
|
-
]).subscribe(([isNotEmpty, anyToggleActivated]) => {
|
|
43682
|
-
const visible = isNotEmpty && !anyToggleActivated;
|
|
43683
|
-
this.editorFacade.setFieldVisibility({ model }, visible);
|
|
44012
|
+
// Deferred to afterNextRender to avoid dispatching store actions
|
|
44013
|
+
// synchronously during Angular's change detection cycle (NG0100)
|
|
44014
|
+
afterNextRender(() => {
|
|
44015
|
+
this.anyToggleActivated$
|
|
44016
|
+
.pipe(takeUntil(this.onDestroy$), distinctUntilChanged$1())
|
|
44017
|
+
.subscribe((anyToggleActivated) => {
|
|
44018
|
+
if (anyToggleActivated) {
|
|
44019
|
+
this.hideAllConstraintSections();
|
|
44020
|
+
}
|
|
43684
44021
|
});
|
|
43685
|
-
|
|
43686
|
-
|
|
43687
|
-
|
|
43688
|
-
|
|
44022
|
+
const hideEmptyConstraints = (constraints$, model) => {
|
|
44023
|
+
const isConstraintNotEmpty$ = constraints$.pipe(takeUntil(this.onDestroy$), map$2((c) => c.length > 0), distinctUntilChanged$1());
|
|
44024
|
+
combineLatest([
|
|
44025
|
+
isConstraintNotEmpty$,
|
|
44026
|
+
this.anyToggleActivated$,
|
|
44027
|
+
]).subscribe(([isNotEmpty, anyToggleActivated]) => {
|
|
44028
|
+
const visible = isNotEmpty && !anyToggleActivated;
|
|
44029
|
+
this.editorFacade.setFieldVisibility({ model }, visible);
|
|
44030
|
+
});
|
|
44031
|
+
};
|
|
44032
|
+
hideEmptyConstraints(this.securityConstraints$, 'securityConstraints');
|
|
44033
|
+
hideEmptyConstraints(this.otherConstraints$, 'otherConstraints');
|
|
44034
|
+
});
|
|
43689
44035
|
}
|
|
43690
44036
|
ngOnDestroy() {
|
|
43691
44037
|
this.onDestroy$.next();
|
|
@@ -43750,7 +44096,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
43750
44096
|
size: '1.5rem',
|
|
43751
44097
|
}),
|
|
43752
44098
|
], 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"] }]
|
|
43753
|
-
}] });
|
|
44099
|
+
}], ctorParameters: () => [] });
|
|
43754
44100
|
|
|
43755
44101
|
class ConstraintCardComponent {
|
|
43756
44102
|
constructor() {
|
|
@@ -43946,6 +44292,7 @@ class FormFieldComponent {
|
|
|
43946
44292
|
constructor() {
|
|
43947
44293
|
this.valueChange = new EventEmitter();
|
|
43948
44294
|
this.isOpenData = false;
|
|
44295
|
+
this.fieldFocus = inject(FieldFocusDirective);
|
|
43949
44296
|
}
|
|
43950
44297
|
toggleIsOpenData(event) {
|
|
43951
44298
|
this.isOpenData = event;
|
|
@@ -44012,7 +44359,7 @@ class FormFieldComponent {
|
|
|
44012
44359
|
}
|
|
44013
44360
|
}
|
|
44014
44361
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44015
|
-
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 }); }
|
|
44362
|
+
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}:host.gn-ui-field-focus-glow{position:relative}:host.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}:host.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.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 }); }
|
|
44016
44363
|
}
|
|
44017
44364
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
44018
44365
|
type: Component,
|
|
@@ -44039,7 +44386,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
44039
44386
|
FormFieldSpatialToggleComponent,
|
|
44040
44387
|
FormFieldTopicsComponent,
|
|
44041
44388
|
TextFieldModule,
|
|
44042
|
-
], 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" }]
|
|
44389
|
+
], 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}:host.gn-ui-field-focus-glow{position:relative}:host.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}:host.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"] }]
|
|
44043
44390
|
}], propDecorators: { uniqueIdentifier: [{
|
|
44044
44391
|
type: Input
|
|
44045
44392
|
}], model: [{
|
|
@@ -44062,7 +44409,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
44062
44409
|
class RecordFormComponent {
|
|
44063
44410
|
constructor() {
|
|
44064
44411
|
this.facade = inject(EditorFacade);
|
|
44412
|
+
this.subscription = new Subscription();
|
|
44065
44413
|
this.recordUniqueIdentifier$ = this.facade.record$.pipe(map$2((record) => record.uniqueIdentifier));
|
|
44414
|
+
this.focusFieldWithPage$ = this.facade.focusedField$.pipe(switchMap$1(async (field) => [field, await this.getPageIndexForField(field)]));
|
|
44415
|
+
this.formFields = viewChildren(FormFieldComponent, ...(ngDevMode ? [{ debugName: "formFields" }] : []));
|
|
44416
|
+
}
|
|
44417
|
+
focusField(model) {
|
|
44418
|
+
const fields = this.formFields();
|
|
44419
|
+
const field = fields.find((f) => f.model === model);
|
|
44420
|
+
field?.fieldFocus.focusField();
|
|
44421
|
+
}
|
|
44422
|
+
ngOnInit() {
|
|
44423
|
+
this.subscription.add(this.focusFieldWithPage$
|
|
44424
|
+
.pipe(withLatestFrom$1(this.facade.currentPage$, ([field, fieldPage], currentPage) => [field, fieldPage, currentPage]))
|
|
44425
|
+
.subscribe(([field, fieldPage, currentPage]) => {
|
|
44426
|
+
if (fieldPage !== null && fieldPage !== currentPage) {
|
|
44427
|
+
this.facade.setCurrentPage(fieldPage);
|
|
44428
|
+
}
|
|
44429
|
+
setTimeout(() => this.focusField(field));
|
|
44430
|
+
}));
|
|
44431
|
+
}
|
|
44432
|
+
ngOnDestroy() {
|
|
44433
|
+
this.subscription.unsubscribe();
|
|
44066
44434
|
}
|
|
44067
44435
|
handleFieldValueChange(model, newValue) {
|
|
44068
44436
|
if (!model) {
|
|
@@ -44076,13 +44444,18 @@ class RecordFormComponent {
|
|
|
44076
44444
|
sectionTracker(index, section) {
|
|
44077
44445
|
return section.labelKey;
|
|
44078
44446
|
}
|
|
44447
|
+
async getPageIndexForField(model) {
|
|
44448
|
+
const config = await firstValueFrom(this.facade.editorConfig$);
|
|
44449
|
+
const pageIndex = config.pages.findIndex((page) => page.sections.some((section) => section.fields.some((field) => field.model === model)));
|
|
44450
|
+
return pageIndex >= 0 ? pageIndex : null;
|
|
44451
|
+
}
|
|
44079
44452
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44080
|
-
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 class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\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: [""], 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: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
44453
|
+
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 }], 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 class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\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: [""], 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: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
44081
44454
|
}
|
|
44082
44455
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
44083
44456
|
type: Component,
|
|
44084
44457
|
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateDirective], 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 class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\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" }]
|
|
44085
|
-
}] });
|
|
44458
|
+
}], propDecorators: { formFields: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => FormFieldComponent), { isSignal: true }] }] } });
|
|
44086
44459
|
|
|
44087
44460
|
function evaluate(expression) {
|
|
44088
44461
|
if (expression.match(/^\${.*}$/)) {
|
|
@@ -44702,5 +45075,5 @@ const CHART_TYPE_VALUES = [
|
|
|
44702
45075
|
* Generated bundle index. Do not edit.
|
|
44703
45076
|
*/
|
|
44704
45077
|
|
|
44705
|
-
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, 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, 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 };
|
|
45078
|
+
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_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, 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, 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, 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, stripHtml, stripNamespace, tableItemsFixture, toDate, toIndividual, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateFrequencyCodeValues, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
44706
45079
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|