New: Display stats for delete multiple series modal
This commit is contained in:
parent
6c39855ebe
commit
d2509798e9
|
@ -14,4 +14,9 @@
|
||||||
.deleteFilesMessage {
|
.deleteFilesMessage {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
color: var(--dangerColor);
|
color: var(--dangerColor);
|
||||||
|
|
||||||
|
.deleteCount {
|
||||||
|
margin-top: 20px;
|
||||||
|
color: var(--warningColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// This file is automatically generated.
|
// This file is automatically generated.
|
||||||
// Please do not change this file!
|
// Please do not change this file!
|
||||||
interface CssExports {
|
interface CssExports {
|
||||||
|
'deleteCount': string;
|
||||||
'deleteFilesMessage': string;
|
'deleteFilesMessage': string;
|
||||||
'folderPath': string;
|
'folderPath': string;
|
||||||
'pathContainer': string;
|
'pathContainer': string;
|
||||||
|
|
|
@ -50,15 +50,15 @@ class DeleteSeriesModalContent extends Component {
|
||||||
const {
|
const {
|
||||||
title,
|
title,
|
||||||
path,
|
path,
|
||||||
statistics,
|
statistics = {},
|
||||||
deleteOptions,
|
deleteOptions,
|
||||||
onModalClose,
|
onModalClose,
|
||||||
onDeleteOptionChange
|
onDeleteOptionChange
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
episodeFileCount,
|
episodeFileCount = 0,
|
||||||
sizeOnDisk
|
sizeOnDisk = 0
|
||||||
} = statistics;
|
} = statistics;
|
||||||
|
|
||||||
const deleteFiles = this.state.deleteFiles;
|
const deleteFiles = this.state.deleteFiles;
|
||||||
|
@ -108,16 +108,20 @@ class DeleteSeriesModalContent extends Component {
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
||||||
{
|
{
|
||||||
deleteFiles &&
|
deleteFiles ?
|
||||||
<div className={styles.deleteFilesMessage}>
|
<div className={styles.deleteFilesMessage}>
|
||||||
<div><InlineMarkdown data={translate('DeleteSeriesFolderConfirmation', { path })} blockClassName={styles.folderPath} /></div>
|
<div><InlineMarkdown data={translate('DeleteSeriesFolderConfirmation', { path })} blockClassName={styles.folderPath} /></div>
|
||||||
{
|
|
||||||
!!episodeFileCount &&
|
|
||||||
<div>{translate('DeleteSeriesFolderEpisodeCount', { episodeFileCount, size: formatBytes(sizeOnDisk) })}</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
{
|
||||||
|
episodeFileCount ?
|
||||||
|
<div className={styles.deleteCount}>
|
||||||
|
{translate('DeleteSeriesFolderEpisodeCount', { episodeFileCount, size: formatBytes(sizeOnDisk) })}
|
||||||
|
</div> :
|
||||||
|
null
|
||||||
|
}
|
||||||
|
</div> :
|
||||||
|
null
|
||||||
|
}
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
|
|
|
@ -10,4 +10,15 @@
|
||||||
.path {
|
.path {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
color: var(--dangerColor);
|
color: var(--dangerColor);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statistics {
|
||||||
|
margin-left: 5px;
|
||||||
|
color: var(--warningColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.deleteFilesMessage {
|
||||||
|
margin-top: 20px;
|
||||||
|
color: var(--warningColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
// This file is automatically generated.
|
// This file is automatically generated.
|
||||||
// Please do not change this file!
|
// Please do not change this file!
|
||||||
interface CssExports {
|
interface CssExports {
|
||||||
|
'deleteFilesMessage': string;
|
||||||
'message': string;
|
'message': string;
|
||||||
'path': string;
|
'path': string;
|
||||||
'pathContainer': string;
|
'pathContainer': string;
|
||||||
|
'statistics': string;
|
||||||
}
|
}
|
||||||
export const cssExports: CssExports;
|
export const cssExports: CssExports;
|
||||||
export default cssExports;
|
export default cssExports;
|
||||||
|
|
|
@ -16,6 +16,7 @@ import Series from 'Series/Series';
|
||||||
import { bulkDeleteSeries, setDeleteOption } from 'Store/Actions/seriesActions';
|
import { bulkDeleteSeries, setDeleteOption } from 'Store/Actions/seriesActions';
|
||||||
import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector';
|
import createAllSeriesSelector from 'Store/Selectors/createAllSeriesSelector';
|
||||||
import { CheckInputChanged } from 'typings/inputs';
|
import { CheckInputChanged } from 'typings/inputs';
|
||||||
|
import formatBytes from 'Utilities/Number/formatBytes';
|
||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './DeleteSeriesModalContent.css';
|
import styles from './DeleteSeriesModalContent.css';
|
||||||
|
|
||||||
|
@ -85,6 +86,24 @@ function DeleteSeriesModalContent(props: DeleteSeriesModalContentProps) {
|
||||||
onModalClose,
|
onModalClose,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const { totalEpisodeFileCount, totalSizeOnDisk } = useMemo(() => {
|
||||||
|
return series.reduce(
|
||||||
|
(acc, s) => {
|
||||||
|
const { statistics = { episodeFileCount: 0, sizeOnDisk: 0 } } = s;
|
||||||
|
const { episodeFileCount = 0, sizeOnDisk = 0 } = statistics;
|
||||||
|
|
||||||
|
acc.totalEpisodeFileCount += episodeFileCount;
|
||||||
|
acc.totalSizeOnDisk += sizeOnDisk;
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
totalEpisodeFileCount: 0,
|
||||||
|
totalSizeOnDisk: 0,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, [series]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ModalContent onModalClose={onModalClose}>
|
<ModalContent onModalClose={onModalClose}>
|
||||||
<ModalHeader>{translate('DeleteSelectedSeries')}</ModalHeader>
|
<ModalHeader>{translate('DeleteSelectedSeries')}</ModalHeader>
|
||||||
|
@ -137,19 +156,43 @@ function DeleteSeriesModalContent(props: DeleteSeriesModalContentProps) {
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{series.map((s) => {
|
{series.map((s) => {
|
||||||
|
const { episodeFileCount = 0, sizeOnDisk = 0 } = s.statistics;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li key={s.title}>
|
<li key={s.title}>
|
||||||
<span>{s.title}</span>
|
<span>{s.title}</span>
|
||||||
|
|
||||||
{deleteFiles && (
|
{deleteFiles && (
|
||||||
|
<span>
|
||||||
<span className={styles.pathContainer}>
|
<span className={styles.pathContainer}>
|
||||||
-<span className={styles.path}>{s.path}</span>
|
-<span className={styles.path}>{s.path}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
{!!episodeFileCount && (
|
||||||
|
<span className={styles.statistics}>
|
||||||
|
(
|
||||||
|
{translate('DeleteSeriesFolderEpisodeCount', {
|
||||||
|
episodeFileCount,
|
||||||
|
size: formatBytes(sizeOnDisk),
|
||||||
|
})}
|
||||||
|
)
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
)}
|
)}
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
{deleteFiles && !!totalEpisodeFileCount ? (
|
||||||
|
<div className={styles.deleteFilesMessage}>
|
||||||
|
{translate('DeleteSeriesFolderEpisodeCount', {
|
||||||
|
episodeFileCount: totalEpisodeFileCount,
|
||||||
|
size: formatBytes(totalSizeOnDisk),
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
|
|
Loading…
Reference in New Issue