elliptical-datetime
Version:
Elliptical phrases to handle natural language dates and times
54 lines (45 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Year = undefined;
var _elliptical = require('elliptical');
var _ellipticalNumber = require('elliptical-number');
/** @jsx createElement */
function suppressYear(input) {
return (/^('\d|\d|\d{3})$/.test(input)
);
}
function mapResult(result) {
if (result.twoDigitYear) {
const decade = parseInt(result.twoDigitYear, 10);
const year = decade < 29 ? 2000 + decade : 1900 + decade;
return { year, _ambiguousCentury: true };
} else if (result.fourDigitYear) {
return { year: parseInt(result.fourDigitYear, 10) };
}
}
const defaultProps = {
label: 'year'
};
function describe({ props }) {
return (0, _elliptical.createElement)(
'placeholder',
{
suppressWhen: suppressYear,
label: props.label,
arguments: props.phraseArguments || (props.phraseArguments ? [props.phraseArgument] : [props.label]) },
(0, _elliptical.createElement)(
'choice',
{ limit: 1 },
(0, _elliptical.createElement)(
'sequence',
null,
(0, _elliptical.createElement)('literal', { text: '\'', optional: true, limited: true }),
(0, _elliptical.createElement)(_ellipticalNumber.DigitString, { minLength: 2, maxLength: 2, id: 'twoDigitYear', label: 'yy' })
),
(0, _elliptical.createElement)(_ellipticalNumber.DigitString, { minLength: 4, maxLength: 4, id: 'fourDigitYear', label: 'yyyy' })
)
);
}
const Year = exports.Year = { mapResult, describe, defaultProps };