geonetwork-ui 2.9.0-dev.1858b96f7 → 2.9.0-dev.53585ee9e

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.
@@ -18975,6 +18975,7 @@ var de = {
18975
18975
  "multiselect.filter.placeholder": "Suche",
18976
18976
  "nav.back": "Zurück",
18977
18977
  "navbar.mobile.menuTitle": "Schnellzugriff",
18978
+ "ogc.geojson.notsupported": "Dieser OGC API-Dienst unterstützt das GeoJSON-Format nicht.",
18978
18979
  "ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
18979
18980
  "organisation.filter.placeholder": "Ergebnisse filtern",
18980
18981
  "organisation.sort.sortBy": "Sortieren nach:",
@@ -19060,7 +19061,7 @@ var de = {
19060
19061
  "record.metadata.download": "Herunterladen",
19061
19062
  "record.metadata.feature.catalog": "Attributkatalog",
19062
19063
  "record.metadata.formats": "Formate",
19063
- "record.metadata.isGeographical": "Geographischer Datensatz",
19064
+ "record.metadata.isGeographical": "geographischer Datensatz",
19064
19065
  "record.metadata.keywords": "Stichworte",
19065
19066
  "record.metadata.languages": "Sprachen",
19066
19067
  "record.metadata.link.postgis.table": "Tabelle:",
@@ -19645,6 +19646,7 @@ var en = {
19645
19646
  "multiselect.filter.placeholder": "Search",
19646
19647
  "nav.back": "Back",
19647
19648
  "navbar.mobile.menuTitle": "Quick access",
19649
+ "ogc.geojson.notsupported": "This OGC API does not support the GeoJSON format",
19648
19650
  "ogc.unreachable.unknown": "The service could not be reached",
19649
19651
  "organisation.filter.placeholder": "Filter results",
19650
19652
  "organisation.sort.sortBy": "Sort by:",
@@ -19672,9 +19674,9 @@ var en = {
19672
19674
  "record.feature.catalog.number.total.attribute": "Total amount of objects",
19673
19675
  "record.feature.catalog.number.total.object": "Total amount of attributes",
19674
19676
  "record.feature.limit": "Preview disabled due to too many elements",
19675
- "record.kind.dataset": "Dataset",
19676
- "record.kind.reuse": "Reuse",
19677
- "record.kind.service": "Service",
19677
+ "record.kind.dataset": "dataset",
19678
+ "record.kind.reuse": "reuse",
19679
+ "record.kind.service": "service",
19678
19680
  "record.metadata.about": "Description",
19679
19681
  "record.metadata.api": "API",
19680
19682
  "record.metadata.api.accessServiceProtocol.GPFDL": "GPFDL",
@@ -19730,7 +19732,7 @@ var en = {
19730
19732
  "record.metadata.download": "Downloads",
19731
19733
  "record.metadata.feature.catalog": "Feature catalog",
19732
19734
  "record.metadata.formats": "Formats",
19733
- "record.metadata.isGeographical": "Geographical dataset",
19735
+ "record.metadata.isGeographical": "geographic dataset",
19734
19736
  "record.metadata.keywords": "Keywords",
19735
19737
  "record.metadata.languages": "Languages",
19736
19738
  "record.metadata.link.postgis.table": "table :",
@@ -20316,6 +20318,7 @@ var es = {
20316
20318
  "multiselect.filter.placeholder": "",
20317
20319
  "nav.back": "",
20318
20320
  "navbar.mobile.menuTitle": "Acceso rápido",
20321
+ "ogc.geojson.notsupported": "",
20319
20322
  "ogc.unreachable.unknown": "",
20320
20323
  "organisation.filter.placeholder": "",
20321
20324
  "organisation.sort.sortBy": "",
@@ -20987,6 +20990,7 @@ var fr = {
20987
20990
  "multiselect.filter.placeholder": "Rechercher",
20988
20991
  "nav.back": "Retour",
20989
20992
  "navbar.mobile.menuTitle": "Navigation rapide",
20993
+ "ogc.geojson.notsupported": "Le service OGC API ne supporte pas le format GeoJSON",
20990
20994
  "ogc.unreachable.unknown": "Le service n'est pas accessible",
20991
20995
  "organisation.filter.placeholder": "Filtrer les résultats",
20992
20996
  "organisation.sort.sortBy": "Trier par :",
@@ -21014,9 +21018,9 @@ var fr = {
21014
21018
  "record.feature.catalog.number.total.attribute": "Nombre total d'attributs",
21015
21019
  "record.feature.catalog.number.total.object": "Nombre total d'objets",
21016
21020
  "record.feature.limit": "L’aperçu a été désactivé en raison d’un trop grand nombre d'éléments",
21017
- "record.kind.dataset": "Donnée",
21018
- "record.kind.reuse": "Réutilisation",
21019
- "record.kind.service": "Service",
21021
+ "record.kind.dataset": "donnée",
21022
+ "record.kind.reuse": "réutilisation",
21023
+ "record.kind.service": "service",
21020
21024
  "record.metadata.about": "A propos",
21021
21025
  "record.metadata.api": "API",
21022
21026
  "record.metadata.api.accessServiceProtocol.GPFDL": "",
@@ -21072,7 +21076,7 @@ var fr = {
21072
21076
  "record.metadata.download": "Téléchargements",
21073
21077
  "record.metadata.feature.catalog": "Catalogue d'attributs",
21074
21078
  "record.metadata.formats": "Formats",
21075
- "record.metadata.isGeographical": "Donnée géographique",
21079
+ "record.metadata.isGeographical": "donnée géographique",
21076
21080
  "record.metadata.keywords": "Mots-clés",
21077
21081
  "record.metadata.languages": "Langues",
21078
21082
  "record.metadata.link.postgis.table": "table :",
@@ -21658,6 +21662,7 @@ var it = {
21658
21662
  "multiselect.filter.placeholder": "Cerca",
21659
21663
  "nav.back": "Indietro",
21660
21664
  "navbar.mobile.menuTitle": "Accesso rapido",
21665
+ "ogc.geojson.notsupported": "Il servizio OGC API non supporta il formato GeoJSON.",
21661
21666
  "ogc.unreachable.unknown": "Il servizio non è accessibile",
21662
21667
  "organisation.filter.placeholder": "Filtra i risultati",
21663
21668
  "organisation.sort.sortBy": "Ordina per:",
@@ -21685,9 +21690,9 @@ var it = {
21685
21690
  "record.feature.catalog.number.total.attribute": "Quantità totale di oggetti",
21686
21691
  "record.feature.catalog.number.total.object": "Quantità totale di attributi",
21687
21692
  "record.feature.limit": "La visualizzazione è stata disabilitata a causa di troppi elementi ",
21688
- "record.kind.dataset": "Dataset",
21689
- "record.kind.reuse": "Riutilizzato",
21690
- "record.kind.service": "Servizio",
21693
+ "record.kind.dataset": "dataset",
21694
+ "record.kind.reuse": "riutilizzato",
21695
+ "record.kind.service": "servizio",
21691
21696
  "record.metadata.about": "Descrizione",
21692
21697
  "record.metadata.api": "API",
21693
21698
  "record.metadata.api.accessServiceProtocol.GPFDL": "",
@@ -21743,7 +21748,7 @@ var it = {
21743
21748
  "record.metadata.download": "Download",
21744
21749
  "record.metadata.feature.catalog": "Catalogo dei oggetti",
21745
21750
  "record.metadata.formats": "Formati",
21746
- "record.metadata.isGeographical": "Dati geografici",
21751
+ "record.metadata.isGeographical": "dati geografici",
21747
21752
  "record.metadata.keywords": "Parole chiave",
21748
21753
  "record.metadata.languages": "Lingue",
21749
21754
  "record.metadata.link.postgis.table": "",
@@ -22329,6 +22334,7 @@ var nl = {
22329
22334
  "multiselect.filter.placeholder": "",
22330
22335
  "nav.back": "",
22331
22336
  "navbar.mobile.menuTitle": "",
22337
+ "ogc.geojson.notsupported": "",
22332
22338
  "ogc.unreachable.unknown": "",
22333
22339
  "organisation.filter.placeholder": "",
22334
22340
  "organisation.sort.sortBy": "",
@@ -23000,6 +23006,7 @@ var pt = {
23000
23006
  "multiselect.filter.placeholder": "",
23001
23007
  "nav.back": "",
23002
23008
  "navbar.mobile.menuTitle": "",
23009
+ "ogc.geojson.notsupported": "",
23003
23010
  "ogc.unreachable.unknown": "",
23004
23011
  "organisation.filter.placeholder": "",
23005
23012
  "organisation.sort.sortBy": "",
@@ -23671,6 +23678,7 @@ var sk = {
23671
23678
  "multiselect.filter.placeholder": "Hľadať",
23672
23679
  "nav.back": "Späť",
23673
23680
  "navbar.mobile.menuTitle": "",
23681
+ "ogc.geojson.notsupported": "",
23674
23682
  "ogc.unreachable.unknown": "So službou sa nedalo spojiť",
23675
23683
  "organisation.filter.placeholder": "Filtrovať výsledky",
23676
23684
  "organisation.sort.sortBy": "Zoradiť podľa:",
@@ -25511,7 +25519,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
25511
25519
  }] } });
25512
25520
 
25513
25521
  var name = "geonetwork-ui";
25514
- var version = "2.9.0-dev.1858b96f7";
25522
+ var version = "2.9.0-dev.53585ee9e";
25515
25523
  var engines = {
25516
25524
  node: ">=20"
25517
25525
  };
@@ -25925,14 +25933,18 @@ class ElasticsearchService {
25925
25933
  })
25926
25934
  .join(' OR ');
25927
25935
  };
25928
- const queryString = typeof filters === 'string'
25936
+ let queryString = typeof filters === 'string'
25929
25937
  ? filters
25930
25938
  : Object.keys(filters)
25939
+ .filter((fieldname) => fieldname !== 'gn-ui-crossFieldFilter')
25931
25940
  .filter((fieldname) => !isDateRange(filters[fieldname]))
25932
25941
  .filter((fieldname) => filters[fieldname] &&
25933
25942
  JSON.stringify(filters[fieldname]) !== '{}')
25934
25943
  .map((fieldname) => `${fieldname}:(${makeQuery(filters[fieldname])})`)
25935
25944
  .join(' AND ');
25945
+ if (filters['gn-ui-crossFieldFilter']) {
25946
+ queryString = `${queryString} AND (${filters['gn-ui-crossFieldFilter']})`;
25947
+ }
25936
25948
  const queryRange = Object.entries(filters)
25937
25949
  .filter(([, value]) => isDateRange(value))
25938
25950
  .map(([searchField, dateRange]) => {
@@ -32978,8 +32990,8 @@ class RecordKindField extends SimpleSearchField {
32978
32990
  };
32979
32991
  const presentationFormFilter = {};
32980
32992
  if (values.includes('reuse') && !values.includes('dataset')) {
32981
- presentationFormFilter['mapDigital'] = true;
32982
- presentationFormFilter['mapHardcopy'] = true;
32993
+ filters['gn-ui-crossFieldFilter'] =
32994
+ `(resourceType:("dataset" OR "document") AND cl_presentationForm.key:("mapDigital" OR "mapHardcopy")) OR resourceType:("application" OR "interactiveMap" OR "map" OR "map/static" OR "map/interactive" OR "map-interactive" OR "map-static" OR "mapDigital" OR "mapHardcopy" OR "staticMap")`;
32983
32995
  }
32984
32996
  else if (values.includes('dataset') && !values.includes('reuse')) {
32985
32997
  presentationFormFilter['mapDigital'] = false;
@@ -33072,7 +33084,12 @@ class FieldsService {
33072
33084
  : [fieldValues[fieldName]];
33073
33085
  return this.getFiltersForValues(fieldName, values);
33074
33086
  });
33075
- return forkJoin(filtersByField$).pipe(map$1((filters) => filters.reduce((prev, curr) => ({ ...prev, ...curr }), {})));
33087
+ return forkJoin(filtersByField$).pipe(map$1((filters) => {
33088
+ if (typeof filters === 'string') {
33089
+ return filters;
33090
+ }
33091
+ return filters.reduce((prev, curr) => ({ ...prev, ...curr }), {});
33092
+ }));
33076
33093
  }
33077
33094
  readFieldValuesFromFilters(filters) {
33078
33095
  const fieldValues$ = this.supportedFields.map((fieldName) => this.getValuesForFilters(fieldName, filters).pipe(map$1((values) => ({ [fieldName]: values }))));
@@ -34015,7 +34032,7 @@ class MetadataContactComponent {
34015
34032
  this.organizationClick.emit(this.shownOrganization);
34016
34033
  }
34017
34034
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34018
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MetadataContactComponent, isStandalone: true, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div\n class=\"py-5 px-5 rounded bg-gray-100 text-black\"\n data-cy=\"metadata-organization\"\n>\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-base font-medium\" translate>record.metadata.contact</p>\n </div>\n @if (shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grid grid-cols-1 gap-1\">\n <div class=\"flex\">\n <div\n class=\"font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name-link\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n @if (shownOrganization?.website) {\n <div>\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n }\n </div>\n <div class=\"grid grid-cols-1 gap-5 py-3 overflow-hidden\">\n @if (contacts[0]?.phone) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.email) {\n <div>\n <div class=\"flex gap-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contacts.length) {\n <a\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"break-all text-sm hover:underline\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n }\n </div>\n </div>\n }\n @if (contacts[0]?.firstName || contacts[0]?.lastName) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.address) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n @for (addressPart of address; track addressPart) {\n <p class=\"text-sm\">\n {{ addressPart }}\n </p>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [
34035
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MetadataContactComponent, isStandalone: true, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div\n class=\"py-5 px-5 rounded bg-gray-100 text-black\"\n data-cy=\"metadata-organization\"\n>\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-base font-medium\" translate>record.metadata.contact</p>\n </div>\n @if (shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grid grid-cols-1 gap-1\">\n <div class=\"flex\">\n <div\n class=\"font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name-link\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n @if (shownOrganization?.website) {\n <div>\n <div class=\"flex items-center mt-1\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-sm cursor-pointer hover:underline transition-all ml-2\"\n >\n {{ shownOrganization.website }}\n </a>\n </div>\n </div>\n }\n </div>\n <div class=\"grid grid-cols-1 gap-5 py-3 overflow-hidden\">\n @if (contacts[0]?.phone) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.email) {\n <div>\n <div class=\"flex gap-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contacts.length) {\n <a\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"break-all text-sm hover:underline\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n }\n </div>\n </div>\n }\n @if (contacts[0]?.firstName || contacts[0]?.lastName) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.address) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n @for (addressPart of address; track addressPart) {\n <p class=\"text-sm\">\n {{ addressPart }}\n </p>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [
34019
34036
  provideIcons({
34020
34037
  matOpenInNew,
34021
34038
  matCallOutline,
@@ -34035,7 +34052,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
34035
34052
  matPersonOutline,
34036
34053
  matLocationOnOutline,
34037
34054
  }),
34038
- ], template: "<div\n class=\"py-5 px-5 rounded bg-gray-100 text-black\"\n data-cy=\"metadata-organization\"\n>\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-base font-medium\" translate>record.metadata.contact</p>\n </div>\n @if (shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grid grid-cols-1 gap-1\">\n <div class=\"flex\">\n <div\n class=\"font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name-link\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n @if (shownOrganization?.website) {\n <div>\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n }\n </div>\n <div class=\"grid grid-cols-1 gap-5 py-3 overflow-hidden\">\n @if (contacts[0]?.phone) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.email) {\n <div>\n <div class=\"flex gap-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contacts.length) {\n <a\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"break-all text-sm hover:underline\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n }\n </div>\n </div>\n }\n @if (contacts[0]?.firstName || contacts[0]?.lastName) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.address) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n @for (addressPart of address; track addressPart) {\n <p class=\"text-sm\">\n {{ addressPart }}\n </p>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
34055
+ ], template: "<div\n class=\"py-5 px-5 rounded bg-gray-100 text-black\"\n data-cy=\"metadata-organization\"\n>\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-base font-medium\" translate>record.metadata.contact</p>\n </div>\n @if (shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <div class=\"grid grid-cols-1 gap-1\">\n <div class=\"flex\">\n <div\n class=\"font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name-link\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n @if (shownOrganization?.website) {\n <div>\n <div class=\"flex items-center mt-1\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-sm cursor-pointer hover:underline transition-all ml-2\"\n >\n {{ shownOrganization.website }}\n </a>\n </div>\n </div>\n }\n </div>\n <div class=\"grid grid-cols-1 gap-5 py-3 overflow-hidden\">\n @if (contacts[0]?.phone) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matCallOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.email) {\n <div>\n <div class=\"flex gap-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contacts.length) {\n <a\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"break-all text-sm hover:underline\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n }\n </div>\n </div>\n }\n @if (contacts[0]?.firstName || contacts[0]?.lastName) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matPersonOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n }\n @if (contacts[0]?.address) {\n <div>\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n <div class=\"flex flex-col ml-2\">\n @for (addressPart of address; track addressPart) {\n <p class=\"text-sm\">\n {{ addressPart }}\n </p>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
34039
34056
  }], propDecorators: { metadata: [{
34040
34057
  type: Input
34041
34058
  }], organizationClick: [{
@@ -38227,6 +38244,7 @@ marker('dataset.error.forbidden');
38227
38244
  marker('wfs.unreachable.unknown');
38228
38245
  marker('wfs.featuretype.notfound');
38229
38246
  marker('wfs.geojsongml.notsupported');
38247
+ marker('ogc.geojson.notsupported');
38230
38248
  marker('ogc.unreachable.unknown');
38231
38249
  marker('dataset.error.network');
38232
38250
  marker('dataset.error.http');
@@ -38454,12 +38472,14 @@ class DataService {
38454
38472
  else if (link.type === 'service' &&
38455
38473
  link.accessServiceProtocol === 'ogcFeatures') {
38456
38474
  return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
38457
- const geojsonUrl = collectionInfo.jsonDownloadLink;
38458
- return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
38459
- }), tap$1((url) => {
38460
- if (url === null) {
38461
- throw new Error('wfs.geojsongml.notsupported');
38475
+ const isMimeTypeJson = (mimeType) => {
38476
+ return mimeType.toLowerCase().indexOf('json') > -1;
38477
+ };
38478
+ const geojsonUrl = collectionInfo.bulkDownloadLinks[Object.keys(collectionInfo.bulkDownloadLinks).find((mimeType) => isMimeTypeJson(mimeType))];
38479
+ if (!geojsonUrl) {
38480
+ return throwError(() => 'ogc.geojson.notsupported');
38462
38481
  }
38482
+ return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
38463
38483
  }));
38464
38484
  }
38465
38485
  return throwError(() => 'protocol not supported');