UNPKG

ngx-mat-lib

Version:

A bunch of utilities and components to use in your Angular 7+ apps!

133 lines (132 loc) 13.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from "@angular/core"; import { NativeDateAdapter } from "@angular/material"; /** @type {?} */ const xmatSep = "/"; /** @type {?} */ const xmatDay = "DD"; /** @type {?} */ const xmatMonth = "MM"; /** @type {?} */ const xmatYear = "YYYY"; /** @type {?} */ const xmatCurrentYear = new Date().getFullYear(); /** @type {?} */ const xmatCentury = Math.round(xmatCurrentYear / 100); /** @type {?} */ export const XMAT_LOCALE_IT = "it-IT"; /** @type {?} */ export const XMAT_LOCALE_EN = "en-GB"; /** @type {?} */ export const XMAT_LOCALE_FR = "fr-FR"; /** @type {?} */ export const XMAT_FORMATS = { "it-IT": `${xmatDay}${xmatSep}${xmatMonth}${xmatSep}${xmatYear}`, "en-GB": `${xmatMonth}${xmatSep}${xmatDay}${xmatSep}${xmatYear}`, "fr-FR": `${xmatDay}${xmatSep}${xmatMonth}${xmatSep}${xmatYear}` }; /** @type {?} */ export const XMAT_DATE_FORMATS = { parse: { dateInput: { month: "numeric", year: "numeric", day: "numeric" } }, display: { dateInput: XMAT_FORMATS[XMAT_LOCALE_IT], monthYearLabel: `${xmatMonth}${xmatSep}${xmatYear}`, dateA11yLabel: XMAT_FORMATS[XMAT_LOCALE_IT], monthYearA11yLabel: `${xmatMonth}${xmatSep}${xmatYear}` } }; export class XmatMatDateLocale extends NativeDateAdapter { constructor() { super(...arguments); this.displayFormat = XMAT_DATE_FORMATS.display.dateInput; } /** * @param {?} value * @return {?} */ parse(value) { if (this.displayFormat === XMAT_DATE_FORMATS.display.dateInput) { if ((typeof value === typeof "") && value.length > 0) { /** @type {?} */ const str = value.split(xmatSep); if (str.length < 3) { return new Date("xmat"); } /** @type {?} */ const yearBak = str[2]; if (str[2].length < 4) { str[2] = xmatCentury + str[2]; } if (str[2].length !== 4) { return new Date("xmat"); } /** @type {?} */ const year = +str[2]; /** @type {?} */ const month = +str[1] - 1; /** @type {?} */ const day = +str[0]; return new Date(year, month, day); } else { return null; } } else { console.warn("Date input format not valid." + " Be sure to use XMAT_DATE_FORMATS" + " or extend this class with your own 'parser' and format 'methods'"); console.info("For a complete guide visit github.com/tonysamperi/ngx-mat-lib"); return null; } } /** * @param {?} date * @param {?} displayFormat * @return {?} */ format(date, displayFormat) { this.displayFormat = displayFormat; if (displayFormat === XMAT_DATE_FORMATS.display.dateInput) { /** @type {?} */ const day = date.getDate(); /** @type {?} */ const month = date.getMonth() + 1; /** @type {?} */ const year = date.getFullYear(); return this._addLeadingZeroes(day) + xmatSep + this._addLeadingZeroes(month) + xmatSep + year; } else { /** @type {?} */ let formattedDate = ""; try { formattedDate = date.toLocaleDateString(XMAT_LOCALE_IT, displayFormat); } catch (e) { console.warn("Catched error while printing ", e); formattedDate = date.toDateString(); } return formattedDate; } } /** * @param {?} n * @return {?} */ _addLeadingZeroes(n) { return ("0" + n).slice(-2); } } XmatMatDateLocale.decorators = [ { type: Injectable } ]; if (false) { /** @type {?} */ XmatMatDateLocale.prototype.displayFormat; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1kYXRlLWxvY2FsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdC1saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMveG1hdC1kYXRlLWxvY2FsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDOztBQUVwRCxNQUFNLE9BQU8sR0FBVyxHQUFHLENBQUM7O0FBQzVCLE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQzs7QUFDN0IsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDOztBQUMvQixNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7O0FBQ2hDLE1BQU0sZUFBZSxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBQ3pELE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxDQUFDOztBQUc5RCxhQUFhLGNBQWMsR0FBVyxPQUFPLENBQUM7O0FBRTlDLGFBQWEsY0FBYyxHQUFXLE9BQU8sQ0FBQzs7QUFFOUMsYUFBYSxjQUFjLEdBQVcsT0FBTyxDQUFDOztBQUc5QyxhQUFhLFlBQVksR0FBRztJQUN4QixPQUFPLEVBQUUsR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLEdBQUcsUUFBUSxFQUFFO0lBQ2hFLE9BQU8sRUFBRSxHQUFHLFNBQVMsR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sR0FBRyxRQUFRLEVBQUU7SUFDaEUsT0FBTyxFQUFFLEdBQUcsT0FBTyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLFFBQVEsRUFBRTtDQUNuRSxDQUFDOztBQUlGLGFBQWEsaUJBQWlCLEdBQUc7SUFDN0IsS0FBSyxFQUFFO1FBQ0gsU0FBUyxFQUFFLEVB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RyxFQUFFLENBQUM7WUFDdkIsSUFBSTtnQkFDQSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUMxRTtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDdkM7WUFDRCxPQUFPLGFBQWEsQ0FBQztTQUN4QjtLQUNKOzs7OztJQUVPLGlCQUFpQixDQUFDLENBQVM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztZQTNEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7TmF0aXZlRGF0ZUFkYXB0ZXJ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbFwiO1xuXG5jb25zdCB4bWF0U2VwOiBzdHJpbmcgPSBcIi9cIjtcbmNvbnN0IHhtYXREYXk6IHN0cmluZyA9IFwiRERcIjtcbmNvbnN0IHhtYXRNb250aDogc3RyaW5nID0gXCJNTVwiO1xuY29uc3QgeG1hdFllYXI6IHN0cmluZyA9IFwiWVlZWVwiO1xuY29uc3QgeG1hdEN1cnJlbnRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5jb25zdCB4bWF0Q2VudHVyeTogbnVtYmVyID0gTWF0aC5yb3VuZCh4bWF0Q3VycmVudFllYXIgLyAxMDApO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBYTUFUX0xPQ0FMRV9JVDogc3RyaW5nID0gXCJpdC1JVFwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgWE1BVF9MT0NBTEVfRU46IHN0cmluZyA9IFwiZW4tR0JcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFhNQVRfTE9DQUxFX0ZSOiBzdHJpbmcgPSBcImZyLUZSXCI7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFhNQVRfRk9STUFUUyA9IHtcbiAgICBcIml0LUlUXCI6IGAke3htYXREYXl9JHt4bWF0U2VwfSR7eG1hdE1vbnRofSR7eG1hdFNlcH0ke3htYXRZZWFyfWAsXG4gICAgXCJlbi1HQlwiOiBgJHt4bWF0TW9udGh9JHt4bWF0U2VwfSR7eG1hdERheX0ke3htYXRTZXB9JHt4bWF0WWVhcn1gLFxuICAgIFwiZnItRlJcIjogYCR7eG1hdERheX0ke3htYXRTZXB9JHt4bWF0TW9udGh9JHt4bWF0U2VwfSR7eG1hdFllYXJ9YFxufTtcblxuLy8gVElQOiBDT1BZIFRISVMgVE8gQ1VTVE9NSVpFIENBTEVOREFSIEZPUk1BVFMhIVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgWE1BVF9EQVRFX0ZPUk1BVFMgPSB7XG4gICAgcGFyc2U6IHtcbiAgICAgICAgZGF0ZUlucHV0OiB7bW9udGg6IFwibnVtZXJpY1wiLCB5ZWFyOiBcIm51bWVyaWNcIiwgZGF5OiBcIm51bWVyaWNcIn1cbiAgICB9LFxuICAgIGRpc3BsYXk6IHtcbiAgICAgICAgZGF0ZUlucHV0OiBYTUFUX0ZPUk1BVFNbWE1BVF9MT0NBTEVfSVRdLFxuICAgICAgICBtb250aFllYXJMYWJlbDogYCR7eG1hdE1vbnRofSR7eG1hdFNlcH0ke3htYXRZZWFyfWAsXG4gICAgICAgIGRhdGVBMTF5TGFiZWw6IFhNQVRfRk9STUFUU1tYTUFUX0xPQ0FMRV9JVF0sXG4gICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogYCR7eG1hdE1vbnRofSR7eG1hdFNlcH0ke3htYXRZZWFyfWBcbiAgICB9XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgWG1hdE1hdERhdGVMb2NhbGUgZXh0ZW5kcyBOYXRpdmVEYXRlQWRhcHRlciB7XG5cbiAgICBkaXNwbGF5Rm9ybWF0OiBPYmplY3QgfCBzdHJpbmcgPSBYTUFUX0RBVEVfRk9STUFUUy5kaXNwbGF5LmRhdGVJbnB1dDtcblxuICAgIHBhcnNlKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlGb3JtYXQgPT09IFhNQVRfREFURV9GT1JNQVRTLmRpc3BsYXkuZGF0ZUlucHV0KSB7XG4gICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gdHlwZW9mIFwiXCIpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHIgPSB2YWx1ZS5zcGxpdCh4bWF0U2VwKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKFwieG1hdFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeWVhckJhayA9IHN0clsyXTtcbiAgICAgICAgICAgICAgICBpZiAoc3RyWzJdLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyWzJdID0geG1hdENlbnR1cnkgKyBzdHJbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdHJbMl0ubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShcInhtYXRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArc3RyWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK3N0clsxXSAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK3N0clswXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiRGF0ZSBpbnB1dCBmb3JtYXQgbm90IHZhbGlkLlwiICtcbiAgICAgICAgICAgICAgICBcIiBCZSBzdXJlIHRvIHVzZSBYTUFUX0RBVEVfRk9STUFUU1wiICtcbiAgICAgICAgICAgICAgICBcIiBvciBleHRlbmQgdGhpcyBjbGFzcyB3aXRoIHlvdXIgb3duICdwYXJzZXInIGFuZCBmb3JtYXQgJ21ldGhvZHMnXCIpO1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiRm9yIGEgY29tcGxldGUgZ3VpZGUgdmlzaXQgZ2l0aHViLmNvbS90b255c2FtcGVyaS9uZ3gtbWF0LWxpYlwiKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9ybWF0KGRhdGU6IERhdGUsIGRpc3BsYXlGb3JtYXQ6IE9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIHRoaXMuZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0ID09PSBYTUFUX0RBVEVfRk9STUFUUy5kaXNwbGF5LmRhdGVJbnB1dCkge1xuICAgICAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZExlYWRpbmdaZXJvZXMoZGF5KSArIHhtYXRTZXAgKyB0aGlzLl9hZGRMZWFkaW5nWmVyb2VzKG1vbnRoKSArIHhtYXRTZXAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZERhdGUgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoWE1BVF9MT0NBTEVfSVQsIGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkNhdGNoZWQgZXJyb3Igd2hpbGUgcHJpbnRpbmcgXCIsIGUpO1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGRMZWFkaW5nWmVyb2VzKG46IG51bWJlcikge1xuICAgICAgICByZXR1cm4gKFwiMFwiICsgbikuc2xpY2UoLTIpO1xuICAgIH1cbn1cbiJdfQ==