From e69b6b096f1039c441e78cdf0dd4031577c420db Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 4 Aug 2025 20:01:48 +0200 Subject: [PATCH 1/3] task: Improve release workflow --- scripts/finishRelease.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/finishRelease.js b/scripts/finishRelease.js index 81354313..54a2a100 100644 --- a/scripts/finishRelease.js +++ b/scripts/finishRelease.js @@ -23,7 +23,7 @@ try { execSync('git checkout develop', { stdio: 'inherit' }); execSync('git pull origin develop', { stdio: 'inherit' }); - execSync(`git merge --no-ff ${releaseBranch} -m "Merge release ${version} into develop"`, { stdio: 'inherit' }); + execSync(`git merge origin/main --strategy=ours -m "Sync main into develop after release ${version}"`, { stdio: 'inherit' }); execSync('git push origin develop'); execSync(`git branch -d ${releaseBranch}`, { stdio: 'inherit' }); From 846b17b679bdb6a9620d7277d6599cb6ed12e52e Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 4 Aug 2025 21:52:40 +0200 Subject: [PATCH 2/3] fix: Use fast-forward merge to copy feature commits to main --- scripts/finishRelease.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/finishRelease.js b/scripts/finishRelease.js index 54a2a100..09135b07 100644 --- a/scripts/finishRelease.js +++ b/scripts/finishRelease.js @@ -15,16 +15,13 @@ try { execSync('git checkout main', { stdio: 'inherit' }); execSync('git pull origin main', { stdio: 'inherit' }); - execSync(`git merge --no-ff ${releaseBranch} -m "Merge release ${version} into main"`, { stdio: 'inherit' }); + execSync(`git merge --ff-only ${releaseBranch}`, { stdio: 'inherit' }); execSync(`git tag -a ${tagName} -m "Release ${tagName}"`, { stdio: 'inherit' }); execSync('git push origin main'); execSync(`git push origin ${tagName}`); execSync('git checkout develop', { stdio: 'inherit' }); - execSync('git pull origin develop', { stdio: 'inherit' }); - execSync(`git merge origin/main --strategy=ours -m "Sync main into develop after release ${version}"`, { stdio: 'inherit' }); - execSync('git push origin develop'); execSync(`git branch -d ${releaseBranch}`, { stdio: 'inherit' }); execSync(`git push origin --delete ${releaseBranch}`, { stdio: 'inherit' }); From 87a6e43d8b037c69c6c5b8b9b042788acb7f296d Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 5 Aug 2025 08:00:10 +0200 Subject: [PATCH 3/3] task: #152 Refactor user data visibility relationships --- convex/_generated/api.d.ts | 6 ++ .../sortTournamentCompetitorsByName.ts | 7 +- .../_helpers/checkUserRelationshipLevel.ts | 48 ++++++++++ .../users/_helpers/compareVisibilityLevels.ts | 26 ++++++ .../users/_helpers/formatUserRealName.ts | 11 +++ convex/_model/users/_helpers/redactUser.ts | 60 +++++------- .../users/actions/setUserDefaultAvatar.ts | 4 +- convex/_model/users/index.ts | 1 + convex/_model/users/queries/getCurrentUser.ts | 23 ++++- convex/_model/users/queries/getUsers.ts | 3 +- convex/common/userDataVisibilityLevel.ts | 1 + src/api.ts | 1 + src/components/AccountMenu/AccountMenu.tsx | 9 +- .../AuthProvider/AuthProvider.context.ts | 4 +- .../AvatarEditable/AvatarEditable.tsx | 2 +- .../FowV4MatchResultDetails.hooks.ts | 3 +- .../components/CommonFields.hooks.ts | 3 +- .../components/SelectPlayerDialog.tsx | 7 +- .../TournamentPlayersFields.utils.ts | 5 +- .../IdentityBadge/IdentityBadge.hooks.tsx | 5 +- .../MatchResultComments.tsx | 3 +- .../MatchResultLikes/MatchResultLikes.tsx | 4 +- .../TournamentCompetitorCard.hooks.tsx | 43 --------- .../TournamentCompetitorCard.module.scss | 52 ----------- .../TournamentCompetitorCard.tsx | 92 ------------------- .../TournamentCompetitorCard/index.ts | 1 - src/pages/UserProfilePage/UserProfilePage.tsx | 5 +- .../getTournamentCompetitorDisplayName.ts | 3 +- src/utils/common/getUserDisplayNameReact.tsx | 24 ----- src/utils/common/getUserDisplayNameString.ts | 17 ---- 30 files changed, 163 insertions(+), 310 deletions(-) create mode 100644 convex/_model/users/_helpers/checkUserRelationshipLevel.ts create mode 100644 convex/_model/users/_helpers/compareVisibilityLevels.ts create mode 100644 convex/_model/users/_helpers/formatUserRealName.ts delete mode 100644 src/components/TournamentCompetitorCard/TournamentCompetitorCard.hooks.tsx delete mode 100644 src/components/TournamentCompetitorCard/TournamentCompetitorCard.module.scss delete mode 100644 src/components/TournamentCompetitorCard/TournamentCompetitorCard.tsx delete mode 100644 src/components/TournamentCompetitorCard/index.ts delete mode 100644 src/utils/common/getUserDisplayNameReact.tsx delete mode 100644 src/utils/common/getUserDisplayNameString.ts diff --git a/convex/_generated/api.d.ts b/convex/_generated/api.d.ts index 70a9efb7..4d279b2b 100644 --- a/convex/_generated/api.d.ts +++ b/convex/_generated/api.d.ts @@ -139,7 +139,10 @@ import type * as _model_tournaments_queries_getTournaments from "../_model/tourn import type * as _model_tournaments_queries_getTournamentsByStatus from "../_model/tournaments/queries/getTournamentsByStatus.js"; import type * as _model_tournaments_queries_getTournamentsByUser from "../_model/tournaments/queries/getTournamentsByUser.js"; import type * as _model_users__helpers_checkUserAuth from "../_model/users/_helpers/checkUserAuth.js"; +import type * as _model_users__helpers_checkUserRelationshipLevel from "../_model/users/_helpers/checkUserRelationshipLevel.js"; import type * as _model_users__helpers_checkUserTournamentRelationship from "../_model/users/_helpers/checkUserTournamentRelationship.js"; +import type * as _model_users__helpers_compareVisibilityLevels from "../_model/users/_helpers/compareVisibilityLevels.js"; +import type * as _model_users__helpers_formatUserRealName from "../_model/users/_helpers/formatUserRealName.js"; import type * as _model_users__helpers_getShallowUser from "../_model/users/_helpers/getShallowUser.js"; import type * as _model_users__helpers_redactUser from "../_model/users/_helpers/redactUser.js"; import type * as _model_users_actions_setUserDefaultAvatar from "../_model/users/actions/setUserDefaultAvatar.js"; @@ -334,7 +337,10 @@ declare const fullApi: ApiFromModules<{ "_model/tournaments/queries/getTournamentsByStatus": typeof _model_tournaments_queries_getTournamentsByStatus; "_model/tournaments/queries/getTournamentsByUser": typeof _model_tournaments_queries_getTournamentsByUser; "_model/users/_helpers/checkUserAuth": typeof _model_users__helpers_checkUserAuth; + "_model/users/_helpers/checkUserRelationshipLevel": typeof _model_users__helpers_checkUserRelationshipLevel; "_model/users/_helpers/checkUserTournamentRelationship": typeof _model_users__helpers_checkUserTournamentRelationship; + "_model/users/_helpers/compareVisibilityLevels": typeof _model_users__helpers_compareVisibilityLevels; + "_model/users/_helpers/formatUserRealName": typeof _model_users__helpers_formatUserRealName; "_model/users/_helpers/getShallowUser": typeof _model_users__helpers_getShallowUser; "_model/users/_helpers/redactUser": typeof _model_users__helpers_redactUser; "_model/users/actions/setUserDefaultAvatar": typeof _model_users_actions_setUserDefaultAvatar; diff --git a/convex/_model/tournamentCompetitors/_helpers/sortTournamentCompetitorsByName.ts b/convex/_model/tournamentCompetitors/_helpers/sortTournamentCompetitorsByName.ts index 7049d5fd..854444c9 100644 --- a/convex/_model/tournamentCompetitors/_helpers/sortTournamentCompetitorsByName.ts +++ b/convex/_model/tournamentCompetitors/_helpers/sortTournamentCompetitorsByName.ts @@ -8,11 +8,8 @@ export const sortTournamentCompetitorsByName = ( if (competitor.teamName) { return competitor.teamName; } - if (competitor.players[0]?.user.familyName) { - return competitor.players[0].user.familyName; - } - if (competitor.players[0]?.user.username) { - return competitor.players[0].user.username; + if (competitor.players[0]?.user.displayName) { + return competitor.players[0].user.displayName; } return ''; }; diff --git a/convex/_model/users/_helpers/checkUserRelationshipLevel.ts b/convex/_model/users/_helpers/checkUserRelationshipLevel.ts new file mode 100644 index 00000000..e5e6cf97 --- /dev/null +++ b/convex/_model/users/_helpers/checkUserRelationshipLevel.ts @@ -0,0 +1,48 @@ +import { getAuthUserId } from '@convex-dev/auth/server'; + +import { Doc, Id } from '../../../_generated/dataModel'; +import { QueryCtx } from '../../../_generated/server'; +import { UserDataVisibilityLevel } from '../../../common/userDataVisibilityLevel'; +import { checkUserTournamentRelationship } from './checkUserTournamentRelationship'; + +export const checkUserRelationshipLevel = async ( + ctx: QueryCtx, + user: Doc<'users'>, + queryUserId?: Id<'users'> | null, +): Promise => { + const userId = queryUserId ?? await getAuthUserId(ctx); + + // RETURN CLOSEST RELATIONSHIPS FIRST! + + // 0 - Hidden + const isSelf = userId === user._id; + if (isSelf) { + return 'hidden'; + } + + // 1 - Friends + const hasFriendRelationship = false; + if (hasFriendRelationship) { + return 'friends'; + } + + // 2 - Club + const hasClubsRelationship = false; + if (hasClubsRelationship) { + return 'clubs'; + } + + // 3 - Tournaments + const hasTournamentRelationship = await checkUserTournamentRelationship(ctx, userId, user._id); + if (hasTournamentRelationship) { + return 'tournaments'; + } + + // 4 - Community + if (userId) { + return 'community'; + } + + // 5 - Public + return 'public'; +}; diff --git a/convex/_model/users/_helpers/compareVisibilityLevels.ts b/convex/_model/users/_helpers/compareVisibilityLevels.ts new file mode 100644 index 00000000..4ad9c39c --- /dev/null +++ b/convex/_model/users/_helpers/compareVisibilityLevels.ts @@ -0,0 +1,26 @@ +import { UserDataVisibilityLevel } from '../../../common/userDataVisibilityLevel'; + +/** + * Compares two user data visibility levels to determine if the querying user's relationship level satisfies the subject's required level. + * + * @param requiredLevel + * @param relationshipLevel + * @returns True if the relationship level is sufficient to satisfy the subject's required level + */ +export const compareVisibilityLevels = ( + requiredLevel: UserDataVisibilityLevel, + relationshipLevel: UserDataVisibilityLevel, +): boolean => { + + // Levels, ordered from least close to most + const orderedLevels: Record = { + public: 0, + community: 1, + tournaments: 2, + clubs: 3, + friends: 4, + hidden: 9999, + }; + + return orderedLevels[relationshipLevel] >= orderedLevels[requiredLevel]; +}; diff --git a/convex/_model/users/_helpers/formatUserRealName.ts b/convex/_model/users/_helpers/formatUserRealName.ts new file mode 100644 index 00000000..9bfb7a4a --- /dev/null +++ b/convex/_model/users/_helpers/formatUserRealName.ts @@ -0,0 +1,11 @@ +import { Doc } from '../../../_generated/dataModel'; + +/** + * Joins a users given and family names together with a space. + * + * @param user - The subject user + * @returns A string of the user's real name + */ +export const formatUserRealName = ( + user: Doc<'users'>, +): string => `${user.givenName} ${user.familyName}`; diff --git a/convex/_model/users/_helpers/redactUser.ts b/convex/_model/users/_helpers/redactUser.ts index d3e001ef..21d1d50c 100644 --- a/convex/_model/users/_helpers/redactUser.ts +++ b/convex/_model/users/_helpers/redactUser.ts @@ -3,20 +3,21 @@ import { getAuthUserId } from '@convex-dev/auth/server'; import { Doc } from '../../../_generated/dataModel'; import { QueryCtx } from '../../../_generated/server'; import { getStorageUrl } from '../../common/_helpers/getStorageUrl'; -import { checkUserTournamentRelationship } from './checkUserTournamentRelationship'; +import { checkUserRelationshipLevel } from './checkUserRelationshipLevel'; +import { compareVisibilityLevels } from './compareVisibilityLevels'; +import { formatUserRealName } from './formatUserRealName'; /** * User with some personal information hidden based on their preferences. */ -export type LimitedUser = Omit, 'givenName' | 'familyName' | 'countryCode'> & { - givenName?: string; - familyName?: string; - countryCode?: string; +export type LimitedUser = Pick, '_id' | 'username'> & { avatarUrl?: string; + countryCode?: string; + displayName: string; }; /** - * Removes a users's real name or location based on their preferences, also adds avatarUrl. + * Removes a users's real name or location based on their preferences, also adds avatarUrl and displayName. * * @remarks * This is essentially the user equivalent to the deepen[Resource]() pattern. @@ -32,43 +33,28 @@ export const redactUser = async ( const userId = await getAuthUserId(ctx); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { givenName, familyName, countryCode, ...restFields } = user; + const { givenName, familyName, countryCode, email, ...restFields } = user; const avatarUrl = await getStorageUrl(ctx, user.avatarStorageId); - const limitedUser: LimitedUser = { - ...restFields, - avatarUrl, - }; - // If user is querying own profile, simply return it if (userId === user._id) { - return { ...user, avatarUrl }; + return { + ...user, + avatarUrl, + displayName: formatUserRealName(user), + }; } - // If user is querying someone they are in a friendship or club with - const hasFriendRelationship = false; + // Otherwise check for relationships: + const relationshipLevel = await checkUserRelationshipLevel(ctx, user, userId); - // If user is querying someone they are in a tournament with - const hasTournamentRelationship = await checkUserTournamentRelationship(ctx, userId, user._id); + const nameVisible = compareVisibilityLevels(user?.nameVisibility ?? 'hidden', relationshipLevel); + const locationVisible = compareVisibilityLevels(user?.locationVisibility ?? 'hidden', relationshipLevel); - // Add name information if allowed - if ( - (user?.nameVisibility === 'public') || - (user?.nameVisibility === 'friends' && hasFriendRelationship) || - (user?.nameVisibility === 'tournaments' && (hasFriendRelationship || hasTournamentRelationship)) - ) { - limitedUser.givenName = user.givenName; - limitedUser.familyName = user.familyName; - } - - // Add location information if allowed - if ( - (user?.locationVisibility === 'public') || - (user?.locationVisibility === 'friends' && hasFriendRelationship) || - (user?.locationVisibility === 'tournaments' && (hasFriendRelationship || hasTournamentRelationship)) - ) { - limitedUser.countryCode = user.countryCode; - } - - return limitedUser; + return { + ...restFields, + avatarUrl, + displayName: nameVisible ? formatUserRealName(user) : user.username ?? 'Ghost', + countryCode: locationVisible ? user.countryCode : undefined, + }; }; diff --git a/convex/_model/users/actions/setUserDefaultAvatar.ts b/convex/_model/users/actions/setUserDefaultAvatar.ts index e0de9131..ec7086b6 100644 --- a/convex/_model/users/actions/setUserDefaultAvatar.ts +++ b/convex/_model/users/actions/setUserDefaultAvatar.ts @@ -16,7 +16,9 @@ export const setUserDefaultAvatar = async ( const user = await ctx.runQuery(api.users.getUser, { id: args.userId, }); - if (!user || !!user.avatarStorageId) { + + // If user is not found, or it already has an avatar set: + if (!user || !!user.avatarUrl) { return; } diff --git a/convex/_model/users/index.ts b/convex/_model/users/index.ts index 4bac0ba1..ba5c3064 100644 --- a/convex/_model/users/index.ts +++ b/convex/_model/users/index.ts @@ -30,6 +30,7 @@ export { updateUserAvatarNoAuthArgs, } from './mutations/updateUserAvatarNoAuth'; export { + type CurrentUser, getCurrentUser, } from './queries/getCurrentUser'; export { diff --git a/convex/_model/users/queries/getCurrentUser.ts b/convex/_model/users/queries/getCurrentUser.ts index 5e6b3543..7c5a7f0d 100644 --- a/convex/_model/users/queries/getCurrentUser.ts +++ b/convex/_model/users/queries/getCurrentUser.ts @@ -1,8 +1,13 @@ -import { getAuthUserId } from '@convex-dev/auth/server'; +import { Doc, getAuthUserId } from '@convex-dev/auth/server'; import { QueryCtx } from '../../../_generated/server'; -import { LimitedUser } from '../_helpers/redactUser'; -import { getUser } from './getUser'; +import { getStorageUrl } from '../../common/_helpers/getStorageUrl'; +import { formatUserRealName } from '../_helpers/formatUserRealName'; + +export type CurrentUser = Doc<'users'> & { + avatarUrl?: string; + displayName: string; +}; /** * Gets the querying user. @@ -14,10 +19,18 @@ import { getUser } from './getUser'; */ export const getCurrentUser = async ( ctx: QueryCtx, -): Promise => { +): Promise => { const userId = await getAuthUserId(ctx); if (!userId) { return null; } - return await getUser(ctx, { id: userId }); + const user = await ctx.db.get(userId); + if (!user) { + return null; + } + return { + ...user, + avatarUrl : await getStorageUrl(ctx, user.avatarStorageId), + displayName: formatUserRealName(user), + }; }; diff --git a/convex/_model/users/queries/getUsers.ts b/convex/_model/users/queries/getUsers.ts index 141762ca..a0c4a8f0 100644 --- a/convex/_model/users/queries/getUsers.ts +++ b/convex/_model/users/queries/getUsers.ts @@ -24,8 +24,7 @@ export const getUsers = async ( const limitedUsers = await Promise.all(users.map(async (user) => await redactUser(ctx, user))); if (args.search) { return filterWithSearchTerm(limitedUsers, args.search, [ - 'familyName', - 'givenName', + 'displayName', 'username', ]); } diff --git a/convex/common/userDataVisibilityLevel.ts b/convex/common/userDataVisibilityLevel.ts index b291f000..0484acf6 100644 --- a/convex/common/userDataVisibilityLevel.ts +++ b/convex/common/userDataVisibilityLevel.ts @@ -5,6 +5,7 @@ export const userDataVisibilityLevel = v.union( v.literal('friends'), v.literal('clubs'), v.literal('tournaments'), + v.literal('community'), v.literal('public'), ); diff --git a/src/api.ts b/src/api.ts index d06c9418..04c1c242 100644 --- a/src/api.ts +++ b/src/api.ts @@ -58,6 +58,7 @@ export { // Users export { + type CurrentUser, type LimitedUser as User, type UserId, } from '../convex/_model/users'; diff --git a/src/components/AccountMenu/AccountMenu.tsx b/src/components/AccountMenu/AccountMenu.tsx index a0fdd7eb..dd61fa50 100644 --- a/src/components/AccountMenu/AccountMenu.tsx +++ b/src/components/AccountMenu/AccountMenu.tsx @@ -11,16 +11,17 @@ import { Avatar } from '~/components/generic/Avatar'; import { Separator } from '~/components/generic/Separator'; import { useSignOut } from '~/services/auth/useSignOut'; import { PATHS } from '~/settings'; -import { getUserDisplayNameString } from '~/utils/common/getUserDisplayNameString'; import styles from './AccountMenu.module.scss'; -export const AccountMenu = (): JSX.Element => { +export const AccountMenu = (): JSX.Element | null => { const navigate = useNavigate(); const user = useAuth(); const { signOut } = useSignOut(); - const displayName = user ? getUserDisplayNameString(user) : 'Unknown User'; + if (!user) { + return null; + } const items = [ { @@ -50,7 +51,7 @@ export const AccountMenu = (): JSX.Element => {
- {displayName} + {user.displayName}
diff --git a/src/components/AuthProvider/AuthProvider.context.ts b/src/components/AuthProvider/AuthProvider.context.ts index f008337c..d7f640db 100644 --- a/src/components/AuthProvider/AuthProvider.context.ts +++ b/src/components/AuthProvider/AuthProvider.context.ts @@ -1,5 +1,5 @@ import { createContext } from 'react'; -import { User } from '~/api'; +import { CurrentUser } from '~/api'; -export const AuthContext = createContext(undefined); +export const AuthContext = createContext(undefined); diff --git a/src/components/AvatarEditable/AvatarEditable.tsx b/src/components/AvatarEditable/AvatarEditable.tsx index 300efd53..a10b297e 100644 --- a/src/components/AvatarEditable/AvatarEditable.tsx +++ b/src/components/AvatarEditable/AvatarEditable.tsx @@ -41,7 +41,7 @@ export const AvatarEditable = (): JSX.Element => { diff --git a/src/components/FowV4MatchResultDetails/FowV4MatchResultDetails.hooks.ts b/src/components/FowV4MatchResultDetails/FowV4MatchResultDetails.hooks.ts index c1592c2a..ab1f9814 100644 --- a/src/components/FowV4MatchResultDetails/FowV4MatchResultDetails.hooks.ts +++ b/src/components/FowV4MatchResultDetails/FowV4MatchResultDetails.hooks.ts @@ -1,5 +1,4 @@ import { Identity } from '~/components/IdentityBadge'; -import { getUserDisplayNameString } from '~/utils/common/getUserDisplayNameString'; import { FowV4MatchResultDetailsData } from './FowV4MatchResultDetails.types'; type UserPlayerNameResult = { @@ -23,7 +22,7 @@ export const usePlayerName = ( if (user) { return { loading: false, - displayName: getUserDisplayNameString(user), + displayName: user.displayName, }; } diff --git a/src/components/FowV4MatchResultForm/components/CommonFields.hooks.ts b/src/components/FowV4MatchResultForm/components/CommonFields.hooks.ts index 06131552..6e5bb493 100644 --- a/src/components/FowV4MatchResultForm/components/CommonFields.hooks.ts +++ b/src/components/FowV4MatchResultForm/components/CommonFields.hooks.ts @@ -7,7 +7,6 @@ import { UserId, } from '~/api'; import { useAuth } from '~/components/AuthProvider'; -import { getUserDisplayNameString } from '~/utils/common/getUserDisplayNameString'; export const usePlayerDisplayName = ({ userId, placeholder }: { userId?: UserId, placeholder?: string }): string => { const currentUser = useAuth(); @@ -19,7 +18,7 @@ export const usePlayerDisplayName = ({ userId, placeholder }: { userId?: UserId, if (user?._id === currentUser?._id) { return 'You'; } - return getUserDisplayNameString(user); + return user?.displayName ?? 'Unknown Player'; } return 'Unknown Player'; }; diff --git a/src/components/FowV4MatchResultForm/components/SelectPlayerDialog.tsx b/src/components/FowV4MatchResultForm/components/SelectPlayerDialog.tsx index 39a89788..c9e343d0 100644 --- a/src/components/FowV4MatchResultForm/components/SelectPlayerDialog.tsx +++ b/src/components/FowV4MatchResultForm/components/SelectPlayerDialog.tsx @@ -12,7 +12,6 @@ import { Label } from '~/components/generic/Label'; import { ScrollArea } from '~/components/generic/ScrollArea'; import { Separator } from '~/components/generic/Separator'; import { useGetUsers } from '~/services/users'; -import { getUserDisplayNameReact } from '~/utils/common/getUserDisplayNameReact'; import styles from './SelectPlayerDialog.module.scss'; @@ -55,9 +54,7 @@ export const SelectPlayerDialog = ({
{existingPlaceholder} - {existingUser && ( - getUserDisplayNameReact(existingUser) - )} + {existingUser?.displayName}
} @@ -72,7 +69,7 @@ export const SelectPlayerDialog = ({
- {getUserDisplayNameReact(user)} + {user.displayName}
- ) : ( - - ))} -
- {tournament.useTeams && ( - <> - -
- {tournamentCompetitor.players.map(({ user }, i) => ( -
- - {getUserDisplayNameString(user)} -
- ))} -
- - )} - - ); -}; diff --git a/src/components/TournamentCompetitorCard/index.ts b/src/components/TournamentCompetitorCard/index.ts deleted file mode 100644 index 1245b710..00000000 --- a/src/components/TournamentCompetitorCard/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TournamentCompetitorCard } from './TournamentCompetitorCard'; diff --git a/src/pages/UserProfilePage/UserProfilePage.tsx b/src/pages/UserProfilePage/UserProfilePage.tsx index 8a2b6e28..f18424e7 100644 --- a/src/pages/UserProfilePage/UserProfilePage.tsx +++ b/src/pages/UserProfilePage/UserProfilePage.tsx @@ -16,7 +16,6 @@ import { DeviceSize, useDeviceSize } from '~/hooks/useDeviceSize'; import { UserMatchResultsCard } from '~/pages/UserProfilePage/components/UserMatchResultsCard'; import { useGetUser } from '~/services/users'; import { MIN_WIDTH_DESKTOP, MIN_WIDTH_TABLET } from '~/settings'; -import { getUserDisplayNameString } from '~/utils/common/getUserDisplayNameString'; import styles from './UserProfilePage.module.scss'; @@ -65,13 +64,13 @@ export const UserProfilePage = (): JSX.Element => {
-

{getUserDisplayNameString(user)}

+

{user?.displayName}

{user?.username}

{/* {(awards ?? []).length > 0 && (
-

{getUserDisplayNameString(user)}

+

{user?.displayName}

{user?.username}

)} */} diff --git a/src/utils/common/getTournamentCompetitorDisplayName.ts b/src/utils/common/getTournamentCompetitorDisplayName.ts index 42d11200..0bf611f3 100644 --- a/src/utils/common/getTournamentCompetitorDisplayName.ts +++ b/src/utils/common/getTournamentCompetitorDisplayName.ts @@ -1,6 +1,5 @@ import { TournamentCompetitor } from '~/api'; import { getCountryName } from '~/utils/common/getCountryName'; -import { getUserDisplayNameString } from '~/utils/common/getUserDisplayNameString'; /** * Gets the display name for a tournament competitor. @@ -18,7 +17,7 @@ export const getTournamentCompetitorDisplayName = ( // If competitor has only 1 player, just use the player's name: if (competitor.players.length === 1 && competitor.players[0].user) { - return getUserDisplayNameString(competitor.players[0].user); + return competitor.players[0].user.displayName; } // Use the country name if there is one, otherwise just use the team name: diff --git a/src/utils/common/getUserDisplayNameReact.tsx b/src/utils/common/getUserDisplayNameReact.tsx deleted file mode 100644 index d6cf8547..00000000 --- a/src/utils/common/getUserDisplayNameReact.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { ReactNode } from 'react'; - -import { User } from '~/api'; - -export const getUserDisplayNameReact = (userProfile?: User): ReactNode => { - if (!userProfile) { - return 'Unknown User'; - } - - if (userProfile.givenName && !userProfile.familyName) { - return {userProfile.givenName}; - } - - if (userProfile.givenName && userProfile.familyName) { - return ( - <> - {userProfile.givenName} - {userProfile.familyName} - - ); - } - - return {userProfile?.username || 'Unknown User'}; -}; diff --git a/src/utils/common/getUserDisplayNameString.ts b/src/utils/common/getUserDisplayNameString.ts deleted file mode 100644 index 80ad8af3..00000000 --- a/src/utils/common/getUserDisplayNameString.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { User } from '~/api'; - -export const getUserDisplayNameString = (userProfile: User | undefined | null): string => { - if (!userProfile) { - return 'Unknown User'; - } - - if (userProfile.givenName && !userProfile.familyName) { - return userProfile.givenName; - } - - if (userProfile.givenName && userProfile.familyName) { - return `${userProfile.givenName} ${userProfile.familyName}`; - } - - return userProfile?.username || 'Unknown User'; -};