1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-06 01:15:28 +02:00

feat: last project events ui polishing (#8298)

This commit is contained in:
Mateusz Kwasniewski 2024-09-30 11:18:25 +02:00 committed by GitHub
parent 1ea63a8a1f
commit 751c2fa902
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 46 additions and 7 deletions

View File

@ -103,7 +103,7 @@ export const ContentGridNoProjects: React.FC<Props> = ({ owners, admins }) => {
</p> </p>
<AdminList> <AdminList>
{admins.map((admin) => ( {admins.map((admin) => (
<AdminListItem> <AdminListItem key={admin.name}>
<UserAvatar <UserAvatar
sx={{ sx={{
margin: 0, margin: 0,

View File

@ -1,22 +1,41 @@
import type { FC } from 'react'; import type { FC } from 'react';
import type { PersonalDashboardProjectDetailsSchema } from '../../openapi';
import { Markdown } from '../common/Markdown/Markdown'; import { Markdown } from '../common/Markdown/Markdown';
import type { PersonalDashboardProjectDetailsSchema } from '../../openapi';
import { UserAvatar } from '../common/UserAvatar/UserAvatar';
import { styled } from '@mui/material';
const Events = styled('ul')(({ theme }) => ({
padding: 0,
alignItems: 'flex-start',
}));
const Event = styled('li')(({ theme }) => ({
display: 'flex',
gap: theme.spacing(2),
listStyleType: 'none',
padding: 0,
marginBottom: theme.spacing(4),
}));
export const LatestProjectEvents: FC<{ export const LatestProjectEvents: FC<{
latestEvents: PersonalDashboardProjectDetailsSchema['latestEvents']; latestEvents: PersonalDashboardProjectDetailsSchema['latestEvents'];
}> = ({ latestEvents }) => { }> = ({ latestEvents }) => {
return ( return (
<ul> <Events>
{latestEvents.map((event) => { {latestEvents.map((event) => {
return ( return (
<li key={event.summary}> <Event key={event.id}>
<UserAvatar
src={event.createdByImageUrl}
sx={{ mt: 1 }}
/>
<Markdown> <Markdown>
{event.summary || {event.summary ||
'No preview available for this event'} 'No preview available for this event'}
</Markdown> </Markdown>
</li> </Event>
); );
})} })}
</ul> </Events>
); );
}; };

View File

@ -15,4 +15,6 @@ export type PersonalDashboardProjectDetailsSchemaLatestEventsItem = {
* @nullable * @nullable
*/ */
summary: string | null; summary: string | null;
id: number;
createdByImageUrl: string;
}; };

View File

@ -11,9 +11,15 @@ import type { IProjectReadModel } from '../project/project-read-model-type';
import type { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType'; import type { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType';
import type { IEventStore } from '../../types'; import type { IEventStore } from '../../types';
import type { FeatureEventFormatter } from '../../addons/feature-event-formatter-md'; import type { FeatureEventFormatter } from '../../addons/feature-event-formatter-md';
import { generateImageUrl } from '../../util';
type PersonalProjectDetails = { type PersonalProjectDetails = {
latestEvents: { summary: string; createdBy: string }[]; latestEvents: {
summary: string;
createdBy: string;
id: number;
createdByImageUrl: string;
}[];
}; };
export class PersonalDashboardService { export class PersonalDashboardService {
@ -93,6 +99,8 @@ export class PersonalDashboardService {
const formattedEvents = recentEvents.map((event) => ({ const formattedEvents = recentEvents.map((event) => ({
summary: this.featureEventFormatter.format(event).text, summary: this.featureEventFormatter.format(event).text,
createdBy: event.createdBy, createdBy: event.createdBy,
id: event.id,
createdByImageUrl: generateImageUrl({ email: event.createdBy }),
})); }));
return { latestEvents: formattedEvents }; return { latestEvents: formattedEvents };

View File

@ -17,6 +17,11 @@ export const personalDashboardProjectDetailsSchema = {
additionalProperties: false, additionalProperties: false,
required: ['summary', 'createdBy'], required: ['summary', 'createdBy'],
properties: { properties: {
id: {
type: 'integer',
minimum: 1,
description: 'The ID of the event.',
},
summary: { summary: {
type: 'string', type: 'string',
nullable: true, nullable: true,
@ -28,6 +33,11 @@ export const personalDashboardProjectDetailsSchema = {
description: 'Which user created this event', description: 'Which user created this event',
example: 'johndoe', example: 'johndoe',
}, },
createdByImageUrl: {
type: 'string',
description: `URL used for the user profile image of the event author`,
example: 'https://example.com/242x200.png',
},
}, },
}, },
}, },