diff --git a/.esprintrc b/.esprintrc
new file mode 100644
index 000000000..9330e00d1
--- /dev/null
+++ b/.esprintrc
@@ -0,0 +1,9 @@
+{
+ "paths": [
+ "frontend/src/**/*.js"
+ ],
+ "ignored": [
+ "**/node_modules/**/*"
+ ],
+ "port": 5004
+}
diff --git a/build-appveyor.cake b/build-appveyor.cake
index e0d4d5048..f7b49540f 100644
--- a/build-appveyor.cake
+++ b/build-appveyor.cake
@@ -1,4 +1,5 @@
#addin "Cake.Npm"
+#addin "Cake.Yarn"
#addin "SharpZipLib"
#addin "Cake.Compression"
diff --git a/build.sh b/build.sh
index a61280bde..f7ee88969 100755
--- a/build.sh
+++ b/build.sh
@@ -74,6 +74,17 @@ BuildWithXbuild()
CheckExitCode xbuild /p:Configuration=Release /p:Platform=x86 /t:Build /p:AllowedReferenceRelatedFileExtensions=.pdb $slnFile
}
+LintUI()
+{
+ ProgressStart 'ESLint'
+ CheckExitCode yarn eslint
+ ProgressEnd 'ESLint'
+
+ ProgressStart 'Stylelint'
+ CheckExitCode yarn stylelint
+ ProgressEnd 'Stylelint'
+}
+
Build()
{
echo "##teamcity[progressStart 'Build']"
@@ -98,13 +109,14 @@ Build()
RunGulp()
{
- echo "##teamcity[progressStart 'npm install']"
- npm-cache install npm || CheckExitCode npm install --no-optional --no-bin-links
- echo "##teamcity[progressFinish 'npm install']"
+ ProgressStart 'npm install'
+ yarn install
+ #npm-cache install npm || CheckExitCode npm install --no-optional --no-bin-links
+ ProgressEnd 'npm install'
- echo "##teamcity[progressStart 'Running gulp']"
+ ProgressStart 'Running gulp'
CheckExitCode npm run build -- --production
- echo "##teamcity[progressFinish 'Running gulp']"
+ ProgressEnd 'Running gulp'
}
CreateMdbs()
@@ -253,6 +265,7 @@ case "$(uname -s)" in
;;
esac
+LintUI
Build
RunGulp
PackageMono
diff --git a/frontend/.eslintrc b/frontend/.eslintrc
index 9b096f3ff..5208e3ad6 100644
--- a/frontend/.eslintrc
+++ b/frontend/.eslintrc
@@ -11,7 +11,7 @@
"globals": {
"expect": false,
"chai": false,
- "sinon": false,
+ "sinon": false
},
"parserOptions": {
@@ -20,7 +20,7 @@
"ecmaFeatures": {
"modules": true,
"impliedStrict": true
- },
+ }
},
"plugins": [
@@ -33,32 +33,32 @@
# ECMAScript 6
- arrow-body-style: [0],
- arrow-parens: ["error", "always"],
- arrow-spacing: ["error", { "before": true, "after": true }],
- constructor-super: "error",
- generator-star-spacing: "off",
- no-class-assign: "error",
- no-confusing-arrow: "error",
- no-const-assign: "error",
- no-dupe-class-members: "error",
- no-duplicate-imports: "error",
- no-new-symbol: "error",
- no-this-before-super: "error",
- no-useless-escape: "error",
- no-useless-computed-key: "error",
- no-useless-constructor: "error",
- no-var: "warn",
- object-shorthand: ["error", "properties"],
- prefer-arrow-callback: "error",
- prefer-const: "warn",
- prefer-reflect: "off",
- prefer-rest-params: "off",
- prefer-spread: "warn",
- prefer-template: "error",
- require-yield: "off",
- template-curly-spacing: ["error", "never"],
- yield-star-spacing: "off",
+ "arrow-body-style": [0],
+ "arrow-parens": ["error", "always"],
+ "arrow-spacing": ["error", { "before": true, "after": true }],
+ "constructor-super": "error",
+ "generator-star-spacing": "off",
+ "no-class-assign": "error",
+ "no-confusing-arrow": "error",
+ "no-const-assign": "error",
+ "no-dupe-class-members": "error",
+ "no-duplicate-imports": "error",
+ "no-new-symbol": "error",
+ "no-this-before-super": "error",
+ "no-useless-escape": "error",
+ "no-useless-computed-key": "error",
+ "no-useless-constructor": "error",
+ "no-var": "warn",
+ "object-shorthand": ["error", "properties"],
+ "prefer-arrow-callback": "error",
+ "prefer-const": "warn",
+ "prefer-reflect": "off",
+ "prefer-rest-params": "off",
+ "prefer-spread": "warn",
+ "prefer-template": "error",
+ "require-yield": "off",
+ "template-curly-spacing": ["error", "never"],
+ "yield-star-spacing": "off",
# Possible Errors
@@ -110,7 +110,7 @@
"no-div-regex": "error",
"no-else-return": "error",
"no-empty-function": ["error", {"allow": ["arrowFunctions"]}],
- no-empty-pattern: "error",
+ "no-empty-pattern": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
@@ -122,158 +122,159 @@
"string": true,
"allow": [/* "!!", "~", "*", "+" */]
}],
- no-implicit-globals: "error",
- no-implied-eval: "error",
- no-invalid-this: "off",
- no-iterator: "error",
- no-labels: "error",
- no-lone-blocks: "error",
- no-loop-func: "error",
- no-magic-numbers: ["off", {"ignoreArrayIndexes": true, "ignore": [0, 1] }],
- no-multi-spaces: "error",
- no-multi-str: "error",
+ "no-implicit-globals": "error",
+ "no-implied-eval": "error",
+ "no-invalid-this": "off",
+ "no-iterator": "error",
+ "no-labels": "error",
+ "no-lone-blocks": "error",
+ "no-loop-func": "error",
+ "no-magic-numbers": ["off", {"ignoreArrayIndexes": true, "ignore": [0, 1] }],
+ "no-multi-spaces": "error",
+ "no-multi-str": "error",
"no-native-reassign": ["error", {"exceptions": ["console"]}],
- no-new: "off",
- no-new-func: "error",
- no-new-wrappers: "error",
- no-octal: "error",
- no-octal-escape: "error",
- no-param-reassign: "off",
- no-process-env: "off",
- no-proto: "error",
- no-redeclare: "error",
- no-return-assign: "warn",
- no-script-url: "error",
- no-self-assign: "error",
- no-self-compare: "error",
- no-sequences: "error",
- no-throw-literal: "error",
- no-unmodified-loop-condition: "error",
- no-unused-expressions: "error",
- no-unused-labels: "error",
- no-useless-call: "error",
- no-useless-concat: "error",
- no-void: "error",
- no-warning-comments: "off",
- no-with: "error",
- radix: ["error", "as-needed"],
- vars-on-top: "off",
- wrap-iife: ["error", "inside"],
- yoda: "error",
+ "no-new": "off",
+ "no-new-func": "error",
+ "no-new-wrappers": "error",
+ "no-octal": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "off",
+ "no-process-env": "off",
+ "no-proto": "error",
+ "no-redeclare": "error",
+ "no-return-assign": "warn",
+ "no-script-url": "error",
+ "no-self-assign": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-throw-literal": "error",
+ "no-unmodified-loop-condition": "error",
+ "no-unused-expressions": "error",
+ "no-unused-labels": "error",
+ "no-useless-call": "error",
+ "no-useless-concat": "error",
+ "no-void": "error",
+ "no-warning-comments": "off",
+ "no-with": "error",
+ "radix": ["error", "as-needed"],
+ "vars-on-top": "off",
+ "wrap-iife": ["error", "inside"],
+ "yoda": "error",
# Strict Mode
- strict: ["error", "never"],
+ "strict": ["error", "never"],
# Variables
- init-declarations: ["error", "always"],
- no-catch-shadow: "error",
- no-delete-var: "error",
- no-label-var: "error",
- no-restricted-globals: "off",
- no-shadow: "error",
- no-shadow-restricted-names: "error",
- no-undef: "error",
- no-undef-init: "off",
- no-undefined: "off",
- no-unused-vars: ["error", { "args": "none" }],
- no-use-before-define: "error",
+ "init-declarations": ["error", "always"],
+ "no-catch-shadow": "error",
+ "no-delete-var": "error",
+ "no-label-var": "error",
+ "no-restricted-globals": "off",
+ "no-shadow": "error",
+ "no-shadow-restricted-names": "error",
+ "no-undef": "error",
+ "no-undef-init": "off",
+ "no-undefined": "off",
+ "no-unused-vars": ["error", { "args": "none" }],
+ "no-use-before-define": "error",
# Node.js and CommonJS
- callback-return: "warn",
- global-require: "error",
- handle-callback-err: "warn",
- no-mixed-requires: "error",
- no-new-require: "error",
- no-path-concat: "error",
- no-process-exit: "error",
+ "callback-return": "warn",
+ "global-require": "error",
+ "handle-callback-err": "warn",
+ "no-mixed-requires": "error",
+ "no-new-require": "error",
+ "no-path-concat": "error",
+ "no-process-exit": "error",
# Stylistic Issues
- array-bracket-spacing: ["error", "never"],
- block-spacing: ["error", "always"],
- brace-style: ["error", "1tbs", { "allowSingleLine": false }],
- camelcase: "off",
- comma-spacing: ["error", {"before": false, "after": true}],
- comma-style: ["error", "last"],
- computed-property-spacing: ["error", "never"],
- consistent-this: ["error", "self"],
- eol-last: "error",
- func-names: "off",
- func-style: ["error", "declaration"],
- indent: ["error", 2, {"SwitchCase": 1}],
- key-spacing: ["error", {"beforeColon": false, "afterColon": true}],
- keyword-spacing: ["error", {before: true, after: true}],
- lines-around-comment: ["error", { "beforeBlockComment": true, "afterBlockComment": false }],
- max-depth: ["error", {"maximum": 5}],
- max-nested-callbacks: ["error", 4],
- max-params: ["error", 4],
- max-statements: "off",
- max-statements-per-line: ["error", { "max": 1 }],
- new-cap: ["error", {"capIsNewExceptions": ["$.Deferred"]}],
- new-parens: "error",
- newline-after-var: "off",
- newline-before-return: "off",
- newline-per-chained-call: "off",
- no-array-constructor: "error",
- no-bitwise: "error",
- no-continue: "error",
- no-inline-comments: "off",
- no-lonely-if: "warn",
- no-mixed-spaces-and-tabs: "error",
- no-multiple-empty-lines: ["error", {max: 1}],
- no-negated-condition: "warn",
- no-nested-ternary: "error",
- no-new-object: "error",
- no-plusplus: "off",
- no-restricted-syntax: "off",
- no-spaced-func: "error",
- no-ternary: "off",
- no-trailing-spaces: "error",
- no-underscore-dangle: ["error", { "allowAfterThis": true }],
- no-unneeded-ternary: "error",
- no-whitespace-before-property: "error",
- object-curly-spacing: ["error", "always"],
- one-var: ["error", "never"],
- one-var-declaration-per-line: ["error", "always"],
- operator-assignment: ["off", "never"],
- operator-linebreak: ["error", "after"],
- quote-props: ["error", "as-needed"],
- quotes: ["error", "single"],
- require-jsdoc: "off",
- semi: "error",
- semi-spacing: ["error", { "before": false, "after": true }],
- sort-vars: "off",
- space-before-blocks: ["error", "always"],
- space-before-function-paren: ["error", "never"],
- space-in-parens: "off",
- space-infix-ops: "off",
- space-unary-ops: "off",
- spaced-comment: "error",
- wrap-regex: "error",
+ "array-bracket-spacing": ["error", "never"],
+ "block-spacing": ["error", "always"],
+ "brace-style": ["error", "1tbs", { "allowSingleLine": false }],
+ "camelcase": "off",
+ "comma-spacing": ["error", {"before": false, "after": true}],
+ "comma-style": ["error", "last"],
+ "computed-property-spacing": ["error", "never"],
+ "consistent-this": ["error", "self"],
+ "eol-last": "error",
+ "func-names": "off",
+ "func-style": ["error", "declaration"],
+ "indent": ["error", 2, {"SwitchCase": 1}],
+ "key-spacing": ["error", {"beforeColon": false, "afterColon": true}],
+ "keyword-spacing": ["error", {before: true, after: true}],
+ "lines-around-comment": ["error", { "beforeBlockComment": true, "afterBlockComment": false }],
+ "max-depth": ["error", {"maximum": 5}],
+ "max-nested-callbacks": ["error", 4],
+ "max-params": ["error", 4],
+ "max-statements": "off",
+ "max-statements-per-line": ["error", { "max": 1 }],
+ "new-cap": ["error", {"capIsNewExceptions": ["$.Deferred"]}],
+ "new-parens": "error",
+ "newline-after-var": "off",
+ "newline-before-return": "off",
+ "newline-per-chained-call": "off",
+ "no-array-constructor": "error",
+ "no-bitwise": "error",
+ "no-continue": "error",
+ "no-inline-comments": "off",
+ "no-lonely-if": "warn",
+ "no-mixed-spaces-and-tabs": "error",
+ "no-multiple-empty-lines": ["error", {max: 1}],
+ "no-negated-condition": "warn",
+ "no-nested-ternary": "error",
+ "no-new-object": "error",
+ "no-plusplus": "off",
+ "no-restricted-syntax": "off",
+ "no-spaced-func": "error",
+ "no-ternary": "off",
+ "no-trailing-spaces": "error",
+ "no-underscore-dangle": ["error", { "allowAfterThis": true }],
+ "no-unneeded-ternary": "error",
+ "no-whitespace-before-property": "error",
+ "object-curly-spacing": ["error", "always"],
+ "one-var": ["error", "never"],
+ "one-var-declaration-per-line": ["error", "always"],
+ "operator-assignment": ["off", "never"],
+ "operator-linebreak": ["error", "after"],
+ "quote-props": ["error", "as-needed"],
+ "quotes": ["error", "single"],
+ "require-jsdoc": "off",
+ "semi": "error",
+ "semi-spacing": ["error", { "before": false, "after": true }],
+ "sort-vars": "off",
+ "space-before-blocks": ["error", "always"],
+ "space-before-function-paren": ["error", "never"],
+ "space-in-parens": "off",
+ "space-infix-ops": "off",
+ "space-unary-ops": "off",
+ "spaced-comment": "error",
+ "wrap-regex": "error",
# React
"react/jsx-boolean-value": [2, "always"],
"react/jsx-uses-vars": 2,
"react/jsx-closing-bracket-location": 2,
- "react/jsx-space-before-closing": 2,
+ "react/jsx-tag-spacing": ["error"],
"react/jsx-curly-spacing": [2, "never"],
"react/jsx-equals-spacing": [2, "never"],
"react/jsx-indent-props": [2, 2],
"react/jsx-indent": [2, 2],
"react/jsx-key": 2,
- "react/jsx-no-bind": [2, { allowArrowFunctions: true }],
+ "react/jsx-no-bind": [2, { "allowArrowFunctions": true }],
"react/jsx-no-duplicate-props": [2, { "ignoreCase": true }],
"react/jsx-max-props-per-line": [2, { "maximum": 2 }],
"react/jsx-handler-names": [2, { "eventHandlerPrefix": "on", "eventHandlerPropPrefix": "on" }],
"react/jsx-no-undef": 2,
"react/jsx-pascal-case": 2,
"react/jsx-uses-react": 2,
- "react/no-did-mount-set-state": 2,
- "react/no-did-update-set-state": 2,
+ // Explicitly disabled in case we want to enable them again
+ "react/no-did-mount-set-state": 0,
+ "react/no-did-update-set-state": 0,
"react/no-direct-mutation-state": 2,
"react/no-multi-comp": [2, { "ignoreStateless": true }],
"react/no-unknown-property": 2,
diff --git a/frontend/.stylelintrc b/frontend/.stylelintrc
index 5c7c74f43..57775146a 100644
--- a/frontend/.stylelintrc
+++ b/frontend/.stylelintrc
@@ -2,6 +2,10 @@
"plugins": [
"stylelint-order"
],
+"ignoreFiles": [
+ "frontend/src/Styles/scaffolding.css",
+ "frontend/src/Content/Fonts/font-awesome.css"
+],
"rules": {
"at-rule-empty-line-before": [
"always",
diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js
index b9c229e48..f82554ba8 100644
--- a/frontend/postcss.config.js
+++ b/frontend/postcss.config.js
@@ -3,6 +3,11 @@ const reload = require('require-nocache')(module);
module.exports = (ctx, configPath, options) => {
const config = {
plugins: {
+ 'postcss-mixins': {
+ mixinsDir: [
+ 'frontend/src/Styles/Mixins'
+ ]
+ },
'postcss-simple-vars': {
variables: () =>
ctx.options.cssVarsFiles.reduce((acc, vars) => {
@@ -10,11 +15,6 @@ module.exports = (ctx, configPath, options) => {
}, {})
},
'postcss-nested': {},
- 'postcss-mixins': {
- mixinsDir: [
- 'frontend/src/Styles/Mixins'
- ]
- },
autoprefixer: {
browsers: [
'Chrome >= 30',
diff --git a/frontend/src/Activity/Blacklist/BlacklistRow.js b/frontend/src/Activity/Blacklist/BlacklistRow.js
index af7db6372..ef055798e 100644
--- a/frontend/src/Activity/Blacklist/BlacklistRow.js
+++ b/frontend/src/Activity/Blacklist/BlacklistRow.js
@@ -142,6 +142,8 @@ class BlacklistRow extends Component {
);
}
+
+ return null;
})
}
diff --git a/frontend/src/Activity/History/HistoryRow.js b/frontend/src/Activity/History/HistoryRow.js
index 2dd73be4c..85564c9b3 100644
--- a/frontend/src/Activity/History/HistoryRow.js
+++ b/frontend/src/Activity/History/HistoryRow.js
@@ -205,6 +205,8 @@ class HistoryRow extends Component {
);
}
+
+ return null;
})
}
diff --git a/frontend/src/Activity/Queue/QueueRow.js b/frontend/src/Activity/Queue/QueueRow.js
index 9ad2be6d4..6b849ecf3 100644
--- a/frontend/src/Activity/Queue/QueueRow.js
+++ b/frontend/src/Activity/Queue/QueueRow.js
@@ -268,6 +268,8 @@ class QueueRow extends Component {
);
}
+
+ return null;
})
}
diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js
index 9c1ac863d..0c411294d 100644
--- a/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js
+++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js
@@ -161,9 +161,7 @@ class AddNewArtist extends Component {
}
-
-
-
+
);
diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css b/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css
index 59e993ff8..49328fc7b 100644
--- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css
+++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css
@@ -9,7 +9,7 @@
.poster {
flex: 0 0 170px;
- margin-right: 20px;
+ margin-right: 20px;
height: 250px;
}
diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js
index 1a62fc9a7..4ea72540b 100644
--- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js
+++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js
@@ -202,7 +202,7 @@ class ImportArtistFooter extends Component {
{
- isLookingUpArtist &&
+ isLookingUpArtist &&
- }
+ }
kind={kinds.INVERSE}
position={tooltipPositions.BOTTOM}
/>
diff --git a/frontend/src/Artist/Details/ArtistTags.js b/frontend/src/Artist/Details/ArtistTags.js
index efac57d65..7ea841a36 100644
--- a/frontend/src/Artist/Details/ArtistTags.js
+++ b/frontend/src/Artist/Details/ArtistTags.js
@@ -2,7 +2,6 @@ import PropTypes from 'prop-types';
import React from 'react';
import { kinds, sizes } from 'Helpers/Props';
import Label from 'Components/Label';
-import styles from './ArtistTags.css';
function ArtistTags({ tags }) {
return (
diff --git a/frontend/src/Artist/Editor/ArtistEditorConnector.js b/frontend/src/Artist/Editor/ArtistEditorConnector.js
index 9dbad896f..e6f1cb1ec 100644
--- a/frontend/src/Artist/Editor/ArtistEditorConnector.js
+++ b/frontend/src/Artist/Editor/ArtistEditorConnector.js
@@ -78,9 +78,9 @@ ArtistEditorConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'series', uiSection: 'artistEditor' }
- )(ArtistEditorConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'series', uiSection: 'artistEditor' }
+)(ArtistEditorConnector);
diff --git a/frontend/src/Artist/Editor/Tags/TagsModalContent.js b/frontend/src/Artist/Editor/Tags/TagsModalContent.js
index 153c8a0e8..c0d00d1f3 100644
--- a/frontend/src/Artist/Editor/Tags/TagsModalContent.js
+++ b/frontend/src/Artist/Editor/Tags/TagsModalContent.js
@@ -51,8 +51,7 @@ class TagsModalContent extends Component {
const {
artistTags,
tagList,
- onModalClose,
- onApplyTagsPress
+ onModalClose
} = this.props;
const {
@@ -107,55 +106,55 @@ class TagsModalContent extends Component {
Result
- {
- artistTags.map((t) => {
+ {
+ artistTags.map((t) => {
+ const tag = _.find(tagList, { id: t });
+
+ if (!tag) {
+ return null;
+ }
+
+ const removeTag = (applyTags === 'remove' && tags.indexOf(t) > -1) ||
+ (applyTags === 'replace' && tags.indexOf(t) === -1);
+
+ return (
+
+ );
+ })
+ }
+
+ {
+ (applyTags === 'add' || applyTags === 'replace') &&
+ tags.map((t) => {
const tag = _.find(tagList, { id: t });
if (!tag) {
return null;
}
- const removeTag = (applyTags === 'remove' && tags.indexOf(t) > -1) ||
- (applyTags === 'replace' && tags.indexOf(t) === -1);
+ if (artistTags.indexOf(t) > -1) {
+ return null;
+ }
return (
);
})
- }
-
- {
- (applyTags === 'add' || applyTags === 'replace') &&
- tags.map((t) => {
- const tag = _.find(tagList, { id: t });
-
- if (!tag) {
- return null;
- }
-
- if (artistTags.indexOf(t) > -1) {
- return null;
- }
-
- return (
-
- );
- })
- }
+ }
diff --git a/frontend/src/Artist/Index/ArtistIndexConnector.js b/frontend/src/Artist/Index/ArtistIndexConnector.js
index 719609c89..70f460c33 100644
--- a/frontend/src/Artist/Index/ArtistIndexConnector.js
+++ b/frontend/src/Artist/Index/ArtistIndexConnector.js
@@ -1,4 +1,3 @@
-import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
@@ -151,6 +150,7 @@ class ArtistIndexConnector extends Component {
}
ArtistIndexConnector.propTypes = {
+ isSmallScreen: PropTypes.bool.isRequired,
view: PropTypes.string.isRequired,
scrollTop: PropTypes.number.isRequired,
fetchArtist: PropTypes.func.isRequired,
diff --git a/frontend/src/Artist/Index/ArtistIndexFooter.js b/frontend/src/Artist/Index/ArtistIndexFooter.js
index 9ffc8262a..69bc9ff3b 100644
--- a/frontend/src/Artist/Index/ArtistIndexFooter.js
+++ b/frontend/src/Artist/Index/ArtistIndexFooter.js
@@ -31,22 +31,22 @@ function ArtistIndexFooter({ series }) {
-
+
Continuing (All tracks downloaded)
-
+
Ended (All tracks downloaded)
-
+
Missing Tracks (Artist monitored)
-
+
Missing Tracks (Artist not monitored)
diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css b/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css
index 91026d17e..3f890db26 100644
--- a/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css
+++ b/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css
@@ -12,9 +12,6 @@ $hoverScale: 1.05;
box-shadow: 0 0 12px $black;
transition: all 200ms ease-in;
- // Transforming causes the content to shift slightly
- // transform: scale($hoverScale);
-
.controls {
opacity: 0.9;
transition: opacity 200ms linear 150ms;
diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js b/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js
index 908f5e4da..43a104ecc 100644
--- a/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js
+++ b/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js
@@ -72,6 +72,8 @@ function calculateRowHeight(bannerHeight, sortKey, isSmallScreen, bannerOptions)
heights.push(19);
}
break;
+ default:
+ // No need to add a height of 0
}
return heights.reduce((acc, height) => acc + height, 0);
diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js b/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js
index 83063eed8..72a5156cf 100644
--- a/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js
+++ b/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js
@@ -25,9 +25,9 @@ function createMapStateToProps() {
}
export default connectSection(
- createMapStateToProps,
- undefined,
- undefined,
- { withRef: true },
- { section: 'series', uiSection: 'artistIndex' }
- )(ArtistIndexBanners);
+ createMapStateToProps,
+ undefined,
+ undefined,
+ { withRef: true },
+ { section: 'series', uiSection: 'artistIndex' }
+)(ArtistIndexBanners);
diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css b/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css
index 9a8161ca2..c687874d4 100644
--- a/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css
+++ b/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css
@@ -12,9 +12,6 @@ $hoverScale: 1.05;
box-shadow: 0 0 12px $black;
transition: all 200ms ease-in;
- // Transforming causes the content to shift slightly
- // transform: scale($hoverScale);
-
.controls {
opacity: 0.9;
transition: opacity 200ms linear 150ms;
diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js
index 69c5db179..cf5612182 100644
--- a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js
+++ b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js
@@ -72,6 +72,8 @@ function calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions)
heights.push(19);
}
break;
+ default:
+ // No need to add a height of 0
}
return heights.reduce((acc, height) => acc + height, 0);
diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js
index 58ce328a4..d0d27994c 100644
--- a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js
+++ b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js
@@ -25,9 +25,9 @@ function createMapStateToProps() {
}
export default connectSection(
- createMapStateToProps,
- undefined,
- undefined,
- { withRef: true },
- { section: 'series', uiSection: 'artistIndex' }
- )(ArtistIndexPosters);
+ createMapStateToProps,
+ undefined,
+ undefined,
+ { withRef: true },
+ { section: 'series', uiSection: 'artistIndex' }
+)(ArtistIndexPosters);
diff --git a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js
index 0bf6af71f..45df59b9d 100644
--- a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js
+++ b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js
@@ -26,9 +26,9 @@ function createMapDispatchToProps(dispatch, props) {
}
export default connectSection(
- createMapStateToProps,
- createMapDispatchToProps,
- undefined,
- { withRef: true },
- { section: 'series', uiSection: 'artistIndex' }
- )(ArtistIndexTable);
+ createMapStateToProps,
+ createMapDispatchToProps,
+ undefined,
+ { withRef: true },
+ { section: 'series', uiSection: 'artistIndex' }
+)(ArtistIndexTable);
diff --git a/frontend/src/Calendar/Day/CalendarDay.js b/frontend/src/Calendar/Day/CalendarDay.js
index e4413a152..214c13ba5 100644
--- a/frontend/src/Calendar/Day/CalendarDay.js
+++ b/frontend/src/Calendar/Day/CalendarDay.js
@@ -20,7 +20,8 @@ function CalendarDay(props) {
+ )}
+ >
{
view === calendarViews.MONTH &&
+ )}
+ >
{
dates.map((date) => {
return (
diff --git a/frontend/src/Calendar/Day/DayOfWeek.js b/frontend/src/Calendar/Day/DayOfWeek.js
index b8ab0a43b..d97671522 100644
--- a/frontend/src/Calendar/Day/DayOfWeek.js
+++ b/frontend/src/Calendar/Day/DayOfWeek.js
@@ -36,7 +36,8 @@ class DayOfWeek extends Component {
styles.dayOfWeek,
view === calendarViews.DAY && styles.isSingleDay,
highlightToday && styles.isToday
- )}>
+ )}
+ >
{formatedDate}
);
diff --git a/frontend/src/Calendar/getStatusStyle.js b/frontend/src/Calendar/getStatusStyle.js
index 5e60b301f..f46c19fb6 100644
--- a/frontend/src/Calendar/getStatusStyle.js
+++ b/frontend/src/Calendar/getStatusStyle.js
@@ -1,3 +1,4 @@
+/* eslint max-params: 0 */
import moment from 'moment';
function getStatusStyle(episodeNumber, downloading, startTime, isMonitored) {
diff --git a/frontend/src/Components/CircularProgressBar.js b/frontend/src/Components/CircularProgressBar.js
index d340af170..95c84f59a 100644
--- a/frontend/src/Components/CircularProgressBar.js
+++ b/frontend/src/Components/CircularProgressBar.js
@@ -103,8 +103,7 @@ class CircularProgressBar extends Component {
strokeWidth,
strokeDashoffset
}}
- >
-
+ />
{
diff --git a/frontend/src/Components/Form/EnhancedSelectInput.js b/frontend/src/Components/Form/EnhancedSelectInput.js
index 76383f749..6310b4854 100644
--- a/frontend/src/Components/Form/EnhancedSelectInput.js
+++ b/frontend/src/Components/Form/EnhancedSelectInput.js
@@ -366,7 +366,7 @@ class EnhancedSelectInput extends Component {
}
- }
+ }
);
}
diff --git a/frontend/src/Components/Form/FormInputGroup.js b/frontend/src/Components/Form/FormInputGroup.js
index 94b8e8d9b..7002a10a3 100644
--- a/frontend/src/Components/Form/FormInputGroup.js
+++ b/frontend/src/Components/Form/FormInputGroup.js
@@ -1,7 +1,6 @@
import PropTypes from 'prop-types';
import React from 'react';
-import { icons, inputTypes } from 'Helpers/Props';
-import Icon from 'Components/Icon';
+import { inputTypes } from 'Helpers/Props';
import Link from 'Components/Link/Link';
import CaptchaInputConnector from './CaptchaInputConnector';
import CheckInput from './CheckInput';
@@ -85,7 +84,7 @@ function FormInputGroup(props) {
errors,
warnings,
...otherProps
- } = props;
+ } = props;
const InputComponent = getComponent(type);
const checkInput = type === inputTypes.CHECK;
diff --git a/frontend/src/Components/Form/FormInputHelpText.js b/frontend/src/Components/Form/FormInputHelpText.js
index 327bd7283..d9195568b 100644
--- a/frontend/src/Components/Form/FormInputHelpText.js
+++ b/frontend/src/Components/Form/FormInputHelpText.js
@@ -23,7 +23,8 @@ function FormInputHelpText(props) {
isError && styles.isError,
isWarning && styles.isWarning,
isCheckInput && styles.isCheckInput
- )}>
+ )}
+ >
{text}
{
diff --git a/frontend/src/Components/Form/RootFolderSelectInput.js b/frontend/src/Components/Form/RootFolderSelectInput.js
index ab42c4343..5cc27a72b 100644
--- a/frontend/src/Components/Form/RootFolderSelectInput.js
+++ b/frontend/src/Components/Form/RootFolderSelectInput.js
@@ -98,8 +98,13 @@ RootFolderSelectInput.propTypes = {
values: PropTypes.arrayOf(PropTypes.object).isRequired,
isSaving: PropTypes.bool.isRequired,
saveError: PropTypes.object,
+ includeNoChange: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired,
onNewRootFolderSelect: PropTypes.func.isRequired
};
+RootFolderSelectInput.defaultProps = {
+ includeNoChange: false
+};
+
export default RootFolderSelectInput;
diff --git a/frontend/src/Components/Form/RootFolderSelectInputOption.js b/frontend/src/Components/Form/RootFolderSelectInputOption.js
index c3d6ef16d..a4db9cd82 100644
--- a/frontend/src/Components/Form/RootFolderSelectInputOption.js
+++ b/frontend/src/Components/Form/RootFolderSelectInputOption.js
@@ -21,7 +21,8 @@ function RootFolderSelectInputOption(props) {
+ )}
+ >
{value}
{
diff --git a/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js b/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js
index ef91d979e..e25664fee 100644
--- a/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js
+++ b/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js
@@ -18,8 +18,8 @@ function RootFolderSelectInputSelectedValue(props) {
{...otherProps}
>
- {value
- }
+ {value}
+
{
freeSpace != null && includeFreeSpace &&
diff --git a/frontend/src/Components/Icon.js b/frontend/src/Components/Icon.js
index 6cb8f5d49..4fd1c4c11 100644
--- a/frontend/src/Components/Icon.js
+++ b/frontend/src/Components/Icon.js
@@ -24,8 +24,7 @@ function Icon(props) {
style={{
fontSize: `${size}px`
}}
- >
-
+ />
);
}
diff --git a/frontend/src/Components/Link/ClipboardButton.js b/frontend/src/Components/Link/ClipboardButton.js
index df78d0473..26f6a4f9f 100644
--- a/frontend/src/Components/Link/ClipboardButton.js
+++ b/frontend/src/Components/Link/ClipboardButton.js
@@ -83,7 +83,6 @@ class ClipboardButton extends Component {
...otherProps
} = this.props;
-
const {
showSuccess,
showError
diff --git a/frontend/src/Components/Link/Link.css b/frontend/src/Components/Link/Link.css
index cd760cdae..ec2b35ab6 100644
--- a/frontend/src/Components/Link/Link.css
+++ b/frontend/src/Components/Link/Link.css
@@ -10,7 +10,6 @@
cursor: pointer;
&:global(.isDisabled) {
- /*color: $disabledColor;*/
pointer-events: none;
}
}
diff --git a/frontend/src/Components/Loading/LoadingIndicator.css b/frontend/src/Components/Loading/LoadingIndicator.css
index b8288f7f9..fd224b1d6 100644
--- a/frontend/src/Components/Loading/LoadingIndicator.css
+++ b/frontend/src/Components/Loading/LoadingIndicator.css
@@ -28,24 +28,8 @@
position: absolute;
border: 2px solid #3a3f51;
border-radius: 100%;
- animation-fill-mode: both;
animation: rippleContainer 1.25s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8);
-}
-
-@-webkit-keyframes rippleContainer {
- 0% {
- opacity: 1;
- transform: scale(0.1);
- }
-
- 70% {
- opacity: 0.7;
- transform: scale(1);
- }
-
- 100% {
- opacity: 0;
- }
+ animation-fill-mode: both;
}
@keyframes rippleContainer {
diff --git a/frontend/src/Components/Menu/FilterMenu.js b/frontend/src/Components/Menu/FilterMenu.js
index 815176e13..6a76db432 100644
--- a/frontend/src/Components/Menu/FilterMenu.js
+++ b/frontend/src/Components/Menu/FilterMenu.js
@@ -1,35 +1,29 @@
import PropTypes from 'prop-types';
-import React, { Component } from 'react';
+import React from 'react';
import { icons } from 'Helpers/Props';
import Menu from 'Components/Menu/Menu';
import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';
import styles from './FilterMenu.css';
-class FilterMenu extends Component {
+function FilterMenu(props) {
+ const {
+ className,
+ children,
+ ...otherProps
+ } = props;
- //
- // Render
-
- render() {
- const {
- className,
- children,
- ...otherProps
- } = this.props;
-
- return (
-
- );
- }
+ return (
+
+ );
}
FilterMenu.propTypes = {
diff --git a/frontend/src/Components/Menu/SortMenu.js b/frontend/src/Components/Menu/SortMenu.js
index 2977f661b..7a2e931ea 100644
--- a/frontend/src/Components/Menu/SortMenu.js
+++ b/frontend/src/Components/Menu/SortMenu.js
@@ -1,34 +1,28 @@
import PropTypes from 'prop-types';
-import React, { Component } from 'react';
+import React from 'react';
import { icons } from 'Helpers/Props';
import Menu from 'Components/Menu/Menu';
import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton';
-class SortMenu extends Component {
+function SortMenu(props) {
+ const {
+ className,
+ children,
+ ...otherProps
+ } = props;
- //
- // Render
-
- render() {
- const {
- className,
- children,
- ...otherProps
- } = this.props;
-
- return (
-
- );
- }
+ return (
+
+ );
}
SortMenu.propTypes = {
diff --git a/frontend/src/Components/Menu/ViewMenu.js b/frontend/src/Components/Menu/ViewMenu.js
index 61be4f952..9c39bb3e2 100644
--- a/frontend/src/Components/Menu/ViewMenu.js
+++ b/frontend/src/Components/Menu/ViewMenu.js
@@ -18,7 +18,7 @@ function ViewMenu(props) {
iconName={icons.VIEW}
text="View"
/>
- {children}
+ {children}
);
}
diff --git a/frontend/src/Components/Page/PageContentBody.js b/frontend/src/Components/Page/PageContentBody.js
index 478633cb2..81bd9b29b 100644
--- a/frontend/src/Components/Page/PageContentBody.js
+++ b/frontend/src/Components/Page/PageContentBody.js
@@ -40,7 +40,8 @@ PageContentBody.propTypes = {
className: PropTypes.string,
innerClassName: PropTypes.string,
isSmallScreen: PropTypes.bool.isRequired,
- children: PropTypes.node.isRequired
+ children: PropTypes.node.isRequired,
+ dispatch: PropTypes.func
};
PageContentBody.defaultProps = {
diff --git a/frontend/src/Components/Page/PageJumpBar.css b/frontend/src/Components/Page/PageJumpBar.css
index 225ca3022..9a116fb54 100644
--- a/frontend/src/Components/Page/PageJumpBar.css
+++ b/frontend/src/Components/Page/PageJumpBar.css
@@ -1,7 +1,7 @@
.jumpBar {
display: flex;
- align-items: stretch;
align-content: stretch;
+ align-items: stretch;
align-self: stretch;
justify-content: center;
flex: 0 0 30px;
diff --git a/frontend/src/Components/Page/Sidebar/Messages/Message.js b/frontend/src/Components/Page/Sidebar/Messages/Message.js
index 0abaea247..1332a6599 100644
--- a/frontend/src/Components/Page/Sidebar/Messages/Message.js
+++ b/frontend/src/Components/Page/Sidebar/Messages/Message.js
@@ -43,7 +43,8 @@ function Message(props) {
+ )}
+ >
+ )}
+ >
{
buttons.map((button) => {
return button;
diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js b/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js
index 43cea8139..754248f99 100644
--- a/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js
+++ b/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js
@@ -8,7 +8,7 @@ class PageToolbarSeparator extends Component {
render() {
return (
-
+
);
}
diff --git a/frontend/src/Components/ProgressBar.js b/frontend/src/Components/ProgressBar.js
index 23dcfc70d..112bfb575 100644
--- a/frontend/src/Components/ProgressBar.js
+++ b/frontend/src/Components/ProgressBar.js
@@ -55,22 +55,22 @@ function ProgressBar(props) {
aria-valuemax="100"
style={{ width: progressPercent }}
/>
- {
- showText &&
+ {
+ showText &&
+
-
-
- {progressText}
-
+
+ {progressText}
- }
+
+ }
);
}
diff --git a/frontend/src/Components/Scroller/OverlayScroller.css b/frontend/src/Components/Scroller/OverlayScroller.css
index a55eca90b..707a9ac6f 100644
--- a/frontend/src/Components/Scroller/OverlayScroller.css
+++ b/frontend/src/Components/Scroller/OverlayScroller.css
@@ -1,4 +1,5 @@
.scroller {
+ /* Placeholder */
}
.thumb {
diff --git a/frontend/src/Components/Table/TableHeaderCell.js b/frontend/src/Components/Table/TableHeaderCell.js
index f1417d5e9..73c4b7ec2 100644
--- a/frontend/src/Components/Table/TableHeaderCell.js
+++ b/frontend/src/Components/Table/TableHeaderCell.js
@@ -5,7 +5,7 @@ import Link from 'Components/Link/Link';
import Icon from 'Components/Icon';
import styles from './TableHeaderCell.css';
-class VirtualTableHeaderCell extends Component {
+class TableHeaderCell extends Component {
//
// Listeners
@@ -43,8 +43,8 @@ class VirtualTableHeaderCell extends Component {
const isSorting = isSortable && sortKey === name;
const sortIcon = sortDirection === sortDirections.ASCENDING ?
- icons.SORT_ASCENDING :
- icons.SORT_DESCENDING;
+ icons.SORT_ASCENDING :
+ icons.SORT_DESCENDING;
return (
isSortable ?
@@ -72,7 +72,7 @@ class VirtualTableHeaderCell extends Component {
}
}
-VirtualTableHeaderCell.propTypes = {
+TableHeaderCell.propTypes = {
className: PropTypes.string,
name: PropTypes.string.isRequired,
label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
@@ -86,9 +86,9 @@ VirtualTableHeaderCell.propTypes = {
onSortPress: PropTypes.func
};
-VirtualTableHeaderCell.defaultProps = {
+TableHeaderCell.defaultProps = {
className: styles.headerCell,
isSortable: false
};
-export default VirtualTableHeaderCell;
+export default TableHeaderCell;
diff --git a/frontend/src/Components/Table/VirtualTable.js b/frontend/src/Components/Table/VirtualTable.js
index ecacfd82d..df23d3ff7 100644
--- a/frontend/src/Components/Table/VirtualTable.js
+++ b/frontend/src/Components/Table/VirtualTable.js
@@ -142,9 +142,9 @@ class VirtualTable extends Component {
{...otherProps}
/>
- );
+ );
+ }
}
- }
);
diff --git a/frontend/src/Components/Table/VirtualTableHeaderCell.js b/frontend/src/Components/Table/VirtualTableHeaderCell.js
index 515eacc71..bf51062e9 100644
--- a/frontend/src/Components/Table/VirtualTableHeaderCell.js
+++ b/frontend/src/Components/Table/VirtualTableHeaderCell.js
@@ -58,8 +58,8 @@ class VirtualTableHeaderCell extends Component {
const isSorting = isSortable && sortKey === name;
const sortIcon = sortDirection === sortDirections.ASCENDING ?
- icons.SORT_ASCENDING :
- icons.SORT_DESCENDING;
+ icons.SORT_ASCENDING :
+ icons.SORT_DESCENDING;
return (
isSortable ?
diff --git a/frontend/src/Content/Fonts/font-awesome.css b/frontend/src/Content/Fonts/font-awesome.css
index eab1cbb5b..2d70abd3c 100644
--- a/frontend/src/Content/Fonts/font-awesome.css
+++ b/frontend/src/Content/Fonts/font-awesome.css
@@ -1,3 +1,5 @@
+/* stylelint-disable */
+
/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
@@ -2335,3 +2337,5 @@
overflow: visible;
clip: auto;
}
+
+/* stylelint-enable */
\ No newline at end of file
diff --git a/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js b/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js
index cff2595c8..f84bea723 100644
--- a/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js
+++ b/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js
@@ -82,9 +82,9 @@ InteractiveEpisodeSearchConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'releases' }
- )(InteractiveEpisodeSearchConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'releases' }
+)(InteractiveEpisodeSearchConnector);
diff --git a/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js b/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js
index fd767575a..b180d319b 100644
--- a/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js
+++ b/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js
@@ -66,15 +66,15 @@ class SelectArtistModalContent extends Component {
{
items.map((item) => {
return item.artistName.toLowerCase().includes(filter) ?
- (
-
- ) :
- null;
+ (
+
+ ) :
+ null;
})
}
diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js
index d0a702de0..fd07437f1 100644
--- a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js
+++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js
@@ -147,9 +147,9 @@ InteractiveImportModalContentConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'interactiveImport' }
- )(InteractiveImportModalContentConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'interactiveImport' }
+)(InteractiveImportModalContentConnector);
diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js
index 1835e07a4..2234db00e 100644
--- a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js
+++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js
@@ -178,7 +178,7 @@ class InteractiveImportRow extends Component {
const artistName = artist ? artist.artistName : '';
const albumTitle = album ? album.title : '';
const trackNumbers = tracks.map((track) => track.trackNumber)
- .join(', ');
+ .join(', ');
const showArtistPlaceholder = isSelected && !artist;
const showAlbumNumberPlaceholder = isSelected && !!artist && !album;
diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js
index 250106c0c..b6744d156 100644
--- a/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js
+++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js
@@ -3,7 +3,7 @@ import styles from './InteractiveImportRowCellPlaceholder.css';
function InteractiveImportRowCellPlaceholder() {
return (
-
+
);
}
diff --git a/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js b/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js
index a3b7277e7..4a9988b68 100644
--- a/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js
+++ b/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js
@@ -50,7 +50,7 @@ class SelectLanguageModalContentConnector extends Component {
onLanguageSelect = ({ value }) => {
const languageId = parseInt(value);
const language = _.find(this.props.items,
- (item) => item.language.id === languageId).language;
+ (item) => item.language.id === languageId).language;
this.props.updateInteractiveImportItem({
id: this.props.id,
diff --git a/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js b/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js
index e50b3af2e..ac5b42a7b 100644
--- a/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js
+++ b/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js
@@ -49,7 +49,7 @@ class SelectQualityModalContentConnector extends Component {
onQualitySelect = ({ qualityId, proper, real }) => {
const quality = _.find(this.props.items,
- (item) => item.quality.id === qualityId).quality;
+ (item) => item.quality.id === qualityId).quality;
const revision = {
version: proper ? 2 : 1,
diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js
index 56a5170a4..6ba496c45 100644
--- a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js
+++ b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js
@@ -46,7 +46,7 @@ class AddDownloadClientModalContent extends Component {
}
{
- !isFetching && !error &&
+ isPopulated && !error &&
diff --git a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js
index 2acfc6275..cee9a544e 100644
--- a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js
+++ b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js
@@ -84,9 +84,9 @@ DownloadClientOptionsConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- { withRef: true },
- { section: 'downloadClientOptions' }
- )(DownloadClientOptionsConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ { withRef: true },
+ { section: 'downloadClientOptions' }
+)(DownloadClientOptionsConnector);
diff --git a/frontend/src/Settings/General/GeneralSettingsConnector.js b/frontend/src/Settings/General/GeneralSettingsConnector.js
index 0bc539d3e..fd0a11743 100644
--- a/frontend/src/Settings/General/GeneralSettingsConnector.js
+++ b/frontend/src/Settings/General/GeneralSettingsConnector.js
@@ -109,9 +109,9 @@ GeneralSettingsConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'general' }
- )(GeneralSettingsConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'general' }
+)(GeneralSettingsConnector);
diff --git a/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js b/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js
index b88894ebe..e6d39edf9 100644
--- a/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js
+++ b/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js
@@ -84,9 +84,9 @@ IndexerOptionsConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- { withRef: true },
- { section: 'indexerOptions' }
- )(IndexerOptionsConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ { withRef: true },
+ { section: 'indexerOptions' }
+)(IndexerOptionsConnector);
diff --git a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js
index ae3af03f3..5f7ed7141 100644
--- a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js
+++ b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js
@@ -83,9 +83,9 @@ MediaManagementConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'mediaManagement' }
- )(MediaManagementConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'mediaManagement' }
+)(MediaManagementConnector);
diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js
index 59355c4b4..04d200eb1 100644
--- a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js
+++ b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js
@@ -94,9 +94,9 @@ NamingConnector.propTypes = {
};
export default connectSection(
- createMapStateToProps,
- mapDispatchToProps,
- undefined,
- undefined,
- { section: 'naming' }
- )(NamingConnector);
+ createMapStateToProps,
+ mapDispatchToProps,
+ undefined,
+ undefined,
+ { section: 'naming' }
+)(NamingConnector);
diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
index 45869d06f..89b5a53a1 100644
--- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
+++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
@@ -168,21 +168,21 @@ class NamingModal extends Component {