Display long date tooltips for release dates

This commit is contained in:
Bogdan 2024-10-02 10:12:07 +03:00
parent 68dfa55b35
commit c43bd77dae
4 changed files with 101 additions and 28 deletions

View file

@ -422,14 +422,15 @@ class MovieDetails extends Component {
<div className={styles.details}> <div className={styles.details}>
<div> <div>
{ {
!!certification && certification ?
<span className={styles.certification}> <span className={styles.certification}>
{certification} {certification}
</span> </span> :
null
} }
{ {
year > 0 && year > 0 ?
<span className={styles.year}> <span className={styles.year}>
<Popover <Popover
anchor={ anchor={
@ -445,14 +446,16 @@ class MovieDetails extends Component {
} }
position={tooltipPositions.BOTTOM} position={tooltipPositions.BOTTOM}
/> />
</span> </span> :
null
} }
{ {
!!runtime && runtime ?
<span className={styles.runtime}> <span className={styles.runtime}>
{formatRuntime(runtime, movieRuntimeFormat)} {formatRuntime(runtime, movieRuntimeFormat)}
</span> </span> :
null
} }
{ {

View file

@ -2,23 +2,25 @@ import React from 'react';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import Icon from 'Components/Icon'; import Icon from 'Components/Icon';
import { icons } from 'Helpers/Props'; import { icons } from 'Helpers/Props';
import Movie from 'Movie/Movie';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
import formatDate from 'Utilities/Date/formatDate';
import getRelativeDate from 'Utilities/Date/getRelativeDate'; import getRelativeDate from 'Utilities/Date/getRelativeDate';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import styles from './MovieReleaseDates.css'; import styles from './MovieReleaseDates.css';
interface MovieReleaseDatesProps { type MovieReleaseDatesProps = Pick<
inCinemas?: string; Movie,
digitalRelease?: string; 'inCinemas' | 'digitalRelease' | 'physicalRelease'
physicalRelease?: string; >;
}
function MovieReleaseDates(props: MovieReleaseDatesProps) { function MovieReleaseDates({
const { inCinemas, digitalRelease, physicalRelease } = props; inCinemas,
digitalRelease,
const { showRelativeDates, shortDateFormat, timeFormat } = useSelector( physicalRelease,
createUISettingsSelector() }: MovieReleaseDatesProps) {
); const { showRelativeDates, shortDateFormat, longDateFormat, timeFormat } =
useSelector(createUISettingsSelector());
if (!inCinemas && !physicalRelease && !digitalRelease) { if (!inCinemas && !physicalRelease && !digitalRelease) {
return ( return (
@ -34,10 +36,16 @@ function MovieReleaseDates(props: MovieReleaseDatesProps) {
return ( return (
<> <>
{inCinemas ? ( {inCinemas ? (
<div title={translate('InCinemas')}> <div
title={`${translate('InCinemas')}: ${formatDate(
inCinemas,
longDateFormat
)}`}
>
<div className={styles.dateIcon}> <div className={styles.dateIcon}>
<Icon name={icons.IN_CINEMAS} /> <Icon name={icons.IN_CINEMAS} />
</div> </div>
{getRelativeDate({ {getRelativeDate({
date: inCinemas, date: inCinemas,
shortDateFormat, shortDateFormat,
@ -49,10 +57,16 @@ function MovieReleaseDates(props: MovieReleaseDatesProps) {
) : null} ) : null}
{digitalRelease ? ( {digitalRelease ? (
<div title={translate('DigitalRelease')}> <div
title={`${translate('DigitalRelease')}: ${formatDate(
digitalRelease,
longDateFormat
)}`}
>
<div className={styles.dateIcon}> <div className={styles.dateIcon}>
<Icon name={icons.MOVIE_FILE} /> <Icon name={icons.MOVIE_FILE} />
</div> </div>
{getRelativeDate({ {getRelativeDate({
date: digitalRelease, date: digitalRelease,
shortDateFormat, shortDateFormat,
@ -64,10 +78,16 @@ function MovieReleaseDates(props: MovieReleaseDatesProps) {
) : null} ) : null}
{physicalRelease ? ( {physicalRelease ? (
<div title={translate('PhysicalRelease')}> <div
title={`${translate('PhysicalRelease')}: ${formatDate(
physicalRelease,
longDateFormat
)}`}
>
<div className={styles.dateIcon}> <div className={styles.dateIcon}>
<Icon name={icons.DISC} /> <Icon name={icons.DISC} />
</div> </div>
{getRelativeDate({ {getRelativeDate({
date: physicalRelease, date: physicalRelease,
shortDateFormat, shortDateFormat,

View file

@ -22,6 +22,7 @@ import { Statistics } from 'Movie/Movie';
import MoviePoster from 'Movie/MoviePoster'; import MoviePoster from 'Movie/MoviePoster';
import { executeCommand } from 'Store/Actions/commandActions'; import { executeCommand } from 'Store/Actions/commandActions';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
import formatDate from 'Utilities/Date/formatDate';
import getRelativeDate from 'Utilities/Date/getRelativeDate'; import getRelativeDate from 'Utilities/Date/getRelativeDate';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import createMovieIndexItemSelector from '../createMovieIndexItemSelector'; import createMovieIndexItemSelector from '../createMovieIndexItemSelector';
@ -243,7 +244,13 @@ function MovieIndexPoster(props: MovieIndexPosterProps) {
) : null} ) : null}
{showCinemaRelease && inCinemas ? ( {showCinemaRelease && inCinemas ? (
<div className={styles.title} title={translate('InCinemas')}> <div
className={styles.title}
title={`${translate('InCinemas')}: ${formatDate(
inCinemas,
longDateFormat
)}`}
>
<Icon name={icons.IN_CINEMAS} />{' '} <Icon name={icons.IN_CINEMAS} />{' '}
{getRelativeDate({ {getRelativeDate({
date: inCinemas, date: inCinemas,
@ -256,7 +263,13 @@ function MovieIndexPoster(props: MovieIndexPosterProps) {
) : null} ) : null}
{showDigitalRelease && digitalRelease ? ( {showDigitalRelease && digitalRelease ? (
<div className={styles.title} title={translate('DigitalRelease')}> <div
className={styles.title}
title={`${translate('DigitalRelease')}: ${formatDate(
digitalRelease,
longDateFormat
)}`}
>
<Icon name={icons.MOVIE_FILE} />{' '} <Icon name={icons.MOVIE_FILE} />{' '}
{getRelativeDate({ {getRelativeDate({
date: digitalRelease, date: digitalRelease,
@ -269,7 +282,13 @@ function MovieIndexPoster(props: MovieIndexPosterProps) {
) : null} ) : null}
{showPhysicalRelease && physicalRelease ? ( {showPhysicalRelease && physicalRelease ? (
<div className={styles.title} title={translate('PhysicalRelease')}> <div
className={styles.title}
title={`${translate('PhysicalRelease')}: ${formatDate(
physicalRelease,
longDateFormat
)}`}
>
<Icon name={icons.DISC} />{' '} <Icon name={icons.DISC} />{' '}
{getRelativeDate({ {getRelativeDate({
date: physicalRelease, date: physicalRelease,
@ -282,7 +301,13 @@ function MovieIndexPoster(props: MovieIndexPosterProps) {
) : null} ) : null}
{showReleaseDate && releaseDate ? ( {showReleaseDate && releaseDate ? (
<div className={styles.title} title={translate('ReleaseDate')}> <div
className={styles.title}
title={`${translate('ReleaseDate')}: ${formatDate(
releaseDate,
longDateFormat
)}`}
>
<Icon name={icons.CALENDAR} />{' '} <Icon name={icons.CALENDAR} />{' '}
{getRelativeDate({ {getRelativeDate({
date: releaseDate, date: releaseDate,

View file

@ -9,6 +9,7 @@ import { icons } from 'Helpers/Props';
import Language from 'Language/Language'; import Language from 'Language/Language';
import { Ratings } from 'Movie/Movie'; import { Ratings } from 'Movie/Movie';
import QualityProfile from 'typings/QualityProfile'; import QualityProfile from 'typings/QualityProfile';
import formatDate from 'Utilities/Date/formatDate';
import formatDateTime from 'Utilities/Date/formatDateTime'; import formatDateTime from 'Utilities/Date/formatDateTime';
import getRelativeDate from 'Utilities/Date/getRelativeDate'; import getRelativeDate from 'Utilities/Date/getRelativeDate';
import formatBytes from 'Utilities/Number/formatBytes'; import formatBytes from 'Utilities/Number/formatBytes';
@ -139,7 +140,13 @@ function MovieIndexPosterInfo(props: MovieIndexPosterInfoProps) {
}); });
return ( return (
<div className={styles.info} title={translate('InCinemas')}> <div
className={styles.info}
title={`${translate('InCinemas')}: ${formatDate(
inCinemas,
longDateFormat
)}`}
>
<Icon name={icons.IN_CINEMAS} /> {inCinemasDate} <Icon name={icons.IN_CINEMAS} /> {inCinemasDate}
</div> </div>
); );
@ -155,7 +162,13 @@ function MovieIndexPosterInfo(props: MovieIndexPosterInfoProps) {
}); });
return ( return (
<div className={styles.info} title={translate('DigitalRelease')}> <div
className={styles.info}
title={`${translate('DigitalRelease')}: ${formatDate(
digitalRelease,
longDateFormat
)}`}
>
<Icon name={icons.MOVIE_FILE} /> {digitalReleaseDate} <Icon name={icons.MOVIE_FILE} /> {digitalReleaseDate}
</div> </div>
); );
@ -175,7 +188,13 @@ function MovieIndexPosterInfo(props: MovieIndexPosterInfoProps) {
}); });
return ( return (
<div className={styles.info} title={translate('PhysicalRelease')}> <div
className={styles.info}
title={`${translate('PhysicalRelease')}: ${formatDate(
physicalRelease,
longDateFormat
)}`}
>
<Icon name={icons.DISC} /> {physicalReleaseDate} <Icon name={icons.DISC} /> {physicalReleaseDate}
</div> </div>
); );
@ -183,7 +202,13 @@ function MovieIndexPosterInfo(props: MovieIndexPosterInfoProps) {
if (sortKey === 'releaseDate' && releaseDate && !showReleaseDate) { if (sortKey === 'releaseDate' && releaseDate && !showReleaseDate) {
return ( return (
<div className={styles.info} title={translate('ReleaseDate')}> <div
className={styles.info}
title={`${translate('ReleaseDate')}: ${formatDate(
releaseDate,
longDateFormat
)}`}
>
<Icon name={icons.CALENDAR} />{' '} <Icon name={icons.CALENDAR} />{' '}
{getRelativeDate({ {getRelativeDate({
date: releaseDate, date: releaseDate,