KON-616 Als Administrator möchte ich die Stammdaten auf einer Seite konfigurieren können um nicht zwischen verschiedenen Seiten wechseln zu müssen
KON-613 Als Anwender möchte ich, dass Expandables nur so hoch sind wie es aktuell sichtbare Inhalte erforderlich machen, um unnötige Weißflächen zu vermeiden.
KON-680 LDAP-Synchronisationsnotiz in eigenes Feld packen
diff --git a/i18n/admin.de.json b/i18n/admin.de.json
index dc2864a..cb97b9f 100644
--- a/i18n/admin.de.json
+++ b/i18n/admin.de.json
@@ -32,5 +32,8 @@
"Type": "Typ",
"Description": "Beschreibung",
"New": "Neuen Adresstyp anlegen"
+ },
+ "AdminSettings": {
+ "Title": "Übersicht Stammdatenverwaltung"
}
}
diff --git a/i18n/contacts.de.json b/i18n/contacts.de.json
index 78fd4f0..9f0388d 100644
--- a/i18n/contacts.de.json
+++ b/i18n/contacts.de.json
@@ -26,6 +26,8 @@
"DSGVO-advanced-filter-deletion-lock-exceeded": "Filterung nach Kontakten mit abgelaufener Löschsperre",
"DSGVO-advanced-filter-expiring-data-in-past": "Filterung nach Kontakten mit überschrittenem Ablaufdatum",
"DeleteLockExpired": "Löschsperre abgelaufen",
- "ExpieringDateExceed": "Ablaufdatum überschritten"
+ "ExpieringDateExceed": "Ablaufdatum überschritten",
+ "NewContactPersonData": "Neuen Kontaktperson hinzufügen",
+ "EditContactPersonData": "Kontaktperson bearbeiten"
}
}
diff --git a/package.json b/package.json
index 97bb3cf..82c914b 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,8 @@
"sy-build-prod": "npm run sy-pre-build && ng build --prod --aot --base-href /contactdatabase/ && npm run sy-post-build",
"start-in-docker": "npm run sy-pre-start && ng serve --optimization=false --vendor-chunk --common-chunk --host=0.0.0.0 --disableHostCheck=true --proxy-config proxy-docker.conf.json",
"start-in-docker-unsecure": "npm run sy-pre-start && ng serve --optimization=false --vendor-chunk --common-chunk --host=0.0.0.0 --disableHostCheck=true --proxy-config proxy-docker-unsecure.conf.json",
- "sl": "npm run start-local"
+ "sl": "npm run start-local",
+ "si": "npm run start-integration"
},
"private": true,
"dependencies": {
@@ -44,8 +45,8 @@
"@ngrx/store-devtools": "^8.6.0",
"@ngx-translate/core": "^11.0.1",
"@ngx-translate/http-loader": "^4.0.0",
- "ag-grid-angular": "^21.2.2",
- "ag-grid-community": "^21.2.2",
+ "ag-grid-angular": "24.1.0",
+ "ag-grid-community": "24.1.0",
"angular-font-awesome": "^3.1.2",
"angular2-notifications": "^2.0.0",
"bootstrap": "^4.4.1",
diff --git a/src/app/pages/admin/address-types/address-types-details/address-types-details.component.html b/src/app/pages/admin/address-types/address-types-details/address-types-details.component.html
index a81f0be..3f920f9 100644
--- a/src/app/pages/admin/address-types/address-types-details/address-types-details.component.html
+++ b/src/app/pages/admin/address-types/address-types-details/address-types-details.component.html
@@ -15,8 +15,8 @@
<div>
<!-- type -->
<div class="form-group row">
- <label for="addressTypesTyp" class="col-sm-2 col-form-label">{{ 'AddressTypes.Type' | translate }}</label>
- <div class="col-sm-6">
+ <label for="addressTypesTyp" class="col-sm-4 col-form-label">{{ 'AddressTypes.Type' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
@@ -31,8 +31,8 @@
<!-- description -->
<div class="form-group row">
- <label for="addressTypesDescription" class="col-sm-2 col-form-label">{{ 'AddressTypes.Description' | translate }}</label>
- <div class="col-sm-6">
+ <label for="addressTypesDescription" class="col-sm-4 col-form-label">{{ 'AddressTypes.Description' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
diff --git a/src/app/pages/admin/address-types/address-types-details/address-types-details.component.scss b/src/app/pages/admin/address-types/address-types-details/address-types-details.component.scss
index c9eeb99..c75060d 100644
--- a/src/app/pages/admin/address-types/address-types-details/address-types-details.component.scss
+++ b/src/app/pages/admin/address-types/address-types-details/address-types-details.component.scss
@@ -1,18 +1,24 @@
/********************************************************************************
- * Copyright (c) 2020 Contributors to the Eclipse Foundation
- *
- * See the NOTICE file(s) distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- ********************************************************************************/
+* Copyright (c) 2020 Contributors to the Eclipse Foundation
+*
+* See the NOTICE file(s) distributed with this work for additional
+* information regarding copyright ownership.
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v. 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0.
+*
+* SPDX-License-Identifier: EPL-2.0
+********************************************************************************/
button {
- margin: 20px 10px 10px 0;
+ margin: 14px 0px 10px 15px;
}
+
h4 {
- padding-bottom: 15px;
+ padding: 15px;
+ padding-top: 18px;
+}
+
+div.form-group.row {
+ padding-left: 15px;
}
diff --git a/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.html b/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.html
index a4828a9..561ea58 100644
--- a/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.html
+++ b/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.html
@@ -15,8 +15,8 @@
<div>
<!-- type -->
<div class="form-group row">
- <label for="communicationTypesTyp" class="col-sm-2 col-form-label">{{ 'CommunicationTypes.Type' | translate }}</label>
- <div class="col-sm-6">
+ <label for="communicationTypesTyp" class="col-sm-4 col-form-label">{{ 'CommunicationTypes.Type' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
@@ -28,23 +28,12 @@
autocomplete="off"
/>
</div>
- <div class="col-sm-1"></div>
- <div class="col-sm-2">
- <input
- type="checkbox"
- class="form-check-input"
- id="communicationTypesEditable"
- [ngrxFormControlState]="((communicationTypesSandbox.formState$ | async)?.controls)['editable']"
- onclick="return false;"
- />
- <label for="communicationTypesEditable" class="form-check-label">{{ 'CommunicationTypes.Editable' | translate }}</label>
- </div>
</div>
<!-- description -->
<div class="form-group row">
- <label for="communicationTypesDescription" class="col-sm-2 col-form-label">{{ 'CommunicationTypes.Description' | translate }}</label>
- <div class="col-sm-6">
+ <label for="communicationTypesDescription" class="col-sm-4 col-form-label">{{ 'CommunicationTypes.Description' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
@@ -56,8 +45,26 @@
autocomplete="off"
/>
</div>
- <div class="col-sm-1"></div>
- <div class="col-sm-2">
+ </div>
+
+ <!-- editable checkbox -->
+ <div class="form-group row">
+ <label for="communicationTypesEditable" class="col-sm-4 col-form-label">{{ 'CommunicationTypes.Editable' | translate }}</label>
+ <div class="col-sm-7" style="align-self: center;">
+ <input
+ type="checkbox"
+ class="form-check-input"
+ id="communicationTypesEditable"
+ [ngrxFormControlState]="((communicationTypesSandbox.formState$ | async)?.controls)['editable']"
+ onclick="return false;"
+ />
+ </div>
+ </div>
+
+ <!-- ldap mapping checkbox -->
+ <div class="form-group row">
+ <label for="communicationTypesMappingLdap" class="col-sm-4 col-form-label">{{ 'CommunicationTypes.MappingLdap' | translate }}</label>
+ <div class="col-sm-7" style="align-self: center;">
<input
type="checkbox"
class="form-check-input"
@@ -65,7 +72,6 @@
[ngrxFormControlState]="((communicationTypesSandbox.formState$ | async)?.controls)['mappingLdap']"
onclick="return false;"
/>
- <label for="communicationTypesMappingLdap" class="form-check-label">{{ 'CommunicationTypes.MappingLdap' | translate }}</label>
</div>
</div>
diff --git a/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.scss b/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.scss
index 255fbf6..05f0651 100644
--- a/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.scss
+++ b/src/app/pages/admin/communication-types/communication-types-details/communication-types-details.component.scss
@@ -1,6 +1,29 @@
+/********************************************************************************
+* Copyright (c) 2020 Contributors to the Eclipse Foundation
+*
+* See the NOTICE file(s) distributed with this work for additional
+* information regarding copyright ownership.
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v. 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0.
+*
+* SPDX-License-Identifier: EPL-2.0
+********************************************************************************/
button {
- margin: 20px 10px 10px 0;
+ margin: 14px 0px 10px 15px;
}
+
h4 {
- padding-bottom: 15px;
+ padding: 15px;
+ padding-top: 18px;
+}
+
+div.form-group.row {
+ padding-left: 15px;
+}
+
+#communicationTypesMappingLdap, #communicationTypesEditable {
+ margin-left: 0px;
+ margin-top: 7px;
}
diff --git a/src/app/pages/admin/communication-types/communication-types-list/communication-types-list.component.ts b/src/app/pages/admin/communication-types/communication-types-list/communication-types-list.component.ts
index 71569f3..5610e4e 100644
--- a/src/app/pages/admin/communication-types/communication-types-list/communication-types-list.component.ts
+++ b/src/app/pages/admin/communication-types/communication-types-list/communication-types-list.component.ts
@@ -38,7 +38,7 @@
icons: { edit: true, readonly: true, delete: true },
};
this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
- if (event.type === 'edit' || event.type === 'readonly' || event.type === 'readonly') {
+ if (event.type === 'edit' || event.type === 'readonly') {
this.communicationTypesSandbox.setDisplayForm(event.type);
this.communicationTypesSandbox.loadCommunicationType(event.data.id);
}
diff --git a/src/app/pages/admin/person-types/person-types-details/person-types-details.component.html b/src/app/pages/admin/person-types/person-types-details/person-types-details.component.html
index aa4f2aa..177cf57 100644
--- a/src/app/pages/admin/person-types/person-types-details/person-types-details.component.html
+++ b/src/app/pages/admin/person-types/person-types-details/person-types-details.component.html
@@ -15,8 +15,8 @@
<div>
<!-- type -->
<div class="form-group row">
- <label for="personTypesTyp" class="col-sm-2 col-form-label">{{ 'PersonTypes.Type' | translate }}</label>
- <div class="col-sm-6">
+ <label for="personTypesTyp" class="col-sm-4 col-form-label">{{ 'PersonTypes.Type' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
@@ -31,8 +31,8 @@
<!-- description -->
<div class="form-group row">
- <label for="personTypesDescription" class="col-sm-2 col-form-label">{{ 'PersonTypes.Description' | translate }}</label>
- <div class="col-sm-6">
+ <label for="personTypesDescription" class="col-sm-4 col-form-label">{{ 'PersonTypes.Description' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
diff --git a/src/app/pages/admin/person-types/person-types-details/person-types-details.component.scss b/src/app/pages/admin/person-types/person-types-details/person-types-details.component.scss
index 255fbf6..c75060d 100644
--- a/src/app/pages/admin/person-types/person-types-details/person-types-details.component.scss
+++ b/src/app/pages/admin/person-types/person-types-details/person-types-details.component.scss
@@ -1,6 +1,24 @@
+/********************************************************************************
+* Copyright (c) 2020 Contributors to the Eclipse Foundation
+*
+* See the NOTICE file(s) distributed with this work for additional
+* information regarding copyright ownership.
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v. 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0.
+*
+* SPDX-License-Identifier: EPL-2.0
+********************************************************************************/
button {
- margin: 20px 10px 10px 0;
+ margin: 14px 0px 10px 15px;
}
+
h4 {
- padding-bottom: 15px;
+ padding: 15px;
+ padding-top: 18px;
+}
+
+div.form-group.row {
+ padding-left: 15px;
}
diff --git a/src/app/pages/admin/person-types/person-types-list/person-types-list.component.html b/src/app/pages/admin/person-types/person-types-list/person-types-list.component.html
index 7dd8517..b5991a2 100644
--- a/src/app/pages/admin/person-types/person-types-list/person-types-list.component.html
+++ b/src/app/pages/admin/person-types/person-types-list/person-types-list.component.html
@@ -22,7 +22,7 @@
<div class="person-types-grid-wrapper" body>
<ag-grid-angular
autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
[ngClass]="sandbox.displayForm ? 'ag-grid-height-edit' : 'ag-grid-height-list'"
[gridOptions]="gridOptions"
[columnDefs]="columnDefinition"
diff --git a/src/app/pages/admin/salutations/salutations-details/salutations-details.component.html b/src/app/pages/admin/salutations/salutations-details/salutations-details.component.html
index 2af28ec..a90fea8 100644
--- a/src/app/pages/admin/salutations/salutations-details/salutations-details.component.html
+++ b/src/app/pages/admin/salutations/salutations-details/salutations-details.component.html
@@ -15,8 +15,8 @@
<div>
<!-- type -->
<div class="form-group row">
- <label for="salutationTyp" class="col-sm-2 col-form-label">{{ 'Salutations.Type' | translate }}</label>
- <div class="col-sm-6">
+ <label for="salutationTyp" class="col-sm-4 col-form-label">{{ 'Salutations.Type' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
@@ -31,8 +31,8 @@
<!-- description -->
<div class="form-group row">
- <label for="salutationDescription" class="col-sm-2 col-form-label">{{ 'Salutations.Description' | translate }}</label>
- <div class="col-sm-6">
+ <label for="salutationDescription" class="col-sm-4 col-form-label">{{ 'Salutations.Description' | translate }}</label>
+ <div class="col-sm-7">
<input
type="text"
required
diff --git a/src/app/pages/admin/salutations/salutations-details/salutations-details.component.scss b/src/app/pages/admin/salutations/salutations-details/salutations-details.component.scss
index 5562616..c75060d 100644
--- a/src/app/pages/admin/salutations/salutations-details/salutations-details.component.scss
+++ b/src/app/pages/admin/salutations/salutations-details/salutations-details.component.scss
@@ -1,18 +1,24 @@
- /********************************************************************************
- * Copyright (c) 2020 Contributors to the Eclipse Foundation
- *
- * See the NOTICE file(s) distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- ********************************************************************************/
- button {
- margin: 20px 10px 10px 0;
+/********************************************************************************
+* Copyright (c) 2020 Contributors to the Eclipse Foundation
+*
+* See the NOTICE file(s) distributed with this work for additional
+* information regarding copyright ownership.
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v. 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0.
+*
+* SPDX-License-Identifier: EPL-2.0
+********************************************************************************/
+button {
+ margin: 14px 0px 10px 15px;
}
+
h4 {
- padding-bottom: 15px;
+ padding: 15px;
+ padding-top: 18px;
+}
+
+div.form-group.row {
+ padding-left: 15px;
}
diff --git a/src/app/pages/admin/salutations/salutations-list/salutations-list-column-definition.ts b/src/app/pages/admin/salutations/salutations-list/salutations-list-column-definition.ts
index 13ff705..fc777c6 100644
--- a/src/app/pages/admin/salutations/salutations-list/salutations-list-column-definition.ts
+++ b/src/app/pages/admin/salutations/salutations-list/salutations-list-column-definition.ts
@@ -11,17 +11,115 @@
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import { IconCellRendererComponent } from '@shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component';
+import { BoolCellRendererComponent } from '@shared/components/cell-renderer/bool-cell-renderer/bool-cell-renderer.component';
export const SALUTATIONS_COLDEF = [
{
field: 'type',
headerName: 'Salutations.Type',
sortable: true,
+ flex: 1
},
{
field: 'description',
headerName: 'Salutations.Description',
sortable: true,
+ flex: 1
+ },
+ {
+ field: 'tools',
+ headerName: ' ',
+ pinned: 'right',
+ maxWidth: 110,
+ minWidth: 110,
+ lockPosition: true,
+ sortable: false,
+ suppressMenu: true,
+ suppressSizeToFit: true,
+ cellRendererFramework: IconCellRendererComponent,
+ },
+];
+
+export const COMMUNICATION_TYPES_COLDEF = [
+ {
+ field: 'type',
+ headerName: 'CommunicationTypes.Type',
+ sortable: true,
+ flex: 1
+ },
+ {
+ field: 'description',
+ headerName: 'CommunicationTypes.Description',
+ sortable: true,
+ flex: 1
+ },
+ {
+ field: 'editable',
+ headerName: 'CommunicationTypes.Editable',
+ sortable: true,
+ flex: 1,
+ cellRendererFramework: BoolCellRendererComponent,
+ },
+ {
+ field: 'mappingLdap',
+ headerName: 'CommunicationTypes.MappingLdap',
+ sortable: true,
+ flex: 1,
+ cellRendererFramework: BoolCellRendererComponent,
+ },
+ {
+ field: 'tools',
+ headerName: ' ',
+ pinned: 'right',
+ maxWidth: 110,
+ minWidth: 110,
+ lockPosition: true,
+ sortable: false,
+ suppressMenu: true,
+ suppressSizeToFit: true,
+ cellRendererFramework: IconCellRendererComponent,
+ },
+];
+
+export const PERSON_TYPES_COLDEF = [
+ {
+ field: 'type',
+ headerName: 'PersonTypes.Type',
+ sortable: true,
+ flex: 1
+ },
+ {
+ field: 'description',
+ headerName: 'PersonTypes.Description',
+ sortable: true,
+ flex: 1
+ },
+ {
+ field: 'tools',
+ headerName: ' ',
+ pinned: 'right',
+ maxWidth: 110,
+ minWidth: 110,
+ lockPosition: true,
+ sortable: false,
+ suppressMenu: true,
+ suppressSizeToFit: true,
+ cellRendererFramework: IconCellRendererComponent,
+ },
+];
+
+export const ADDRESS_TYPES_COLDEF = [
+ {
+ field: 'type',
+ headerName: 'AddressTypes.Type',
+ sortable: true,
+ flex: 1
+ },
+ {
+ field: 'description',
+ headerName: 'AddressTypes.Description',
+ sortable: true,
+ flex: 1
},
{
field: 'tools',
diff --git a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.html b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.html
index bfca349..f4895fc 100644
--- a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.html
+++ b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.html
@@ -12,31 +12,163 @@
********************************************************************************/ -->
<app-card-layout>
<div header>
- <span>{{ 'Salutations.Title' | translate }}</span>
- <div class="pull-right" *visibleByRight>
- <button class="btn btn-primary new-button" (click)="salutationsSandbox.setDisplayForm()">
- {{ 'Salutations.New' | translate }}
- </button>
- </div>
+ <span>{{ 'AdminSettings.Title' | translate }}</span>
</div>
- <div class="salutations-grid-wrapper" body>
- <ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
- [ngClass]="salutationsSandbox.displayForm ? 'ag-grid-height-edit' : 'ag-grid-height-list'"
- [gridOptions]="gridOptions"
- [columnDefs]="columnDefinition"
- [rowSelection]="'single'"
- [frameworkComponents]="frameworkComponents"
- [rowData]="salutationsSandbox.salutations$ | async"
- [overlayNoRowsTemplate]="noRowsTemplate"
- >
- </ag-grid-angular>
- <app-spinner [isRunning]="salutationsSandbox.salutationsLoading$ | async"></app-spinner>
+ <div body>
- <div *ngIf="salutationsSandbox.displayForm" class="salutations-details">
- <app-salutations-details></app-salutations-details>
- </div>
+ <!-- ******************************** Salutations ******************************** -->
+ <app-expandable class="expandable-salutations">
+ <span header>{{ 'Salutations.Title' | translate }}</span>
+ <div class="salutations-grid-wrapper" body>
+
+ <div class="details-wrapper" *ngIf="salutationsSandbox.displayForm" >
+ <app-salutations-details></app-salutations-details>
+ </div>
+
+ <div class="table-view">
+ <div class="diverse-options">
+ <div class="pull-right" *visibleByRight>
+ <button class="btn btn-sm btn-primary" (click)="salutationsSandbox.setDisplayForm()">
+ {{ 'Salutations.New' | translate }}
+ </button>
+ </div>
+ </div>
+
+ <ag-grid-angular
+ class="ag-theme-balham"
+ [domLayout]="'autoHeight'"
+ [gridOptions]="salutationGridOptions"
+ [columnDefs]="salutationsColDef"
+ [rowSelection]="'single'"
+ [frameworkComponents]="frameworkComponents"
+ [rowData]="salutationsSandbox.salutations$ | async"
+ [overlayNoRowsTemplate]="noRowsTemplate"
+ >
+ </ag-grid-angular>
+
+ <app-spinner [isRunning]="salutationsSandbox.salutationsLoading$ | async"></app-spinner>
+ </div>
+
+ </div>
+ </app-expandable>
+
+ <!-- ******************************** Communications-Types ******************************** -->
+ <app-expandable class="expandable-salutations">
+ <span header>{{ 'CommunicationTypes.Title' | translate }}</span>
+ <div class="salutations-grid-wrapper" body>
+
+ <div *ngIf="communicationTypesSandbox.displayForm" class="details-wrapper">
+ <app-communication-types-details></app-communication-types-details>
+ </div>
+
+ <div class="table-view">
+ <div class="diverse-options">
+ <div class="pull-right" *visibleByRight>
+ <button class="btn btn-sm btn-primary" (click)="communicationTypesSandbox.setDisplayForm()">
+ {{ 'Salutations.New' | translate }}
+ </button>
+ </div>
+ </div>
+
+ <ag-grid-angular
+ class="ag-theme-balham"
+ [domLayout]="'autoHeight'"
+ [gridOptions]="communicationTypesGridOptions"
+ [columnDefs]="communicationsTypeColDef"
+ [rowSelection]="'single'"
+ [frameworkComponents]="frameworkComponents"
+ [rowData]="communicationTypesSandbox.communicationTypes$ | async"
+ [overlayNoRowsTemplate]="noRowsTemplate"
+ >
+ </ag-grid-angular>
+
+ <app-spinner [isRunning]="communicationTypesSandbox.communicationTypesLoading$ | async"></app-spinner>
+ </div>
+
+ </div>
+
+ </app-expandable>
+
+ <!-- ******************************** Person-Types ******************************** -->
+ <app-expandable class="expandable-salutations">
+ <span header>{{ 'PersonTypes.Title' | translate }}</span>
+ <div class="salutations-grid-wrapper" body>
+
+ <div class="details-wrapper" *ngIf="personTypesSandbox.displayForm" >
+ <app-person-types-details></app-person-types-details>
+ </div>
+
+ <div class="table-view">
+ <div class="diverse-options">
+ <div class="pull-right" *visibleByRight>
+ <button class="btn btn-sm btn-primary" (click)="personTypesSandbox.setDisplayForm()">
+ {{ 'PersonTypes.New' | translate }}
+ </button>
+ </div>
+ </div>
+
+ <ag-grid-angular
+ class="ag-theme-balham"
+ [domLayout]="'autoHeight'"
+ [gridOptions]="personTypesGridOptions"
+ [columnDefs]="personTypeColDef"
+ [rowSelection]="'single'"
+ [frameworkComponents]="frameworkComponents"
+ [rowData]="personTypesSandbox.personTypes$ | async"
+ [overlayNoRowsTemplate]="noRowsTemplate"
+ >
+ </ag-grid-angular>
+
+ <app-spinner [isRunning]="personTypesSandbox.personTypesLoading$ | async"></app-spinner>
+ </div>
+
+ </div>
+ </app-expandable>
+
+ <!-- ******************************** Address-Types ******************************** -->
+ <app-expandable class="expandable-salutations">
+ <span header>{{ 'AddressTypes.Title' | translate }}</span>
+ <div class="salutations-grid-wrapper" body>
+
+ <div class="details-wrapper" *ngIf="addressTypesSandbox.displayForm" >
+ <app-address-types-details></app-address-types-details>
+ </div>
+
+ <div class="table-view">
+ <div class="diverse-options">
+ <div class="pull-right" *visibleByRight>
+ <button class="btn btn-sm btn-primary" (click)="addressTypesSandbox.setDisplayForm()">
+ {{ 'AddressTypes.New' | translate }}
+ </button>
+ </div>
+ </div>
+
+ <ag-grid-angular
+ class="ag-theme-balham"
+ [domLayout]="'autoHeight'"
+ [gridOptions]="addressTypesGridOptions"
+ [columnDefs]="addressTypeColDef"
+ [rowSelection]="'single'"
+ [frameworkComponents]="frameworkComponents"
+ [rowData]="addressTypesSandbox.addressTypes$ | async"
+ [overlayNoRowsTemplate]="noRowsTemplate"
+ >
+ </ag-grid-angular>
+
+ <app-spinner [isRunning]="addressTypesSandbox.addressTypesLoading$ | async"></app-spinner>
+ </div>
+
+ </div>
+ </app-expandable>
+
+
+
+
+
+
+
</div>
+
+
</app-card-layout>
diff --git a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.scss b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.scss
index f493401..fdd29d6 100644
--- a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.scss
+++ b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.scss
@@ -10,22 +10,44 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
- .salutations-grid-wrapper {
- position: relative;
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
}
-.salutations-details {
- margin-top: 20px;
+.salutations-grid-wrapper {
+ display: flex;
+ flex-direction: row;
+ height: 100%;
}
-.ag-grid-height-edit {
- height: calc(100vh - 450px);
+.table-view {
+ flex-grow: 1;
}
-.ag-grid-height-list {
- height: calc(100vh - 200px);
+.details-wrapper {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
-.new-button {
- margin-right: 20px;
+.diverse-options {
+ display: flex;
+ justify-content: flex-end;
+ align-content: center;
+ background-color: #f5f7f7;
+ padding: 7px;
+ margin-bottom: 1px;
+}
+
+.diverse-options-item {
+ width: 400px;
+ padding-right: 7px;
+ border-right: solid 1px #ddd;
+}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
}
diff --git a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.spec.ts b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.spec.ts
index 1af3a38..387ee6a 100644
--- a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.spec.ts
+++ b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.spec.ts
@@ -15,14 +15,26 @@
describe('SalutationsListComponent', () => {
let component: SalutationsListComponent;
- const sandbox: any = {
+ let communicationTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadCommunicationType: () => {},
+ deleteCommunicationType: () => {},};
+ let personTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadPersonType: () => {},
+ deletePersonType: () => {},};
+ let addressTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadAddressType: () => {},
+ deleteAddressType: () => {},};
+ const salutationsSandbox: any = {
setDisplayForm: () => {},
loadSalutation: () => {},
deleteSalutation: () => {},
};
beforeEach(() => {
- component = new SalutationsListComponent(sandbox);
+ component = new SalutationsListComponent(salutationsSandbox, communicationTypesSandbox, personTypesSandbox, addressTypesSandbox);
});
it('should create', () => {
@@ -31,23 +43,71 @@
it('should initialize gridOptions context', () => {
component.ngOnInit();
- expect(component.gridOptions.context.icons.edit).toBeTruthy();
- expect(component.gridOptions.context.icons.delete).toBeTruthy();
+ expect(component.salutationGridOptions.context.icons.edit).toBeTruthy();
+ expect(component.salutationGridOptions.context.icons.delete).toBeTruthy();
});
it('should call appropriate functions for edit event', () => {
- const spy1: any = spyOn(sandbox, 'setDisplayForm');
- const spy2: any = spyOn(sandbox, 'loadSalutation');
+ const spy1: any = spyOn(salutationsSandbox, 'setDisplayForm');
+ const spy2: any = spyOn(salutationsSandbox, 'loadSalutation');
component.ngOnInit();
- component.gridOptions.context.eventSubject.next({type: "edit", data: new Salutation()});
+ component.salutationGridOptions.context.eventSubject.next({type: "edit", data: new Salutation()});
expect(spy1).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
});
it('should call appropriate functions for delete event', () => {
- const spy3: any = spyOn(sandbox, 'deleteSalutation');
+ const spy3: any = spyOn(salutationsSandbox, 'deleteSalutation');
component.ngOnInit();
- component.gridOptions.context.eventSubject.next({type: "delete", data: new Salutation()});
+ component.salutationGridOptions.context.eventSubject.next({type: "delete", data: new Salutation()});
+ expect(spy3).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for edit event', () => {
+ const spy1: any = spyOn(communicationTypesSandbox, 'setDisplayForm');
+ const spy2: any = spyOn(communicationTypesSandbox, 'loadCommunicationType');
+ component.ngOnInit();
+ component.communicationTypesGridOptions.context.eventSubject.next({type: "edit", data: new Salutation()});
+ expect(spy1).toHaveBeenCalled();
+ expect(spy2).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for delete event', () => {
+ const spy3: any = spyOn(communicationTypesSandbox, 'deleteCommunicationType');
+ component.ngOnInit();
+ component.communicationTypesGridOptions.context.eventSubject.next({type: "delete", data: new Salutation()});
+ expect(spy3).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for edit event', () => {
+ const spy1: any = spyOn(personTypesSandbox, 'setDisplayForm');
+ const spy2: any = spyOn(personTypesSandbox, 'loadPersonType');
+ component.ngOnInit();
+ component.personTypesGridOptions.context.eventSubject.next({type: "edit", data: new Salutation()});
+ expect(spy1).toHaveBeenCalled();
+ expect(spy2).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for delete event', () => {
+ const spy3: any = spyOn(personTypesSandbox, 'deletePersonType');
+ component.ngOnInit();
+ component.personTypesGridOptions.context.eventSubject.next({type: "delete", data: new Salutation()});
+ expect(spy3).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for edit event', () => {
+ const spy1: any = spyOn(addressTypesSandbox, 'setDisplayForm');
+ const spy2: any = spyOn(addressTypesSandbox, 'loadAddressType');
+ component.ngOnInit();
+ component.addressTypesGridOptions.context.eventSubject.next({type: "edit", data: new Salutation()});
+ expect(spy1).toHaveBeenCalled();
+ expect(spy2).toHaveBeenCalled();
+ });
+
+ it('should call appropriate functions for delete event', () => {
+ const spy3: any = spyOn(addressTypesSandbox, 'deleteAddressType');
+ component.ngOnInit();
+ component.addressTypesGridOptions.context.eventSubject.next({type: "delete", data: new Salutation()});
expect(spy3).toHaveBeenCalled();
});
diff --git a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.ts b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.ts
index a763ef4..b54925d 100644
--- a/src/app/pages/admin/salutations/salutations-list/salutations-list.component.ts
+++ b/src/app/pages/admin/salutations/salutations-list/salutations-list.component.ts
@@ -11,11 +11,16 @@
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import { SalutationsSandbox } from '@pages/admin/salutations/salutations.sandbox';
-import { SALUTATIONS_COLDEF } from '@pages/admin/salutations/salutations-list/salutations-list-column-definition';
+import { SALUTATIONS_COLDEF, COMMUNICATION_TYPES_COLDEF, PERSON_TYPES_COLDEF, ADDRESS_TYPES_COLDEF} from '@pages/admin/salutations/salutations-list/salutations-list-column-definition';
import { Component, OnInit, OnDestroy } from '@angular/core';
import { BaseList } from '@shared/components/base-components/base.list';
import { SetFilterComponent } from '@shared/filters/ag-grid/set-filter/set-filter.component';
import { Subscription } from 'rxjs';
+import { CommunicationTypesSandbox } from '../../communication-types/communication-types.sandbox';
+import { GridOptions } from 'ag-grid-community';
+import { Subject } from 'rxjs';
+import { PersonTypesSandbox } from '../../person-types/person-types.sandbox';
+import { AddressTypesSandbox } from '../../address-types/address-types.sandbox';
@Component({
selector: 'app-salutations-list',
@@ -23,21 +28,77 @@
styleUrls: ['./salutations-list.component.scss'],
})
export class SalutationsListComponent extends BaseList implements OnInit, OnDestroy {
- public columnDefinition: any = SALUTATIONS_COLDEF;
+ public salutationsColDef: any = SALUTATIONS_COLDEF;
+ public communicationsTypeColDef: any = COMMUNICATION_TYPES_COLDEF;
+ public personTypeColDef: any = PERSON_TYPES_COLDEF;
+ public addressTypeColDef: any = ADDRESS_TYPES_COLDEF;
public frameworkComponents: { setFilterComponent: any };
private _subscription: Subscription;
+ public isExpandableVisible = false;
- constructor(public salutationsSandbox: SalutationsSandbox) {
+
+ public salutationEvents$: Subject<any> = new Subject();
+ public salutationGridOptions: GridOptions = {
+ context: {
+ eventSubject: this.salutationEvents$,
+ },
+ defaultColDef: {
+ filter: false,
+ },
+ suppressLoadingOverlay: true,
+ };
+
+ public communicationTypesEvents$: Subject<any> = new Subject();
+ public communicationTypesGridOptions: GridOptions = {
+ context: {
+ eventSubject: this.communicationTypesEvents$,
+ },
+ defaultColDef: {
+ filter: false,
+ },
+ suppressLoadingOverlay: true,
+ };
+
+ public personTypesEvents$: Subject<any> = new Subject();
+ public personTypesGridOptions: GridOptions = {
+ context: {
+ eventSubject: this.personTypesEvents$,
+ },
+ defaultColDef: {
+ filter: false,
+ },
+ suppressLoadingOverlay: true,
+ };
+
+ public addressTypesEvents$: Subject<any> = new Subject();
+ public addressTypesGridOptions: GridOptions = {
+ context: {
+ eventSubject: this.addressTypesEvents$,
+ },
+ defaultColDef: {
+ filter: false,
+ },
+ suppressLoadingOverlay: true,
+ };
+
+
+
+ constructor(public salutationsSandbox: SalutationsSandbox,
+ public communicationTypesSandbox: CommunicationTypesSandbox,
+ public personTypesSandbox: PersonTypesSandbox,
+ public addressTypesSandbox: AddressTypesSandbox) {
super();
this.frameworkComponents = { setFilterComponent: SetFilterComponent };
}
ngOnInit() {
- this.gridOptions.context = {
- ...this.gridOptions.context,
+
+ /********************************* Salutations *********************************/
+ this.salutationGridOptions.context = {
+ ...this.salutationGridOptions.context,
icons: { edit: true, delete: true },
};
- this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.salutationGridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.salutationsSandbox.setDisplayForm();
this.salutationsSandbox.loadSalutation(event.data.id);
@@ -46,9 +107,66 @@
this.salutationsSandbox.deleteSalutation(event.data.id);
}
});
+
+
+ /********************************* Communication-Types *********************************/
+ this.communicationTypesGridOptions.context = {
+ ...this.communicationTypesGridOptions.context,
+ icons: { edit: true, readonly: true, delete: true },
+ };
+ this._subscription = this.communicationTypesGridOptions.context.eventSubject.subscribe(event => {
+ if (event.type === 'edit' || event.type === 'readonly') {
+ this.communicationTypesSandbox.setDisplayForm(event.type);
+ this.communicationTypesSandbox.loadCommunicationType(event.data.id);
+ }
+ if (event.type === 'delete') {
+ this.communicationTypesSandbox.deleteCommunicationType(event.data.id);
+ }
+ });
+
+ /********************************* Person-Types *********************************/
+ this.personTypesGridOptions.context = {
+ ...this.personTypesGridOptions.context,
+ icons: { edit: true, delete: true },
+ };
+ this._subscription = this.personTypesGridOptions.context.eventSubject.subscribe(event => {
+ if (event.type === 'edit' || event.type === 'readonly') {
+ this.personTypesSandbox.setDisplayForm();
+ this.personTypesSandbox.loadPersonType(event.data.id);
+ }
+ if (event.type === 'delete') {
+ this.personTypesSandbox.deletePersonType(event.data.id);
+ }
+ });
+
+ /********************************* Address-Types *********************************/
+ this.addressTypesGridOptions.context = {
+ ...this.addressTypesGridOptions.context,
+ icons: { edit: true, delete: true },
+ };
+ this._subscription = this.addressTypesGridOptions.context.eventSubject.subscribe(event => {
+ if (event.type === 'edit' || event.type === 'readonly') {
+ this.addressTypesSandbox.setDisplayForm();
+ this.addressTypesSandbox.loadAddressType(event.data.id);
+ }
+ if (event.type === 'delete') {
+ this.addressTypesSandbox.deleteAddressType(event.data.id);
+ }
+ });
+
}
+
+
+
+
ngOnDestroy() {
this._subscription.unsubscribe();
}
+
+
+ private _initExpandableState() {
+ //this.isExpandableVisible = !!this.salutationsSandbox.companyContactId;
+ }
+
}
diff --git a/src/app/pages/admin/salutations/salutations.resolver.spec.ts b/src/app/pages/admin/salutations/salutations.resolver.spec.ts
index ad69846..29e6a0e 100644
--- a/src/app/pages/admin/salutations/salutations.resolver.spec.ts
+++ b/src/app/pages/admin/salutations/salutations.resolver.spec.ts
@@ -3,17 +3,26 @@
describe('SalutationsResolver', () => {
let component: SalutationsResolver;
- let salutationsSandbox: any;
-
- beforeEach(async(() => {
- salutationsSandbox = {
- clear() {},
- loadSalutations() {},
- } as any;
- }));
+ let communicationTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadCommunicationTypes: () => {},
+ deleteCommunicationType: () => {},};
+ let personTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadPersonTypes: () => {},
+ deletePersonType: () => {},};
+ let addressTypesSandbox: any = {
+ setDisplayForm: () => {},
+ loadAddressTypes: () => {},
+ deleteAddressType: () => {},};
+ const salutationsSandbox: any = {
+ setDisplayForm: () => {},
+ loadSalutations: () => {},
+ deleteSalutation: () => {},
+ };
beforeEach(() => {
- component = new SalutationsResolver(salutationsSandbox);
+ component = new SalutationsResolver(salutationsSandbox, communicationTypesSandbox, personTypesSandbox, addressTypesSandbox);
});
it('should create', () => {
diff --git a/src/app/pages/admin/salutations/salutations.resolver.ts b/src/app/pages/admin/salutations/salutations.resolver.ts
index 78538c2..f2b1fc3 100644
--- a/src/app/pages/admin/salutations/salutations.resolver.ts
+++ b/src/app/pages/admin/salutations/salutations.resolver.ts
@@ -15,13 +15,23 @@
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { ILoadSalutationsSuccess } from '@shared/store/actions/admin/salutations.action';
+import { CommunicationTypesSandbox } from '../communication-types/communication-types.sandbox';
+import { PersonTypesSandbox } from '../person-types/person-types.sandbox';
+import { AddressTypesSandbox } from '../address-types/address-types.sandbox';
@Injectable()
export class SalutationsResolver implements Resolve<ILoadSalutationsSuccess> {
- constructor(private salutationsSandbox: SalutationsSandbox) {}
+ constructor(private salutationsSandbox: SalutationsSandbox,
+ private communicationTypesSandbox: CommunicationTypesSandbox,
+ private personTypesSandbox: PersonTypesSandbox,
+ private addressTypesSandbox: AddressTypesSandbox) {}
public resolve(): Observable<any> {
+ this.addressTypesSandbox.loadAddressTypes();
+ this.personTypesSandbox.loadPersonTypes();
+ this.communicationTypesSandbox.loadCommunicationTypes();
return this.salutationsSandbox.loadSalutations();
}
+
}
diff --git a/src/app/pages/company/company-details/address-list/address-list.component.html b/src/app/pages/company/company-details/address-list/address-list.component.html
index b7e3056..94b10ad 100644
--- a/src/app/pages/company/company-details/address-list/address-list.component.html
+++ b/src/app/pages/company/company-details/address-list/address-list.component.html
@@ -19,14 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="companyDetailsSandBox.addressList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
diff --git a/src/app/pages/company/company-details/address-list/address-list.component.scss b/src/app/pages/company/company-details/address-list/address-list.component.scss
index 3205657..eaf16e7 100644
--- a/src/app/pages/company/company-details/address-list/address-list.component.scss
+++ b/src/app/pages/company/company-details/address-list/address-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
-.diverse-options {
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
+ .diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/company/company-details/address-list/address-list.component.spec.ts b/src/app/pages/company/company-details/address-list/address-list.component.spec.ts
index 636deee..f489670 100644
--- a/src/app/pages/company/company-details/address-list/address-list.component.spec.ts
+++ b/src/app/pages/company/company-details/address-list/address-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('AddressListComponent', () => {
let component: CompanyAddressListComponent;
let companySandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
companySandbox = {
registerAddressEvents() {},
registerCompanyEvents() {},
@@ -26,6 +28,8 @@
deleteAddress() {},
newAddressData() {},
} as any;
+ companySandbox.addressAgApi = agApi;
+ //companySandbox.communicationsAgApi = { setDomLayout() {} };
}));
beforeEach(() => {
diff --git a/src/app/pages/company/company-details/address-list/address-list.component.ts b/src/app/pages/company/company-details/address-list/address-list.component.ts
index 37cf28c..a4d46d0 100644
--- a/src/app/pages/company/company-details/address-list/address-list.component.ts
+++ b/src/app/pages/company/company-details/address-list/address-list.component.ts
@@ -12,20 +12,22 @@
********************************************************************************/
import { CompanyDetailsSandBox } from '@pages/company/company-details/company-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit } from '@angular/core';
import { ADDRESS_LIST_COLDEF } from '@shared/components/column-definitions/addresses-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-company-address-list',
templateUrl: './address-list.component.html',
styleUrls: ['./address-list.component.scss'],
})
-export class CompanyAddressListComponent extends BaseList {
+export class CompanyAddressListComponent extends BaseList implements OnInit {
@Output() companyDetailsIdLoaded: EventEmitter<string> = new EventEmitter();
@Output() createNewCompany: EventEmitter<string> = new EventEmitter();
public columnDefinition = ADDRESS_LIST_COLDEF;
+ private _subscription: Subscription;
constructor(public companyDetailsSandBox: CompanyDetailsSandBox) {
super();
@@ -41,7 +43,7 @@
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.companyDetailsIdLoaded.emit(event.data.id);
}
@@ -54,5 +56,10 @@
public createNewAddressForm() {
this.companyDetailsSandBox.newAddressData();
this.createNewCompany.emit(null);
+ this.companyDetailsSandBox.addressAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.companyDetailsSandBox.addressAgApi = params.api;
}
}
diff --git a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.html b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.html
index bf515bc..93ccf26 100644
--- a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.html
+++ b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.html
@@ -18,16 +18,17 @@
</div>
</div>
-<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ <ag-grid-angular
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="companyDetailsSandBox.communicationsDataList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
->
+ (gridReady)="onGridReady($event)"
+ >
</ag-grid-angular>
<app-spinner [isRunning]="companyDetailsSandBox.communicationsDataListLoading$ | async"></app-spinner>
diff --git a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.scss b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.scss
index 63a5ad3..e116c52 100644
--- a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.scss
+++ b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+.ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.spec.ts b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.spec.ts
index c5b8adc..2b1293d 100644
--- a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.spec.ts
+++ b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.spec.ts
@@ -26,6 +26,7 @@
deleteCommunicationsData() {},
newCommunicationsData() {},
} as any;
+ companySandbox.communicationsAgApi = { setDomLayout() {} };
}));
beforeEach(() => {
diff --git a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.ts b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.ts
index 5472c46..369d5a0 100644
--- a/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.ts
+++ b/src/app/pages/company/company-details/communications-data-list/communications-data-list.component.ts
@@ -12,36 +12,40 @@
********************************************************************************/
import { CompanyDetailsSandBox } from '@pages/company/company-details/company-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { COMMUNICATIONS_DATA_LIST_COLDEF } from '@shared/components/column-definitions/communications-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-company-communications-data-list',
templateUrl: './communications-data-list.component.html',
styleUrls: ['./communications-data-list.component.scss'],
})
-export class CompanyCommunicationsDataListComponent extends BaseList {
+export class CompanyCommunicationsDataListComponent extends BaseList implements OnInit, OnDestroy {
@Output() companyDetailsIdLoaded: EventEmitter<string> = new EventEmitter();
@Output() createNewCompany: EventEmitter<string> = new EventEmitter();
public columnDefinition = COMMUNICATIONS_DATA_LIST_COLDEF;
+ private _subscription: Subscription;
constructor(public companyDetailsSandBox: CompanyDetailsSandBox) {
super();
}
ngOnInit() {
+
this.gridOptions = {
...this.gridOptions,
localeText: Globals.LOCALE_TEXT,
};
+
this.gridOptions.context = {
...this.gridOptions.context,
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.companyDetailsIdLoaded.emit(event.data.id);
}
@@ -54,5 +58,14 @@
public createNewCommunicationsDataForm() {
this.companyDetailsSandBox.newCommunicationsData();
this.createNewCompany.emit(null);
+ this.companyDetailsSandBox.communicationsAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.companyDetailsSandBox.communicationsAgApi = params.api;
+ }
+
+ ngOnDestroy() {
+ this._subscription.unsubscribe();
}
}
diff --git a/src/app/pages/company/company-details/company-details.component.html b/src/app/pages/company/company-details/company-details.component.html
index 0833496..0a4025d 100644
--- a/src/app/pages/company/company-details/company-details.component.html
+++ b/src/app/pages/company/company-details/company-details.component.html
@@ -82,7 +82,7 @@
<div class="row justify-content-between">
<div>
<button *visibleByRight type="button" class="btn btn-success company-buttons" (click)="companyDetailsSandBox.persistCompany()">{{ 'SaveBtn' | translate }}</button>
- <button type="button" class="btn btn-primary cancel-button company-buttons" routerLink="/overview">
+ <button type="button" class="btn btn-primary cancel-button company-buttons" (click)="companyDetailsSandBox.navigateTo('/overview')">
{{ 'CancelBtn' | translate }}
</button>
</div>
diff --git a/src/app/pages/company/company-details/company-details.component.scss b/src/app/pages/company/company-details/company-details.component.scss
index 35a3e5c..4fb220b 100644
--- a/src/app/pages/company/company-details/company-details.component.scss
+++ b/src/app/pages/company/company-details/company-details.component.scss
@@ -13,51 +13,43 @@
.company-buttons {
margin: 16px;
}
+
.expandable-body-container {
display: flex;
flex-direction: row;
height: 100%;
}
+
.table-detail-view-address {
- height: 756px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
+
.table-view-address {
- height: 711px;
flex-grow: 1;
}
-.expandable-address .collapse5 {
- height: 758px;
-}
+
.table-detail-view-communication {
- height: 296px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
+
.table-view-communication {
- height: 263px;
flex-grow: 1;
}
-.expandable-communication .collapse5 {
- height: 310px;
-}
+
.table-view-contact-persons {
- height: 250px;
flex-grow: 1;
}
-.expandable-contact-persons .collapse5 {
- height: 297px;
-}
+
.table-detail-view-module-assignment {
- height: 336px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
+
.table-view-module-assignment {
- height: 290px;
flex-grow: 1;
}
-.expandable-module-assignment .collapse5 {
- height: 338px;
-}
diff --git a/src/app/pages/company/company-details/company-details.sandbox.spec.ts b/src/app/pages/company/company-details/company-details.sandbox.spec.ts
index ce2f7cf..ff4cc9b 100644
--- a/src/app/pages/company/company-details/company-details.sandbox.spec.ts
+++ b/src/app/pages/company/company-details/company-details.sandbox.spec.ts
@@ -23,17 +23,23 @@
let actionSubject: any;
let router: any;
let modalService: any;
+ let ngZone: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
router = { navigateByUrl() {} } as any;
appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
actionSubject = { pipe: () => of(true) } as any;
utilService = { displayNotification: () => {} } as any;
modalService = { open() {} } as any;
+ ngZone = { run() {} } as any;
}));
beforeEach(() => {
- component = new CompanyDetailsSandBox(appState, actionSubject, utilService, router, modalService);
+ component = new CompanyDetailsSandBox(appState, actionSubject, utilService, router, modalService, ngZone);
+ component.communicationsAgApi = agApi;
+ component.addressAgApi = agApi;
});
it('should create', () => {
diff --git a/src/app/pages/company/company-details/company-details.sandbox.ts b/src/app/pages/company/company-details/company-details.sandbox.ts
index c2367ff..687ceab 100644
--- a/src/app/pages/company/company-details/company-details.sandbox.ts
+++ b/src/app/pages/company/company-details/company-details.sandbox.ts
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import { BaseSandbox } from '@shared/sandbox/base.sandbox';
-import { Injectable } from '@angular/core';
+import { Injectable, NgZone } from '@angular/core';
import * as companyActions from '@shared/store/actions/company/company.action';
import { FormGroupState, SetValueAction, ResetAction } from 'ngrx-forms';
import { Company, CommunicationsData, CommunicationType, ContactPerson, Address } from '@shared/models';
@@ -52,6 +52,8 @@
public companyContactId: string;
public contactPersonsList$: Observable<Array<ContactPerson>> = this.appState$.select(store.getCompanyContactPersonsData);
public contactPersonsListLoading$: Observable<boolean> = this.appState$.select(store.getCompanyContactPersonsLoading);
+ public communicationsAgApi;
+ public addressAgApi;
private _communicationTypes: Array<CommunicationType> = new Array<CommunicationType>();
private _mainAddress: Address;
@@ -64,7 +66,8 @@
protected actionsSubject: ActionsSubject,
protected utilService: UtilService,
protected router: Router,
- protected modalService: NgbModal
+ protected modalService: NgbModal,
+ private ngZone: NgZone
) {
super(appState$);
@@ -189,6 +192,7 @@
this.loadCommunicationsData(this.companyContactId);
this.clearCommunicationsData();
this.isCommunicationsDataDetailViewVisible = false;
+ this.communicationsAgApi.setDomLayout('autoHeight');
}
public newCommunicationsData(): void {
@@ -237,6 +241,7 @@
public closeAddressDataDetail(): void {
this.clearAddressData();
this.isAddressDataDetailViewVisible = false;
+ this.addressAgApi.setDomLayout('autoHeight');
}
public newAddressData(): void {
@@ -312,4 +317,8 @@
private _checkIfCurrentAddressIsMainAddress(address: Address): void {
this.isCurrentAddressMainAddress = address.isMainAddress;
}
+
+ public navigateTo(url: any) {
+ this.ngZone.run(() => this.router.navigate([url]));
+ }
}
diff --git a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.html b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.html
index 69cbcb0..c4ec4b7 100644
--- a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.html
+++ b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.html
@@ -19,13 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="contactPersonDetailsSandbox.addressList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
+ [overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
<app-spinner [isRunning]="contactPersonDetailsSandbox.addressListLoading$ | async"></app-spinner>
diff --git a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.scss b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.scss
index 63a5ad3..9b9ebee 100644
--- a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.scss
+++ b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.spec.ts b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.spec.ts
index 4b9486b..f6e2b5a 100644
--- a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.spec.ts
+++ b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('AddressListComponent', () => {
let component: ContactPersonAddressListComponent;
let contactPersonDetailsSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
contactPersonDetailsSandbox = {
registerAddressEvents() {},
registerCompanyEvents() {},
@@ -26,6 +28,7 @@
deleteAddress() {},
newAddressData() {},
} as any;
+ contactPersonDetailsSandbox.addressAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.ts b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.ts
index 8431253..cab5844 100644
--- a/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.ts
+++ b/src/app/pages/company/company-details/contact-person-details/address-list/address-list.component.ts
@@ -56,6 +56,11 @@
public createNewAddressForm() {
this.contactPersonDetailsSandbox.newAddressData();
this.createNewAddress.emit(null);
+ this.contactPersonDetailsSandbox.addressAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.contactPersonDetailsSandbox.addressAgApi = params.api;
}
ngOnDestroy() {
diff --git a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.html b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.html
index e5638df..234a697 100644
--- a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.html
+++ b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.html
@@ -19,15 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="contactPersonDetailsSandbox.communicationsDataList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
- [overlayLoadingTemplate]="loadingTemplate"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
<app-spinner [isRunning]="contactPersonDetailsSandbox.communicationsDataListLoading$ | async"></app-spinner>
diff --git a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.scss b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.scss
index 63a5ad3..e116c52 100644
--- a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.scss
+++ b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+.ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.spec.ts b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.spec.ts
index abb265b..8c3be7f 100644
--- a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.spec.ts
+++ b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('ContactPersonCommunicationsDataListComponent', () => {
let component: ContactPersonCommunicationsDataListComponent;
let contactPersonDetailsSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
contactPersonDetailsSandbox = {
registerCommunicationsDataEvents() {},
registerCompanyEvents() {},
@@ -26,6 +28,7 @@
deleteCommunicationsData() {},
newCommunicationsData() {},
} as any;
+ contactPersonDetailsSandbox.communicationsAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.ts b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.ts
index 457a323..6369b86 100644
--- a/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.ts
+++ b/src/app/pages/company/company-details/contact-person-details/communications-data-list/communications-data-list.component.ts
@@ -55,6 +55,11 @@
public createNewCommunicationsDataForm() {
this.contactPersonDetailsSandbox.newCommunicationsData();
this.createNewCompany.emit(null);
+ this.contactPersonDetailsSandbox.communicationsAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.contactPersonDetailsSandbox.communicationsAgApi = params.api;
}
ngOnDestroy() {
diff --git a/src/app/pages/company/company-details/contact-person-details/contact-person-details.component.scss b/src/app/pages/company/company-details/contact-person-details/contact-person-details.component.scss
index 9de3904..5ba1b88 100644
--- a/src/app/pages/company/company-details/contact-person-details/contact-person-details.component.scss
+++ b/src/app/pages/company/company-details/contact-person-details/contact-person-details.component.scss
@@ -18,41 +18,37 @@
flex-direction: row;
height: 100%;
}
+
.table-detail-view-address {
- height: 756px;
- width: 461px;
-}
-.table-view-address {
- height: 711px;
- flex-grow: 1;
-}
-.expandable-address .collapse5 {
- height: 758px;
-}
-.table-detail-view-communication {
- height: 296px;
- width: 461px;
-}
-.table-view-communication {
- height: 263px;
- flex-grow: 1;
-}
-.expandable-communication .collapse5 {
- height: 310px;
-}
-.table-view-contact-persons {
- height: 250px;
- flex-grow: 1;
-}
-.table-detail-view-module-assignment {
- height: 336px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
-.table-view-module-assignment {
- height: 290px;
+
+.table-view-address {
flex-grow: 1;
}
-.expandable-module-assignment .collapse5 {
- height: 338px;
+
+.table-detail-view-communication {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
+}
+
+.table-view-communication {
+ flex-grow: 1;
+}
+
+.table-view-contact-persons {
+ flex-grow: 1;
+}
+
+.table-detail-view-module-assignment {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
+}
+
+.table-view-module-assignment {
+ flex-grow: 1;
}
diff --git a/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.spec.ts b/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.spec.ts
index 583b1e6..c385db2 100644
--- a/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.spec.ts
+++ b/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.spec.ts
@@ -25,8 +25,10 @@
let actionSubject: any;
let router: any;
let modalService: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
router = { navigate() {} } as any;
appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
actionSubject = { pipe: () => of(true) } as any;
@@ -36,6 +38,8 @@
beforeEach(() => {
component = new ContactPersonDetailsSandbox(appState, actionSubject, router, utilService, modalService);
+ component.communicationsAgApi = agApi;
+ component.addressAgApi = agApi;
});
it('should create', () => {
diff --git a/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.ts b/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.ts
index abc1c1a..ea61025 100644
--- a/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.ts
+++ b/src/app/pages/company/company-details/contact-person-details/contact-person-details.sandbox.ts
@@ -52,6 +52,9 @@
public companyContactId: string;
public contactPersonContactId: string;
+ public communicationsAgApi;
+ public addressAgApi;
+
private _communicationTypes: Array<CommunicationType> = new Array<CommunicationType>();
constructor(
@@ -142,6 +145,7 @@
public closeAddressDataDetail(): void {
this.clearAddressData();
this.isAddressDataDetailViewVisible = false;
+ this.addressAgApi.setDomLayout('autoHeight');
}
public newAddressData(): void {
@@ -227,6 +231,7 @@
this.loadContactPersonCommunicationsData(this.companyContactId);
this.clearCommunicationsData();
this.isCommunicationsDataDetailViewVisible = false;
+ this.communicationsAgApi.setDomLayout('autoHeight');
}
public newCommunicationsData(): void {
diff --git a/src/app/pages/company/company-details/contact-person-list/contact-person-list-column-definition.ts b/src/app/pages/company/company-details/contact-person-list/contact-person-list-column-definition.ts
index 73324cc..134d9fd 100644
--- a/src/app/pages/company/company-details/contact-person-list/contact-person-list-column-definition.ts
+++ b/src/app/pages/company/company-details/contact-person-list/contact-person-list-column-definition.ts
@@ -17,36 +17,43 @@
field: 'lastName',
headerName: 'ContactPerson.LastName',
sortable: true,
+ flex: 3
},
{
field: 'firstName',
headerName: 'ContactPerson.FirstName',
sortable: true,
+ flex: 3
},
{
field: 'salutationType',
headerName: 'ContactPerson.Salutation',
sortable: true,
+ flex: 1
},
{
field: 'title',
headerName: 'ContactPerson.PersonTitle',
sortable: true,
+ flex: 1
},
{
field: 'email',
headerName: 'ContactPerson.EMail',
sortable: true,
+ flex: 3
},
{
field: 'personType',
headerName: 'ContactPerson.PersonType',
sortable: true,
+ flex: 2
},
{
field: 'contactNote',
headerName: 'Contacts.Note',
sortable: true,
+ flex: 3
},
{
field: 'tools',
diff --git a/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.html b/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.html
index 6f48084..63f76d8 100644
--- a/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.html
+++ b/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.html
@@ -19,9 +19,9 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="companyDetailsSandBox.contactPersonsList$ | async"
[columnDefs]="columnDefinition"
diff --git a/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.scss b/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.scss
index 3205657..eaf16e7 100644
--- a/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.scss
+++ b/src/app/pages/company/company-details/contact-person-list/contact-person-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
-.diverse-options {
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
+ .diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/contacts/contacts-list/contacts-list.component.html b/src/app/pages/contacts/contacts-list/contacts-list.component.html
index da0841e..37eaa60 100644
--- a/src/app/pages/contacts/contacts-list/contacts-list.component.html
+++ b/src/app/pages/contacts/contacts-list/contacts-list.component.html
@@ -150,6 +150,7 @@
autoResizeColumns
class="ag-theme-balham"
style="min-width: 1130px; height: calc(100vh - 276px);"
+ (rowDoubleClicked) = "navigateToDetails($event)"
[gridOptions]="gridOptions"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
diff --git a/src/app/pages/contacts/contacts-list/contacts-list.component.spec.ts b/src/app/pages/contacts/contacts-list/contacts-list.component.spec.ts
index a16f1c1..2d92c7e 100644
--- a/src/app/pages/contacts/contacts-list/contacts-list.component.spec.ts
+++ b/src/app/pages/contacts/contacts-list/contacts-list.component.spec.ts
@@ -20,10 +20,12 @@
let contactsSandbox: any = {};
let userModuleAssignmentSandbox: any = {};
let router: any = {};
+ let ngZone: any = {};
beforeEach(() => {
router = { navigateByUrl() {}, navigate() {} } as any;
- component = new ContactsListComponent(contactsSandbox, userModuleAssignmentSandbox, router);
+ ngZone = { run() {} } as any;
+ component = new ContactsListComponent(contactsSandbox, userModuleAssignmentSandbox, router, ngZone);
});
it('should create', () => {
@@ -61,8 +63,8 @@
expect(spy).toHaveBeenCalled();
});
- it('should _navigateToDetails if BusEvents is edit ', () => {
- const spy = spyOn(component as any, '_navigateToDetails');
+ it('should navigateToDetails if BusEvents is edit ', () => {
+ const spy = spyOn(component as any, 'navigateToDetails');
const event: any = { type: 'edit' };
(component as any)._handleBusEvents(event);
@@ -84,11 +86,15 @@
});
it('should navigate to the right url', () => {
- const spy = spyOn(router, 'navigate');
+ const url = '/test';
+ const spy = spyOn(ngZone, 'run');
+ component.navigateTo(url);
+ expect(spy).toHaveBeenCalled();
+
+ /* const spy = spyOn(router, 'navigate');
const url = '/test';
component.navigateTo(url);
-
- expect(spy).toHaveBeenCalledWith([url]);
+ expect(spy).toHaveBeenCalledWith([url]); */
});
it('should navigate to the external person details page', () => {
@@ -98,11 +104,15 @@
uuid: 'uuid',
},
};
- const spy = spyOn(router, 'navigate');
- (component as any)._navigateToDetails(event);
- const url = `/${Globals.PATH.PERSONS}/${Globals.PATH.EXTERNAL}/`;
- expect(spy).toHaveBeenCalledWith([url, event.data.uuid]);
+ const spy = spyOn(ngZone, 'run');
+ component.navigateToDetails(event);
+ expect(spy).toHaveBeenCalled();
+
+ /* const spy = spyOn(router, 'navigate');
+ (component as any).navigateToDetails(event);
+ const url = `/${Globals.PATH.PERSONS}/${Globals.PATH.EXTERNAL}/`;
+ expect(spy).toHaveBeenCalledWith([url, event.data.uuid]); */
});
it('should navigate to the internal person details page', () => {
@@ -112,11 +122,14 @@
uuid: 'uuid',
},
};
- const spy = spyOn(router, 'navigate');
- (component as any)._navigateToDetails(event);
- const url = `/${Globals.PATH.PERSONS}/${Globals.PATH.INTERNAL}/`;
- expect(spy).toHaveBeenCalledWith([url, event.data.uuid]);
+ const spy = spyOn(ngZone, 'run');
+ component.navigateToDetails(event);
+ expect(spy).toHaveBeenCalled();
+ //const spy = spyOn(router, 'navigate');
+ //(component as any).navigateToDetails(event);
+ //const url = `/${Globals.PATH.PERSONS}/${Globals.PATH.INTERNAL}/`;
+ //expect(spy).toHaveBeenCalledWith([url, event.data.uuid]);
});
it('should navigate to the contact person details page', () => {
@@ -127,11 +140,15 @@
companyId: 'x',
},
};
- const spy = spyOn(router, 'navigate');
- (component as any)._navigateToDetails(event);
- const url = `/${Globals.PATH.COMPANY}/${event.data.companyId}/${Globals.PATH.CONTACT_PERSON}/`;
- expect(spy).toHaveBeenCalledWith([url, event.data.uuid]);
+ const spy = spyOn(ngZone, 'run');
+ component.navigateToDetails(event);
+ expect(spy).toHaveBeenCalled();
+
+ /* const spy = spyOn(router, 'navigate');
+ (component as any).navigateToDetails(event);
+ const url = `/${Globals.PATH.COMPANY}/${event.data.companyId}/${Globals.PATH.CONTACT_PERSON}/`;
+ expect(spy).toHaveBeenCalledWith([url, event.data.uuid]); */
});
it('should navigate to the company details page', () => {
@@ -141,11 +158,15 @@
uuid: 'uuid',
},
};
- const spy = spyOn(router, 'navigate');
- (component as any)._navigateToDetails(event);
- const url = `/${Globals.PATH.COMPANY}/`;
- expect(spy).toHaveBeenCalledWith([url, event.data.uuid]);
+ const spy = spyOn(ngZone, 'run');
+ component.navigateToDetails(event);
+ expect(spy).toHaveBeenCalled();
+
+ /* const spy = spyOn(router, 'navigate');
+ (component as any).navigateToDetails(event);
+ const url = `/${Globals.PATH.COMPANY}/`;
+ expect(spy).toHaveBeenCalledWith([url, event.data.uuid]); */
});
it('should navigate to the overview if contactType undefined', () => {
@@ -155,11 +176,15 @@
uuid: 'uuid',
},
};
- const spy = spyOn(router, 'navigate');
- (component as any)._navigateToDetails(event);
- const url = '/overview';
- expect(spy).toHaveBeenCalledWith([url]);
+ const spy = spyOn(ngZone, 'run');
+ component.navigateToDetails(event);
+ expect(spy).toHaveBeenCalled();
+
+ /* const spy = spyOn(router, 'navigate');
+ (component as any).navigateToDetails(event);
+ const url = '/overview';
+ expect(spy).toHaveBeenCalledWith([url]); */
});
it('checks if function searchContacts() would be called and works', () => {
diff --git a/src/app/pages/contacts/contacts-list/contacts-list.component.ts b/src/app/pages/contacts/contacts-list/contacts-list.component.ts
index 7f61afa..1f957e5 100644
--- a/src/app/pages/contacts/contacts-list/contacts-list.component.ts
+++ b/src/app/pages/contacts/contacts-list/contacts-list.component.ts
@@ -10,7 +10,7 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
-import { Component, OnInit, OnDestroy } from '@angular/core';
+import { Component, OnInit, OnDestroy, NgZone } from '@angular/core';
import { ContactsSandbox } from '@pages/contacts/contacts.sandbox';
import { CONTACTS_COLDEF } from '@pages/contacts/contacts-list/contacts-list-column-definition';
import { BaseList } from '@shared/components/base-components/base.list';
@@ -49,7 +49,7 @@
private _deletionLockExceeded = false;
private _subscription: Subscription;
- constructor(public contactsSandbox: ContactsSandbox, public userModuleAssignmentSandbox: UserModuleAssignmentSandBox, private router: Router) {
+ constructor(public contactsSandbox: ContactsSandbox, public userModuleAssignmentSandbox: UserModuleAssignmentSandBox, private router: Router, private ngZone: NgZone) {
super();
}
// modifiedContacts.sort.split(',')[(modifiedContacts.sort.match(/,/g) || []).length]
@@ -100,9 +100,9 @@
private _handleBusEvents(event: any): any {
switch (event.type) {
case 'readonly':
- this._navigateToDetails(event);
+ this.navigateToDetails(event);
case 'edit':
- this._navigateToDetails(event);
+ this.navigateToDetails(event);
break;
default:
break;
@@ -110,10 +110,10 @@
}
public navigateTo(url: any) {
- this.router.navigate([url]);
+ this.ngZone.run(() => this.router.navigate([url]));
}
- private _navigateToDetails(event: any) {
+ public navigateToDetails(event: any) {
let route;
switch (event.data.contactType) {
case Globals.CONTACT_TYPE_ID.EXTERNAL_PERSON:
@@ -133,7 +133,7 @@
break;
}
- this.router.navigate(route !== '/overview' ? [route, event.data.uuid] : [route]);
+ this.ngZone.run(() => this.router.navigate(route !== '/overview' ? [route, event.data.uuid] : [route]));
}
public setModifiedContactsSearchText(searchText: string) {
diff --git a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.html b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.html
index 4b7cf3a..db022db 100644
--- a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.html
+++ b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.html
@@ -19,14 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="externalPersonDetailsSandBox.addressList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
diff --git a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.scss b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.scss
index 63a5ad3..9b9ebee 100644
--- a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.scss
+++ b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.spec.ts b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.spec.ts
index 2f71fcf..53f2348 100644
--- a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.spec.ts
+++ b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('AddressListComponent', () => {
let component: ExternalPersonAddressListComponent;
let externalPersonSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
externalPersonSandbox = {
registerAddressEvents() {},
registerExternalPersonEvents() {},
@@ -26,6 +28,7 @@
deleteAddress() {},
clearAddressData() {},
} as any;
+ externalPersonSandbox.addressAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.ts b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.ts
index bbaf354..3baa7e6 100644
--- a/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.ts
+++ b/src/app/pages/persons/external-person/external-person-details/address-list/address-list.component.ts
@@ -12,20 +12,22 @@
********************************************************************************/
import { ExternalPersonDetailsSandBox } from '@pages/persons/external-person/external-person-details/external-person-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { ADDRESS_LIST_COLDEF } from '@shared/components/column-definitions/addresses-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-external-person-address-list',
templateUrl: './address-list.component.html',
styleUrls: ['./address-list.component.scss'],
})
-export class ExternalPersonAddressListComponent extends BaseList {
+export class ExternalPersonAddressListComponent extends BaseList implements OnInit, OnDestroy {
@Output() externalPersonDetailsIdLoaded: EventEmitter<string> = new EventEmitter();
@Output() createNewExternalPerson: EventEmitter<string> = new EventEmitter();
public columnDefinition = ADDRESS_LIST_COLDEF;
+ private _subscription: Subscription;
constructor(public externalPersonDetailsSandBox: ExternalPersonDetailsSandBox) {
super();
@@ -41,7 +43,7 @@
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.externalPersonDetailsIdLoaded.emit(event.data.id);
}
@@ -54,5 +56,14 @@
public createNewAddressForm() {
this.externalPersonDetailsSandBox.clearAddressData();
this.createNewExternalPerson.emit(null);
+ this.externalPersonDetailsSandBox.addressAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.externalPersonDetailsSandBox.addressAgApi = params.api;
+ }
+
+ ngOnDestroy() {
+ this._subscription.unsubscribe();
}
}
diff --git a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.html b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.html
index d6254f3..3efcda3 100644
--- a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.html
+++ b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.html
@@ -19,14 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="externalPersonDetailsSandBox.communicationsDataList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
diff --git a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.scss b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.scss
index 63a5ad3..e116c52 100644
--- a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.scss
+++ b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+.ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.spec.ts b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.spec.ts
index e813b1f..8b91e0a 100644
--- a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.spec.ts
+++ b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('ExternalPersonCommunicationsDataListComponent', () => {
let component: ExternalPersonCommunicationsDataListComponent;
let externalPersonSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
externalPersonSandbox = {
registerCommunicationsDataEvents() {},
registerExternalPersonEvents() {},
@@ -26,6 +28,7 @@
deleteCommunicationsData() {},
clearCommunicationsData() {},
} as any;
+ externalPersonSandbox.communicationsAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.ts b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.ts
index 1c7fae6..7637563 100644
--- a/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.ts
+++ b/src/app/pages/persons/external-person/external-person-details/communications-data-list/communications-data-list.component.ts
@@ -12,21 +12,23 @@
********************************************************************************/
import { ExternalPersonDetailsSandBox } from '@pages/persons/external-person/external-person-details/external-person-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { COMMUNICATIONS_DATA_LIST_COLDEF } from '@shared/components/column-definitions/communications-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-external-person-communications-data-list',
templateUrl: './communications-data-list.component.html',
styleUrls: ['./communications-data-list.component.scss'],
})
-export class ExternalPersonCommunicationsDataListComponent extends BaseList {
+export class ExternalPersonCommunicationsDataListComponent extends BaseList implements OnInit, OnDestroy {
@Output() externalPersonDetailsIdLoaded: EventEmitter<string> = new EventEmitter();
@Output() createNewExternalPerson: EventEmitter<string> = new EventEmitter();
public columnDefinition = COMMUNICATIONS_DATA_LIST_COLDEF;
public frameworkComponents: { setFilterComponent: any };
+ private _subscription: Subscription;
constructor(public externalPersonDetailsSandBox: ExternalPersonDetailsSandBox) {
super();
@@ -42,7 +44,7 @@
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.externalPersonDetailsIdLoaded.emit(event.data.id);
}
@@ -55,5 +57,14 @@
public createNewCommunicationsDataForm() {
this.externalPersonDetailsSandBox.clearCommunicationsData();
this.createNewExternalPerson.emit(null);
+ this.externalPersonDetailsSandBox.communicationsAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.externalPersonDetailsSandBox.communicationsAgApi = params.api;
+ }
+
+ ngOnDestroy() {
+ this._subscription.unsubscribe();
}
}
diff --git a/src/app/pages/persons/external-person/external-person-details/external-person-details.component.scss b/src/app/pages/persons/external-person/external-person-details/external-person-details.component.scss
index d73298c..659b872 100644
--- a/src/app/pages/persons/external-person/external-person-details/external-person-details.component.scss
+++ b/src/app/pages/persons/external-person/external-person-details/external-person-details.component.scss
@@ -13,42 +13,39 @@
.person-buttons {
margin: 16px;
}
+
.expandable-body-container {
display: flex;
flex-direction: row;
height: 100%;
}
+
.table-detail-view-address {
- height: 756px;
- width: 461px;
-}
-.table-view-address {
- height: 711px;
- flex-grow: 1;
-}
-.expandable-address .collapse5 {
- height: 758px;
-}
-.table-detail-view-communication {
- height: 296px;
- width: 461px;
-}
-.table-view-communication {
- height: 263px;
- flex-grow: 1;
-}
-.expandable-communication .collapse5 {
- height: 310px;
-}
-.table-detail-view-module-assignment {
- height: 336px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
-.table-view-module-assignment {
- height: 290px;
+
+.table-view-address {
flex-grow: 1;
}
-.expandable-module-assignment .collapse5 {
- height: 338px;
+
+.table-detail-view-communication {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
+}
+
+.table-view-communication {
+ flex-grow: 1;
+}
+
+.table-detail-view-module-assignment {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
+}
+
+.table-view-module-assignment {
+ flex-grow: 1;
}
diff --git a/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.spec.ts b/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.spec.ts
index 80ddb11..9b89daf 100644
--- a/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.spec.ts
+++ b/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.spec.ts
@@ -23,8 +23,10 @@
let actionSubject: any;
let router: any;
let modalService: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
router = { navigateByUrl() {} } as any;
appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
actionSubject = { pipe: () => of(true) } as any;
@@ -34,6 +36,8 @@
beforeEach(() => {
component = new ExternalPersonDetailsSandBox(appState, utilService, actionSubject, router, modalService);
+ component.addressAgApi = agApi;
+ component.communicationsAgApi = agApi;
});
it('should create', () => {
diff --git a/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.ts b/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.ts
index 835f733..df17554 100644
--- a/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.ts
+++ b/src/app/pages/persons/external-person/external-person-details/external-person-details.sandbox.ts
@@ -52,6 +52,9 @@
private _communicationTypes: Array<CommunicationType> = new Array<CommunicationType>();
private _mainAddress: Address;
+ public communicationsAgApi;
+ public addressAgApi;
+
/**
* ExternalPerson Sandbox constructor
*/
@@ -144,6 +147,7 @@
public closeAddressDataDetail(): void {
this.clearAddressData();
this.isAddressDataDetailViewVisible = false;
+ this.addressAgApi.setDomLayout('autoHeight');
}
public newExternalPerson(): void {
@@ -252,6 +256,7 @@
this.loadCommunicationsData(this.externalPersonContactId);
this.clearCommunicationsData();
this.isCommunicationsDataDetailViewVisible = false;
+ this.communicationsAgApi.setDomLayout('autoHeight');
}
public newCommunicationsData(): void {
diff --git a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.html b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.html
index 4ba1d3a..a6ba81d 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.html
+++ b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.html
@@ -19,14 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="internalPersonDetailsSandBox.addressList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
diff --git a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.scss b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.scss
index 63a5ad3..9b9ebee 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.scss
+++ b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.spec.ts b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.spec.ts
index adc088c..833c8e6 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.spec.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('AddressListComponent', () => {
let component: InternalPersonAddressListComponent;
let internalPersonSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
internalPersonSandbox = {
registerAddressEvents() {},
registerExternalPersonEvents() {},
@@ -26,6 +28,7 @@
deleteAddress() {},
clearAddressData() {},
} as any;
+ internalPersonSandbox.addressAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.ts b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.ts
index e22a335..d62495a 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/address-list/address-list.component.ts
@@ -12,20 +12,22 @@
********************************************************************************/
import { InternalPersonDetailsSandBox } from '@pages/persons/internal-person/internal-person-details/internal-person-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { ADDRESS_LIST_COLDEF } from '@shared/components/column-definitions/addresses-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-internal-person-address-list',
templateUrl: './address-list.component.html',
styleUrls: ['./address-list.component.scss'],
})
-export class InternalPersonAddressListComponent extends BaseList {
+export class InternalPersonAddressListComponent extends BaseList implements OnInit, OnDestroy {
@Output() internalPersonDetailsId: EventEmitter<string> = new EventEmitter();
@Output() createNewInternalPerson: EventEmitter<string> = new EventEmitter();
public columnDefinition = ADDRESS_LIST_COLDEF;
+ private _subscription: Subscription;
constructor(public internalPersonDetailsSandBox: InternalPersonDetailsSandBox) {
super();
@@ -41,7 +43,7 @@
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.internalPersonDetailsId.emit(event.data.id);
}
@@ -54,5 +56,14 @@
public createNewAddressForm() {
this.internalPersonDetailsSandBox.clearAddressData();
this.createNewInternalPerson.emit(null);
+ this.internalPersonDetailsSandBox.addressAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.internalPersonDetailsSandBox.addressAgApi = params.api;
+ }
+
+ ngOnDestroy() {
+ this._subscription.unsubscribe();
}
}
diff --git a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.html b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.html
index f77f018..4a809d0 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.html
+++ b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.html
@@ -19,14 +19,15 @@
</div>
<ag-grid-angular
- autoResizeColumns
- class="ag-theme-balham ag-grid-height"
+ class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="internalPersonDetailsSandBox.communicationsDataList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
diff --git a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.scss b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.scss
index 63a5ad3..e116c52 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.scss
+++ b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+.ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.spec.ts b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.spec.ts
index bda4706..a871dd2 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.spec.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.spec.ts
@@ -17,8 +17,10 @@
describe('InternalPersonCommunicationsDataListComponent', () => {
let component: InternalPersonCommunicationsDataListComponent;
let internalPersonSandbox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
internalPersonSandbox = {
registerCommunicationsDataEvents() {},
registerInternalPersonEvents() {},
@@ -26,6 +28,7 @@
deleteCommunicationsData() {},
newCommunicationsData() {},
} as any;
+ internalPersonSandbox.communicationsAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.ts b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.ts
index b577a5c..9852500 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/communications-data-list/communications-data-list.component.ts
@@ -12,20 +12,22 @@
********************************************************************************/
import { InternalPersonDetailsSandBox } from '@pages/persons/internal-person/internal-person-details/internal-person-details.sandbox';
import { BaseList } from '@shared/components/base-components/base.list';
-import { Component, EventEmitter, Output } from '@angular/core';
+import { Component, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';
import { COMMUNICATIONS_DATA_LIST_COLDEF } from '@shared/components/column-definitions/communications-data-list-column-definition';
import { Globals } from '@shared/constants/globals';
+import { Subscription } from 'rxjs';
@Component({
selector: 'app-internal-person-communications-data-list',
templateUrl: './communications-data-list.component.html',
styleUrls: ['./communications-data-list.component.scss'],
})
-export class InternalPersonCommunicationsDataListComponent extends BaseList {
+export class InternalPersonCommunicationsDataListComponent extends BaseList implements OnInit, OnDestroy {
@Output() internalPersonDetailsId: EventEmitter<string> = new EventEmitter();
@Output() createNewInternalPerson: EventEmitter<string> = new EventEmitter();
public columnDefinition = COMMUNICATIONS_DATA_LIST_COLDEF;
+ private _subscription: Subscription;
constructor(public internalPersonDetailsSandBox: InternalPersonDetailsSandBox) {
super();
@@ -41,7 +43,7 @@
icons: { edit: true, delete: true },
};
- this.gridOptions.context.eventSubject.subscribe(event => {
+ this._subscription = this.gridOptions.context.eventSubject.subscribe(event => {
if (event.type === 'edit' || event.type === 'readonly') {
this.internalPersonDetailsId.emit(event.data.id);
}
@@ -54,5 +56,14 @@
public createNewCommunicationsDataForm() {
this.internalPersonDetailsSandBox.newCommunicationsData();
this.createNewInternalPerson.emit(null);
+ this.internalPersonDetailsSandBox.communicationsAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.internalPersonDetailsSandBox.communicationsAgApi = params.api;
+ }
+
+ ngOnDestroy() {
+ this._subscription.unsubscribe();
}
}
diff --git a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.html b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.html
index a8950ec..aa0fb54 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.html
+++ b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.html
@@ -101,7 +101,7 @@
</div>
</div>
- <!-- Uid -->
+ <!-- Uid LDAP-->
<div class="form-group row">
<label for="uid" class="col-sm-2 col-form-label">{{ 'Internal.Uid' | translate }}</label>
<div class="col-sm-4">
@@ -119,8 +119,14 @@
[inputFormatter]="internalPersonSandBox.formatter"
/>
</div>
- <div class="col-sm-4">
- <input
+
+ <div class="col-sm-info-icon">
+ <i [hidden]="!internalPersonSandBox.showInfoIconLdap"
+ class="fa fa-info-circle info-icon" aria-hidden="true" placement="auto" [ngbTooltip]="((internalPersonSandBox.internalPersonDetailsFormState$ | async)?.controls)['syncNote'].value"
+ tooltipClass="custom-info-tooltip" triggers="hover"></i>
+ </div>
+ <div class="col-sm-4" style="padding: 0 7px">
+ <input [ngClass]="{'error': internalPersonSandBox.isSyncErrorLdap, 'success': internalPersonSandBox.isSyncSuccessLdap }"
readonly="readonly"
type="text"
maxlength="255"
@@ -130,12 +136,14 @@
autocomplete="off"
/>
</div>
- <button type="button" style="flex-basis: 10px;" (click)="internalPersonSandBox.setLdapUidValue(null)" class="tool-icon">
- <fa name="trash"></fa>
+
+ <button type="button" style="flex-basis: 10px;" (click)="internalPersonSandBox.setLdapUidValue(null)" class="btn btn-primary btn-sm">
+ <i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
+
</div>
- <!-- Userref -->
+ <!-- Userref Portal User-->
<div class="form-group row">
<label for="userRef" class="col-sm-2 col-form-label">{{ 'Internal.Userref' | translate }}</label>
<div class="col-sm-4">
@@ -151,7 +159,11 @@
autocomplete="off"
/>
</div>
- <div class="col-sm-4">
+
+ <div class="col-sm-info-icon">
+ <!-- placeholder -->
+ </div>
+ <div class="col-sm-4" style="padding: 0 7px">
<input
readonly="readonly"
type="text"
@@ -162,8 +174,9 @@
autocomplete="off"
/>
</div>
- <button type="button" (click)="internalPersonSandBox.setUserRefValue(null)" class="tool-icon">
- <fa name="trash"></fa>
+
+ <button type="button" (click)="internalPersonSandBox.setUserRefValue(null)" class="btn btn-primary btn-sm">
+ <i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
</div>
diff --git a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.scss b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.scss
index 336f295..958cc48 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.scss
+++ b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.component.scss
@@ -13,45 +13,43 @@
.person-buttons {
margin: 16px;
}
+
.expandable-body-container {
display: flex;
flex-direction: row;
height: 100%;
}
+
.table-detail-view-address {
- height: 756px;
- width: 461px;
-}
-.table-view-address {
- height: 711px;
- flex-grow: 1;
-}
-.expandable-address .collapse5 {
- height: 758px;
-}
-.table-detail-view-communication {
- height: 296px;
- width: 461px;
-}
-.table-view-communication {
- height: 263px;
- flex-grow: 1;
-}
-.expandable-communication .collapse5 {
- height: 310px;
-}
-.table-detail-view-module-assignment {
- height: 336px;
width: 461px;
min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
-.table-view-module-assignment {
- height: 290px;
+
+.table-view-address {
flex-grow: 1;
}
-.expandable-module-assignment .collapse5 {
- height: 338px;
+
+.table-detail-view-communication {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
}
+
+.table-view-communication {
+ flex-grow: 1;
+}
+
+.table-detail-view-module-assignment {
+ width: 461px;
+ min-width: 461px;
+ border-right: 1px solid #bdc3c7;
+}
+
+.table-view-module-assignment {
+ flex-grow: 1;
+}
+
.syncAlertMessage {
position: absolute;
top: 0px;
diff --git a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.spec.ts b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.spec.ts
index 4b9531b..f23b112 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.spec.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.spec.ts
@@ -23,8 +23,10 @@
let actionSubject: any;
let router: any;
let modalService: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
router = { navigateByUrl() {} } as any;
appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
actionSubject = { pipe: () => of([]) } as any;
@@ -34,6 +36,8 @@
beforeEach(() => {
component = new InternalPersonDetailsSandBox(appState, utilService, actionSubject, router, modalService);
+ component.addressAgApi = agApi;
+ component.communicationsAgApi = agApi;
});
it('should create', () => {
@@ -317,22 +321,22 @@
it('should call dispatch and clear the userref if setLdapUidValue called with null', () => {
component.internalPersonDetailsCurrentFormState = {
- controls: { uid: { id: 'test1' }, firstName: { id: 'test2' }, lastName: { id: 'test3' } },
+ controls: { uid: { id: 'test1' }, firstName: { id: 'test2' }, lastName: { id: 'test3' } , isSyncError: { id: 'test4' }, syncNote: { id: 'test5' }},
value: { uid: 'test1', firstName: 'test2', lastName: 'test3' },
} as any;
const spy = spyOn(appState, 'dispatch').and.callThrough();
component.setLdapUidValue(null);
- expect(spy).toHaveBeenCalledTimes(3);
+ expect(spy).toHaveBeenCalledTimes(5);
});
it('should call dispatch and set the userref if setLdapUidValue called with a value', () => {
component.internalPersonDetailsCurrentFormState = {
- controls: { uid: { id: 'test1' }, firstName: { id: 'test2' }, lastName: { id: 'test3' } },
+ controls: { uid: { id: 'test1' }, firstName: { id: 'test2' }, lastName: { id: 'test3' } , isSyncError: { id: 'test4' }, syncNote: { id: 'test5' }},
value: { uid: 'test1', firstName: 'test2', lastName: 'test3' },
} as any;
let ldapUser = { firstName: 'Muster', lastName: 'Administrator', uid: 'admin' };
const spy = spyOn(appState, 'dispatch').and.callThrough();
component.setLdapUidValue({ item: ldapUser });
- expect(spy).toHaveBeenCalledTimes(3);
+ expect(spy).toHaveBeenCalledTimes(5);
});
});
diff --git a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.ts b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.ts
index b242671..e85c041 100644
--- a/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.ts
+++ b/src/app/pages/persons/internal-person/internal-person-details/internal-person-details.sandbox.ts
@@ -21,7 +21,7 @@
import { ActionsSubject, Store } from '@ngrx/store';
import { Address, CommunicationsData, CommunicationType, InternalPerson, KeycloakUser, LdapUser } from '@shared/models';
import { BaseSandbox } from '@shared/sandbox/base.sandbox';
-import { FormGroupState, MarkAsTouchedAction, ResetAction, SetValueAction } from 'ngrx-forms';
+import { FormGroupState, MarkAsTouchedAction, ResetAction, setValue, SetValueAction } from 'ngrx-forms';
import { Injectable } from '@angular/core';
import { map, take, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -50,6 +50,11 @@
public isAddressDataDetailViewVisible: boolean = false;
public existMainAddress = false;
public showSyncAlertMessage = false;
+
+ public showInfoIconLdap = false;
+ public isSyncErrorLdap = false;
+ public isSyncSuccessLdap = false;
+
public isCurrentAddressMainAddress = false;
public internalPersonContactId: string;
private _currentInternalPerson: InternalPerson = null;
@@ -58,6 +63,9 @@
private _ldapUsers: Array<LdapUser> = new Array<LdapUser>();
private _mainAddress: Address;
+ public communicationsAgApi;
+ public addressAgApi;
+
constructor(
public appState$: Store<store.State>,
public utilService: UtilService,
@@ -228,6 +236,7 @@
public closeAddressDataDetail(): void {
this.clearAddressData();
this.isAddressDataDetailViewVisible = false;
+ this.addressAgApi.setDomLayout('autoHeight');
}
public newInternalPerson(): void {
@@ -257,6 +266,9 @@
this.internalPersonDetailsCurrentFormState = formState;
this.showSyncAlertMessage = !!formState.value && (!!formState.value.uid || !!formState.value.userRef) ? true : false;
+ this.showInfoIconLdap = !!formState.value && (!!formState.value.uid && !!formState.value.syncNote && (formState.value.isSyncError !== undefined || formState.value.isSyncError !== null)) ? true : false;
+ this.isSyncErrorLdap = !!formState.value && (!!formState.value.uid && !!formState.value.isSyncError ) ? true : false;
+ this.isSyncSuccessLdap = !!this.showInfoIconLdap && !formState.value.isSyncError ? true : false;
});
}
@@ -333,6 +345,7 @@
this.loadCommunicationsData(this.internalPersonContactId);
this.clearCommunicationsData();
this.isCommunicationsDataDetailViewVisible = false;
+ this.communicationsAgApi.setDomLayout('autoHeight');
}
public newCommunicationsData(): void {
@@ -399,6 +412,9 @@
public formatter = (x: LdapUser) => x.ldapSearchString;
public setLdapUidValue(event: any): void {
+ this.appState$.dispatch(new SetValueAction(this.internalPersonDetailsCurrentFormState.controls.isSyncError.id, null));
+ this.appState$.dispatch(new SetValueAction(this.internalPersonDetailsCurrentFormState.controls.syncNote.id, null));
+
// set the value only if exists - take only the username from the rounded bruckets
this.appState$.dispatch(new SetValueAction(this.internalPersonDetailsCurrentFormState.controls.uid.id, event == null ? null : event.item.uid));
this.appState$.dispatch(new SetValueAction(this.internalPersonDetailsCurrentFormState.controls.firstName.id, event == null ? null : event.item.firstName));
diff --git a/src/app/shared/components/column-definitions/addresses-data-list-column-definition.ts b/src/app/shared/components/column-definitions/addresses-data-list-column-definition.ts
index c4d33d3..a0d21e9 100644
--- a/src/app/shared/components/column-definitions/addresses-data-list-column-definition.ts
+++ b/src/app/shared/components/column-definitions/addresses-data-list-column-definition.ts
@@ -19,6 +19,7 @@
colId: 'addressTypeType',
headerName: 'Address.AddressType',
sortable: true,
+ flex: 3
},
{
field: 'isMainAddress',
@@ -26,42 +27,51 @@
headerName: 'Address.MainAddress',
sortable: true,
cellRendererFramework: BoolCellRendererComponent,
+ flex: 1,
+ minWidth: 100
},
{
field: 'postcode',
colId: 'postcode',
headerName: 'Address.Postcode',
sortable: true,
+ flex: 2
},
{
field: 'community',
colId: 'community',
headerName: 'Address.Community',
sortable: true,
+ flex: 4
},
{
field: 'communitySuffix',
colId: 'communitySuffix',
headerName: 'Address.CommunitySuffix',
sortable: true,
+ flex: 4
},
{
field: 'street',
colId: 'street',
headerName: 'Address.Street',
sortable: true,
+ flex: 4
},
{
field: 'housenumber',
colId: 'housenumber',
headerName: 'Address.Housenumber',
sortable: true,
+ flex: 1,
+ minWidth: 100
},
{
field: 'note',
colId: 'note',
headerName: 'Address.Note',
sortable: true,
+ flex: 4
},
{
field: 'tools',
diff --git a/src/app/shared/components/column-definitions/communications-data-list-column-definition.ts b/src/app/shared/components/column-definitions/communications-data-list-column-definition.ts
index 56c1a20..666c374 100644
--- a/src/app/shared/components/column-definitions/communications-data-list-column-definition.ts
+++ b/src/app/shared/components/column-definitions/communications-data-list-column-definition.ts
@@ -18,29 +18,36 @@
colId: 'communicationTypeType',
headerName: 'CommunicationsData.CommunicationType',
sortable: true,
+ minWidth: 120,
+ maxWidth: 320,
+ flex: 1
},
{
field: 'communicationData',
colId: 'communicationData',
headerName: 'CommunicationsData.CommunicationData',
sortable: true,
+ minWidth: 50,
+ flex: 3
},
{
field: 'note',
colId: 'note',
headerName: 'CommunicationsData.Note',
sortable: true,
+ minWidth: 50,
+ flex: 3
},
{
field: 'tools',
headerName: ' ',
pinned: 'right',
- maxWidth: 110,
- minWidth: 110,
+ minWidth: 120,
+ maxWidth: 120,
lockPosition: true,
- sortable: false,
- suppressMenu: true,
suppressSizeToFit: true,
+ suppressMenu: true,
+ sortable: false,
cellRendererFramework: IconCellRendererComponent,
},
];
diff --git a/src/app/shared/components/expandable/expandable.component.scss b/src/app/shared/components/expandable/expandable.component.scss
index e081e75..a370cca 100644
--- a/src/app/shared/components/expandable/expandable.component.scss
+++ b/src/app/shared/components/expandable/expandable.component.scss
@@ -41,7 +41,9 @@
}
.collapse5 {
- border: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
}
.panel-body {
diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html
index de3846b..50b3aef 100644
--- a/src/app/shared/components/header/header.component.html
+++ b/src/app/shared/components/header/header.component.html
@@ -23,24 +23,9 @@
<fa name="home"></fa>
</button>
<ng-template visibleByRight [onlyForAdmin]="true">
- <div class="dropdown">
- <button
- class="btn btn-link navbar-btn dropdown-toggle"
- type="button"
- id="dropdownMenuButton"
- data-toggle="dropdown"
- aria-haspopup="true"
- aria-expanded="false"
- >
- <fa name="server"></fa>
- </button>
- <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
- <a class="dropdown-item" routerLink="/admin/salutations">{{ 'Salutations.Link' | translate }}</a>
- <a class="dropdown-item" routerLink="/admin/communication-types">{{ 'CommunicationTypes.Link' | translate }}</a>
- <a class="dropdown-item" routerLink="/admin/person-types">{{ 'PersonTypes.Link' | translate }}</a>
- <a class="dropdown-item" routerLink="/admin/address-types">{{ 'AddressTypes.Link' | translate }}</a>
- </div>
- </div>
+ <button type="button" class="btn btn-link navbar-btn" (click)="navigateToAdminPage()">
+ <fa name="server"></fa>
+ </button>
</ng-template>
<a class="btn btn-link navbar-btn" href="./assets/userDocumentation/userDocumentation.html" title="Hilfe" target="_blank">
<fa name="question-circle"></fa>
@@ -48,6 +33,7 @@
<span class="divider"></span>
<div class="dropdown-open nav-user nav-overview-user">
<a class="btn btn-logout dropdown-toggle" style="min-width: 160px;" data-toggle="dropdown" href="#" aria-expanded="true">
+ <i class="fa fa-user fa-fw"></i>
{{ userName }}
<span class="caret"></span>
</a>
@@ -57,5 +43,5 @@
</div>
</div>
</div>
- <!-- <app-version-info class="version-info-simple"></app-version-info> -->
+ <app-version-info class="version-info-simple"></app-version-info>
</nav>
diff --git a/src/app/shared/components/header/header.component.ts b/src/app/shared/components/header/header.component.ts
index 4ec298d..48dea88 100644
--- a/src/app/shared/components/header/header.component.ts
+++ b/src/app/shared/components/header/header.component.ts
@@ -35,6 +35,11 @@
navigateToOverview(this.router).then(this._winLocReload);
}
+
+ public navigateToAdminPage(): void {
+ this.router.navigate(['/admin/salutations']);
+ }
+
private _winLocReload(): void {
window.location.reload();
}
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.html b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.html
index 0125b52..61a97f5 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.html
+++ b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.html
@@ -22,11 +22,13 @@
autoResizeColumns
class="ag-theme-balham"
style="width: 100%; height: 100%;"
+ [domLayout]="'autoHeight'"
[gridOptions]="gridOptions"
[rowData]="userModuleAssignmentSandBox.userModuleAssignmentList$ | async"
[columnDefs]="columnDefinition"
[rowSelection]="'single'"
[overlayNoRowsTemplate]="noRowsTemplate"
+ (gridReady)="onGridReady($event)"
>
</ag-grid-angular>
<app-spinner [isRunning]="userModuleAssignmentSandBox.userModuleAssignmentListLoading$ | async"></app-spinner>
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.scss b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.scss
index 63a5ad3..5dfe05a 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.scss
+++ b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.scss
@@ -10,13 +10,17 @@
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
+ .ag-theme-balham ::ng-deep.ag-root-wrapper {
+ border: none;
+ border-top: 1px solid #bdc3c7;
+}
+
.diverse-options {
display: flex;
justify-content: flex-end;
align-content: center;
background-color: #f5f7f7;
- border: 1px solid rgb(189, 195, 199);
- padding: 7px 7px 5px 7px;
+ padding: 7px;
margin-bottom: 1px;
}
@@ -25,3 +29,9 @@
padding-right: 7px;
border-right: solid 1px #ddd;
}
+
+:host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.spec.ts b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.spec.ts
index 87ef92e..51e7fd6 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.spec.ts
+++ b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.spec.ts
@@ -17,13 +17,16 @@
describe('ListComponent', () => {
let component: UserModuleAssignmentDataListComponent;
let userModuleAssignmentSandBox: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
userModuleAssignmentSandBox = {
registerUserModuleAssignmentEvents() {},
deleteUserModuleAssignment() {},
clearUserModuleAssignmentData() {},
} as any;
+ userModuleAssignmentSandBox.userModuleAgApi = agApi;
}));
beforeEach(() => {
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.ts b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.ts
index 9cd8255..c07503a 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.ts
+++ b/src/app/shared/components/list-details-view/user-module-assignment/list/list.component.ts
@@ -43,5 +43,10 @@
public createNewUserModuleAssignmentForm() {
this.userModuleAssignmentSandBox.clearUserModuleAssignmentData();
this.createNewUserModuleAssignment.emit(null);
+ this.userModuleAssignmentSandBox.userModuleAgApi.setDomLayout('normal');
+ }
+
+ onGridReady(params) {
+ this.userModuleAssignmentSandBox.userModuleAgApi = params.api;
}
}
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.spec.ts b/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.spec.ts
index c72133d..3975c71 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.spec.ts
+++ b/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.spec.ts
@@ -24,8 +24,10 @@
let actionSubject: any;
let router: any;
let modalService: any;
+ let agApi: any;
beforeEach(async(() => {
+ agApi = { setDomLayout() {} }
router = { navigateByUrl() {} } as any;
appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
actionSubject = { pipe: () => of(true) } as any;
@@ -35,6 +37,7 @@
beforeEach(() => {
component = new UserModuleAssignmentSandBox(appState, actionSubject, utilService, router, modalService);
+ component.userModuleAgApi = agApi;
});
it('should create', () => {
diff --git a/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.ts b/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.ts
index 674220c..18bc75a 100644
--- a/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.ts
+++ b/src/app/shared/components/list-details-view/user-module-assignment/user-module-assignment.sandbox.ts
@@ -39,6 +39,7 @@
public isUserModuleAssignmentDataDetailViewVisible: boolean = false;
public contactId: string;
+ public userModuleAgApi;
private _userModuleTypes: Array<UserModuleType> = new Array<UserModuleType>();
@@ -127,6 +128,7 @@
this.loadUserModuleAssignments(this.contactId);
this.clearUserModuleAssignmentData();
this.isUserModuleAssignmentDataDetailViewVisible = false;
+ this.userModuleAgApi.setDomLayout('autoHeight');
}
public newUserModuleAssignmentData(): void {
diff --git a/src/app/shared/components/version-info/version-info.component.html b/src/app/shared/components/version-info/version-info.component.html
index 7057e40..184b46b 100644
--- a/src/app/shared/components/version-info/version-info.component.html
+++ b/src/app/shared/components/version-info/version-info.component.html
@@ -12,5 +12,5 @@
********************************************************************************/ -->
<div class="version-info">
- Version: {{currVersion.frontendVersion}} / {{currVersion.backendVersion}} / {{currVersion.dbVersion}}
+ Version: {{currVersion.frontendVersion}}f / {{currVersion.backendVersion}}b / {{currVersion.dbVersion}}d
</div>
diff --git a/src/app/shared/components/version-info/version-info.component.ts b/src/app/shared/components/version-info/version-info.component.ts
index c5e9213..be502ba 100644
--- a/src/app/shared/components/version-info/version-info.component.ts
+++ b/src/app/shared/components/version-info/version-info.component.ts
@@ -12,6 +12,7 @@
********************************************************************************/
import { Component, OnInit } from '@angular/core';
+import { Globals } from '@app/shared/constants/globals';
// import { VersionInfo } from '../../model/version-info';
// import { VersionInfoService } from '../../services/version-info.service';
// import { Globals } from '../../common/globals';
@@ -37,6 +38,6 @@
private setVersionInfo(vinfo: any) {
this.currVersion = vinfo;
- // this.currVersion.frontendVersion = Globals.FRONTEND_VERSION;
+ this.currVersion.frontendVersion = Globals.FRONTEND_VERSION;
}
}
diff --git a/src/app/shared/constants/globals.ts b/src/app/shared/constants/globals.ts
index 60d8d59..0156dcf 100644
--- a/src/app/shared/constants/globals.ts
+++ b/src/app/shared/constants/globals.ts
@@ -11,6 +11,8 @@
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
export class Globals {
+ static FRONTEND_VERSION = '1.1.0';
+
static CONTACT_TYPE = class ContactType {
static INTERNAL_PERSON = 'interne Person';
static EXTERNAL_PERSON = 'externe Person';
diff --git a/src/app/shared/directives/agGrid/server-side.directive.ts b/src/app/shared/directives/agGrid/server-side.directive.ts
index cca3fe2..1a361fe 100644
--- a/src/app/shared/directives/agGrid/server-side.directive.ts
+++ b/src/app/shared/directives/agGrid/server-side.directive.ts
@@ -1,4 +1,4 @@
-import { EventEmitter } from '@angular/core';
+import { EventEmitter, OnDestroy } from '@angular/core';
/********************************************************************************
* Copyright (c) 2020 Contributors to the Eclipse Foundation
*
@@ -15,7 +15,7 @@
import { PageEvent } from '@shared/models/PageEvent';
import { PageModel } from '@shared/models/page/page.model';
import { AgGridAngular } from 'ag-grid-angular';
-import { take, map } from 'rxjs/operators';
+import { take, map, takeUntil } from 'rxjs/operators';
import { ServerSideModel } from '@shared/models/server-side.model';
import { Directive, Input, ComponentFactoryResolver, ViewContainerRef, ComponentFactory, OnInit, Output } from '@angular/core';
import { Store, ActionsSubject } from '@ngrx/store';
@@ -23,6 +23,7 @@
import * as store from '@shared/store';
import { PageRequestInterface } from '@shared/models/page/page-request.interface';
import { ofType } from '@ngrx/effects';
+import { Subject } from 'rxjs';
/**
* Realises serverside paging
@@ -36,9 +37,10 @@
selector: 'ag-grid-angular[serverside]',
host: {},
})
-export class ServerSideDirective implements OnInit {
+export class ServerSideDirective implements OnInit, OnDestroy {
private _currentPageNumber: number;
private _queryParameter: any;
+ public endOfSubscribtion = new Subject<boolean>();
private _matPaginator: PaginatorComponent;
@@ -80,6 +82,10 @@
private _agGrid: AgGridAngular
) {}
+ ngOnDestroy(): void {
+ this.endOfSubscribtion.next(true);
+ }
+
/**
* @author Martin Gardyan <martin.gardyan@pta.de>
* @memberof ServerSideDirective
@@ -90,7 +96,8 @@
this._actionsSubject
.pipe(
ofType(this.serverside.successAction.type),
- map(item => item.payload)
+ map(item => item.payload),
+ takeUntil(this.endOfSubscribtion)
)
.subscribe((pagedItem: PageModel<any>) => {
if (!this._matPaginator) {
diff --git a/src/app/shared/models/persons/internal-person.model.ts b/src/app/shared/models/persons/internal-person.model.ts
index 81453f9..550f8c3 100644
--- a/src/app/shared/models/persons/internal-person.model.ts
+++ b/src/app/shared/models/persons/internal-person.model.ts
@@ -23,6 +23,8 @@
public personTypeId: string = null;
public salutationId: string = null;
public salutationType: string = null;
+ public syncNote: string = null;
+ public isSyncError: boolean = null;
public uid: string = null;
public title: string = null;
public userRef: string = null;
diff --git a/src/app/shared/utility/utilityHelpers.ts b/src/app/shared/utility/utilityHelpers.ts
index d33c3da..3029309 100644
--- a/src/app/shared/utility/utilityHelpers.ts
+++ b/src/app/shared/utility/utilityHelpers.ts
@@ -48,5 +48,5 @@
};
export function navigateToOverview(router: Router): Promise<boolean> {
- return router.navigateByUrl(`/overview`);
+ return router.navigateByUrl('/overview');
}
diff --git a/src/styles.scss b/src/styles.scss
index 2f3c29f..bb45e00 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -700,6 +700,7 @@
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
+ align-self: center;
}
.col {
flex-basis: 0;
@@ -7022,8 +7023,7 @@
}
ag-grid-angular {
- width: 100%;
- height: calc(100vh - 210px);
+ height: 100%;
}
.ngrx-forms-valid[required],
@@ -7041,6 +7041,10 @@
border-left: 5px solid #a94442;
}
+.success {
+ border-left: 5px solid #42a948;
+}
+
// toaster error font color
.simple-notification.error {
color: white !important;
@@ -7050,3 +7054,34 @@
max-height: 300px;
overflow-y: auto;
}
+
+.info-icon {
+ align-self: center;
+ color: #003a5f;
+ font-size: 1.5em;
+}
+
+.tooltip.bs-tooltip-top .arrow::before {
+ border-top-color: #005e8d;
+ border-top-color: #003a5f;
+ margin-left: 0;
+}
+
+.custom-info-tooltip .tooltip-inner {
+ max-width: 490px;
+ text-align: left;
+ background-color: #e8eeea;
+ color: #000;
+ box-shadow: 0 0 3px #00000040;
+ border: 1px solid #005e8d;
+ border: 1px solid #003a5f;
+}
+
+.ag-center-cols-viewport{
+ overflow: hidden !important;
+}
+
+.col-sm-info-icon {
+ width: 21px;
+ display: flex;
+}