geonetwork-ui 2.2.0-dev.55bb5e18 → 2.2.0-dev.6695ae4d
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/gn4/atomic-operations.mjs +2 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +77 -52
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +16 -11
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +23 -16
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +21 -18
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
- package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
- package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
- package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +23 -3
- package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
- package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
- package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +3 -1
- package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
- package/esm2022/libs/feature/search/src/index.mjs +4 -1
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
- package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
- package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +3 -1
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
- 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 +38 -17
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +7 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -3
- 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/button/button.component.mjs +2 -2
- package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +8 -3
- package/esm2022/libs/ui/layout/src/index.mjs +3 -1
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
- package/esm2022/libs/ui/search/src/index.mjs +1 -2
- package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
- package/esm2022/libs/util/i18n/src/index.mjs +1 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
- package/esm2022/translations/de.json +105 -96
- package/esm2022/translations/en.json +33 -24
- package/esm2022/translations/es.json +13 -4
- package/esm2022/translations/fr.json +17 -8
- package/esm2022/translations/it.json +16 -7
- package/esm2022/translations/nl.json +13 -4
- package/esm2022/translations/pt.json +13 -4
- package/fesm2022/geonetwork-ui.mjs +1127 -731
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -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/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -4
- 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 +3 -2
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +15 -15
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
- package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
- package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/map/src/index.d.ts +1 -0
- package/libs/feature/map/src/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
- package/libs/feature/map/src/lib/feature-map.module.d.ts +15 -12
- package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
- package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/index.d.ts +3 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
- package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +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/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +8 -2
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +12 -11
- 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/editable-label/editable-label.directive.d.ts +13 -0
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +2 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +2 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
- package/libs/ui/search/src/index.d.ts +0 -1
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/index.d.ts +0 -1
- package/libs/util/i18n/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +22 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +3 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +112 -65
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +19 -12
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +62 -43
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +91 -59
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
- package/src/libs/common/domain/src/lib/index.ts +2 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +17 -18
- package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
- package/src/libs/feature/map/src/index.ts +1 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +12 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
- package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
- package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +6 -2
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +6 -0
- package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
- package/src/libs/feature/search/src/index.ts +3 -0
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
- package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
- package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
- package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
- package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
- package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +54 -54
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +2 -2
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +101 -25
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +35 -7
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +4 -0
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +4 -0
- 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/button/button.component.css +1 -1
- package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -0
- package/src/libs/ui/layout/src/index.ts +2 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
- package/src/libs/ui/search/src/index.ts +0 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
- package/translations/de.json +105 -96
- package/translations/en.json +33 -24
- package/translations/es.json +13 -4
- package/translations/fr.json +17 -8
- package/translations/it.json +16 -7
- package/translations/nl.json +13 -4
- package/translations/pt.json +13 -4
- package/translations/sk.json +13 -4
- package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
- package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
- package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
- package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
- package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
- package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
- package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
- package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
- package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
- package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
- package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
- package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
- /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
- /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ElementRef, ViewChildren } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
|
-
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService
|
|
8
|
+
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
11
|
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take, withLatestFrom, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
|
-
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject,
|
|
15
|
+
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
18
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
|
|
@@ -32,8 +32,8 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
|
|
|
32
32
|
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
33
33
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
34
34
|
import WMTSCapabilities from 'ol/format/WMTSCapabilities';
|
|
35
|
-
import { WmsEndpoint, sharedFetch, useCache, WfsEndpoint } from '@camptocamp/ogc-client';
|
|
36
35
|
import chroma from 'chroma-js';
|
|
36
|
+
import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
37
37
|
import { register, fromEPSGCode } from 'ol/proj/proj4';
|
|
38
38
|
import proj4 from 'proj4/dist/proj4';
|
|
39
39
|
import * as TOML from '@ltd/j-toml';
|
|
@@ -73,10 +73,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|
|
73
73
|
import * as i3$2 from '@angular/material/datepicker';
|
|
74
74
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
75
75
|
import { MatInputModule } from '@angular/material/input';
|
|
76
|
+
import * as basicLightbox from 'basiclightbox';
|
|
76
77
|
import * as i1$8 from '@ngrx/effects';
|
|
77
78
|
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
78
79
|
import tippy from 'tippy.js';
|
|
79
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
|
+
import { Polygon } from 'ol/geom';
|
|
82
|
+
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
80
83
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
81
84
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
82
85
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -646,28 +649,32 @@ function extractStatus() {
|
|
|
646
649
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
647
650
|
}
|
|
648
651
|
// from gmd:resourceConstraints
|
|
649
|
-
function
|
|
650
|
-
|
|
651
|
-
|
|
652
|
+
function extractLegalConstraints() {
|
|
653
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
654
|
+
...(url && { url }),
|
|
652
655
|
text,
|
|
653
|
-
type: 'other',
|
|
654
656
|
})));
|
|
655
|
-
|
|
657
|
+
}
|
|
658
|
+
// from gmd:resourceConstraints
|
|
659
|
+
function extractSecurityConstraints() {
|
|
660
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
661
|
+
...(url && { url }),
|
|
656
662
|
text,
|
|
657
|
-
type: 'security',
|
|
658
663
|
})));
|
|
659
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
660
664
|
}
|
|
661
665
|
// from gmd:resourceConstraints
|
|
662
|
-
function
|
|
663
|
-
return pipe(
|
|
666
|
+
function extractOtherConstraints() {
|
|
667
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
669
|
+
text,
|
|
670
|
+
})));
|
|
664
671
|
}
|
|
665
672
|
// from gmd:resourceConstraints
|
|
666
673
|
function extractLicenses() {
|
|
667
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
674
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
675
|
...(url && { url }),
|
|
669
676
|
text,
|
|
670
|
-
})))
|
|
677
|
+
})));
|
|
671
678
|
}
|
|
672
679
|
// from gmd:MD_Distribution
|
|
673
680
|
function extractDatasetDistributions() {
|
|
@@ -839,11 +846,14 @@ function readStatus(rootEl) {
|
|
|
839
846
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
840
847
|
}
|
|
841
848
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
842
|
-
function
|
|
843
|
-
return pipe(getConstraints, mapArray(
|
|
849
|
+
function readLegalConstraints(rootEl) {
|
|
850
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
844
851
|
}
|
|
845
|
-
function
|
|
846
|
-
return pipe(getConstraints, mapArray(
|
|
852
|
+
function readSecurityConstraints(rootEl) {
|
|
853
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
854
|
+
}
|
|
855
|
+
function readOtherConstraints(rootEl) {
|
|
856
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
847
857
|
}
|
|
848
858
|
function readLicenses(rootEl) {
|
|
849
859
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
@@ -1076,23 +1086,23 @@ function appendKeywords(keywords, type) {
|
|
|
1076
1086
|
? appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', type)))
|
|
1077
1087
|
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
|
|
1078
1088
|
}
|
|
1079
|
-
function
|
|
1080
|
-
|
|
1081
|
-
// remove legal constraints that *only* have 'otherRestrictions'
|
|
1082
|
-
const otherConstraintsFilter = pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code === 'otherRestrictions'));
|
|
1083
|
-
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray((el) => securityConstraintsFilter(el) || otherConstraintsFilter(el))));
|
|
1084
|
-
}
|
|
1085
|
-
function createAccessConstraint(constraint) {
|
|
1086
|
-
if (constraint.type === 'security') {
|
|
1089
|
+
function createConstraint(constraint, type) {
|
|
1090
|
+
if (type === 'security') {
|
|
1087
1091
|
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1088
1092
|
}
|
|
1089
|
-
|
|
1093
|
+
else if (type === 'legal') {
|
|
1094
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
|
|
1095
|
+
}
|
|
1096
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1090
1097
|
}
|
|
1091
|
-
function
|
|
1098
|
+
function removeOtherConstraints() {
|
|
1092
1099
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1093
1100
|
}
|
|
1094
|
-
function
|
|
1095
|
-
return pipe(
|
|
1101
|
+
function removeSecurityConstraints() {
|
|
1102
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1103
|
+
}
|
|
1104
|
+
function removeLegalConstraints() {
|
|
1105
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
|
|
1096
1106
|
}
|
|
1097
1107
|
function removeLicenses() {
|
|
1098
1108
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
|
|
@@ -1196,14 +1206,17 @@ function writeKeywords(record, rootEl) {
|
|
|
1196
1206
|
function writeThemes(record, rootEl) {
|
|
1197
1207
|
pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
|
|
1198
1208
|
}
|
|
1199
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1200
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1201
|
-
}
|
|
1202
1209
|
function writeLicenses(record, rootEl) {
|
|
1203
1210
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1204
1211
|
}
|
|
1205
|
-
function
|
|
1206
|
-
pipe(findOrCreateIdentification(),
|
|
1212
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1213
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1214
|
+
}
|
|
1215
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1216
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1217
|
+
}
|
|
1218
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1219
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1207
1220
|
}
|
|
1208
1221
|
function writeUpdateFrequency(record, rootEl) {
|
|
1209
1222
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1301,8 +1314,9 @@ function toModel(xml) {
|
|
|
1301
1314
|
const recordCreated = recordUpdated;
|
|
1302
1315
|
const keywords = readKeywords(rootEl);
|
|
1303
1316
|
const themes = readThemes(rootEl);
|
|
1304
|
-
const
|
|
1305
|
-
const
|
|
1317
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1318
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1319
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1306
1320
|
const licenses = readLicenses(rootEl);
|
|
1307
1321
|
const overviews = readOverviews(rootEl);
|
|
1308
1322
|
// not used yet
|
|
@@ -1330,9 +1344,10 @@ function toModel(xml) {
|
|
|
1330
1344
|
contactsForResource: [],
|
|
1331
1345
|
keywords,
|
|
1332
1346
|
themes,
|
|
1333
|
-
accessConstraints,
|
|
1334
|
-
useLimitations,
|
|
1335
1347
|
licenses,
|
|
1348
|
+
legalConstraints,
|
|
1349
|
+
securityConstraints,
|
|
1350
|
+
otherConstraints,
|
|
1336
1351
|
...(datasetCreated && { datasetCreated }),
|
|
1337
1352
|
...(datasetUpdated && { datasetUpdated }),
|
|
1338
1353
|
lineage,
|
|
@@ -1357,9 +1372,10 @@ function toModel(xml) {
|
|
|
1357
1372
|
contacts,
|
|
1358
1373
|
keywords,
|
|
1359
1374
|
themes,
|
|
1360
|
-
accessConstraints,
|
|
1361
|
-
useLimitations,
|
|
1362
1375
|
licenses,
|
|
1376
|
+
legalConstraints,
|
|
1377
|
+
securityConstraints,
|
|
1378
|
+
otherConstraints,
|
|
1363
1379
|
overviews,
|
|
1364
1380
|
onlineResources,
|
|
1365
1381
|
};
|
|
@@ -1385,9 +1401,11 @@ function toXml(record, originalXml) {
|
|
|
1385
1401
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1386
1402
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1387
1403
|
fieldChanged('themes') && writeThemes(record, rootEl);
|
|
1388
|
-
fieldChanged('
|
|
1404
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1405
|
+
fieldChanged('securityConstraints') &&
|
|
1406
|
+
writeSecurityConstraints(record, rootEl);
|
|
1389
1407
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1390
|
-
fieldChanged('
|
|
1408
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1391
1409
|
if (record.kind === 'dataset') {
|
|
1392
1410
|
writeStatus(record, rootEl);
|
|
1393
1411
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1413,6 +1431,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
|
|
|
1413
1431
|
const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
|
|
1414
1432
|
const toDate = (field) => new Date(field);
|
|
1415
1433
|
const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
|
|
1434
|
+
const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
|
|
1416
1435
|
const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
|
|
1417
1436
|
const getAsUrl = (field, location = window.location.toString()) => {
|
|
1418
1437
|
// an empty string is not a valid url, even though it could be considered an empty path to the root
|
|
@@ -16539,133 +16558,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
16539
16558
|
}]
|
|
16540
16559
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
16541
16560
|
|
|
16542
|
-
// IMPORTANT:
|
|
16543
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
|
|
16544
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16545
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16546
|
-
class TestTranslateLoader extends TranslateLoader {
|
|
16547
|
-
constructor(_translations = {}) {
|
|
16548
|
-
super();
|
|
16549
|
-
this._translations = _translations;
|
|
16550
|
-
}
|
|
16551
|
-
/**
|
|
16552
|
-
* Returns an {Observable} of translations for the specified language. If the
|
|
16553
|
-
* language is not recognized, an empty translations object will be returned.
|
|
16554
|
-
*
|
|
16555
|
-
* @param language the language for which the translations should be retrieved.
|
|
16556
|
-
* @returns the translations for the specified
|
|
16557
|
-
* language or an empty set of translations if the language is not recognized.
|
|
16558
|
-
*/
|
|
16559
|
-
getTranslation(language) {
|
|
16560
|
-
return of(this._translations[language] || {});
|
|
16561
|
-
}
|
|
16562
|
-
}
|
|
16563
|
-
|
|
16564
|
-
// IMPORTANT:
|
|
16565
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
|
|
16566
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16567
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16568
|
-
/**
|
|
16569
|
-
* The TranslateTestingModule provides the {TranslateModule} as well as a
|
|
16570
|
-
* {TranslateService} configured to return translations specific for the
|
|
16571
|
-
* test environment.
|
|
16572
|
-
*
|
|
16573
|
-
* @export
|
|
16574
|
-
*/
|
|
16575
|
-
class TranslateTestingModule {
|
|
16576
|
-
constructor() {
|
|
16577
|
-
this._translations = {};
|
|
16578
|
-
}
|
|
16579
|
-
static withTranslations(languageOrTranslations, translations) {
|
|
16580
|
-
const translateTestingModule = new TranslateTestingModule();
|
|
16581
|
-
if (typeof languageOrTranslations === 'string') {
|
|
16582
|
-
return translateTestingModule.withTranslations(languageOrTranslations, translations);
|
|
16583
|
-
}
|
|
16584
|
-
return translateTestingModule.withTranslations(languageOrTranslations);
|
|
16585
|
-
}
|
|
16586
|
-
get ngModule() {
|
|
16587
|
-
return TranslateTestingModule;
|
|
16588
|
-
}
|
|
16589
|
-
get providers() {
|
|
16590
|
-
const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
|
|
16591
|
-
return [
|
|
16592
|
-
{
|
|
16593
|
-
provide: TranslateService,
|
|
16594
|
-
useValue: translateService,
|
|
16595
|
-
},
|
|
16596
|
-
];
|
|
16597
|
-
}
|
|
16598
|
-
withTranslations(languageOrTranslations, translations) {
|
|
16599
|
-
if (typeof languageOrTranslations === 'string' && translations) {
|
|
16600
|
-
this.addTranslations(languageOrTranslations, translations);
|
|
16601
|
-
this._defaultLanguage = languageOrTranslations;
|
|
16602
|
-
}
|
|
16603
|
-
else if (languageOrTranslations) {
|
|
16604
|
-
Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
|
|
16605
|
-
}
|
|
16606
|
-
return this;
|
|
16607
|
-
}
|
|
16608
|
-
/**
|
|
16609
|
-
* Updates the {TranslationTestingModule} to provide a {TranslateService} that will
|
|
16610
|
-
* use the provided {TranslateCompiler} to translate the test translations.
|
|
16611
|
-
*
|
|
16612
|
-
* @example
|
|
16613
|
-
*
|
|
16614
|
-
* TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
|
|
16615
|
-
* .withCompiler(new TranslateMessageFormatCompiler());
|
|
16616
|
-
*
|
|
16617
|
-
* @param compiler the compiler to use to compile the test translations.
|
|
16618
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16619
|
-
* @memberof TranslateTestingModule
|
|
16620
|
-
*/
|
|
16621
|
-
withCompiler(compiler) {
|
|
16622
|
-
this._compiler = compiler;
|
|
16623
|
-
return this;
|
|
16624
|
-
}
|
|
16625
|
-
/**
|
|
16626
|
-
* Updates the {TranslateTestingModule} to use the provided language as the default language.
|
|
16627
|
-
* By default, the default language will be set to the first language provided.
|
|
16628
|
-
*
|
|
16629
|
-
* @example
|
|
16630
|
-
*
|
|
16631
|
-
* TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
|
|
16632
|
-
* .withTranslations('en', ENGLISH_TRANSLATIONS)
|
|
16633
|
-
* .withDefaultLanguage('en');
|
|
16634
|
-
*
|
|
16635
|
-
* @param language the new default language for translations.
|
|
16636
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16637
|
-
* @memberof TranslateTestingModule
|
|
16638
|
-
*/
|
|
16639
|
-
withDefaultLanguage(language) {
|
|
16640
|
-
this._defaultLanguage = language || this._defaultLanguage;
|
|
16641
|
-
return this;
|
|
16642
|
-
}
|
|
16643
|
-
addTranslations(language, translations) {
|
|
16644
|
-
if (!this._defaultLanguage) {
|
|
16645
|
-
this._defaultLanguage = language;
|
|
16646
|
-
}
|
|
16647
|
-
if (this._translations[language]) {
|
|
16648
|
-
this._translations[language] = {
|
|
16649
|
-
...this._translations[language],
|
|
16650
|
-
...translations,
|
|
16651
|
-
};
|
|
16652
|
-
}
|
|
16653
|
-
else {
|
|
16654
|
-
this._translations[language] = translations;
|
|
16655
|
-
}
|
|
16656
|
-
}
|
|
16657
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16658
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
|
|
16659
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
|
|
16660
|
-
}
|
|
16661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
|
|
16662
|
-
type: NgModule,
|
|
16663
|
-
args: [{
|
|
16664
|
-
imports: [TranslateModule],
|
|
16665
|
-
exports: [TranslateModule],
|
|
16666
|
-
}]
|
|
16667
|
-
}] });
|
|
16668
|
-
|
|
16669
16561
|
var dropFile$6 = "Datei ablegen";
|
|
16670
16562
|
var next$6 = "weiter";
|
|
16671
16563
|
var previous$6 = "zurück";
|
|
@@ -16688,20 +16580,21 @@ var de = {
|
|
|
16688
16580
|
"chart.type.line": "Liniendiagramm",
|
|
16689
16581
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16690
16582
|
"chart.type.pie": "Kreisdiagramm",
|
|
16691
|
-
"dashboard.
|
|
16692
|
-
"dashboard.
|
|
16693
|
-
"dashboard.records.
|
|
16694
|
-
"dashboard.records.
|
|
16695
|
-
"dashboard.records.
|
|
16696
|
-
"dashboard.records.
|
|
16697
|
-
"dashboard.records.
|
|
16698
|
-
"dashboard.records.
|
|
16699
|
-
"dashboard.records.
|
|
16700
|
-
"dashboard.records.
|
|
16701
|
-
"dashboard.records.
|
|
16702
|
-
"dashboard.records.
|
|
16703
|
-
"dashboard.records.
|
|
16704
|
-
"dashboard.
|
|
16583
|
+
"dashboard.createRecord": "",
|
|
16584
|
+
"dashboard.labels.mySpace": "Mein Bereich",
|
|
16585
|
+
"dashboard.records.all": "Katalog",
|
|
16586
|
+
"dashboard.records.myDraft": "Meine Entwürfe",
|
|
16587
|
+
"dashboard.records.myLibrary": "Meine Bibliothek",
|
|
16588
|
+
"dashboard.records.myOrg": "Meine Organisation",
|
|
16589
|
+
"dashboard.records.myRecords": "Meine Datensätze",
|
|
16590
|
+
"dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
|
|
16591
|
+
"dashboard.records.search": "Suche nach \"{searchText}\"",
|
|
16592
|
+
"dashboard.records.userDetail": "Name",
|
|
16593
|
+
"dashboard.records.userEmail": "E-Mail",
|
|
16594
|
+
"dashboard.records.username": "Benutzername",
|
|
16595
|
+
"dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
|
|
16596
|
+
"dashboard.results.listMetadata": "",
|
|
16597
|
+
"dashboard.results.listResources": "",
|
|
16705
16598
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16706
16599
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16707
16600
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16715,7 +16608,7 @@ var de = {
|
|
|
16715
16608
|
"datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
|
|
16716
16609
|
"datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
|
|
16717
16610
|
"datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
|
|
16718
|
-
"datafeeder.form.tags": "Wählen Sie einen oder mehrere
|
|
16611
|
+
"datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
|
|
16719
16612
|
"datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
|
|
16720
16613
|
"datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
|
|
16721
16614
|
"datafeeder.month.april": "April",
|
|
@@ -16730,16 +16623,16 @@ var de = {
|
|
|
16730
16623
|
"datafeeder.month.november": "November",
|
|
16731
16624
|
"datafeeder.month.october": "Oktober",
|
|
16732
16625
|
"datafeeder.month.september": "September",
|
|
16733
|
-
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist",
|
|
16734
|
-
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz zum Veröffentlichen?",
|
|
16626
|
+
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
|
|
16627
|
+
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
|
|
16735
16628
|
"datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
|
|
16736
|
-
"datafeeder.publish.title": "Vielen Dank! Ihr Datensatz wird veröffentlicht",
|
|
16629
|
+
"datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
|
|
16737
16630
|
"datafeeder.publish.upload": "Jetzt hochladen",
|
|
16738
16631
|
"datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
|
|
16739
16632
|
"datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
|
|
16740
16633
|
"datafeeder.publishSuccess.mapViewer": "Kartenviewer",
|
|
16741
16634
|
"datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
|
|
16742
|
-
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! Ihr Datensatz wurde veröffentlicht",
|
|
16635
|
+
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
|
|
16743
16636
|
"datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
|
|
16744
16637
|
"datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
|
|
16745
16638
|
"datafeeder.summarizePage.previous": "Zurück",
|
|
@@ -16747,11 +16640,11 @@ var de = {
|
|
|
16747
16640
|
"datafeeder.summarizePage.title": "Sie sind fast fertig...",
|
|
16748
16641
|
"datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
|
|
16749
16642
|
"datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
|
|
16750
|
-
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen
|
|
16643
|
+
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
|
|
16751
16644
|
"datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
|
|
16752
16645
|
"datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
|
|
16753
|
-
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie:
|
|
16754
|
-
"datafeeder.upload.error.title.analysis": "Fehler
|
|
16646
|
+
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
|
|
16647
|
+
"datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
|
|
16755
16648
|
"datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
|
|
16756
16649
|
"datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
|
|
16757
16650
|
"datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
|
|
@@ -16759,19 +16652,19 @@ var de = {
|
|
|
16759
16652
|
"datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
|
|
16760
16653
|
"datafeeder.upload.illustration.enrichment": "Anreicherung",
|
|
16761
16654
|
"datafeeder.upload.illustration.import": "Import",
|
|
16762
|
-
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten war noch nie
|
|
16655
|
+
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
|
|
16763
16656
|
"datafeeder.upload.illustration.validation": "Validierung",
|
|
16764
|
-
"datafeeder.upload.illustration.verification": "
|
|
16657
|
+
"datafeeder.upload.illustration.verification": "Überprüfung",
|
|
16765
16658
|
"datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
|
|
16766
16659
|
"datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
|
|
16767
16660
|
"datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
|
|
16768
16661
|
"datafeeder.upload.uploadButton": "Hochladen",
|
|
16769
|
-
"datafeeder.validation.encoding": "
|
|
16662
|
+
"datafeeder.validation.encoding": "Codierung",
|
|
16770
16663
|
"datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
|
|
16771
16664
|
"datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
|
|
16772
16665
|
"datafeeder.validation.projection": "Raumbezugssystem:",
|
|
16773
|
-
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem",
|
|
16774
|
-
"datafeeder.validation.sample.title": "Und eine
|
|
16666
|
+
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
|
|
16667
|
+
"datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
|
|
16775
16668
|
"datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
|
|
16776
16669
|
"datafeeder.wizardSummarize.createdAt": "Erstellt am",
|
|
16777
16670
|
"datafeeder.wizardSummarize.scale": "Maßstab",
|
|
@@ -16781,20 +16674,20 @@ var de = {
|
|
|
16781
16674
|
"datahub.header.news": "Startseite",
|
|
16782
16675
|
"datahub.header.organisations": "Organisationen",
|
|
16783
16676
|
"datahub.header.popularRecords": "Die beliebtesten",
|
|
16784
|
-
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten
|
|
16785
|
-
"datahub.news.contact.contactus": "",
|
|
16786
|
-
"datahub.news.contact.html": "",
|
|
16787
|
-
"datahub.news.contact.title": "",
|
|
16677
|
+
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
|
|
16678
|
+
"datahub.news.contact.contactus": "Kontaktieren Sie uns",
|
|
16679
|
+
"datahub.news.contact.html": "<p>Brauchen Sie Daten, die derzeit nicht auf der Plattform vorhanden sind?</p><p>Unsere Teams stehen Ihnen zur Verfügung.</p>",
|
|
16680
|
+
"datahub.news.contact.title": "Ein spezielles Bedürfnis?",
|
|
16788
16681
|
"datahub.news.feed": "Nachrichtenfeed",
|
|
16789
16682
|
"datahub.news.figures": "Indikatoren",
|
|
16790
|
-
"datahub.record.addToFavorites": "",
|
|
16791
|
-
"datahub.search.back": "Zurück
|
|
16683
|
+
"datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
|
|
16684
|
+
"datahub.search.back": "Zurück",
|
|
16792
16685
|
"datahub.search.filter.all": "Alle",
|
|
16793
|
-
"datahub.search.filter.generatedByWfs": "Generiert durch API",
|
|
16686
|
+
"datahub.search.filter.generatedByWfs": "Generiert durch eine API",
|
|
16794
16687
|
"datahub.search.filter.others": "Andere",
|
|
16795
16688
|
"dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
|
|
16796
16689
|
"dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
|
|
16797
|
-
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht
|
|
16690
|
+
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
|
|
16798
16691
|
"dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
|
|
16799
16692
|
"dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
|
|
16800
16693
|
"domain.record.status.completed": "Abgeschlossen",
|
|
@@ -16802,18 +16695,18 @@ var de = {
|
|
|
16802
16695
|
"domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
|
|
16803
16696
|
"domain.record.status.removed": "Entfernt",
|
|
16804
16697
|
"domain.record.status.under_development": "In Erstellung",
|
|
16805
|
-
"domain.record.updateFrequency.asNeeded": "
|
|
16806
|
-
"domain.record.updateFrequency.continual": "
|
|
16698
|
+
"domain.record.updateFrequency.asNeeded": "Nach Bedarf",
|
|
16699
|
+
"domain.record.updateFrequency.continual": "Fortlaufend",
|
|
16807
16700
|
"domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
|
|
16808
|
-
"domain.record.updateFrequency.irregular": "
|
|
16701
|
+
"domain.record.updateFrequency.irregular": "Unregelmäßig",
|
|
16809
16702
|
"domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
|
|
16810
16703
|
"domain.record.updateFrequency.notPlanned": "Nicht geplant",
|
|
16811
|
-
"domain.record.updateFrequency.periodic": "
|
|
16704
|
+
"domain.record.updateFrequency.periodic": "Regelmäßig",
|
|
16812
16705
|
"domain.record.updateFrequency.unknown": "Unbekannt",
|
|
16813
16706
|
"domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
|
|
16814
16707
|
"domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
|
|
16815
16708
|
"downloads.format.unknown": "unbekannt",
|
|
16816
|
-
"downloads.wfs.featuretype.not.found": "
|
|
16709
|
+
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
16817
16710
|
dropFile: dropFile$6,
|
|
16818
16711
|
"externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
|
|
16819
16712
|
"facets.block.title.OrgForResource": "Organisation",
|
|
@@ -16848,14 +16741,18 @@ var de = {
|
|
|
16848
16741
|
"map.add.layer.file": "Aus einer Datei",
|
|
16849
16742
|
"map.add.layer.wfs": "Aus WFS",
|
|
16850
16743
|
"map.add.layer.wms": "Aus WMS",
|
|
16851
|
-
"map.
|
|
16852
|
-
"map.
|
|
16744
|
+
"map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
|
|
16745
|
+
"map.geocoding.placeholder": "",
|
|
16746
|
+
"map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
|
|
16747
|
+
"map.layer.add": "Hinzufügen",
|
|
16748
|
+
"map.layers.available": "Verfügbare Layer",
|
|
16853
16749
|
"map.layers.list": "Ebenen",
|
|
16854
16750
|
"map.loading.data": "Kartendaten werden geladen...",
|
|
16855
|
-
"map.loading.service": "",
|
|
16751
|
+
"map.loading.service": "Dienst wird geladen...",
|
|
16856
16752
|
"map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
|
|
16857
16753
|
"map.select.layer": "Datenquelle",
|
|
16858
|
-
"map.
|
|
16754
|
+
"map.wfs.urlInput.hint": "Geben Sie die WFS URL ein",
|
|
16755
|
+
"map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
|
|
16859
16756
|
"multiselect.filter.placeholder": "Suche",
|
|
16860
16757
|
"nav.back": "Zurück",
|
|
16861
16758
|
next: next$6,
|
|
@@ -16871,58 +16768,61 @@ var de = {
|
|
|
16871
16768
|
"pagination.pageOf": "von",
|
|
16872
16769
|
previous: previous$6,
|
|
16873
16770
|
"record.action.download": "Herunterladen",
|
|
16874
|
-
"record.action.view": "
|
|
16771
|
+
"record.action.view": "Anzeigen",
|
|
16875
16772
|
"record.externalViewer.open": "In externem Kartenviewer öffnen",
|
|
16876
16773
|
"record.metadata.about": "Beschreibung",
|
|
16877
16774
|
"record.metadata.api": "API",
|
|
16878
|
-
"record.metadata.api.form.closeButton": "",
|
|
16879
|
-
"record.metadata.api.form.closeForm": "",
|
|
16880
|
-
"record.metadata.api.form.create": "",
|
|
16881
|
-
"record.metadata.api.form.customUrl": "",
|
|
16882
|
-
"record.metadata.api.form.limit": "",
|
|
16883
|
-
"record.metadata.api.form.limit.all": "",
|
|
16884
|
-
"record.metadata.api.form.offset": "",
|
|
16885
|
-
"record.metadata.api.form.openForm": "",
|
|
16886
|
-
"record.metadata.api.form.reset": "",
|
|
16887
|
-
"record.metadata.api.form.title": "",
|
|
16888
|
-
"record.metadata.api.form.type": "",
|
|
16889
|
-
"record.metadata.author": "",
|
|
16775
|
+
"record.metadata.api.form.closeButton": "Schließen",
|
|
16776
|
+
"record.metadata.api.form.closeForm": "Formular schließen",
|
|
16777
|
+
"record.metadata.api.form.create": "Ihre Anfrage erstellen",
|
|
16778
|
+
"record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
|
|
16779
|
+
"record.metadata.api.form.limit": "Anzahl der Datensätze",
|
|
16780
|
+
"record.metadata.api.form.limit.all": "Alle",
|
|
16781
|
+
"record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
|
|
16782
|
+
"record.metadata.api.form.openForm": "Formular öffnen",
|
|
16783
|
+
"record.metadata.api.form.reset": "Zurücksetzen",
|
|
16784
|
+
"record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
|
|
16785
|
+
"record.metadata.api.form.type": "Ausgabeformat",
|
|
16786
|
+
"record.metadata.author": "Autor",
|
|
16890
16787
|
"record.metadata.catalog": "Katalog",
|
|
16891
16788
|
"record.metadata.contact": "Kontakt",
|
|
16892
|
-
"record.metadata.
|
|
16893
|
-
"record.metadata.details": "Details",
|
|
16789
|
+
"record.metadata.details": "Technische Informationen",
|
|
16894
16790
|
"record.metadata.download": "Downloads",
|
|
16895
|
-
"record.metadata.formats": "",
|
|
16896
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16791
|
+
"record.metadata.formats": "Formate",
|
|
16897
16792
|
"record.metadata.keywords": "Stichworte",
|
|
16898
|
-
"record.metadata.lastUpdate": "",
|
|
16793
|
+
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16899
16794
|
"record.metadata.links": "Links",
|
|
16900
|
-
"record.metadata.noUsage": "Für diesen Datensatz sind keine
|
|
16795
|
+
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16901
16796
|
"record.metadata.origin": "Über die Daten",
|
|
16797
|
+
"record.metadata.otherConstraints": "",
|
|
16798
|
+
"record.metadata.owner": "",
|
|
16902
16799
|
"record.metadata.preview": "Vorschau",
|
|
16903
16800
|
"record.metadata.publications": "Veröffentlichungen",
|
|
16904
|
-
"record.metadata.quality": "",
|
|
16905
|
-
"record.metadata.quality.contact.failed": "",
|
|
16906
|
-
"record.metadata.quality.contact.success": "",
|
|
16907
|
-
"record.metadata.quality.description.failed": "",
|
|
16908
|
-
"record.metadata.quality.description.success": "",
|
|
16909
|
-
"record.metadata.quality.details": "",
|
|
16910
|
-
"record.metadata.quality.keywords.failed": "",
|
|
16911
|
-
"record.metadata.quality.keywords.success": "",
|
|
16912
|
-
"record.metadata.quality.legalConstraints.failed": "",
|
|
16913
|
-
"record.metadata.quality.legalConstraints.success": "",
|
|
16914
|
-
"record.metadata.quality.organisation.failed": "",
|
|
16915
|
-
"record.metadata.quality.organisation.success": "",
|
|
16916
|
-
"record.metadata.quality.title.failed": "",
|
|
16917
|
-
"record.metadata.quality.title.success": "",
|
|
16918
|
-
"record.metadata.quality.topic.failed": "",
|
|
16919
|
-
"record.metadata.quality.topic.success": "",
|
|
16920
|
-
"record.metadata.quality.updateFrequency.failed": "",
|
|
16921
|
-
"record.metadata.quality.updateFrequency.success": "",
|
|
16801
|
+
"record.metadata.quality": "Metadatenqualität",
|
|
16802
|
+
"record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
|
|
16803
|
+
"record.metadata.quality.contact.success": "Kontakt angegeben",
|
|
16804
|
+
"record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
|
|
16805
|
+
"record.metadata.quality.description.success": "Beschreibung angegeben",
|
|
16806
|
+
"record.metadata.quality.details": "Details",
|
|
16807
|
+
"record.metadata.quality.keywords.failed": "Schlagwörter nicht angegeben",
|
|
16808
|
+
"record.metadata.quality.keywords.success": "Schlagwörter angegeben",
|
|
16809
|
+
"record.metadata.quality.legalConstraints.failed": "Rechtliche Beschränkungen nicht angegeben",
|
|
16810
|
+
"record.metadata.quality.legalConstraints.success": "Rechtliche Beschränkungen angegeben",
|
|
16811
|
+
"record.metadata.quality.organisation.failed": "Organisation nicht angegeben",
|
|
16812
|
+
"record.metadata.quality.organisation.success": "Organisation angegeben",
|
|
16813
|
+
"record.metadata.quality.title.failed": "Titel nicht angegeben",
|
|
16814
|
+
"record.metadata.quality.title.success": "Titel angegeben",
|
|
16815
|
+
"record.metadata.quality.topic.failed": "Thema nicht angegeben",
|
|
16816
|
+
"record.metadata.quality.topic.success": "Thema angegeben",
|
|
16817
|
+
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
16818
|
+
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
16922
16819
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16923
|
-
"record.metadata.sheet": "Weitere Informationen
|
|
16820
|
+
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16821
|
+
"record.metadata.status": "",
|
|
16822
|
+
"record.metadata.themes": "Kategorien",
|
|
16924
16823
|
"record.metadata.title": "Titel",
|
|
16925
|
-
"record.metadata.type": "",
|
|
16824
|
+
"record.metadata.type": "Geographischer Datensatz",
|
|
16825
|
+
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16926
16826
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
16927
16827
|
"record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
|
|
16928
16828
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
@@ -16934,23 +16834,23 @@ var de = {
|
|
|
16934
16834
|
"record.was.created.time": "erstellte diesen Datensatz {time}",
|
|
16935
16835
|
records: records$6,
|
|
16936
16836
|
"results.layout.selectOne": "Layout auswählen",
|
|
16937
|
-
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{
|
|
16938
|
-
"results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie
|
|
16837
|
+
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
|
|
16838
|
+
"results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie es mit anderen Worten</li><li>Beschränken Sie die Suchwörter</li></ul>",
|
|
16939
16839
|
"results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
|
|
16940
|
-
"results.records.hits.selected": "",
|
|
16840
|
+
"results.records.hits.selected": "{ amount } ausgewählt",
|
|
16941
16841
|
"results.showMore": "Mehr Ergebnisse anzeigen...",
|
|
16942
|
-
"results.sortBy.dateStamp": "
|
|
16842
|
+
"results.sortBy.dateStamp": "Neueste",
|
|
16943
16843
|
"results.sortBy.popularity": "Beliebtheit",
|
|
16944
|
-
"results.sortBy.qualityScore": "",
|
|
16844
|
+
"results.sortBy.qualityScore": "Qualitätsbewertung",
|
|
16945
16845
|
"results.sortBy.relevancy": "Relevanz",
|
|
16946
16846
|
"search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
|
|
16947
16847
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
16948
|
-
"search.error.receivedError": "Ein Fehler
|
|
16848
|
+
"search.error.receivedError": "Ein Fehler ist aufgetreten",
|
|
16949
16849
|
"search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
|
|
16950
|
-
"search.field.any.placeholder": "Suche
|
|
16850
|
+
"search.field.any.placeholder": "Suche Datensätze ...",
|
|
16951
16851
|
"search.field.sortBy": "Sortieren nach:",
|
|
16952
16852
|
"search.filters.clear": "Zurücksetzen",
|
|
16953
|
-
"search.filters.contact": "
|
|
16853
|
+
"search.filters.contact": "Kontakte",
|
|
16954
16854
|
"search.filters.format": "Formate",
|
|
16955
16855
|
"search.filters.inspireKeyword": "INSPIRE-Schlüsselwort",
|
|
16956
16856
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
@@ -16968,13 +16868,13 @@ var de = {
|
|
|
16968
16868
|
"search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
16969
16869
|
"search.filters.maximize": "Erweitern",
|
|
16970
16870
|
"search.filters.minimize": "Minimieren",
|
|
16971
|
-
"search.filters.myRecords": "",
|
|
16972
|
-
"search.filters.myRecordsHelp": "",
|
|
16973
|
-
"search.filters.otherRecords": "",
|
|
16871
|
+
"search.filters.myRecords": "Nur meine Datensätze anzeigen",
|
|
16872
|
+
"search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
|
|
16873
|
+
"search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
|
|
16974
16874
|
"search.filters.publicationYear": "Veröffentlichungsjahr",
|
|
16975
16875
|
"search.filters.publisher": "Organisationen",
|
|
16976
|
-
"search.filters.representationType": "",
|
|
16977
|
-
"search.filters.resourceType": "",
|
|
16876
|
+
"search.filters.representationType": "Repräsentationstyp",
|
|
16877
|
+
"search.filters.resourceType": "Ressourcentyp",
|
|
16978
16878
|
"search.filters.standard": "Standard",
|
|
16979
16879
|
"search.filters.title": "Ergebnisse filtern",
|
|
16980
16880
|
"search.filters.topic": "Thema",
|
|
@@ -16986,6 +16886,7 @@ var de = {
|
|
|
16986
16886
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16987
16887
|
"table.select.data": "Datenquelle",
|
|
16988
16888
|
"tooltip.html.copy": "HTML kopieren",
|
|
16889
|
+
"tooltip.id.copy": "",
|
|
16989
16890
|
"tooltip.url.copy": "URL kopieren",
|
|
16990
16891
|
"tooltip.url.open": "URL öffnen",
|
|
16991
16892
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17019,20 +16920,21 @@ var en = {
|
|
|
17019
16920
|
"chart.type.line": "line chart",
|
|
17020
16921
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17021
16922
|
"chart.type.pie": "pie chart",
|
|
16923
|
+
"dashboard.createRecord": "New record",
|
|
17022
16924
|
"dashboard.labels.mySpace": "My space",
|
|
17023
|
-
"dashboard.records.all": "
|
|
16925
|
+
"dashboard.records.all": "Metadata records",
|
|
17024
16926
|
"dashboard.records.myDraft": "My drafts",
|
|
17025
16927
|
"dashboard.records.myLibrary": "My library",
|
|
17026
16928
|
"dashboard.records.myOrg": "Organization",
|
|
17027
16929
|
"dashboard.records.myRecords": "My Records",
|
|
17028
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17029
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17030
16930
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17031
16931
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17032
16932
|
"dashboard.records.userDetail": "Name",
|
|
17033
16933
|
"dashboard.records.userEmail": "Email",
|
|
17034
16934
|
"dashboard.records.username": "Username",
|
|
17035
16935
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
16936
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
16937
|
+
"dashboard.results.listResources": "Show resources",
|
|
17036
16938
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17037
16939
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17038
16940
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17179,6 +17081,9 @@ var en = {
|
|
|
17179
17081
|
"map.add.layer.file": "From a file",
|
|
17180
17082
|
"map.add.layer.wfs": "From WFS",
|
|
17181
17083
|
"map.add.layer.wms": "From WMS",
|
|
17084
|
+
"map.addFromFile.placeholder": "Click or drop a file here",
|
|
17085
|
+
"map.geocoding.placeholder": "Search for a place",
|
|
17086
|
+
"map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
|
|
17182
17087
|
"map.layer.add": "Add",
|
|
17183
17088
|
"map.layers.available": "Available Layers",
|
|
17184
17089
|
"map.layers.list": "Layers",
|
|
@@ -17186,6 +17091,7 @@ var en = {
|
|
|
17186
17091
|
"map.loading.service": "Loading service...",
|
|
17187
17092
|
"map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
|
|
17188
17093
|
"map.select.layer": "Data source",
|
|
17094
|
+
"map.wfs.urlInput.hint": "Enter WFS service URL",
|
|
17189
17095
|
"map.wms.urlInput.hint": "Enter WMS service URL",
|
|
17190
17096
|
"multiselect.filter.placeholder": "Search",
|
|
17191
17097
|
"nav.back": "Back",
|
|
@@ -17220,44 +17126,47 @@ var en = {
|
|
|
17220
17126
|
"record.metadata.author": "Author",
|
|
17221
17127
|
"record.metadata.catalog": "Catalog",
|
|
17222
17128
|
"record.metadata.contact": "Contact",
|
|
17223
|
-
"record.metadata.
|
|
17224
|
-
"record.metadata.details": "Details",
|
|
17129
|
+
"record.metadata.details": "Technical information",
|
|
17225
17130
|
"record.metadata.download": "Downloads",
|
|
17226
17131
|
"record.metadata.formats": "Formats",
|
|
17227
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17228
17132
|
"record.metadata.keywords": "Keywords",
|
|
17229
17133
|
"record.metadata.lastUpdate": "Last updated on",
|
|
17230
17134
|
"record.metadata.links": "Links",
|
|
17231
17135
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17232
17136
|
"record.metadata.origin": "About the data",
|
|
17137
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17138
|
+
"record.metadata.owner": "Catalog of origin",
|
|
17233
17139
|
"record.metadata.preview": "Preview",
|
|
17234
17140
|
"record.metadata.publications": "publications",
|
|
17235
17141
|
"record.metadata.quality": "Metadata Quality",
|
|
17236
|
-
"record.metadata.quality.contact.failed": "Contact is not
|
|
17237
|
-
"record.metadata.quality.contact.success": "Contact is
|
|
17238
|
-
"record.metadata.quality.description.failed": "Description is not
|
|
17239
|
-
"record.metadata.quality.description.success": "Description is
|
|
17142
|
+
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
17143
|
+
"record.metadata.quality.contact.success": "Contact is specified",
|
|
17144
|
+
"record.metadata.quality.description.failed": "Description is not specified",
|
|
17145
|
+
"record.metadata.quality.description.success": "Description is specified",
|
|
17240
17146
|
"record.metadata.quality.details": "Details",
|
|
17241
|
-
"record.metadata.quality.keywords.failed": "Keywords are not
|
|
17242
|
-
"record.metadata.quality.keywords.success": "Keywords are
|
|
17243
|
-
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not
|
|
17244
|
-
"record.metadata.quality.legalConstraints.success": "Legal constraints are
|
|
17245
|
-
"record.metadata.quality.organisation.failed": "Organisation is not
|
|
17246
|
-
"record.metadata.quality.organisation.success": "Organisation is
|
|
17247
|
-
"record.metadata.quality.title.failed": "Title is not
|
|
17248
|
-
"record.metadata.quality.title.success": "Title is
|
|
17249
|
-
"record.metadata.quality.topic.failed": "Topic is not
|
|
17250
|
-
"record.metadata.quality.topic.success": "Topic is
|
|
17251
|
-
"record.metadata.quality.updateFrequency.failed": "Update frequency is not
|
|
17252
|
-
"record.metadata.quality.updateFrequency.success": "Update frequency is
|
|
17147
|
+
"record.metadata.quality.keywords.failed": "Keywords are not specified",
|
|
17148
|
+
"record.metadata.quality.keywords.success": "Keywords are specified",
|
|
17149
|
+
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
|
|
17150
|
+
"record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
|
|
17151
|
+
"record.metadata.quality.organisation.failed": "Organisation is not specified",
|
|
17152
|
+
"record.metadata.quality.organisation.success": "Organisation is specified",
|
|
17153
|
+
"record.metadata.quality.title.failed": "Title is not specified",
|
|
17154
|
+
"record.metadata.quality.title.success": "Title is specified",
|
|
17155
|
+
"record.metadata.quality.topic.failed": "Topic is not specified",
|
|
17156
|
+
"record.metadata.quality.topic.success": "Topic is specified",
|
|
17157
|
+
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
17158
|
+
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17253
17159
|
"record.metadata.related": "Related records",
|
|
17254
|
-
"record.metadata.sheet": "
|
|
17160
|
+
"record.metadata.sheet": "Original metadata",
|
|
17161
|
+
"record.metadata.status": "Status",
|
|
17162
|
+
"record.metadata.themes": "Categories",
|
|
17255
17163
|
"record.metadata.title": "Title",
|
|
17256
17164
|
"record.metadata.type": "Geographical dataset",
|
|
17165
|
+
"record.metadata.uniqueId": "Unique Identifier",
|
|
17257
17166
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17258
17167
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17259
17168
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17260
|
-
"record.metadata.usage": "
|
|
17169
|
+
"record.metadata.usage": "License and Conditions",
|
|
17261
17170
|
"record.more.details": "Read more",
|
|
17262
17171
|
"record.tab.chart": "Chart",
|
|
17263
17172
|
"record.tab.data": "Table",
|
|
@@ -17317,6 +17226,7 @@ var en = {
|
|
|
17317
17226
|
"table.object.count": "objects in this dataset",
|
|
17318
17227
|
"table.select.data": "Data source",
|
|
17319
17228
|
"tooltip.html.copy": "Copy HTML",
|
|
17229
|
+
"tooltip.id.copy": "Copy unique identifier",
|
|
17320
17230
|
"tooltip.url.copy": "Copy URL",
|
|
17321
17231
|
"tooltip.url.open": "Open URL",
|
|
17322
17232
|
"ui.readLess": "Read less",
|
|
@@ -17350,20 +17260,21 @@ var es = {
|
|
|
17350
17260
|
"chart.type.line": "gráfico de líneas",
|
|
17351
17261
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17352
17262
|
"chart.type.pie": "gráfico circular",
|
|
17263
|
+
"dashboard.createRecord": "",
|
|
17353
17264
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17354
17265
|
"dashboard.records.all": "Catálogo",
|
|
17355
17266
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17356
17267
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17357
17268
|
"dashboard.records.myOrg": "Organización",
|
|
17358
17269
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17359
|
-
"dashboard.records.noRecord": "",
|
|
17360
|
-
"dashboard.records.noUser": "",
|
|
17361
17270
|
"dashboard.records.publishedRecords": "",
|
|
17362
17271
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17363
17272
|
"dashboard.records.userDetail": "",
|
|
17364
17273
|
"dashboard.records.userEmail": "",
|
|
17365
17274
|
"dashboard.records.username": "",
|
|
17366
17275
|
"dashboard.records.users": "",
|
|
17276
|
+
"dashboard.results.listMetadata": "",
|
|
17277
|
+
"dashboard.results.listResources": "",
|
|
17367
17278
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17368
17279
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17369
17280
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17510,6 +17421,9 @@ var es = {
|
|
|
17510
17421
|
"map.add.layer.file": "",
|
|
17511
17422
|
"map.add.layer.wfs": "",
|
|
17512
17423
|
"map.add.layer.wms": "",
|
|
17424
|
+
"map.addFromFile.placeholder": "",
|
|
17425
|
+
"map.geocoding.placeholder": "",
|
|
17426
|
+
"map.help.addFromFile": "",
|
|
17513
17427
|
"map.layer.add": "",
|
|
17514
17428
|
"map.layers.available": "",
|
|
17515
17429
|
"map.layers.list": "",
|
|
@@ -17517,6 +17431,7 @@ var es = {
|
|
|
17517
17431
|
"map.loading.service": "",
|
|
17518
17432
|
"map.navigation.message": "",
|
|
17519
17433
|
"map.select.layer": "",
|
|
17434
|
+
"map.wfs.urlInput.hint": "",
|
|
17520
17435
|
"map.wms.urlInput.hint": "",
|
|
17521
17436
|
"multiselect.filter.placeholder": "",
|
|
17522
17437
|
"nav.back": "",
|
|
@@ -17551,16 +17466,16 @@ var es = {
|
|
|
17551
17466
|
"record.metadata.author": "",
|
|
17552
17467
|
"record.metadata.catalog": "",
|
|
17553
17468
|
"record.metadata.contact": "",
|
|
17554
|
-
"record.metadata.createdOn": "",
|
|
17555
17469
|
"record.metadata.details": "",
|
|
17556
17470
|
"record.metadata.download": "",
|
|
17557
17471
|
"record.metadata.formats": "",
|
|
17558
|
-
"record.metadata.isOpenData": "",
|
|
17559
17472
|
"record.metadata.keywords": "",
|
|
17560
17473
|
"record.metadata.lastUpdate": "",
|
|
17561
17474
|
"record.metadata.links": "",
|
|
17562
17475
|
"record.metadata.noUsage": "",
|
|
17563
17476
|
"record.metadata.origin": "",
|
|
17477
|
+
"record.metadata.otherConstraints": "",
|
|
17478
|
+
"record.metadata.owner": "",
|
|
17564
17479
|
"record.metadata.preview": "",
|
|
17565
17480
|
"record.metadata.publications": "",
|
|
17566
17481
|
"record.metadata.quality": "",
|
|
@@ -17583,8 +17498,11 @@ var es = {
|
|
|
17583
17498
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17584
17499
|
"record.metadata.related": "",
|
|
17585
17500
|
"record.metadata.sheet": "",
|
|
17501
|
+
"record.metadata.status": "",
|
|
17502
|
+
"record.metadata.themes": "",
|
|
17586
17503
|
"record.metadata.title": "",
|
|
17587
17504
|
"record.metadata.type": "",
|
|
17505
|
+
"record.metadata.uniqueId": "",
|
|
17588
17506
|
"record.metadata.updateFrequency": "",
|
|
17589
17507
|
"record.metadata.updateStatus": "",
|
|
17590
17508
|
"record.metadata.updatedOn": "",
|
|
@@ -17648,6 +17566,7 @@ var es = {
|
|
|
17648
17566
|
"table.object.count": "",
|
|
17649
17567
|
"table.select.data": "",
|
|
17650
17568
|
"tooltip.html.copy": "",
|
|
17569
|
+
"tooltip.id.copy": "",
|
|
17651
17570
|
"tooltip.url.copy": "",
|
|
17652
17571
|
"tooltip.url.open": "",
|
|
17653
17572
|
"ui.readLess": "",
|
|
@@ -17681,20 +17600,21 @@ var fr = {
|
|
|
17681
17600
|
"chart.type.line": "ligne",
|
|
17682
17601
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17683
17602
|
"chart.type.pie": "camembert",
|
|
17603
|
+
"dashboard.createRecord": "",
|
|
17684
17604
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17685
17605
|
"dashboard.records.all": "Catalogue",
|
|
17686
17606
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17687
17607
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17688
17608
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17689
17609
|
"dashboard.records.myRecords": "Mes fiches publiées",
|
|
17690
|
-
"dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
|
|
17691
|
-
"dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
|
|
17692
17610
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17693
17611
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17694
17612
|
"dashboard.records.userDetail": "Nom",
|
|
17695
17613
|
"dashboard.records.userEmail": "Email",
|
|
17696
17614
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17697
17615
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17616
|
+
"dashboard.results.listMetadata": "",
|
|
17617
|
+
"dashboard.results.listResources": "",
|
|
17698
17618
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17699
17619
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17700
17620
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17776,7 +17696,7 @@ var fr = {
|
|
|
17776
17696
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17777
17697
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17778
17698
|
"datahub.news.contact.contactus": "Contactez-nous",
|
|
17779
|
-
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont
|
|
17699
|
+
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont là pour vous répondre.</p>",
|
|
17780
17700
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17781
17701
|
"datahub.news.feed": "Fil d'activité",
|
|
17782
17702
|
"datahub.news.figures": "Quelques chiffres",
|
|
@@ -17841,6 +17761,9 @@ var fr = {
|
|
|
17841
17761
|
"map.add.layer.file": "",
|
|
17842
17762
|
"map.add.layer.wfs": "",
|
|
17843
17763
|
"map.add.layer.wms": "",
|
|
17764
|
+
"map.addFromFile.placeholder": "",
|
|
17765
|
+
"map.geocoding.placeholder": "",
|
|
17766
|
+
"map.help.addFromFile": "",
|
|
17844
17767
|
"map.layer.add": "",
|
|
17845
17768
|
"map.layers.available": "",
|
|
17846
17769
|
"map.layers.list": "",
|
|
@@ -17848,6 +17771,7 @@ var fr = {
|
|
|
17848
17771
|
"map.loading.service": "",
|
|
17849
17772
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17850
17773
|
"map.select.layer": "Source de données",
|
|
17774
|
+
"map.wfs.urlInput.hint": "",
|
|
17851
17775
|
"map.wms.urlInput.hint": "",
|
|
17852
17776
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17853
17777
|
"nav.back": "Retour",
|
|
@@ -17882,16 +17806,16 @@ var fr = {
|
|
|
17882
17806
|
"record.metadata.author": "Auteur",
|
|
17883
17807
|
"record.metadata.catalog": "Catalogue",
|
|
17884
17808
|
"record.metadata.contact": "Contact",
|
|
17885
|
-
"record.metadata.
|
|
17886
|
-
"record.metadata.details": "Détails",
|
|
17809
|
+
"record.metadata.details": "Informations techniques",
|
|
17887
17810
|
"record.metadata.download": "Téléchargements",
|
|
17888
17811
|
"record.metadata.formats": "Formats",
|
|
17889
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17890
17812
|
"record.metadata.keywords": "Mots clés",
|
|
17891
17813
|
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17892
17814
|
"record.metadata.links": "Liens",
|
|
17893
17815
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17894
17816
|
"record.metadata.origin": "À propos des données",
|
|
17817
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17818
|
+
"record.metadata.owner": "Catalogue d'origine",
|
|
17895
17819
|
"record.metadata.preview": "Aperçu",
|
|
17896
17820
|
"record.metadata.publications": "données",
|
|
17897
17821
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
@@ -17913,13 +17837,16 @@ var fr = {
|
|
|
17913
17837
|
"record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
|
|
17914
17838
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17915
17839
|
"record.metadata.related": "Voir aussi",
|
|
17916
|
-
"record.metadata.sheet": "
|
|
17840
|
+
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17841
|
+
"record.metadata.status": "",
|
|
17842
|
+
"record.metadata.themes": "Catégories",
|
|
17917
17843
|
"record.metadata.title": "Titre",
|
|
17918
17844
|
"record.metadata.type": "Donnée géographique",
|
|
17845
|
+
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17919
17846
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17920
17847
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17921
17848
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17922
|
-
"record.metadata.usage": "
|
|
17849
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17923
17850
|
"record.more.details": "Détails",
|
|
17924
17851
|
"record.tab.chart": "Graphique",
|
|
17925
17852
|
"record.tab.data": "Tableau",
|
|
@@ -17979,6 +17906,7 @@ var fr = {
|
|
|
17979
17906
|
"table.object.count": "enregistrements dans ces données",
|
|
17980
17907
|
"table.select.data": "Source de données",
|
|
17981
17908
|
"tooltip.html.copy": "Copier le HTML",
|
|
17909
|
+
"tooltip.id.copy": "Copier l'identifiant unique",
|
|
17982
17910
|
"tooltip.url.copy": "Copier l'URL",
|
|
17983
17911
|
"tooltip.url.open": "Ouvrir l'URL",
|
|
17984
17912
|
"ui.readLess": "Réduire",
|
|
@@ -18012,20 +17940,21 @@ var it = {
|
|
|
18012
17940
|
"chart.type.line": "grafico a linee",
|
|
18013
17941
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
18014
17942
|
"chart.type.pie": "grafico a torta",
|
|
17943
|
+
"dashboard.createRecord": "",
|
|
18015
17944
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
18016
17945
|
"dashboard.records.all": "Catalogo",
|
|
18017
17946
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
18018
17947
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
18019
17948
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
18020
17949
|
"dashboard.records.myRecords": "I miei dati",
|
|
18021
|
-
"dashboard.records.noRecord": "Nessun dati per questa organizzazione",
|
|
18022
|
-
"dashboard.records.noUser": "Nessun utente per questa organizzazione",
|
|
18023
17950
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
18024
17951
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
18025
17952
|
"dashboard.records.userDetail": "Nome",
|
|
18026
17953
|
"dashboard.records.userEmail": "Email",
|
|
18027
17954
|
"dashboard.records.username": "Nome utente",
|
|
18028
17955
|
"dashboard.records.users": "utenti",
|
|
17956
|
+
"dashboard.results.listMetadata": "",
|
|
17957
|
+
"dashboard.results.listResources": "",
|
|
18029
17958
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18030
17959
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18031
17960
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18172,6 +18101,9 @@ var it = {
|
|
|
18172
18101
|
"map.add.layer.file": "Da un file",
|
|
18173
18102
|
"map.add.layer.wfs": "Da un WFS",
|
|
18174
18103
|
"map.add.layer.wms": "Da un WMS",
|
|
18104
|
+
"map.addFromFile.placeholder": "",
|
|
18105
|
+
"map.geocoding.placeholder": "",
|
|
18106
|
+
"map.help.addFromFile": "",
|
|
18175
18107
|
"map.layer.add": "",
|
|
18176
18108
|
"map.layers.available": "",
|
|
18177
18109
|
"map.layers.list": "Layers",
|
|
@@ -18179,6 +18111,7 @@ var it = {
|
|
|
18179
18111
|
"map.loading.service": "",
|
|
18180
18112
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18181
18113
|
"map.select.layer": "Sorgente dati",
|
|
18114
|
+
"map.wfs.urlInput.hint": "",
|
|
18182
18115
|
"map.wms.urlInput.hint": "",
|
|
18183
18116
|
"multiselect.filter.placeholder": "Cerca",
|
|
18184
18117
|
"nav.back": "Indietro",
|
|
@@ -18213,16 +18146,16 @@ var it = {
|
|
|
18213
18146
|
"record.metadata.author": "Autore",
|
|
18214
18147
|
"record.metadata.catalog": "Catalogo",
|
|
18215
18148
|
"record.metadata.contact": "Contatto",
|
|
18216
|
-
"record.metadata.
|
|
18217
|
-
"record.metadata.details": "Dettagli",
|
|
18149
|
+
"record.metadata.details": "Informazioni tecniche",
|
|
18218
18150
|
"record.metadata.download": "Download",
|
|
18219
18151
|
"record.metadata.formats": "Formati",
|
|
18220
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18221
18152
|
"record.metadata.keywords": "Parole chiave",
|
|
18222
18153
|
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18223
18154
|
"record.metadata.links": "Collegamenti",
|
|
18224
18155
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18225
18156
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18157
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18158
|
+
"record.metadata.owner": "Catalogo originale",
|
|
18226
18159
|
"record.metadata.preview": "Anteprima",
|
|
18227
18160
|
"record.metadata.publications": "pubblicazioni",
|
|
18228
18161
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -18244,13 +18177,16 @@ var it = {
|
|
|
18244
18177
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
18245
18178
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18246
18179
|
"record.metadata.related": "Vedi anche",
|
|
18247
|
-
"record.metadata.sheet": "
|
|
18180
|
+
"record.metadata.sheet": "Origine del metadata",
|
|
18181
|
+
"record.metadata.status": "",
|
|
18182
|
+
"record.metadata.themes": "Categorie",
|
|
18248
18183
|
"record.metadata.title": "Titolo",
|
|
18249
18184
|
"record.metadata.type": "Dati geografici",
|
|
18185
|
+
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18250
18186
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18251
18187
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18252
18188
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18253
|
-
"record.metadata.usage": "
|
|
18189
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18254
18190
|
"record.more.details": "Dettagli",
|
|
18255
18191
|
"record.tab.chart": "Grafico",
|
|
18256
18192
|
"record.tab.data": "Tabella",
|
|
@@ -18310,6 +18246,7 @@ var it = {
|
|
|
18310
18246
|
"table.object.count": "record in questi dati",
|
|
18311
18247
|
"table.select.data": "Sorgente dati",
|
|
18312
18248
|
"tooltip.html.copy": "Copiare il HTML",
|
|
18249
|
+
"tooltip.id.copy": "Copiare l'identificatore unico",
|
|
18313
18250
|
"tooltip.url.copy": "Copiare l'URL",
|
|
18314
18251
|
"tooltip.url.open": "Aprire l'URL",
|
|
18315
18252
|
"ui.readLess": "Ridurre",
|
|
@@ -18343,20 +18280,21 @@ var nl = {
|
|
|
18343
18280
|
"chart.type.line": "lijndiagram",
|
|
18344
18281
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18345
18282
|
"chart.type.pie": "cirkeldiagram",
|
|
18283
|
+
"dashboard.createRecord": "",
|
|
18346
18284
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18347
18285
|
"dashboard.records.all": "Catalogus",
|
|
18348
18286
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18349
18287
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18350
18288
|
"dashboard.records.myOrg": "Organisatie",
|
|
18351
18289
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18352
|
-
"dashboard.records.noRecord": "",
|
|
18353
|
-
"dashboard.records.noUser": "",
|
|
18354
18290
|
"dashboard.records.publishedRecords": "",
|
|
18355
18291
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18356
18292
|
"dashboard.records.userDetail": "",
|
|
18357
18293
|
"dashboard.records.userEmail": "",
|
|
18358
18294
|
"dashboard.records.username": "",
|
|
18359
18295
|
"dashboard.records.users": "",
|
|
18296
|
+
"dashboard.results.listMetadata": "",
|
|
18297
|
+
"dashboard.results.listResources": "",
|
|
18360
18298
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18361
18299
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18362
18300
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18503,6 +18441,9 @@ var nl = {
|
|
|
18503
18441
|
"map.add.layer.file": "",
|
|
18504
18442
|
"map.add.layer.wfs": "",
|
|
18505
18443
|
"map.add.layer.wms": "",
|
|
18444
|
+
"map.addFromFile.placeholder": "",
|
|
18445
|
+
"map.geocoding.placeholder": "",
|
|
18446
|
+
"map.help.addFromFile": "",
|
|
18506
18447
|
"map.layer.add": "",
|
|
18507
18448
|
"map.layers.available": "",
|
|
18508
18449
|
"map.layers.list": "",
|
|
@@ -18510,6 +18451,7 @@ var nl = {
|
|
|
18510
18451
|
"map.loading.service": "",
|
|
18511
18452
|
"map.navigation.message": "",
|
|
18512
18453
|
"map.select.layer": "",
|
|
18454
|
+
"map.wfs.urlInput.hint": "",
|
|
18513
18455
|
"map.wms.urlInput.hint": "",
|
|
18514
18456
|
"multiselect.filter.placeholder": "",
|
|
18515
18457
|
"nav.back": "",
|
|
@@ -18544,16 +18486,16 @@ var nl = {
|
|
|
18544
18486
|
"record.metadata.author": "",
|
|
18545
18487
|
"record.metadata.catalog": "",
|
|
18546
18488
|
"record.metadata.contact": "",
|
|
18547
|
-
"record.metadata.createdOn": "",
|
|
18548
18489
|
"record.metadata.details": "",
|
|
18549
18490
|
"record.metadata.download": "",
|
|
18550
18491
|
"record.metadata.formats": "",
|
|
18551
|
-
"record.metadata.isOpenData": "",
|
|
18552
18492
|
"record.metadata.keywords": "",
|
|
18553
18493
|
"record.metadata.lastUpdate": "",
|
|
18554
18494
|
"record.metadata.links": "",
|
|
18555
18495
|
"record.metadata.noUsage": "",
|
|
18556
18496
|
"record.metadata.origin": "",
|
|
18497
|
+
"record.metadata.otherConstraints": "",
|
|
18498
|
+
"record.metadata.owner": "",
|
|
18557
18499
|
"record.metadata.preview": "",
|
|
18558
18500
|
"record.metadata.publications": "",
|
|
18559
18501
|
"record.metadata.quality": "",
|
|
@@ -18576,8 +18518,11 @@ var nl = {
|
|
|
18576
18518
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18577
18519
|
"record.metadata.related": "",
|
|
18578
18520
|
"record.metadata.sheet": "",
|
|
18521
|
+
"record.metadata.status": "",
|
|
18522
|
+
"record.metadata.themes": "",
|
|
18579
18523
|
"record.metadata.title": "",
|
|
18580
18524
|
"record.metadata.type": "",
|
|
18525
|
+
"record.metadata.uniqueId": "",
|
|
18581
18526
|
"record.metadata.updateFrequency": "",
|
|
18582
18527
|
"record.metadata.updateStatus": "",
|
|
18583
18528
|
"record.metadata.updatedOn": "",
|
|
@@ -18641,6 +18586,7 @@ var nl = {
|
|
|
18641
18586
|
"table.object.count": "",
|
|
18642
18587
|
"table.select.data": "",
|
|
18643
18588
|
"tooltip.html.copy": "",
|
|
18589
|
+
"tooltip.id.copy": "",
|
|
18644
18590
|
"tooltip.url.copy": "",
|
|
18645
18591
|
"tooltip.url.open": "",
|
|
18646
18592
|
"ui.readLess": "",
|
|
@@ -18674,20 +18620,21 @@ var pt = {
|
|
|
18674
18620
|
"chart.type.line": "gráfico de linha",
|
|
18675
18621
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18676
18622
|
"chart.type.pie": "gráfico de pizza",
|
|
18623
|
+
"dashboard.createRecord": "",
|
|
18677
18624
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18678
18625
|
"dashboard.records.all": "Catálogo",
|
|
18679
18626
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18680
18627
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18681
18628
|
"dashboard.records.myOrg": "Organização",
|
|
18682
18629
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18683
|
-
"dashboard.records.noRecord": "",
|
|
18684
|
-
"dashboard.records.noUser": "",
|
|
18685
18630
|
"dashboard.records.publishedRecords": "",
|
|
18686
18631
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18687
18632
|
"dashboard.records.userDetail": "",
|
|
18688
18633
|
"dashboard.records.userEmail": "",
|
|
18689
18634
|
"dashboard.records.username": "",
|
|
18690
18635
|
"dashboard.records.users": "",
|
|
18636
|
+
"dashboard.results.listMetadata": "",
|
|
18637
|
+
"dashboard.results.listResources": "",
|
|
18691
18638
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18692
18639
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18693
18640
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18834,6 +18781,9 @@ var pt = {
|
|
|
18834
18781
|
"map.add.layer.file": "",
|
|
18835
18782
|
"map.add.layer.wfs": "",
|
|
18836
18783
|
"map.add.layer.wms": "",
|
|
18784
|
+
"map.addFromFile.placeholder": "",
|
|
18785
|
+
"map.geocoding.placeholder": "",
|
|
18786
|
+
"map.help.addFromFile": "",
|
|
18837
18787
|
"map.layer.add": "",
|
|
18838
18788
|
"map.layers.available": "",
|
|
18839
18789
|
"map.layers.list": "",
|
|
@@ -18841,6 +18791,7 @@ var pt = {
|
|
|
18841
18791
|
"map.loading.service": "",
|
|
18842
18792
|
"map.navigation.message": "",
|
|
18843
18793
|
"map.select.layer": "",
|
|
18794
|
+
"map.wfs.urlInput.hint": "",
|
|
18844
18795
|
"map.wms.urlInput.hint": "",
|
|
18845
18796
|
"multiselect.filter.placeholder": "",
|
|
18846
18797
|
"nav.back": "",
|
|
@@ -18875,16 +18826,16 @@ var pt = {
|
|
|
18875
18826
|
"record.metadata.author": "",
|
|
18876
18827
|
"record.metadata.catalog": "",
|
|
18877
18828
|
"record.metadata.contact": "",
|
|
18878
|
-
"record.metadata.createdOn": "",
|
|
18879
18829
|
"record.metadata.details": "",
|
|
18880
18830
|
"record.metadata.download": "",
|
|
18881
18831
|
"record.metadata.formats": "",
|
|
18882
|
-
"record.metadata.isOpenData": "",
|
|
18883
18832
|
"record.metadata.keywords": "",
|
|
18884
18833
|
"record.metadata.lastUpdate": "",
|
|
18885
18834
|
"record.metadata.links": "",
|
|
18886
18835
|
"record.metadata.noUsage": "",
|
|
18887
18836
|
"record.metadata.origin": "",
|
|
18837
|
+
"record.metadata.otherConstraints": "",
|
|
18838
|
+
"record.metadata.owner": "",
|
|
18888
18839
|
"record.metadata.preview": "",
|
|
18889
18840
|
"record.metadata.publications": "",
|
|
18890
18841
|
"record.metadata.quality": "",
|
|
@@ -18907,8 +18858,11 @@ var pt = {
|
|
|
18907
18858
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18908
18859
|
"record.metadata.related": "",
|
|
18909
18860
|
"record.metadata.sheet": "",
|
|
18861
|
+
"record.metadata.status": "",
|
|
18862
|
+
"record.metadata.themes": "",
|
|
18910
18863
|
"record.metadata.title": "",
|
|
18911
18864
|
"record.metadata.type": "",
|
|
18865
|
+
"record.metadata.uniqueId": "",
|
|
18912
18866
|
"record.metadata.updateFrequency": "",
|
|
18913
18867
|
"record.metadata.updateStatus": "",
|
|
18914
18868
|
"record.metadata.updatedOn": "",
|
|
@@ -18972,6 +18926,7 @@ var pt = {
|
|
|
18972
18926
|
"table.object.count": "",
|
|
18973
18927
|
"table.select.data": "",
|
|
18974
18928
|
"tooltip.html.copy": "",
|
|
18929
|
+
"tooltip.id.copy": "",
|
|
18975
18930
|
"tooltip.url.copy": "",
|
|
18976
18931
|
"tooltip.url.open": "",
|
|
18977
18932
|
"ui.readLess": "",
|
|
@@ -19116,20 +19071,11 @@ class Gn4FieldMapper {
|
|
|
19116
19071
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19117
19072
|
],
|
|
19118
19073
|
}),
|
|
19119
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19120
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19121
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19122
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19123
|
-
licenseObject: (output, source) => (
|
|
19124
|
-
...output,
|
|
19125
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19126
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19127
|
-
return {
|
|
19128
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19129
|
-
...(link ? { link } : {}),
|
|
19130
|
-
};
|
|
19131
|
-
}),
|
|
19132
|
-
}),
|
|
19074
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19075
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19076
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19077
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19078
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19133
19079
|
lineageObject: (output, source) => ({
|
|
19134
19080
|
...output,
|
|
19135
19081
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19155,33 +19101,78 @@ class Gn4FieldMapper {
|
|
|
19155
19101
|
kind,
|
|
19156
19102
|
};
|
|
19157
19103
|
},
|
|
19104
|
+
geom: (output, source) => {
|
|
19105
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19106
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19107
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19108
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19109
|
+
return {
|
|
19110
|
+
...output,
|
|
19111
|
+
spatialExtents: [
|
|
19112
|
+
...spatialExtents,
|
|
19113
|
+
...geoms.map((geom, index) => {
|
|
19114
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19115
|
+
const geometry = shapes[index] ?? geom;
|
|
19116
|
+
return {
|
|
19117
|
+
...(description !== null ? { description } : null),
|
|
19118
|
+
geometry,
|
|
19119
|
+
};
|
|
19120
|
+
}),
|
|
19121
|
+
],
|
|
19122
|
+
};
|
|
19123
|
+
},
|
|
19124
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19125
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19126
|
+
return {
|
|
19127
|
+
...output,
|
|
19128
|
+
temporalExtents: ranges.map((range) => {
|
|
19129
|
+
const start = selectField(range, 'gte');
|
|
19130
|
+
const end = selectField(range, 'lte');
|
|
19131
|
+
return {
|
|
19132
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19133
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19134
|
+
};
|
|
19135
|
+
}),
|
|
19136
|
+
};
|
|
19137
|
+
},
|
|
19158
19138
|
};
|
|
19159
19139
|
this.genericField = (output) => output;
|
|
19160
|
-
this.constraintField = (
|
|
19161
|
-
|
|
19162
|
-
|
|
19163
|
-
|
|
19164
|
-
|
|
19165
|
-
|
|
19166
|
-
|
|
19167
|
-
|
|
19168
|
-
|
|
19169
|
-
|
|
19170
|
-
|
|
19171
|
-
|
|
19172
|
-
|
|
19173
|
-
|
|
19174
|
-
|
|
19175
|
-
|
|
19176
|
-
|
|
19177
|
-
|
|
19178
|
-
|
|
19179
|
-
|
|
19180
|
-
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
}
|
|
19184
|
-
|
|
19140
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19141
|
+
let outputField;
|
|
19142
|
+
switch (type) {
|
|
19143
|
+
case 'license':
|
|
19144
|
+
outputField = 'licenses';
|
|
19145
|
+
break;
|
|
19146
|
+
case 'legal':
|
|
19147
|
+
outputField = 'legalConstraints';
|
|
19148
|
+
break;
|
|
19149
|
+
case 'security':
|
|
19150
|
+
outputField = 'securityConstraints';
|
|
19151
|
+
break;
|
|
19152
|
+
case 'other':
|
|
19153
|
+
outputField = 'otherConstraints';
|
|
19154
|
+
break;
|
|
19155
|
+
}
|
|
19156
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19157
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19158
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19159
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19160
|
+
return {
|
|
19161
|
+
text,
|
|
19162
|
+
...(url ? { url } : {}),
|
|
19163
|
+
};
|
|
19164
|
+
}));
|
|
19165
|
+
const result = {
|
|
19166
|
+
...output,
|
|
19167
|
+
[outputField]: outputArray,
|
|
19168
|
+
};
|
|
19169
|
+
// avoid legal constraints being duplicates of licenses
|
|
19170
|
+
if ('legalConstraints' in result &&
|
|
19171
|
+
(type === 'legal' || type === 'license')) {
|
|
19172
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19173
|
+
}
|
|
19174
|
+
return result;
|
|
19175
|
+
};
|
|
19185
19176
|
this.mapLink = (sourceLink) => {
|
|
19186
19177
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19187
19178
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19229,17 +19220,6 @@ class Gn4FieldMapper {
|
|
|
19229
19220
|
extras: { ...(output.extras || {}), ...value },
|
|
19230
19221
|
});
|
|
19231
19222
|
}
|
|
19232
|
-
getConstraintsType(indexField) {
|
|
19233
|
-
switch (indexField) {
|
|
19234
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19235
|
-
return 'legal';
|
|
19236
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19237
|
-
return 'security';
|
|
19238
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19239
|
-
default:
|
|
19240
|
-
return 'other';
|
|
19241
|
-
}
|
|
19242
|
-
}
|
|
19243
19223
|
getMappingFn(fieldName) {
|
|
19244
19224
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19245
19225
|
}
|
|
@@ -19301,14 +19281,16 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19301
19281
|
recordUpdated: null,
|
|
19302
19282
|
ownerOrganization: null,
|
|
19303
19283
|
licenses: [],
|
|
19284
|
+
legalConstraints: [],
|
|
19285
|
+
securityConstraints: [],
|
|
19286
|
+
otherConstraints: [],
|
|
19304
19287
|
contacts: [],
|
|
19305
19288
|
contactsForResource: [],
|
|
19306
|
-
accessConstraints: [],
|
|
19307
19289
|
keywords: [],
|
|
19308
19290
|
themes: [],
|
|
19309
|
-
useLimitations: [],
|
|
19310
19291
|
spatialExtents: [],
|
|
19311
19292
|
temporalExtents: [],
|
|
19293
|
+
overviews: [],
|
|
19312
19294
|
};
|
|
19313
19295
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19314
19296
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -20342,36 +20324,23 @@ class SelectionService {
|
|
|
20342
20324
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20343
20325
|
}
|
|
20344
20326
|
selectRecords(records) {
|
|
20345
|
-
const newIds =
|
|
20346
|
-
|
|
20347
|
-
newIds.push(record.uniqueIdentifier);
|
|
20348
|
-
});
|
|
20349
|
-
const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
|
|
20350
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20327
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20328
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20351
20329
|
this.addIdsToSelected(newIds);
|
|
20352
|
-
})
|
|
20330
|
+
});
|
|
20353
20331
|
}
|
|
20354
20332
|
deselectRecords(records) {
|
|
20355
|
-
const idsToBeRemoved =
|
|
20356
|
-
|
|
20357
|
-
idsToBeRemoved.push(record.uniqueIdentifier);
|
|
20358
|
-
});
|
|
20359
|
-
const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
|
|
20360
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20333
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20334
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20361
20335
|
this.removeIdsFromSelected(idsToBeRemoved);
|
|
20362
|
-
}), map$2(() => undefined));
|
|
20363
|
-
}
|
|
20364
|
-
clearSelection() {
|
|
20365
|
-
const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
|
|
20366
|
-
let currentSelection;
|
|
20367
|
-
this.subscription = currentSelectedResponse.subscribe((value) => {
|
|
20368
|
-
currentSelection = [...value];
|
|
20369
20336
|
});
|
|
20370
|
-
|
|
20371
|
-
|
|
20372
|
-
|
|
20337
|
+
}
|
|
20338
|
+
async clearSelection() {
|
|
20339
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20340
|
+
const currentSelection = Array.from(response);
|
|
20341
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20373
20342
|
this.removeIdsFromSelected(currentSelection);
|
|
20374
|
-
})
|
|
20343
|
+
});
|
|
20375
20344
|
}
|
|
20376
20345
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20377
20346
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20689,6 +20658,8 @@ const defaultMapOptions = {
|
|
|
20689
20658
|
};
|
|
20690
20659
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20691
20660
|
|
|
20661
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20662
|
+
|
|
20692
20663
|
var MapContextLayerTypeEnum;
|
|
20693
20664
|
(function (MapContextLayerTypeEnum) {
|
|
20694
20665
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -21064,9 +21035,15 @@ const FORMATS = {
|
|
|
21064
21035
|
color: '#328556',
|
|
21065
21036
|
mimeTypes: ['x-gis/x-shapefile'],
|
|
21066
21037
|
},
|
|
21038
|
+
gml: {
|
|
21039
|
+
extensions: ['gml'],
|
|
21040
|
+
priority: 5,
|
|
21041
|
+
color: '#c92bce',
|
|
21042
|
+
mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
|
|
21043
|
+
},
|
|
21067
21044
|
kml: {
|
|
21068
21045
|
extensions: ['kml', 'kmz'],
|
|
21069
|
-
priority:
|
|
21046
|
+
priority: 6,
|
|
21070
21047
|
color: '#348009',
|
|
21071
21048
|
mimeTypes: [
|
|
21072
21049
|
'application/vnd.google-earth.kml+xml',
|
|
@@ -21075,34 +21052,40 @@ const FORMATS = {
|
|
|
21075
21052
|
},
|
|
21076
21053
|
gpkg: {
|
|
21077
21054
|
extensions: ['gpkg', 'geopackage'],
|
|
21078
|
-
priority:
|
|
21055
|
+
priority: 7,
|
|
21079
21056
|
color: '#ea79ba',
|
|
21080
21057
|
mimeTypes: ['application/geopackage+sqlite3'],
|
|
21081
21058
|
},
|
|
21082
21059
|
zip: {
|
|
21083
21060
|
extensions: ['zip', 'tar.gz'],
|
|
21084
|
-
priority:
|
|
21061
|
+
priority: 8,
|
|
21085
21062
|
color: '#f2bb3a',
|
|
21086
21063
|
mimeTypes: ['application/zip', 'application/x-zip'],
|
|
21087
21064
|
},
|
|
21088
21065
|
pdf: {
|
|
21089
21066
|
extensions: ['pdf'],
|
|
21090
|
-
priority:
|
|
21067
|
+
priority: 9,
|
|
21091
21068
|
color: '#db544a',
|
|
21092
21069
|
mimeTypes: ['application/pdf'],
|
|
21093
21070
|
},
|
|
21094
21071
|
jpg: {
|
|
21095
21072
|
extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
|
|
21096
|
-
priority:
|
|
21073
|
+
priority: 9,
|
|
21097
21074
|
color: '#673ab7',
|
|
21098
21075
|
mimeTypes: ['image/jpg'],
|
|
21099
21076
|
},
|
|
21100
21077
|
svg: {
|
|
21101
21078
|
extensions: ['svg'],
|
|
21102
|
-
priority:
|
|
21079
|
+
priority: 10,
|
|
21103
21080
|
color: '#d98294',
|
|
21104
21081
|
mimeTypes: ['image/svg+xml'],
|
|
21105
21082
|
},
|
|
21083
|
+
dxf: {
|
|
21084
|
+
extensions: ['dxf'],
|
|
21085
|
+
priority: 11,
|
|
21086
|
+
color: '#de630b',
|
|
21087
|
+
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
21088
|
+
},
|
|
21106
21089
|
};
|
|
21107
21090
|
function getFormatPriority(linkFormat) {
|
|
21108
21091
|
for (const format in FORMATS) {
|
|
@@ -21119,14 +21102,18 @@ function getFormatPriority(linkFormat) {
|
|
|
21119
21102
|
function getLinkPriority(link) {
|
|
21120
21103
|
return getFormatPriority(getFileFormat(link));
|
|
21121
21104
|
}
|
|
21122
|
-
function
|
|
21123
|
-
|
|
21124
|
-
|
|
21125
|
-
|
|
21126
|
-
|
|
21105
|
+
function getFileFormatFromServiceOutput(serviceOutput) {
|
|
21106
|
+
function formatMatcher(format) {
|
|
21107
|
+
const output = serviceOutput.toLowerCase();
|
|
21108
|
+
return (format.extensions.some((extension) => output.includes(extension)) ||
|
|
21109
|
+
format.mimeTypes.some((mimeType) => output.includes(mimeType)));
|
|
21110
|
+
}
|
|
21111
|
+
for (const formatName in FORMATS) {
|
|
21112
|
+
if (formatMatcher(FORMATS[formatName])) {
|
|
21113
|
+
return formatName;
|
|
21127
21114
|
}
|
|
21128
21115
|
}
|
|
21129
|
-
return
|
|
21116
|
+
return null;
|
|
21130
21117
|
}
|
|
21131
21118
|
function getFileFormat(link) {
|
|
21132
21119
|
if ('mimeType' in link) {
|
|
@@ -21267,72 +21254,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21267
21254
|
}]
|
|
21268
21255
|
}] });
|
|
21269
21256
|
|
|
21270
|
-
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
21271
|
-
|
|
21272
|
-
class MapUtilsWMSService {
|
|
21273
|
-
constructor(proxy) {
|
|
21274
|
-
this.proxy = proxy;
|
|
21275
|
-
}
|
|
21276
|
-
getCapabilities(layer) {
|
|
21277
|
-
return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
|
|
21278
|
-
}
|
|
21279
|
-
getLayerFull(layer) {
|
|
21280
|
-
return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
|
|
21281
|
-
}
|
|
21282
|
-
getLayerLonLatBBox(layer) {
|
|
21283
|
-
return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
|
|
21284
|
-
}
|
|
21285
|
-
async getLonLatBBox(wmsLayerFull) {
|
|
21286
|
-
const { boundingBoxes } = wmsLayerFull;
|
|
21287
|
-
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21288
|
-
if (lonLatCRS) {
|
|
21289
|
-
return boundingBoxes[lonLatCRS];
|
|
21290
|
-
}
|
|
21291
|
-
else {
|
|
21292
|
-
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21293
|
-
register(proj4);
|
|
21294
|
-
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21295
|
-
proj4.defs(availableEPSGCode, proj);
|
|
21296
|
-
const bboxWithFiniteNumbers = [
|
|
21297
|
-
parseFloat(boundingBoxes[availableEPSGCode][0]),
|
|
21298
|
-
parseFloat(boundingBoxes[availableEPSGCode][1]),
|
|
21299
|
-
parseFloat(boundingBoxes[availableEPSGCode][2]),
|
|
21300
|
-
parseFloat(boundingBoxes[availableEPSGCode][3]),
|
|
21301
|
-
];
|
|
21302
|
-
const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21303
|
-
return extent;
|
|
21304
|
-
}
|
|
21305
|
-
}
|
|
21306
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21307
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
|
|
21308
|
-
}
|
|
21309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
|
|
21310
|
-
type: Injectable,
|
|
21311
|
-
args: [{
|
|
21312
|
-
providedIn: 'root',
|
|
21313
|
-
}]
|
|
21314
|
-
}], ctorParameters: function () { return [{ type: ProxyService }]; } });
|
|
21315
|
-
|
|
21316
21257
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21317
21258
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21259
|
+
const GEOJSON = new GeoJSON();
|
|
21318
21260
|
class MapUtilsService {
|
|
21319
|
-
constructor(http,
|
|
21261
|
+
constructor(http, proxy) {
|
|
21320
21262
|
this.http = http;
|
|
21321
|
-
this.
|
|
21263
|
+
this.proxy = proxy;
|
|
21322
21264
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21323
|
-
|
|
21265
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21324
21266
|
featureProjection,
|
|
21325
21267
|
dataProjection,
|
|
21326
21268
|
});
|
|
21327
|
-
return olFeatures;
|
|
21328
21269
|
};
|
|
21329
21270
|
}
|
|
21330
21271
|
createEmptyMap() {
|
|
21331
|
-
|
|
21272
|
+
return new Map$1({
|
|
21332
21273
|
controls: [],
|
|
21333
21274
|
pixelRatio: 1,
|
|
21334
21275
|
});
|
|
21335
|
-
return map;
|
|
21336
21276
|
}
|
|
21337
21277
|
isWMSLayer(layer) {
|
|
21338
21278
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21347,8 +21287,7 @@ class MapUtilsService {
|
|
|
21347
21287
|
...source.getParams(),
|
|
21348
21288
|
INFO_FORMAT: 'application/json',
|
|
21349
21289
|
};
|
|
21350
|
-
|
|
21351
|
-
return url;
|
|
21290
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21352
21291
|
}
|
|
21353
21292
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21354
21293
|
const features = [];
|
|
@@ -21376,38 +21315,56 @@ class MapUtilsService {
|
|
|
21376
21315
|
/**
|
|
21377
21316
|
* Will emit `null` if no extent could be computed
|
|
21378
21317
|
*/
|
|
21379
|
-
getLayerExtent(layer) {
|
|
21380
|
-
let
|
|
21318
|
+
async getLayerExtent(layer) {
|
|
21319
|
+
let latLonExtent;
|
|
21381
21320
|
if (layer &&
|
|
21382
21321
|
layer.type === 'geojson' &&
|
|
21383
21322
|
'data' in layer &&
|
|
21384
21323
|
typeof layer.data === 'object' &&
|
|
21385
21324
|
layer.data.features[0] &&
|
|
21386
21325
|
layer.data.features[0].geometry) {
|
|
21387
|
-
|
|
21388
|
-
.readFeatures(
|
|
21326
|
+
latLonExtent = new GeoJSON()
|
|
21327
|
+
.readFeatures(layer.data)
|
|
21389
21328
|
.map((feature) => feature.getGeometry())
|
|
21390
21329
|
.filter((geom) => !!geom)
|
|
21391
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21330
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21392
21331
|
}
|
|
21393
21332
|
else if (layer && layer.type === 'wms') {
|
|
21394
|
-
|
|
21333
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21395
21334
|
}
|
|
21396
21335
|
else if (layer && layer.type === 'wmts') {
|
|
21397
21336
|
if (layer.extent) {
|
|
21398
|
-
|
|
21337
|
+
latLonExtent = layer.extent;
|
|
21399
21338
|
}
|
|
21400
21339
|
else {
|
|
21401
|
-
return
|
|
21340
|
+
return layer.options.tileGrid.getExtent();
|
|
21402
21341
|
}
|
|
21403
21342
|
}
|
|
21404
21343
|
else {
|
|
21405
|
-
return
|
|
21344
|
+
return null;
|
|
21345
|
+
}
|
|
21346
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21347
|
+
return null;
|
|
21348
|
+
}
|
|
21349
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21350
|
+
}
|
|
21351
|
+
async getWmsLayerExtent(layer) {
|
|
21352
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21353
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21354
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21355
|
+
return null;
|
|
21356
|
+
}
|
|
21357
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21358
|
+
if (lonLatCRS) {
|
|
21359
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21360
|
+
}
|
|
21361
|
+
else {
|
|
21362
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21363
|
+
register(proj4);
|
|
21364
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21365
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21366
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21406
21367
|
}
|
|
21407
|
-
return geographicExtent.pipe(map$1((extent) => [
|
|
21408
|
-
...fromLonLat([extent[0], extent[1]], 'EPSG:3857'),
|
|
21409
|
-
...fromLonLat([extent[2], extent[3]], 'EPSG:3857'),
|
|
21410
|
-
]), map$1((extent) => (isEmpty(extent) ? null : extent)));
|
|
21411
21368
|
}
|
|
21412
21369
|
getWmtsLayerFromCapabilities(link) {
|
|
21413
21370
|
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
@@ -21463,7 +21420,18 @@ ${e.stack || e.message || e}`);
|
|
|
21463
21420
|
])
|
|
21464
21421
|
.getArray());
|
|
21465
21422
|
}
|
|
21466
|
-
|
|
21423
|
+
getRecordExtent(record) {
|
|
21424
|
+
if (!('spatialExtents' in record)) {
|
|
21425
|
+
return null;
|
|
21426
|
+
}
|
|
21427
|
+
// transform an array of geojson geometries into a bbox
|
|
21428
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21429
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21430
|
+
return extend(prev, geom.getExtent());
|
|
21431
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21432
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21433
|
+
}
|
|
21434
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21467
21435
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21468
21436
|
}
|
|
21469
21437
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21471,7 +21439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21471
21439
|
args: [{
|
|
21472
21440
|
providedIn: 'root',
|
|
21473
21441
|
}]
|
|
21474
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21442
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21475
21443
|
function dragPanCondition(event) {
|
|
21476
21444
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21477
21445
|
if (!dragPanCondition) {
|
|
@@ -22546,6 +22514,7 @@ const DEFAULT_VIEW = {
|
|
|
22546
22514
|
center: [0, 15],
|
|
22547
22515
|
zoom: 2,
|
|
22548
22516
|
};
|
|
22517
|
+
const WFS_MAX_FEATURES = 10000;
|
|
22549
22518
|
class MapContextService {
|
|
22550
22519
|
constructor(mapUtils, styleService) {
|
|
22551
22520
|
this.mapUtils = mapUtils;
|
|
@@ -22604,6 +22573,7 @@ class MapContextService {
|
|
|
22604
22573
|
urlObj.searchParams.set('typename', layerModel.name);
|
|
22605
22574
|
urlObj.searchParams.set('srsname', 'EPSG:3857');
|
|
22606
22575
|
urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
|
|
22576
|
+
urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
|
|
22607
22577
|
return urlObj.toString();
|
|
22608
22578
|
},
|
|
22609
22579
|
strategy: bbox,
|
|
@@ -23151,6 +23121,7 @@ class ThumbnailComponent {
|
|
|
23151
23121
|
constructor(optionalPlaceholderUrl) {
|
|
23152
23122
|
this.optionalPlaceholderUrl = optionalPlaceholderUrl;
|
|
23153
23123
|
this.fit = 'cover';
|
|
23124
|
+
this.placeholderShown = new EventEmitter();
|
|
23154
23125
|
this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
|
|
23155
23126
|
this.images = [];
|
|
23156
23127
|
}
|
|
@@ -23186,6 +23157,7 @@ class ThumbnailComponent {
|
|
|
23186
23157
|
setNewSrcImage(image) {
|
|
23187
23158
|
this.imgFit = image.fit;
|
|
23188
23159
|
this.imgUrl = image.url;
|
|
23160
|
+
this.placeholderShown.emit(this.isPlaceholder);
|
|
23189
23161
|
}
|
|
23190
23162
|
setPlaceholder() {
|
|
23191
23163
|
this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
|
|
@@ -23208,7 +23180,7 @@ class ThumbnailComponent {
|
|
|
23208
23180
|
}
|
|
23209
23181
|
}
|
|
23210
23182
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23183
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23212
23184
|
}
|
|
23213
23185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23214
23186
|
type: Component,
|
|
@@ -23228,11 +23200,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23228
23200
|
}], containerElement: [{
|
|
23229
23201
|
type: ViewChild,
|
|
23230
23202
|
args: ['containerElement']
|
|
23203
|
+
}], placeholderShown: [{
|
|
23204
|
+
type: Output
|
|
23231
23205
|
}] } });
|
|
23232
23206
|
|
|
23233
23207
|
class RecordPreviewCardComponent extends RecordPreviewComponent {
|
|
23234
23208
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23236
23210
|
}
|
|
23237
23211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
|
|
23238
23212
|
type: Component,
|
|
@@ -23241,7 +23215,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23241
23215
|
|
|
23242
23216
|
class RecordPreviewListComponent extends RecordPreviewComponent {
|
|
23243
23217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23244
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23218
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23245
23219
|
}
|
|
23246
23220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
|
|
23247
23221
|
type: Component,
|
|
@@ -23389,7 +23363,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
23389
23363
|
this.elementRef = elementRef;
|
|
23390
23364
|
}
|
|
23391
23365
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23392
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23366
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23393
23367
|
}
|
|
23394
23368
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
23395
23369
|
type: Component,
|
|
@@ -23407,7 +23381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23407
23381
|
|
|
23408
23382
|
class RecordPreviewTitleComponent extends RecordPreviewComponent {
|
|
23409
23383
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23410
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23384
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23411
23385
|
}
|
|
23412
23386
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
|
|
23413
23387
|
type: Component,
|
|
@@ -23447,7 +23421,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
|
|
|
23447
23421
|
return this.timeFormat.format(this.record.recordCreated, Date.now());
|
|
23448
23422
|
}
|
|
23449
23423
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, deps: [{ token: i0.ElementRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23450
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23424
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23451
23425
|
}
|
|
23452
23426
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
|
|
23453
23427
|
type: Component,
|
|
@@ -23780,22 +23754,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23780
23754
|
args: ['contentDiv']
|
|
23781
23755
|
}] } });
|
|
23782
23756
|
|
|
23783
|
-
class
|
|
23757
|
+
class CopyTextButtonComponent {
|
|
23784
23758
|
constructor() {
|
|
23785
|
-
this.
|
|
23759
|
+
this.displayText = true;
|
|
23760
|
+
this.rows = 1;
|
|
23786
23761
|
}
|
|
23787
|
-
|
|
23788
|
-
|
|
23762
|
+
copyText(event) {
|
|
23763
|
+
navigator.clipboard.writeText(this.text);
|
|
23764
|
+
event.target.blur();
|
|
23765
|
+
}
|
|
23766
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23767
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23789
23768
|
}
|
|
23790
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
23769
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
23791
23770
|
type: Component,
|
|
23792
|
-
args: [{ selector: 'gn-ui-
|
|
23793
|
-
}], propDecorators: {
|
|
23771
|
+
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
23772
|
+
}], propDecorators: { text: [{
|
|
23794
23773
|
type: Input
|
|
23795
|
-
}],
|
|
23774
|
+
}], tooltipText: [{
|
|
23796
23775
|
type: Input
|
|
23797
|
-
}]
|
|
23798
|
-
|
|
23776
|
+
}], displayText: [{
|
|
23777
|
+
type: Input
|
|
23778
|
+
}], rows: [{
|
|
23779
|
+
type: Input
|
|
23780
|
+
}] } });
|
|
23781
|
+
|
|
23782
|
+
class ContentGhostComponent {
|
|
23783
|
+
constructor() {
|
|
23784
|
+
this.ghostClass = '';
|
|
23785
|
+
}
|
|
23786
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23787
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: { showContent: "showContent", ghostClass: "ghostClass" }, ngImport: i0, template: "<div\n *ngIf=\"!showContent\"\n class=\"ghost bg-gray-100 rounded-lg relative overflow-hidden {{ ghostClass }}\"\n></div>\n<ng-content *ngIf=\"showContent\"></ng-content>\n", styles: [".ghost{min-height:2rem;min-width:2rem;overflow:hidden}.ghost:after{content:\"\";position:absolute;top:0;bottom:0;width:50%;background-image:linear-gradient(to left,rgba(251,251,251,.05),rgba(251,251,251,.3),rgba(251,251,251,.6),rgba(251,251,251,.3),rgba(251,251,251,.05));animation:loading 1s infinite}@keyframes loading{0%{left:-50%}to{left:100%}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23788
|
+
}
|
|
23789
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, decorators: [{
|
|
23790
|
+
type: Component,
|
|
23791
|
+
args: [{ selector: 'gn-ui-content-ghost', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"!showContent\"\n class=\"ghost bg-gray-100 rounded-lg relative overflow-hidden {{ ghostClass }}\"\n></div>\n<ng-content *ngIf=\"showContent\"></ng-content>\n", styles: [".ghost{min-height:2rem;min-width:2rem;overflow:hidden}.ghost:after{content:\"\";position:absolute;top:0;bottom:0;width:50%;background-image:linear-gradient(to left,rgba(251,251,251,.05),rgba(251,251,251,.3),rgba(251,251,251,.6),rgba(251,251,251,.3),rgba(251,251,251,.05));animation:loading 1s infinite}@keyframes loading{0%{left:-50%}to{left:100%}}\n"] }]
|
|
23792
|
+
}], propDecorators: { showContent: [{
|
|
23793
|
+
type: Input
|
|
23794
|
+
}], ghostClass: [{
|
|
23795
|
+
type: Input
|
|
23796
|
+
}] } });
|
|
23797
|
+
|
|
23799
23798
|
/* eslint-disable @angular-eslint/directive-selector */
|
|
23800
23799
|
class GnUiLinkifyDirective {
|
|
23801
23800
|
constructor(el, renderer) {
|
|
@@ -23939,11 +23938,11 @@ class MarkdownParserComponent {
|
|
|
23939
23938
|
return marked.parse(this.textContent);
|
|
23940
23939
|
}
|
|
23941
23940
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23942
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host
|
|
23941
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23943
23942
|
}
|
|
23944
23943
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23945
23944
|
type: Component,
|
|
23946
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host
|
|
23945
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
23947
23946
|
}], propDecorators: { textContent: [{
|
|
23948
23947
|
type: Input
|
|
23949
23948
|
}] } });
|
|
@@ -23954,16 +23953,32 @@ class MetadataInfoComponent {
|
|
|
23954
23953
|
}
|
|
23955
23954
|
get hasUsage() {
|
|
23956
23955
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23957
|
-
this.metadata.
|
|
23958
|
-
|
|
23956
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
23957
|
+
this.legalConstraints.length > 0) ||
|
|
23958
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
23959
|
+
this.otherConstraints.length > 0) ||
|
|
23960
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
23961
|
+
}
|
|
23962
|
+
get legalConstraints() {
|
|
23963
|
+
let array = [];
|
|
23964
|
+
if (this.metadata.legalConstraints?.length) {
|
|
23965
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23966
|
+
}
|
|
23967
|
+
return array;
|
|
23959
23968
|
}
|
|
23960
|
-
get
|
|
23969
|
+
get otherConstraints() {
|
|
23961
23970
|
let array = [];
|
|
23962
|
-
if (this.metadata.
|
|
23963
|
-
array = array.concat(this.metadata.
|
|
23971
|
+
if (this.metadata.otherConstraints?.length) {
|
|
23972
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23964
23973
|
}
|
|
23965
|
-
|
|
23966
|
-
|
|
23974
|
+
return array;
|
|
23975
|
+
}
|
|
23976
|
+
get licenses() {
|
|
23977
|
+
let array = [];
|
|
23978
|
+
if (this.metadata.licenses?.length) {
|
|
23979
|
+
array = array.concat(this.metadata.licenses
|
|
23980
|
+
.filter((c) => c.text)
|
|
23981
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23967
23982
|
}
|
|
23968
23983
|
return array;
|
|
23969
23984
|
}
|
|
@@ -23982,12 +23997,15 @@ class MetadataInfoComponent {
|
|
|
23982
23997
|
fieldReady(propName) {
|
|
23983
23998
|
return !this.incomplete || propName in this.metadata;
|
|
23984
23999
|
}
|
|
24000
|
+
onKeywordClick(keyword) {
|
|
24001
|
+
this.keyword.emit(keyword);
|
|
24002
|
+
}
|
|
23985
24003
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23986
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, 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 ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24004
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, 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 ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23987
24005
|
}
|
|
23988
24006
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23989
24007
|
type: Component,
|
|
23990
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24008
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
23991
24009
|
}], propDecorators: { metadata: [{
|
|
23992
24010
|
type: Input
|
|
23993
24011
|
}], incomplete: [{
|
|
@@ -24056,11 +24074,11 @@ class ButtonComponent {
|
|
|
24056
24074
|
propagateToDocumentOnly(event);
|
|
24057
24075
|
}
|
|
24058
24076
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24059
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24077
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24060
24078
|
}
|
|
24061
24079
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
24062
24080
|
type: Component,
|
|
24063
|
-
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24081
|
+
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
24064
24082
|
}], propDecorators: { type: [{
|
|
24065
24083
|
type: Input
|
|
24066
24084
|
}], disabled: [{
|
|
@@ -24135,40 +24153,15 @@ class DownloadsListComponent {
|
|
|
24135
24153
|
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
24136
24154
|
}
|
|
24137
24155
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24138
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div
|
|
24156
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24139
24157
|
}
|
|
24140
24158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
24141
24159
|
type: Component,
|
|
24142
|
-
args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div
|
|
24160
|
+
args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
|
|
24143
24161
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
24144
24162
|
type: Input
|
|
24145
24163
|
}] } });
|
|
24146
24164
|
|
|
24147
|
-
class CopyTextButtonComponent {
|
|
24148
|
-
constructor() {
|
|
24149
|
-
this.displayText = true;
|
|
24150
|
-
this.rows = 1;
|
|
24151
|
-
}
|
|
24152
|
-
copyText(event) {
|
|
24153
|
-
navigator.clipboard.writeText(this.text);
|
|
24154
|
-
event.target.blur();
|
|
24155
|
-
}
|
|
24156
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24157
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24158
|
-
}
|
|
24159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24160
|
-
type: Component,
|
|
24161
|
-
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
24162
|
-
}], propDecorators: { text: [{
|
|
24163
|
-
type: Input
|
|
24164
|
-
}], tooltipText: [{
|
|
24165
|
-
type: Input
|
|
24166
|
-
}], displayText: [{
|
|
24167
|
-
type: Input
|
|
24168
|
-
}], rows: [{
|
|
24169
|
-
type: Input
|
|
24170
|
-
}] } });
|
|
24171
|
-
|
|
24172
24165
|
class ApiCardComponent {
|
|
24173
24166
|
constructor() {
|
|
24174
24167
|
this.currentlyActive = false;
|
|
@@ -24365,11 +24358,11 @@ class CarouselComponent {
|
|
|
24365
24358
|
this.emblaApi.scrollTo(stepIndex);
|
|
24366
24359
|
}
|
|
24367
24360
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24368
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24361
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24369
24362
|
}
|
|
24370
24363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24371
24364
|
type: Component,
|
|
24372
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24365
|
+
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
|
|
24373
24366
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24374
24367
|
type: Input
|
|
24375
24368
|
}], stepsContainerClass: [{
|
|
@@ -24413,6 +24406,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24413
24406
|
}]
|
|
24414
24407
|
}] });
|
|
24415
24408
|
|
|
24409
|
+
class InteractiveTableColumnComponent {
|
|
24410
|
+
constructor() {
|
|
24411
|
+
this.grow = false;
|
|
24412
|
+
this.sortable = false;
|
|
24413
|
+
this.activeSort = null;
|
|
24414
|
+
this.sortChange = new EventEmitter();
|
|
24415
|
+
}
|
|
24416
|
+
handleSortChange() {
|
|
24417
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24418
|
+
this.sortChange.emit(this.activeSort);
|
|
24419
|
+
}
|
|
24420
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24421
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableColumnComponent, isStandalone: true, selector: "gn-ui-interactive-table-column", inputs: { grow: "grow", sortable: "sortable", activeSort: "activeSort" }, outputs: { sortChange: "sortChange" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "cell", first: true, predicate: ["cell"], descendants: true }], ngImport: i0, template: "<span>empty</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24422
|
+
}
|
|
24423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24424
|
+
type: Component,
|
|
24425
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24426
|
+
}], propDecorators: { header: [{
|
|
24427
|
+
type: ContentChild,
|
|
24428
|
+
args: ['header']
|
|
24429
|
+
}], cell: [{
|
|
24430
|
+
type: ContentChild,
|
|
24431
|
+
args: ['cell']
|
|
24432
|
+
}], grow: [{
|
|
24433
|
+
type: Input
|
|
24434
|
+
}], sortable: [{
|
|
24435
|
+
type: Input
|
|
24436
|
+
}], activeSort: [{
|
|
24437
|
+
type: Input
|
|
24438
|
+
}], sortChange: [{
|
|
24439
|
+
type: Output
|
|
24440
|
+
}] } });
|
|
24441
|
+
|
|
24442
|
+
class InteractiveTableComponent {
|
|
24443
|
+
constructor() {
|
|
24444
|
+
this.items = [];
|
|
24445
|
+
this.itemClick = new EventEmitter();
|
|
24446
|
+
}
|
|
24447
|
+
get gridStyle() {
|
|
24448
|
+
return {
|
|
24449
|
+
'grid-template-columns': this.columns
|
|
24450
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24451
|
+
.join(' '),
|
|
24452
|
+
};
|
|
24453
|
+
}
|
|
24454
|
+
handleRowClick(item) {
|
|
24455
|
+
this.itemClick.emit(item);
|
|
24456
|
+
}
|
|
24457
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24458
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24459
|
+
}
|
|
24460
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24461
|
+
type: Component,
|
|
24462
|
+
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"] }]
|
|
24463
|
+
}], propDecorators: { columns: [{
|
|
24464
|
+
type: ContentChildren,
|
|
24465
|
+
args: [InteractiveTableColumnComponent]
|
|
24466
|
+
}], items: [{
|
|
24467
|
+
type: Input
|
|
24468
|
+
}], itemClick: [{
|
|
24469
|
+
type: Output
|
|
24470
|
+
}] } });
|
|
24471
|
+
|
|
24416
24472
|
class LinkCardComponent {
|
|
24417
24473
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24418
24474
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -24426,11 +24482,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24426
24482
|
|
|
24427
24483
|
class RelatedRecordCardComponent {
|
|
24428
24484
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24429
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]
|
|
24485
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24430
24486
|
}
|
|
24431
24487
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
24432
24488
|
type: Component,
|
|
24433
|
-
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]
|
|
24489
|
+
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
|
|
24434
24490
|
}], propDecorators: { record: [{
|
|
24435
24491
|
type: Input
|
|
24436
24492
|
}] } });
|
|
@@ -24458,11 +24514,11 @@ class MetadataContactComponent {
|
|
|
24458
24514
|
this.organizationClick.emit(this.shownOrganization);
|
|
24459
24515
|
}
|
|
24460
24516
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24461
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24517
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24462
24518
|
}
|
|
24463
24519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24464
24520
|
type: Component,
|
|
24465
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24521
|
+
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24466
24522
|
}], propDecorators: { metadata: [{
|
|
24467
24523
|
type: Input
|
|
24468
24524
|
}], organizationClick: [{
|
|
@@ -24866,11 +24922,11 @@ class DropdownMultiselectComponent {
|
|
|
24866
24922
|
this.setFocus();
|
|
24867
24923
|
}
|
|
24868
24924
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24869
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
24925
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24870
24926
|
}
|
|
24871
24927
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24872
24928
|
type: Component,
|
|
24873
|
-
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
24929
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24874
24930
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24875
24931
|
type: Input
|
|
24876
24932
|
}], choices: [{
|
|
@@ -25129,11 +25185,11 @@ class AutocompleteComponent {
|
|
|
25129
25185
|
}
|
|
25130
25186
|
}
|
|
25131
25187
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25188
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25133
25189
|
}
|
|
25134
25190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25135
25191
|
type: Component,
|
|
25136
|
-
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25192
|
+
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
25137
25193
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25138
25194
|
type: Input
|
|
25139
25195
|
}], action: [{
|
|
@@ -25509,11 +25565,11 @@ class CheckboxComponent {
|
|
|
25509
25565
|
this.changed.emit(this.checked);
|
|
25510
25566
|
}
|
|
25511
25567
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25512
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25568
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25513
25569
|
}
|
|
25514
25570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25515
25571
|
type: Component,
|
|
25516
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25572
|
+
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
|
|
25517
25573
|
}], propDecorators: { type: [{
|
|
25518
25574
|
type: Input
|
|
25519
25575
|
}], checked: [{
|
|
@@ -25568,6 +25624,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25568
25624
|
args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
25569
25625
|
}] });
|
|
25570
25626
|
|
|
25627
|
+
class EditableLabelDirective {
|
|
25628
|
+
constructor(el, renderer) {
|
|
25629
|
+
this.el = el;
|
|
25630
|
+
this.renderer = renderer;
|
|
25631
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25632
|
+
}
|
|
25633
|
+
ngAfterViewInit() {
|
|
25634
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25635
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25636
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25637
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25638
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25639
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25640
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25641
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25642
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25643
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25644
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25645
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25646
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25647
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25648
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25649
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25650
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25651
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25652
|
+
});
|
|
25653
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25654
|
+
}
|
|
25655
|
+
}
|
|
25656
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25657
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
25658
|
+
}
|
|
25659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25660
|
+
type: Directive,
|
|
25661
|
+
args: [{
|
|
25662
|
+
selector: '[gnUiEditableLabel]',
|
|
25663
|
+
standalone: true,
|
|
25664
|
+
}]
|
|
25665
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25666
|
+
type: Output
|
|
25667
|
+
}], gnUiEditableLabel: [{
|
|
25668
|
+
type: Input
|
|
25669
|
+
}] } });
|
|
25670
|
+
|
|
25571
25671
|
class UiInputsModule {
|
|
25572
25672
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25573
25673
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
@@ -25607,7 +25707,8 @@ class UiInputsModule {
|
|
|
25607
25707
|
MatFormFieldModule,
|
|
25608
25708
|
MatInputModule,
|
|
25609
25709
|
MatDatepickerModule,
|
|
25610
|
-
MatNativeDateModule
|
|
25710
|
+
MatNativeDateModule,
|
|
25711
|
+
EditableLabelDirective], exports: [DropdownSelectorComponent,
|
|
25611
25712
|
AutocompleteComponent,
|
|
25612
25713
|
ButtonComponent,
|
|
25613
25714
|
TextInputComponent,
|
|
@@ -25623,7 +25724,8 @@ class UiInputsModule {
|
|
|
25623
25724
|
CopyTextButtonComponent,
|
|
25624
25725
|
CheckboxComponent,
|
|
25625
25726
|
SearchInputComponent,
|
|
25626
|
-
DateRangePickerComponent
|
|
25727
|
+
DateRangePickerComponent,
|
|
25728
|
+
EditableLabelDirective] }); }
|
|
25627
25729
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25628
25730
|
TranslateModule.forChild(),
|
|
25629
25731
|
NgxDropzoneModule,
|
|
@@ -25689,6 +25791,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25689
25791
|
MatInputModule,
|
|
25690
25792
|
MatDatepickerModule,
|
|
25691
25793
|
MatNativeDateModule,
|
|
25794
|
+
EditableLabelDirective,
|
|
25692
25795
|
],
|
|
25693
25796
|
exports: [
|
|
25694
25797
|
DropdownSelectorComponent,
|
|
@@ -25708,6 +25811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25708
25811
|
CheckboxComponent,
|
|
25709
25812
|
SearchInputComponent,
|
|
25710
25813
|
DateRangePickerComponent,
|
|
25814
|
+
EditableLabelDirective,
|
|
25711
25815
|
],
|
|
25712
25816
|
}]
|
|
25713
25817
|
}] });
|
|
@@ -25807,7 +25911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25807
25911
|
|
|
25808
25912
|
const DEFAULT_PARAMS = {
|
|
25809
25913
|
OFFSET: '',
|
|
25810
|
-
LIMIT: '',
|
|
25914
|
+
LIMIT: '-1',
|
|
25811
25915
|
FORMAT: 'json',
|
|
25812
25916
|
};
|
|
25813
25917
|
class RecordApiFormComponent {
|
|
@@ -25836,6 +25940,8 @@ class RecordApiFormComponent {
|
|
|
25836
25940
|
}
|
|
25837
25941
|
return outputUrl;
|
|
25838
25942
|
}));
|
|
25943
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
25944
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25839
25945
|
}
|
|
25840
25946
|
set apiLink(value) {
|
|
25841
25947
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25845,10 +25951,11 @@ class RecordApiFormComponent {
|
|
|
25845
25951
|
this.offset$.next(value);
|
|
25846
25952
|
}
|
|
25847
25953
|
setLimit(value) {
|
|
25848
|
-
|
|
25954
|
+
const newLimit = value === '' ? '-1' : value;
|
|
25955
|
+
this.limit$.next(newLimit);
|
|
25849
25956
|
}
|
|
25850
25957
|
setFormat(value) {
|
|
25851
|
-
this.format$.next(value);
|
|
25958
|
+
this.format$.next(String(value));
|
|
25852
25959
|
}
|
|
25853
25960
|
resetUrl() {
|
|
25854
25961
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25856,15 +25963,34 @@ class RecordApiFormComponent {
|
|
|
25856
25963
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25857
25964
|
}
|
|
25858
25965
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25859
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
25966
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25860
25967
|
}
|
|
25861
25968
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25862
25969
|
type: Component,
|
|
25863
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
25970
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
25864
25971
|
}], propDecorators: { apiLink: [{
|
|
25865
25972
|
type: Input
|
|
25866
25973
|
}] } });
|
|
25867
25974
|
|
|
25975
|
+
class ImageOverlayPreviewComponent {
|
|
25976
|
+
constructor() {
|
|
25977
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
25978
|
+
}
|
|
25979
|
+
openLightbox(src) {
|
|
25980
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
25981
|
+
}
|
|
25982
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25983
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { 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"] }] }); }
|
|
25984
|
+
}
|
|
25985
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
25986
|
+
type: Component,
|
|
25987
|
+
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
|
|
25988
|
+
}], propDecorators: { imageUrl: [{
|
|
25989
|
+
type: Input
|
|
25990
|
+
}], isPlaceholderShown: [{
|
|
25991
|
+
type: Output
|
|
25992
|
+
}] } });
|
|
25993
|
+
|
|
25868
25994
|
class UiElementsModule {
|
|
25869
25995
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25870
25996
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -25887,7 +26013,8 @@ class UiElementsModule {
|
|
|
25887
26013
|
PaginationButtonsComponent,
|
|
25888
26014
|
MaxLinesComponent,
|
|
25889
26015
|
RecordApiFormComponent,
|
|
25890
|
-
MarkdownParserComponent
|
|
26016
|
+
MarkdownParserComponent,
|
|
26017
|
+
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25891
26018
|
MatIconModule,
|
|
25892
26019
|
MatTooltipModule,
|
|
25893
26020
|
UiWidgetsModule,
|
|
@@ -25912,8 +26039,10 @@ class UiElementsModule {
|
|
|
25912
26039
|
AvatarComponent,
|
|
25913
26040
|
UserPreviewComponent,
|
|
25914
26041
|
PaginationButtonsComponent,
|
|
26042
|
+
MaxLinesComponent,
|
|
25915
26043
|
RecordApiFormComponent,
|
|
25916
|
-
MarkdownParserComponent
|
|
26044
|
+
MarkdownParserComponent,
|
|
26045
|
+
ImageOverlayPreviewComponent] }); }
|
|
25917
26046
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
25918
26047
|
MatIconModule,
|
|
25919
26048
|
MatTooltipModule,
|
|
@@ -25963,6 +26092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25963
26092
|
MaxLinesComponent,
|
|
25964
26093
|
RecordApiFormComponent,
|
|
25965
26094
|
MarkdownParserComponent,
|
|
26095
|
+
ImageOverlayPreviewComponent,
|
|
25966
26096
|
],
|
|
25967
26097
|
exports: [
|
|
25968
26098
|
MetadataInfoComponent,
|
|
@@ -25982,149 +26112,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25982
26112
|
AvatarComponent,
|
|
25983
26113
|
UserPreviewComponent,
|
|
25984
26114
|
PaginationButtonsComponent,
|
|
26115
|
+
MaxLinesComponent,
|
|
25985
26116
|
RecordApiFormComponent,
|
|
25986
26117
|
MarkdownParserComponent,
|
|
26118
|
+
ImageOverlayPreviewComponent,
|
|
25987
26119
|
],
|
|
25988
26120
|
}]
|
|
25989
26121
|
}] });
|
|
25990
26122
|
|
|
25991
|
-
class RecordTableComponent {
|
|
25992
|
-
constructor() {
|
|
25993
|
-
this.selectedRecords = [];
|
|
25994
|
-
this.records = [];
|
|
25995
|
-
this.recordClick = new EventEmitter();
|
|
25996
|
-
this.recordsSelect = new EventEmitter();
|
|
25997
|
-
this.recordsDeselect = new EventEmitter();
|
|
25998
|
-
this.sortByChange = new EventEmitter();
|
|
25999
|
-
}
|
|
26000
|
-
dateToString(date) {
|
|
26001
|
-
return date?.toLocaleDateString(undefined, {
|
|
26002
|
-
year: 'numeric',
|
|
26003
|
-
month: 'long',
|
|
26004
|
-
day: 'numeric',
|
|
26005
|
-
timeZone: 'UTC',
|
|
26006
|
-
});
|
|
26007
|
-
}
|
|
26008
|
-
getStatus(isPublishedToAll) {
|
|
26009
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
26010
|
-
}
|
|
26011
|
-
formatUserInfo(userInfo) {
|
|
26012
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
26013
|
-
if (infos && infos.length === 4) {
|
|
26014
|
-
return `${infos[2]} ${infos[1]}`;
|
|
26015
|
-
}
|
|
26016
|
-
return undefined;
|
|
26017
|
-
}
|
|
26018
|
-
getRecordFormats(record) {
|
|
26019
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
26020
|
-
return [];
|
|
26021
|
-
}
|
|
26022
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
26023
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
26024
|
-
return formats;
|
|
26025
|
-
}
|
|
26026
|
-
getBadgeColor(format) {
|
|
26027
|
-
return getBadgeColor(format);
|
|
26028
|
-
}
|
|
26029
|
-
getOrderForColumn(col) {
|
|
26030
|
-
if (!this.sortBy) {
|
|
26031
|
-
return null;
|
|
26032
|
-
}
|
|
26033
|
-
let order = null;
|
|
26034
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
26035
|
-
? this.sortBy
|
|
26036
|
-
: [this.sortBy];
|
|
26037
|
-
sortedArray.forEach((sortedCol) => {
|
|
26038
|
-
if (sortedCol[1] === col) {
|
|
26039
|
-
order = sortedCol[0];
|
|
26040
|
-
}
|
|
26041
|
-
});
|
|
26042
|
-
return order;
|
|
26043
|
-
}
|
|
26044
|
-
setSortBy(col) {
|
|
26045
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26046
|
-
let newOrder;
|
|
26047
|
-
if (sortOrder) {
|
|
26048
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
26049
|
-
}
|
|
26050
|
-
else {
|
|
26051
|
-
newOrder = 'asc';
|
|
26052
|
-
}
|
|
26053
|
-
this.sortByChange.emit([newOrder, col]);
|
|
26054
|
-
this.sortBy = [newOrder, col];
|
|
26055
|
-
}
|
|
26056
|
-
isSortedBy(col, order) {
|
|
26057
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26058
|
-
return sortOrder === order;
|
|
26059
|
-
}
|
|
26060
|
-
isChecked(record) {
|
|
26061
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
26062
|
-
return true;
|
|
26063
|
-
}
|
|
26064
|
-
return false;
|
|
26065
|
-
}
|
|
26066
|
-
handleRecordSelectedChange(selected, record) {
|
|
26067
|
-
if (!selected) {
|
|
26068
|
-
this.recordsDeselect.emit([record]);
|
|
26069
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
26070
|
-
}
|
|
26071
|
-
else {
|
|
26072
|
-
this.recordsSelect.emit([record]);
|
|
26073
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
26074
|
-
}
|
|
26075
|
-
}
|
|
26076
|
-
selectAll() {
|
|
26077
|
-
if (this.isAllSelected()) {
|
|
26078
|
-
this.recordsDeselect.emit(this.records);
|
|
26079
|
-
this.selectedRecords = [];
|
|
26080
|
-
}
|
|
26081
|
-
else {
|
|
26082
|
-
this.recordsSelect.emit(this.records);
|
|
26083
|
-
this.selectedRecords = this.records.map((record) => {
|
|
26084
|
-
return record.uniqueIdentifier;
|
|
26085
|
-
});
|
|
26086
|
-
}
|
|
26087
|
-
}
|
|
26088
|
-
isAllSelected() {
|
|
26089
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
26090
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
26091
|
-
if (allRecords.length === this.records.length) {
|
|
26092
|
-
return true;
|
|
26093
|
-
}
|
|
26094
|
-
}
|
|
26095
|
-
return false;
|
|
26096
|
-
}
|
|
26097
|
-
isSomeSelected() {
|
|
26098
|
-
if (this.selectedRecords.length > 0 &&
|
|
26099
|
-
this.selectedRecords.length < this.records.length) {
|
|
26100
|
-
return true;
|
|
26101
|
-
}
|
|
26102
|
-
return false;
|
|
26103
|
-
}
|
|
26104
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
26106
|
-
}
|
|
26107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
26108
|
-
type: Component,
|
|
26109
|
-
args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
|
|
26110
|
-
}], propDecorators: { selectedRecords: [{
|
|
26111
|
-
type: Input
|
|
26112
|
-
}], records: [{
|
|
26113
|
-
type: Input
|
|
26114
|
-
}], totalHits: [{
|
|
26115
|
-
type: Input
|
|
26116
|
-
}], sortBy: [{
|
|
26117
|
-
type: Input
|
|
26118
|
-
}], recordClick: [{
|
|
26119
|
-
type: Output
|
|
26120
|
-
}], recordsSelect: [{
|
|
26121
|
-
type: Output
|
|
26122
|
-
}], recordsDeselect: [{
|
|
26123
|
-
type: Output
|
|
26124
|
-
}], sortByChange: [{
|
|
26125
|
-
type: Output
|
|
26126
|
-
}] } });
|
|
26127
|
-
|
|
26128
26123
|
class UiSearchModule {
|
|
26129
26124
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26130
26125
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26137,8 +26132,7 @@ class UiSearchModule {
|
|
|
26137
26132
|
ResultsHitsNumberComponent,
|
|
26138
26133
|
ResultsListItemComponent,
|
|
26139
26134
|
RecordPreviewFeedComponent,
|
|
26140
|
-
RecordPreviewRowComponent,
|
|
26141
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26135
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26142
26136
|
FacetsModule$1,
|
|
26143
26137
|
FormsModule,
|
|
26144
26138
|
ReactiveFormsModule,
|
|
@@ -26149,7 +26143,8 @@ class UiSearchModule {
|
|
|
26149
26143
|
UiElementsModule,
|
|
26150
26144
|
MatIconModule,
|
|
26151
26145
|
MatCheckboxModule,
|
|
26152
|
-
RouterLink
|
|
26146
|
+
RouterLink,
|
|
26147
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26153
26148
|
RecordPreviewCardComponent,
|
|
26154
26149
|
RecordPreviewTextComponent,
|
|
26155
26150
|
RecordPreviewTitleComponent,
|
|
@@ -26159,8 +26154,7 @@ class UiSearchModule {
|
|
|
26159
26154
|
RecordPreviewComponent,
|
|
26160
26155
|
ResultsHitsNumberComponent,
|
|
26161
26156
|
RecordPreviewFeedComponent,
|
|
26162
|
-
RecordPreviewRowComponent
|
|
26163
|
-
RecordTableComponent] }); }
|
|
26157
|
+
RecordPreviewRowComponent] }); }
|
|
26164
26158
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26165
26159
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26166
26160
|
], imports: [CommonModule,
|
|
@@ -26175,7 +26169,8 @@ class UiSearchModule {
|
|
|
26175
26169
|
UiInputsModule,
|
|
26176
26170
|
UiElementsModule,
|
|
26177
26171
|
MatIconModule,
|
|
26178
|
-
MatCheckboxModule,
|
|
26172
|
+
MatCheckboxModule,
|
|
26173
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26179
26174
|
}
|
|
26180
26175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26181
26176
|
type: NgModule,
|
|
@@ -26192,7 +26187,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26192
26187
|
ResultsListItemComponent,
|
|
26193
26188
|
RecordPreviewFeedComponent,
|
|
26194
26189
|
RecordPreviewRowComponent,
|
|
26195
|
-
RecordTableComponent,
|
|
26196
26190
|
],
|
|
26197
26191
|
imports: [
|
|
26198
26192
|
CommonModule,
|
|
@@ -26209,6 +26203,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26209
26203
|
MatIconModule,
|
|
26210
26204
|
MatCheckboxModule,
|
|
26211
26205
|
RouterLink,
|
|
26206
|
+
InteractiveTableComponent,
|
|
26212
26207
|
],
|
|
26213
26208
|
exports: [
|
|
26214
26209
|
RecordPreviewListComponent,
|
|
@@ -26222,7 +26217,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26222
26217
|
ResultsHitsNumberComponent,
|
|
26223
26218
|
RecordPreviewFeedComponent,
|
|
26224
26219
|
RecordPreviewRowComponent,
|
|
26225
|
-
RecordTableComponent,
|
|
26226
26220
|
],
|
|
26227
26221
|
providers: [
|
|
26228
26222
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26781,6 +26775,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26781
26775
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26782
26776
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26783
26777
|
|
|
26778
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26779
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26780
|
+
|
|
26784
26781
|
class SearchFacade {
|
|
26785
26782
|
constructor(store, filterGeometry) {
|
|
26786
26783
|
this.store = store;
|
|
@@ -26885,6 +26882,7 @@ class SearchFacade {
|
|
|
26885
26882
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26886
26883
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26887
26884
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
26885
|
+
return this;
|
|
26888
26886
|
}
|
|
26889
26887
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26890
26888
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27269,8 +27267,11 @@ class FuzzySearchComponent {
|
|
|
27269
27267
|
this.searchService.updateFilters({ any });
|
|
27270
27268
|
}
|
|
27271
27269
|
}
|
|
27272
|
-
handleInputCleared() {
|
|
27273
|
-
this.
|
|
27270
|
+
async handleInputCleared() {
|
|
27271
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27272
|
+
if (currentSearchFilters.any) {
|
|
27273
|
+
this.searchService.updateFilters({ any: '' });
|
|
27274
|
+
}
|
|
27274
27275
|
}
|
|
27275
27276
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27276
27277
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -27350,6 +27351,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27350
27351
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27351
27352
|
}] }]; } });
|
|
27352
27353
|
|
|
27354
|
+
// expects the replacement key ${uuid}
|
|
27355
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27356
|
+
|
|
27353
27357
|
class FavoriteStarComponent {
|
|
27354
27358
|
set record(value) {
|
|
27355
27359
|
this.record_ = value;
|
|
@@ -27611,9 +27615,11 @@ class SearchEffects {
|
|
|
27611
27615
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27612
27616
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27613
27617
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27614
|
-
return of([state, favorites,
|
|
27618
|
+
return of([state, favorites, undefined]);
|
|
27615
27619
|
}
|
|
27616
27620
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27621
|
+
if (!geom)
|
|
27622
|
+
return;
|
|
27617
27623
|
try {
|
|
27618
27624
|
const trace = valid$1(geom, true);
|
|
27619
27625
|
if (trace?.length > 0) {
|
|
@@ -27625,7 +27631,7 @@ class SearchEffects {
|
|
|
27625
27631
|
throw new Error();
|
|
27626
27632
|
}
|
|
27627
27633
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27628
|
-
return of([state, favorites,
|
|
27634
|
+
return of([state, favorites, undefined]);
|
|
27629
27635
|
}));
|
|
27630
27636
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27631
27637
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -28062,10 +28068,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28062
28068
|
type: Input
|
|
28063
28069
|
}] } });
|
|
28064
28070
|
|
|
28065
|
-
// this geometry will be used to filter & boost results accordingly
|
|
28066
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
28067
|
-
// expects the replacement key ${uuid}
|
|
28068
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
28069
28071
|
class FeatureSearchModule {
|
|
28070
28072
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28071
28073
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28164,6 +28166,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28164
28166
|
}]
|
|
28165
28167
|
}] });
|
|
28166
28168
|
|
|
28169
|
+
class ResultsTableComponent {
|
|
28170
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28171
|
+
this.searchFacade = searchFacade;
|
|
28172
|
+
this.searchService = searchService;
|
|
28173
|
+
this.selectionService = selectionService;
|
|
28174
|
+
this.recordClick = new EventEmitter();
|
|
28175
|
+
this.records$ = this.searchFacade.results$;
|
|
28176
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28177
|
+
}
|
|
28178
|
+
dateToString(date) {
|
|
28179
|
+
return date?.toLocaleDateString(undefined, {
|
|
28180
|
+
year: 'numeric',
|
|
28181
|
+
month: 'long',
|
|
28182
|
+
day: 'numeric',
|
|
28183
|
+
timeZone: 'UTC',
|
|
28184
|
+
});
|
|
28185
|
+
}
|
|
28186
|
+
getStatus(isPublishedToAll) {
|
|
28187
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28188
|
+
}
|
|
28189
|
+
getRecordFormats(record) {
|
|
28190
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28191
|
+
return [];
|
|
28192
|
+
}
|
|
28193
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28194
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28195
|
+
return formats;
|
|
28196
|
+
}
|
|
28197
|
+
formatUserInfo(userInfo) {
|
|
28198
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28199
|
+
if (infos && infos.length === 4) {
|
|
28200
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28201
|
+
}
|
|
28202
|
+
return undefined;
|
|
28203
|
+
}
|
|
28204
|
+
getBadgeColor(format) {
|
|
28205
|
+
return getBadgeColor(format);
|
|
28206
|
+
}
|
|
28207
|
+
handleRecordClick(item) {
|
|
28208
|
+
this.recordClick.emit(item);
|
|
28209
|
+
}
|
|
28210
|
+
setSortBy(col, order) {
|
|
28211
|
+
this.searchService.setSortBy([order, col]);
|
|
28212
|
+
}
|
|
28213
|
+
isSortedBy(col) {
|
|
28214
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28215
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28216
|
+
? sortOrder
|
|
28217
|
+
: [sortOrder];
|
|
28218
|
+
for (const sort of sortArray) {
|
|
28219
|
+
if (sort[1] === col) {
|
|
28220
|
+
return sort[0];
|
|
28221
|
+
}
|
|
28222
|
+
}
|
|
28223
|
+
return null;
|
|
28224
|
+
}));
|
|
28225
|
+
}
|
|
28226
|
+
isChecked(record) {
|
|
28227
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28228
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28229
|
+
}));
|
|
28230
|
+
}
|
|
28231
|
+
handleRecordSelectedChange(selected, record) {
|
|
28232
|
+
if (!selected) {
|
|
28233
|
+
this.selectionService.deselectRecords([record]);
|
|
28234
|
+
}
|
|
28235
|
+
else {
|
|
28236
|
+
this.selectionService.selectRecords([record]);
|
|
28237
|
+
}
|
|
28238
|
+
}
|
|
28239
|
+
async toggleSelectAll() {
|
|
28240
|
+
const records = await firstValueFrom(this.records$);
|
|
28241
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28242
|
+
this.selectionService.deselectRecords(records);
|
|
28243
|
+
}
|
|
28244
|
+
else {
|
|
28245
|
+
this.selectionService.selectRecords(records);
|
|
28246
|
+
}
|
|
28247
|
+
}
|
|
28248
|
+
isAllSelected() {
|
|
28249
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28250
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28251
|
+
}));
|
|
28252
|
+
}
|
|
28253
|
+
isSomeSelected() {
|
|
28254
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28255
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28256
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28257
|
+
return !allSelected && someSelected;
|
|
28258
|
+
}));
|
|
28259
|
+
}
|
|
28260
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28261
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
|
|
28262
|
+
}
|
|
28263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28264
|
+
type: Component,
|
|
28265
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28266
|
+
CommonModule,
|
|
28267
|
+
UiInputsModule,
|
|
28268
|
+
InteractiveTableComponent,
|
|
28269
|
+
InteractiveTableColumnComponent,
|
|
28270
|
+
MatIconModule,
|
|
28271
|
+
TranslateModule,
|
|
28272
|
+
], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
|
|
28273
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28274
|
+
type: Output
|
|
28275
|
+
}] } });
|
|
28276
|
+
|
|
28167
28277
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28168
28278
|
get mapLinks() {
|
|
28169
28279
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28198,7 +28308,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
|
28198
28308
|
return getLinkLabel(link);
|
|
28199
28309
|
}
|
|
28200
28310
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, deps: [{ token: i0.ElementRef }, { token: LinkClassifierService }, { token: MapFacade }, { token: MapUtilsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28311
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28202
28312
|
}
|
|
28203
28313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
|
|
28204
28314
|
type: Component,
|
|
@@ -28293,6 +28403,157 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28293
28403
|
args: [{ selector: 'gn-ui-add-layer-from-wms', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
28294
28404
|
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28295
28405
|
|
|
28406
|
+
const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
|
|
28407
|
+
class AddLayerFromFileComponent {
|
|
28408
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28409
|
+
this.mapFacade = mapFacade;
|
|
28410
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28411
|
+
this.errorMessage = null;
|
|
28412
|
+
this.successMessage = null;
|
|
28413
|
+
this.loading = false;
|
|
28414
|
+
this.acceptedMimeType = ['.geojson'];
|
|
28415
|
+
this.maxFileSize = 5000000;
|
|
28416
|
+
}
|
|
28417
|
+
async handleFileChange(file) {
|
|
28418
|
+
if (!file) {
|
|
28419
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28420
|
+
return;
|
|
28421
|
+
}
|
|
28422
|
+
if (file.size > this.maxFileSize) {
|
|
28423
|
+
this.displayMessage('File size exceeds the limit of 5MB', 'error');
|
|
28424
|
+
return;
|
|
28425
|
+
}
|
|
28426
|
+
await this.addLayer(file);
|
|
28427
|
+
}
|
|
28428
|
+
async addLayer(file) {
|
|
28429
|
+
this.errorMessage = null;
|
|
28430
|
+
this.loading = true;
|
|
28431
|
+
try {
|
|
28432
|
+
if (!this.isFileFormatValid(file)) {
|
|
28433
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28434
|
+
return;
|
|
28435
|
+
}
|
|
28436
|
+
const fileExtension = this.getFileExtension(file);
|
|
28437
|
+
switch (fileExtension) {
|
|
28438
|
+
case 'geojson':
|
|
28439
|
+
await this.addGeoJsonLayer(file);
|
|
28440
|
+
break;
|
|
28441
|
+
default:
|
|
28442
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28443
|
+
break;
|
|
28444
|
+
}
|
|
28445
|
+
}
|
|
28446
|
+
catch (error) {
|
|
28447
|
+
const err = error;
|
|
28448
|
+
this.displayMessage('Error loading file: ' + err.message, 'error');
|
|
28449
|
+
}
|
|
28450
|
+
finally {
|
|
28451
|
+
this.loading = false;
|
|
28452
|
+
}
|
|
28453
|
+
}
|
|
28454
|
+
addGeoJsonLayer(file) {
|
|
28455
|
+
return new Promise((resolve, reject) => {
|
|
28456
|
+
try {
|
|
28457
|
+
const reader = new FileReader();
|
|
28458
|
+
reader.onload = () => {
|
|
28459
|
+
const result = reader.result;
|
|
28460
|
+
const title = file.name.split('.').slice(0, -1).join('.');
|
|
28461
|
+
const layerToAdd = {
|
|
28462
|
+
type: 'geojson',
|
|
28463
|
+
data: result,
|
|
28464
|
+
};
|
|
28465
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: title });
|
|
28466
|
+
this.displayMessage('File successfully added to map', 'success');
|
|
28467
|
+
resolve();
|
|
28468
|
+
};
|
|
28469
|
+
reader.onerror = reject;
|
|
28470
|
+
reader.readAsText(file);
|
|
28471
|
+
}
|
|
28472
|
+
catch (error) {
|
|
28473
|
+
reject(error);
|
|
28474
|
+
}
|
|
28475
|
+
});
|
|
28476
|
+
}
|
|
28477
|
+
isFileFormatValid(file) {
|
|
28478
|
+
const fileExtension = this.getFileExtension(file);
|
|
28479
|
+
return this.acceptedMimeType.includes(`.${fileExtension}`);
|
|
28480
|
+
}
|
|
28481
|
+
getFileExtension(file) {
|
|
28482
|
+
return file.name.split('.').pop();
|
|
28483
|
+
}
|
|
28484
|
+
displayMessage(message, type) {
|
|
28485
|
+
if (type === 'success') {
|
|
28486
|
+
this.successMessage = message;
|
|
28487
|
+
}
|
|
28488
|
+
else if (type === 'error') {
|
|
28489
|
+
this.errorMessage = message;
|
|
28490
|
+
}
|
|
28491
|
+
setTimeout(() => {
|
|
28492
|
+
this.successMessage = null;
|
|
28493
|
+
this.errorMessage = null;
|
|
28494
|
+
this.changeDetectorRef.detectChanges();
|
|
28495
|
+
}, 5000);
|
|
28496
|
+
}
|
|
28497
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28498
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file", ngImport: i0, template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DragAndDropFileInputComponent, selector: "gn-ui-drag-and-drop-file-input", inputs: ["placeholder", "accept"], outputs: ["fileChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28499
|
+
}
|
|
28500
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
|
|
28501
|
+
type: Component,
|
|
28502
|
+
args: [{ selector: 'gn-ui-add-layer-from-file', template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n" }]
|
|
28503
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28504
|
+
|
|
28505
|
+
class AddLayerFromWfsComponent {
|
|
28506
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28507
|
+
this.mapFacade = mapFacade;
|
|
28508
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28509
|
+
this.wfsUrl = '';
|
|
28510
|
+
this.loading = false;
|
|
28511
|
+
this.layers = [];
|
|
28512
|
+
this.wfsEndpoint = null;
|
|
28513
|
+
this.urlChange = new Subject();
|
|
28514
|
+
this.errorMessage = null;
|
|
28515
|
+
}
|
|
28516
|
+
ngOnInit() {
|
|
28517
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28518
|
+
}
|
|
28519
|
+
async loadLayers() {
|
|
28520
|
+
this.errorMessage = null;
|
|
28521
|
+
try {
|
|
28522
|
+
this.loading = true;
|
|
28523
|
+
if (this.wfsUrl.trim() === '') {
|
|
28524
|
+
this.layers = [];
|
|
28525
|
+
return;
|
|
28526
|
+
}
|
|
28527
|
+
this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
|
|
28528
|
+
this.layers = this.wfsEndpoint.getFeatureTypes();
|
|
28529
|
+
console.log(this.layers);
|
|
28530
|
+
}
|
|
28531
|
+
catch (error) {
|
|
28532
|
+
const err = error;
|
|
28533
|
+
this.layers = [];
|
|
28534
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28535
|
+
}
|
|
28536
|
+
finally {
|
|
28537
|
+
this.loading = false;
|
|
28538
|
+
this.changeDetectorRef.markForCheck();
|
|
28539
|
+
}
|
|
28540
|
+
}
|
|
28541
|
+
addLayer(layer) {
|
|
28542
|
+
const layerToAdd = {
|
|
28543
|
+
name: layer.name,
|
|
28544
|
+
url: this.wfsUrl.toString(),
|
|
28545
|
+
type: MapContextLayerTypeEnum.WFS,
|
|
28546
|
+
};
|
|
28547
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28548
|
+
}
|
|
28549
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28550
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28551
|
+
}
|
|
28552
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
28553
|
+
type: Component,
|
|
28554
|
+
args: [{ selector: 'gn-ui-add-layer-from-wfs', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n" }]
|
|
28555
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28556
|
+
|
|
28296
28557
|
class LayersPanelComponent {
|
|
28297
28558
|
constructor(mapFacade) {
|
|
28298
28559
|
this.mapFacade = mapFacade;
|
|
@@ -28302,11 +28563,11 @@ class LayersPanelComponent {
|
|
|
28302
28563
|
this.mapFacade.removeLayer(index);
|
|
28303
28564
|
}
|
|
28304
28565
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28305
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3
|
|
28566
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$3.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28306
28567
|
}
|
|
28307
28568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
28308
28569
|
type: Component,
|
|
28309
|
-
args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3
|
|
28570
|
+
args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n" }]
|
|
28310
28571
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28311
28572
|
|
|
28312
28573
|
class MapEffects {
|
|
@@ -28339,6 +28600,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28339
28600
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28340
28601
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28341
28602
|
|
|
28603
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28604
|
+
class GeocodingService {
|
|
28605
|
+
constructor(provider) {
|
|
28606
|
+
this.provider = provider;
|
|
28607
|
+
}
|
|
28608
|
+
query(text) {
|
|
28609
|
+
let queryObservable;
|
|
28610
|
+
switch (this.provider[0]) {
|
|
28611
|
+
case 'geoadmin':
|
|
28612
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28613
|
+
break;
|
|
28614
|
+
case 'geonames':
|
|
28615
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28616
|
+
break;
|
|
28617
|
+
case 'data-gouv-fr':
|
|
28618
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28619
|
+
break;
|
|
28620
|
+
default:
|
|
28621
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28622
|
+
}
|
|
28623
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28624
|
+
}
|
|
28625
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, deps: [{ token: GEOCODING_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28626
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28627
|
+
}
|
|
28628
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28629
|
+
type: Injectable,
|
|
28630
|
+
args: [{
|
|
28631
|
+
providedIn: 'root',
|
|
28632
|
+
}]
|
|
28633
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28634
|
+
type: Inject,
|
|
28635
|
+
args: [GEOCODING_PROVIDER]
|
|
28636
|
+
}] }]; } });
|
|
28637
|
+
|
|
28638
|
+
class GeocodingComponent {
|
|
28639
|
+
constructor(mapManager, geocodingService) {
|
|
28640
|
+
this.mapManager = mapManager;
|
|
28641
|
+
this.geocodingService = geocodingService;
|
|
28642
|
+
this.searchText = '';
|
|
28643
|
+
this.results = [];
|
|
28644
|
+
this.searchTextChanged = new Subject();
|
|
28645
|
+
this.destroy$ = new Subject();
|
|
28646
|
+
this.errorMessage = null;
|
|
28647
|
+
this.searchTextChanged
|
|
28648
|
+
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28649
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28650
|
+
this.errorMessage =
|
|
28651
|
+
'An error occurred while searching. Please try again.';
|
|
28652
|
+
console.error(error);
|
|
28653
|
+
return [];
|
|
28654
|
+
}));
|
|
28655
|
+
}), takeUntil(this.destroy$))
|
|
28656
|
+
.subscribe((results) => {
|
|
28657
|
+
this.results = results;
|
|
28658
|
+
});
|
|
28659
|
+
}
|
|
28660
|
+
ngOnDestroy() {
|
|
28661
|
+
this.destroy$.next();
|
|
28662
|
+
this.destroy$.complete();
|
|
28663
|
+
}
|
|
28664
|
+
onSearchChange(searchText) {
|
|
28665
|
+
if (!searchText) {
|
|
28666
|
+
this.clearSearch();
|
|
28667
|
+
return;
|
|
28668
|
+
}
|
|
28669
|
+
else {
|
|
28670
|
+
this.searchTextChanged.next(searchText);
|
|
28671
|
+
}
|
|
28672
|
+
}
|
|
28673
|
+
clearSearch() {
|
|
28674
|
+
this.searchText = '';
|
|
28675
|
+
this.results = [];
|
|
28676
|
+
this.errorMessage = null;
|
|
28677
|
+
}
|
|
28678
|
+
zoomToLocation(result) {
|
|
28679
|
+
const map = this.mapManager.map;
|
|
28680
|
+
const view = map.getView();
|
|
28681
|
+
const geometry = result.geom;
|
|
28682
|
+
if (geometry.type === 'Point') {
|
|
28683
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28684
|
+
}
|
|
28685
|
+
else if (geometry.type === 'Polygon') {
|
|
28686
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28687
|
+
}
|
|
28688
|
+
else {
|
|
28689
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28690
|
+
}
|
|
28691
|
+
}
|
|
28692
|
+
zoomToPoint(pointCoords, view) {
|
|
28693
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28694
|
+
view.setCenter(transformedCoords);
|
|
28695
|
+
view.setZoom(12);
|
|
28696
|
+
}
|
|
28697
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28698
|
+
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28699
|
+
const polygon = new Polygon([transformedCoords]);
|
|
28700
|
+
view.fit(polygon, {
|
|
28701
|
+
duration: 100,
|
|
28702
|
+
maxZoom: 12,
|
|
28703
|
+
});
|
|
28704
|
+
}
|
|
28705
|
+
onEnterPress() {
|
|
28706
|
+
if (this.results && this.results.length > 0) {
|
|
28707
|
+
this.zoomToLocation(this.results[0]);
|
|
28708
|
+
}
|
|
28709
|
+
}
|
|
28710
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }, { token: GeocodingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28711
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: GeocodingComponent, selector: "gn-ui-geocoding", ngImport: i0, template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28712
|
+
}
|
|
28713
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28714
|
+
type: Component,
|
|
28715
|
+
args: [{ selector: 'gn-ui-geocoding', template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n" }]
|
|
28716
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28717
|
+
|
|
28342
28718
|
class FeatureMapModule {
|
|
28343
28719
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28344
28720
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
|
|
@@ -28347,7 +28723,10 @@ class FeatureMapModule {
|
|
|
28347
28723
|
AddLayerFromCatalogComponent,
|
|
28348
28724
|
MapContainerComponent,
|
|
28349
28725
|
AddLayerRecordPreviewComponent,
|
|
28350
|
-
AddLayerFromWmsComponent
|
|
28726
|
+
AddLayerFromWmsComponent,
|
|
28727
|
+
AddLayerFromFileComponent,
|
|
28728
|
+
AddLayerFromWfsComponent,
|
|
28729
|
+
GeocodingComponent], imports: [CommonModule,
|
|
28351
28730
|
UiMapModule,
|
|
28352
28731
|
UiLayoutModule,
|
|
28353
28732
|
MatIconModule,
|
|
@@ -28358,13 +28737,18 @@ class FeatureMapModule {
|
|
|
28358
28737
|
MapInstanceDirective,
|
|
28359
28738
|
LayersPanelComponent,
|
|
28360
28739
|
AddLayerFromCatalogComponent,
|
|
28361
|
-
MapContainerComponent
|
|
28740
|
+
MapContainerComponent,
|
|
28741
|
+
GeocodingComponent] }); }
|
|
28362
28742
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
|
|
28363
28743
|
{
|
|
28364
28744
|
provide: FEATURE_MAP_OPTIONS,
|
|
28365
28745
|
useValue: defaultMapOptions,
|
|
28366
28746
|
},
|
|
28367
28747
|
MapFacade,
|
|
28748
|
+
{
|
|
28749
|
+
provide: GEOCODING_PROVIDER,
|
|
28750
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28751
|
+
},
|
|
28368
28752
|
], imports: [CommonModule,
|
|
28369
28753
|
UiMapModule,
|
|
28370
28754
|
UiLayoutModule,
|
|
@@ -28388,6 +28772,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28388
28772
|
MapContainerComponent,
|
|
28389
28773
|
AddLayerRecordPreviewComponent,
|
|
28390
28774
|
AddLayerFromWmsComponent,
|
|
28775
|
+
AddLayerFromFileComponent,
|
|
28776
|
+
AddLayerFromWfsComponent,
|
|
28777
|
+
GeocodingComponent,
|
|
28391
28778
|
],
|
|
28392
28779
|
exports: [
|
|
28393
28780
|
MapContextComponent,
|
|
@@ -28395,6 +28782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28395
28782
|
LayersPanelComponent,
|
|
28396
28783
|
AddLayerFromCatalogComponent,
|
|
28397
28784
|
MapContainerComponent,
|
|
28785
|
+
GeocodingComponent,
|
|
28398
28786
|
],
|
|
28399
28787
|
imports: [
|
|
28400
28788
|
CommonModule,
|
|
@@ -28415,6 +28803,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28415
28803
|
useValue: defaultMapOptions,
|
|
28416
28804
|
},
|
|
28417
28805
|
MapFacade,
|
|
28806
|
+
{
|
|
28807
|
+
provide: GEOCODING_PROVIDER,
|
|
28808
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28809
|
+
},
|
|
28418
28810
|
],
|
|
28419
28811
|
}]
|
|
28420
28812
|
}] });
|
|
@@ -28509,7 +28901,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28509
28901
|
...state,
|
|
28510
28902
|
chartConfig,
|
|
28511
28903
|
})), on(close, (state) => {
|
|
28512
|
-
// eslint-disable-next-line
|
|
28904
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28513
28905
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28514
28906
|
return stateWithoutMd;
|
|
28515
28907
|
}));
|
|
@@ -29776,15 +30168,16 @@ class DataService {
|
|
|
29776
30168
|
// Pour DL toutes les données
|
|
29777
30169
|
return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
|
|
29778
30170
|
...wfsLink,
|
|
30171
|
+
type: 'download',
|
|
29779
30172
|
url: new URL(urls[format]),
|
|
29780
|
-
mimeType: getMimeTypeForFormat(
|
|
30173
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29781
30174
|
}))));
|
|
29782
30175
|
}
|
|
29783
30176
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
29784
30177
|
return ['json', 'geojson'].map((format) => ({
|
|
29785
30178
|
...esriRestLink,
|
|
29786
30179
|
url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
|
|
29787
|
-
mimeType: getMimeTypeForFormat(
|
|
30180
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29788
30181
|
}));
|
|
29789
30182
|
}
|
|
29790
30183
|
readAsGeoJson(link) {
|
|
@@ -30178,12 +30571,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30178
30571
|
}] } });
|
|
30179
30572
|
|
|
30180
30573
|
class MapViewComponent {
|
|
30181
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30574
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30182
30575
|
this.mdViewFacade = mdViewFacade;
|
|
30183
30576
|
this.mapManager = mapManager;
|
|
30184
30577
|
this.mapUtils = mapUtils;
|
|
30185
30578
|
this.dataService = dataService;
|
|
30186
|
-
this.proxy = proxy;
|
|
30187
30579
|
this.featureInfo = featureInfo;
|
|
30188
30580
|
this.changeRef = changeRef;
|
|
30189
30581
|
this.styleService = styleService;
|
|
@@ -30218,7 +30610,7 @@ class MapViewComponent {
|
|
|
30218
30610
|
return of([]);
|
|
30219
30611
|
}), finalize(() => (this.loading = false)));
|
|
30220
30612
|
}));
|
|
30221
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30613
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30222
30614
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30223
30615
|
return of(undefined);
|
|
30224
30616
|
}), map$1((extent) => ({
|
|
@@ -30226,7 +30618,18 @@ class MapViewComponent {
|
|
|
30226
30618
|
view: {
|
|
30227
30619
|
extent,
|
|
30228
30620
|
},
|
|
30229
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30621
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30622
|
+
if (context.view.extent)
|
|
30623
|
+
return context;
|
|
30624
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30625
|
+
return {
|
|
30626
|
+
...context,
|
|
30627
|
+
view: {
|
|
30628
|
+
...context.view,
|
|
30629
|
+
extent,
|
|
30630
|
+
},
|
|
30631
|
+
};
|
|
30632
|
+
}));
|
|
30230
30633
|
}
|
|
30231
30634
|
ngOnDestroy() {
|
|
30232
30635
|
this.subscription.unsubscribe();
|
|
@@ -30279,13 +30682,13 @@ class MapViewComponent {
|
|
|
30279
30682
|
selectLinkToDisplay(link) {
|
|
30280
30683
|
this.selectedLinkIndex$.next(link);
|
|
30281
30684
|
}
|
|
30282
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token:
|
|
30685
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30283
30686
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30284
30687
|
}
|
|
30285
30688
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30286
30689
|
type: Component,
|
|
30287
30690
|
args: [{ selector: 'gn-ui-map-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
|
|
30288
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30691
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30289
30692
|
|
|
30290
30693
|
class DataViewComponent {
|
|
30291
30694
|
constructor(mdViewFacade) {
|
|
@@ -30368,7 +30771,7 @@ class OrganisationPreviewComponent {
|
|
|
30368
30771
|
this.clickedOrganisation.emit(this.organisation);
|
|
30369
30772
|
}
|
|
30370
30773
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30371
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30774
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30372
30775
|
}
|
|
30373
30776
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
|
|
30374
30777
|
type: Component,
|
|
@@ -30737,13 +31140,6 @@ class MyOrgService {
|
|
|
30737
31140
|
constructor(platformService, orgService) {
|
|
30738
31141
|
this.platformService = platformService;
|
|
30739
31142
|
this.orgService = orgService;
|
|
30740
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
30741
|
-
orgName: '',
|
|
30742
|
-
logoUrl: '',
|
|
30743
|
-
recordCount: 0,
|
|
30744
|
-
userCount: 0,
|
|
30745
|
-
userList: [],
|
|
30746
|
-
});
|
|
30747
31143
|
this.myOrgData$ = combineLatest([
|
|
30748
31144
|
this.platformService.getMe(),
|
|
30749
31145
|
this.platformService.getUsers(),
|
|
@@ -30762,7 +31158,7 @@ class MyOrgService {
|
|
|
30762
31158
|
userList,
|
|
30763
31159
|
userCount,
|
|
30764
31160
|
};
|
|
30765
|
-
}));
|
|
31161
|
+
}), shareReplay(1));
|
|
30766
31162
|
}
|
|
30767
31163
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30768
31164
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31455,11 +31851,11 @@ class RecordFormComponent {
|
|
|
31455
31851
|
return field.config.model;
|
|
31456
31852
|
}
|
|
31457
31853
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31458
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31854
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31459
31855
|
}
|
|
31460
31856
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31461
31857
|
type: Component,
|
|
31462
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31858
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31463
31859
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31464
31860
|
|
|
31465
31861
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -31827,5 +32223,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31827
32223
|
* Generated bundle index. Do not edit.
|
|
31828
32224
|
*/
|
|
31829
32225
|
|
|
31830
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService,
|
|
32226
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
|
|
31831
32227
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|