From a23f2f9d18ee9bc3a65bf4fadb0ebda6f11cee32 Mon Sep 17 00:00:00 2001 From: Shrushti Polekar Date: Thu, 3 Apr 2025 21:06:40 +0530 Subject: [PATCH] Update Profile Picture Default Stylings (#20589) * refactor code for profile picture * fix test * minor fix --- .../ui/playwright/e2e/Pages/Users.spec.ts | 10 +- .../ActivityFeedcardNew.component.tsx | 32 ++-- .../CommentCard.component.tsx | 13 +- .../FeedCardBody/OwnerFeed/OwnersFeed.tsx | 63 ++++---- .../FeedCardFooter/FeedCardFooterNew.tsx | 13 +- .../TaskFeedCardNew.component.tsx | 2 +- .../Task/TaskTab/TaskTabNew.component.tsx | 47 +++--- .../TasktabIncidentManagerHeaderNew.tsx | 28 ++-- ...rofileSectionUserDetailsCard.component.tsx | 18 ++- .../OwnerLabel/UserAvatarGroup.component.tsx | 38 +++-- .../common/PopOverCard/UserPopOverCard.tsx | 4 +- .../common/ProfilePicture/ProfilePicture.tsx | 2 +- .../ProfilePicture/ProfilePictureNew.tsx | 137 ------------------ 13 files changed, 155 insertions(+), 252 deletions(-) delete mode 100644 openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePictureNew.tsx diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Users.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Users.spec.ts index ab5189893f8..40ddb19a8e3 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Users.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Users.spec.ts @@ -470,11 +470,15 @@ test.describe('User Profile Feed Interactions', () => { '/api/v1/feed?type=Conversation&filterType=OWNER_OR_FOLLOWS&userId=*' ); - await adminPage + const avatar = adminPage .locator('[data-testid="message-container"]') .first() - .locator('[data-testid="profile-avatar"]') - .click(); + .locator('[data-testid="profile-avatar"]'); + + await avatar.hover(); + await adminPage.waitForSelector('.ant-popover-card'); + await adminPage.getByTestId('user-name').nth(1).click(); + await userDetailsResponse; await userFeedResponse; const response = await userDetailsResponse; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardNew/ActivityFeedcardNew.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardNew/ActivityFeedcardNew.component.tsx index a414fd0d3be..f5aa7596edd 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardNew/ActivityFeedcardNew.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardNew/ActivityFeedcardNew.component.tsx @@ -38,7 +38,7 @@ import { getUserPath } from '../../../utils/RouterUtils'; import searchClassBase from '../../../utils/SearchClassBase'; import EntityPopOverCard from '../../common/PopOverCard/EntityPopOverCard'; import UserPopOverCard from '../../common/PopOverCard/UserPopOverCard'; -import ProfilePictureNew from '../../common/ProfilePicture/ProfilePictureNew'; +import ProfilePicture from '../../common/ProfilePicture/ProfilePicture'; import FeedCardBodyNew from '../ActivityFeedCard/FeedCardBody/FeedCardBodyNew'; import FeedCardFooterNew from '../ActivityFeedCardV2/FeedCardFooter/FeedCardFooterNew'; import ActivityFeedEditorNew from '../ActivityFeedEditor/ActivityFeedEditorNew'; @@ -203,12 +203,15 @@ const ActivityFeedCardNew = ({ 'items-start': showThread && feed.entityRef?.type === EntityType.CONTAINER, })}> - + +
+ +
+
- + +
+ +
+
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
- + +
+ +
+
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardBody/OwnerFeed/OwnersFeed.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardBody/OwnerFeed/OwnersFeed.tsx index 433d0c57a43..af28593e149 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardBody/OwnerFeed/OwnersFeed.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardBody/OwnerFeed/OwnersFeed.tsx @@ -26,7 +26,8 @@ import { Owner } from '../../../../../generated/entity/feed/owner'; import { Thread } from '../../../../../generated/entity/feed/thread'; import { EntityReference } from '../../../../../generated/entity/type'; import { UserAvatarGroup } from '../../../../common/OwnerLabel/UserAvatarGroup.component'; -import ProfilePictureNew from '../../../../common/ProfilePicture/ProfilePictureNew'; +import UserPopOverCard from '../../../../common/PopOverCard/UserPopOverCard'; +import ProfilePicture from '../../../../common/ProfilePicture/ProfilePicture'; interface OwnersFeedProps { feed: Thread; @@ -69,21 +70,21 @@ function OwnersFeed({ {updatedOwner.length <= maxVisibleOwners ? ( {updatedOwner.map((owner: EntityReference) => ( -
- - - {owner.displayName} - -
+ +
+ + + {owner.displayName} + +
+
))}
) : ( @@ -111,21 +112,21 @@ function OwnersFeed({ {previousOwner.length <= maxVisibleOwners ? ( {previousOwner.map((owner: EntityReference) => ( -
- - - {owner.displayName} - -
+ +
+ + + {owner.displayName} + +
+
))}
) : ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardFooter/FeedCardFooterNew.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardFooter/FeedCardFooterNew.tsx index f6cb6e7b1fe..e8c1a741e62 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardFooter/FeedCardFooterNew.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/ActivityFeedCardV2/FeedCardFooter/FeedCardFooterNew.tsx @@ -18,7 +18,8 @@ import React, { useCallback, useMemo } from 'react'; import { ReactComponent as ThreadIcon } from '../../../../assets/svg/ic-reply-2.svg'; import { ReactionOperation } from '../../../../enums/reactions.enum'; import { ReactionType } from '../../../../generated/type/reaction'; -import ProfilePictureNew from '../../../common/ProfilePicture/ProfilePictureNew'; +import UserPopOverCard from '../../../common/PopOverCard/UserPopOverCard'; +import ProfilePicture from '../../../common/ProfilePicture/ProfilePicture'; import { useActivityFeedProvider } from '../../ActivityFeedProvider/ActivityFeedProvider'; import Reactions from '../../Reactions/Reactions'; import { FeedCardFooterProps } from './FeedCardFooter.interface'; @@ -85,11 +86,11 @@ function FeedCardFooterNew({ }} type="text" onClick={isForFeedTab ? showReplies : undefined}> - + +
+ +
+
))} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/TaskFeedCard/TaskFeedCardNew.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/TaskFeedCard/TaskFeedCardNew.component.tsx index 9c382c8bf93..133fc73e746 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/TaskFeedCard/TaskFeedCardNew.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ActivityFeed/TaskFeedCard/TaskFeedCardNew.component.tsx @@ -361,7 +361,7 @@ const TaskFeedCard = ({ }`}> diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx index 343be67af1b..bfc2efcfe55 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Entity/Task/TaskTab/TaskTabNew.component.tsx @@ -126,7 +126,8 @@ import { } from '../../../../utils/EntityUtils'; import { UserAvatarGroup } from '../../../common/OwnerLabel/UserAvatarGroup.component'; import EntityPopOverCard from '../../../common/PopOverCard/EntityPopOverCard'; -import ProfilePictureNew from '../../../common/ProfilePicture/ProfilePictureNew'; +import UserPopOverCard from '../../../common/PopOverCard/UserPopOverCard'; +import ProfilePicture from '../../../common/ProfilePicture/ProfilePicture'; import TaskTabIncidentManagerHeaderNew from '../TaskTabIncidentManagerHeader/TasktabIncidentManagerHeaderNew'; import './task-tab-new.less'; import { TaskTabProps } from './TaskTab.interface'; @@ -875,11 +876,11 @@ export const TaskTabNew = ({ - + +
+ +
+
{taskThread.createdBy} @@ -939,18 +940,25 @@ export const TaskTabNew = ({ {taskThread?.task?.assignees?.length === 1 ? (
- + +
+ +
+
{taskThread?.task?.assignees[0].displayName}
) : ( @@ -1114,12 +1122,15 @@ export const TaskTabNew = ({ taskThread?.task?.status === ThreadTaskStatus.Open && (
- + +
+ +
+
{ - + +
+ +
+
{thread.createdBy} @@ -144,18 +145,21 @@ const TaskTabIncidentManagerHeaderNew = ({ thread }: { thread: Thread }) => { {thread?.task?.assignees?.length === 1 ? (
- + +
+ +
+
{thread?.task?.assignees[0].displayName}
) : ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ProfileCard/ProfileSectionUserDetailsCard.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ProfileCard/ProfileSectionUserDetailsCard.component.tsx index 21da9265947..9bea76d6d80 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ProfileCard/ProfileSectionUserDetailsCard.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ProfileCard/ProfileSectionUserDetailsCard.component.tsx @@ -35,7 +35,8 @@ import { changePassword } from '../../rest/auth-API'; import { getEntityName } from '../../utils/EntityUtils'; import { showErrorToast, showSuccessToast } from '../../utils/ToastUtils'; import DeleteWidgetModal from '../common/DeleteWidget/DeleteWidgetModal'; -import ProfilePictureNew from '../common/ProfilePicture/ProfilePictureNew'; +import UserPopOverCard from '../common/PopOverCard/UserPopOverCard'; +import ProfilePicture from '../common/ProfilePicture/ProfilePicture'; import { ProfileEditModal } from '../Modals/ProfileEditModal/ProfileEditModal'; import ChangePasswordForm from '../Settings/Users/ChangePasswordForm'; import './profile-details.less'; @@ -237,12 +238,15 @@ const ProfileSectionUserDetailsCard = ({
- + +
+ +
+

diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/OwnerLabel/UserAvatarGroup.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/OwnerLabel/UserAvatarGroup.component.tsx index e72d4d23541..742762a75f3 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/OwnerLabel/UserAvatarGroup.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/OwnerLabel/UserAvatarGroup.component.tsx @@ -18,7 +18,8 @@ import React, { ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { ReactComponent as IconUser } from '../../../assets/svg/user.svg'; import { EntityReference } from '../../../generated/entity/data/table'; -import ProfilePictureNew from '../ProfilePicture/ProfilePictureNew'; +import UserPopOverCard from '../PopOverCard/UserPopOverCard'; +import ProfilePicture from '../ProfilePicture/ProfilePicture'; import './owner-label.less'; export const UserAvatarGroup = ({ @@ -29,7 +30,7 @@ export const UserAvatarGroup = ({ ownerDisplayName, placeHolder, maxVisibleOwners = 2, - avatarSize = 24, + avatarSize = '24', }: { owners?: EntityReference[]; className?: string; @@ -43,7 +44,7 @@ export const UserAvatarGroup = ({ team: boolean; }; tooltipText?: string; - avatarSize?: number; + avatarSize?: string; }) => { const { t } = useTranslation(); @@ -57,11 +58,15 @@ export const UserAvatarGroup = ({ key: owner.id, label: (

- + +
+ +
+
{owner.displayName}
), @@ -79,19 +84,22 @@ export const UserAvatarGroup = ({ {visibleOwners.map((owner) => (
- + +
+ +
+
))} {remainingOwnersCount > 0 && ( + size={Number(avatarSize)}> {t('label.plus-symbol')} {remainingOwnersCount} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/PopOverCard/UserPopOverCard.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/PopOverCard/UserPopOverCard.tsx index 156fb598aaf..b74bbdb891c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/PopOverCard/UserPopOverCard.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/PopOverCard/UserPopOverCard.tsx @@ -206,7 +206,9 @@ const PopoverTitle = React.memo( e.stopPropagation(); onTitleClickHandler(getUserPath(name)); }}> - {displayName} + + {displayName} + {displayName !== name ? ( {name} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePicture.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePicture.tsx index 39ffa7fe4fa..d02df8d1cd9 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePicture.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePicture.tsx @@ -45,7 +45,7 @@ const ProfilePicture = ({ height, isTeam = false, size, - avatarType = 'solid', + avatarType = 'outlined', }: Props) => { const { permissions } = usePermissionProvider(); const { color, character, backgroundColor } = getRandomColor( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePictureNew.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePictureNew.tsx deleted file mode 100644 index ece25e215a7..00000000000 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/ProfilePicture/ProfilePictureNew.tsx +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright 2022 Collate. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Avatar, Tooltip } from 'antd'; -import classNames from 'classnames'; -import { parseInt } from 'lodash'; -import { ImageShape } from 'Models'; -import React, { useMemo } from 'react'; -import { Link } from 'react-router-dom'; -import { usePermissionProvider } from '../../../context/PermissionProvider/PermissionProvider'; -import { ResourceEntity } from '../../../context/PermissionProvider/PermissionProvider.interface'; -import { User } from '../../../generated/entity/teams/user'; -import { useUserProfile } from '../../../hooks/user-profile/useUserProfile'; -import { getRandomColor } from '../../../utils/CommonUtils'; -import { userPermissions } from '../../../utils/PermissionsUtils'; -import { getUserPath } from '../../../utils/RouterUtils'; -import Loader from '../Loader/Loader'; -import UserPopOverCard from '../PopOverCard/UserPopOverCard'; - -type UserData = Pick; - -interface Props extends UserData { - width?: string; - type?: ImageShape; - className?: string; - height?: string; - isTeam?: boolean; - size?: number | 'small' | 'default' | 'large'; - avatarType?: 'solid' | 'outlined'; -} - -const ProfilePictureNew = ({ - name, - displayName, - className = '', - type = 'circle', - width = '36', - height, - isTeam = false, - size, - avatarType = 'solid', -}: Props) => { - const { permissions } = usePermissionProvider(); - const { color, character, backgroundColor } = getRandomColor( - displayName ?? name - ); - - const viewUserPermission = useMemo(() => { - return userPermissions.hasViewPermissions(ResourceEntity.USER, permissions); - }, [permissions]); - - const [profileURL, isPicLoading] = useUserProfile({ - permission: viewUserPermission, - name, - isTeam, - }); - - const getAvatarByName = () => { - const avatar = ( - - ); - - return ( - - - {avatar} - - - ); - }; - - const getAvatarElement = () => { - return isPicLoading ? ( -
- {getAvatarByName()} -
- -
-
- ) : ( - getAvatarByName() - ); - }; - - return profileURL ? ( - - - - ) : ( - getAvatarElement() - ); -}; - -export default ProfilePictureNew;