[ADF-2699] added localisation for time ago pipe (#3298)

* [ADF-2699] added localisation to the time-ago pipe

* [ADF-2699] added lang to time ago pipe

* [ADF-2699] added localisation for time ago pipe

* [ADF-2699] removed fdescribe

* [ADF-2699] removed comments

* [ADF-2699] removed useless default values
This commit is contained in:
Vito
2018-05-10 19:41:02 +01:00
committed by Eugenio Romano
parent 4c7a63c95a
commit d2cfbeadb5
9 changed files with 49 additions and 125 deletions

View File

@@ -107,7 +107,7 @@
<mat-icon>{{ data.getValue(row, col) }}</mat-icon>
</div>
<div *ngSwitchCase="'date'" class="cell-value"
[attr.data-automation-id]="'date_' + data.getValue(row, col)">
[attr.data-automation-id]="'date_' + (data.getValue(row, col) | date: 'medium') ">
<adf-date-cell
[data]="data"
[column]="col"

View File

@@ -15,18 +15,38 @@
* limitations under the License.
*/
import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
import { Component, ViewEncapsulation } from '@angular/core';
import { DataTableCellComponent } from './datatable-cell.component';
import { UserPreferencesService, UserPreferenceValues } from '../../../services';
@Component({
selector: 'adf-date-cell',
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<ng-container>
<span [title]="tooltip">{{value}}</span>
<span title="{{ tooltip | date:'medium' }}" *ngIf="column?.format === 'timeAgo' else standard_date">
{{ value | adfTimeAgo: currentLocale }}
</span>
</ng-container>
<ng-template #standard_date>
<span title="{{ tooltip | date:'medium' }}">
{{ value | date:'medium' }}
</span>
</ng-template>
`,
encapsulation: ViewEncapsulation.None,
host: { class: 'adf-date-cell' }
})
export class DateCellComponent extends DataTableCellComponent {}
export class DateCellComponent extends DataTableCellComponent {
currentLocale;
constructor(userPreferenceService: UserPreferencesService) {
super();
userPreferenceService.select(UserPreferenceValues.Locale).subscribe((locale) => {
this.currentLocale = locale;
});
}
}

View File

@@ -15,9 +15,6 @@
* limitations under the License.
*/
import { DatePipe } from '@angular/common';
import { TimeAgoPipe } from '../../pipes';
import { DataColumn } from './data-column.model';
import { DataRow } from './data-row.model';
import { ObjectDataRow } from './object-datarow.model';
@@ -107,14 +104,6 @@ export class ObjectDataTableAdapter implements DataTableAdapter {
let value = row.getValue(col.key);
if (col.type === 'date') {
try {
return this.formatDate(col, value);
} catch (err) {
console.error(`Error parsing date ${value} to format ${col.format}`);
}
}
if (col.type === 'icon') {
const icon = row.getValue(col.key);
return icon;
@@ -123,21 +112,6 @@ export class ObjectDataTableAdapter implements DataTableAdapter {
return value;
}
formatDate(col: DataColumn, value: any): string {
if (col.type === 'date') {
const format = col.format || 'medium';
if (format === 'timeAgo') {
const timeAgoPipe = new TimeAgoPipe();
return timeAgoPipe.transform(value);
} else {
const datePipe = new DatePipe('en-US');
return datePipe.transform(value, format);
}
}
return value;
}
getSorting(): DataSorting {
return this._sorting;
}

View File

@@ -16,14 +16,15 @@
*/
import { TimeAgoPipe } from './time-ago.pipe';
import { async } from '@angular/core/testing';
describe('TimeAgoPipe', () => {
let pipe: TimeAgoPipe;
beforeEach(() => {
beforeEach(async(() => {
pipe = new TimeAgoPipe();
});
}));
it('should return time difference for a given date', () => {
let date = new Date();
@@ -39,4 +40,13 @@ describe('TimeAgoPipe', () => {
expect(pipe.transform(null)).toBe('');
expect(pipe.transform(undefined)).toBe('');
});
describe('When a locale is given', () => {
it('should return a localised message', async(() => {
let date = new Date();
const transformedDate = pipe.transform(date, 'de');
expect(transformedDate).toBe('vor ein paar Sekunden');
}));
});
});

View File

@@ -16,7 +16,6 @@
*/
import moment from 'moment-es6';
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
@@ -24,11 +23,14 @@ import { Pipe, PipeTransform } from '@angular/core';
})
export class TimeAgoPipe implements PipeTransform {
transform(value: Date) {
defaultLocale = 'en-US';
transform(value: Date, locale?: string) {
if (value !== null && value !== undefined ) {
const actualLocale = locale ? locale : this.defaultLocale;
const then = moment(value);
const diff = moment().diff(then, 'days');
return diff > 7 ? then.format('DD/MM/YYYY HH:mm') : then.fromNow();
const diff = moment().locale(actualLocale).diff(then, 'days');
return diff > 7 ? then.locale(actualLocale).format('DD/MM/YYYY HH:mm') : then.locale(actualLocale).fromNow();
}
return '';
}