fixed bugs for syngenta

This commit is contained in:
Timo Bejan 2021-09-02 12:35:38 +03:00
parent 747521dbf0
commit 5f793ed27d
10 changed files with 112 additions and 22 deletions

View File

@ -3,8 +3,9 @@ import { AppStateService } from '@state/app-state.service';
import { Router } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { CircleButtonTypes, LoadingService } from '@iqser/common-ui';
import { CircleButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
import { UserService } from '@services/user.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@Component({
selector: 'redaction-dossier-template-actions',
@ -20,6 +21,7 @@ export class DossierTemplateActionsComponent implements OnInit {
constructor(
private readonly _router: Router,
private readonly _toaster: Toaster,
private readonly _userService: UserService,
private readonly _loadingService: LoadingService,
private readonly _appStateService: AppStateService,
@ -44,6 +46,18 @@ export class DossierTemplateActionsComponent implements OnInit {
openDeleteDossierTemplateDialog($event?: MouseEvent) {
this._dialogService.openDialog('confirm', $event, null, async () => {
this._loadingService.start();
await this._dossierTemplateControllerService
.deleteDossierTemplates([this.dossierTemplateId])
.toPromise()
.catch(error => {
if (error.status === 409) {
this._toaster.error(_('dossier-templates-listing.error.conflict'));
} else {
this._toaster.error(_('dossier-templates-listing.error.generic'));
}
this._loadingService.stop();
});
await this._dossierTemplateControllerService.deleteDossierTemplates([this.dossierTemplateId]).toPromise();
await this._appStateService.loadAllDossierTemplates();
await this._appStateService.loadDictionaryData();

View File

@ -2,9 +2,10 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { UserControllerService } from '@redaction/red-ui-http';
import { AdminDialogService } from '../../../services/admin-dialog.service';
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
import { rolesTranslations } from '../../../../../translations/roles-translations';
import { UserWrapper } from '@services/user.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@Component({
selector: 'redaction-user-details',
@ -24,6 +25,7 @@ export class UserDetailsComponent implements OnInit {
constructor(
private readonly _formBuilder: FormBuilder,
private readonly _toaster: Toaster,
private readonly _dialogService: AdminDialogService,
private readonly _loadingService: LoadingService,
private readonly _userControllerService: UserControllerService
@ -99,12 +101,24 @@ export class UserDetailsComponent implements OnInit {
const userData = { ...this.userForm.getRawValue(), roles: this.activeRoles };
if (!this.user) {
await this._userControllerService.createUser(userData).toPromise();
await this._userControllerService
.createUser(userData)
.toPromise()
.then(() => {
this.closeDialog.emit(true);
})
.catch(error => {
if (error.status === 409) {
this._toaster.error(_('add-edit-user.error.email-already-used'));
} else {
this._toaster.error(_('add-edit-user.error.generic'));
}
this._loadingService.stop();
});
} else {
await this._userControllerService.updateProfile(userData, this.user.id).toPromise();
this.closeDialog.emit(true);
}
this.closeDialog.emit(true);
}
async delete() {

View File

@ -9,7 +9,8 @@ import {
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
TableColumnConfig,
Toaster
} from '@iqser/common-ui';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { UserService } from '@services/user.service';
@ -46,6 +47,7 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
constructor(
protected readonly _injector: Injector,
private readonly _toaster: Toaster,
private readonly _userService: UserService,
private readonly _loadingService: LoadingService,
private readonly _appStateService: AppStateService,
@ -80,7 +82,16 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
}
private async _deleteTemplates(templateIds: string[] = this.entitiesService.selected.map(d => d.dossierTemplateId)) {
await this._dossierTemplateControllerService.deleteDossierTemplates(templateIds).toPromise();
await this._dossierTemplateControllerService
.deleteDossierTemplates(templateIds)
.toPromise()
.catch(error => {
if (error.status === 409) {
this._toaster.error(_('dossier-templates-listing.error.conflict'));
} else {
this._toaster.error(_('dossier-templates-listing.error.generic'));
}
});
this.entitiesService.setSelected([]);
await this._appStateService.loadAllDossierTemplates();
await this._appStateService.loadDictionaryData();

View File

@ -25,7 +25,11 @@
<redaction-empty-state *ngIf="noMatch$ | async" [text]="'trash.no-match.title' | translate"></redaction-empty-state>
<cdk-virtual-scroll-viewport [itemSize]="itemSize" redactionHasScrollbar>
<div *cdkVirtualFor="let entity of sortedDisplayedEntities$ | async; trackBy: trackByPrimaryKey" class="table-item">
<div
*cdkVirtualFor="let entity of sortedDisplayedEntities$ | async; trackBy: trackByPrimaryKey"
class="table-item"
[class.disabled]="!entity.canRestore"
>
<div (click)="toggleEntitySelected($event, entity)" class="selection-column">
<iqser-round-checkbox [active]="isSelected(entity)"></iqser-round-checkbox>
</div>
@ -54,8 +58,10 @@
<redaction-initials-avatar [userId]="entity.ownerId" [withName]="true"></redaction-initials-avatar>
</div>
<div class="small-label">
{{ entity.softDeletedTime | date: 'd MMM. yyyy, hh:mm a' }}
<div>
<div class="small-label">
{{ entity.softDeletedTime === '-' ? '-' : (entity.softDeletedTime | date: 'd MMM. yyyy, hh:mm a') }}
</div>
</div>
<div>

View File

@ -37,3 +37,10 @@
}
}
}
.disabled {
> div {
background-color: $grey-2;
color: $grey-7;
}
}

View File

@ -1,6 +1,14 @@
import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core';
import { Dossier } from '@redaction/red-ui-http';
import { CircleButtonTypes, DefaultListingServices, ListingComponent, LoadingService, Listable, TableColumnConfig } from '@iqser/common-ui';
import {
CircleButtonTypes,
DefaultListingServices,
ListingComponent,
LoadingService,
Listable,
TableColumnConfig,
SortingOrders
} from '@iqser/common-ui';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import * as moment from 'moment';
import { DossiersService } from '../../../dossier/services/dossiers.service';
@ -70,6 +78,10 @@ export class TrashScreenComponent extends ListingComponent<DossierListItem> impl
async ngOnInit(): Promise<void> {
this._loadingService.start();
await this._loadDossiersData();
this.sortingService.setSortingOption({
column: 'softDeletedTime',
order: SortingOrders.desc
});
this._loadingService.stop();
}
@ -101,7 +113,7 @@ export class TrashScreenComponent extends ListingComponent<DossierListItem> impl
}
private async _loadDossiersData(): Promise<void> {
this.entitiesService.setEntities(this._toListItems(await this._dossiersService.getDeleted()));
this.entitiesService.setEntities(this._toListItems(await this._dossiersService.getDeleted()).filter(d => d.canRestore));
}
private _canRestoreDossier(restoreDate: string): boolean {
@ -120,7 +132,9 @@ export class TrashScreenComponent extends ListingComponent<DossierListItem> impl
id: dossier.dossierId,
...dossier,
restoreDate,
canRestore: this._canRestoreDossier(restoreDate)
canRestore: this._canRestoreDossier(restoreDate),
// Because of migrations, for some this is not set
softDeletedTime: dossier.softDeletedTime || '-'
};
}

View File

@ -105,7 +105,7 @@ export class EditDossierDialogComponent {
}
updatedDossier() {
this._toaster.success(_('edit-dossier-dialog.change-successful'));
this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossierWrapper.dossierName } });
this.dossierWrapper = this._appStateService.getDossierById(this.dossierWrapper.dossierId);
this._changeRef.detectChanges();
this.afterSave();

View File

@ -13,6 +13,7 @@ import { EditDossierDialogComponent } from '../edit-dossier-dialog.component';
import { Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { IconButtonTypes } from '@iqser/common-ui';
import { ConfirmationDialogInput, TitleColors } from '../../../../shared/dialogs/confirmation-dialog/confirmation-dialog.component';
@Component({
selector: 'redaction-edit-dossier-general-info',
@ -106,14 +107,29 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
}
async deleteDossier() {
await this._appStateService.deleteDossier(this.dossierWrapper);
this._editDossierDialogRef.componentInstance.afterSave();
this._editDossierDialogRef.close();
this._router.navigate(['main', 'dossiers']).then(() => this._notifyDossierDeleted());
const data = new ConfirmationDialogInput({
title: _('confirmation-dialog.delete-dossier.title'),
titleColor: TitleColors.PRIMARY,
question: _('confirmation-dialog.delete-dossier.question'),
// details: _('confirmation-dialog.delete-dossier.details'),
confirmationText: _('confirmation-dialog.delete-dossier.confirmation-text'),
requireInput: true,
denyText: _('confirmation-dialog.delete-dossier.deny-text'),
translateParams: {
dossierName: this.dossierWrapper.dossierName,
dossiersCount: 1
}
});
this._dialogService.openDialog('confirm', null, data, async () => {
await this._appStateService.deleteDossier(this.dossierWrapper);
this._editDossierDialogRef.componentInstance.afterSave();
this._editDossierDialogRef.close();
this._router.navigate(['main', 'dossiers']).then(() => this._notifyDossierDeleted());
});
}
private _notifyDossierDeleted() {
this._toaster.success(_('edit-dossier-dialog.delete-successful'));
this._toaster.success(_('edit-dossier-dialog.delete-successful'), { params: { dossierName: this.dossierWrapper.dossierName } });
}
private _filterInvalidDossierTemplates() {

View File

@ -100,6 +100,10 @@
"save": "Save User",
"save-changes": "Save Changes"
},
"error": {
"email-already-used": "This e-mail address is already in use by a different user!",
"generic": "Failed to save user!"
},
"form": {
"email": "Email",
"first-name": "First Name",
@ -706,6 +710,10 @@
},
"dossier-templates": "Dossier Templates",
"dossier-templates-listing": {
"error": {
"conflict": "Cannot delete this DossierTemplate! At least on Dossier uses this template!",
"generic": "Cannot delete this DossierTemplate!"
},
"action": {
"delete": "Delete Template",
"edit": "Edit Template"
@ -787,8 +795,8 @@
"no-image-attributes": "There are no image attributes",
"upload-image": "Upload Image"
},
"change-successful": "Dossier was updated.",
"delete-successful": "Dossier was deleted.",
"change-successful": "Dossier {dossierName} was updated.",
"delete-successful": "Dossier {dossierName} was deleted.",
"deleted-documents": {
"action": {
"delete": "Delete Forever",

@ -1 +1 @@
Subproject commit 67bde73b9c115f7d5636e034b82083f02b3da0a7
Subproject commit 82f27f1ed9ff98c98877c4cf128b4b41832a1724