DigitalConsumer.ISS/src/helpers/text-helper.js
2026-02-13 11:56:35 -06:00

152 lines
No EOL
4.4 KiB
JavaScript

/**
* @function stripRteStyle
* @summary
* Returns string with inline style tag stripped out
* @param {string} stringWithStyleTag
* @returns {string}
*/
export function stripRteStyle(stringWithStyleTag) {
const regexExp = /[\s*]style="(.*?)"/g;
return stringWithStyleTag.replace(regexExp, '');
}
export function extractSpanText(spanElement) {
const tempContainer = document.createElement('div');
tempContainer.innerHTML = spanElement;
return tempContainer.textContent || tempContainer.innerText || '';
}
/**
* @function createOrderedListFromStringOfParagraphs
* @summary
* Returns string with <p> tags changed to <li> and wrapped in an <ol>
* @param {string} stringOfParagraphs single string with 1 to N <p> tags
* @returns {string} converted string wrapped in an <ol>
*/
export function createOrderedListFromStringOfParagraphs(stringOfParagraphs) {
return `<ol>${stringOfParagraphs.replaceAll('<p></p>', '').replaceAll('<p>', '<li>').replaceAll('</p>', '</li>')}</ol>`;
}
/**
* @function createUnorderedListFromStringOfParagraphs
* @summary
* Returns string with <p> tags changed to <li> and wrapped in an <ul>
* @param {string} stringOfParagraphs single string with 1 to N <p> tags
* @returns {string} converted string wrapped in an <ul>
*/
export function createUnorderedListFromStringOfParagraphs(stringOfParagraphs) {
return `<ul>${stringOfParagraphs.replaceAll('<p></p>', '').replaceAll('<p>', '<li>').replaceAll('</p>', '</li>')}</ul>`;
}
/**
* @function toTitleCase
* @summary Returns title cased string version of 'text'
* @param {string} text
* @returns {string}
*/
export function toTitleCase(text) {
let temp = text?.toLowerCase() ?? '';
return temp.replace(/(^|\s|-|\/)\S/g, (letter) => letter.toUpperCase());
}
/**
* @function toDisplayPhoneNumber
* @summary If 10 or 11 digits are in phoneNumber, then the expected number including dashes will be returned
* in either d-ddd-ddd-dddd or ddd-ddd-dddd format. Otherwise, an empty string will be returned.
* @param {string} phoneNumber
* @returns {string}
*/
export function toDisplayPhoneNumber(phoneNumber) {
let result = '';
if (!phoneNumber) { return result; }
let remainingDigits = phoneNumber.match(/\d+/g).join('');
if (remainingDigits.length === 11) {
result += `${remainingDigits[0]}-`;
remainingDigits = remainingDigits.substring(1);
}
if (remainingDigits.length === 10) {
result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
}
return result;
}
/**
* @function formatAddress
* @summary given address fields, returns a string representation of said address
* @param {string} addressLine1
* @param {string} addressLine2
* @param {string} city
* @param {string} state
* @param {string} zipCode
* @returns {string}
*/
export function formatAddress(addressLine1, addressLine2, city, state, zipCode) {
let address = '';
if (addressLine1) {
address += addressLine1;
}
if (addressLine2) {
address += address ? `, ${addressLine2}` : addressLine2;
}
if (city) {
address += address ? `, ${city}` : city;
}
address = toTitleCase(address);
if (state) {
address += address ? `, ${state}` : state;
}
if (zipCode) {
address += address ? ` ${zipCode}` : zipCode;
}
return address;
}
const currencyFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
});
/**
* @function formatAmountInDollars
* @param {string | number} amount
* @returns {string}
*/
export function formatAmountInDollars(amount) {
const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;
if (Number.isNaN(numericAmount) || amount === null || amount === undefined) {
return '';
}
return currencyFormatter.format(amount);
}
const defaultDateFormatter = new Intl.DateTimeFormat('en-US');
export function formatDate(date, formatter) {
const dateFormatter = formatter ?? defaultDateFormatter;
if (!Number.isNaN(date)) {
return dateFormatter.format(date);
}
return '';
}
/**
* @function toPossessive
* @param {string | null} input
* @returns {string}
*/
export function toPossessive(input) {
if (input == null || input.trim().length === 0) {
return input;
}
if (input.toLowerCase().endsWith("s")) {
return `${input}'`
}
return `${input}'s`
}