fix rebase
This commit is contained in:
parent
f98df71ef3
commit
dcf62b512e
@ -7,7 +7,7 @@
|
||||
[bulkActions]="bulkActions"
|
||||
[hasEmptyColumn]="true"
|
||||
[selectionEnabled]="true"
|
||||
[tableColumnConfigs]="tableColConfigs"
|
||||
[tableColumnConfigs]="tableColumnConfigs"
|
||||
[tableHeaderLabel]="tableHeaderLabel"
|
||||
></redaction-table-header>
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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');
|
||||
|
||||
|
||||
@ -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 };
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user