geonetwork-ui 2.10.0-dev.300bb3d2d → 2.10.0-dev.37a1e4c4d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/geonetwork-ui.mjs +796 -5789
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/index.d.ts +191 -84
- package/index.d.ts.map +1 -1
- package/material-styles.css +483 -0
- package/package.json +25 -35
- package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +9 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+ongules.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+roilaye.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +11 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +33 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +33 -0
- package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +8 -4
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +54 -32
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +48 -2
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +11 -5
- package/src/libs/common/domain/src/lib/model/user/group.model.ts +8 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +5 -0
- package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +5 -2
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +6 -0
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +10 -1
- package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +0 -2
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.html +67 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.ts +39 -0
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +18 -3
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +33 -40
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/field-focus.directive.ts +41 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +32 -34
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +13 -13
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +18 -4
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +8 -7
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +6 -6
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.html +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.ts +89 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-topics/form-field-topics.component.ts +2 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.css +3 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.css +35 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +5 -1
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +77 -5
- package/src/libs/feature/editor/src/lib/fields.config.ts +60 -47
- package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +4 -0
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +1 -1
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +33 -0
- package/src/libs/feature/notify-reuse/src/index.ts +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.css +0 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.html +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.ts +21 -0
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +9 -1
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +2 -2
- package/src/libs/ui/dataviz/src/index.ts +0 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.html +96 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.ts +45 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.html +41 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.ts +70 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +13 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +13 -3
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +43 -6
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -5
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +0 -4
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +28 -67
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +30 -10
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +8 -0
- package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +2 -2
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +2 -2
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +2 -1
- package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -1
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +15 -64
- package/src/libs/ui/map/src/lib/map-utils.ts +48 -0
- package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.ts +1 -1
- package/src/libs/util/app-config/src/lib/app-config.ts +70 -9
- package/src/libs/util/app-config/src/lib/model.ts +7 -0
- package/src/libs/util/app-config/src/lib/parse-utils.ts +50 -1
- package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +1 -2
- package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +6 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +17 -11
- package/src/libs/util/i18n/src/lib/i18n.interceptor.ts +2 -2
- package/src/libs/util/i18n/src/lib/i18n.providers.ts +14 -17
- package/src/libs/util/i18n/src/lib/test.translate.loader.ts +48 -0
- package/src/libs/util/shared/src/lib/links/link-utils.ts +1 -1
- package/src/libs/util/shared/src/lib/record/quality-score.util.ts +33 -18
- package/src/libs/util/shared/src/lib/services/date.service.ts +3 -3
- package/src/libs/util/shared/src/lib/utils/geojson.ts +58 -1
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/src/libs/util/shared/src/lib/utils/user-display.ts +32 -0
- package/style.css +0 -1
- package/tailwind.base.css +19 -2
- package/translations/de.json +29 -20
- package/translations/en.json +29 -20
- package/translations/es.json +29 -20
- package/translations/fr.json +29 -20
- package/translations/it.json +29 -20
- package/translations/nl.json +29 -20
- package/translations/pt.json +29 -20
- package/translations/sk.json +29 -20
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
APP_INITIALIZER,
|
|
3
2
|
EnvironmentProviders,
|
|
3
|
+
inject,
|
|
4
4
|
makeEnvironmentProviders,
|
|
5
|
+
provideAppInitializer,
|
|
5
6
|
Provider,
|
|
6
7
|
} from '@angular/core'
|
|
7
8
|
import {
|
|
@@ -22,17 +23,16 @@ import {
|
|
|
22
23
|
} from '@angular/common/http'
|
|
23
24
|
import { I18nInterceptor } from './i18n.interceptor'
|
|
24
25
|
|
|
25
|
-
function i18nInitializerFromLocalStorageFactory(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
translate.use(storageLang || translate.getBrowserLang() || DEFAULT_LANG)
|
|
26
|
+
function i18nInitializerFromLocalStorageFactory() {
|
|
27
|
+
const translate = inject(TranslateService)
|
|
28
|
+
translate.setFallbackLang(DEFAULT_LANG)
|
|
29
|
+
let storageLang = null
|
|
30
|
+
try {
|
|
31
|
+
storageLang = localStorage.getItem(LANGUAGE_STORAGE_KEY)
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.warn(error)
|
|
35
34
|
}
|
|
35
|
+
translate.use(storageLang || translate.getBrowserLang() || DEFAULT_LANG)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export function provideI18n(
|
|
@@ -56,12 +56,9 @@ export function provideI18n(
|
|
|
56
56
|
provideTranslateService(usedConfig),
|
|
57
57
|
]
|
|
58
58
|
if (useLocalStorage) {
|
|
59
|
-
providers.push(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
deps: [TranslateService],
|
|
63
|
-
multi: true,
|
|
64
|
-
})
|
|
59
|
+
providers.push(
|
|
60
|
+
provideAppInitializer(i18nInitializerFromLocalStorageFactory)
|
|
61
|
+
)
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
return makeEnvironmentProviders(providers)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { inject, Injectable, InjectionToken } from '@angular/core'
|
|
2
|
+
import {
|
|
3
|
+
provideTranslateService,
|
|
4
|
+
TranslateCompiler,
|
|
5
|
+
TranslateLoader,
|
|
6
|
+
TranslationObject,
|
|
7
|
+
} from '@ngx-translate/core'
|
|
8
|
+
import { Observable, of } from 'rxjs'
|
|
9
|
+
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This translate loader is used for testing purposes, it allows to provide translations directly in the test file without having to create JSON files
|
|
13
|
+
* Taken from https://github.com/mwootendev/ngx-translate-plugins/issues/87
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const TestTranslations = new InjectionToken<Record<string, TranslationObject>>(
|
|
17
|
+
'test-translations'
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
@Injectable()
|
|
21
|
+
class TestTranslateLoader implements TranslateLoader {
|
|
22
|
+
translations = inject(TestTranslations)
|
|
23
|
+
getTranslation(lang: string): Observable<TranslationObject> {
|
|
24
|
+
return of(this.translations[lang] as TranslationObject)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function provideTranslateTestingService(
|
|
29
|
+
translations: Record<string, TranslationObject>
|
|
30
|
+
) {
|
|
31
|
+
return provideTranslateService({
|
|
32
|
+
loader: [
|
|
33
|
+
{
|
|
34
|
+
provide: TestTranslations,
|
|
35
|
+
useValue: translations,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
provide: TranslateLoader,
|
|
39
|
+
useClass: TestTranslateLoader,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
fallbackLang: 'en',
|
|
43
|
+
compiler: {
|
|
44
|
+
provide: TranslateCompiler,
|
|
45
|
+
useClass: TranslateMessageFormatCompiler,
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
}
|
|
@@ -266,7 +266,7 @@ export function checkFileFormat(
|
|
|
266
266
|
new RegExp(`[./]${format}`, 'i').test(link.name.toLowerCase())) ||
|
|
267
267
|
('url' in link &&
|
|
268
268
|
new RegExp(`[./]${format}`, 'i').test(link.url.toString())) ||
|
|
269
|
-
('name' in link &&
|
|
269
|
+
('name' in link && new RegExp(`\\b${format}\\b`, 'i').test(link.name))
|
|
270
270
|
)
|
|
271
271
|
}
|
|
272
272
|
|
|
@@ -3,27 +3,41 @@ import {
|
|
|
3
3
|
RecordKind,
|
|
4
4
|
} from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
5
5
|
|
|
6
|
+
type TValidatorEntry = {
|
|
7
|
+
validator: (metadata: Partial<CatalogRecord>) => boolean
|
|
8
|
+
alias?: string
|
|
9
|
+
}
|
|
10
|
+
|
|
6
11
|
type TValidatorMapper = {
|
|
7
|
-
[key: string]:
|
|
12
|
+
[key: string]: TValidatorEntry
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
const ValidatorMapper: TValidatorMapper = {
|
|
11
|
-
title: (record) => !!record?.title,
|
|
12
|
-
abstract: (record) => !!record?.abstract,
|
|
13
|
-
keywords: (record) => (record?.keywords?.length ?? 0) > 0,
|
|
14
|
-
legalConstraints:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
title: { validator: (record) => !!record?.title },
|
|
17
|
+
abstract: { validator: (record) => !!record?.abstract },
|
|
18
|
+
keywords: { validator: (record) => (record?.keywords?.length ?? 0) > 0 },
|
|
19
|
+
legalConstraints: {
|
|
20
|
+
validator: (record) =>
|
|
21
|
+
!!(
|
|
22
|
+
record?.legalConstraints?.length &&
|
|
23
|
+
record.legalConstraints.some((c) => c?.text?.trim().length > 0)
|
|
24
|
+
),
|
|
25
|
+
},
|
|
26
|
+
contacts: {
|
|
27
|
+
validator: (record) =>
|
|
28
|
+
!!record?.contacts?.[0]?.email &&
|
|
29
|
+
record.contacts[0].email !== 'missing@missing.com',
|
|
30
|
+
},
|
|
31
|
+
updateFrequency: {
|
|
32
|
+
validator: (record) =>
|
|
33
|
+
!!record?.updateFrequency && record.updateFrequency !== 'unknown',
|
|
34
|
+
},
|
|
35
|
+
topics: { validator: (record) => (record?.topics?.length ?? 0) > 0 },
|
|
36
|
+
organisation: {
|
|
37
|
+
validator: (record) => !!record?.contacts?.[0]?.organization?.name,
|
|
38
|
+
alias: 'contacts',
|
|
39
|
+
},
|
|
40
|
+
source: { validator: (record) => !!record?.extras?.sourcesIdentifiers },
|
|
27
41
|
} as const
|
|
28
42
|
|
|
29
43
|
export type ValidatorMapperKeys = keyof typeof ValidatorMapper & string
|
|
@@ -67,6 +81,7 @@ export function getQualityValidators(
|
|
|
67
81
|
|
|
68
82
|
return filteredProps.map((name) => ({
|
|
69
83
|
name,
|
|
70
|
-
validator: () => ValidatorMapper[name](record),
|
|
84
|
+
validator: () => ValidatorMapper[name].validator(record),
|
|
85
|
+
alias: ValidatorMapper[name].alias,
|
|
71
86
|
}))
|
|
72
87
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { inject, Injectable } from '@angular/core'
|
|
2
2
|
import { TranslateService } from '@ngx-translate/core'
|
|
3
3
|
import { type Locale } from 'date-fns/locale'
|
|
4
4
|
import { formatDistance } from 'date-fns/formatDistance'
|
|
@@ -30,13 +30,13 @@ export class DateService {
|
|
|
30
30
|
locale: string
|
|
31
31
|
dateObj: Date
|
|
32
32
|
} {
|
|
33
|
-
const locale = this.translateService.
|
|
33
|
+
const locale = this.translateService.getCurrentLang() || DEFAULT_LANGUAGE
|
|
34
34
|
const dateObj = this.getDateObject(date)
|
|
35
35
|
return { locale, dateObj }
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
private async getDateLocale(): Promise<Locale> {
|
|
39
|
-
const lang = this.translateService.
|
|
39
|
+
const lang = this.translateService.getCurrentLang() || DEFAULT_LANGUAGE
|
|
40
40
|
const locales = await this.dateLocales
|
|
41
41
|
return locales[lang]
|
|
42
42
|
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Feature,
|
|
3
|
+
FeatureCollection,
|
|
4
|
+
Geometry,
|
|
5
|
+
Polygon,
|
|
6
|
+
Position,
|
|
7
|
+
} from 'geojson'
|
|
8
|
+
import type { DatasetSpatialExtent } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
2
9
|
|
|
3
10
|
/**
|
|
4
11
|
* @returns The geometry if available, otherwise null.
|
|
@@ -94,3 +101,53 @@ export function getGeometryBoundingBox(geometry: Geometry): BoundingBox {
|
|
|
94
101
|
return coordinatesReducer(emptyExtent, geometry.coordinates)
|
|
95
102
|
}
|
|
96
103
|
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Builds the closed GeoJSON Polygon matching the given bounding box.
|
|
107
|
+
*/
|
|
108
|
+
export function bboxToPolygon(bbox: BoundingBox): Polygon {
|
|
109
|
+
const [minX, minY, maxX, maxY] = bbox
|
|
110
|
+
return {
|
|
111
|
+
type: 'Polygon',
|
|
112
|
+
coordinates: [
|
|
113
|
+
[
|
|
114
|
+
[minX, minY],
|
|
115
|
+
[minX, maxY],
|
|
116
|
+
[maxX, maxY],
|
|
117
|
+
[maxX, minY],
|
|
118
|
+
[minX, minY],
|
|
119
|
+
],
|
|
120
|
+
],
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Returns the geometry carried by a spatial extent, falling back to the polygon
|
|
126
|
+
* derived from its bounding box. Returns null when the extent has neither.
|
|
127
|
+
*/
|
|
128
|
+
export function spatialExtentToGeometry(
|
|
129
|
+
extent: DatasetSpatialExtent
|
|
130
|
+
): Geometry | null {
|
|
131
|
+
if (extent.geometry) return extent.geometry
|
|
132
|
+
if (extent.bbox) return bboxToPolygon(extent.bbox)
|
|
133
|
+
return null
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Converts a list of dataset spatial extents into a GeoJSON FeatureCollection,
|
|
138
|
+
* e.g. to be used as the data source of a map layer.
|
|
139
|
+
*/
|
|
140
|
+
export function spatialExtentsToFeatureCollection(
|
|
141
|
+
extents: DatasetSpatialExtent[]
|
|
142
|
+
): FeatureCollection {
|
|
143
|
+
return {
|
|
144
|
+
type: 'FeatureCollection',
|
|
145
|
+
features: extents.reduce<Feature[]>((features, extent) => {
|
|
146
|
+
const geometry = spatialExtentToGeometry(extent)
|
|
147
|
+
if (geometry) {
|
|
148
|
+
features.push({ type: 'Feature', properties: {}, geometry })
|
|
149
|
+
}
|
|
150
|
+
return features
|
|
151
|
+
}, []),
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { UserModel } from '../../../../../../libs/common/domain/src/lib/model/user'
|
|
2
|
+
import { Individual } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
3
|
+
|
|
4
|
+
export function getIndividualDisplayName(individual: Individual): string {
|
|
5
|
+
const nameParts = [individual.firstName, individual.lastName]
|
|
6
|
+
.filter(Boolean)
|
|
7
|
+
.join(' ')
|
|
8
|
+
const orgPart = individual.organization?.name
|
|
9
|
+
? ` (${individual.organization.name})`
|
|
10
|
+
: ''
|
|
11
|
+
if (nameParts) return `${nameParts}${orgPart}`
|
|
12
|
+
return individual.organization?.name ?? individual.email ?? ''
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getAddressLines(address: string | undefined): string[] {
|
|
16
|
+
return address
|
|
17
|
+
? address
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((part) => part.trim())
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
: []
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function toIndividual(user: UserModel): Individual {
|
|
25
|
+
return {
|
|
26
|
+
firstName: user.name,
|
|
27
|
+
lastName: user.surname,
|
|
28
|
+
email: user.email,
|
|
29
|
+
role: 'unspecified',
|
|
30
|
+
organization: user.organisation ? { name: user.organisation } : undefined,
|
|
31
|
+
}
|
|
32
|
+
}
|
package/style.css
CHANGED
package/tailwind.base.css
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@import './material-styles.css';
|
|
2
|
+
|
|
1
3
|
@tailwind base;
|
|
2
4
|
@tailwind components;
|
|
3
5
|
@tailwind utilities;
|
|
@@ -74,7 +76,10 @@
|
|
|
74
76
|
--bg-hover: var(--gn-ui-button-bg-hover, var(--color-background));
|
|
75
77
|
--font-size: var(--gn-ui-button-font-size, 1em);
|
|
76
78
|
--color: var(--gn-ui-button-color, var(--color-main));
|
|
77
|
-
|
|
79
|
+
--disabled-opacity: var(--gn-ui-button-disabled-opacity, 0.5);
|
|
80
|
+
--justify: var(--gn-ui-button-justify, center);
|
|
81
|
+
justify-content: var(--justify);
|
|
82
|
+
@apply flex flex-row items-center
|
|
78
83
|
text-[length:--font-size] leading-none
|
|
79
84
|
text-[color:--color]
|
|
80
85
|
p-[--padding] rounded-[--rounded] w-[--width] h-[--height] overflow-hidden
|
|
@@ -82,7 +87,7 @@
|
|
|
82
87
|
hover:bg-[--bg-hover] focus:bg-[--bg-hover] active:bg-[--background]
|
|
83
88
|
outline-none
|
|
84
89
|
relative
|
|
85
|
-
disabled:opacity-
|
|
90
|
+
disabled:opacity-[--disabled-opacity] disabled:pointer-events-none
|
|
86
91
|
focus:z-10 active:z-10 hover:z-10;
|
|
87
92
|
}
|
|
88
93
|
/* makes sure icons will not make the buttons grow vertically */
|
|
@@ -116,6 +121,12 @@
|
|
|
116
121
|
border-gray-100 focus:ring-4 focus:ring-gray-50;
|
|
117
122
|
}
|
|
118
123
|
|
|
124
|
+
.gn-ui-btn-gray-light {
|
|
125
|
+
@apply gn-ui-btn text-black
|
|
126
|
+
bg-gray-50 hover:bg-gray-100 focus:bg-gray-100 active:bg-gray-200
|
|
127
|
+
border-gray-50 focus:ring-4 focus:ring-gray-100;
|
|
128
|
+
}
|
|
129
|
+
|
|
119
130
|
.gn-ui-btn-black {
|
|
120
131
|
@apply gn-ui-btn text-white
|
|
121
132
|
bg-black hover:bg-gray-950 focus:bg-gray-950 active:bg-gray-900
|
|
@@ -134,6 +145,12 @@
|
|
|
134
145
|
bg-white border-white focus:ring-4 focus:ring-gray-300;
|
|
135
146
|
}
|
|
136
147
|
|
|
148
|
+
.gn-ui-btn-primary-light {
|
|
149
|
+
@apply gn-ui-btn text-primary-darkest
|
|
150
|
+
bg-primary-white hover:bg-primary focus:bg-primary hover:text-white focus:text-white active:bg-primary-darker
|
|
151
|
+
border-transparent;
|
|
152
|
+
}
|
|
153
|
+
|
|
137
154
|
.gn-ui-card-s {
|
|
138
155
|
@apply min-h-[64px] w-full xs:min-w-[260px] xs:max-w-[280px] sm:min-w-[300px] sm:max-w-[500px] md:min-w-[230px];
|
|
139
156
|
}
|
package/translations/de.json
CHANGED
|
@@ -150,6 +150,14 @@
|
|
|
150
150
|
"editor.record.form.draft.updateAlert": "Seit der Erstellung dieses Entwurfs wurde dieser Datensatz am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version können dessen Änderungen gelöscht werden. Um dies zu vermeiden, können Sie Ihre Änderungen rückgängig machen oder Ihre Version in voller Kenntnis der Sachlage veröffentlichen.",
|
|
151
151
|
"editor.record.form.field.abstract": "Kurzbeschreibung",
|
|
152
152
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
153
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
154
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
155
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
156
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
157
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
158
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
159
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
160
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
153
161
|
"editor.record.form.field.contacts": "Ansprechpartner - Email",
|
|
154
162
|
"editor.record.form.field.contacts.noContact": "Bitte geben Sie mindestens einen Ansprechpartner an.",
|
|
155
163
|
"editor.record.form.field.contacts.placeholder": "Kontakt auswählen",
|
|
@@ -159,6 +167,7 @@
|
|
|
159
167
|
"editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
|
|
160
168
|
"editor.record.form.field.license": "Lizenz",
|
|
161
169
|
"editor.record.form.field.onlineLinkResources": "Beigefügte Ressourcen",
|
|
170
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
162
171
|
"editor.record.form.field.onlineResource.cancel": "Abbrechen",
|
|
163
172
|
"editor.record.form.field.onlineResource.confirm": "Bestätigen",
|
|
164
173
|
"editor.record.form.field.onlineResource.dialogTitle": "Vorschau des Datensatzes bearbeiten",
|
|
@@ -234,25 +243,25 @@
|
|
|
234
243
|
"editor.record.form.temporalExtents.addRange": "Zeitraum",
|
|
235
244
|
"editor.record.form.temporalExtents.date": "Datum",
|
|
236
245
|
"editor.record.form.temporalExtents.range": "Datumsbereich",
|
|
237
|
-
"editor.record.form.topics.
|
|
238
|
-
"editor.record.form.topics.
|
|
239
|
-
"editor.record.form.topics.
|
|
240
|
-
"editor.record.form.topics.
|
|
241
|
-
"editor.record.form.topics.
|
|
242
|
-
"editor.record.form.topics.
|
|
243
|
-
"editor.record.form.topics.
|
|
244
|
-
"editor.record.form.topics.
|
|
245
|
-
"editor.record.form.topics.
|
|
246
|
-
"editor.record.form.topics.
|
|
247
|
-
"editor.record.form.topics.
|
|
248
|
-
"editor.record.form.topics.
|
|
249
|
-
"editor.record.form.topics.
|
|
250
|
-
"editor.record.form.topics.
|
|
251
|
-
"editor.record.form.topics.
|
|
252
|
-
"editor.record.form.topics.
|
|
253
|
-
"editor.record.form.topics.
|
|
254
|
-
"editor.record.form.topics.
|
|
255
|
-
"editor.record.form.topics.
|
|
246
|
+
"editor.record.form.topics.iso.biota": "Biologie",
|
|
247
|
+
"editor.record.form.topics.iso.boundaries": "Grenzen",
|
|
248
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Klimatologie/Meteorologie/Atmosphäre",
|
|
249
|
+
"editor.record.form.topics.iso.economy": "Wirtschaft",
|
|
250
|
+
"editor.record.form.topics.iso.elevation": "Höhenangaben",
|
|
251
|
+
"editor.record.form.topics.iso.environment": "Umwelt",
|
|
252
|
+
"editor.record.form.topics.iso.farming": "Landwirtschaft",
|
|
253
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Geowissenschaften",
|
|
254
|
+
"editor.record.form.topics.iso.health": "Gesundheitswesen",
|
|
255
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Bilddaten/Basiskarten/Landbedeckung",
|
|
256
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Aufklärung/Militär",
|
|
257
|
+
"editor.record.form.topics.iso.location": "Ortsangaben",
|
|
258
|
+
"editor.record.form.topics.iso.oceans": "Meere",
|
|
259
|
+
"editor.record.form.topics.iso.planningCadastre": "Planungsunterlagen/Kataster",
|
|
260
|
+
"editor.record.form.topics.iso.society": "Gesellschaft",
|
|
261
|
+
"editor.record.form.topics.iso.structure": "Bauwerke",
|
|
262
|
+
"editor.record.form.topics.iso.transportation": "Verkehrswesen",
|
|
263
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Ver- und Entsorgung/Nachrichtenwesen",
|
|
264
|
+
"editor.record.form.topics.iso.inlandWaters": "Binnengewässer",
|
|
256
265
|
"editor.record.form.topics.placeholder": "Ein oder mehrere Themen auswählen",
|
|
257
266
|
"editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
|
|
258
267
|
"editor.record.importFromExternalFile.failure.body": "Beim Importieren des Datensatzes ist ein Fehler aufgetreten:",
|
|
@@ -494,7 +503,6 @@
|
|
|
494
503
|
"record.metadata.preview.config.idle": "Standardvorschau festlegen",
|
|
495
504
|
"record.metadata.preview.config.saved": "Gespeichert!",
|
|
496
505
|
"record.metadata.preview.config.saving": "Speichern...",
|
|
497
|
-
"record.metadata.producer": "Datenproduzent",
|
|
498
506
|
"record.metadata.publication": "Veröffentlichungsdatum",
|
|
499
507
|
"record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
|
|
500
508
|
"record.metadata.quality": "Metadatenqualität",
|
|
@@ -520,6 +528,7 @@
|
|
|
520
528
|
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
521
529
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
522
530
|
"record.metadata.related": "Entdecken Sie den Katalog",
|
|
531
|
+
"record.metadata.resource.contacts": "Kontakte zur Ressource",
|
|
523
532
|
"record.metadata.resourceCreated": "Erstellt",
|
|
524
533
|
"record.metadata.resourcePublished": "Veröffentlicht",
|
|
525
534
|
"record.metadata.resourceUpdated": "Zuletzt aktualisiert",
|
package/translations/en.json
CHANGED
|
@@ -150,6 +150,14 @@
|
|
|
150
150
|
"editor.record.form.draft.updateAlert": "Since you created this draft, the dataset has been updated on { date } by { user }. Publishing your draft might erase their edits. To avoid this, you need to either cancel your changes or knowingly publish your own version.",
|
|
151
151
|
"editor.record.form.field.abstract": "Abstract",
|
|
152
152
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
153
|
+
"editor.record.form.field.contactDetails.email": "Contact email",
|
|
154
|
+
"editor.record.form.field.contactDetails.email.placeholder": "example@domainname.com",
|
|
155
|
+
"editor.record.form.field.contactDetails.firstName": "Contact first name",
|
|
156
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "First name",
|
|
157
|
+
"editor.record.form.field.contactDetails.lastName": "Contact last name",
|
|
158
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "Last name",
|
|
159
|
+
"editor.record.form.field.contactDetails.organization": "Contact organization",
|
|
160
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "Company",
|
|
153
161
|
"editor.record.form.field.contacts": "Point of contact - Email",
|
|
154
162
|
"editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
|
|
155
163
|
"editor.record.form.field.contacts.placeholder": "Choose a contact",
|
|
@@ -159,6 +167,7 @@
|
|
|
159
167
|
"editor.record.form.field.legalConstraints": "Legal constraint",
|
|
160
168
|
"editor.record.form.field.license": "License",
|
|
161
169
|
"editor.record.form.field.onlineLinkResources": "Attached resources",
|
|
170
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
162
171
|
"editor.record.form.field.onlineResource.cancel": "Cancel",
|
|
163
172
|
"editor.record.form.field.onlineResource.confirm": "Confirm",
|
|
164
173
|
"editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
|
|
@@ -234,25 +243,25 @@
|
|
|
234
243
|
"editor.record.form.temporalExtents.addRange": "Time period",
|
|
235
244
|
"editor.record.form.temporalExtents.date": "Date",
|
|
236
245
|
"editor.record.form.temporalExtents.range": "Date range",
|
|
237
|
-
"editor.record.form.topics.
|
|
238
|
-
"editor.record.form.topics.
|
|
239
|
-
"editor.record.form.topics.
|
|
240
|
-
"editor.record.form.topics.
|
|
241
|
-
"editor.record.form.topics.
|
|
242
|
-
"editor.record.form.topics.
|
|
243
|
-
"editor.record.form.topics.
|
|
244
|
-
"editor.record.form.topics.
|
|
245
|
-
"editor.record.form.topics.
|
|
246
|
-
"editor.record.form.topics.
|
|
247
|
-
"editor.record.form.topics.
|
|
248
|
-
"editor.record.form.topics.
|
|
249
|
-
"editor.record.form.topics.
|
|
250
|
-
"editor.record.form.topics.
|
|
251
|
-
"editor.record.form.topics.
|
|
252
|
-
"editor.record.form.topics.
|
|
253
|
-
"editor.record.form.topics.
|
|
254
|
-
"editor.record.form.topics.
|
|
255
|
-
"editor.record.form.topics.
|
|
246
|
+
"editor.record.form.topics.iso.biota": "Biota",
|
|
247
|
+
"editor.record.form.topics.iso.boundaries": "Boundaries",
|
|
248
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Climatology / Meteorology / Atmosphere",
|
|
249
|
+
"editor.record.form.topics.iso.economy": "Economy",
|
|
250
|
+
"editor.record.form.topics.iso.elevation": "Elevation",
|
|
251
|
+
"editor.record.form.topics.iso.environment": "Environnement",
|
|
252
|
+
"editor.record.form.topics.iso.farming": "Farming",
|
|
253
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Geoscientific Information",
|
|
254
|
+
"editor.record.form.topics.iso.health": "Health",
|
|
255
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Imagery / Base Maps / Earth Cover",
|
|
256
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Intelligence / Military",
|
|
257
|
+
"editor.record.form.topics.iso.location": "Location",
|
|
258
|
+
"editor.record.form.topics.iso.oceans": "Oceans",
|
|
259
|
+
"editor.record.form.topics.iso.planningCadastre": "Planning / Cadastre",
|
|
260
|
+
"editor.record.form.topics.iso.society": "Society",
|
|
261
|
+
"editor.record.form.topics.iso.structure": "Structure",
|
|
262
|
+
"editor.record.form.topics.iso.transportation": "Transportation",
|
|
263
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Utilities / Communication",
|
|
264
|
+
"editor.record.form.topics.iso.inlandWaters": "Inland Waters",
|
|
256
265
|
"editor.record.form.topics.placeholder": "Select one or several topics",
|
|
257
266
|
"editor.record.form.updateFrequency.planned": "This dataset is updated regularly",
|
|
258
267
|
"editor.record.importFromExternalFile.failure.body": "Failure",
|
|
@@ -494,7 +503,6 @@
|
|
|
494
503
|
"record.metadata.preview.config.idle": "Set as default preview",
|
|
495
504
|
"record.metadata.preview.config.saved": "Saved !",
|
|
496
505
|
"record.metadata.preview.config.saving": "Saving...",
|
|
497
|
-
"record.metadata.producer": "Data producer",
|
|
498
506
|
"record.metadata.publication": "Date of publication",
|
|
499
507
|
"record.metadata.publications": "{count, plural, =0{publication} one{publication} other{publications}}",
|
|
500
508
|
"record.metadata.quality": "Metadata Quality",
|
|
@@ -520,6 +528,7 @@
|
|
|
520
528
|
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
521
529
|
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
522
530
|
"record.metadata.related": "Explore the catalog",
|
|
531
|
+
"record.metadata.resource.contacts": "Contacts for the resource",
|
|
523
532
|
"record.metadata.resourceCreated": "Created",
|
|
524
533
|
"record.metadata.resourcePublished": "Published",
|
|
525
534
|
"record.metadata.resourceUpdated": "Last updated",
|
package/translations/es.json
CHANGED
|
@@ -150,6 +150,14 @@
|
|
|
150
150
|
"editor.record.form.draft.updateAlert": "",
|
|
151
151
|
"editor.record.form.field.abstract": "",
|
|
152
152
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
153
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
154
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
155
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
156
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
157
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
158
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
159
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
160
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
153
161
|
"editor.record.form.field.contacts": "Punto de contacto - Correo ",
|
|
154
162
|
"editor.record.form.field.contacts.noContact": "",
|
|
155
163
|
"editor.record.form.field.contacts.placeholder": "",
|
|
@@ -159,6 +167,7 @@
|
|
|
159
167
|
"editor.record.form.field.legalConstraints": "",
|
|
160
168
|
"editor.record.form.field.license": "",
|
|
161
169
|
"editor.record.form.field.onlineLinkResources": "",
|
|
170
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "",
|
|
162
171
|
"editor.record.form.field.onlineResource.cancel": "",
|
|
163
172
|
"editor.record.form.field.onlineResource.confirm": "",
|
|
164
173
|
"editor.record.form.field.onlineResource.dialogTitle": "",
|
|
@@ -234,25 +243,25 @@
|
|
|
234
243
|
"editor.record.form.temporalExtents.addRange": "",
|
|
235
244
|
"editor.record.form.temporalExtents.date": "",
|
|
236
245
|
"editor.record.form.temporalExtents.range": "",
|
|
237
|
-
"editor.record.form.topics.
|
|
238
|
-
"editor.record.form.topics.
|
|
239
|
-
"editor.record.form.topics.
|
|
240
|
-
"editor.record.form.topics.
|
|
241
|
-
"editor.record.form.topics.
|
|
242
|
-
"editor.record.form.topics.
|
|
243
|
-
"editor.record.form.topics.
|
|
244
|
-
"editor.record.form.topics.
|
|
245
|
-
"editor.record.form.topics.
|
|
246
|
-
"editor.record.form.topics.
|
|
247
|
-
"editor.record.form.topics.
|
|
248
|
-
"editor.record.form.topics.
|
|
249
|
-
"editor.record.form.topics.
|
|
250
|
-
"editor.record.form.topics.
|
|
251
|
-
"editor.record.form.topics.
|
|
252
|
-
"editor.record.form.topics.
|
|
253
|
-
"editor.record.form.topics.
|
|
254
|
-
"editor.record.form.topics.
|
|
255
|
-
"editor.record.form.topics.
|
|
246
|
+
"editor.record.form.topics.iso.biota": "",
|
|
247
|
+
"editor.record.form.topics.iso.boundaries": "",
|
|
248
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
|
|
249
|
+
"editor.record.form.topics.iso.economy": "",
|
|
250
|
+
"editor.record.form.topics.iso.elevation": "",
|
|
251
|
+
"editor.record.form.topics.iso.environment": "",
|
|
252
|
+
"editor.record.form.topics.iso.farming": "",
|
|
253
|
+
"editor.record.form.topics.iso.geoscientificInformation": "",
|
|
254
|
+
"editor.record.form.topics.iso.health": "",
|
|
255
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
|
|
256
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "",
|
|
257
|
+
"editor.record.form.topics.iso.location": "",
|
|
258
|
+
"editor.record.form.topics.iso.oceans": "",
|
|
259
|
+
"editor.record.form.topics.iso.planningCadastre": "",
|
|
260
|
+
"editor.record.form.topics.iso.society": "",
|
|
261
|
+
"editor.record.form.topics.iso.structure": "",
|
|
262
|
+
"editor.record.form.topics.iso.transportation": "",
|
|
263
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "",
|
|
264
|
+
"editor.record.form.topics.iso.inlandWaters": "",
|
|
256
265
|
"editor.record.form.topics.placeholder": "",
|
|
257
266
|
"editor.record.form.updateFrequency.planned": "Este conjunto de datos se actualiza regularmente.",
|
|
258
267
|
"editor.record.importFromExternalFile.failure.body": "",
|
|
@@ -494,7 +503,6 @@
|
|
|
494
503
|
"record.metadata.preview.config.idle": "",
|
|
495
504
|
"record.metadata.preview.config.saved": "",
|
|
496
505
|
"record.metadata.preview.config.saving": "",
|
|
497
|
-
"record.metadata.producer": "",
|
|
498
506
|
"record.metadata.publication": "",
|
|
499
507
|
"record.metadata.publications": "{count, plural, =0{} one{} other{}}",
|
|
500
508
|
"record.metadata.quality": "",
|
|
@@ -520,6 +528,7 @@
|
|
|
520
528
|
"record.metadata.quality.updateFrequency.failed": "",
|
|
521
529
|
"record.metadata.quality.updateFrequency.success": "",
|
|
522
530
|
"record.metadata.related": "",
|
|
531
|
+
"record.metadata.resource.contacts": "",
|
|
523
532
|
"record.metadata.resourceCreated": "",
|
|
524
533
|
"record.metadata.resourcePublished": "",
|
|
525
534
|
"record.metadata.resourceUpdated": "",
|