/* eslint-disable @typescript-eslint/explicit-function-return-type */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ export * from './constanst' export * from './test/linkRedirect' export const getGlobalStyle = (token: string) => { return `var(${token})` } export const validateEmail = (email: string) => { const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ return re.test(email) } const locale = { COP: 'es-CO' } /** * Format a number or string into currency using Intl.NumberFormat * @param {number|string|null|undefined} value - The value to format * @param {Object} options - Formatting options * @returns {string|number|null|undefined} */ type SupportedCurrency = 'COP' | 'USD' | 'EUR'; export const numberFormat = ( value: number | string | null | undefined, options: { currency: SupportedCurrency, minimumFractionDigits?: number, maximumFractionDigits?: number, style?: 'currency', notation?: 'standard' | 'scientific' | 'engineering' | 'compact' } = { currency: 'COP', minimumFractionDigits: 2, maximumFractionDigits: 2, style: 'currency', notation: 'standard' } ) => { if (value === null || value === undefined) return value; const locale: Record = { COP: 'es-CO', USD: 'en-US', EUR: 'de-DE' } let numericValue: number; if (typeof value === 'string') { // Reemplaza miles (.) y decimales (,) para convertirlo en número JS válido numericValue = Number(value.replace(/\./g, '').replace(',', '.')); } else { numericValue = value; } if (!Number.isNaN(numericValue)) { const settings = { ...options, style: 'currency' } as Intl.NumberFormatOptions; const currencyLocale = locale[options.currency] ?? 'es-CO'; return new Intl.NumberFormat(currencyLocale, settings).format(numericValue); } return value; } /** * Valida si un número de teléfono tiene el formato (XXX) XXX-XXXX. * El formato esperado es: (123) 456-7890. * @param {string} phoneNumber - El número de teléfono a validar. * @return {boolean} Retorna true si el número de teléfono es válido, false en caso contrario. * @example true or false */ export const validatePhoneNumber = (phoneNumber: string) => { const regex = /^\(\d{3}\) \d{3}-\d{4}$/ return regex.test(phoneNumber) } export const isNull = (dato: string) => { return !!(!dato || dato === '') } export const isNumeric = (dato: string) => { return !!(isNaN(dato as any) && dato !== '' && dato !== undefined && dato !== null) } export const isPassword = (dato: string) => { const validar = /^(?=\w*\d)(?=\w*[A-Z])(?=\w*[a-z])\S{8,16}$/ if (validar.test(dato)) { return false } return true } export const isCC = (dato: string) => { const validar = /^((\d{8})|(\d{10})|(\d{11})|(\d{6}-\d{5}))?$/gm if (validar.test(dato)) { return false } return true } export const valNit = (nit: string) => { let nd: RegExpExecArray | null; let add = 0 // eslint-disable-next-line no-cond-assign if ((nd = /^(\d+)-(\d|k)$/i.exec(nit)) != null) { const checkDigit = nd[2].toLowerCase() === 'k' ? 10 : Number.parseInt(nd[2], 10); for (let i = 0; i < nd[1].length; i++) { add += ((((i - nd[1].length) * -1) + 1) * Number(nd[1][i])); } return ((11 - (add % 11)) % 11) === checkDigit; } return false; } export const onlyLetters = (dato: string) => { const validar = /^[A-Za-zÁÉÍÓÚáéíóúñÑ ]+$/g if (!validar.test(dato) && dato !== '' && dato !== undefined && dato !== null) { return true } return false } export const rangeLength = (dato: string, min: number, max: number) => { if (dato !== undefined && dato !== '' && dato !== null) { if ((dato.length < min) || (dato.length > max)) { return true } return false } return false } export const Match = (dato1: any, dato2: any) => { if (dato1 !== dato2) { return true } return false } export const isEmail = (email: string) => { const validar = /^[-\w.%+]{1,64}@[a-z0-9-]{1,63}\.[a-z]{2,63}$/ if ( !validar.test(email) && email !== '' && email !== undefined && email !== null ) { return true } return email !== email.toLowerCase() } export const passwordConfirm = (value: string, valueConfirm: string) => { return !(value === valueConfirm) } export const ROUTES = Object.freeze({ index: '/', home: '/home', register: '/register', dashboard: '/dashboard', profile: '/profile', categories: '/categories', configuration: '/configuration', orders: '/orders', products: '/products', notFound: '/404', serverError: '/500', // NO LAYOUT 'verify-email': '/verify-email', 'forgot-password': '/forgot-password', 'reset-password': '/reset-password', merchant: '/merchant', login: '/login' })