relative date field formatter (#13921)

* add relative date field formatter

* add unit test for relative_date field formatter
This commit is contained in:
Nathan Reese 2017-09-12 06:04:23 -06:00 committed by GitHub
parent 1615d9c5ca
commit c9c135ea14
4 changed files with 55 additions and 1 deletions

View file

@ -0,0 +1,26 @@
import expect from 'expect.js';
import moment from 'moment-timezone';
import { RelativeDateFormat } from '../relative_date';
describe('Relative Date Format', function () {
let convert;
beforeEach(function () {
const relativeDate = new RelativeDateFormat({});
convert = relativeDate.convert.bind(relativeDate);
});
it('decoding an undefined or null date should return a "-"', function () {
expect(convert(null)).to.be('-');
expect(convert(undefined)).to.be('-');
});
it('decoding invalid date should echo invalid value', function () {
expect(convert('not a valid date')).to.be('not a valid date');
});
it('should parse date values', function () {
const val = '2017-08-13T20:24:09.904Z';
expect(convert(val)).to.be(moment(val).fromNow());
});
});

View file

@ -0,0 +1,25 @@
import moment from 'moment';
import { FieldFormat } from '../../../../../ui/field_formats/field_format';
export class RelativeDateFormat extends FieldFormat {
constructor(params) {
super(params);
}
_convert(val) {
if (val === null || val === undefined) {
return '-';
}
const date = moment(val);
if (date.isValid()) {
return date.fromNow();
} else {
return val;
}
}
static id = 'relative_date';
static title = 'Relative Date';
static fieldType = 'date';
}

View file

@ -20,7 +20,8 @@ const formatIds = [
'url',
'_source',
'truncate',
'boolean'
'boolean',
'relative_date'
];
// eslint-disable-next-line kibana-custom/no-default-export

View file

@ -2,6 +2,7 @@ import { RegistryFieldFormatsProvider } from 'ui/registry/field_formats';
import { UrlFormat } from '../../common/field_formats/types/url';
import { BytesFormat } from '../../common/field_formats/types/bytes';
import { DateFormat } from '../../common/field_formats/types/date';
import { RelativeDateFormat } from '../../common/field_formats/types/relative_date';
import { DurationFormat } from '../../common/field_formats/types/duration';
import { IpFormat } from '../../common/field_formats/types/ip';
import { NumberFormat } from '../../common/field_formats/types/number';
@ -15,6 +16,7 @@ import { BoolFormat } from '../../common/field_formats/types/boolean';
RegistryFieldFormatsProvider.register(() => UrlFormat);
RegistryFieldFormatsProvider.register(() => BytesFormat);
RegistryFieldFormatsProvider.register(() => DateFormat);
RegistryFieldFormatsProvider.register(() => RelativeDateFormat);
RegistryFieldFormatsProvider.register(() => DurationFormat);
RegistryFieldFormatsProvider.register(() => IpFormat);
RegistryFieldFormatsProvider.register(() => NumberFormat);