@fremtind/jkl-formatters-util
Version:
Formatters for common data formats in Jøkul
103 lines (102 loc) • 3.37 kB
JavaScript
import { formatDateString } from "../date/formatDate";
import { formatFodselsnummer } from "../fodselsnummer/formatFodselsnummer";
import { formatKontonummer } from "../kontonummer/formatKontonummer";
import { formatKortnummer } from "../kortnummer/formatKortnummer";
import { formatOrganisasjonsnummer } from "../organisasjonsnummer/formatOrganisasjonsnummer";
import { formatTelefonnummer } from "../telefonnummer/formatTelefonnummer";
import { formatNumber } from "./formatNumber";
const formatters = {
date: formatDateString,
fodselsnummer: formatFodselsnummer,
kortnummer: formatKortnummer,
kontonummer: formatKontonummer,
telefonnummer: formatTelefonnummer,
number: formatNumber,
organisasjonsnummer: 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)
});
export {
registerWithMasks
};
//# sourceMappingURL=registerWithMask.js.map