@angular/material-moment-adapter
Version:
Angular Material Moment Adapter
500 lines (492 loc) • 14.5 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { __extends } from 'tslib';
import { Inject, Injectable, Optional, InjectionToken, NgModule } from '@angular/core';
import { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';
import * as _rollupMoment from 'moment';
import _rollupMoment__default, { } from 'moment';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
var moment = _rollupMoment__default || _rollupMoment;
/**
* InjectionToken for moment date adapter to configure options.
* @type {?}
*/
var MAT_MOMENT_DATE_ADAPTER_OPTIONS = new InjectionToken('MAT_MOMENT_DATE_ADAPTER_OPTIONS', {
providedIn: 'root',
factory: MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY
});
/**
* \@docs-private
* @return {?}
*/
function MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY() {
return {
useUtc: false
};
}
/**
* Creates an array and fills it with values.
* @template T
* @param {?} length
* @param {?} valueFunction
* @return {?}
*/
function range(length, valueFunction) {
/** @type {?} */
var valuesArray = Array(length);
for (var i = 0; i < length; i++) {
valuesArray[i] = valueFunction(i);
}
return valuesArray;
}
/**
* Adapts Moment.js Dates for use with Angular Material.
*/
var MomentDateAdapter = /** @class */ (function (_super) {
__extends(MomentDateAdapter, _super);
function MomentDateAdapter(dateLocale, _options) {
var _this = _super.call(this) || this;
_this._options = _options;
_this.setLocale(dateLocale || moment.locale());
return _this;
}
/**
* @param {?} locale
* @return {?}
*/
MomentDateAdapter.prototype.setLocale = /**
* @param {?} locale
* @return {?}
*/
function (locale) {
var _this = this;
_super.prototype.setLocale.call(this, locale);
/** @type {?} */
var momentLocaleData = moment.localeData(locale);
this._localeData = {
firstDayOfWeek: momentLocaleData.firstDayOfWeek(),
longMonths: momentLocaleData.months(),
shortMonths: momentLocaleData.monthsShort(),
dates: range(31, (/**
* @param {?} i
* @return {?}
*/
function (i) { return _this.createDate(2017, 0, i + 1).format('D'); })),
longDaysOfWeek: momentLocaleData.weekdays(),
shortDaysOfWeek: momentLocaleData.weekdaysShort(),
narrowDaysOfWeek: momentLocaleData.weekdaysMin(),
};
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getYear = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).year();
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getMonth = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).month();
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getDate = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).date();
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getDayOfWeek = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).day();
};
/**
* @param {?} style
* @return {?}
*/
MomentDateAdapter.prototype.getMonthNames = /**
* @param {?} style
* @return {?}
*/
function (style) {
// Moment.js doesn't support narrow month names, so we just use short if narrow is requested.
return style == 'long' ? this._localeData.longMonths : this._localeData.shortMonths;
};
/**
* @return {?}
*/
MomentDateAdapter.prototype.getDateNames = /**
* @return {?}
*/
function () {
return this._localeData.dates;
};
/**
* @param {?} style
* @return {?}
*/
MomentDateAdapter.prototype.getDayOfWeekNames = /**
* @param {?} style
* @return {?}
*/
function (style) {
if (style == 'long') {
return this._localeData.longDaysOfWeek;
}
if (style == 'short') {
return this._localeData.shortDaysOfWeek;
}
return this._localeData.narrowDaysOfWeek;
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getYearName = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).format('YYYY');
};
/**
* @return {?}
*/
MomentDateAdapter.prototype.getFirstDayOfWeek = /**
* @return {?}
*/
function () {
return this._localeData.firstDayOfWeek;
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.getNumDaysInMonth = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).daysInMonth();
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.clone = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.clone().locale(this.locale);
};
/**
* @param {?} year
* @param {?} month
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.createDate = /**
* @param {?} year
* @param {?} month
* @param {?} date
* @return {?}
*/
function (year, month, date) {
// Moment.js will create an invalid date if any of the components are out of bounds, but we
// explicitly check each case so we can throw more descriptive errors.
if (month < 0 || month > 11) {
throw Error("Invalid month index \"" + month + "\". Month index has to be between 0 and 11.");
}
if (date < 1) {
throw Error("Invalid date \"" + date + "\". Date has to be greater than 0.");
}
/** @type {?} */
var result = this._createMoment({ year: year, month: month, date: date }).locale(this.locale);
// If the result isn't valid, the date must have been out of bounds for this month.
if (!result.isValid()) {
throw Error("Invalid date \"" + date + "\" for month with index \"" + month + "\".");
}
return result;
};
/**
* @return {?}
*/
MomentDateAdapter.prototype.today = /**
* @return {?}
*/
function () {
return this._createMoment().locale(this.locale);
};
/**
* @param {?} value
* @param {?} parseFormat
* @return {?}
*/
MomentDateAdapter.prototype.parse = /**
* @param {?} value
* @param {?} parseFormat
* @return {?}
*/
function (value, parseFormat) {
if (value && typeof value == 'string') {
return this._createMoment(value, parseFormat, this.locale);
}
return value ? this._createMoment(value).locale(this.locale) : null;
};
/**
* @param {?} date
* @param {?} displayFormat
* @return {?}
*/
MomentDateAdapter.prototype.format = /**
* @param {?} date
* @param {?} displayFormat
* @return {?}
*/
function (date, displayFormat) {
date = this.clone(date);
if (!this.isValid(date)) {
throw Error('MomentDateAdapter: Cannot format invalid date.');
}
return date.format(displayFormat);
};
/**
* @param {?} date
* @param {?} years
* @return {?}
*/
MomentDateAdapter.prototype.addCalendarYears = /**
* @param {?} date
* @param {?} years
* @return {?}
*/
function (date, years) {
return this.clone(date).add({ years: years });
};
/**
* @param {?} date
* @param {?} months
* @return {?}
*/
MomentDateAdapter.prototype.addCalendarMonths = /**
* @param {?} date
* @param {?} months
* @return {?}
*/
function (date, months) {
return this.clone(date).add({ months: months });
};
/**
* @param {?} date
* @param {?} days
* @return {?}
*/
MomentDateAdapter.prototype.addCalendarDays = /**
* @param {?} date
* @param {?} days
* @return {?}
*/
function (date, days) {
return this.clone(date).add({ days: days });
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.toIso8601 = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).format();
};
/**
* Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings
* (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty
* string into null. Returns an invalid date for all other values.
*/
/**
* Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings
* (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty
* string into null. Returns an invalid date for all other values.
* @param {?} value
* @return {?}
*/
MomentDateAdapter.prototype.deserialize = /**
* Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings
* (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty
* string into null. Returns an invalid date for all other values.
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var date;
if (value instanceof Date) {
date = this._createMoment(value).locale(this.locale);
}
else if (this.isDateInstance(value)) {
// Note: assumes that cloning also sets the correct locale.
return this.clone(value);
}
if (typeof value === 'string') {
if (!value) {
return null;
}
date = this._createMoment(value, moment.ISO_8601).locale(this.locale);
}
if (date && this.isValid(date)) {
return this._createMoment(date).locale(this.locale);
}
return _super.prototype.deserialize.call(this, value);
};
/**
* @param {?} obj
* @return {?}
*/
MomentDateAdapter.prototype.isDateInstance = /**
* @param {?} obj
* @return {?}
*/
function (obj) {
return moment.isMoment(obj);
};
/**
* @param {?} date
* @return {?}
*/
MomentDateAdapter.prototype.isValid = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.clone(date).isValid();
};
/**
* @return {?}
*/
MomentDateAdapter.prototype.invalid = /**
* @return {?}
*/
function () {
return moment.invalid();
};
/** Creates a Moment instance while respecting the current UTC settings. */
/**
* Creates a Moment instance while respecting the current UTC settings.
* @private
* @param {...?} args
* @return {?}
*/
MomentDateAdapter.prototype._createMoment = /**
* Creates a Moment instance while respecting the current UTC settings.
* @private
* @param {...?} args
* @return {?}
*/
function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return (this._options && this._options.useUtc) ? moment.utc.apply(moment, args) : moment.apply(void 0, args);
};
MomentDateAdapter.decorators = [
{ type: Injectable },
];
/** @nocollapse */
MomentDateAdapter.ctorParameters = function () { return [
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_LOCALE,] }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_MOMENT_DATE_ADAPTER_OPTIONS,] }] }
]; };
return MomentDateAdapter;
}(DateAdapter));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
var MAT_MOMENT_DATE_FORMATS = {
parse: {
dateInput: 'l',
},
display: {
dateInput: 'l',
monthYearLabel: 'MMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY',
},
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var MomentDateModule = /** @class */ (function () {
function MomentDateModule() {
}
MomentDateModule.decorators = [
{ type: NgModule, args: [{
providers: [
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]
}
],
},] },
];
return MomentDateModule;
}());
var ɵ0 = MAT_MOMENT_DATE_FORMATS;
var MatMomentDateModule = /** @class */ (function () {
function MatMomentDateModule() {
}
MatMomentDateModule.decorators = [
{ type: NgModule, args: [{
imports: [MomentDateModule],
providers: [{ provide: MAT_DATE_FORMATS, useValue: ɵ0 }],
},] },
];
return MatMomentDateModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { MomentDateModule, MatMomentDateModule, MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter, MAT_MOMENT_DATE_FORMATS };
//# sourceMappingURL=material-moment-adapter.es5.js.map