diff --git a/server/routes/issue.ts b/server/routes/issue.ts index 953b3757..bce1696b 100644 --- a/server/routes/issue.ts +++ b/server/routes/issue.ts @@ -54,6 +54,8 @@ issueRoutes.get, IssueResultsResponse>( .leftJoinAndSelect('issue.createdBy', 'createdBy') .leftJoinAndSelect('issue.media', 'media') .leftJoinAndSelect('issue.modifiedBy', 'modifiedBy') + .leftJoinAndSelect('issue.comments', 'comments') + .leftJoinAndSelect('comments.user', 'user') .where('issue.status IN (:...issueStatus)', { issueStatus: statusFilter, }); diff --git a/src/components/IssueList/IssueItem/index.tsx b/src/components/IssueList/IssueItem/index.tsx index 53c618fe..ddaa0db3 100644 --- a/src/components/IssueList/IssueItem/index.tsx +++ b/src/components/IssueList/IssueItem/index.tsx @@ -1,6 +1,7 @@ import Badge from '@app/components/Common/Badge'; import Button from '@app/components/Common/Button'; import CachedImage from '@app/components/Common/CachedImage'; +import Tooltip from '@app/components/Common/Tooltip'; import { issueOptions } from '@app/components/IssueModal/constants'; import { Permission, useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; @@ -26,6 +27,7 @@ const messages = defineMessages('components.IssueList.IssueItem', { opened: 'Opened', viewissue: 'View Issue', unknownissuetype: 'Unknown', + descriptionpreview: 'Issue Description', }); const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => { @@ -107,8 +109,15 @@ const IssueItem = ({ issue }: IssueItemProps) => { } } + const description = issue.comments?.[0]?.message || ''; + const maxDescriptionLength = 120; + const shouldTruncate = description.length > maxDescriptionLength; + const truncatedDescription = shouldTruncate + ? description.substring(0, maxDescriptionLength) + '...' + : description; + return ( -
+
{title.backdropPath && (
{ > {isMovie(title) ? title.title : title.name} + {description && ( +
+
+ {shouldTruncate ? ( + +
+ Issue Description +
+
+ {description} +
+
+ } + tooltipConfig={{ + placement: 'top', + offset: [0, 8], + }} + > + + {truncatedDescription} + + + ) : ( + {description} + )} +
+
+ )} {problemSeasonEpisodeLine.length > 0 && ( -
+
{problemSeasonEpisodeLine.map((t, k) => ( {t} ))} diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index a39b1d92..0c7a9d04 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -104,6 +104,7 @@ "components.Discover.StudioSlider.studios": "Studios", "components.Discover.TvGenreList.seriesgenres": "Series Genres", "components.Discover.TvGenreSlider.tvgenres": "Series Genres", + "components.DiscoverTvUpcoming.upcomingtv": "Upcoming Series", "components.Discover.createnewslider": "Create New Slider", "components.Discover.customizediscover": "Customize Discover", "components.Discover.discover": "Discover", @@ -137,7 +138,6 @@ "components.Discover.upcomingtv": "Upcoming Series", "components.Discover.updatefailed": "Something went wrong updating the discover customization settings.", "components.Discover.updatesuccess": "Updated discover customization settings.", - "components.DiscoverTvUpcoming.upcomingtv": "Upcoming Series", "components.DownloadBlock.estimatedtime": "Estimated {time}", "components.DownloadBlock.formattedTitle": "{title}: Season {seasonNumber} Episode {episodeNumber}", "components.IssueDetails.IssueComment.areyousuredelete": "Are you sure you want to delete this comment?", @@ -180,6 +180,7 @@ "components.IssueDetails.toaststatusupdated": "Issue status updated successfully!", "components.IssueDetails.toaststatusupdatefailed": "Something went wrong while updating the issue status.", "components.IssueDetails.unknownissuetype": "Unknown", + "components.IssueList.IssueItem.descriptionpreview": "Issue Description", "components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Episode} other {Episodes}}", "components.IssueList.IssueItem.issuestatus": "Status", "components.IssueList.IssueItem.issuetype": "Type", @@ -1225,7 +1226,7 @@ "components.Setup.librarieserror": "Validation failed. Please toggle the libraries again to continue.", "components.Setup.servertype": "Choose Server Type", "components.Setup.setup": "Setup", - "components.Setup.signin": "Sign in to your account", + "components.Setup.signin": "Sign In", "components.Setup.signinMessage": "Get started by signing in", "components.Setup.signinWithEmby": "Enter your Emby details", "components.Setup.signinWithJellyfin": "Enter your Jellyfin details",