geonetwork-ui 2.6.0-dev.a6b2f3e85 → 2.6.0-dev.a8e63e487
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +37 -4
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +2 -1
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +3 -3
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +41 -9
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +32 -2
- package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
- package/esm2022/libs/feature/record/src/index.mjs +2 -3
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +31 -5
- package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -13
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
- package/esm2022/libs/feature/search/src/lib/constants.mjs +2 -1
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -2
- package/esm2022/libs/ui/elements/src/index.mjs +3 -1
- package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +55 -0
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +27 -53
- package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +22 -5
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +51 -0
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +17 -7
- package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +12 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +68 -0
- package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +3 -3
- package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +3 -3
- package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +65 -14
- package/esm2022/libs/ui/search/src/index.mjs +2 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -8
- package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
- package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +19 -12
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +27 -14
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
- package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
- package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -1
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -1
- package/esm2022/translations/de.json +34 -5
- package/esm2022/translations/en.json +34 -7
- package/esm2022/translations/es.json +33 -4
- package/esm2022/translations/fr.json +34 -7
- package/esm2022/translations/it.json +64 -35
- package/esm2022/translations/nl.json +33 -4
- package/esm2022/translations/pt.json +33 -4
- package/fesm2022/geonetwork-ui.mjs +1580 -665
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +7 -2
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
- package/libs/feature/record/src/index.d.ts +1 -2
- package/libs/feature/record/src/index.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -21
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
- package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
- package/libs/ui/elements/src/index.d.ts +2 -0
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
- package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -7
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +16 -0
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +8 -1
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +1 -0
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
- package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
- package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +15 -6
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
- package/libs/ui/search/src/index.d.ts +1 -0
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +3 -3
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -1
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +55 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +8 -4
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +65 -7
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +8 -1
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
- package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +10 -0
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +14 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +1 -1
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +37 -0
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
- package/src/libs/feature/record/src/index.ts +1 -2
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +35 -4
- package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +22 -15
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
- package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
- package/src/libs/feature/search/src/lib/constants.ts +1 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +2 -0
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +133 -138
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +19 -47
- package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +7 -5
- package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +21 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +6 -3
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +4 -0
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -1
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +48 -0
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +52 -0
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +8 -29
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +14 -1
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +15 -1
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +9 -1
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -1
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css +0 -0
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +77 -0
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -2
- package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
- package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +1 -0
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +8 -10
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +75 -7
- package/src/libs/ui/search/src/index.ts +1 -0
- package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
- package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
- package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +11 -3
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +14 -11
- package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +27 -17
- package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +20 -10
- package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
- package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
- package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +3 -0
- package/src/libs/util/shared/src/lib/links/link-utils.ts +3 -0
- package/tailwind.base.css +1 -1
- package/translations/de.json +34 -5
- package/translations/en.json +34 -7
- package/translations/es.json +33 -4
- package/translations/fr.json +34 -7
- package/translations/it.json +64 -35
- package/translations/nl.json +33 -4
- package/translations/pt.json +33 -4
- package/translations/sk.json +33 -4
|
@@ -4,6 +4,7 @@ export function matchProtocol(protocol: string): ServiceProtocol {
|
|
|
4
4
|
if (/wms/i.test(protocol)) return 'wms'
|
|
5
5
|
if (/wfs/i.test(protocol)) return 'wfs'
|
|
6
6
|
if (/wmts/i.test(protocol)) return 'wmts'
|
|
7
|
+
if (/tms/i.test(protocol)) return 'tms'
|
|
7
8
|
if (/wps/i.test(protocol)) return 'wps'
|
|
8
9
|
if (/ogc\W*api\W*features/i.test(protocol)) return 'ogcFeatures'
|
|
9
10
|
if (/esri/i.test(protocol)) return 'esriRest'
|
|
@@ -617,7 +617,7 @@ Die Quelle ist zu bezeichnen: „Quelle: Stadt Zürich“.`,
|
|
|
617
617
|
status: 'completed',
|
|
618
618
|
updateFrequency: 'asNeeded',
|
|
619
619
|
defaultLanguage: 'de',
|
|
620
|
-
otherLanguages: ['fr', 'it', 'en', 'rm'],
|
|
620
|
+
otherLanguages: ['fr', 'it', 'en', 'rm', 'aar'],
|
|
621
621
|
translations: {
|
|
622
622
|
abstract: {
|
|
623
623
|
en: 'The perimeters of the Alpine Convention in Switzerland. The Alpine Convention is an international treaty between the eight Alpine countries: Germany, France, Italy, Liechtenstein, Monaco, Austria, Switzerland and Slovenia, plus the European Union. The aim of the treaty is to protect the Alps by means of cross-sectoral, integrated and sustainable policies.',
|
|
@@ -152,12 +152,22 @@ export class Gn4FieldMapper {
|
|
|
152
152
|
)
|
|
153
153
|
const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang])
|
|
154
154
|
const defaultLanguage = output.defaultLanguage ?? languages[0] ?? null // set the first language as main one as fallback
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
...output,
|
|
158
|
+
defaultLanguage,
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
otherLanguage: (output, source) => {
|
|
162
|
+
const langList = getAsArray(selectField<string>(source, 'otherLanguage'))
|
|
163
|
+
const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang])
|
|
164
|
+
const defaultLanguage = output.defaultLanguage ?? languages[0] ?? null
|
|
155
165
|
const otherLanguages = languages.filter(
|
|
156
166
|
(lang) => lang !== defaultLanguage
|
|
157
167
|
)
|
|
168
|
+
|
|
158
169
|
return {
|
|
159
170
|
...output,
|
|
160
|
-
defaultLanguage,
|
|
161
171
|
otherLanguages,
|
|
162
172
|
}
|
|
163
173
|
},
|
|
@@ -294,12 +304,52 @@ export class Gn4FieldMapper {
|
|
|
294
304
|
) ?? {},
|
|
295
305
|
'_source'
|
|
296
306
|
)
|
|
297
|
-
const featureCatalogIdentifier = selectField(
|
|
307
|
+
const featureCatalogIdentifier: string = selectField(
|
|
298
308
|
<SourceWithUnknownProps>fcatSource,
|
|
299
309
|
'uuid'
|
|
300
310
|
)
|
|
301
|
-
|
|
302
|
-
|
|
311
|
+
const sourceOfLinks = getAsArray(
|
|
312
|
+
selectField(
|
|
313
|
+
<SourceWithUnknownProps>selectField(source, 'related'),
|
|
314
|
+
'hassources'
|
|
315
|
+
)
|
|
316
|
+
)
|
|
317
|
+
const sourceOfIdentifiers: string[] = sourceOfLinks
|
|
318
|
+
.filter((link) => link['origin'] === 'catalog')
|
|
319
|
+
.map((link) => {
|
|
320
|
+
return selectField(
|
|
321
|
+
selectField(<SourceWithUnknownProps>link, '_source'),
|
|
322
|
+
'uuid'
|
|
323
|
+
)
|
|
324
|
+
})
|
|
325
|
+
const extraValues: Record<string, string | string[]> = {}
|
|
326
|
+
if (featureCatalogIdentifier) {
|
|
327
|
+
extraValues.featureCatalogIdentifier = featureCatalogIdentifier
|
|
328
|
+
}
|
|
329
|
+
if (sourceOfIdentifiers && sourceOfIdentifiers.length > 0) {
|
|
330
|
+
extraValues.sourceOfIdentifiers = sourceOfIdentifiers
|
|
331
|
+
}
|
|
332
|
+
return Object.keys(extraValues).length > 0
|
|
333
|
+
? this.addExtra(extraValues, output)
|
|
334
|
+
: output
|
|
335
|
+
},
|
|
336
|
+
recordLink: (output, source) => {
|
|
337
|
+
const recordLinks = getAsArray(
|
|
338
|
+
selectField<SourceWithUnknownProps[]>(source, 'recordLink')
|
|
339
|
+
)
|
|
340
|
+
const sourcesIdentifiers: string[] = recordLinks
|
|
341
|
+
.filter(
|
|
342
|
+
(link) => link['origin'] === 'catalog' && link['type'] === 'sources'
|
|
343
|
+
)
|
|
344
|
+
.map((link) => selectField(<SourceWithUnknownProps>link, 'to'))
|
|
345
|
+
|
|
346
|
+
return sourcesIdentifiers && sourcesIdentifiers.length > 0
|
|
347
|
+
? this.addExtra(
|
|
348
|
+
{
|
|
349
|
+
sourcesIdentifiers,
|
|
350
|
+
},
|
|
351
|
+
output
|
|
352
|
+
)
|
|
303
353
|
: output
|
|
304
354
|
},
|
|
305
355
|
isPublishedToAll: (output, source) =>
|
|
@@ -430,6 +480,7 @@ export class Gn4FieldMapper {
|
|
|
430
480
|
/^OGC:WMS/.test(protocol) ||
|
|
431
481
|
/^OGC:WFS/.test(protocol) ||
|
|
432
482
|
/^OGC:WMTS/.test(protocol) ||
|
|
483
|
+
/TMS/i.test(protocol) ||
|
|
433
484
|
/ogc\W*api\W*features/i.test(protocol) ||
|
|
434
485
|
(/^WWW:DOWNLOAD-/.test(protocol) && /data.geopf.fr/.test(url)) // TO DO : change with the good protocol when decided
|
|
435
486
|
) {
|
|
@@ -164,7 +164,6 @@ export type MetadataObject = Partial<{
|
|
|
164
164
|
resourceDate: ResourceDate[]
|
|
165
165
|
resourceEdition: string
|
|
166
166
|
resourceIdentifier: ResourceIdentifier[]
|
|
167
|
-
resourceLanguage: string[]
|
|
168
167
|
resourceTemporalDateRange: ResourceTemporalDateRange[]
|
|
169
168
|
resourceTemporalExtentDateRange: ResourceTemporalDateRange[]
|
|
170
169
|
resourceTitleObject: MultilingualField
|
|
@@ -363,11 +363,18 @@ export function readOnlineResources(rootEl: XmlElement): OnlineResource[] {
|
|
|
363
363
|
)(rootEl)
|
|
364
364
|
}
|
|
365
365
|
|
|
366
|
-
function readLocaleElement(): ChainableFunction<
|
|
366
|
+
export function readLocaleElement(): ChainableFunction<
|
|
367
|
+
XmlElement,
|
|
368
|
+
LanguageCode
|
|
369
|
+
> {
|
|
367
370
|
return pipe(
|
|
368
371
|
findChildElement('lan:LanguageCode'),
|
|
369
372
|
readAttribute('codeListValue'),
|
|
370
|
-
map((lang) =>
|
|
373
|
+
map((lang) => {
|
|
374
|
+
const normalized = lang?.toLowerCase()
|
|
375
|
+
const iso2Lang = LANG_3_TO_2_MAPPER[normalized]
|
|
376
|
+
return iso2Lang ?? lang
|
|
377
|
+
})
|
|
371
378
|
)
|
|
372
379
|
}
|
|
373
380
|
|
|
@@ -381,6 +388,9 @@ export function readDefaultLanguage(rootEl: XmlElement): LanguageCode {
|
|
|
381
388
|
export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
382
389
|
return pipe(
|
|
383
390
|
findChildrenElement('mdb:otherLocale', false),
|
|
384
|
-
mapArray(readLocaleElement())
|
|
391
|
+
mapArray(readLocaleElement()),
|
|
392
|
+
map((languages) =>
|
|
393
|
+
languages.filter((lang): lang is LanguageCode => lang !== null)
|
|
394
|
+
)
|
|
385
395
|
)(rootEl)
|
|
386
396
|
}
|
|
@@ -529,7 +529,11 @@ export function writeOnlineResources(
|
|
|
529
529
|
}
|
|
530
530
|
|
|
531
531
|
function writeLocaleElement(language: LanguageCode) {
|
|
532
|
-
const
|
|
532
|
+
const normalizedLang = language.toLowerCase()
|
|
533
|
+
const lang3 =
|
|
534
|
+
normalizedLang.length === 2
|
|
535
|
+
? LANG_2_TO_3_MAPPER[normalizedLang]
|
|
536
|
+
: normalizedLang
|
|
533
537
|
return pipe(
|
|
534
538
|
findChildOrCreate('lan:PT_Locale'),
|
|
535
539
|
writeAttribute('id', language.toUpperCase()),
|
|
@@ -65,7 +65,8 @@ export function extractCharacterString(): ChainableFunction<
|
|
|
65
65
|
return pipe(
|
|
66
66
|
fallback(
|
|
67
67
|
findChildElement('gco:CharacterString', false),
|
|
68
|
-
findChildElement('gmx:Anchor', false)
|
|
68
|
+
findChildElement('gmx:Anchor', false),
|
|
69
|
+
findChildElement('gmx:MimeFileType', false)
|
|
69
70
|
),
|
|
70
71
|
readText()
|
|
71
72
|
)
|
|
@@ -1161,11 +1162,14 @@ export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
|
1161
1162
|
findChildrenElement('gmd:locale', false),
|
|
1162
1163
|
mapArray(
|
|
1163
1164
|
pipe(
|
|
1164
|
-
findChildElement('
|
|
1165
|
+
findChildElement('lan:LanguageCode'),
|
|
1165
1166
|
readAttribute('codeListValue'),
|
|
1166
|
-
map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()])
|
|
1167
|
+
map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()] ?? lang)
|
|
1167
1168
|
)
|
|
1168
1169
|
),
|
|
1170
|
+
map((languages) =>
|
|
1171
|
+
languages.filter((lang): lang is LanguageCode => lang !== null)
|
|
1172
|
+
),
|
|
1169
1173
|
map((languages) => (languages.length ? languages : [defaultLanguage]))
|
|
1170
1174
|
)(rootEl)
|
|
1171
1175
|
}
|
|
@@ -1173,7 +1177,7 @@ export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
|
1173
1177
|
export function readDefaultLanguage(rootEl: XmlElement): LanguageCode {
|
|
1174
1178
|
return pipe(
|
|
1175
1179
|
findChildElement('gmd:language', false),
|
|
1176
|
-
findChildElement('
|
|
1180
|
+
findChildElement('lan:LanguageCode'),
|
|
1177
1181
|
readAttribute('codeListValue'),
|
|
1178
1182
|
map((lang) => (lang ? LANG_3_TO_2_MAPPER[lang.toLowerCase()] : null))
|
|
1179
1183
|
)(rootEl)
|
|
@@ -1471,7 +1471,10 @@ export function writeLanguages(record: DatasetRecord, rootEl: XmlElement) {
|
|
|
1471
1471
|
writeAttribute('id', lang.toUpperCase()),
|
|
1472
1472
|
createNestedChild('gmd:languageCode', 'gmd:LanguageCode'),
|
|
1473
1473
|
writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'),
|
|
1474
|
-
writeAttribute(
|
|
1474
|
+
writeAttribute(
|
|
1475
|
+
'codeListValue',
|
|
1476
|
+
lang.length === 2 ? LANG_2_TO_3_MAPPER[lang] : lang
|
|
1477
|
+
)
|
|
1475
1478
|
)
|
|
1476
1479
|
|
|
1477
1480
|
// add new languages (only if other than default one)
|
|
@@ -124,11 +124,11 @@ export class ElasticsearchService {
|
|
|
124
124
|
this.runtimeFields[fieldName] = expression
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
getMetadataByIdsPayload(uuids: string[]): EsSearchParams {
|
|
128
128
|
return {
|
|
129
129
|
query: {
|
|
130
130
|
ids: {
|
|
131
|
-
values:
|
|
131
|
+
values: uuids,
|
|
132
132
|
},
|
|
133
133
|
},
|
|
134
134
|
}
|
|
@@ -31,7 +31,7 @@ import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain
|
|
|
31
31
|
import {
|
|
32
32
|
RecordsApiService,
|
|
33
33
|
SearchApiService,
|
|
34
|
-
|
|
34
|
+
LanguagesApiService,
|
|
35
35
|
} from '../../../../../../libs/data-access/gn4/src'
|
|
36
36
|
import {
|
|
37
37
|
combineLatest,
|
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
import { catchError, map, tap } from 'rxjs/operators'
|
|
48
48
|
import { lt } from 'semver'
|
|
49
49
|
import { ElasticsearchService } from './elasticsearch'
|
|
50
|
+
import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src'
|
|
50
51
|
|
|
51
52
|
const minPublicationApiVersion = '4.2.5'
|
|
52
53
|
|
|
@@ -65,7 +66,8 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
65
66
|
private gn4SearchHelper: ElasticsearchService,
|
|
66
67
|
private gn4Mapper: Gn4Converter,
|
|
67
68
|
private gn4RecordsApi: RecordsApiService,
|
|
68
|
-
private platformService: PlatformServiceInterface
|
|
69
|
+
private platformService: PlatformServiceInterface,
|
|
70
|
+
private gn4LanguagesApi: LanguagesApiService
|
|
69
71
|
) {}
|
|
70
72
|
|
|
71
73
|
search({
|
|
@@ -129,9 +131,9 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
129
131
|
return this.gn4SearchApi
|
|
130
132
|
.search(
|
|
131
133
|
'bucket',
|
|
132
|
-
['fcats'],
|
|
134
|
+
['fcats', 'hassources'],
|
|
133
135
|
JSON.stringify(
|
|
134
|
-
this.gn4SearchHelper.
|
|
136
|
+
this.gn4SearchHelper.getMetadataByIdsPayload([uniqueIdentifier])
|
|
135
137
|
)
|
|
136
138
|
)
|
|
137
139
|
.pipe(
|
|
@@ -142,6 +144,27 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
142
144
|
)
|
|
143
145
|
}
|
|
144
146
|
|
|
147
|
+
getMultipleRecords(
|
|
148
|
+
uniqueIdentifiers: string[]
|
|
149
|
+
): Observable<CatalogRecord[] | null> {
|
|
150
|
+
return this.gn4SearchApi
|
|
151
|
+
.search(
|
|
152
|
+
'bucket',
|
|
153
|
+
undefined,
|
|
154
|
+
JSON.stringify(
|
|
155
|
+
this.gn4SearchHelper.getMetadataByIdsPayload(uniqueIdentifiers)
|
|
156
|
+
)
|
|
157
|
+
)
|
|
158
|
+
.pipe(
|
|
159
|
+
map((results: Gn4SearchResults) => results.hits.hits),
|
|
160
|
+
switchMap((records) =>
|
|
161
|
+
records && records.length > 0
|
|
162
|
+
? this.gn4Mapper.readRecords(records)
|
|
163
|
+
: of(null)
|
|
164
|
+
)
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
|
|
145
168
|
private mapEmbeddedFeatureCatalog(
|
|
146
169
|
featureTypes: Array<DatasetFeatureType>
|
|
147
170
|
): DatasetFeatureCatalog {
|
|
@@ -154,6 +177,7 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
154
177
|
name: attr.name,
|
|
155
178
|
code: attr.code,
|
|
156
179
|
title: attr.definition,
|
|
180
|
+
type: attr.type,
|
|
157
181
|
}))
|
|
158
182
|
: [],
|
|
159
183
|
})),
|
|
@@ -165,7 +189,8 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
165
189
|
): Observable<DatasetFeatureCatalog | null> {
|
|
166
190
|
if (
|
|
167
191
|
record.extras?.['featureTypes'] &&
|
|
168
|
-
Array.isArray(record.extras['featureTypes'])
|
|
192
|
+
Array.isArray(record.extras['featureTypes']) &&
|
|
193
|
+
record.extras['featureTypes'].length > 0
|
|
169
194
|
) {
|
|
170
195
|
return of(this.mapEmbeddedFeatureCatalog(record.extras['featureTypes']))
|
|
171
196
|
}
|
|
@@ -201,6 +226,24 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
201
226
|
)
|
|
202
227
|
}
|
|
203
228
|
|
|
229
|
+
getSources(record: CatalogRecord): Observable<CatalogRecord[]> {
|
|
230
|
+
const sourcesIdentifiers = record.extras?.['sourcesIdentifiers'] as string[]
|
|
231
|
+
if (sourcesIdentifiers && sourcesIdentifiers.length > 0) {
|
|
232
|
+
return this.getMultipleRecords(sourcesIdentifiers)
|
|
233
|
+
}
|
|
234
|
+
return of(null)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]> {
|
|
238
|
+
const sourceOfIdentifiers = record.extras?.[
|
|
239
|
+
'sourceOfIdentifiers'
|
|
240
|
+
] as string[]
|
|
241
|
+
if (sourceOfIdentifiers && sourceOfIdentifiers.length > 0) {
|
|
242
|
+
return this.getMultipleRecords(sourceOfIdentifiers)
|
|
243
|
+
}
|
|
244
|
+
return of(null)
|
|
245
|
+
}
|
|
246
|
+
|
|
204
247
|
aggregate(params: AggregationsParams): Observable<Aggregations> {
|
|
205
248
|
// if aggregations are empty, return an empty object right away
|
|
206
249
|
if (Object.keys(params).length === 0) return of({})
|
|
@@ -363,9 +406,12 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
363
406
|
const record = await converter.readRecord(fetchedRecordAsXml)
|
|
364
407
|
|
|
365
408
|
record.title = `${record.title} (Copy)`
|
|
366
|
-
await converter.writeRecord(
|
|
409
|
+
const recordAsXml = await converter.writeRecord(
|
|
410
|
+
record,
|
|
411
|
+
fetchedRecordAsXml
|
|
412
|
+
)
|
|
367
413
|
|
|
368
|
-
return this.saveRecord(record,
|
|
414
|
+
return this.saveRecord(record, recordAsXml, false)
|
|
369
415
|
}),
|
|
370
416
|
exhaustMap((uuidObservable: Observable<string>) => uuidObservable),
|
|
371
417
|
catchError((error: HttpErrorResponse) => {
|
|
@@ -466,6 +512,18 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
466
512
|
)
|
|
467
513
|
}
|
|
468
514
|
|
|
515
|
+
getApplicationLanguages(): Observable<string[]> {
|
|
516
|
+
return this.gn4LanguagesApi
|
|
517
|
+
.getApplicationLanguages()
|
|
518
|
+
.pipe(
|
|
519
|
+
map((languages) =>
|
|
520
|
+
languages
|
|
521
|
+
.map((lang) => LANG_3_TO_2_MAPPER[lang.id ?? ''])
|
|
522
|
+
.filter((code): code is string => !!code)
|
|
523
|
+
)
|
|
524
|
+
)
|
|
525
|
+
}
|
|
526
|
+
|
|
469
527
|
private getRecordAsXml(uniqueIdentifier: string): Observable<string | null> {
|
|
470
528
|
return this.gn4RecordsApi
|
|
471
529
|
.getRecordAs(
|
|
@@ -152,6 +152,8 @@ export type ServiceProtocol =
|
|
|
152
152
|
| 'esriRest'
|
|
153
153
|
| 'ogcFeatures'
|
|
154
154
|
| 'GPFDL'
|
|
155
|
+
| 'tms'
|
|
156
|
+
| 'maplibre-style'
|
|
155
157
|
| 'other'
|
|
156
158
|
|
|
157
159
|
export type OnlineResourceType = 'service' | 'download' | 'link' | 'endpoint'
|
|
@@ -272,7 +274,12 @@ export interface DatasetFeatureType {
|
|
|
272
274
|
isAbstract: string
|
|
273
275
|
typeName: string
|
|
274
276
|
definition: string
|
|
275
|
-
attributeTable: Array<{
|
|
277
|
+
attributeTable: Array<{
|
|
278
|
+
name: string
|
|
279
|
+
definition: string
|
|
280
|
+
type: string
|
|
281
|
+
code: string
|
|
282
|
+
}>
|
|
276
283
|
}
|
|
277
284
|
|
|
278
285
|
export type ReuseType = 'application' | 'map' | 'other'
|
|
@@ -19,6 +19,8 @@ export abstract class RecordsRepositoryInterface {
|
|
|
19
19
|
abstract getSimilarRecords(
|
|
20
20
|
similarTo: CatalogRecord
|
|
21
21
|
): Observable<CatalogRecord[]>
|
|
22
|
+
abstract getSources(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
23
|
+
abstract getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
22
24
|
abstract fuzzySearch(query: string): Observable<SearchResults>
|
|
23
25
|
abstract canEditRecord(uniqueIdentifier: string): Observable<boolean>
|
|
24
26
|
/**
|
|
@@ -95,4 +97,5 @@ export abstract class RecordsRepositoryInterface {
|
|
|
95
97
|
localRecord: CatalogRecord
|
|
96
98
|
): Observable<{ user: string; date: Date }>
|
|
97
99
|
abstract getRecordPublicationStatus(uuid: string): Observable<boolean>
|
|
100
|
+
abstract getApplicationLanguages(): Observable<string[]>
|
|
98
101
|
}
|
|
@@ -144,4 +144,14 @@ export const elasticLinkFixture = (): Record<string, unknown> => ({
|
|
|
144
144
|
name: 'ogcapi features layer',
|
|
145
145
|
url: 'https://mel.integration.apps.gs-fr-prod.camptocamp.com/data/ogcapi/collections/comptages_velo/items?',
|
|
146
146
|
},
|
|
147
|
+
maplayerTms: {
|
|
148
|
+
accessServiceProtocol: 'TMS',
|
|
149
|
+
name: 'mytmslayer',
|
|
150
|
+
url: 'https://my.tms.server/MapServer',
|
|
151
|
+
},
|
|
152
|
+
maplayerTms2: {
|
|
153
|
+
accessServiceProtocol: 'OSGeo:TMS',
|
|
154
|
+
name: 'myothertmslayer',
|
|
155
|
+
url: 'https://my.tms.server/MapServer',
|
|
156
|
+
},
|
|
147
157
|
})
|
|
@@ -185,6 +185,20 @@ export const aSetOfLinksFixture = () => ({
|
|
|
185
185
|
url: new URL('https://my.ogc.server/wms'),
|
|
186
186
|
accessServiceProtocol: 'wms',
|
|
187
187
|
}) as DatasetServiceDistribution,
|
|
188
|
+
geodataTms: () =>
|
|
189
|
+
({
|
|
190
|
+
name: 'mytmslayer',
|
|
191
|
+
type: 'service',
|
|
192
|
+
url: new URL('https://my.ogc.server/tms'),
|
|
193
|
+
accessServiceProtocol: 'tms',
|
|
194
|
+
}) as DatasetServiceDistribution,
|
|
195
|
+
geodataAsMaplibreStyle: () =>
|
|
196
|
+
({
|
|
197
|
+
name: 'mytmslayerAsMaplibreJson',
|
|
198
|
+
type: 'service',
|
|
199
|
+
url: new URL('https://my.ogc.server/tms/layer/style.json'),
|
|
200
|
+
accessServiceProtocol: 'maplibre-style',
|
|
201
|
+
}) as DatasetServiceDistribution,
|
|
188
202
|
geodataWfs2: () =>
|
|
189
203
|
({
|
|
190
204
|
name: 'myotherlayer',
|
|
@@ -231,7 +231,7 @@ As such, **it is not very interesting at all.**`,
|
|
|
231
231
|
recordUpdated: new Date('2022-04-15T14:18:19'),
|
|
232
232
|
resourceUpdated: new Date('2022-03-29'),
|
|
233
233
|
title:
|
|
234
|
-
"Plan local d'urbanisme (PLU) dématérialisé - commune d'Avrigny - approbation du 29/03/2022",
|
|
234
|
+
"Plan local d'urbanisme (PLU) dématérialisé - commune d'Avrigny - approbation du 29/03/2022 (Ce lot informe du droit à bâtir sur la commune d'Avrigny)",
|
|
235
235
|
abstract: `Plan local d'urbanisme (PLU) dématérialisé - commune d'Avrigny - approbation du 29/03/2022.
|
|
236
236
|
|
|
237
237
|
Ce lot informe du droit à bâtir sur la commune d'Avrigny.
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
OgcApiRecord,
|
|
7
7
|
WfsEndpoint,
|
|
8
8
|
WfsVersion,
|
|
9
|
+
TmsEndpoint,
|
|
9
10
|
} from '@camptocamp/ogc-client'
|
|
10
11
|
import {
|
|
11
12
|
BaseReader,
|
|
@@ -231,6 +232,42 @@ export class DataService {
|
|
|
231
232
|
})
|
|
232
233
|
}
|
|
233
234
|
|
|
235
|
+
async getGeodataLinksFromTms(
|
|
236
|
+
tmsLink: DatasetServiceDistribution,
|
|
237
|
+
keepOriginalLink = false
|
|
238
|
+
): Promise<DatasetServiceDistribution[]> {
|
|
239
|
+
const endpoint = new TmsEndpoint(tmsLink.url.toString())
|
|
240
|
+
const tileMaps = await endpoint.allTileMaps
|
|
241
|
+
if (!tileMaps?.length) return null
|
|
242
|
+
|
|
243
|
+
// TODO: at some point use the identifierInService field if more that one layers in the TMS service
|
|
244
|
+
const tileMapInfo = await endpoint.getTileMapInfo(tileMaps[0].href)
|
|
245
|
+
|
|
246
|
+
// case 1: no styles; return a plain TMS link
|
|
247
|
+
if (!tileMapInfo?.metadata?.length) return [tmsLink]
|
|
248
|
+
|
|
249
|
+
// case 2: styles present; return each as a separate link
|
|
250
|
+
const styleLinks = tileMapInfo.metadata
|
|
251
|
+
.filter((meta) => meta.href)
|
|
252
|
+
.map((meta) => {
|
|
253
|
+
const fileName = meta.href.split('/').pop() || ''
|
|
254
|
+
const linkName =
|
|
255
|
+
tmsLink.description || ('name' in tmsLink ? tmsLink.name : '')
|
|
256
|
+
const styleName = fileName.split('.')[0]
|
|
257
|
+
const name = `${linkName} - ${styleName}`
|
|
258
|
+
return {
|
|
259
|
+
type: 'service',
|
|
260
|
+
url: new URL(meta.href),
|
|
261
|
+
name,
|
|
262
|
+
accessServiceProtocol: 'maplibre-style',
|
|
263
|
+
} as DatasetServiceDistribution
|
|
264
|
+
})
|
|
265
|
+
if (keepOriginalLink) {
|
|
266
|
+
styleLinks.unshift(tmsLink)
|
|
267
|
+
}
|
|
268
|
+
return styleLinks
|
|
269
|
+
}
|
|
270
|
+
|
|
234
271
|
getDownloadLinksFromEsriRest(
|
|
235
272
|
esriRestLink: DatasetServiceDistribution
|
|
236
273
|
): DatasetOnlineResource[] {
|
|
@@ -1,14 +1,120 @@
|
|
|
1
1
|
<div
|
|
2
|
-
class="flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-
|
|
2
|
+
class="flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto"
|
|
3
3
|
>
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
<div class="flex flex-row px-2 justify-between">
|
|
5
|
+
<span class="text-3xl font-title text-black/80" translate
|
|
6
|
+
>editor.record.form.multilingual.title</span
|
|
7
|
+
>
|
|
8
|
+
<button
|
|
9
|
+
[title]="'editor.record.form.multilingual.open' | translate"
|
|
10
|
+
(click)="toggleLanguageSelection()"
|
|
11
|
+
*ngIf="isMultilingual"
|
|
12
|
+
data-test="activateSelection"
|
|
13
|
+
>
|
|
14
|
+
<ng-icon class="mt-1" name="iconoirSettings"></ng-icon>
|
|
15
|
+
</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="flex flex-col gap-2" *ngIf="editTranslations || !isMultilingual">
|
|
18
|
+
<gn-ui-check-toggle
|
|
19
|
+
class="p-2"
|
|
20
|
+
[label]="'editor.record.form.multilingual.enable' | translate"
|
|
21
|
+
[color]="'primary'"
|
|
22
|
+
[(value)]="isMultilingual"
|
|
23
|
+
(toggled)="switchMultilingual($event)"
|
|
24
|
+
></gn-ui-check-toggle>
|
|
25
|
+
<div *ngIf="isMultilingual" class="flex flex-col gap-2">
|
|
26
|
+
<div class="flex flex-row justify-between border-t border-gray-300 p-3">
|
|
27
|
+
<span class="mt-2 text-sm text-gray-600" translate
|
|
28
|
+
>editor.record.form.multilingual.activate</span
|
|
29
|
+
>
|
|
30
|
+
<gn-ui-button
|
|
31
|
+
extraClass="w-16 h-8 font-bold"
|
|
32
|
+
type="gray"
|
|
33
|
+
(buttonClick)="validateTranslations()"
|
|
34
|
+
data-test="validateSelection"
|
|
35
|
+
>{{ 'editor.record.form.multilingual.validate' | translate }}
|
|
36
|
+
</gn-ui-button>
|
|
37
|
+
</div>
|
|
38
|
+
<ng-container *ngIf="supportedLanguages$ | async as languages">
|
|
39
|
+
<div
|
|
40
|
+
class="flex flex-col gap-2 w-full px-2"
|
|
41
|
+
data-test="langAvailable"
|
|
42
|
+
*ngFor="let lang of languages"
|
|
43
|
+
>
|
|
44
|
+
<gn-ui-button
|
|
45
|
+
[extraClass]="getExtraClass(lang)"
|
|
46
|
+
type="gray"
|
|
47
|
+
(buttonClick)="toggleLanguage(lang)"
|
|
48
|
+
[disabled]="lang === _record.defaultLanguage"
|
|
49
|
+
[title]="getToggleTitle(lang)"
|
|
50
|
+
>
|
|
51
|
+
<span [class]="getIconClass(lang)"></span>
|
|
52
|
+
<span class="ml-2">{{ 'language.' + lang | translate }}</span>
|
|
53
|
+
</gn-ui-button>
|
|
54
|
+
</div>
|
|
55
|
+
</ng-container>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div *ngIf="!editTranslations && isMultilingual" class="flex flex-col gap-2">
|
|
59
|
+
<gn-ui-button
|
|
60
|
+
*ngFor="let recordLang of sortLanguages(recordLanguages); let i = index"
|
|
61
|
+
extraClass="flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full"
|
|
62
|
+
[ngClass]="{
|
|
63
|
+
'mt-8': isFirstUnsupported(i),
|
|
64
|
+
'': true,
|
|
65
|
+
}"
|
|
66
|
+
(buttonClick)="switchFormLang(recordLang)"
|
|
67
|
+
type="outline"
|
|
68
|
+
data-test="langSwitch"
|
|
69
|
+
>
|
|
70
|
+
<div class="flex flex-row gap-2 items-center">
|
|
71
|
+
<ng-icon
|
|
72
|
+
*ngIf="recordLang === formLanguage"
|
|
73
|
+
class="text-primary mt-1"
|
|
74
|
+
name="iconoirCheckCircle"
|
|
75
|
+
></ng-icon>
|
|
76
|
+
<ng-icon
|
|
77
|
+
*ngIf="recordLang !== formLanguage"
|
|
78
|
+
class="text-gray-800 mt-1"
|
|
79
|
+
name="iconoirCircle"
|
|
80
|
+
></ng-icon>
|
|
81
|
+
<span
|
|
82
|
+
*ngIf="recordLang.length === 2"
|
|
83
|
+
[class]="getIconClass(recordLang) + 'mt-1'"
|
|
84
|
+
></span>
|
|
85
|
+
<span [ngClass]="recordLang === formLanguage ? 'text-black' : ''">{{
|
|
86
|
+
isLangSupported(recordLang)
|
|
87
|
+
? ('language.' + recordLang | translate)
|
|
88
|
+
: recordLang.toUpperCase()
|
|
89
|
+
}}</span>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="flex flex-row gap-2 items-center">
|
|
92
|
+
<span
|
|
93
|
+
*ngIf="recordLang === formLanguage"
|
|
94
|
+
class="text-xs text-base"
|
|
95
|
+
translate
|
|
96
|
+
>editor.record.form.multilingual.default</span
|
|
97
|
+
>
|
|
98
|
+
<button
|
|
99
|
+
(click)="
|
|
100
|
+
openActionMenu(recordLang, template); $event.stopPropagation()
|
|
101
|
+
"
|
|
102
|
+
cdkOverlayOrigin
|
|
103
|
+
#actionMenuButton
|
|
104
|
+
>
|
|
105
|
+
<ng-icon class="pb-5" name="matMoreHorizOutline"></ng-icon>
|
|
106
|
+
</button>
|
|
107
|
+
<ng-template #template>
|
|
108
|
+
<gn-ui-action-menu
|
|
109
|
+
[canDelete]="recordLang !== _record.defaultLanguage"
|
|
110
|
+
page="record"
|
|
111
|
+
(delete)="confirmDeleteAction(recordLang)"
|
|
112
|
+
(closeActionMenu)="closeActionMenu()"
|
|
113
|
+
(switch)="switchDefaultLang(recordLang)"
|
|
114
|
+
>
|
|
115
|
+
</gn-ui-action-menu>
|
|
116
|
+
</ng-template>
|
|
117
|
+
</div>
|
|
118
|
+
</gn-ui-button>
|
|
119
|
+
</div>
|
|
14
120
|
</div>
|