1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-04-18 21:35:51 -04:00
Files
Radarr/frontend/src/Movie/Details/MovieStatusLabel.js
T
2023-11-09 20:53:49 +02:00

119 lines
2.6 KiB
JavaScript

import PropTypes from 'prop-types';
import React from 'react';
import Label from 'Components/Label';
import { kinds, sizes } from 'Helpers/Props';
import getQueueStatusText from 'Utilities/Movie/getQueueStatusText';
import firstCharToUpper from 'Utilities/String/firstCharToUpper';
import translate from 'Utilities/String/translate';
import styles from './MovieStatusLabel.css';
function getMovieStatus(hasFile, isMonitored, isAvailable, queueItem = false) {
if (queueItem) {
const queueStatus = queueItem.status;
const queueState = queueItem.trackedDownloadStatus;
const queueStatusText = getQueueStatusText(queueStatus, queueState);
if (queueStatusText) {
return queueStatusText;
}
}
if (hasFile && !isMonitored) {
return 'availNotMonitored';
}
if (hasFile) {
return 'ended';
}
if (isAvailable && !isMonitored && !hasFile) {
return 'missingUnmonitored';
}
if (isAvailable && !hasFile) {
return 'missingMonitored';
}
return 'continuing';
}
function MovieStatusLabel(props) {
const {
hasMovieFiles,
monitored,
isAvailable,
queueItem,
useLabel,
colorImpairedMode
} = props;
let status = getMovieStatus(hasMovieFiles, monitored, isAvailable, queueItem);
let statusClass = status;
if (status === 'availNotMonitored' || status === 'ended') {
status = 'downloaded';
}
if (status === 'missingMonitored' || status === 'missingUnmonitored') {
status = 'missing';
}
if (status === 'continuing') {
status = 'notAvailable';
}
if (queueItem) {
statusClass = 'queue';
}
if (useLabel) {
let kind = kinds.SUCCESS;
switch (statusClass) {
case 'queue':
kind = kinds.QUEUE;
break;
case 'missingMonitored':
kind = kinds.DANGER;
break;
case 'continuing':
kind = kinds.INFO;
break;
case 'availNotMonitored':
kind = kinds.DEFAULT;
break;
case 'missingUnmonitored':
kind = kinds.WARNING;
break;
default:
}
return (
<Label
kind={kind}
size={sizes.LARGE}
colorImpairedMode={colorImpairedMode}
>
{translate(firstCharToUpper(status))}
</Label>
);
}
return (
<span
className={styles[statusClass]}
>
{translate(firstCharToUpper(status))}
</span>
);
}
MovieStatusLabel.propTypes = {
hasMovieFiles: PropTypes.bool.isRequired,
monitored: PropTypes.bool.isRequired,
isAvailable: PropTypes.bool.isRequired,
queueItem: PropTypes.object,
useLabel: PropTypes.bool,
colorImpairedMode: PropTypes.bool
};
export default MovieStatusLabel;