UNPKG

@fremtind/jkl-formatters-util

Version:
103 lines (102 loc) 3.37 kB
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