mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-25 22:36:59 -04:00
d8c89f5bbd
Ability to cancel an import lookup/search at any point. Ability to move artist path from Artist Edit or bulk move from Mass Editor. Trigger manual import for Artist path from Artist Detail page. Pulled from Sonarr
173 lines
4.5 KiB
JavaScript
173 lines
4.5 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import React, { Component } from 'react';
|
|
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
|
|
import Icon from 'Components/Icon';
|
|
import IconButton from 'Components/Link/IconButton';
|
|
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
|
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
|
|
import TableRow from 'Components/Table/TableRow';
|
|
import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
|
import Popover from 'Components/Tooltip/Popover';
|
|
import EpisodeLanguage from 'Album/EpisodeLanguage';
|
|
import EpisodeQuality from 'Album/EpisodeQuality';
|
|
import HistoryDetailsConnector from 'Activity/History/Details/HistoryDetailsConnector';
|
|
import HistoryEventTypeCell from 'Activity/History/HistoryEventTypeCell';
|
|
import styles from './ArtistHistoryRow.css';
|
|
|
|
function getTitle(eventType) {
|
|
switch (eventType) {
|
|
case 'grabbed': return 'Grabbed';
|
|
case 'artistFolderImported': return 'Artist Folder Imported';
|
|
case 'downloadFolderImported': return 'Download Folder Imported';
|
|
case 'downloadFailed': return 'Download Failed';
|
|
case 'trackFileDeleted': return 'Track File Deleted';
|
|
case 'trackFileRenamed': return 'Track File Renamed';
|
|
default: return 'Unknown';
|
|
}
|
|
}
|
|
|
|
class ArtistHistoryRow extends Component {
|
|
|
|
//
|
|
// Lifecycle
|
|
|
|
constructor(props, context) {
|
|
super(props, context);
|
|
|
|
this.state = {
|
|
isMarkAsFailedModalOpen: false
|
|
};
|
|
}
|
|
|
|
//
|
|
// Listeners
|
|
|
|
onMarkAsFailedPress = () => {
|
|
this.setState({ isMarkAsFailedModalOpen: true });
|
|
}
|
|
|
|
onConfirmMarkAsFailed = () => {
|
|
this.props.onMarkAsFailedPress(this.props.id);
|
|
this.setState({ isMarkAsFailedModalOpen: false });
|
|
}
|
|
|
|
onMarkAsFailedModalClose = () => {
|
|
this.setState({ isMarkAsFailedModalOpen: false });
|
|
}
|
|
|
|
//
|
|
// Render
|
|
|
|
render() {
|
|
const {
|
|
eventType,
|
|
sourceTitle,
|
|
language,
|
|
languageCutoffNotMet,
|
|
quality,
|
|
qualityCutoffNotMet,
|
|
date,
|
|
data,
|
|
fullArtist,
|
|
artist,
|
|
album
|
|
} = this.props;
|
|
|
|
const {
|
|
isMarkAsFailedModalOpen
|
|
} = this.state;
|
|
|
|
return (
|
|
<TableRow>
|
|
<HistoryEventTypeCell
|
|
eventType={eventType}
|
|
data={data}
|
|
/>
|
|
|
|
<TableRowCell key={name}>
|
|
{album.title}
|
|
</TableRowCell>
|
|
|
|
<TableRowCell>
|
|
{sourceTitle}
|
|
</TableRowCell>
|
|
|
|
<TableRowCell>
|
|
<EpisodeLanguage
|
|
language={language}
|
|
isCutoffNotMet={languageCutoffNotMet}
|
|
/>
|
|
</TableRowCell>
|
|
|
|
<TableRowCell>
|
|
<EpisodeQuality
|
|
quality={quality}
|
|
isCutoffNotMet={qualityCutoffNotMet}
|
|
/>
|
|
</TableRowCell>
|
|
|
|
<RelativeDateCellConnector
|
|
date={date}
|
|
/>
|
|
|
|
<TableRowCell className={styles.details}>
|
|
<Popover
|
|
anchor={
|
|
<Icon
|
|
name={icons.INFO}
|
|
/>
|
|
}
|
|
title={getTitle(eventType)}
|
|
body={
|
|
<HistoryDetailsConnector
|
|
eventType={eventType}
|
|
sourceTitle={sourceTitle}
|
|
data={data}
|
|
/>
|
|
}
|
|
position={tooltipPositions.LEFT}
|
|
/>
|
|
</TableRowCell>
|
|
|
|
<TableRowCell className={styles.actions}>
|
|
{
|
|
eventType === 'grabbed' &&
|
|
<IconButton
|
|
name={icons.REMOVE}
|
|
onPress={this.onMarkAsFailedPress}
|
|
/>
|
|
}
|
|
</TableRowCell>
|
|
|
|
<ConfirmModal
|
|
isOpen={isMarkAsFailedModalOpen}
|
|
kind={kinds.DANGER}
|
|
title="Mark as Failed"
|
|
message={`Are you sure you want to mark '${sourceTitle}' as failed?`}
|
|
confirmLabel="Mark as Failed"
|
|
onConfirm={this.onConfirmMarkAsFailed}
|
|
onCancel={this.onMarkAsFailedModalClose}
|
|
/>
|
|
</TableRow>
|
|
);
|
|
}
|
|
}
|
|
|
|
ArtistHistoryRow.propTypes = {
|
|
id: PropTypes.number.isRequired,
|
|
eventType: PropTypes.string.isRequired,
|
|
sourceTitle: PropTypes.string.isRequired,
|
|
language: PropTypes.object.isRequired,
|
|
languageCutoffNotMet: PropTypes.bool.isRequired,
|
|
quality: PropTypes.object.isRequired,
|
|
qualityCutoffNotMet: PropTypes.bool.isRequired,
|
|
date: PropTypes.string.isRequired,
|
|
data: PropTypes.object.isRequired,
|
|
fullArtist: PropTypes.bool.isRequired,
|
|
artist: PropTypes.object.isRequired,
|
|
album: PropTypes.object.isRequired,
|
|
onMarkAsFailedPress: PropTypes.func.isRequired
|
|
};
|
|
|
|
export default ArtistHistoryRow;
|