fix rebase

This commit is contained in:
Dan Percic 2021-08-09 17:23:20 +03:00 committed by Adina Țeudan
parent f98df71ef3
commit dcf62b512e
9 changed files with 58 additions and 57 deletions

View File

@ -7,7 +7,7 @@
[bulkActions]="bulkActions"
[hasEmptyColumn]="true"
[selectionEnabled]="true"
[tableColumnConfigs]="tableColConfigs"
[tableColumnConfigs]="tableColumnConfigs"
[tableHeaderLabel]="tableHeaderLabel"
></redaction-table-header>

View File

@ -14,11 +14,11 @@ import { LoadingService } from '@services/loading.service';
providers: [...DefaultListingServices]
})
export class DownloadsListScreenComponent extends BaseListingComponent<DownloadStatusWrapper> implements OnInit {
readonly circleButtonTypes = CircleButtonTypes;
readonly itemSize = 80;
protected readonly _primaryKey = 'storageId';
readonly circleButtonTypes = CircleButtonTypes;
readonly tableHeaderLabel = _('downloads-list.table-header.title');
readonly tableColConfigs: TableColumnConfig<DownloadStatusWrapper>[] = [
readonly tableColumnConfigs: TableColumnConfig<DownloadStatusWrapper>[] = [
{ label: _('downloads-list.table-col-names.name') },
{ label: _('downloads-list.table-col-names.size') },
{ label: _('downloads-list.table-col-names.date') },
@ -47,9 +47,9 @@ export class DownloadsListScreenComponent extends BaseListingComponent<DownloadS
}
private async _deleteItems(downloads?: DownloadStatusWrapper[]) {
const storageIds = (downloads || this.screenStateService.selectedEntities).map(d => d.storageId);
const storageIds = (downloads || this.entitiesService.selected).map(d => d.storageId);
await this._downloadControllerService.deleteDownload({ storageIds }).toPromise();
this.screenStateService.setSelectedEntities([]);
this.entitiesService.setSelected([]);
await this._loadData();
}

View File

@ -11,7 +11,7 @@
<redaction-table-header
[bulkActions]="bulkActions"
[selectionEnabled]="true"
[tableColConfigs]="tableColConfigs"
[tableColumnConfigs]="tableColumnConfigs"
[tableHeaderLabel]="tableHeaderLabel"
>
<div class="actions flex-1">
@ -94,7 +94,7 @@
<ng-template #bulkActions>
<iqser-circle-button
(action)="openBulkDeleteTemplatesDialog($event)"
*ngIf="canBulkDelete$(permissionsService.isAdmin()) | async"
*ngIf="canBulkDelete$(currentUser.isAdmin) | async"
[tooltip]="'dossier-templates-listing.bulk.delete' | translate"
[type]="circleButtonTypes.dark"
icon="red:trash"

View File

@ -5,9 +5,10 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
import { LoadingService } from '@services/loading.service';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
import { CircleButtonTypes, IconButtonTypes, TableColumnConfig } from '@iqser/common-ui';
import { BaseListingComponent, DefaultListingServices } from '@shared/base/base-listing.component';
import { UserService } from '@services/user.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@Component({
templateUrl: './dossier-templates-listing-screen.component.html',
@ -20,7 +21,8 @@ export class DossierTemplatesListingScreenComponent extends BaseListingComponent
readonly iconButtonTypes = IconButtonTypes;
readonly circleButtonTypes = CircleButtonTypes;
readonly currentUser = this._userService.currentUser;
tableColConfigs: TableColConfig[] = [
readonly tableHeaderLabel = _('dossier-templates-listing.table-header.title');
tableColumnConfigs: TableColumnConfig<DossierTemplateModelWrapper>[] = [
{
label: _('dossier-templates-listing.table-col-names.name'),
withSort: true,
@ -38,7 +40,6 @@ export class DossierTemplatesListingScreenComponent extends BaseListingComponent
column: 'dateModified'
}
];
protected _tableHeaderLabel = _('dossier-templates-listing.table-header.title');
constructor(
protected readonly _injector: Injector,
@ -74,9 +75,9 @@ export class DossierTemplatesListingScreenComponent extends BaseListingComponent
});
}
private async _deleteTemplates(templateIds: string[] = this.screenStateService.selectedEntities.map(d => d.dossierTemplateId)) {
private async _deleteTemplates(templateIds: string[] = this.entitiesService.selected.map(d => d.dossierTemplateId)) {
await this._dossierTemplateControllerService.deleteDossierTemplates(templateIds).toPromise();
this.screenStateService.setSelectedEntities([]);
this.entitiesService.setSelected([]);
await this._appStateService.loadAllDossierTemplates();
await this._appStateService.loadDictionaryData();
this.loadDossierTemplatesData();

View File

@ -8,7 +8,7 @@
<redaction-table-header
[bulkActions]="bulkActions"
[selectionEnabled]="true"
[tableColConfigs]="tableColConfigs"
[tableColumnConfigs]="tableColumnConfigs"
[tableHeaderLabel]="tableHeaderLabel"
></redaction-table-header>
@ -56,7 +56,7 @@
<div>
<div class="small-label">
{{ getRestoreDate(entity.softDeletedTime) | date: 'timeFromNow' }}
{{ entity.restoreDate | date: 'timeFromNow' }}
</div>
<div class="action-buttons">
<iqser-circle-button
@ -95,7 +95,7 @@
<iqser-circle-button
(action)="hardDelete()"
*ngIf="screenStateService.areSomeEntitiesSelected$ | async"
*ngIf="entitiesService.areSomeSelected$ | async"
[tooltip]="'trash.bulk.delete' | translate"
[type]="circleButtonTypes.dark"
icon="red:trash"

View File

@ -4,7 +4,7 @@ import { Dossier } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import * as moment from 'moment';
import { CircleButtonTypes } from '@iqser/common-ui';
import { CircleButtonTypes, TableColumnConfig } from '@iqser/common-ui';
import { BaseListingComponent, DefaultListingServices } from '@shared/base/base-listing.component';
import { DossiersService } from '../../../dossier/services/dossiers.service';
import { AdminDialogService } from '../../services/admin-dialog.service';
@ -12,12 +12,11 @@ import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmati
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { Observable } from 'rxjs';
import { distinctUntilChanged, map } from 'rxjs/operators';
const HOURS_IN_A_DAY = 24;
const MINUTES_IN_AN_HOUR = 60;
import { getLeftDateTime } from '@utils/functions';
interface DossierListItem extends Dossier {
readonly canRestore: boolean;
readonly restoreDate: string;
}
@Component({
@ -27,9 +26,13 @@ interface DossierListItem extends Dossier {
providers: [...DefaultListingServices, DossiersService]
})
export class TrashScreenComponent extends BaseListingComponent<DossierListItem> implements OnInit {
readonly circleButtonTypes = CircleButtonTypes;
readonly itemSize = 80;
readonly tableColConfigs: TableColConfig[] = [
protected readonly _primaryKey = 'dossierName';
readonly circleButtonTypes = CircleButtonTypes;
readonly tableHeaderLabel = 'trash.table-header.title';
readonly canRestoreSelected$ = this._canRestoreSelected$;
private readonly _deleteRetentionHours = this._appConfigService.getConfig(AppConfigKey.DELETE_RETENTION_HOURS);
readonly tableColumnConfigs: TableColumnConfig<DossierListItem>[] = [
{
label: _('trash.table-col-names.name'),
withSort: true,
@ -50,10 +53,6 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
column: 'softDeletedTime'
}
];
readonly canRestoreSelected$ = this._canRestoreSelected$;
protected readonly _primaryKey = 'dossierName';
protected readonly _tableHeaderLabel = 'trash.table-header.title';
private readonly _deleteRetentionHours = this._appConfigService.getConfig(AppConfigKey.DELETE_RETENTION_HOURS);
constructor(
readonly permissionsService: PermissionsService,
@ -67,8 +66,8 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
}
private get _canRestoreSelected$(): Observable<boolean> {
return this.screenStateService.selectedEntities$.pipe(
map(entities => entities.length && this._canRestore(entities)),
return this.entitiesService.selected$.pipe(
map(entities => entities.length && !entities.find(dossier => !dossier.canRestore)),
distinctUntilChanged()
);
}
@ -79,11 +78,11 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
this._loadingService.stop();
}
getRestoreDate(softDeletedTime: string): string {
private _getRestoreDate(softDeletedTime: string): string {
return moment(softDeletedTime).add(this._deleteRetentionHours, 'hours').toISOString();
}
hardDelete(dossiers = this.screenStateService.selectedEntities) {
hardDelete(dossiers = this.entitiesService.selected) {
const data = new ConfirmationDialogInput({
title: dossiers.length > 1 ? _('confirmation-dialog.delete-dossier.title-alt') : _('confirmation-dialog.delete-dossier.title'),
titleColor: TitleColors.PRIMARY,
@ -102,27 +101,16 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
});
}
restore(dossiers = this.screenStateService.selectedEntities) {
restore(dossiers = this.entitiesService.selected) {
this._loadingService.loadWhile(this._restore(dossiers));
}
private async _loadDossiersData(): Promise<void> {
this.screenStateService.setEntities(this._toListItems(await this._dossiersService.getDeleted()));
this.entitiesService.setEntities(this._toListItems(await this._dossiersService.getDeleted()));
}
private _canRestore(dossiers: DossierListItem[]): boolean {
return dossiers.reduce((prev, dossier) => prev && dossier.canRestore, true);
}
private _canRestoreDossier(dossier: Dossier): boolean {
const date = moment(this.getRestoreDate(dossier.softDeletedTime));
const now = new Date(Date.now());
const daysLeft = date.diff(now, 'days');
const hoursFromNow = date.diff(now, 'hours');
const hoursLeft = hoursFromNow - HOURS_IN_A_DAY * daysLeft;
const minutesFromNow = date.diff(now, 'minutes');
const minutesLeft = minutesFromNow - HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR * daysLeft;
private _canRestoreDossier(restoreDate: string): boolean {
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(restoreDate);
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0;
}
@ -132,9 +120,11 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
}
private _toListItem(dossier: Dossier): DossierListItem {
const restoreDate = this._getRestoreDate(dossier.softDeletedTime);
return {
...dossier,
canRestore: this._canRestoreDossier(dossier)
restoreDate,
canRestore: this._canRestoreDossier(restoreDate)
};
}

View File

@ -19,7 +19,7 @@
</div>
<div
[class.no-data]="screenStateService.noData$ | async"
[class.no-data]="entitiesService.noData$ | async"
[class.selection-enabled]="selectionEnabled"
class="table-header"
redactionSyncWidth="table-item"

View File

@ -3,9 +3,8 @@ import * as moment from 'moment';
import { TranslateService } from '@ngx-translate/core';
import { DatePipe as BaseDatePipe } from '@angular/common';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { getLeftDateTime } from '@utils/functions';
const HOURS_IN_A_DAY = 24;
const MINUTES_IN_AN_HOUR = 60;
const MONTH_NAMES = {
0: _('months.jan'),
1: _('months.feb'),
@ -38,15 +37,8 @@ export class DatePipe extends BaseDatePipe implements PipeTransform {
return super.transform(value, format, timezone, locale);
}
private _getTimeFromNow(item: string) {
const date = moment(item);
const now = new Date(Date.now());
const daysLeft = date.diff(now, 'days');
const hoursFromNow = date.diff(now, 'hours');
const hoursLeft = hoursFromNow - HOURS_IN_A_DAY * daysLeft;
const minutesFromNow = date.diff(now, 'minutes');
const minutesLeft = minutesFromNow - HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR * daysLeft;
private _getTimeFromNow(value: string) {
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(value);
if (daysLeft === 0 && hoursLeft === 0 && minutesLeft > 0) return this._translateService.instant('time.less-than-an-hour');

View File

@ -1,3 +1,5 @@
import * as moment from 'moment';
export const FALLBACK_COLOR = '#CCCCCC';
export function groupBy(xs: any[], key: string) {
@ -67,3 +69,19 @@ export function toNumber(string) {
return 0;
}
}
const HOURS_IN_A_DAY = 24;
const MINUTES_IN_AN_HOUR = 60;
export function getLeftDateTime(ISOString: string) {
const date = moment(ISOString);
const now = new Date(Date.now());
const daysLeft = date.diff(now, 'days');
const hoursFromNow = date.diff(now, 'hours');
const hoursLeft = hoursFromNow - HOURS_IN_A_DAY * daysLeft;
const minutesFromNow = date.diff(now, 'minutes');
const minutesLeft = minutesFromNow - HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR * daysLeft;
return { daysLeft, hoursLeft, minutesLeft };
}