From 7be8801ce9096b80db3864e8d06b7ac184e62d32 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Tue, 6 Feb 2024 13:40:12 +0000 Subject: [PATCH] feat(UserHeader): truncate long names as some users and test accounts use very long names which appear poorly --- .../users-header--long-name-truncated.png | Bin 0 -> 11773 bytes __snapshots__/users-header.test.js.snap | 18 ++++++++++++++ .../users/UserHeader.stories.svelte | 9 +++++++ src/lib/components/users/type.ts | 22 ++++++++++++------ src/lib/components/users/vectors.ts | 4 ++++ 5 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 __snapshots__/users-header--long-name-truncated.png diff --git a/__snapshots__/users-header--long-name-truncated.png b/__snapshots__/users-header--long-name-truncated.png new file mode 100644 index 0000000000000000000000000000000000000000..59d78b95964edf0f794438dbee1661b7cfc100f8 GIT binary patch literal 11773 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 A5&!@I literal 0 HcmV?d00001 diff --git a/__snapshots__/users-header.test.js.snap b/__snapshots__/users-header.test.js.snap index 2678965..0e15932 100644 --- a/__snapshots__/users-header.test.js.snap +++ b/__snapshots__/users-header.test.js.snap @@ -117,6 +117,24 @@ exports[`Users/Header loading smoke-test 1`] = ` `; +exports[`Users/Header long name truncated smoke-test 1`] = ` +
+
+
+
+ Really Really Long Lon... +
+
+
+ Really Really Long Lon... +
+
+
+`; + exports[`Users/Header name and displayName shows name smoke-test 1`] = `
diff --git a/src/lib/components/users/UserHeader.stories.svelte b/src/lib/components/users/UserHeader.stories.svelte index 865a99d..55749d4 100644 --- a/src/lib/components/users/UserHeader.stories.svelte +++ b/src/lib/components/users/UserHeader.stories.svelte @@ -43,6 +43,15 @@ }} /> + + diff --git a/src/lib/components/users/type.ts b/src/lib/components/users/type.ts index 874eb04..7da72d3 100644 --- a/src/lib/components/users/type.ts +++ b/src/lib/components/users/type.ts @@ -13,16 +13,24 @@ export const defaults: User = { npub: '', } -export function getName(user: User): string { - return user.profile - ? user.profile.name +export function getName(user: User, truncate_above = 25): string { + return truncate( + user.profile ? user.profile.name - : user.profile.displayName - ? user.profile.displayName - : truncateNpub(user.npub) - : truncateNpub(user.npub) + ? user.profile.name + : user.profile.displayName + ? user.profile.displayName + : truncateNpub(user.npub) + : truncateNpub(user.npub), + truncate_above + ) } function truncateNpub(npub: string): string { return `${npub.substring(0, 9)}...` } + +function truncate(s: string, truncate_above = 20): string { + if (s.length < truncate_above || truncate_above < 5) return s + return `${s.substring(0, truncate_above - 3)}...` +} diff --git a/src/lib/components/users/vectors.ts b/src/lib/components/users/vectors.ts index e516ec7..cbbb0fe 100644 --- a/src/lib/components/users/vectors.ts +++ b/src/lib/components/users/vectors.ts @@ -22,6 +22,10 @@ export const UserVectors = { } as User, no_image: { ...base, profile: { name: 'DanConwayDev' } } as User, no_profile: { ...base } as User, + long_name: { + ...base, + profile: { name: 'Really Really Long Long Name', image }, + } as User, } export function withName(base: User, name: string): User {