From cce34a521d282941fe58c53a3b4424d19aadcd8f Mon Sep 17 00:00:00 2001 From: Angi-Kinas <133115263+Angi-Kinas@users.noreply.github.com> Date: Tue, 5 Sep 2023 15:18:23 +0200 Subject: [PATCH] [editor] Show records in catalog and create routing (#606) * WIP * WIP * feat(editor): Clean up unnessecary code, add test file * feat(editor): Remove duplication of records count display * feat(editor): Remove unnessecary declaration in app.module * feat(editor): Fix import path * feat(editor): Make metadata-editor standalone * WIP: Make AppComponent standalone * feat(editor): Fix translation * feat(editor): Restructure folders for new components * feat(editor): Add translations, fix some tests * feat(editor): adjustments to tests to work with standalone components --------- Co-authored-by: Olivia Guyot --- apps/datahub/src/app/app.module.ts | 2 + apps/metadata-editor/src/app/app.component.ts | 1 + apps/metadata-editor/src/app/app.module.ts | 52 +++---- apps/metadata-editor/src/app/app.routes.ts | 49 +++++- .../app/create/create-page.component.spec.ts | 2 +- .../src/app/create/create-page.component.ts | 1 + .../dashboard-menu.component.html | 50 +++---- .../dashboard-menu.component.spec.ts | 56 ++----- .../dashboard-menu.component.ts | 21 +-- .../dashboard/dashboard-page.component.html | 65 ++------ .../dashboard-page.component.spec.ts | 133 ++--------------- .../app/dashboard/dashboard-page.component.ts | 26 +--- .../app/dashboard/dashboard-search.service.ts | 28 +--- .../src/app/dashboard/dashboard.model.ts | 1 + .../src/app/dashboard/dashboard.module.ts | 43 ------ .../search-header.component.spec.ts | 57 ++++++- .../search-header/search-header.component.ts | 6 + .../sidebar/sidebar.component.spec.ts | 48 ++---- .../dashboard/sidebar/sidebar.component.ts | 5 + .../src/app/edit/edit-page.component.spec.ts | 8 +- .../src/app/edit/edit-page.component.ts | 4 + .../all-records-list.component.css | 0 .../all-records-list.component.html | 36 +++++ .../all-records-list.component.spec.ts | 141 ++++++++++++++++++ .../all-records/all-records-list.component.ts | 33 ++++ .../records/my-draft/my-draft.component.css | 0 .../records/my-draft/my-draft.component.html | 1 + .../my-draft/my-draft.component.spec.ts | 20 +++ .../records/my-draft/my-draft.component.ts | 8 + .../my-library/my-library.component.css | 0 .../my-library/my-library.component.html | 1 + .../my-library/my-library.component.spec.ts | 20 +++ .../my-library/my-library.component.ts | 8 + .../my-org-records.component.css | 0 .../my-org-records.component.html | 1 + .../my-org-records.component.spec.ts | 21 +++ .../my-org-records.component.ts | 8 + .../my-records/my-records.component.css | 0 .../my-records/my-records.component.html | 1 + .../my-records/my-records.component.spec.ts | 20 +++ .../my-records/my-records.component.ts | 8 + .../sign-in/sign-in-page.component.spec.ts | 2 +- .../src/app/sign-in/sign-in-page.component.ts | 1 + apps/metadata-editor/src/main.ts | 1 - .../catalog/src/lib/feature-catalog.module.ts | 2 - libs/feature/editor/src/index.ts | 1 + .../wizard-field.component.spec.ts | 2 + .../editor/src/lib/feature-editor.module.ts | 8 +- .../record-form/record-form.component.spec.ts | 2 +- .../lib/record-form/record-form.component.ts | 3 + .../record/src/lib/feature-record.module.ts | 2 - libs/feature/router/src/lib/default/index.ts | 2 + .../search/src/lib/feature-search.module.ts | 2 - libs/ui/elements/src/index.ts | 1 + libs/ui/inputs/src/lib/ui-inputs.module.ts | 6 +- libs/ui/search/src/index.ts | 2 +- .../record-table/record-table.component.html | 88 +++++++---- .../record-table/record-table.component.ts | 3 +- libs/ui/search/src/lib/ui-search.module.ts | 6 +- libs/ui/widgets/src/lib/ui-widgets.module.ts | 6 +- ssr/formatter/src/app/app.module.ts | 3 +- translations/de.json | 10 +- translations/en.json | 10 +- translations/es.json | 9 +- translations/fr.json | 10 +- translations/it.json | 9 +- translations/nl.json | 9 +- translations/pt.json | 9 +- 68 files changed, 678 insertions(+), 516 deletions(-) delete mode 100644 apps/metadata-editor/src/app/dashboard/dashboard.module.ts create mode 100644 apps/metadata-editor/src/app/records/all-records/all-records-list.component.css create mode 100644 apps/metadata-editor/src/app/records/all-records/all-records-list.component.html create mode 100644 apps/metadata-editor/src/app/records/all-records/all-records-list.component.spec.ts create mode 100644 apps/metadata-editor/src/app/records/all-records/all-records-list.component.ts create mode 100644 apps/metadata-editor/src/app/records/my-draft/my-draft.component.css create mode 100644 apps/metadata-editor/src/app/records/my-draft/my-draft.component.html create mode 100644 apps/metadata-editor/src/app/records/my-draft/my-draft.component.spec.ts create mode 100644 apps/metadata-editor/src/app/records/my-draft/my-draft.component.ts create mode 100644 apps/metadata-editor/src/app/records/my-library/my-library.component.css create mode 100644 apps/metadata-editor/src/app/records/my-library/my-library.component.html create mode 100644 apps/metadata-editor/src/app/records/my-library/my-library.component.spec.ts create mode 100644 apps/metadata-editor/src/app/records/my-library/my-library.component.ts create mode 100644 apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.css create mode 100644 apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.html create mode 100644 apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.spec.ts create mode 100644 apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.ts create mode 100644 apps/metadata-editor/src/app/records/my-records/my-records.component.css create mode 100644 apps/metadata-editor/src/app/records/my-records/my-records.component.html create mode 100644 apps/metadata-editor/src/app/records/my-records/my-records.component.spec.ts create mode 100644 apps/metadata-editor/src/app/records/my-records/my-records.component.ts diff --git a/apps/datahub/src/app/app.module.ts b/apps/datahub/src/app/app.module.ts index ed98a5b092..10f8dc5ffc 100644 --- a/apps/datahub/src/app/app.module.ts +++ b/apps/datahub/src/app/app.module.ts @@ -67,6 +67,7 @@ import { UiDatavizModule } from '@geonetwork-ui/ui/dataviz' import { WEB_COMPONENT_EMBEDDER_URL } from '@geonetwork-ui/feature/record' import { LANGUAGES_LIST, UiCatalogModule } from '@geonetwork-ui/ui/catalog' import { METADATA_LANGUAGE } from '@geonetwork-ui/api/repository' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' export const metaReducers: MetaReducer[] = !environment.production ? [] : [] // https://github.com/nrwl/nx/issues/191 @@ -89,6 +90,7 @@ export const metaReducers: MetaReducer[] = !environment.production ? [] : [] ], imports: [ BrowserModule, + BrowserAnimationsModule, RouterModule.forRoot([], { initialNavigation: 'enabledBlocking', scrollPositionRestoration: 'enabled', diff --git a/apps/metadata-editor/src/app/app.component.ts b/apps/metadata-editor/src/app/app.component.ts index 97b0cb6e7c..b9c3f9f959 100644 --- a/apps/metadata-editor/src/app/app.component.ts +++ b/apps/metadata-editor/src/app/app.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core' + @Component({ selector: 'md-editor-root', templateUrl: './app.component.html', diff --git a/apps/metadata-editor/src/app/app.module.ts b/apps/metadata-editor/src/app/app.module.ts index 797fe96c13..b38f28b123 100644 --- a/apps/metadata-editor/src/app/app.module.ts +++ b/apps/metadata-editor/src/app/app.module.ts @@ -1,50 +1,40 @@ -import { NgModule } from '@angular/core' -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner' -import { BrowserModule } from '@angular/platform-browser' +import { importProvidersFrom, NgModule } from '@angular/core' import { RouterModule } from '@angular/router' -import { FeatureEditorModule } from '@geonetwork-ui/feature/editor' -import { FeatureSearchModule } from '@geonetwork-ui/feature/search' -import { UiElementsModule } from '@geonetwork-ui/ui/elements' -import { UiInputsModule } from '@geonetwork-ui/ui/inputs' -import { UiSearchModule } from '@geonetwork-ui/ui/search' +import { + FeatureSearchModule, + SearchFacade, +} from '@geonetwork-ui/feature/search' import { TRANSLATE_DEFAULT_CONFIG, UtilI18nModule, } from '@geonetwork-ui/util/i18n' import { TranslateModule } from '@ngx-translate/core' import { AppCommonModule } from './app.common.module' - import { AppComponent } from './app.component' import { appRoutes } from './app.routes' -import { CreatePageComponent } from './create/create-page.component' -import { DashboardModule } from './dashboard/dashboard.module' -import { EditPageComponent } from './edit/edit-page.component' -import { SignInPageComponent } from './sign-in/sign-in-page.component' import { FeatureCatalogModule } from '@geonetwork-ui/feature/catalog' +import { DashboardSearchService } from './dashboard/dashboard-search.service' +import { FeatureAuthModule } from '@geonetwork-ui/feature/auth' +import { BrowserModule } from '@angular/platform-browser' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' @NgModule({ - declarations: [ - AppComponent, - EditPageComponent, - CreatePageComponent, - SignInPageComponent, - ], + declarations: [AppComponent], imports: [ BrowserModule, - DashboardModule, - FeatureSearchModule, - UiElementsModule, - UiSearchModule, - AppCommonModule, + BrowserAnimationsModule, RouterModule.forRoot(appRoutes, { initialNavigation: 'enabledBlocking' }), - UiInputsModule, - FeatureEditorModule, - UtilI18nModule, - TranslateModule.forRoot(TRANSLATE_DEFAULT_CONFIG), - MatProgressSpinnerModule, - FeatureCatalogModule, ], - providers: [], + providers: [ + SearchFacade, + DashboardSearchService, + importProvidersFrom(FeatureAuthModule), + importProvidersFrom(FeatureSearchModule), + importProvidersFrom(FeatureCatalogModule), + importProvidersFrom(UtilI18nModule), + importProvidersFrom(TranslateModule.forRoot(TRANSLATE_DEFAULT_CONFIG)), + importProvidersFrom(AppCommonModule), + ], bootstrap: [AppComponent], }) export class AppModule {} diff --git a/apps/metadata-editor/src/app/app.routes.ts b/apps/metadata-editor/src/app/app.routes.ts index f55880374d..420eca16b0 100644 --- a/apps/metadata-editor/src/app/app.routes.ts +++ b/apps/metadata-editor/src/app/app.routes.ts @@ -4,9 +4,56 @@ import { SignInPageComponent } from './sign-in/sign-in-page.component' import { CreatePageComponent } from './create/create-page.component' import { EditPageComponent } from './edit/edit-page.component' import { EditRecordResolver } from './edit-record.resolver' +import { AllRecordsComponent } from './records/all-records/all-records-list.component' +import { MyOrgRecordsComponent } from './records/my-org-records/my-org-records.component' +import { MyRecordsComponent } from './records/my-records/my-records.component' +import { MyDraftComponent } from './records/my-draft/my-draft.component' +import { MyLibraryComponent } from './records/my-library/my-library.component' export const appRoutes: Route[] = [ - { path: '', component: DashboardPageComponent }, + { path: '', component: DashboardPageComponent, pathMatch: 'prefix' }, + { + path: 'records', + component: DashboardPageComponent, + outlet: 'primary', + children: [ + { + path: '', + redirectTo: 'all', + pathMatch: 'prefix', + }, + { + path: 'all', + title: 'All Records', + component: AllRecordsComponent, + pathMatch: 'prefix', + }, + { + path: 'my-org', + title: 'My Organisation', + component: MyOrgRecordsComponent, + pathMatch: 'prefix', + }, + { + path: 'my-records', + title: 'My Records', + component: MyRecordsComponent, + pathMatch: 'prefix', + }, + { + path: 'my-draft', + title: 'My Draft', + component: MyDraftComponent, + pathMatch: 'prefix', + }, + { + path: 'my-library', + title: 'My Library', + component: MyLibraryComponent, + pathMatch: 'prefix', + }, + ], + }, { path: 'sign-in', component: SignInPageComponent }, { path: 'create', component: CreatePageComponent }, { diff --git a/apps/metadata-editor/src/app/create/create-page.component.spec.ts b/apps/metadata-editor/src/app/create/create-page.component.spec.ts index 2cc2bcf3e9..6ce040474b 100644 --- a/apps/metadata-editor/src/app/create/create-page.component.spec.ts +++ b/apps/metadata-editor/src/app/create/create-page.component.spec.ts @@ -7,7 +7,7 @@ describe('CreatePageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [CreatePageComponent], + imports: [CreatePageComponent], }).compileComponents() fixture = TestBed.createComponent(CreatePageComponent) diff --git a/apps/metadata-editor/src/app/create/create-page.component.ts b/apps/metadata-editor/src/app/create/create-page.component.ts index c75ad1d623..f6e353e627 100644 --- a/apps/metadata-editor/src/app/create/create-page.component.ts +++ b/apps/metadata-editor/src/app/create/create-page.component.ts @@ -4,5 +4,6 @@ import { Component } from '@angular/core' selector: 'md-editor-create-page', templateUrl: './create-page.component.html', styleUrls: ['./create-page.component.css'], + standalone: true, }) export class CreatePageComponent {} diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.html b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.html index 06a9e005ed..052cff5b29 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.html +++ b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.html @@ -1,48 +1,48 @@
- - + - - - +
diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.spec.ts b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.spec.ts index d683421c56..823b8eb3af 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.spec.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.spec.ts @@ -1,65 +1,31 @@ -import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core' +import { NO_ERRORS_SCHEMA } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' -import { By } from '@angular/platform-browser' -import { BehaviorSubject } from 'rxjs' -import { DashboardFacade } from '../+state/dashboard.facade' +import { ActivatedRoute } from '@angular/router' +import { TranslateModule } from '@ngx-translate/core' +import { of } from 'rxjs' import { DashboardMenuComponent } from './dashboard-menu.component' -import clearAllMocks = jest.clearAllMocks - -class DashboardFacadeMock { - setActiveMenu = jest.fn() - activeMenu$ = new BehaviorSubject('') -} describe('DashboardMenuComponent', () => { let component: DashboardMenuComponent let fixture: ComponentFixture - let facade: DashboardFacadeMock beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [DashboardMenuComponent], - providers: [{ provide: DashboardFacade, useClass: DashboardFacadeMock }], + imports: [DashboardMenuComponent, TranslateModule.forRoot()], + providers: [ + { + provide: ActivatedRoute, + useValue: { params: of({ id: 1 }) }, + }, + ], schemas: [NO_ERRORS_SCHEMA], }).compileComponents() - - facade = TestBed.inject(DashboardFacade) as unknown as DashboardFacadeMock fixture = TestBed.createComponent(DashboardMenuComponent) component = fixture.componentInstance fixture.detectChanges() }) - afterEach(() => { - clearAllMocks() - }) it('should create', () => { expect(component).toBeTruthy() }) - describe('on menu click ', () => { - let myOrg: DebugElement - beforeEach(() => { - myOrg = fixture.debugElement.queryAll(By.css('.menu-item'))[0] - myOrg.nativeElement.click() - }) - it('sets active menu', () => { - expect(facade.setActiveMenu).toHaveBeenCalledTimes(1) - }) - }) - - describe('when a menu is active ', () => { - let myOrg: DebugElement - let catalog: DebugElement - beforeEach(() => { - facade.activeMenu$.next('my-org') - fixture.detectChanges() - myOrg = fixture.debugElement.queryAll(By.css('.menu-item'))[0] - catalog = fixture.debugElement.queryAll(By.css('.menu-item'))[1] - }) - it('add active class', () => { - expect(myOrg.classes['btn-active']).toBeTruthy() - }) - it('do not add active class to others menu', () => { - expect(catalog.classes['btn-active']).toBeFalsy() - }) - }) }) diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.ts b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.ts index 94065423b5..e11b833cf8 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard-menu/dashboard-menu.component.ts @@ -1,22 +1,15 @@ +import { CommonModule } from '@angular/common' import { ChangeDetectionStrategy, Component } from '@angular/core' -import { map } from 'rxjs/operators' -import { DashboardFacade } from '../+state/dashboard.facade' -import { DashboardMenuItem } from '../dashboard.model' +import { MatIconModule } from '@angular/material/icon' +import { RouterModule } from '@angular/router' +import { TranslateModule } from '@ngx-translate/core' @Component({ selector: 'md-editor-dashboard-menu', templateUrl: './dashboard-menu.component.html', styleUrls: ['./dashboard-menu.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [CommonModule, RouterModule, MatIconModule, TranslateModule], }) -export class DashboardMenuComponent { - constructor(private facade: DashboardFacade) {} - setActive(activeMenu: DashboardMenuItem) { - this.facade.setActiveMenu(activeMenu) - } - isActive$(menu: DashboardMenuItem) { - return this.facade.activeMenu$.pipe( - map((activeMenu) => activeMenu === menu) - ) - } -} +export class DashboardMenuComponent {} diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.html b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.html index 9774aeceaa..303b04c0bf 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.html +++ b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.html @@ -1,56 +1,13 @@ -
- -
-
- -
-
-
-

- catalog -

- -
-
- -
-
- results.records.hits.displayedOn -
-
- -
-
-
-
+
+
+ +
+
+ +
+ +
diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.spec.ts b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.spec.ts index c1ac85ebe6..ebf7945029 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.spec.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.spec.ts @@ -1,103 +1,42 @@ -import { - ChangeDetectionStrategy, - Component, - EventEmitter, - Input, - NO_ERRORS_SCHEMA, - Output, -} from '@angular/core' +import { NO_ERRORS_SCHEMA } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' -import { By } from '@angular/platform-browser' -import { Router } from '@angular/router' -import { SearchFacade, SearchService } from '@geonetwork-ui/feature/search' -import { BehaviorSubject } from 'rxjs' +import { SearchFacade } from '@geonetwork-ui/feature/search' import { DashboardPageComponent } from './dashboard-page.component' -import { DashboardSearchService } from './dashboard-search.service' -import { CatalogRecord } from '@geonetwork-ui/common/domain/record' - -const results = [{ md: true }] -const currentPage = 5 -const totalPages = 25 +import { CommonModule } from '@angular/common' +import { + PaginationButtonsComponent, + RecordTableComponent, +} from '../records/all-records/all-records-list.component.spec' -@Component({ - // eslint-disable-next-line - selector: 'gn-ui-record-table', - template: '', -}) -export class RecordTableComponent { - @Input() records: CatalogRecord[] - @Output() recordSelect = new EventEmitter() -} -@Component({ - // eslint-disable-next-line - selector: 'gn-ui-pagination-buttons', - template: '', -}) -export class PaginationButtonsComponent { - @Input() currentPage = 1 - @Input() totalPages = 1 - @Input() hideButton = false - @Output() newCurrentPageEvent = new EventEmitter() -} -class SearchFacadeMock { - results$ = new BehaviorSubject(results) - currentPage$ = new BehaviorSubject(currentPage) - totalPages$ = new BehaviorSubject(totalPages) - resultsHits$ = new BehaviorSubject({ hits: 1000 }) -} -class SearchServiceMock {} -class DashboardSearchServiceMock { - paginate = jest.fn() -} -class RouterMock { - navigate = jest.fn() -} +class SearchFacadeMock {} describe('DashboardPageComponent', () => { let component: DashboardPageComponent let fixture: ComponentFixture - let dashboardSearchService: DashboardSearchService - let router: Router beforeEach(async () => { await TestBed.configureTestingModule({ schemas: [NO_ERRORS_SCHEMA], - declarations: [ - DashboardPageComponent, - PaginationButtonsComponent, - RecordTableComponent, - ], + imports: [DashboardPageComponent], providers: [ - { provide: SearchFacade, useClass: SearchFacadeMock }, - { - provide: DashboardSearchService, - useClass: DashboardSearchServiceMock, - }, { provide: SearchFacade, useClass: SearchFacadeMock, }, - { - provide: Router, - useClass: RouterMock, - }, ], }) .overrideComponent(DashboardPageComponent, { set: { - changeDetection: ChangeDetectionStrategy.Default, - providers: [ - { - provide: SearchService, - useClass: SearchServiceMock, - }, + imports: [ + CommonModule, + RecordTableComponent, + PaginationButtonsComponent, ], + providers: [], }, }) .compileComponents() - dashboardSearchService = TestBed.inject(DashboardSearchService) - router = TestBed.inject(Router) fixture = TestBed.createComponent(DashboardPageComponent) component = fixture.componentInstance fixture.detectChanges() @@ -109,48 +48,4 @@ describe('DashboardPageComponent', () => { it('should create', () => { expect(component).toBeTruthy() }) - - describe('when search results', () => { - let table, pagination - beforeEach(() => { - table = fixture.debugElement.query( - By.directive(RecordTableComponent) - ).componentInstance - pagination = fixture.debugElement.query( - By.directive(PaginationButtonsComponent) - ).componentInstance - }) - it('displays record table', () => { - expect(table.records).toBe(results) - }) - it('displays pagination', () => { - expect(pagination).toBeTruthy() - expect(pagination.currentPage).toEqual(currentPage) - expect(pagination.totalPages).toEqual(totalPages) - }) - describe('when click on a record', () => { - beforeEach(() => { - table.recordSelect.emit({ uniqueIdentifier: 123 }) - }) - it('routes to record edition', () => { - expect(router.navigate).toHaveBeenCalledWith(['/edit', 123]) - }) - }) - describe('when click on pagination', () => { - beforeEach(() => { - pagination.newCurrentPageEvent.emit(3) - }) - it('paginates', () => { - expect(dashboardSearchService.paginate).toHaveBeenCalledWith(3) - }) - }) - }) - describe('on new record click', () => { - beforeEach(() => { - fixture.debugElement.query(By.css('.btn-default')).nativeElement.click() - }) - it('routes to create record page', () => { - expect(router.navigate).toHaveBeenCalledWith(['/create']) - }) - }) }) diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.ts b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.ts index a8a524e5b6..bb5794f3cf 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-page.component.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard-page.component.ts @@ -1,30 +1,18 @@ import { ChangeDetectionStrategy, Component } from '@angular/core' -import { Router } from '@angular/router' import { SearchFacade, SearchService } from '@geonetwork-ui/feature/search' -import { DashboardSearchService } from './dashboard-search.service' -import { CatalogRecord } from '@geonetwork-ui/common/domain/record' +import { RouterOutlet } from '@angular/router' +import { SidebarComponent } from './sidebar/sidebar.component' +import { SearchHeaderComponent } from './search-header/search-header.component' @Component({ selector: 'md-editor-dashboard', templateUrl: './dashboard-page.component.html', styleUrls: ['./dashboard-page.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, - providers: [SearchFacade, SearchService, DashboardSearchService], + providers: [SearchFacade, SearchService], + imports: [RouterOutlet, SidebarComponent, SearchHeaderComponent], + standalone: true, }) export class DashboardPageComponent { - constructor( - private router: Router, - public searchFacade: SearchFacade, - private dashSearchService: DashboardSearchService - ) {} - - paginate(page: number) { - this.dashSearchService.paginate(page) - } - createRecord() { - this.router.navigate(['/create']) - } - editRecord(record: CatalogRecord) { - this.router.navigate(['/edit', record.uniqueIdentifier]) - } + constructor(public searchFacade: SearchFacade) {} } diff --git a/apps/metadata-editor/src/app/dashboard/dashboard-search.service.ts b/apps/metadata-editor/src/app/dashboard/dashboard-search.service.ts index bfc4efcf4c..73b8511883 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard-search.service.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard-search.service.ts @@ -11,8 +11,7 @@ const includes = [ 'createDate', 'changeDate', 'userinfo', - 'cl_status', - 'isPublishedToAll', + 'format*', ] @Injectable() @@ -25,31 +24,8 @@ export class DashboardSearchService { this.facade.init('editor') this.facade .setConfigRequestFields(includes) - .setPagination(0, 10) + .setPagination(0, 15) .setSortBy(['desc', 'changeDate']) - - combineLatest([ - this.dashboardFacade.activeMenu$, - authService.user$, - ]).subscribe(([menu, user]) => { - let filters - switch (menu) { - case 'my-records': - filters = { - owner: { [user.id]: true }, - } - break - case 'my-org': - filters = { - Org: { [user.organisation]: true }, - } - break - case 'catalog': - default: - break - } - this.facade.setFilters(filters) - }) } paginate(page: number) { diff --git a/apps/metadata-editor/src/app/dashboard/dashboard.model.ts b/apps/metadata-editor/src/app/dashboard/dashboard.model.ts index 7bcf5ef289..13511ca68a 100644 --- a/apps/metadata-editor/src/app/dashboard/dashboard.model.ts +++ b/apps/metadata-editor/src/app/dashboard/dashboard.model.ts @@ -1,6 +1,7 @@ export type DashboardMenuItem = | 'my-org' | 'catalog' + | 'records' | 'my-records' | 'my-draft' | 'my-library' diff --git a/apps/metadata-editor/src/app/dashboard/dashboard.module.ts b/apps/metadata-editor/src/app/dashboard/dashboard.module.ts deleted file mode 100644 index 8ede656a19..0000000000 --- a/apps/metadata-editor/src/app/dashboard/dashboard.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { importProvidersFrom, NgModule } from '@angular/core' -import { MatIconModule } from '@angular/material/icon' -import { BrowserModule } from '@angular/platform-browser' -import { FeatureSearchModule } from '@geonetwork-ui/feature/search' -import { UiElementsModule } from '@geonetwork-ui/ui/elements' -import { UiSearchModule } from '@geonetwork-ui/ui/search' -import { TRANSLATE_DEFAULT_CONFIG } from '@geonetwork-ui/util/i18n' -import { LetDirective } from '@ngrx/component' -import { EffectsModule } from '@ngrx/effects' -import { StoreModule } from '@ngrx/store' -import { TranslateModule } from '@ngx-translate/core' -import { - EDITOR_DASHBOARD_FEATURE_STATE_KEY, - reducer, -} from './+state/dashboard.reducer' -import { DashboardMenuComponent } from './dashboard-menu/dashboard-menu.component' -import { DashboardPageComponent } from './dashboard-page.component' -import { SearchHeaderComponent } from './search-header/search-header.component' -import { SidebarComponent } from './sidebar/sidebar.component' -import { FeatureAuthModule } from '@geonetwork-ui/feature/auth' - -@NgModule({ - declarations: [ - DashboardPageComponent, - SidebarComponent, - SearchHeaderComponent, - DashboardMenuComponent, - ], - imports: [ - BrowserModule, - MatIconModule, - FeatureSearchModule, - UiElementsModule, - UiSearchModule, - LetDirective, - StoreModule.forFeature(EDITOR_DASHBOARD_FEATURE_STATE_KEY, reducer), - EffectsModule.forFeature(), - TranslateModule.forRoot(TRANSLATE_DEFAULT_CONFIG), - ], - exports: [DashboardPageComponent], - providers: [importProvidersFrom(FeatureAuthModule)], -}) -export class DashboardModule {} diff --git a/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.spec.ts b/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.spec.ts index fa98a4e3e3..a5adfd459e 100644 --- a/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.spec.ts +++ b/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.spec.ts @@ -2,16 +2,25 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' import { SearchHeaderComponent } from './search-header.component' -import { BehaviorSubject } from 'rxjs' +import { BehaviorSubject, of } from 'rxjs' import { AuthService, AvatarServiceInterface, } from '@geonetwork-ui/feature/auth' -import { USER_FIXTURE } from '@geonetwork-ui/common/fixtures' +import { summaryHits, USER_FIXTURE } from '@geonetwork-ui/common/fixtures' +import { StoreModule } from '@ngrx/store' +import { EffectsModule } from '@ngrx/effects' +import { TranslateModule } from '@ngx-translate/core' +import { TRANSLATE_DEFAULT_CONFIG } from '@geonetwork-ui/util/i18n' +import { Configuration } from '@geonetwork-ui/data-access/gn4' +import { OrganizationsServiceInterface } from '@geonetwork-ui/common/domain/organizations.service.interface' +import { SearchFacade, SearchService } from '@geonetwork-ui/feature/search' const user = USER_FIXTURE() class AuthServiceMock { user$ = new BehaviorSubject(user) + authReady = jest.fn(() => this._authSubject$) + _authSubject$ = new BehaviorSubject({}) } class AvatarServiceInterfaceMock { @@ -19,13 +28,39 @@ class AvatarServiceInterfaceMock { getProfileIcon = (hash: string) => `${hash}` } +class OrganisationsServiceMock { + organisationsCount$ = of(456) +} +class SearchFacadeMock { + init = jest.fn() + results$ = of(summaryHits) + setPagination = jest.fn(() => this) + setSortBy = jest.fn(() => this) + setConfigRequestFields = jest.fn(() => this) + setResultsLayout = jest.fn(() => this) + searchFilters$ = new BehaviorSubject(user) + authReady = jest.fn(() => this.searchFilters$) +} + +class searchServiceMock { + updateSearchFilters = jest.fn() + setSearch = jest.fn() + setSortBy = jest.fn() + setSortAndFilters = jest.fn() +} + describe('SearchHeaderComponent', () => { let component: SearchHeaderComponent let fixture: ComponentFixture beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [SearchHeaderComponent], + imports: [ + SearchHeaderComponent, + EffectsModule.forRoot(), + StoreModule.forRoot({}), + TranslateModule.forRoot(TRANSLATE_DEFAULT_CONFIG), + ], schemas: [NO_ERRORS_SCHEMA], providers: [ { provide: AuthService, useClass: AuthServiceMock }, @@ -33,6 +68,22 @@ describe('SearchHeaderComponent', () => { provide: AvatarServiceInterface, useClass: AvatarServiceInterfaceMock, }, + { + provide: Configuration, + useValue: new Configuration({ basePath: '/geonetwork/srv/api' }), + }, + { + provide: OrganizationsServiceInterface, + useClass: OrganisationsServiceMock, + }, + { + provide: SearchFacade, + useClass: SearchFacadeMock, + }, + { + provide: SearchService, + useClass: searchServiceMock, + }, ], }) .overrideComponent(SearchHeaderComponent, { diff --git a/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.ts b/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.ts index a18da87e34..2186a121a7 100644 --- a/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.ts +++ b/apps/metadata-editor/src/app/dashboard/search-header/search-header.component.ts @@ -1,14 +1,20 @@ +import { CommonModule } from '@angular/common' import { ChangeDetectionStrategy, Component } from '@angular/core' +import { MatIconModule } from '@angular/material/icon' import { AuthService, AvatarServiceInterface, } from '@geonetwork-ui/feature/auth' +import { LetDirective } from '@ngrx/component' +import { FeatureSearchModule } from '@geonetwork-ui/feature/search' @Component({ selector: 'md-editor-search-header', templateUrl: './search-header.component.html', styleUrls: ['./search-header.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [FeatureSearchModule, MatIconModule, CommonModule, LetDirective], }) export class SearchHeaderComponent { public placeholder = this.avatarService.placeholder diff --git a/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.spec.ts b/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.spec.ts index 15254aa5a0..b036c7dd07 100644 --- a/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.spec.ts +++ b/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.spec.ts @@ -1,37 +1,9 @@ -import { - ChangeDetectionStrategy, - Component, - Input, - NO_ERRORS_SCHEMA, -} from '@angular/core' +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' -import { AuthService } from '@geonetwork-ui/feature/auth' -import { USER_FIXTURE } from '@geonetwork-ui/common/fixtures' -import { LetDirective } from '@ngrx/component' -import { BehaviorSubject } from 'rxjs' +import { of } from 'rxjs' import { SidebarComponent } from './sidebar.component' -import { UserModel } from '@geonetwork-ui/common/domain/user.model' - -@Component({ - // eslint-disable-next-line - selector: 'md-editor-dashboard-menu', - template: '
', -}) -class DashboardMenuMockComponent {} - -@Component({ - // eslint-disable-next-line - selector: 'gn-ui-user-preview', - template: '
', -}) -export class UserPreviewComponent { - @Input() user: UserModel -} - -const user = USER_FIXTURE() -class AuthServiceMock { - user$ = new BehaviorSubject(user) -} +import { ActivatedRoute } from '@angular/router' +import { TranslateModule } from '@ngx-translate/core' describe('SidebarComponent', () => { let component: SidebarComponent @@ -39,13 +11,13 @@ describe('SidebarComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - SidebarComponent, - UserPreviewComponent, - DashboardMenuMockComponent, + imports: [SidebarComponent, TranslateModule.forRoot()], + providers: [ + { + provide: ActivatedRoute, + useValue: { params: of({ id: 1 }) }, + }, ], - imports: [LetDirective], - providers: [{ provide: AuthService, useClass: AuthServiceMock }], schemas: [NO_ERRORS_SCHEMA], }) .overrideComponent(SidebarComponent, { diff --git a/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.ts b/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.ts index 9c14646b07..4f9d569be7 100644 --- a/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.ts +++ b/apps/metadata-editor/src/app/dashboard/sidebar/sidebar.component.ts @@ -1,9 +1,14 @@ +import { CommonModule } from '@angular/common' import { ChangeDetectionStrategy, Component } from '@angular/core' +import { TranslateModule } from '@ngx-translate/core' +import { DashboardMenuComponent } from '../dashboard-menu/dashboard-menu.component' @Component({ selector: 'md-editor-sidebar', templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [DashboardMenuComponent, CommonModule, TranslateModule], }) export class SidebarComponent {} diff --git a/apps/metadata-editor/src/app/edit/edit-page.component.spec.ts b/apps/metadata-editor/src/app/edit/edit-page.component.spec.ts index 82ea363ee4..1641e0e0e9 100644 --- a/apps/metadata-editor/src/app/edit/edit-page.component.spec.ts +++ b/apps/metadata-editor/src/app/edit/edit-page.component.spec.ts @@ -1,8 +1,12 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { EditPageComponent } from './edit-page.component' import { ActivatedRoute } from '@angular/router' -import { EditorService } from '@geonetwork-ui/feature/editor' +import { + EditorService, + RecordFormComponent, +} from '@geonetwork-ui/feature/editor' import { NO_ERRORS_SCHEMA } from '@angular/core' +import { CommonModule } from '@angular/common' const getRoute = () => ({ snapshot: { @@ -22,7 +26,7 @@ describe('EditPageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [EditPageComponent], + imports: [EditPageComponent], schemas: [NO_ERRORS_SCHEMA], providers: [ { 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 15e79a83ea..78bf416866 100644 --- a/apps/metadata-editor/src/app/edit/edit-page.component.ts +++ b/apps/metadata-editor/src/app/edit/edit-page.component.ts @@ -1,11 +1,15 @@ +import { CommonModule } from '@angular/common' import { Component, OnInit } from '@angular/core' import { ActivatedRoute } from '@angular/router' import { EditorService } from '@geonetwork-ui/feature/editor' +import { RecordFormComponent } from '@geonetwork-ui/feature/editor' @Component({ selector: 'md-editor-edit', templateUrl: './edit-page.component.html', styleUrls: ['./edit-page.component.css'], + standalone: true, + imports: [RecordFormComponent, CommonModule], }) export class EditPageComponent implements OnInit { saving$ = this.editorService.saving$ diff --git a/apps/metadata-editor/src/app/records/all-records/all-records-list.component.css b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/records/all-records/all-records-list.component.html b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.html new file mode 100644 index 0000000000..00e744600a --- /dev/null +++ b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.html @@ -0,0 +1,36 @@ +
+
+

catalog

+ +
+
+ +
+
+ +
+
+
+
diff --git a/apps/metadata-editor/src/app/records/all-records/all-records-list.component.spec.ts b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.spec.ts new file mode 100644 index 0000000000..c8d2a20c23 --- /dev/null +++ b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.spec.ts @@ -0,0 +1,141 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { SearchFacade } from '@geonetwork-ui/feature/search' +import { DashboardSearchService } from '../../dashboard/dashboard-search.service' +import { AllRecordsComponent } from './all-records-list.component' +import { Component, EventEmitter, Input, Output } from '@angular/core' +import { CatalogRecord } from '@geonetwork-ui/common/domain/record' +import { By } from '@angular/platform-browser' +import { Router } from '@angular/router' +import { BehaviorSubject } from 'rxjs' +import { CommonModule } from '@angular/common' + +const results = [{ md: true }] +const currentPage = 5 +const totalPages = 25 + +@Component({ + // eslint-disable-next-line + selector: 'gn-ui-record-table', + template: '', + standalone: true, +}) +export class RecordTableComponent { + @Input() records: CatalogRecord[] + @Output() recordSelect = new EventEmitter() +} + +@Component({ + // eslint-disable-next-line + selector: 'gn-ui-pagination-buttons', + template: '', + standalone: true, +}) +export class PaginationButtonsComponent { + @Input() currentPage = 1 + @Input() totalPages = 1 + @Input() hideButton = false + @Output() newCurrentPageEvent = new EventEmitter() +} + +class SearchFacadeMock { + results$ = new BehaviorSubject(results) + currentPage$ = new BehaviorSubject(currentPage) + totalPages$ = new BehaviorSubject(totalPages) + resultsHits$ = new BehaviorSubject(1000) + setFavoritesOnly = jest.fn() + setSortBy = jest.fn() +} +class RouterMock { + navigate = jest.fn() +} +class DashboardSearchServiceMock { + paginate = jest.fn() +} + +describe('AllRecordsComponent', () => { + let component: AllRecordsComponent + let fixture: ComponentFixture + let dashboardSearchService: DashboardSearchService + let router: Router + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [AllRecordsComponent], + providers: [ + { + provide: SearchFacade, + useClass: SearchFacadeMock, + }, + { + provide: DashboardSearchService, + useClass: DashboardSearchServiceMock, + }, + { + provide: Router, + useClass: RouterMock, + }, + ], + }).overrideComponent(AllRecordsComponent, { + set: { + imports: [ + CommonModule, + RecordTableComponent, + PaginationButtonsComponent, + ], + }, + }) + dashboardSearchService = TestBed.inject(DashboardSearchService) + router = TestBed.inject(Router) + fixture = TestBed.createComponent(AllRecordsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) + + describe('when search results', () => { + let table, pagination + beforeEach(() => { + table = fixture.debugElement.query( + By.directive(RecordTableComponent) + ).componentInstance + pagination = fixture.debugElement.query( + By.directive(PaginationButtonsComponent) + ).componentInstance + }) + it('displays record table', () => { + expect(table.records).toBe(results) + }) + it('displays pagination', () => { + expect(pagination).toBeTruthy() + expect(pagination.currentPage).toEqual(currentPage) + expect(pagination.totalPages).toEqual(totalPages) + }) + describe('when click on a record', () => { + beforeEach(() => { + table.recordSelect.emit({ uniqueIdentifier: 123 }) + }) + it('routes to record edition', () => { + expect(router.navigate).toHaveBeenCalledWith(['/edit', 123]) + }) + }) + describe('when click on pagination', () => { + beforeEach(() => { + pagination.newCurrentPageEvent.emit(3) + }) + it('paginates', () => { + expect(dashboardSearchService.paginate).toHaveBeenCalledWith(3) + }) + }) + }) + describe('on new record click', () => { + beforeEach(() => { + fixture.debugElement.query(By.css('.btn-default')).nativeElement.click() + }) + it('routes to create record page', () => { + expect(router.navigate).toHaveBeenCalledWith(['/create']) + }) + }) +}) diff --git a/apps/metadata-editor/src/app/records/all-records/all-records-list.component.ts b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.ts new file mode 100644 index 0000000000..6f997c9706 --- /dev/null +++ b/apps/metadata-editor/src/app/records/all-records/all-records-list.component.ts @@ -0,0 +1,33 @@ +import { CommonModule } from '@angular/common' +import { Component } from '@angular/core' +import { MatIconModule } from '@angular/material/icon' +import { Router } from '@angular/router' +import { CatalogRecord } from '@geonetwork-ui/common/domain/record' +import { SearchFacade } from '@geonetwork-ui/feature/search' +import { DashboardSearchService } from '../../dashboard/dashboard-search.service' +import { UiSearchModule } from '@geonetwork-ui/ui/search' + +@Component({ + selector: 'md-editor-all-records-list', + templateUrl: './all-records-list.component.html', + styleUrls: ['./all-records-list.component.css'], + standalone: true, + imports: [CommonModule, MatIconModule, UiSearchModule], +}) +export class AllRecordsComponent { + constructor( + private router: Router, + public searchFacade: SearchFacade, + private dashSearchService: DashboardSearchService + ) {} + + paginate(page: number) { + this.dashSearchService.paginate(page) + } + createRecord() { + this.router.navigate(['/create']) + } + editRecord(record: CatalogRecord) { + this.router.navigate(['/edit', record.uniqueIdentifier]) + } +} diff --git a/apps/metadata-editor/src/app/records/my-draft/my-draft.component.css b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/records/my-draft/my-draft.component.html b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.html new file mode 100644 index 0000000000..2bfe9b5d65 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.html @@ -0,0 +1 @@ +

My Draft page works!

diff --git a/apps/metadata-editor/src/app/records/my-draft/my-draft.component.spec.ts b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.spec.ts new file mode 100644 index 0000000000..f5c9259520 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.spec.ts @@ -0,0 +1,20 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { MyDraftComponent } from './my-draft.component' + +describe('MyDraftComponent', () => { + let component: MyDraftComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [MyDraftComponent], + }) + fixture = TestBed.createComponent(MyDraftComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apps/metadata-editor/src/app/records/my-draft/my-draft.component.ts b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.ts new file mode 100644 index 0000000000..5033fd13ea --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-draft/my-draft.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'md-editor-my-my-draft', + templateUrl: './my-draft.component.html', + styleUrls: ['./my-draft.component.css'], +}) +export class MyDraftComponent {} diff --git a/apps/metadata-editor/src/app/records/my-library/my-library.component.css b/apps/metadata-editor/src/app/records/my-library/my-library.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/records/my-library/my-library.component.html b/apps/metadata-editor/src/app/records/my-library/my-library.component.html new file mode 100644 index 0000000000..00dd65e2fa --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-library/my-library.component.html @@ -0,0 +1 @@ +

My Library page works!

diff --git a/apps/metadata-editor/src/app/records/my-library/my-library.component.spec.ts b/apps/metadata-editor/src/app/records/my-library/my-library.component.spec.ts new file mode 100644 index 0000000000..85510261a6 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-library/my-library.component.spec.ts @@ -0,0 +1,20 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { MyLibraryComponent } from './my-library.component' + +describe('MyLibraryComponent', () => { + let component: MyLibraryComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [MyLibraryComponent], + }) + fixture = TestBed.createComponent(MyLibraryComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apps/metadata-editor/src/app/records/my-library/my-library.component.ts b/apps/metadata-editor/src/app/records/my-library/my-library.component.ts new file mode 100644 index 0000000000..187bbf7a13 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-library/my-library.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'md-editor-my-library', + templateUrl: './my-library.component.html', + styleUrls: ['./my-library.component.css'], +}) +export class MyLibraryComponent {} diff --git a/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.css b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.html b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.html new file mode 100644 index 0000000000..f8bbc1af63 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.html @@ -0,0 +1 @@ +

My Organisation Records page works!

diff --git a/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.spec.ts b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.spec.ts new file mode 100644 index 0000000000..d05a3cc1f9 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MyOrgRecordsComponent } from './my-org-records.component' + +describe('MyOrgRecordsComponent', () => { + let component: MyOrgRecordsComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [MyOrgRecordsComponent], + }) + fixture = TestBed.createComponent(MyOrgRecordsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.ts b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.ts new file mode 100644 index 0000000000..d89c422796 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-org-records/my-org-records.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'md-editor-my-org-records', + templateUrl: './my-org-records.component.html', + styleUrls: ['./my-org-records.component.css'], +}) +export class MyOrgRecordsComponent {} diff --git a/apps/metadata-editor/src/app/records/my-records/my-records.component.css b/apps/metadata-editor/src/app/records/my-records/my-records.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/metadata-editor/src/app/records/my-records/my-records.component.html b/apps/metadata-editor/src/app/records/my-records/my-records.component.html new file mode 100644 index 0000000000..17f5d0fe38 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-records/my-records.component.html @@ -0,0 +1 @@ +

My Records page works!

diff --git a/apps/metadata-editor/src/app/records/my-records/my-records.component.spec.ts b/apps/metadata-editor/src/app/records/my-records/my-records.component.spec.ts new file mode 100644 index 0000000000..6a6a8a1af0 --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-records/my-records.component.spec.ts @@ -0,0 +1,20 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { MyRecordsComponent } from './my-records.component' + +describe('MyRecordsComponent', () => { + let component: MyRecordsComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [MyRecordsComponent], + }) + fixture = TestBed.createComponent(MyRecordsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apps/metadata-editor/src/app/records/my-records/my-records.component.ts b/apps/metadata-editor/src/app/records/my-records/my-records.component.ts new file mode 100644 index 0000000000..3832aa68ed --- /dev/null +++ b/apps/metadata-editor/src/app/records/my-records/my-records.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'md-editor-my-records', + templateUrl: './my-records.component.html', + styleUrls: ['./my-records.component.css'], +}) +export class MyRecordsComponent {} diff --git a/apps/metadata-editor/src/app/sign-in/sign-in-page.component.spec.ts b/apps/metadata-editor/src/app/sign-in/sign-in-page.component.spec.ts index 87c625f853..3dbbabbc30 100644 --- a/apps/metadata-editor/src/app/sign-in/sign-in-page.component.spec.ts +++ b/apps/metadata-editor/src/app/sign-in/sign-in-page.component.spec.ts @@ -8,7 +8,7 @@ describe('SignInPageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [SignInPageComponent], + imports: [SignInPageComponent], }).compileComponents() fixture = TestBed.createComponent(SignInPageComponent) diff --git a/apps/metadata-editor/src/app/sign-in/sign-in-page.component.ts b/apps/metadata-editor/src/app/sign-in/sign-in-page.component.ts index 3c7fa9c8a0..209e08e0f0 100644 --- a/apps/metadata-editor/src/app/sign-in/sign-in-page.component.ts +++ b/apps/metadata-editor/src/app/sign-in/sign-in-page.component.ts @@ -4,5 +4,6 @@ import { Component } from '@angular/core' selector: 'md-editor-sign-in', templateUrl: './sign-in-page.component.html', styleUrls: ['./sign-in-page.component.css'], + standalone: true, }) export class SignInPageComponent {} diff --git a/apps/metadata-editor/src/main.ts b/apps/metadata-editor/src/main.ts index d887c09f30..2d638f248e 100644 --- a/apps/metadata-editor/src/main.ts +++ b/apps/metadata-editor/src/main.ts @@ -1,6 +1,5 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' import { loadAppConfig } from '@geonetwork-ui/util/app-config' - import { AppModule } from './app/app.module' loadAppConfig().then(() => { diff --git a/libs/feature/catalog/src/lib/feature-catalog.module.ts b/libs/feature/catalog/src/lib/feature-catalog.module.ts index 48061f3e38..f7856b0b09 100644 --- a/libs/feature/catalog/src/lib/feature-catalog.module.ts +++ b/libs/feature/catalog/src/lib/feature-catalog.module.ts @@ -2,7 +2,6 @@ import { InjectionToken, NgModule } from '@angular/core' import { SiteTitleComponent } from './site-title/site-title.component' import { UiCatalogModule } from '@geonetwork-ui/ui/catalog' import { - ApiModule, GroupsApiService, SearchApiService, SiteApiService, @@ -61,7 +60,6 @@ const organizationsServiceFactory = ( imports: [ UiCatalogModule, UiLayoutModule, - ApiModule, CommonModule, UtilI18nModule, TranslateModule.forChild(), diff --git a/libs/feature/editor/src/index.ts b/libs/feature/editor/src/index.ts index 775b68f310..c9e26ad446 100644 --- a/libs/feature/editor/src/index.ts +++ b/libs/feature/editor/src/index.ts @@ -1,2 +1,3 @@ export * from './lib/feature-editor.module' export * from './lib/services/editor.service' +export * from './lib/record-form/record-form.component' diff --git a/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.spec.ts b/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.spec.ts index 3e445aa32e..c789c85afb 100644 --- a/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.spec.ts +++ b/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.spec.ts @@ -8,6 +8,7 @@ import { BrowserModule, By } from '@angular/platform-browser' import { HttpClientTestingModule } from '@angular/common/http/testing' import { WizardService } from '../../services/wizard.service' import { UiInputsModule } from '@geonetwork-ui/ui/inputs' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' const DEFAULT_CHIPS_ITEMS_URL = (keys) => `https://apps.titellus.net/geonetwork/srv/api/registries/vocabularies/search?type=CONTAINS&thesaurus=external.place.regions&rows=200&q=${keys}&uri=*QUERY*&lang=eng` @@ -27,6 +28,7 @@ describe('WizardFieldsComponent', () => { UiInputsModule, BrowserModule, HttpClientTestingModule, + BrowserAnimationsModule, ], schemas: [NO_ERRORS_SCHEMA], }).compileComponents() diff --git a/libs/feature/editor/src/lib/feature-editor.module.ts b/libs/feature/editor/src/lib/feature-editor.module.ts index 99ce187274..220f83bacb 100644 --- a/libs/feature/editor/src/lib/feature-editor.module.ts +++ b/libs/feature/editor/src/lib/feature-editor.module.ts @@ -6,11 +6,9 @@ import { WizardComponent } from './components/wizard/wizard.component' import { WizardFieldComponent } from './components/wizard-field/wizard-field.component' import { UiInputsModule } from '@geonetwork-ui/ui/inputs' import { UiWidgetsModule } from '@geonetwork-ui/ui/widgets' -import { BrowserModule } from '@angular/platform-browser' import { TranslateModule } from '@ngx-translate/core' import { WizardSummarizeComponent } from './components/wizard-summarize/wizard-summarize.component' import { CommonModule } from '@angular/common' -import { RecordFormComponent } from './record-form/record-form.component' import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http' @NgModule({ @@ -18,21 +16,19 @@ import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http' WizardComponent, WizardFieldComponent, WizardSummarizeComponent, - RecordFormComponent, ], imports: [ - BrowserModule, + CommonModule, UiInputsModule, UiWidgetsModule, TranslateModule.forChild(), - CommonModule, MatDatepickerModule, MatNativeDateModule, MatFormFieldModule, HttpClientModule, HttpClientXsrfModule, ], - exports: [WizardComponent, WizardSummarizeComponent, RecordFormComponent], + exports: [WizardComponent, WizardSummarizeComponent], }) export class FeatureEditorModule {} export * from './services/wizard.service' diff --git a/libs/feature/editor/src/lib/record-form/record-form.component.spec.ts b/libs/feature/editor/src/lib/record-form/record-form.component.spec.ts index 8277ad44a0..c8bd8f094a 100644 --- a/libs/feature/editor/src/lib/record-form/record-form.component.spec.ts +++ b/libs/feature/editor/src/lib/record-form/record-form.component.spec.ts @@ -10,7 +10,7 @@ describe('RecordFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [RecordFormComponent], + imports: [RecordFormComponent], providers: [ { provide: EditorService, diff --git a/libs/feature/editor/src/lib/record-form/record-form.component.ts b/libs/feature/editor/src/lib/record-form/record-form.component.ts index d9033d2f11..447e9ba000 100644 --- a/libs/feature/editor/src/lib/record-form/record-form.component.ts +++ b/libs/feature/editor/src/lib/record-form/record-form.component.ts @@ -1,3 +1,4 @@ +import { CommonModule } from '@angular/common' import { ChangeDetectionStrategy, Component } from '@angular/core' import { EditorService, FormField } from '../services/editor.service' @@ -6,6 +7,8 @@ import { EditorService, FormField } from '../services/editor.service' templateUrl: './record-form.component.html', styleUrls: ['./record-form.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [CommonModule], }) export class RecordFormComponent { constructor(public editorService: EditorService) {} diff --git a/libs/feature/record/src/lib/feature-record.module.ts b/libs/feature/record/src/lib/feature-record.module.ts index d98c6c2c47..2b0b8d6b62 100644 --- a/libs/feature/record/src/lib/feature-record.module.ts +++ b/libs/feature/record/src/lib/feature-record.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' -import { ApiModule } from '@geonetwork-ui/data-access/gn4' import { UiMapModule } from '@geonetwork-ui/ui/map' import { StoreModule } from '@ngrx/store' import { EffectsModule } from '@ngrx/effects' @@ -46,7 +45,6 @@ import { DataViewShareComponent } from './data-view-share/data-view-share.compon ], imports: [ CommonModule, - ApiModule, StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer), EffectsModule.forFeature([MdViewEffects]), UiLayoutModule, diff --git a/libs/feature/router/src/lib/default/index.ts b/libs/feature/router/src/lib/default/index.ts index 0e66f8d977..c8e567672d 100644 --- a/libs/feature/router/src/lib/default/index.ts +++ b/libs/feature/router/src/lib/default/index.ts @@ -2,3 +2,5 @@ export * from './router.module' export * from './constants' export * from './state' export * from './router.service' +export * from './state/router.effects' +export * from './state/router.facade' diff --git a/libs/feature/search/src/lib/feature-search.module.ts b/libs/feature/search/src/lib/feature-search.module.ts index 9eb38e57d1..eecd3c8ab5 100644 --- a/libs/feature/search/src/lib/feature-search.module.ts +++ b/libs/feature/search/src/lib/feature-search.module.ts @@ -1,6 +1,5 @@ import { CommonModule } from '@angular/common' import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http' -import { ApiModule } from '@geonetwork-ui/data-access/gn4' import { UiSearchModule } from '@geonetwork-ui/ui/search' import { EffectsModule } from '@ngrx/effects' import { StoreModule } from '@ngrx/store' @@ -58,7 +57,6 @@ export const RECORD_URL_TOKEN = new InjectionToken('record-url-token') UiSearchModule, UiInputsModule, UiElementsModule, - ApiModule, FacetsModule, MatIconModule, UiWidgetsModule, diff --git a/libs/ui/elements/src/index.ts b/libs/ui/elements/src/index.ts index 289d360ce2..5b7c9c83c0 100644 --- a/libs/ui/elements/src/index.ts +++ b/libs/ui/elements/src/index.ts @@ -5,3 +5,4 @@ export * from './lib/metadata-catalog/metadata-catalog.component' export * from './lib/search-results-error/search-results-error.component' export * from './lib/thumbnail/thumbnail.component' export * from './lib/content-ghost/content-ghost.component' +export * from './lib/pagination-buttons/pagination-buttons.component' diff --git a/libs/ui/inputs/src/lib/ui-inputs.module.ts b/libs/ui/inputs/src/lib/ui-inputs.module.ts index 2f14034946..a5c5e02445 100644 --- a/libs/ui/inputs/src/lib/ui-inputs.module.ts +++ b/libs/ui/inputs/src/lib/ui-inputs.module.ts @@ -1,7 +1,5 @@ import { NgModule } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' -import { BrowserModule } from '@angular/platform-browser' -import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { UtilSharedModule } from '@geonetwork-ui/util/shared' import { TranslateModule } from '@ngx-translate/core' import { TagInputModule } from 'ngx-chips' @@ -35,6 +33,7 @@ import { import { CheckToggleComponent } from './check-toggle/check-toggle.component' import { CopyTextButtonComponent } from './copy-text-button/copy-text-button.component' import { MatTooltipModule } from '@angular/material/tooltip' +import { CommonModule } from '@angular/common' @NgModule({ declarations: [ @@ -61,10 +60,9 @@ import { MatTooltipModule } from '@angular/material/tooltip' CopyTextButtonComponent, ], imports: [ - BrowserModule, + CommonModule, TranslateModule.forChild(), NgxDropzoneModule, - BrowserAnimationsModule, FormsModule, ReactiveFormsModule, TagInputModule, diff --git a/libs/ui/search/src/index.ts b/libs/ui/search/src/index.ts index 780d214436..2cc1cf74dc 100644 --- a/libs/ui/search/src/index.ts +++ b/libs/ui/search/src/index.ts @@ -4,6 +4,6 @@ export * from './lib/facets/fixtures' export * from './lib/ui-search.module' export * from './lib/results-list/results-layout.config' export * from './lib/record-preview/record-preview.component' - export * from './lib/record-preview-feed/record-preview-feed.component' export * from './lib/record-preview-row/record-preview-row.component' +export * from './lib/record-table/record-table.component' diff --git a/libs/ui/search/src/lib/record-table/record-table.component.html b/libs/ui/search/src/lib/record-table/record-table.component.html index cbd3510d98..ad143820cb 100644 --- a/libs/ui/search/src/lib/record-table/record-table.component.html +++ b/libs/ui/search/src/lib/record-table/record-table.component.html @@ -1,37 +1,59 @@ -
-
-
record.metadata.title
-
record.metadata.status
-
- record.metadata.administrator +
+
+
+ results.records.hits.displayedOn
-
- record.metadata.updatedOn +
+
+
+ record.metadata.title +
+
+ record.metadata.formats +
+
+ record.metadata.author +
+
+ record.metadata.completion +
+
+ record.metadata.createdOn +
+
+
+
+ {{ record.title }} +
+
+ {{ + getStatus(record.extras?.isPublishedToAll) + }} +
+
+ person + {{ formatUserInfo(record.extras?.ownerInfo) }} +
+
+ {{ dateToString(record.recordUpdated) }} +
+
+ {{ dateToString(record.recordCreated) }} +
+
-
- record.metadata.createdOn -
-
-
-
- {{ record.title }} -
-
- {{ - getStatus(record.extras?.isPublishedToAll) - }} -
-
- person - {{ - formatUserInfo(record.extras?.ownerInfo) - }} -
-
{{ dateToString(record.recordUpdated) }}
-
{{ dateToString(record.recordCreated) }}
diff --git a/libs/ui/search/src/lib/record-table/record-table.component.ts b/libs/ui/search/src/lib/record-table/record-table.component.ts index b2cd39b7f1..0a15c75366 100644 --- a/libs/ui/search/src/lib/record-table/record-table.component.ts +++ b/libs/ui/search/src/lib/record-table/record-table.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core' +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' import { DATASET_RECORDS } from '@geonetwork-ui/common/fixtures' import { CatalogRecord } from '@geonetwork-ui/common/domain/record' @@ -9,6 +9,7 @@ import { CatalogRecord } from '@geonetwork-ui/common/domain/record' }) export class RecordTableComponent { @Input() records: CatalogRecord[] = DATASET_RECORDS + @Input() totalHits?: number @Output() recordSelect = new EventEmitter() dateToString(date: Date): string { diff --git a/libs/ui/search/src/lib/ui-search.module.ts b/libs/ui/search/src/lib/ui-search.module.ts index 34757a3294..39bff79431 100644 --- a/libs/ui/search/src/lib/ui-search.module.ts +++ b/libs/ui/search/src/lib/ui-search.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core' import { MatIconModule } from '@angular/material/icon' -import { BrowserModule } from '@angular/platform-browser' import { RouterLink } from '@angular/router' import { UtilSharedModule } from '@geonetwork-ui/util/shared' import { TranslateModule } from '@ngx-translate/core' @@ -20,13 +19,13 @@ import { import { ResultsListComponent } from './results-list/results-list.component' import { RecordPreviewComponent } from './record-preview/record-preview.component' import { TagInputModule } from 'ngx-chips' -import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { ResultsListItemComponent } from './results-list-item/results-list-item.component' import { UiWidgetsModule } from '@geonetwork-ui/ui/widgets' import { UiElementsModule } from '@geonetwork-ui/ui/elements' import { RecordPreviewFeedComponent } from './record-preview-feed/record-preview-feed.component' import { RecordTableComponent } from './record-table/record-table.component' +import { CommonModule } from '@angular/common' @NgModule({ declarations: [ @@ -44,11 +43,10 @@ import { RecordTableComponent } from './record-table/record-table.component' RecordTableComponent, ], imports: [ - BrowserModule, + CommonModule, TranslateModule.forChild(), NgxDropzoneModule, FacetsModule, - BrowserAnimationsModule, FormsModule, ReactiveFormsModule, TagInputModule, diff --git a/libs/ui/widgets/src/lib/ui-widgets.module.ts b/libs/ui/widgets/src/lib/ui-widgets.module.ts index 5c9865fc80..eda41bebf8 100644 --- a/libs/ui/widgets/src/lib/ui-widgets.module.ts +++ b/libs/ui/widgets/src/lib/ui-widgets.module.ts @@ -1,5 +1,4 @@ import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' import { UtilSharedModule } from '@geonetwork-ui/util/shared' import { TranslateModule } from '@ngx-translate/core' import { NgxDropzoneModule } from 'ngx-dropzone' @@ -7,7 +6,6 @@ import { ColorScaleComponent } from './color-scale/color-scale.component' import { ProgressBarComponent } from './progress-bar/progress-bar.component' import { StepBarComponent } from './step-bar/step-bar.component' import { TagInputModule } from 'ngx-chips' -import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { LoadingMaskComponent } from './loading-mask/loading-mask.component' import { MatProgressSpinnerModule } from '@angular/material/progress-spinner' @@ -15,6 +13,7 @@ import { PopupAlertComponent } from './popup-alert/popup-alert.component' import { BadgeComponent } from './badge/badge.component' import { MatIconModule } from '@angular/material/icon' import { SpinningLoaderComponent } from './spinning-loader/spinning-loader.component' +import { CommonModule } from '@angular/common' @NgModule({ declarations: [ @@ -27,10 +26,9 @@ import { SpinningLoaderComponent } from './spinning-loader/spinning-loader.compo SpinningLoaderComponent, ], imports: [ - BrowserModule, + CommonModule, TranslateModule.forChild(), NgxDropzoneModule, - BrowserAnimationsModule, FormsModule, ReactiveFormsModule, TagInputModule, diff --git a/ssr/formatter/src/app/app.module.ts b/ssr/formatter/src/app/app.module.ts index 72c44f07f8..86e877d681 100644 --- a/ssr/formatter/src/app/app.module.ts +++ b/ssr/formatter/src/app/app.module.ts @@ -1,5 +1,4 @@ import { HttpClientModule } from '@angular/common/http' -import { BrowserModule } from '@angular/platform-browser' import { APP_ID, NgModule } from '@angular/core' import { TransferHttpCacheModule } from '@nguniversal/common' @@ -7,7 +6,7 @@ import { AppComponent } from './app.component' @NgModule({ declarations: [AppComponent], - imports: [BrowserModule, HttpClientModule, TransferHttpCacheModule], + imports: [HttpClientModule, TransferHttpCacheModule], providers: [{ provide: APP_ID, useValue: 'serverApp' }], bootstrap: [AppComponent], }) diff --git a/translations/de.json b/translations/de.json index f8b8ac8efe..60be1c8f1c 100644 --- a/translations/de.json +++ b/translations/de.json @@ -106,8 +106,8 @@ "dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"", "dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"", "dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht geparst werden: \"{ info }\"", - "dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"", "dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"", + "dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"", "downloads.format.unknown": "unbekannt", "downloads.wfs.featuretype.not.found": "Die Schicht wurde nicht gefunden", "dropFile": "Datei ablegen", @@ -171,28 +171,29 @@ "record.action.view": "Ansehen", "record.externalViewer.open": "In externem Kartenviewer öffnen", "record.metadata.about": "Über", - "record.metadata.administrator": "Administrator", "record.metadata.api": "API", + "record.metadata.author": "", "record.metadata.catalog": "Katalog", + "record.metadata.completion": "", "record.metadata.contact": "Kontakt", "record.metadata.createdOn": "Erstellt am", "record.metadata.details": "Details", "record.metadata.download": "Downloads", + "record.metadata.formats": "", "record.metadata.isOpenData": "Open Data", "record.metadata.keywords": "Stichworte", "record.metadata.links": "Links", + "record.metadata.noUsage": "Für diesen Datensatz sind keine Verwendungsbedingungen angegeben.", "record.metadata.origin": "Herkunft", "record.metadata.preview": "Vorschau", "record.metadata.publications": "Veröffentlichungen", "record.metadata.related": "Ähnliche Datensätze", "record.metadata.sheet": "Ursprüngliche Metadatentabelle", - "record.metadata.status": "Status", "record.metadata.title": "Titel", "record.metadata.updateFrequency": "Aktualisierungsfrequenz", "record.metadata.updateStatus": "Aktualisierungsstatus", "record.metadata.updatedOn": "Zuletzt aktualisiert am", "record.metadata.usage": "Nutzung und Einschränkungen", - "record.metadata.noUsage": "Für diesen Datensatz sind keine Verwendungsbedingungen angegeben.", "record.more.details": "Weitere Details", "record.tab.chart": "Diagramm", "record.tab.data": "Tabelle", @@ -212,7 +213,6 @@ "search.error.receivedError": "Ein Fehler wurde empfangen", "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.", "search.field.any.placeholder": "Suche nach Datensätzen, Diensten und Karten ...", - "search.field.location.placeholder": "", "search.field.sortBy": "Sortieren nach:", "search.filters.byFormat": "Formate", "search.filters.byInspireKeyword": "INSPIRE-Schlüsselwort", diff --git a/translations/en.json b/translations/en.json index a093024676..561853c7e4 100644 --- a/translations/en.json +++ b/translations/en.json @@ -106,8 +106,8 @@ "dataset.error.http": "The data could not be loaded because of an HTTP error: \"{ info }\"", "dataset.error.network": "The data could not be loaded because of a network error or CORS limitations: \"{ info }\"", "dataset.error.parse": "The data was loaded but could not be parsed: \"{ info }\"", - "dataset.error.unsupportedType": "The following content type is unsupported: \"{ info }\"", "dataset.error.unknown": "The data cannot be displayed: \"{ info }\"", + "dataset.error.unsupportedType": "The following content type is unsupported: \"{ info }\"", "downloads.format.unknown": "unknown", "downloads.wfs.featuretype.not.found": "The layer was not found", "dropFile": "drop file", @@ -171,28 +171,29 @@ "record.action.view": "View", "record.externalViewer.open": "Open in the external map viewer", "record.metadata.about": "About", - "record.metadata.administrator": "administrator", "record.metadata.api": "API", + "record.metadata.author": "Author", "record.metadata.catalog": "Catalog", + "record.metadata.completion": "Completion", "record.metadata.contact": "Contact", "record.metadata.createdOn": "created on", "record.metadata.details": "Details", "record.metadata.download": "Downloads", + "record.metadata.formats": "Formats", "record.metadata.isOpenData": "Open Data", "record.metadata.keywords": "Keywords", "record.metadata.links": "Links", + "record.metadata.noUsage": "No usage conditions specified for this record.", "record.metadata.origin": "Lineage", "record.metadata.preview": "Preview", "record.metadata.publications": "publications", "record.metadata.related": "Related records", "record.metadata.sheet": "Original metadata sheet", - "record.metadata.status": "status", "record.metadata.title": "title", "record.metadata.updateFrequency": "Update Frequency", "record.metadata.updateStatus": "Update Status", "record.metadata.updatedOn": "Updated On", "record.metadata.usage": "Usage & constraints", - "record.metadata.noUsage": "No usage conditions specified for this record.", "record.more.details": "Read more", "record.tab.chart": "Chart", "record.tab.data": "Table", @@ -212,7 +213,6 @@ "search.error.receivedError": "An error was received", "search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.", "search.field.any.placeholder": "Search datasets, services and maps ...", - "search.field.location.placeholder": "", "search.field.sortBy": "Sort by:", "search.filters.byFormat": "Formats", "search.filters.byInspireKeyword": "INSPIRE keyword", diff --git a/translations/es.json b/translations/es.json index 4efd6e5dd6..bec4325fdc 100644 --- a/translations/es.json +++ b/translations/es.json @@ -107,6 +107,7 @@ "dataset.error.network": "", "dataset.error.parse": "", "dataset.error.unknown": "", + "dataset.error.unsupportedType": "", "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", @@ -170,28 +171,29 @@ "record.action.view": "", "record.externalViewer.open": "", "record.metadata.about": "", - "record.metadata.administrator": "", "record.metadata.api": "", + "record.metadata.author": "", "record.metadata.catalog": "", + "record.metadata.completion": "", "record.metadata.contact": "", "record.metadata.createdOn": "", "record.metadata.details": "", "record.metadata.download": "", + "record.metadata.formats": "", "record.metadata.isOpenData": "", "record.metadata.keywords": "", "record.metadata.links": "", + "record.metadata.noUsage": "", "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", "record.metadata.related": "", "record.metadata.sheet": "", - "record.metadata.status": "", "record.metadata.title": "", "record.metadata.updateFrequency": "", "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.noUsage": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -211,7 +213,6 @@ "search.error.receivedError": "", "search.error.recordNotFound": "", "search.field.any.placeholder": "", - "search.field.location.placeholder": "", "search.field.sortBy": "", "search.filters.byFormat": "", "search.filters.byInspireKeyword": "", diff --git a/translations/fr.json b/translations/fr.json index 9070f2345c..2afc849d50 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -106,8 +106,8 @@ "dataset.error.http": "Le chargement des données a échoué en raison d'une erreur HTTP: \"{ info }\"", "dataset.error.network": "Le chargement des données a échoué en raison d'une erreur réseau ou de limitations CORS: \"{ info }\"", "dataset.error.parse": "Les données ont été chargées mais leur décodage a échoué: \"{ info }\"", - "dataset.error.unsupportedType": "Le type de contenu suivant n'est pas pris en charge: \"{ info }\"", "dataset.error.unknown": "Les données ne peuvent être affichées: \"{ info }\"", + "dataset.error.unsupportedType": "Le type de contenu suivant n'est pas pris en charge: \"{ info }\"", "downloads.format.unknown": "inconnu", "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée", "dropFile": "Faites glisser votre fichier", @@ -171,28 +171,29 @@ "record.action.view": "Voir", "record.externalViewer.open": "Ouvrir dans le visualiseur externe", "record.metadata.about": "À propos", - "record.metadata.administrator": "", "record.metadata.api": "API", + "record.metadata.author": "", "record.metadata.catalog": "Catalogue", + "record.metadata.completion": "", "record.metadata.contact": "Contact", "record.metadata.createdOn": "", "record.metadata.details": "Détails", "record.metadata.download": "Téléchargements", + "record.metadata.formats": "", "record.metadata.isOpenData": "Donnée Ouverte", "record.metadata.keywords": "Mots clés", "record.metadata.links": "Liens", + "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données", "record.metadata.origin": "D'où viennent ces données ?", "record.metadata.preview": "Aperçu", "record.metadata.publications": "données", "record.metadata.related": "Voir aussi", "record.metadata.sheet": "Fiche de métadonnées d'origine", - "record.metadata.status": "statut", "record.metadata.title": "titre", "record.metadata.updateFrequency": "Fréquence de mise à jour", "record.metadata.updateStatus": "Statut de mise à jour", "record.metadata.updatedOn": "Dernière mise à jour", "record.metadata.usage": "Conditions d'utilisation", - "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données", "record.more.details": "Détails", "record.tab.chart": "Graphique", "record.tab.data": "Tableau", @@ -212,7 +213,6 @@ "search.error.receivedError": "Erreur retournée", "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.", "search.field.any.placeholder": "ex: cadastre, littoral, antennes", - "search.field.location.placeholder": "", "search.field.sortBy": "Trier par :", "search.filters.byFormat": "Formats", "search.filters.byInspireKeyword": "Mot-clé INSPIRE", diff --git a/translations/it.json b/translations/it.json index 7a8dc9ccdf..d1de689e27 100644 --- a/translations/it.json +++ b/translations/it.json @@ -107,6 +107,7 @@ "dataset.error.network": "", "dataset.error.parse": "", "dataset.error.unknown": "", + "dataset.error.unsupportedType": "", "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", @@ -170,28 +171,29 @@ "record.action.view": "", "record.externalViewer.open": "", "record.metadata.about": "", - "record.metadata.administrator": "", "record.metadata.api": "", + "record.metadata.author": "", "record.metadata.catalog": "", + "record.metadata.completion": "", "record.metadata.contact": "", "record.metadata.createdOn": "", "record.metadata.details": "", "record.metadata.download": "", + "record.metadata.formats": "", "record.metadata.isOpenData": "", "record.metadata.keywords": "", "record.metadata.links": "", + "record.metadata.noUsage": "", "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", "record.metadata.related": "", "record.metadata.sheet": "", - "record.metadata.status": "", "record.metadata.title": "", "record.metadata.updateFrequency": "", "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.noUsage": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -211,7 +213,6 @@ "search.error.receivedError": "", "search.error.recordNotFound": "", "search.field.any.placeholder": "", - "search.field.location.placeholder": "", "search.field.sortBy": "", "search.filters.byFormat": "", "search.filters.byInspireKeyword": "", diff --git a/translations/nl.json b/translations/nl.json index 34d4420419..3e579a8043 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -107,6 +107,7 @@ "dataset.error.network": "", "dataset.error.parse": "", "dataset.error.unknown": "", + "dataset.error.unsupportedType": "", "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", @@ -170,28 +171,29 @@ "record.action.view": "", "record.externalViewer.open": "", "record.metadata.about": "", - "record.metadata.administrator": "", "record.metadata.api": "", + "record.metadata.author": "", "record.metadata.catalog": "", + "record.metadata.completion": "", "record.metadata.contact": "", "record.metadata.createdOn": "", "record.metadata.details": "", "record.metadata.download": "", + "record.metadata.formats": "", "record.metadata.isOpenData": "", "record.metadata.keywords": "", "record.metadata.links": "", + "record.metadata.noUsage": "", "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", "record.metadata.related": "", "record.metadata.sheet": "", - "record.metadata.status": "", "record.metadata.title": "", "record.metadata.updateFrequency": "", "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.noUsage": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -211,7 +213,6 @@ "search.error.receivedError": "", "search.error.recordNotFound": "", "search.field.any.placeholder": "", - "search.field.location.placeholder": "", "search.field.sortBy": "", "search.filters.byFormat": "", "search.filters.byInspireKeyword": "", diff --git a/translations/pt.json b/translations/pt.json index 0291fee6f1..7b642a274f 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -107,6 +107,7 @@ "dataset.error.network": "", "dataset.error.parse": "", "dataset.error.unknown": "", + "dataset.error.unsupportedType": "", "downloads.format.unknown": "", "downloads.wfs.featuretype.not.found": "", "dropFile": "", @@ -170,28 +171,29 @@ "record.action.view": "", "record.externalViewer.open": "", "record.metadata.about": "", - "record.metadata.administrator": "", "record.metadata.api": "", + "record.metadata.author": "", "record.metadata.catalog": "", + "record.metadata.completion": "", "record.metadata.contact": "", "record.metadata.createdOn": "", "record.metadata.details": "", "record.metadata.download": "", + "record.metadata.formats": "", "record.metadata.isOpenData": "", "record.metadata.keywords": "", "record.metadata.links": "", + "record.metadata.noUsage": "", "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", "record.metadata.related": "", "record.metadata.sheet": "", - "record.metadata.status": "", "record.metadata.title": "", "record.metadata.updateFrequency": "", "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.noUsage": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -211,7 +213,6 @@ "search.error.receivedError": "", "search.error.recordNotFound": "", "search.field.any.placeholder": "", - "search.field.location.placeholder": "", "search.field.sortBy": "", "search.filters.byFormat": "", "search.filters.byInspireKeyword": "",