@norges-domstoler/dds-formatting
Version:
Text formatting functions used in Elsa - domstolenes designsystem
1 lines • 11 kB
Source Map (JSON)
{"version":3,"sources":["../src/containsOnlyNumbers.ts","../src/replaceAll.ts","../src/bank/formatBankAccountNumber.ts","../src/beloep/formatBeloep.ts","../src/beloep/formatInputBeloep.ts","../src/dato/formatDato.ts","../src/foedselsnummer/formatFoedselsnummer.ts","../src/organisation/formatOrganisationNumber.ts","../src/phone/formatMobilePhoneNumber.ts","../src/phone/formatLandlinePhoneNumber.ts"],"sourcesContent":["/**\n * @param value - string to check\n * @returns true if value contains only numbers\n */\nexport const containsOnlyNumbers = (value: string): boolean =>\n value.match(/^\\d+$/) !== null;\n","/**\n * @param source - source string\n * @param find - string to find\n * @param replace - string to replace with\n * @returns source string with all occurrences of find replaced with replace\n */\nexport const replaceAll = (\n source: string,\n find: string,\n replace: string,\n): string => {\n return source.split(find).join(replace);\n};\n","import { containsOnlyNumbers } from '../containsOnlyNumbers';\nimport { replaceAll } from '../replaceAll';\n\n/**\n * Formaterer bankkontonummer i henhold til retningslinjene for bankkontonummer i Elsa.\n * Formateringen er best-effort og prøver derfor også å formatere ufullstendige kontonummer.\n * Hvis kontonummeret er ugyldig vil funksjonen returnere kontonummeret uendret.\n *\n * @param bankAccountNr - kontonummeret som skal formateres.\n */\nexport const formatBankAccountNumber = (bankAccountNr: string): string => {\n const noWhitespace = replaceAll(bankAccountNr, ' ', '');\n\n if (containsOnlyNumbers(noWhitespace) && noWhitespace.length <= 11) {\n const groups = [\n noWhitespace.slice(0, 4),\n noWhitespace.slice(4, 6),\n noWhitespace.slice(6, 11),\n ].filter(el => el !== '');\n return groups.join(' ');\n }\n\n return bankAccountNr;\n};\n","/**\n * Formaterer number beløp i henhold til retningslinjene for beløp i Elsa.\n *\n * @param beloep - beløpet som skal formateres.\n */\nexport const formatBeloep = (beloep: number): string => {\n return new Intl.NumberFormat('nb-NO', {\n style: 'currency',\n currency: 'NOK',\n maximumFractionDigits: 2,\n }).format(beloep);\n};\n","const NUMBER_WITH_TWO_DECIMALS = /^[0-9]*([.][0-9]{0,2})?$/;\n\n/**\n * Formaterer string beløp (f.eks. i inputfelt) i henhold til retningslinjene for beløp i Elsa.\n * Hvis beløpet er ugyldig vil funksjonen returnere tom string.\n * @param beloep - beløpet som skal formateres.\n * @param withTrailingDecimals - om desimaltall skal vises hvis beløpet ikke indkludrer desimaltall.\n */\n\nexport function formatInputBeloep(\n beloep: string,\n withTrailingDecimals?: boolean,\n): string {\n let value = beloep;\n if (value === null || value === undefined) {\n return '';\n }\n\n if (value.includes(',')) {\n value = value.replace(',', '.');\n }\n\n if (value.startsWith(',')) {\n value = '0' + value;\n }\n\n if (!NUMBER_WITH_TWO_DECIMALS.test(value)) {\n return '';\n }\n\n const numberValue = parseFloat(value);\n if (isNaN(numberValue)) return '';\n\n return new Intl.NumberFormat('nb-NO', {\n style: 'decimal',\n minimumFractionDigits: withTrailingDecimals ? 2 : 0,\n maximumFractionDigits: 2,\n }).format(numberValue);\n}\n","/**\n * Formatterer tid og dato i henhold til retningslinjene for tid og dato i Elsa.\n * Funksjonen sjekker om det er en gyldig dato. Hvis det er en gyldig dato, blir datoen formattert etter retningslinjene i Elsa.\n * Hvis datoen er ugyldig vil funksjonen returnere datoen uendret.\n *\n * @param date - datoen som skal formateres. Type kan være string, Date eller number\n */\n\nconst isValidDate = (date: Date) => {\n return isNaN(date.valueOf()) === false;\n};\n\nexport const formatTime = <T extends string | Date | number>(\n date: T,\n options: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: 'numeric' },\n): string | T => {\n const myDate = new Date(date);\n if (isValidDate(myDate)) {\n return new Intl.DateTimeFormat('no-NO', options).format(myDate);\n }\n return date;\n};\n\nexport const formatDate = <T extends string | Date | number>(\n date: T,\n): string | T => {\n const myDate = new Date(date);\n if (isValidDate(myDate)) {\n return new Intl.DateTimeFormat('no-NO', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n }).format(myDate);\n }\n return date;\n};\n\nexport const formatDateTime = <T extends string | Date | number>(\n date: T,\n options: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: 'numeric' },\n): string | T => {\n const myDate = new Date(date);\n if (isValidDate(myDate)) {\n const formattedDate = formatDate(myDate);\n const formattedTime = formatTime(myDate, options);\n\n if (\n typeof formattedDate === 'string' &&\n typeof formattedTime === 'string'\n ) {\n return formattedDate + ' ' + formattedTime;\n }\n\n return date;\n }\n return date;\n};\n","import { containsOnlyNumbers } from '../containsOnlyNumbers';\nimport { replaceAll } from '../replaceAll';\n\n/**\n * Formaterer fødselsnummer i henhold til retningslinjene for fødselsnummer i Elsa.\n * Funksjonen prøver å formatere fødselsnummeret best-effort og prøver derfor også å formatere ufullstendige fødselsnummer.\n * Hvis fødselsnummeret er ugyldig vil funksjonen returnere fødselsnummeret uendret.\n * Denne funksjonen kan også anvendes for D-nummer.\n *\n * @param foedselsnr - foedselsnummeret som skal formateres.\n */\nexport const formatFoedselsnummer = (foedselsnr: string) => {\n const noWhitespace = replaceAll(foedselsnr, ' ', '');\n\n if (containsOnlyNumbers(noWhitespace) && noWhitespace.length < 12) {\n if (noWhitespace.length <= 6) {\n return noWhitespace;\n }\n\n return `${noWhitespace.slice(0, 6)} ${noWhitespace.slice(6)}`;\n }\n\n return foedselsnr;\n};\n","import { containsOnlyNumbers } from '../containsOnlyNumbers';\nimport { replaceAll } from '../replaceAll';\n\n/**\n * Formaterer organisasjonsnummer i henhold til retningslinjene i Elsa.\n * Funksjonen formaterer organisasjonsnummeret best-effort og prøver derfor også å formatere ufullstendige organisasjonsnummer.\n * Hvis nummeret er ugyldig vil funksjonen returnere nummeret uendret.\n *\n * @param organisationNumber - organisasjonsnummeret som skal formateres.\n */\nexport const formatOrganisationNumber = (organisationNumber: string) => {\n const noWhitespace = replaceAll(organisationNumber, ' ', '');\n\n if (containsOnlyNumbers(noWhitespace) && noWhitespace.length <= 9) {\n return [\n noWhitespace.slice(0, 3),\n noWhitespace.slice(3, 6),\n noWhitespace.slice(6, 9),\n ]\n .filter(el => el !== '')\n .join(' ');\n }\n\n return organisationNumber;\n};\n","import { containsOnlyNumbers } from '../containsOnlyNumbers';\nimport { replaceAll } from '../replaceAll';\n\n/**\n * Formaterer mobilnummer i henhold til retningslinjene for mobilnummer i Elsa.\n * Formateringen er best-effort og prøver derfor også å formatere ufullstendige mobilnummer.\n * Hvis mobilnummeret er ugyldig vil funksjonen returnere mobilnummeret uendret.\n *\n * @param phone - mobilnummeret som skal formateres.\n */\nexport const formatMobilePhoneNumber = (phone: string): string => {\n const noWhitespace = replaceAll(phone, ' ', '');\n\n if (containsOnlyNumbers(noWhitespace) && noWhitespace.length <= 8) {\n const groups = [\n noWhitespace.slice(0, 2),\n noWhitespace.slice(2, 4),\n noWhitespace.slice(4, 6),\n noWhitespace.slice(6, 8),\n ].filter(el => el !== '');\n return groups.join(' ');\n }\n\n return phone;\n};\n","import { formatMobilePhoneNumber } from './formatMobilePhoneNumber';\n\n/**\n * Formaterer fasttelefonnummer i henhold til retningslinjene for fasttelefon og faks i Elsa.\n * Formateringen er best-effort og prøver derfor også å formatere ufullstendige nummer.\n * Hvis nummeret er ugyldig vil funksjonen returnere nummeret uendret.\n * Denne funksjonen kan også anvendes for faks-nummer.\n *\n * @param phone - fasttelefon-/faksnummeret som skal formateres.\n */\nexport const formatLandlinePhoneNumber = (phone: string): string =>\n formatMobilePhoneNumber(phone);\n"],"mappings":"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","names":[]}