diff --git a/changes/28501-api-only-frontend b/changes/28501-api-only-frontend new file mode 100644 index 0000000000..44cc4250ac --- /dev/null +++ b/changes/28501-api-only-frontend @@ -0,0 +1 @@ +- Added a new avatar for API-only users in the activity feed diff --git a/frontend/__mocks__/activityMock.ts b/frontend/__mocks__/activityMock.ts index a20d4e7c9b..ac1e3f0cc4 100644 --- a/frontend/__mocks__/activityMock.ts +++ b/frontend/__mocks__/activityMock.ts @@ -11,6 +11,7 @@ const DEFAULT_ACTIVITY_MOCK: IActivity = { actor_id: 1, actor_gravatar: "", actor_email: "test@example.com", + actor_api_only: false, fleet_initiated: false, type: ActivityType.EditedAgentOptions, }; diff --git a/frontend/components/ActivityItem/ActivityItem.tsx b/frontend/components/ActivityItem/ActivityItem.tsx index 30e40bba35..d7f853724b 100644 --- a/frontend/components/ActivityItem/ActivityItem.tsx +++ b/frontend/components/ActivityItem/ActivityItem.tsx @@ -143,6 +143,7 @@ const ActivityItem = ({ size="small" hasWhiteBackground useFleetAvatar={activity.fleet_initiated} + useApiOnlyAvatar={activity.actor_api_only} />
diff --git a/frontend/components/Avatar/Avatar.tsx b/frontend/components/Avatar/Avatar.tsx index 13344f6908..038c59d258 100644 --- a/frontend/components/Avatar/Avatar.tsx +++ b/frontend/components/Avatar/Avatar.tsx @@ -74,6 +74,54 @@ const FleetAvatar = ({ className }: IFleetAvatarProps) => { ); }; +interface IAPIOnlyAvatar { + className?: string; +} + +const APIOnlyAvatar = ({ className }: IAPIOnlyAvatar) => { + return ( + + + + + + + ); +}; + interface IAvatarUserInterface { gravatar_url?: string; gravatar_url_dark?: string; @@ -88,6 +136,8 @@ interface IAvatarProps { * Set this to `true` to use the fleet avatar instead of the users gravatar. */ useFleetAvatar?: boolean; + // Set this to true to show the API Only avatar + useApiOnlyAvatar?: boolean; } const baseClass = "avatar"; @@ -97,6 +147,7 @@ const Avatar = ({ size, user, hasWhiteBackground, + useApiOnlyAvatar = false, useFleetAvatar = false, }: IAvatarProps) => { const [isLoading, setIsLoading] = useState(true); @@ -115,23 +166,25 @@ const Avatar = ({ }); const { gravatar_url } = user; - return ( -
- {useFleetAvatar ? ( - - ) : ( - User avatar - )} -
- ); + let avatar; + + if (useFleetAvatar) { + avatar = ; + } else if (useApiOnlyAvatar && !gravatar_url) { + avatar = ; + } else { + avatar = ( + User avatar + ); + } + + return
{avatar}
; }; export default Avatar; diff --git a/frontend/interfaces/activity.ts b/frontend/interfaces/activity.ts index 5e1c4751a7..1fa7adc032 100644 --- a/frontend/interfaces/activity.ts +++ b/frontend/interfaces/activity.ts @@ -152,6 +152,7 @@ export interface IActivity { actor_id: number; actor_gravatar: string; actor_email?: string; + actor_api_only: boolean; type: ActivityType; fleet_initiated: boolean; details?: IActivityDetails;