| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| export function maskEmail(email: string | null | undefined, visibleChars = 3): string {
|
| if (!email) return "";
|
| if (!email.includes("@")) return email;
|
|
|
| const atIndex = email.lastIndexOf("@");
|
| const username = email.slice(0, atIndex);
|
| const domain = email.slice(atIndex + 1);
|
|
|
|
|
| if (username.length <= visibleChars) return email;
|
|
|
| const maskedUser = username.slice(0, visibleChars) + "*".repeat(username.length - visibleChars);
|
| if (domain.length <= visibleChars) {
|
| return `${maskedUser}@${domain}`;
|
| }
|
|
|
| const maskedDomain =
|
| "*".repeat(domain.length - visibleChars) + domain.slice(domain.length - visibleChars);
|
|
|
| return `${maskedUser}@${maskedDomain}`;
|
| }
|
|
|
| |
| |
| |
|
|
| export function maskEmailLikeValue(value: string | null | undefined, visibleChars = 3): string {
|
| if (!value) return "";
|
| const trimmed = value.trim();
|
| if (!trimmed) return "";
|
| return trimmed.includes("@") ? maskEmail(trimmed, visibleChars) : trimmed;
|
| }
|
|
|
| |
| |
|
|
| export function pickMaskedDisplayValue(
|
| values: Array<string | null | undefined>,
|
| fallback = ""
|
| ): string {
|
| for (const value of values) {
|
| const masked = maskEmailLikeValue(value);
|
| if (masked) return masked;
|
| }
|
| return fallback;
|
| }
|
|
|
| |
| |
| |
| |
|
|
| export function pickDisplayValue(
|
| values: Array<string | null | undefined>,
|
| showFull: boolean,
|
| fallback = ""
|
| ): string {
|
| if (showFull) {
|
| for (const value of values) {
|
| if (value?.trim()) return value.trim();
|
| }
|
| return fallback;
|
| }
|
| return pickMaskedDisplayValue(values, fallback);
|
| }
|
|
|