truly-ui
Version:
Web Components for Desktop Applications.
43 lines • 8.62 kB
JavaScript
import { LOCALE_I18N } from '../../i18n/i18n.service';
import { ReverseFormatDate } from '../../core/helper/reverseformatdate';
let dateExpressFormat;
export function DateValidator(formatDate, isoDate) {
dateExpressFormat = formatDate;
return (c) => {
if (!c.value) {
return null;
}
if (!stringUnmasked(c) && c.touched) {
return { date: LOCALE_I18N.Validators.invalidDatePattern + ' [ ' + dateExpressFormat.toUpperCase() + ' ]' };
}
if ((stringUnmasked(c).length) !== dateExpressFormat.length && !isoDate) {
return { date: LOCALE_I18N.Validators.invalidDatePattern + ' [ ' + dateExpressFormat.toUpperCase() + ' ]' };
}
const formattedDate = ReverseFormatDate(stringUnmasked(c), dateExpressFormat);
const date = new Date(formattedDate['year'] + '-' + formattedDate['month'] + '-' + formattedDate['day']);
if (date.toDateString() === 'Invalid Date') {
return { date: LOCALE_I18N.Validators.invalidDatePattern + ' [ ' + dateExpressFormat.toUpperCase() + ' ]' };
}
if ((stringUnmasked(c).length < dateExpressFormat.length) && isoDate) {
return { date: LOCALE_I18N.Validators.invalidDatePattern + '[isoDate]' };
}
if (!isIsoDate(c.value) && isoDate) {
return { date: LOCALE_I18N.Validators.invalidDatePattern + '[isoDate]' };
}
return null;
};
}
function stringUnmasked(c) {
if (isIsoDate(c.value)) {
return new Date(c.value).toLocaleDateString();
}
return String(c.value).replace(/(\|-|_|\(|\)|:|\+)/gi, '');
}
function isIsoDate(str) {
if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(str)) {
return false;
}
const d = new Date(str);
return d.toISOString() === str;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnVseS11aS9zcmMvY29tcG9uZW50cy9kYXRlL3ZhbGlkYXRvcnMvZGF0ZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxJQUFJLGlCQUFpQixDQUFDO0FBRXRCLE1BQU0sVUFBVSxhQUFhLENBQUUsVUFBVSxFQUFFLE9BQU87SUFDaEQsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO0lBQy9CLE9BQU8sQ0FBRSxDQUFrQixFQUFHLEVBQUU7UUFFOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSyxDQUFDLGNBQWMsQ0FBRSxDQUFDLENBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFHO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7U0FDN0c7UUFFRCxJQUFLLENBQUMsY0FBYyxDQUFFLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRztZQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1NBQzdHO1FBRUQsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDOUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBRSxDQUFDO1FBRTNHLElBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLGNBQWMsRUFBRztZQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEdBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1NBQzlHO1FBRUQsSUFBSyxDQUFDLGNBQWMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFO1lBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLEVBQUUsQ0FBQztTQUMxRTtRQUVELElBQUssQ0FBQyxTQUFTLENBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBRSxJQUFJLE9BQU8sRUFBRztZQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxFQUFFLENBQUM7U0FDMUU7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBRSxDQUFDO0lBQ3hCLElBQUssU0FBUyxDQUFFLENBQUMsQ0FBQyxLQUFLLENBQUUsRUFBRTtRQUN6QixPQUFPLElBQUksSUFBSSxDQUFFLENBQUMsQ0FBQyxLQUFLLENBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ2pEO0lBQ0QsT0FBTyxNQUFNLENBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBRSxDQUFDLE9BQU8sQ0FBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUUsR0FBRztJQUNyQixJQUFLLENBQUMsNENBQTRDLENBQUMsSUFBSSxDQUFFLEdBQUcsQ0FBRSxFQUFHO1FBQy9ELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBRSxHQUFHLENBQUUsQ0FBQztJQUMxQixPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gTUlUIExpY2Vuc2VcblxuIENvcHlyaWdodCAoYykgMjAxOSBUZW1haW5mbyBTb2Z0d2FyZVxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExPQ0FMRV9JMThOIH0gZnJvbSAnLi4vLi4vaTE4bi9pMThuLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBSZXZlcnNlRm9ybWF0RGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvaGVscGVyL3JldmVyc2Vmb3JtYXRkYXRlJztcbmxldCBkYXRlRXhwcmVzc0Zvcm1hdDtcblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVWYWxpZGF0b3IoIGZvcm1hdERhdGUsIGlzb0RhdGUgKTogVmFsaWRhdG9yRm4ge1xuICBkYXRlRXhwcmVzc0Zvcm1hdCA9IGZvcm1hdERhdGU7XG4gIHJldHVybiAoIGM6IEFic3RyYWN0Q29udHJvbCApID0+IHtcblxuICAgIGlmICghYy52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCAhc3RyaW5nVW5tYXNrZWQoIGMgKSAmJiBjLnRvdWNoZWQgKSB7XG4gICAgICByZXR1cm4geyBkYXRlOiBMT0NBTEVfSTE4Ti5WYWxpZGF0b3JzLmludmFsaWREYXRlUGF0dGVybiArICcgWyAnICsgZGF0ZUV4cHJlc3NGb3JtYXQudG9VcHBlckNhc2UoKSArICcgXScgfTtcbiAgICB9XG5cbiAgICBpZiAoIChzdHJpbmdVbm1hc2tlZCggYyApLmxlbmd0aCkgIT09IGRhdGVFeHByZXNzRm9ybWF0Lmxlbmd0aCAmJiAhaXNvRGF0ZSApIHtcbiAgICAgIHJldHVybiB7IGRhdGU6IExPQ0FMRV9JMThOLlZhbGlkYXRvcnMuaW52YWxpZERhdGVQYXR0ZXJuICsgJyBbICcgKyBkYXRlRXhwcmVzc0Zvcm1hdC50b1VwcGVyQ2FzZSgpICsgJyBdJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBSZXZlcnNlRm9ybWF0RGF0ZShzdHJpbmdVbm1hc2tlZChjKSwgZGF0ZUV4cHJlc3NGb3JtYXQpO1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSggZm9ybWF0dGVkRGF0ZVsneWVhciddICsgJy0nICsgZm9ybWF0dGVkRGF0ZVsnbW9udGgnXSArICctJyArIGZvcm1hdHRlZERhdGVbJ2RheSddICk7XG5cbiAgICBpZiAoIGRhdGUudG9EYXRlU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnICkge1xuICAgICAgcmV0dXJuIHsgZGF0ZTogTE9DQUxFX0kxOE4uVmFsaWRhdG9ycy5pbnZhbGlkRGF0ZVBhdHRlcm4gKyAgJyBbICcgKyBkYXRlRXhwcmVzc0Zvcm1hdC50b1VwcGVyQ2FzZSgpICsgJyBdJyB9O1xuICAgIH1cblxuICAgIGlmICggKHN0cmluZ1VubWFza2VkKCBjICkubGVuZ3RoIDwgZGF0ZUV4cHJlc3NGb3JtYXQubGVuZ3RoKSAmJiBpc29EYXRlKSB7XG4gICAgICByZXR1cm4geyBkYXRlOiBMT0NBTEVfSTE4Ti5WYWxpZGF0b3JzLmludmFsaWREYXRlUGF0dGVybiArICdbaXNvRGF0ZV0nIH07XG4gICAgfVxuXG4gICAgaWYgKCAhaXNJc29EYXRlKCBjLnZhbHVlICkgJiYgaXNvRGF0ZSApIHtcbiAgICAgIHJldHVybiB7IGRhdGU6IExPQ0FMRV9JMThOLlZhbGlkYXRvcnMuaW52YWxpZERhdGVQYXR0ZXJuICsgJ1tpc29EYXRlXScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVW5tYXNrZWQoIGMgKSB7XG4gIGlmICggaXNJc29EYXRlKCBjLnZhbHVlICkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoIGMudmFsdWUgKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKCBjLnZhbHVlICkucmVwbGFjZSggLyhcXHwtfF98XFwofFxcKXw6fFxcKykvZ2ksICcnICk7XG59XG5cbmZ1bmN0aW9uIGlzSXNvRGF0ZSggc3RyICkge1xuICBpZiAoICEvXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0uXFxkezN9Wi8udGVzdCggc3RyICkgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSggc3RyICk7XG4gIHJldHVybiBkLnRvSVNPU3RyaW5nKCkgPT09IHN0cjtcbn1cblxuXG4iXX0=