diff --git a/frontend/src/Components/Form/IndexersSelectInputConnector.js b/frontend/src/Components/Form/IndexersSelectInputConnector.js
index 032b303de..3dbc429d2 100644
--- a/frontend/src/Components/Form/IndexersSelectInputConnector.js
+++ b/frontend/src/Components/Form/IndexersSelectInputConnector.js
@@ -46,7 +46,7 @@ class IndexersSelectInputConnector extends Component {
IndexersSelectInputConnector.propTypes = {
name: PropTypes.string.isRequired,
- indexerIds: PropTypes.number.isRequired,
+ indexerIds: PropTypes.number,
value: PropTypes.arrayOf(PropTypes.number).isRequired,
values: PropTypes.arrayOf(PropTypes.object).isRequired,
onChange: PropTypes.func.isRequired
diff --git a/frontend/src/Components/Page/Header/PageHeader.css b/frontend/src/Components/Page/Header/PageHeader.css
index 8cd5728a6..ab45b66df 100644
--- a/frontend/src/Components/Page/Header/PageHeader.css
+++ b/frontend/src/Components/Page/Header/PageHeader.css
@@ -51,6 +51,12 @@
flex-grow: 1;
}
+.actionMenu {
+ &:hover {
+ color: #515253;
+ }
+}
+
.translate {
composes: link from '~Components/Link/Link.css';
@@ -63,7 +69,7 @@
line-height: 60px;
&:hover {
- color: $toobarButtonHoverColor;
+ color: #515253;
}
}
diff --git a/frontend/src/Indexer/Editor/MovieEditorFooter.js b/frontend/src/Indexer/Editor/MovieEditorFooter.js
index 65707706f..690242be6 100644
--- a/frontend/src/Indexer/Editor/MovieEditorFooter.js
+++ b/frontend/src/Indexer/Editor/MovieEditorFooter.js
@@ -158,8 +158,7 @@ MovieEditorFooter.propTypes = {
saveError: PropTypes.object,
isDeleting: PropTypes.bool.isRequired,
deleteError: PropTypes.object,
- onSaveSelected: PropTypes.func.isRequired,
- onOrganizeMoviePress: PropTypes.func.isRequired
+ onSaveSelected: PropTypes.func.isRequired
};
export default MovieEditorFooter;
diff --git a/frontend/src/Indexer/History/MovieHistoryRow.css b/frontend/src/Indexer/History/MovieHistoryRow.css
deleted file mode 100644
index 101e23783..000000000
--- a/frontend/src/Indexer/History/MovieHistoryRow.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.actions {
- composes: cell from '~Components/Table/Cells/TableRowCell.css';
-
- min-width: 70px;
-}
-
-.sourceTitle {
- composes: cell from '~Components/Table/Cells/TableRowCell.css';
-
- word-break: break-word;
-}
diff --git a/frontend/src/Indexer/History/MovieHistoryRow.js b/frontend/src/Indexer/History/MovieHistoryRow.js
deleted file mode 100644
index 453c27f13..000000000
--- a/frontend/src/Indexer/History/MovieHistoryRow.js
+++ /dev/null
@@ -1,162 +0,0 @@
-import HistoryDetailsModal from 'Activity/History/Details/HistoryDetailsModal';
-import HistoryEventTypeCell from 'Activity/History/HistoryEventTypeCell';
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import IconButton from 'Components/Link/IconButton';
-import ConfirmModal from 'Components/Modal/ConfirmModal';
-import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
-import TableRowCell from 'Components/Table/Cells/TableRowCell';
-import TableRow from 'Components/Table/TableRow';
-import { icons, kinds } from 'Helpers/Props';
-import MovieLanguage from 'Indexer/MovieLanguage';
-import MovieQuality from 'Indexer/MovieQuality';
-import translate from 'Utilities/String/translate';
-import styles from './MovieHistoryRow.css';
-
-class MovieHistoryRow extends Component {
-
- //
- // Lifecycle
-
- constructor(props, context) {
- super(props, context);
-
- this.state = {
- isMarkAsFailedModalOpen: false,
- isDetailsModalOpen: false
- };
- }
-
- //
- // Listeners
-
- onMarkAsFailedPress = () => {
- this.setState({ isMarkAsFailedModalOpen: true });
- }
-
- onConfirmMarkAsFailed = () => {
- this.props.onMarkAsFailedPress(this.props.id);
- this.setState({ isMarkAsFailedModalOpen: false });
- }
-
- onMarkAsFailedModalClose = () => {
- this.setState({ isMarkAsFailedModalOpen: false });
- }
-
- onDetailsPress = () => {
- this.setState({ isDetailsModalOpen: true });
- }
-
- onDetailsModalClose = () => {
- this.setState({ isDetailsModalOpen: false });
- }
-
- //
- // Render
-
- render() {
- const {
- eventType,
- sourceTitle,
- quality,
- languages,
- qualityCutoffNotMet,
- date,
- data,
- isMarkingAsFailed,
- shortDateFormat,
- timeFormat,
- onMarkAsFailedPress
- } = this.props;
-
- const {
- isMarkAsFailedModalOpen
- } = this.state;
-
- return (
-
-
-
-
- {sourceTitle}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- eventType === 'grabbed' &&
-
- }
-
-
-
-
-
-
- );
- }
-}
-
-MovieHistoryRow.propTypes = {
- id: PropTypes.number.isRequired,
- eventType: PropTypes.string.isRequired,
- sourceTitle: PropTypes.string.isRequired,
- languages: PropTypes.arrayOf(PropTypes.object).isRequired,
- quality: PropTypes.object.isRequired,
- qualityCutoffNotMet: PropTypes.bool.isRequired,
- date: PropTypes.string.isRequired,
- data: PropTypes.object.isRequired,
- isMarkingAsFailed: PropTypes.bool,
- movie: PropTypes.object.isRequired,
- shortDateFormat: PropTypes.string.isRequired,
- timeFormat: PropTypes.string.isRequired,
- onMarkAsFailedPress: PropTypes.func.isRequired
-};
-
-export default MovieHistoryRow;
diff --git a/frontend/src/Indexer/History/MovieHistoryRowConnector.js b/frontend/src/Indexer/History/MovieHistoryRowConnector.js
deleted file mode 100644
index 6d34226e8..000000000
--- a/frontend/src/Indexer/History/MovieHistoryRowConnector.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { connect } from 'react-redux';
-import { createSelector } from 'reselect';
-import { fetchHistory, markAsFailed } from 'Store/Actions/historyActions';
-import createIndexerSelector from 'Store/Selectors/createIndexerSelector';
-import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
-import MovieHistoryRow from './MovieHistoryRow';
-
-function createMapStateToProps() {
- return createSelector(
- createIndexerSelector(),
- createUISettingsSelector(),
- (movie, uiSettings) => {
- return {
- movie,
- shortDateFormat: uiSettings.shortDateFormat,
- timeFormat: uiSettings.timeFormat
- };
- }
- );
-}
-
-const mapDispatchToProps = {
- fetchHistory,
- markAsFailed
-};
-
-export default connect(createMapStateToProps, mapDispatchToProps)(MovieHistoryRow);
diff --git a/frontend/src/Indexer/History/MovieHistoryTable.js b/frontend/src/Indexer/History/MovieHistoryTable.js
deleted file mode 100644
index f5cfd2404..000000000
--- a/frontend/src/Indexer/History/MovieHistoryTable.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import MovieHistoryTableContentConnector from './MovieHistoryTableContentConnector';
-
-function MovieHistoryTable(props) {
- const {
- ...otherProps
- } = props;
-
- return (
-
- );
-}
-
-MovieHistoryTable.propTypes = {
-};
-
-export default MovieHistoryTable;
diff --git a/frontend/src/Indexer/History/MovieHistoryTableContent.css b/frontend/src/Indexer/History/MovieHistoryTableContent.css
deleted file mode 100644
index 34be6dff1..000000000
--- a/frontend/src/Indexer/History/MovieHistoryTableContent.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.blankpad {
- padding-top: 10px;
- padding-bottom: 10px;
- padding-left: 2em;
-}
diff --git a/frontend/src/Indexer/History/MovieHistoryTableContent.js b/frontend/src/Indexer/History/MovieHistoryTableContent.js
deleted file mode 100644
index b43ae68a9..000000000
--- a/frontend/src/Indexer/History/MovieHistoryTableContent.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import IconButton from 'Components/Link/IconButton';
-import LoadingIndicator from 'Components/Loading/LoadingIndicator';
-import Table from 'Components/Table/Table';
-import TableBody from 'Components/Table/TableBody';
-import { icons } from 'Helpers/Props';
-import translate from 'Utilities/String/translate';
-import MovieHistoryRowConnector from './MovieHistoryRowConnector';
-import styles from './MovieHistoryTableContent.css';
-
-const columns = [
- {
- name: 'eventType',
- isVisible: true
- },
- {
- name: 'sourceTitle',
- label: translate('SourceTitle'),
- isVisible: true
- },
- {
- name: 'languages',
- label: translate('Languages'),
- isVisible: true
- },
- {
- name: 'quality',
- label: translate('Quality'),
- isVisible: true
- },
- {
- name: 'customFormats',
- label: translate('CustomFormats'),
- isSortable: false,
- isVisible: true
- },
- {
- name: 'date',
- label: translate('Date'),
- isVisible: true
- },
- {
- name: 'actions',
- label: React.createElement(IconButton, { name: icons.ADVANCED_SETTINGS }),
- isVisible: true
- }
-];
-
-class MovieHistoryTableContent extends Component {
-
- //
- // Render
-
- render() {
- const {
- isFetching,
- isPopulated,
- error,
- items,
- onMarkAsFailedPress
- } = this.props;
-
- const hasItems = !!items.length;
-
- return (
-
- {
- isFetching &&
-
- }
-
- {
- !isFetching && !!error &&
-
Unable to load history
- }
-
- {
- isPopulated && !hasItems && !error &&
-
No history
- }
-
- {
- isPopulated && hasItems && !error &&
-
-
- {
- items.map((item) => {
- return (
-
- );
- })
- }
-
-
- }
-
- );
- }
-}
-
-MovieHistoryTableContent.propTypes = {
- isFetching: PropTypes.bool.isRequired,
- isPopulated: PropTypes.bool.isRequired,
- error: PropTypes.object,
- items: PropTypes.arrayOf(PropTypes.object).isRequired,
- onMarkAsFailedPress: PropTypes.func.isRequired
-};
-
-export default MovieHistoryTableContent;
diff --git a/frontend/src/Indexer/History/MovieHistoryTableContentConnector.js b/frontend/src/Indexer/History/MovieHistoryTableContentConnector.js
deleted file mode 100644
index a59626693..000000000
--- a/frontend/src/Indexer/History/MovieHistoryTableContentConnector.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import { connect } from 'react-redux';
-import { createSelector } from 'reselect';
-import { movieHistoryMarkAsFailed } from 'Store/Actions/movieHistoryActions';
-import MovieHistoryTableContent from './MovieHistoryTableContent';
-
-function createMapStateToProps() {
- return createSelector(
- (state) => state.movieHistory,
- (movieHistory) => {
- return movieHistory;
- }
- );
-}
-
-const mapDispatchToProps = {
- movieHistoryMarkAsFailed
-};
-
-class MovieHistoryTableContentConnector extends Component {
-
- //
- // Listeners
-
- onMarkAsFailedPress = (historyId) => {
- const {
- movieId
- } = this.props;
-
- this.props.movieHistoryMarkAsFailed({
- historyId,
- movieId
- });
- }
-
- //
- // Render
-
- render() {
- return (
-
- );
- }
-}
-
-MovieHistoryTableContentConnector.propTypes = {
- movieId: PropTypes.number.isRequired,
- movieHistoryMarkAsFailed: PropTypes.func.isRequired
-};
-
-export default connect(createMapStateToProps, mapDispatchToProps)(MovieHistoryTableContentConnector);
diff --git a/frontend/src/Indexer/Index/IndexerIndexConnector.js b/frontend/src/Indexer/Index/IndexerIndexConnector.js
index 217643fb9..fd876a8e5 100644
--- a/frontend/src/Indexer/Index/IndexerIndexConnector.js
+++ b/frontend/src/Indexer/Index/IndexerIndexConnector.js
@@ -15,11 +15,11 @@ function createMapStateToProps() {
createIndexerClientSideCollectionItemsSelector('indexerIndex'),
createDimensionsSelector(),
(
- movies,
+ indexers,
dimensionsState
) => {
return {
- ...movies,
+ ...indexers,
isSmallScreen: dimensionsState.isSmallScreen
};
}
diff --git a/frontend/src/Search/Menus/SearchIndexSortMenu.js b/frontend/src/Search/Menus/SearchIndexSortMenu.js
index 3e4ae0574..6b3623f68 100644
--- a/frontend/src/Search/Menus/SearchIndexSortMenu.js
+++ b/frontend/src/Search/Menus/SearchIndexSortMenu.js
@@ -30,7 +30,7 @@ function SearchIndexSortMenu(props) {
+
+
+
+
+ {label}
+
+ {
+ isSaving &&
+
+ }
+
+ );
+}
+
+SearchFooterLabel.propTypes = {
+ className: PropTypes.string.isRequired,
+ label: PropTypes.string.isRequired,
+ isSaving: PropTypes.bool.isRequired
+};
+
+SearchFooterLabel.defaultProps = {
+ className: styles.label
+};
+
+export default SearchFooterLabel;
diff --git a/frontend/src/Search/SearchIndex.js b/frontend/src/Search/SearchIndex.js
index a4a4c5ef4..27723906f 100644
--- a/frontend/src/Search/SearchIndex.js
+++ b/frontend/src/Search/SearchIndex.js
@@ -11,6 +11,7 @@ import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import { align, icons, sortDirections } from 'Helpers/Props';
+import NoIndexer from 'Indexer/NoIndexer';
import * as keyCodes from 'Utilities/Constants/keyCodes';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';
@@ -83,7 +84,7 @@ class SearchIndex extends Component {
} = this.props;
// Reset if not sorting by sortTitle
- if (sortKey !== 'sortTitle') {
+ if (sortKey !== 'title') {
this.setState({ jumpBarItems: { order: [] } });
return;
}
@@ -161,6 +162,7 @@ class SearchIndex extends Component {
onScroll,
onSortSelect,
onFilterSelect,
+ hasIndexers,
...otherProps
} = this.props;
@@ -174,8 +176,6 @@ class SearchIndex extends Component {
const isLoaded = !!(!error && isPopulated && items.length && scroller);
const hasNoIndexer = !totalItems;
- console.log(hasNoIndexer);
-
return (
@@ -247,7 +247,12 @@ class SearchIndex extends Component {
}
{
- !error && !isFetching && !items.length &&
+ !error && !isFetching && !hasIndexers &&
+
+ }
+
+ {
+ !error && !isFetching && hasIndexers && !items.length &&
}
@@ -286,7 +291,8 @@ SearchIndex.propTypes = {
onSortSelect: PropTypes.func.isRequired,
onFilterSelect: PropTypes.func.isRequired,
onSearchPress: PropTypes.func.isRequired,
- onScroll: PropTypes.func.isRequired
+ onScroll: PropTypes.func.isRequired,
+ hasIndexers: PropTypes.func.isRequired
};
export default SearchIndex;
diff --git a/frontend/src/Search/SearchIndexConnector.js b/frontend/src/Search/SearchIndexConnector.js
index da8e98559..26f59a022 100644
--- a/frontend/src/Search/SearchIndexConnector.js
+++ b/frontend/src/Search/SearchIndexConnector.js
@@ -6,19 +6,23 @@ import withScrollPosition from 'Components/withScrollPosition';
import { fetchReleases, setReleasesFilter, setReleasesSort, setReleasesTableOption } from 'Store/Actions/releaseActions';
import scrollPositions from 'Store/scrollPositions';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
+import createIndexerClientSideCollectionItemsSelector from 'Store/Selectors/createIndexerClientSideCollectionItemsSelector';
import createReleaseClientSideCollectionItemsSelector from 'Store/Selectors/createReleaseClientSideCollectionItemsSelector';
import SearchIndex from './SearchIndex';
function createMapStateToProps() {
return createSelector(
+ createIndexerClientSideCollectionItemsSelector('indexerIndex'),
createReleaseClientSideCollectionItemsSelector('releases'),
createDimensionsSelector(),
(
- movies,
+ indexers,
+ releases,
dimensionsState
) => {
return {
- ...movies,
+ ...releases,
+ hasIndexers: indexers.items.length > 0,
isSmallScreen: dimensionsState.isSmallScreen
};
}
diff --git a/frontend/src/Search/Table/SearchIndexHeader.css b/frontend/src/Search/Table/SearchIndexHeader.css
index 7322d6ebe..c7be5e061 100644
--- a/frontend/src/Search/Table/SearchIndexHeader.css
+++ b/frontend/src/Search/Table/SearchIndexHeader.css
@@ -1,4 +1,4 @@
-.status {
+.protocol {
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
flex: 0 0 60px;
diff --git a/frontend/src/Search/Table/SearchIndexRow.css b/frontend/src/Search/Table/SearchIndexRow.css
index 68c921b1d..2ca871cd5 100644
--- a/frontend/src/Search/Table/SearchIndexRow.css
+++ b/frontend/src/Search/Table/SearchIndexRow.css
@@ -5,7 +5,7 @@
align-items: center;
}
-.status {
+.protocol {
composes: cell;
flex: 0 0 60px;
diff --git a/frontend/src/Search/Table/SearchIndexTableConnector.js b/frontend/src/Search/Table/SearchIndexTableConnector.js
index 355523904..d79ea3630 100644
--- a/frontend/src/Search/Table/SearchIndexTableConnector.js
+++ b/frontend/src/Search/Table/SearchIndexTableConnector.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
-import { setMovieSort } from 'Store/Actions/indexerIndexActions';
+import { setReleasesSort } from 'Store/Actions/releaseActions';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
import SearchIndexTable from './SearchIndexTable';
@@ -23,7 +23,7 @@ function createMapStateToProps() {
function createMapDispatchToProps(dispatch, props) {
return {
onSortPress(sortKey) {
- dispatch(setMovieSort({ sortKey }));
+ dispatch(setReleasesSort({ sortKey }));
}
};
}
diff --git a/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js b/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js
index 6d8e9fadc..d0b02e45b 100644
--- a/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js
+++ b/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js
@@ -27,6 +27,7 @@ class AddIndexerItem extends Component {
render() {
const {
+ name,
implementation,
implementationName,
infoLink,
@@ -47,7 +48,7 @@ class AddIndexerItem extends Component {
- {implementationName}
+ {name}
@@ -101,6 +102,7 @@ class AddIndexerItem extends Component {
}
AddIndexerItem.propTypes = {
+ name: PropTypes.string.isRequired,
implementation: PropTypes.string.isRequired,
implementationName: PropTypes.string.isRequired,
infoLink: PropTypes.string.isRequired,
diff --git a/frontend/src/Settings/UI/UISettings.js b/frontend/src/Settings/UI/UISettings.js
index 5f0e2c570..1b9be3964 100644
--- a/frontend/src/Settings/UI/UISettings.js
+++ b/frontend/src/Settings/UI/UISettings.js
@@ -88,33 +88,6 @@ class UISettings extends Component {
id="uiSettings"
{...otherProps}
>
-
-