@fremtind/jkl-formatters-util
Version:
Formatters for common data formats in Jøkul
123 lines (122 loc) • 4.52 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var registerWithMask_exports = {};
__export(registerWithMask_exports, {
registerWithMasks: () => registerWithMasks
});
module.exports = __toCommonJS(registerWithMask_exports);
var import_formatDate = require("../date/formatDate");
var import_formatFodselsnummer = require("../fodselsnummer/formatFodselsnummer");
var import_formatKontonummer = require("../kontonummer/formatKontonummer");
var import_formatKortnummer = require("../kortnummer/formatKortnummer");
var import_formatOrganisasjonsnummer = require("../organisasjonsnummer/formatOrganisasjonsnummer");
var import_formatTelefonnummer = require("../telefonnummer/formatTelefonnummer");
var import_formatNumber = require("./formatNumber");
const formatters = {
date: import_formatDate.formatDateString,
fodselsnummer: import_formatFodselsnummer.formatFodselsnummer,
kortnummer: import_formatKortnummer.formatKortnummer,
kontonummer: import_formatKontonummer.formatKontonummer,
telefonnummer: import_formatTelefonnummer.formatTelefonnummer,
number: import_formatNumber.formatNumber,
organisasjonsnummer: import_formatOrganisasjonsnummer.formatOrganisasjonsnummer
};
const createRegisterFunctionWithMask = (formatter, form) => {
return (name, options) => {
let onKeyDownCaretPosition = 0;
let onKeyDownKeyPressed = "";
const setValueAs = (value) => value.replace(/\s/g, "");
const onChange = (event) => {
var _a;
(_a = options == null ? void 0 : options.onChange) == null ? void 0 : _a.call(options, event);
let onChangeCaretPosition = 0;
const inputLength = event.target.value.length;
if (event.target.selectionStart !== null) {
onChangeCaretPosition = event.target.selectionStart;
}
form.setValue(
name,
formatters[formatter](event.target.value, {
partial: true
})
);
let newPosition = null;
if (["Delete", "Backspace"].includes(onKeyDownKeyPressed)) {
const delta = onKeyDownCaretPosition - onChangeCaretPosition;
newPosition = onKeyDownCaretPosition - delta;
} else if (onChangeCaretPosition < event.target.value.length) {
const delta = event.target.value.length - inputLength;
newPosition = onChangeCaretPosition + delta;
}
if (newPosition !== null) {
event.target.setSelectionRange(
newPosition,
newPosition,
void 0
);
}
};
const registerOptions = {
setValueAs,
onChange
};
if (options) {
Object.assign(registerOptions, options);
}
const register = form.register(name, registerOptions);
const onKeyDown = (event) => {
if (event.target.selectionStart !== null) {
onKeyDownCaretPosition = event.target.selectionStart;
}
onKeyDownKeyPressed = event.key;
};
const extra = {
onKeyDown
};
if (formatter === "number") {
extra.align = "right";
}
return Object.assign(register, extra);
};
};
const registerWithMasks = (form) => ({
registerWithFodselsnummerMask: createRegisterFunctionWithMask(
"fodselsnummer",
form
),
registerWithKortnummerMask: createRegisterFunctionWithMask(
"kortnummer",
form
),
registerWithKontonummerMask: createRegisterFunctionWithMask(
"kontonummer",
form
),
registerWithTelefonnummerMask: createRegisterFunctionWithMask(
"telefonnummer",
form
),
registerWithOrganisasjonsnummerMask: createRegisterFunctionWithMask(
"organisasjonsnummer",
form
),
registerWithDateMask: createRegisterFunctionWithMask("date", form),
registerWithNumber: createRegisterFunctionWithMask("number", form)
});
//# sourceMappingURL=registerWithMask.js.map