fix rebase
This commit is contained in:
parent
f98df71ef3
commit
dcf62b512e
@ -7,7 +7,7 @@
|
|||||||
[bulkActions]="bulkActions"
|
[bulkActions]="bulkActions"
|
||||||
[hasEmptyColumn]="true"
|
[hasEmptyColumn]="true"
|
||||||
[selectionEnabled]="true"
|
[selectionEnabled]="true"
|
||||||
[tableColumnConfigs]="tableColConfigs"
|
[tableColumnConfigs]="tableColumnConfigs"
|
||||||
[tableHeaderLabel]="tableHeaderLabel"
|
[tableHeaderLabel]="tableHeaderLabel"
|
||||||
></redaction-table-header>
|
></redaction-table-header>
|
||||||
|
|
||||||
|
|||||||
@ -14,11 +14,11 @@ import { LoadingService } from '@services/loading.service';
|
|||||||
providers: [...DefaultListingServices]
|
providers: [...DefaultListingServices]
|
||||||
})
|
})
|
||||||
export class DownloadsListScreenComponent extends BaseListingComponent<DownloadStatusWrapper> implements OnInit {
|
export class DownloadsListScreenComponent extends BaseListingComponent<DownloadStatusWrapper> implements OnInit {
|
||||||
readonly circleButtonTypes = CircleButtonTypes;
|
|
||||||
readonly itemSize = 80;
|
readonly itemSize = 80;
|
||||||
protected readonly _primaryKey = 'storageId';
|
protected readonly _primaryKey = 'storageId';
|
||||||
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
readonly tableHeaderLabel = _('downloads-list.table-header.title');
|
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.name') },
|
||||||
{ label: _('downloads-list.table-col-names.size') },
|
{ label: _('downloads-list.table-col-names.size') },
|
||||||
{ label: _('downloads-list.table-col-names.date') },
|
{ label: _('downloads-list.table-col-names.date') },
|
||||||
@ -47,9 +47,9 @@ export class DownloadsListScreenComponent extends BaseListingComponent<DownloadS
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _deleteItems(downloads?: DownloadStatusWrapper[]) {
|
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();
|
await this._downloadControllerService.deleteDownload({ storageIds }).toPromise();
|
||||||
this.screenStateService.setSelectedEntities([]);
|
this.entitiesService.setSelected([]);
|
||||||
await this._loadData();
|
await this._loadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<redaction-table-header
|
<redaction-table-header
|
||||||
[bulkActions]="bulkActions"
|
[bulkActions]="bulkActions"
|
||||||
[selectionEnabled]="true"
|
[selectionEnabled]="true"
|
||||||
[tableColConfigs]="tableColConfigs"
|
[tableColumnConfigs]="tableColumnConfigs"
|
||||||
[tableHeaderLabel]="tableHeaderLabel"
|
[tableHeaderLabel]="tableHeaderLabel"
|
||||||
>
|
>
|
||||||
<div class="actions flex-1">
|
<div class="actions flex-1">
|
||||||
@ -94,7 +94,7 @@
|
|||||||
<ng-template #bulkActions>
|
<ng-template #bulkActions>
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="openBulkDeleteTemplatesDialog($event)"
|
(action)="openBulkDeleteTemplatesDialog($event)"
|
||||||
*ngIf="canBulkDelete$(permissionsService.isAdmin()) | async"
|
*ngIf="canBulkDelete$(currentUser.isAdmin) | async"
|
||||||
[tooltip]="'dossier-templates-listing.bulk.delete' | translate"
|
[tooltip]="'dossier-templates-listing.bulk.delete' | translate"
|
||||||
[type]="circleButtonTypes.dark"
|
[type]="circleButtonTypes.dark"
|
||||||
icon="red:trash"
|
icon="red:trash"
|
||||||
|
|||||||
@ -5,9 +5,10 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
|
|||||||
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
|
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
|
||||||
import { LoadingService } from '@services/loading.service';
|
import { LoadingService } from '@services/loading.service';
|
||||||
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
|
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 { BaseListingComponent, DefaultListingServices } from '@shared/base/base-listing.component';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './dossier-templates-listing-screen.component.html',
|
templateUrl: './dossier-templates-listing-screen.component.html',
|
||||||
@ -20,7 +21,8 @@ export class DossierTemplatesListingScreenComponent extends BaseListingComponent
|
|||||||
readonly iconButtonTypes = IconButtonTypes;
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
readonly currentUser = this._userService.currentUser;
|
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'),
|
label: _('dossier-templates-listing.table-col-names.name'),
|
||||||
withSort: true,
|
withSort: true,
|
||||||
@ -38,7 +40,6 @@ export class DossierTemplatesListingScreenComponent extends BaseListingComponent
|
|||||||
column: 'dateModified'
|
column: 'dateModified'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
protected _tableHeaderLabel = _('dossier-templates-listing.table-header.title');
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
protected readonly _injector: Injector,
|
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();
|
await this._dossierTemplateControllerService.deleteDossierTemplates(templateIds).toPromise();
|
||||||
this.screenStateService.setSelectedEntities([]);
|
this.entitiesService.setSelected([]);
|
||||||
await this._appStateService.loadAllDossierTemplates();
|
await this._appStateService.loadAllDossierTemplates();
|
||||||
await this._appStateService.loadDictionaryData();
|
await this._appStateService.loadDictionaryData();
|
||||||
this.loadDossierTemplatesData();
|
this.loadDossierTemplatesData();
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<redaction-table-header
|
<redaction-table-header
|
||||||
[bulkActions]="bulkActions"
|
[bulkActions]="bulkActions"
|
||||||
[selectionEnabled]="true"
|
[selectionEnabled]="true"
|
||||||
[tableColConfigs]="tableColConfigs"
|
[tableColumnConfigs]="tableColumnConfigs"
|
||||||
[tableHeaderLabel]="tableHeaderLabel"
|
[tableHeaderLabel]="tableHeaderLabel"
|
||||||
></redaction-table-header>
|
></redaction-table-header>
|
||||||
|
|
||||||
@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="small-label">
|
<div class="small-label">
|
||||||
{{ getRestoreDate(entity.softDeletedTime) | date: 'timeFromNow' }}
|
{{ entity.restoreDate | date: 'timeFromNow' }}
|
||||||
</div>
|
</div>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons">
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
@ -95,7 +95,7 @@
|
|||||||
|
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="hardDelete()"
|
(action)="hardDelete()"
|
||||||
*ngIf="screenStateService.areSomeEntitiesSelected$ | async"
|
*ngIf="entitiesService.areSomeSelected$ | async"
|
||||||
[tooltip]="'trash.bulk.delete' | translate"
|
[tooltip]="'trash.bulk.delete' | translate"
|
||||||
[type]="circleButtonTypes.dark"
|
[type]="circleButtonTypes.dark"
|
||||||
icon="red:trash"
|
icon="red:trash"
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { Dossier } from '@redaction/red-ui-http';
|
|||||||
import { LoadingService } from '@services/loading.service';
|
import { LoadingService } from '@services/loading.service';
|
||||||
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
|
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
|
||||||
import * as moment from 'moment';
|
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 { BaseListingComponent, DefaultListingServices } from '@shared/base/base-listing.component';
|
||||||
import { DossiersService } from '../../../dossier/services/dossiers.service';
|
import { DossiersService } from '../../../dossier/services/dossiers.service';
|
||||||
import { AdminDialogService } from '../../services/admin-dialog.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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { distinctUntilChanged, map } from 'rxjs/operators';
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
||||||
|
import { getLeftDateTime } from '@utils/functions';
|
||||||
const HOURS_IN_A_DAY = 24;
|
|
||||||
const MINUTES_IN_AN_HOUR = 60;
|
|
||||||
|
|
||||||
interface DossierListItem extends Dossier {
|
interface DossierListItem extends Dossier {
|
||||||
readonly canRestore: boolean;
|
readonly canRestore: boolean;
|
||||||
|
readonly restoreDate: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -27,9 +26,13 @@ interface DossierListItem extends Dossier {
|
|||||||
providers: [...DefaultListingServices, DossiersService]
|
providers: [...DefaultListingServices, DossiersService]
|
||||||
})
|
})
|
||||||
export class TrashScreenComponent extends BaseListingComponent<DossierListItem> implements OnInit {
|
export class TrashScreenComponent extends BaseListingComponent<DossierListItem> implements OnInit {
|
||||||
readonly circleButtonTypes = CircleButtonTypes;
|
|
||||||
readonly itemSize = 80;
|
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'),
|
label: _('trash.table-col-names.name'),
|
||||||
withSort: true,
|
withSort: true,
|
||||||
@ -50,10 +53,6 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
|
|||||||
column: 'softDeletedTime'
|
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(
|
constructor(
|
||||||
readonly permissionsService: PermissionsService,
|
readonly permissionsService: PermissionsService,
|
||||||
@ -67,8 +66,8 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
|
|||||||
}
|
}
|
||||||
|
|
||||||
private get _canRestoreSelected$(): Observable<boolean> {
|
private get _canRestoreSelected$(): Observable<boolean> {
|
||||||
return this.screenStateService.selectedEntities$.pipe(
|
return this.entitiesService.selected$.pipe(
|
||||||
map(entities => entities.length && this._canRestore(entities)),
|
map(entities => entities.length && !entities.find(dossier => !dossier.canRestore)),
|
||||||
distinctUntilChanged()
|
distinctUntilChanged()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -79,11 +78,11 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
|
|||||||
this._loadingService.stop();
|
this._loadingService.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
getRestoreDate(softDeletedTime: string): string {
|
private _getRestoreDate(softDeletedTime: string): string {
|
||||||
return moment(softDeletedTime).add(this._deleteRetentionHours, 'hours').toISOString();
|
return moment(softDeletedTime).add(this._deleteRetentionHours, 'hours').toISOString();
|
||||||
}
|
}
|
||||||
|
|
||||||
hardDelete(dossiers = this.screenStateService.selectedEntities) {
|
hardDelete(dossiers = this.entitiesService.selected) {
|
||||||
const data = new ConfirmationDialogInput({
|
const data = new ConfirmationDialogInput({
|
||||||
title: dossiers.length > 1 ? _('confirmation-dialog.delete-dossier.title-alt') : _('confirmation-dialog.delete-dossier.title'),
|
title: dossiers.length > 1 ? _('confirmation-dialog.delete-dossier.title-alt') : _('confirmation-dialog.delete-dossier.title'),
|
||||||
titleColor: TitleColors.PRIMARY,
|
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));
|
this._loadingService.loadWhile(this._restore(dossiers));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _loadDossiersData(): Promise<void> {
|
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 {
|
private _canRestoreDossier(restoreDate: string): boolean {
|
||||||
return dossiers.reduce((prev, dossier) => prev && dossier.canRestore, true);
|
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(restoreDate);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0;
|
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0;
|
||||||
}
|
}
|
||||||
@ -132,9 +120,11 @@ export class TrashScreenComponent extends BaseListingComponent<DossierListItem>
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _toListItem(dossier: Dossier): DossierListItem {
|
private _toListItem(dossier: Dossier): DossierListItem {
|
||||||
|
const restoreDate = this._getRestoreDate(dossier.softDeletedTime);
|
||||||
return {
|
return {
|
||||||
...dossier,
|
...dossier,
|
||||||
canRestore: this._canRestoreDossier(dossier)
|
restoreDate,
|
||||||
|
canRestore: this._canRestoreDossier(restoreDate)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
[class.no-data]="screenStateService.noData$ | async"
|
[class.no-data]="entitiesService.noData$ | async"
|
||||||
[class.selection-enabled]="selectionEnabled"
|
[class.selection-enabled]="selectionEnabled"
|
||||||
class="table-header"
|
class="table-header"
|
||||||
redactionSyncWidth="table-item"
|
redactionSyncWidth="table-item"
|
||||||
|
|||||||
@ -3,9 +3,8 @@ import * as moment from 'moment';
|
|||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { DatePipe as BaseDatePipe } from '@angular/common';
|
import { DatePipe as BaseDatePipe } from '@angular/common';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
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 = {
|
const MONTH_NAMES = {
|
||||||
0: _('months.jan'),
|
0: _('months.jan'),
|
||||||
1: _('months.feb'),
|
1: _('months.feb'),
|
||||||
@ -38,15 +37,8 @@ export class DatePipe extends BaseDatePipe implements PipeTransform {
|
|||||||
return super.transform(value, format, timezone, locale);
|
return super.transform(value, format, timezone, locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getTimeFromNow(item: string) {
|
private _getTimeFromNow(value: string) {
|
||||||
const date = moment(item);
|
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(value);
|
||||||
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;
|
|
||||||
|
|
||||||
if (daysLeft === 0 && hoursLeft === 0 && minutesLeft > 0) return this._translateService.instant('time.less-than-an-hour');
|
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 const FALLBACK_COLOR = '#CCCCCC';
|
||||||
|
|
||||||
export function groupBy(xs: any[], key: string) {
|
export function groupBy(xs: any[], key: string) {
|
||||||
@ -67,3 +69,19 @@ export function toNumber(string) {
|
|||||||
return 0;
|
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