diff --git a/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.css b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.html b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.html new file mode 100644 index 0000000000..67b0f94de2 --- /dev/null +++ b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.html @@ -0,0 +1,39 @@ +
+ +
+
+ +
+ {{ index }} +
+
+ {{ page.label }} +
+
+
+
+
+
+
+
+
diff --git a/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.spec.ts b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.spec.ts new file mode 100644 index 0000000000..2475072fbf --- /dev/null +++ b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.spec.ts @@ -0,0 +1,58 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { TopToolbarComponent } from './top-toolbar.component' +import { Component } from '@angular/core' +import { PublishButtonComponent } from '../publish-button/publish-button.component' +import { BehaviorSubject } from 'rxjs' +import { EditorFacade } from '@geonetwork-ui/feature/editor' +import { TranslateModule } from '@ngx-translate/core' +import { BreadcrumbsComponent } from './breadcrumbs.component' + +class EditorFacadeMock { + changedSinceSave$ = new BehaviorSubject(false) + alreadySavedOnce$ = new BehaviorSubject(false) +} + +@Component({ + selector: 'md-editor-publish-button', + template: '', + standalone: true, +}) +class MockPublishButtonComponent {} + +describe('BreadcrumbsComponent', () => { + let component: BreadcrumbsComponent + let fixture: ComponentFixture + let editorFacade: EditorFacadeMock + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TopToolbarComponent, TranslateModule.forRoot()], + providers: [ + { + provide: EditorFacade, + useClass: EditorFacadeMock, + }, + ], + }) + .overrideComponent(TopToolbarComponent, { + add: { + imports: [MockPublishButtonComponent], + }, + remove: { + imports: [PublishButtonComponent], + }, + }) + .compileComponents() + + fixture = TestBed.createComponent(BreadcrumbsComponent) + component = fixture.componentInstance + editorFacade = TestBed.inject(EditorFacade) as any + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) + + describe('save status', () => {}) +}) diff --git a/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.ts b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.ts new file mode 100644 index 0000000000..7d2fb2b7f0 --- /dev/null +++ b/apps/metadata-editor/src/app/edit/components/breadcrumbs/breadcrumbs.component.ts @@ -0,0 +1,38 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core' +import { CommonModule } from '@angular/common' +import { PublishButtonComponent } from '../publish-button/publish-button.component' +import { ButtonComponent } from '@geonetwork-ui/ui/inputs' +import { MatIconModule } from '@angular/material/icon' +import { TranslateModule } from '@ngx-translate/core' +import { EditorFieldPage } from '@geonetwork-ui/feature/editor' + +@Component({ + selector: 'md-editor-breadcrumbs', + standalone: true, + imports: [ + CommonModule, + PublishButtonComponent, + ButtonComponent, + MatIconModule, + TranslateModule, + ], + templateUrl: './breadcrumbs.component.html', + styleUrls: ['./breadcrumbs.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BreadcrumbsComponent { + @Input() selectedPage = 0 + @Input() pages: EditorFieldPage[] + + @Output() selectedPageChange = new EventEmitter() + + pageSectionClickHandler(index: number) { + this.selectedPageChange.emit(index) + } +} diff --git a/apps/metadata-editor/src/app/edit/components/top-toolbar/top-toolbar.component.html b/apps/metadata-editor/src/app/edit/components/top-toolbar/top-toolbar.component.html index aab1948240..89cd41f9d4 100644 --- a/apps/metadata-editor/src/app/edit/components/top-toolbar/top-toolbar.component.html +++ b/apps/metadata-editor/src/app/edit/components/top-toolbar/top-toolbar.component.html @@ -1,4 +1,4 @@ -
+
side_navigation diff --git a/apps/metadata-editor/src/app/edit/edit-page.component.html b/apps/metadata-editor/src/app/edit/edit-page.component.html index 9fc5cfabfe..b46940b482 100644 --- a/apps/metadata-editor/src/app/edit/edit-page.component.html +++ b/apps/metadata-editor/src/app/edit/edit-page.component.html @@ -1,11 +1,38 @@ -
-
- -
-
-
- + +
+
+ + +
+
+
+ +
+ +
+
+ + {{ + selectedPage === 0 + ? ('editor.record.form.bottomButtons.comeBackLater' | translate) + : ('editor.record.form.bottomButtons.previous' | translate) + }} + + editor.record.form.bottomButtons.next
-
-
+ diff --git a/apps/metadata-editor/src/app/edit/edit-page.component.ts b/apps/metadata-editor/src/app/edit/edit-page.component.ts index 7327286a2c..720fe63891 100644 --- a/apps/metadata-editor/src/app/edit/edit-page.component.ts +++ b/apps/metadata-editor/src/app/edit/edit-page.component.ts @@ -13,8 +13,14 @@ import { NotificationsContainerComponent, NotificationsService, } from '@geonetwork-ui/feature/notifications' -import { TranslateService } from '@ngx-translate/core' +import { TranslateModule, TranslateService } from '@ngx-translate/core' import { filter, Subscription, take } from 'rxjs' +import { FindPipe } from '../pipes/filter.pipe' +import { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component' +import { marker } from '@biesbjerg/ngx-translate-extract-marker' + +marker('editor.record.form.bottomButtons.comeBackLater') +marker('editor.record.form.bottomButtons.previous') @Component({ selector: 'md-editor-edit', @@ -29,18 +35,31 @@ import { filter, Subscription, take } from 'rxjs' PublishButtonComponent, TopToolbarComponent, NotificationsContainerComponent, + FindPipe, + BreadcrumbsComponent, + TranslateModule, ], }) export class EditPageComponent implements OnInit, OnDestroy { subscription = new Subscription() + fields$ = this.facade.recordFields$ + totalPages = 0 + selectedPage = 0 + constructor( private route: ActivatedRoute, private facade: EditorFacade, private notificationsService: NotificationsService, private translateService: TranslateService, private router: Router - ) {} + ) { + this.subscription.add( + this.fields$.subscribe((fields) => { + this.totalPages = fields.pages.length + }) + ) + } ngOnInit(): void { const [currentRecord, currentRecordSource, currentRecordAlreadySaved] = @@ -109,4 +128,23 @@ export class EditPageComponent implements OnInit, OnDestroy { ngOnDestroy() { this.subscription.unsubscribe() } + + previousPageButtonHandler() { + if (this.selectedPage === 0) { + this.router.navigate(['catalog', 'search']) + } else { + this.selectedPage-- + } + } + + nextPageButtonHandler() { + if (this.selectedPage === this.totalPages - 1) return + this.selectedPage++ + } + + selectedPageChange(index: number) { + this.selectedPage = index + } + + protected readonly marker = marker } diff --git a/apps/metadata-editor/src/app/pipes/filter.pipe.ts b/apps/metadata-editor/src/app/pipes/filter.pipe.ts index 4cbff21914..c8626d7ea0 100644 --- a/apps/metadata-editor/src/app/pipes/filter.pipe.ts +++ b/apps/metadata-editor/src/app/pipes/filter.pipe.ts @@ -1,10 +1,10 @@ import { Pipe, PipeTransform } from '@angular/core' @Pipe({ - name: 'filter', + name: 'find', standalone: true, }) -export class FilterPipe implements PipeTransform { +export class FindPipe implements PipeTransform { transform(array: any[], index: number): any { return array.find((item) => item.index === index) } diff --git a/apps/metadata-editor/tsconfig.json b/apps/metadata-editor/tsconfig.json index d2c6daf3e1..54f2b40f0e 100644 --- a/apps/metadata-editor/tsconfig.json +++ b/apps/metadata-editor/tsconfig.json @@ -19,11 +19,7 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "target": "es2020", - "lib": [ - "dom", - "es2020", - "dom.iterable" - ], + "lib": ["dom", "es2020", "dom.iterable"], "downlevelIteration": true }, "angularCompilerOptions": { diff --git a/libs/feature/editor/src/lib/+state/editor.reducer.ts b/libs/feature/editor/src/lib/+state/editor.reducer.ts index 425e3d0c41..7c9f322b16 100644 --- a/libs/feature/editor/src/lib/+state/editor.reducer.ts +++ b/libs/feature/editor/src/lib/+state/editor.reducer.ts @@ -2,7 +2,7 @@ import { Action, createReducer, on } from '@ngrx/store' import * as EditorActions from './editor.actions' import { CatalogRecord } from '@geonetwork-ui/common/domain/model/record' import { SaveRecordError } from './editor.models' -import { EditorFieldsConfig } from '../models/fields.model' +import { EditorConfig } from '../models/fields.model' import { DEFAULT_FIELDS } from '../fields.config' export const EDITOR_FEATURE_KEY = 'editor' @@ -22,7 +22,7 @@ export interface EditorState { saving: boolean saveError: SaveRecordError | null changedSinceSave: boolean - fieldsConfig: EditorFieldsConfig + fieldsConfig: EditorConfig } export interface EditorPartialState { diff --git a/libs/feature/editor/src/lib/+state/editor.selectors.ts b/libs/feature/editor/src/lib/+state/editor.selectors.ts index e9a601da80..e240f5c5e3 100644 --- a/libs/feature/editor/src/lib/+state/editor.selectors.ts +++ b/libs/feature/editor/src/lib/+state/editor.selectors.ts @@ -41,9 +41,17 @@ export const selectRecordFieldsConfig = createSelector( export const selectRecordFields = createSelector( selectEditorState, - (state: EditorState) => - state.fieldsConfig.map((fieldConfig) => ({ - config: fieldConfig, - value: state.record?.[fieldConfig.model] ?? null, - })) + (state: EditorState) => { + const fieldsConfig = state.fieldsConfig + fieldsConfig.pages.forEach((page) => { + page.sections.forEach((section) => { + section.fields.forEach((field) => { + if (state.record) { + field.value = state.record[field.model] + } + }) + }) + }) + return fieldsConfig + } ) diff --git a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html b/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html index 98f8503d27..8d30de79be 100644 --- a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +++ b/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html @@ -5,7 +5,7 @@ @@ -15,14 +15,14 @@
-

{{ formControl.value }} -

+ help @@ -42,7 +42,7 @@ class="h-[8rem]" [control]="formControl" [label]="config.labelKey | translate" - [hint]="config.hintKey | translate" + [hint]="config.hintKey! | translate" > diff --git a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts b/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts index 5077db478e..24f4e2a77a 100644 --- a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +++ b/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts @@ -25,10 +25,10 @@ import { FormFieldObjectComponent } from './form-field-object/form-field-object. import { FormFieldRichComponent } from './form-field-rich/form-field-rich.component' import { FormFieldSimpleComponent } from './form-field-simple/form-field-simple.component' import { FormFieldSpatialExtentComponent } from './form-field-spatial-extent/form-field-spatial-extent.component' -import { FormFieldConfig } from './form-field.model' import { FormFieldUpdateFrequencyComponent } from './form-field-update-frequency/form-field-update-frequency.component' import { CatalogRecordKeys } from '@geonetwork-ui/common/domain/model/record' import { FormFieldKeywordsComponent } from './form-field-keywords/form-field-keywords.component' +import { FormFieldConfig } from '../../../models/fields.model' @Component({ selector: 'gn-ui-form-field', @@ -65,6 +65,7 @@ export class FormFieldComponent { emitEvent: false, }) } + @Output() valueChange: Observable @ViewChild('titleInput') titleInput: ElementRef diff --git a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts b/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts deleted file mode 100644 index cbc9d543b3..0000000000 --- a/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +++ /dev/null @@ -1,43 +0,0 @@ -type BaseFormFieldType = - | 'text' - | 'number' - | 'rich' - | 'date' - | 'list' - | 'spatial_extent' - | 'temporal_extent' - | 'url' - | 'file' - | 'toggle' - -type AllFormFieldType = BaseFormFieldType | 'object' | 'array' - -interface FormFieldConfigBase { - type: AllFormFieldType - labelKey: string - hintKey?: string - tooltipKey?: string - required?: boolean - locked?: boolean - invalid?: boolean - invalidHintKey?: string -} - -export interface FormFieldConfigSimple extends FormFieldConfigBase { - type: BaseFormFieldType -} - -export interface FormFieldConfigArray extends FormFieldConfigBase { - type: 'array' - items: FormFieldConfig -} - -export interface FormFieldConfigObject extends FormFieldConfigBase { - type: 'object' - fields: Array -} - -export type FormFieldConfig = - | FormFieldConfigSimple - | FormFieldConfigArray - | FormFieldConfigObject diff --git a/libs/feature/editor/src/lib/components/record-form/form-field/index.ts b/libs/feature/editor/src/lib/components/record-form/form-field/index.ts index 053dede8e5..8555c39727 100644 --- a/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +++ b/libs/feature/editor/src/lib/components/record-form/form-field/index.ts @@ -9,4 +9,3 @@ export * from './form-field-object/form-field-object.component' export * from './form-field-array/form-field-array.component' export * from './form-field-spatial-extent/form-field-spatial-extent.component' export * from './form-field.component' -export * from './form-field.model' diff --git a/libs/feature/editor/src/lib/components/record-form/record-form.component.html b/libs/feature/editor/src/lib/components/record-form/record-form.component.html index 7b07459330..9057230299 100644 --- a/libs/feature/editor/src/lib/components/record-form/record-form.component.html +++ b/libs/feature/editor/src/lib/components/record-form/record-form.component.html @@ -1,11 +1,43 @@ -
- - - -
+ +
+ + +
+
+
+ {{ section.label }} +
+
+ {{ section.description }} +
+
+ + + + + +
+
+
+
+
diff --git a/libs/feature/editor/src/lib/components/record-form/record-form.component.ts b/libs/feature/editor/src/lib/components/record-form/record-form.component.ts index 310fa77fea..33b619474f 100644 --- a/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +++ b/libs/feature/editor/src/lib/components/record-form/record-form.component.ts @@ -1,8 +1,14 @@ import { CommonModule } from '@angular/common' -import { ChangeDetectionStrategy, Component } from '@angular/core' +import { ChangeDetectionStrategy, Component, Input } from '@angular/core' import { EditorFacade } from '../../+state/editor.facade' -import { EditorFieldState, EditorFieldValue } from '../../models/fields.model' +import { + EditorField, + EditorFieldPage, + EditorFieldValue, + EditorSection, +} from '../../models/fields.model' import { FormFieldComponent } from './form-field' +import { TranslateModule } from '@ngx-translate/core' @Component({ selector: 'gn-ui-record-form', @@ -10,21 +16,25 @@ import { FormFieldComponent } from './form-field' styleUrls: ['./record-form.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, - imports: [CommonModule, FormFieldComponent], + imports: [CommonModule, FormFieldComponent, TranslateModule], }) export class RecordFormComponent { - fields$ = this.facade.recordFields$ + @Input() page: EditorFieldPage constructor(public facade: EditorFacade) {} - handleFieldValueChange(field: EditorFieldState, newValue: EditorFieldValue) { - if (!field.config.model) { + handleFieldValueChange(model: string, newValue: EditorFieldValue) { + if (!model) { return } - this.facade.updateRecordField(field.config.model, newValue) + this.facade.updateRecordField(model, newValue) } - fieldTracker(index: number, field: EditorFieldState) { - return field.config.model + fieldTracker(index: number, field: EditorField): any { + return field.model + } + + sectionTracker(index: number, section: EditorSection): any { + return section.label } } diff --git a/libs/feature/editor/src/lib/expressions.spec.ts b/libs/feature/editor/src/lib/expressions.spec.ts index 6de626a823..e36b9e7fc2 100644 --- a/libs/feature/editor/src/lib/expressions.spec.ts +++ b/libs/feature/editor/src/lib/expressions.spec.ts @@ -1,13 +1,4 @@ import { evaluate, ExpressionEvaluator } from './expressions' -import { EditorFieldConfig } from './models/fields.model' - -const SAMPLE_CONFIG: EditorFieldConfig = { - formFieldConfig: { - labelKey: 'Metadata title', - type: 'text', - }, - model: 'myModel', -} const originalDate = window.Date window.Date = function () { @@ -22,7 +13,7 @@ describe('expressions', () => { evaluator = evaluate('${dateNow()}') }) it('returns the current time at evaluation', () => { - expect(evaluator({ config: SAMPLE_CONFIG, value: 'bla' })).toEqual( + expect(evaluator({ model: 'keywords', value: 'bla' })).toEqual( new Date() ) }) diff --git a/libs/feature/editor/src/lib/fields.config.ts b/libs/feature/editor/src/lib/fields.config.ts index cda10b5196..7626089523 100644 --- a/libs/feature/editor/src/lib/fields.config.ts +++ b/libs/feature/editor/src/lib/fields.config.ts @@ -1,71 +1,187 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker' -import { EditorFieldsConfig } from './models/fields.model' - -export const DEFAULT_FIELDS: EditorFieldsConfig = [ - { - model: 'title', - formFieldConfig: { - labelKey: 'Metadata title', - type: 'text', - }, +import { EditorConfig, EditorField, EditorSection } from './models/fields.model' + +/** + * This file contains the configuration of the fields that will be displayed in the editor. + * To add a new field, you need to create a new EditorField object in the fields part of this file. + * Then add it to the corresponding section in the sections part of this file. + * Finally, add the section to the corresponding page in the pages part of this file. + */ + +/************************************************************ + *************** FIELDS ***************** + ************************************************************ + */ + +export const RECORD_LICENSE_FIELD: EditorField = { + model: 'licenses', + formFieldConfig: { + labelKey: marker('editor.record.form.field.license'), }, - { - model: 'abstract', - formFieldConfig: { - labelKey: 'Abstract', - type: 'rich', - }, +} + +export const RECORD_KEYWORDS_FIELD: EditorField = { + model: 'keywords', + formFieldConfig: { + labelKey: marker('editor.record.form.field.keywords'), }, - { - model: 'uniqueIdentifier', - formFieldConfig: { - labelKey: 'Unique identifier', - type: 'text', - locked: true, - }, +} + +export const RECORD_UNIQUE_IDENTIFIER_FIELD: EditorField = { + model: 'uniqueIdentifier', + formFieldConfig: { + labelKey: marker('editor.record.form.field.uniqueIdentifier'), + locked: true, }, - { - model: 'recordUpdated', - formFieldConfig: { - labelKey: 'Record Updated', - type: 'text', - locked: true, - }, - onSaveProcess: '${dateNow()}', +} + +export const RECORD_RESOURCE_UPDATED_FIELD: EditorField = { + model: 'resourceUpdated', + formFieldConfig: { + labelKey: marker('editor.record.form.field.resourceUpdated'), }, - { - model: 'licenses', - formFieldConfig: { - labelKey: marker('editor.record.form.license'), - type: 'list', - }, +} + +export const RECORD_UPDATED_FIELD: EditorField = { + model: 'recordUpdated', + formFieldConfig: { + labelKey: marker('editor.record.form.field.recordUpdated'), + locked: true, }, - { - model: 'resourceUpdated', - formFieldConfig: { - labelKey: marker('editor.record.form.resourceUpdated'), - type: 'date', - }, + onSaveProcess: '${dateNow()}', +} + +export const RECORD_UPDATE_FREQUENCY_FIELD: EditorField = { + model: 'updateFrequency', + formFieldConfig: { + labelKey: marker('editor.record.form.field.updateFrequency'), }, - { - model: 'updateFrequency', - formFieldConfig: { - labelKey: marker('editor.record.form.updateFrequency'), - type: 'text', - }, +} + +export const RECORD_TEMPORAL_EXTENTS_FIELD: EditorField = { + model: 'temporalExtents', + formFieldConfig: { + labelKey: marker('editor.record.form.field.temporalExtents'), }, - { - model: 'temporalExtents', - formFieldConfig: { - labelKey: marker('editor.record.form.temporalExtents'), - type: 'list', - }, +} + +export const RECORD_TITLE_FIELD: EditorField = { + model: 'title', + formFieldConfig: { + labelKey: marker('editor.record.form.field.title'), }, - { - model: 'keywords', - formFieldConfig: { - labelKey: marker('editor.record.form.keywords'), - type: 'list', - }, +} + +export const RECORD_ABSTRACT_FIELD: EditorField = { + model: 'abstract', + formFieldConfig: { + labelKey: marker('editor.record.form.field.abstract'), }, -] +} + +/************************************************************ + *************** SECTIONS ***************** + ************************************************************ + */ + +export const TITLE_SECTION: EditorSection = { + label: '', + description: '', + hidden: false, + fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD], +} + +export const ABOUT_SECTION: EditorSection = { + label: marker('editor.record.form.section.about.label'), + description: marker('editor.record.form.section.about.description'), + hidden: false, + fields: [ + RECORD_UNIQUE_IDENTIFIER_FIELD, + RECORD_RESOURCE_UPDATED_FIELD, + RECORD_UPDATED_FIELD, + RECORD_UPDATE_FREQUENCY_FIELD, + RECORD_TEMPORAL_EXTENTS_FIELD, + ], +} + +export const GEOGRAPHICAL_COVERAGE_SECTION: EditorSection = { + label: marker('editor.record.form.section.geographicalCoverage.label'), + description: '', + hidden: false, + fields: [], +} + +export const ASSOCIATED_RESOURCES_SECTION: EditorSection = { + label: marker('editor.record.form.section.associatedResources.label'), + description: marker( + 'editor.record.form.section.associatedResources.description' + ), + hidden: false, + fields: [], +} + +export const ANNEXES_SECTION: EditorSection = { + label: marker('editor.record.form.section.annexes.label'), + description: '', + hidden: false, + fields: [], +} + +export const CLASSIFICATION_SECTION: EditorSection = { + label: marker('editor.record.form.section.classification.label'), + description: marker('editor.record.form.section.classification.description'), + hidden: false, + fields: [RECORD_KEYWORDS_FIELD], +} + +export const USE_AND_ACCESS_CONDITIONS_SECTION: EditorSection = { + label: marker('editor.record.form.section.useAndAccessConditions.label'), + description: '', + hidden: false, + fields: [RECORD_LICENSE_FIELD], +} + +export const DATA_MANAGERS_SECTION: EditorSection = { + label: marker('editor.record.form.section.dataManagers.label'), + description: marker('editor.record.form.section.dataManagers.description'), + hidden: false, + fields: [], +} + +export const DATA_POINT_OF_CONTACT_SECTION: EditorSection = { + label: marker('editor.record.form.section.dataPointOfContact.label'), + description: marker( + 'editor.record.form.section.dataPointOfContact.description' + ), + hidden: false, + fields: [], +} + +/************************************************************ + *************** PAGES ***************** + ************************************************************ + */ +export const DEFAULT_FIELDS: EditorConfig = { + pages: [ + { + index: 0, + label: marker('editor.record.form.page.description'), + sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION], + }, + { + index: 1, + label: marker('editor.record.form.page.ressources'), + sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION], + }, + { + index: 2, + label: marker('editor.record.form.page.accessAndContact'), + sections: [ + CLASSIFICATION_SECTION, + USE_AND_ACCESS_CONDITIONS_SECTION, + DATA_MANAGERS_SECTION, + DATA_POINT_OF_CONTACT_SECTION, + ], + }, + ], +} diff --git a/libs/feature/editor/src/lib/models/fields.model.ts b/libs/feature/editor/src/lib/models/fields.model.ts index 0dae06b007..ea51f9007b 100644 --- a/libs/feature/editor/src/lib/models/fields.model.ts +++ b/libs/feature/editor/src/lib/models/fields.model.ts @@ -1,15 +1,27 @@ -import { FormFieldConfig } from '../components/record-form/form-field' +import { CatalogRecordKeys } from '@geonetwork-ui/common/domain/model/record' // Expressions should be enclosed in `${}` to be recognized as such // eg. ${dateNow()} export type EditorFieldExpression = `$\{${string}}` -export interface EditorFieldConfig { +export type EditorFieldValue = string | number | boolean | unknown + +export interface FormFieldConfig { + labelKey: string + hintKey?: string + tooltipKey?: string + required?: boolean + locked?: boolean + invalid?: boolean + invalidHintKey?: string +} + +export interface EditorField { // configuration of the form field used as presentation; optional, nothing shown if not defined - formFieldConfig?: FormFieldConfig + formFieldConfig: FormFieldConfig // name of the target field in the record; will not change the record directly if not defined - model?: string + model?: CatalogRecordKeys // a hidden field won't show but can still be used to modify the record // FIXME: currently this is redundant with an absence of formFieldConfig but necessary for clarity @@ -17,13 +29,28 @@ export interface EditorFieldConfig { // the result of this expression will replace the field value on save onSaveProcess?: EditorFieldExpression + + value?: EditorFieldValue } -export type EditorFieldsConfig = EditorFieldConfig[] +export interface EditorSection { + label: string + description: string + hidden: boolean + fields: EditorField[] +} -export type EditorFieldValue = string | number | boolean | unknown +export interface EditorFieldPage { + index: number + label: string + sections: EditorSection[] +} + +export interface EditorConfig { + pages: EditorFieldPage[] +} export interface EditorFieldState { - config: EditorFieldConfig - value: string | number | boolean | unknown + model: string + value: EditorFieldValue } diff --git a/libs/feature/editor/src/lib/models/index.ts b/libs/feature/editor/src/lib/models/index.ts index 65975121b2..e0262b5dfe 100644 --- a/libs/feature/editor/src/lib/models/index.ts +++ b/libs/feature/editor/src/lib/models/index.ts @@ -1,2 +1,3 @@ export * from './wizard-field.model' export * from './wizard-field.type' +export * from './fields.model' diff --git a/libs/feature/editor/src/lib/services/editor.service.ts b/libs/feature/editor/src/lib/services/editor.service.ts index 9b7c005438..3ac726e4cb 100644 --- a/libs/feature/editor/src/lib/services/editor.service.ts +++ b/libs/feature/editor/src/lib/services/editor.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core' import { Observable, switchMap } from 'rxjs' import { map, tap } from 'rxjs/operators' import { CatalogRecord } from '@geonetwork-ui/common/domain/model/record' -import { EditorFieldsConfig } from '../models/fields.model' +import { EditorConfig } from '../models/fields.model' import { evaluate } from '../expressions' import { RecordsRepositoryInterface } from '@geonetwork-ui/common/domain/repository/records-repository.interface' @@ -15,17 +15,21 @@ export class EditorService { // returns the record as it was when saved, alongside its source saveRecord( record: CatalogRecord, - fieldsConfig: EditorFieldsConfig, + fieldsConfig: EditorConfig, generateNewUniqueIdentifier = false ): Observable<[CatalogRecord, string]> { const savedRecord = { ...record } + const fields = fieldsConfig.pages.flatMap((page) => + page.sections.flatMap((section) => section.fields) + ) + // run onSave processes - for (const field of fieldsConfig) { + for (const field of fields) { if (field.onSaveProcess && field.model) { const evaluator = evaluate(field.onSaveProcess) savedRecord[field.model] = evaluator({ - config: field, + model: field.model, value: record[field.model], }) } diff --git a/libs/feature/editor/tsconfig.json b/libs/feature/editor/tsconfig.json index cdea0bdb38..9e29358f76 100644 --- a/libs/feature/editor/tsconfig.json +++ b/libs/feature/editor/tsconfig.json @@ -16,11 +16,7 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "target": "es2020", - "lib": [ - "dom", - "es2020", - "dom.iterable" - ], + "lib": ["dom", "es2020", "dom.iterable"], "downlevelIteration": true }, "angularCompilerOptions": { diff --git a/libs/feature/editor/tsconfig.lib.json b/libs/feature/editor/tsconfig.lib.json index 7ca4377996..2a4c9a5e36 100644 --- a/libs/feature/editor/tsconfig.lib.json +++ b/libs/feature/editor/tsconfig.lib.json @@ -7,11 +7,7 @@ "declarationMap": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2020", - "dom.iterable" - ], + "lib": ["dom", "es2020", "dom.iterable"], "downlevelIteration": true }, "exclude": [ @@ -20,7 +16,5 @@ "**/*.test.ts", "jest.config.ts" ], - "include": [ - "**/*.ts" - ] + "include": ["**/*.ts"] } diff --git a/libs/util/shared/tsconfig.lib.json b/libs/util/shared/tsconfig.lib.json index 9bb502669e..02d129fa3b 100644 --- a/libs/util/shared/tsconfig.lib.json +++ b/libs/util/shared/tsconfig.lib.json @@ -7,11 +7,7 @@ "declarationMap": true, "inlineSources": true, "types": [], - "lib": [ - "dom", - "es2020", - "dom.iterable" - ] + "lib": ["dom", "es2020", "dom.iterable"] }, "exclude": [ "src/test-setup.ts", diff --git a/translations/de.json b/translations/de.json index 55feccb7c4..e42b867d3b 100644 --- a/translations/de.json +++ b/translations/de.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "unbekannt", "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden", "dropFile": "Datei ablegen", - "editor.record.form.keywords": "Schlagwörter", - "editor.record.form.license": "Lizenz", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "Schlagwörter", + "editor.record.form.field.license": "Lizenz", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/en.json b/translations/en.json index 1f3e28e966..dfbd0fda2d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "unknown", "downloads.wfs.featuretype.not.found": "The layer was not found", "dropFile": "drop file", - "editor.record.form.keywords": "Keywords", - "editor.record.form.license": "License", + "editor.record.form.bottomButtons.comeBackLater": "Come back later", + "editor.record.form.bottomButtons.next": "Next", + "editor.record.form.bottomButtons.previous": "Previous", + "editor.record.form.field.abstract": "Abstract", + "editor.record.form.field.keywords": "Keywords", + "editor.record.form.field.license": "License", + "editor.record.form.field.recordUpdated": "Record Updated", + "editor.record.form.field.resourceUpdated": "Resource Updated", + "editor.record.form.field.temporalExtents": "Temporal extents", + "editor.record.form.field.title": "Metadata title", + "editor.record.form.field.uniqueIdentifier": "Unique identifier", + "editor.record.form.field.updateFrequency": "Update frequency", "editor.record.form.license.cc-by": "Creative Commons CC-BY", "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA", "editor.record.form.license.cc-zero": "Creative Commons CC-0", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "Open Data Commons ODC-By", "editor.record.form.license.pddl": "Open Data Commons PDDL", "editor.record.form.license.unknown": "Unknown or absent", - "editor.record.form.resourceUpdated": "Last update date", - "editor.record.form.temporalExtents": "Temporal extent", + "editor.record.form.page.accessAndContact": "Access and contact", + "editor.record.form.page.description": "Resource description", + "editor.record.form.page.ressources": "Resources", + "editor.record.form.section.about.description": "This section describes the resource.", + "editor.record.form.section.about.label": "About the resource", + "editor.record.form.section.annexes.label": "Annexes", + "editor.record.form.section.associatedResources.description": "Drop files here to associate them with the resource.", + "editor.record.form.section.associatedResources.label": "Associated resources", + "editor.record.form.section.classification.description": "The classification has an impact on the access to the data.", + "editor.record.form.section.classification.label": "Classification", + "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data.", + "editor.record.form.section.dataManagers.label": "Data managers", + "editor.record.form.section.dataPointOfContact.description": "This information concerns the metadata.", + "editor.record.form.section.dataPointOfContact.label": "Data point of contact", + "editor.record.form.section.geographicalCoverage.label": "Geographical coverage", + "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions", "editor.record.form.temporalExtents.addDate": "Time instant", "editor.record.form.temporalExtents.addRange": "Time period", "editor.record.form.temporalExtents.date": "Date", "editor.record.form.temporalExtents.range": "Date range", - "editor.record.form.updateFrequency": "Update frequency", "editor.record.form.updateFrequency.planned": "The data should be updated regularly.", "editor.record.loadError.body": "The record could not be loaded:", "editor.record.loadError.closeMessage": "Understood", diff --git a/translations/es.json b/translations/es.json index 8973368432..10b2371b9d 100644 --- a/translations/es.json +++ b/translations/es.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", - "editor.record.form.keywords": "", - "editor.record.form.license": "", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "", + "editor.record.form.field.license": "", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/fr.json b/translations/fr.json index fb4d6e7462..2d079de290 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "inconnu", "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée", "dropFile": "Faites glisser votre fichier", - "editor.record.form.keywords": "Mots-clés", - "editor.record.form.license": "Licence", + "editor.record.form.bottomButtons.comeBackLater": "Revenir plus tard", + "editor.record.form.bottomButtons.next": "Suivant", + "editor.record.form.bottomButtons.previous": "Précédent", + "editor.record.form.field.abstract": "Résumé", + "editor.record.form.field.keywords": "Mots-clés", + "editor.record.form.field.license": "Licence", + "editor.record.form.field.recordUpdated": "Date de dernière révision", + "editor.record.form.field.resourceUpdated": "Date de dernière révision", + "editor.record.form.field.temporalExtents": "Étendue temporelle", + "editor.record.form.field.title": "Titre", + "editor.record.form.field.uniqueIdentifier": "Identifiant unique", + "editor.record.form.field.updateFrequency": "Fréquence de mise à jour", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "Non-reconnue ou absente", - "editor.record.form.resourceUpdated": "Date de dernière révision", - "editor.record.form.temporalExtents": "Étendue temporelle", + "editor.record.form.page.accessAndContact": "Acces et contact", + "editor.record.form.page.description": "Description de la ressource", + "editor.record.form.page.ressources": "Ressources", + "editor.record.form.section.about.description": "Ces informations concernent la donnée.", + "editor.record.form.section.about.label": "A propos de la ressource", + "editor.record.form.section.annexes.label": "Annexes", + "editor.record.form.section.associatedResources.description": "Déposez les jeux de données associées à cette fiche de métadonnée.", + "editor.record.form.section.associatedResources.label": "Ressources associees", + "editor.record.form.section.classification.description": "La classification a un impact sur la recherche du jeux de données.", + "editor.record.form.section.classification.label": "Classification", + "editor.record.form.section.dataManagers.description": "Cette information concerne la donnée.", + "editor.record.form.section.dataManagers.label": "Responsables de la donnee", + "editor.record.form.section.dataPointOfContact.description": "Cette information concerne la fiche de métadonnée.", + "editor.record.form.section.dataPointOfContact.label": "Point de contact de la metadonee", + "editor.record.form.section.geographicalCoverage.label": "Couverture geographique", + "editor.record.form.section.useAndAccessConditions.label": "Conditions d'acces et usage", "editor.record.form.temporalExtents.addDate": "Date déterminée", "editor.record.form.temporalExtents.addRange": "Période de temps", "editor.record.form.temporalExtents.date": "Date concernée", "editor.record.form.temporalExtents.range": "Période concernée", - "editor.record.form.updateFrequency": "Fréquence de mise à jour", "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/it.json b/translations/it.json index e7fff9fb95..672bef5dab 100644 --- a/translations/it.json +++ b/translations/it.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "sconosciuto", "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato", "dropFile": "Trascina il suo file", - "editor.record.form.keywords": "", - "editor.record.form.license": "Licenza", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "", + "editor.record.form.field.license": "Licenza", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "Non riconosciuta o assente", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/nl.json b/translations/nl.json index 1086aa0994..c3d8ff278c 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", - "editor.record.form.keywords": "", - "editor.record.form.license": "", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "", + "editor.record.form.field.license": "", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/pt.json b/translations/pt.json index 761e097ab1..477d75f32f 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", - "editor.record.form.keywords": "", - "editor.record.form.license": "", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "", + "editor.record.form.field.license": "", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "", diff --git a/translations/sk.json b/translations/sk.json index aa56902b73..2e660902c1 100644 --- a/translations/sk.json +++ b/translations/sk.json @@ -165,8 +165,18 @@ "downloads.format.unknown": "neznámy", "downloads.wfs.featuretype.not.found": "Vrstva nebola nájdená", "dropFile": "nahrať súbor", - "editor.record.form.keywords": "", - "editor.record.form.license": "Licencia", + "editor.record.form.bottomButtons.comeBackLater": "", + "editor.record.form.bottomButtons.next": "", + "editor.record.form.bottomButtons.previous": "", + "editor.record.form.field.abstract": "", + "editor.record.form.field.keywords": "", + "editor.record.form.field.license": "Licencia", + "editor.record.form.field.recordUpdated": "", + "editor.record.form.field.resourceUpdated": "", + "editor.record.form.field.temporalExtents": "", + "editor.record.form.field.title": "", + "editor.record.form.field.uniqueIdentifier": "", + "editor.record.form.field.updateFrequency": "", "editor.record.form.license.cc-by": "", "editor.record.form.license.cc-by-sa": "", "editor.record.form.license.cc-zero": "", @@ -176,13 +186,26 @@ "editor.record.form.license.odc-by": "", "editor.record.form.license.pddl": "", "editor.record.form.license.unknown": "Neznáme alebo chýbajúce", - "editor.record.form.resourceUpdated": "", - "editor.record.form.temporalExtents": "", + "editor.record.form.page.accessAndContact": "", + "editor.record.form.page.description": "", + "editor.record.form.page.ressources": "", + "editor.record.form.section.about.description": "", + "editor.record.form.section.about.label": "", + "editor.record.form.section.annexes.label": "", + "editor.record.form.section.associatedResources.description": "", + "editor.record.form.section.associatedResources.label": "", + "editor.record.form.section.classification.description": "", + "editor.record.form.section.classification.label": "", + "editor.record.form.section.dataManagers.description": "", + "editor.record.form.section.dataManagers.label": "", + "editor.record.form.section.dataPointOfContact.description": "", + "editor.record.form.section.dataPointOfContact.label": "", + "editor.record.form.section.geographicalCoverage.label": "", + "editor.record.form.section.useAndAccessConditions.label": "", "editor.record.form.temporalExtents.addDate": "", "editor.record.form.temporalExtents.addRange": "", "editor.record.form.temporalExtents.date": "", "editor.record.form.temporalExtents.range": "", - "editor.record.form.updateFrequency": "", "editor.record.form.updateFrequency.planned": "", "editor.record.loadError.body": "", "editor.record.loadError.closeMessage": "",