From b3f70538a9138bc279a451f4f358605097210d41 Mon Sep 17 00:00:00 2001
From: Deluan <deluan@deluan.com>
Date: Mon, 20 Apr 2020 09:09:29 -0400
Subject: [PATCH] Upgrade Prettier to 2.0.4. Reformatted all JS files

---
 ui/package-lock.json                    | 52 +++++++++++++++++------
 ui/package.json                         |  4 +-
 ui/src/album/AlbumActions.js            |  4 +-
 ui/src/album/AlbumGridView.js           | 12 +++---
 ui/src/album/AlbumList.js               |  2 +-
 ui/src/album/AlbumListActions.js        |  4 +-
 ui/src/album/AlbumListView.js           |  2 +-
 ui/src/album/AlbumSongs.js              | 20 ++++-----
 ui/src/album/ArtistLinkField.js         |  2 +-
 ui/src/album/albumState.js              |  8 ++--
 ui/src/album/index.js                   |  2 +-
 ui/src/album/styles.js                  | 26 ++++++------
 ui/src/artist/ArtistList.js             |  4 +-
 ui/src/artist/index.js                  |  2 +-
 ui/src/audioplayer/Player.js            | 10 ++---
 ui/src/audioplayer/queue.js             | 14 +++----
 ui/src/common/BitrateField.js           |  4 +-
 ui/src/common/DurationField.js          |  4 +-
 ui/src/common/PlayButton.js             |  2 +-
 ui/src/common/RangeField.js             |  4 +-
 ui/src/common/SimpleList.js             | 12 +++---
 ui/src/common/SizeField.js              |  4 +-
 ui/src/common/SongDetails.js            |  4 +-
 ui/src/common/index.js                  |  2 +-
 ui/src/i18n/cn.js                       | 48 ++++++++++-----------
 ui/src/i18n/en.js                       | 32 +++++++-------
 ui/src/i18n/fr.js                       | 56 ++++++++++++-------------
 ui/src/i18n/it.js                       | 48 ++++++++++-----------
 ui/src/i18n/pt.js                       | 48 ++++++++++-----------
 ui/src/layout/AppBar.js                 |  8 ++--
 ui/src/layout/Layout.js                 |  2 +-
 ui/src/layout/Login.js                  | 20 ++++-----
 ui/src/layout/Menu.js                   |  6 +--
 ui/src/layout/PersonalMenu.js           |  4 +-
 ui/src/layout/SubMenu.js                |  8 ++--
 ui/src/personal/Personal.js             |  4 +-
 ui/src/personal/actions.js              |  2 +-
 ui/src/player/PlayerEdit.js             |  4 +-
 ui/src/player/PlayerList.js             | 24 +++++------
 ui/src/player/index.js                  |  2 +-
 ui/src/song/AddToQueueButton.js         |  2 +-
 ui/src/song/AlbumLinkField.js           |  2 +-
 ui/src/song/SongList.js                 |  4 +-
 ui/src/song/index.js                    |  2 +-
 ui/src/store/createAdminStore.js        |  8 ++--
 ui/src/themes/dark.js                   | 14 +++----
 ui/src/themes/light.js                  | 16 +++----
 ui/src/transcoding/TranscodingCreate.js |  4 +-
 ui/src/transcoding/TranscodingEdit.js   |  2 +-
 ui/src/transcoding/TranscodingList.js   | 20 +++++----
 ui/src/transcoding/index.js             |  2 +-
 ui/src/user/UserCreate.js               |  2 +-
 ui/src/user/UserEdit.js                 |  2 +-
 ui/src/user/UserList.js                 |  2 +-
 ui/src/user/index.js                    |  2 +-
 55 files changed, 318 insertions(+), 286 deletions(-)

diff --git a/ui/package-lock.json b/ui/package-lock.json
index 046cf6ce0..6f4a10cc0 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -1643,6 +1643,7 @@
       "version": "25.4.0",
       "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz",
       "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==",
+      "dev": true,
       "requires": {
         "@types/istanbul-lib-coverage": "^2.0.0",
         "@types/istanbul-reports": "^1.1.1",
@@ -1936,6 +1937,7 @@
       "version": "7.2.1",
       "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.2.1.tgz",
       "integrity": "sha512-xIGoHlQ2ZiEL1dJIFKNmLDypzYF+4OJTTASRctl/aoIDaS5y/pRVHRigoqvPUV11mdJoR71IIgi/6UviMgyz4g==",
+      "dev": true,
       "requires": {
         "@babel/runtime": "^7.9.2",
         "@types/testing-library__dom": "^7.0.0",
@@ -1948,6 +1950,7 @@
           "version": "7.9.2",
           "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
           "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+          "dev": true,
           "requires": {
             "regenerator-runtime": "^0.13.4"
           }
@@ -1956,6 +1959,7 @@
           "version": "4.0.2",
           "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.0.2.tgz",
           "integrity": "sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w==",
+          "dev": true,
           "requires": {
             "@babel/runtime": "^7.7.4",
             "@babel/runtime-corejs3": "^7.7.4"
@@ -1964,7 +1968,8 @@
         "regenerator-runtime": {
           "version": "0.13.5",
           "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
+          "dev": true
         }
       }
     },
@@ -1972,6 +1977,7 @@
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.5.0.tgz",
       "integrity": "sha512-7sWHrpxG4Yd8TmryI7Rtbx8Ff4mbs3ASye3oshQIuHvsCR+QHgr7rTR/PfeXvOmwUwR36wSTTAvrLKsPmr6VEQ==",
+      "dev": true,
       "requires": {
         "@babel/runtime": "^7.9.2",
         "@types/testing-library__jest-dom": "^5.0.2",
@@ -1988,6 +1994,7 @@
           "version": "7.9.2",
           "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
           "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+          "dev": true,
           "requires": {
             "regenerator-runtime": "^0.13.4"
           }
@@ -1995,7 +2002,8 @@
         "regenerator-runtime": {
           "version": "0.13.5",
           "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
+          "dev": true
         }
       }
     },
@@ -2003,6 +2011,7 @@
       "version": "10.0.2",
       "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.0.2.tgz",
       "integrity": "sha512-YT6Mw0oJz7R6vlEkmo1FlUD+K15FeXApOB5Ffm9zooFVnrwkt00w18dUJFMOh1yRp9wTdVRonbor7o4PIpFCmA==",
+      "dev": true,
       "requires": {
         "@babel/runtime": "^7.9.2",
         "@testing-library/dom": "^7.1.0",
@@ -2013,6 +2022,7 @@
           "version": "7.9.2",
           "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
           "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+          "dev": true,
           "requires": {
             "regenerator-runtime": "^0.13.4"
           }
@@ -2020,14 +2030,16 @@
         "regenerator-runtime": {
           "version": "0.13.5",
           "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
+          "dev": true
         }
       }
     },
     "@testing-library/user-event": {
       "version": "10.0.2",
       "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-10.0.2.tgz",
-      "integrity": "sha512-fVeP4U37BIYdp9nBRKEITFSLPqgCSS7Og6LHvxoQ2JSOTJ1NJI4Dfesv4uNXxvNNcJgBS88V+Tc6h8vbDsa2iA=="
+      "integrity": "sha512-fVeP4U37BIYdp9nBRKEITFSLPqgCSS7Og6LHvxoQ2JSOTJ1NJI4Dfesv4uNXxvNNcJgBS88V+Tc6h8vbDsa2iA==",
+      "dev": true
     },
     "@types/babel__core": {
       "version": "7.1.6",
@@ -2117,6 +2129,7 @@
       "version": "25.2.1",
       "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz",
       "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==",
+      "dev": true,
       "requires": {
         "jest-diff": "^25.2.1",
         "pretty-format": "^25.2.1"
@@ -2165,6 +2178,7 @@
       "version": "16.9.6",
       "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.6.tgz",
       "integrity": "sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==",
+      "dev": true,
       "requires": {
         "@types/react": "*"
       }
@@ -2186,6 +2200,7 @@
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.0.1.tgz",
       "integrity": "sha512-WokGRksRJb3Dla6h02/0/NNHTkjsj4S8aJZiwMj/5/UL8VZ1iCe3H8SHzfpmBeH8Vp4SPRT8iC2o9kYULFhDIw==",
+      "dev": true,
       "requires": {
         "pretty-format": "^25.1.0"
       }
@@ -2194,6 +2209,7 @@
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.0.3.tgz",
       "integrity": "sha512-NdbKc6yseg6uq4UJFwimPws0iwsGugVbPoOTP2EH+PJMJKiZsoSg5F2H3XYweOyytftCOuIMuXifBUrF9CSvaQ==",
+      "dev": true,
       "requires": {
         "@types/jest": "*"
       }
@@ -2202,6 +2218,7 @@
       "version": "10.0.1",
       "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-10.0.1.tgz",
       "integrity": "sha512-RbDwmActAckbujLZeVO/daSfdL1pnjVqas25UueOkAY5r7vriavWf0Zqg7ghXMHa8ycD/kLkv8QOj31LmSYwww==",
+      "dev": true,
       "requires": {
         "@types/react-dom": "*",
         "@types/testing-library__dom": "*",
@@ -2212,6 +2229,7 @@
       "version": "15.0.4",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz",
       "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==",
+      "dev": true,
       "requires": {
         "@types/yargs-parser": "*"
       }
@@ -4519,7 +4537,8 @@
     "css.escape": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
-      "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s="
+      "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=",
+      "dev": true
     },
     "cssdb": {
       "version": "4.4.0",
@@ -4893,7 +4912,8 @@
     "diff-sequences": {
       "version": "25.2.6",
       "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz",
-      "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg=="
+      "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==",
+      "dev": true
     },
     "diffie-hellman": {
       "version": "5.0.3",
@@ -4947,7 +4967,8 @@
     "dom-accessibility-api": {
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.4.3.tgz",
-      "integrity": "sha512-JZ8iPuEHDQzq6q0k7PKMGbrIdsgBB7TRrtVOUm4nSMCExlg5qQG4KXWTH2k90yggjM4tTumRGwTKJSldMzKyLA=="
+      "integrity": "sha512-JZ8iPuEHDQzq6q0k7PKMGbrIdsgBB7TRrtVOUm4nSMCExlg5qQG4KXWTH2k90yggjM4tTumRGwTKJSldMzKyLA==",
+      "dev": true
     },
     "dom-align": {
       "version": "1.11.1",
@@ -8060,6 +8081,7 @@
       "version": "25.4.0",
       "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.4.0.tgz",
       "integrity": "sha512-kklLbJVXW0y8UKOWOdYhI6TH5MG6QAxrWiBMgQaPIuhj3dNFGirKCd+/xfplBXICQ7fI+3QcqHm9p9lWu1N6ug==",
+      "dev": true,
       "requires": {
         "chalk": "^3.0.0",
         "diff-sequences": "^25.2.6",
@@ -8334,7 +8356,8 @@
     "jest-get-type": {
       "version": "25.2.6",
       "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz",
-      "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig=="
+      "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==",
+      "dev": true
     },
     "jest-haste-map": {
       "version": "24.9.0",
@@ -9069,6 +9092,7 @@
       "version": "25.4.0",
       "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.4.0.tgz",
       "integrity": "sha512-yPMdtj7YDgXhnGbc66bowk8AkQ0YwClbbwk3Kzhn5GVDrciiCr27U4NJRbrqXbTdtxjImONITg2LiRIw650k5A==",
+      "dev": true,
       "requires": {
         "chalk": "^3.0.0",
         "jest-diff": "^25.4.0",
@@ -10691,7 +10715,8 @@
     "min-indent": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
-      "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY="
+      "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=",
+      "dev": true
     },
     "mini-create-react-context": {
       "version": "0.3.2",
@@ -12716,9 +12741,9 @@
       "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
     },
     "prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz",
+      "integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==",
       "dev": true
     },
     "pretty-bytes": {
@@ -12739,6 +12764,7 @@
       "version": "25.4.0",
       "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz",
       "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==",
+      "dev": true,
       "requires": {
         "@jest/types": "^25.4.0",
         "ansi-regex": "^5.0.0",
@@ -13931,6 +13957,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
       "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+      "dev": true,
       "requires": {
         "indent-string": "^4.0.0",
         "strip-indent": "^3.0.0"
@@ -15407,6 +15434,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
       "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+      "dev": true,
       "requires": {
         "min-indent": "^1.0.0"
       }
diff --git a/ui/package.json b/ui/package.json
index 4f575fda9..01707fc59 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -21,10 +21,10 @@
     "react-scripts": "^3.4.1"
   },
   "devDependencies": {
-    "prettier": "^1.19.1",
     "@testing-library/jest-dom": "^5.5.0",
     "@testing-library/react": "^10.0.2",
-    "@testing-library/user-event": "^10.0.2"
+    "@testing-library/user-event": "^10.0.2",
+    "prettier": "^2.0.4"
   },
   "scripts": {
     "start": "react-scripts start",
diff --git a/ui/src/album/AlbumActions.js b/ui/src/album/AlbumActions.js
index 996a3d6f6..433da1d62 100644
--- a/ui/src/album/AlbumActions.js
+++ b/ui/src/album/AlbumActions.js
@@ -2,7 +2,7 @@ import {
   Button,
   sanitizeListRestProps,
   TopToolbar,
-  useTranslate
+  useTranslate,
 } from 'react-admin'
 import PlayArrowIcon from '@material-ui/icons/PlayArrow'
 import ShuffleIcon from '@material-ui/icons/Shuffle'
@@ -65,5 +65,5 @@ export const AlbumActions = ({
 
 AlbumActions.defaultProps = {
   selectedIds: [],
-  onUnselectItems: () => null
+  onUnselectItems: () => null,
 }
diff --git a/ui/src/album/AlbumGridView.js b/ui/src/album/AlbumGridView.js
index f03ac7191..b9027df0a 100644
--- a/ui/src/album/AlbumGridView.js
+++ b/ui/src/album/AlbumGridView.js
@@ -9,29 +9,29 @@ import subsonic from '../subsonic'
 
 const useStyles = makeStyles((theme) => ({
   root: {
-    margin: '20px'
+    margin: '20px',
   },
   gridListTile: {
     minHeight: '180px',
-    minWidth: '180px'
+    minWidth: '180px',
   },
   cover: {
     display: 'inline-block',
     width: '100%',
-    height: '100%'
+    height: '100%',
   },
   tileBar: {
     textAlign: 'center',
     background:
-      'linear-gradient(to top, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.4) 70%,rgba(0,0,0,0) 100%)'
+      'linear-gradient(to top, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.4) 70%,rgba(0,0,0,0) 100%)',
   },
   albumArtistName: {
     whiteSpace: 'nowrap',
     overflow: 'hidden',
     textOverflow: 'ellipsis',
     textAlign: 'center',
-    fontSize: '1em'
-  }
+    fontSize: '1em',
+  },
 }))
 
 const getColsForWidth = (width) => {
diff --git a/ui/src/album/AlbumList.js b/ui/src/album/AlbumList.js
index 6649252fc..284d577a7 100644
--- a/ui/src/album/AlbumList.js
+++ b/ui/src/album/AlbumList.js
@@ -9,7 +9,7 @@ import {
   ReferenceInput,
   SearchInput,
   Pagination,
-  useTranslate
+  useTranslate,
 } from 'react-admin'
 import { Title } from '../common'
 import { withWidth } from '@material-ui/core'
diff --git a/ui/src/album/AlbumListActions.js b/ui/src/album/AlbumListActions.js
index 1dbbcb336..3834391e6 100644
--- a/ui/src/album/AlbumListActions.js
+++ b/ui/src/album/AlbumListActions.js
@@ -35,7 +35,7 @@ const AlbumListActions = ({
           showFilter,
           displayedFilters,
           filterValues,
-          context: 'button'
+          context: 'button',
         })}
       <ButtonGroup
         variant="text"
@@ -63,7 +63,7 @@ const AlbumListActions = ({
 
 AlbumListActions.defaultProps = {
   selectedIds: [],
-  onUnselectItems: () => null
+  onUnselectItems: () => null,
 }
 
 export default AlbumListActions
diff --git a/ui/src/album/AlbumListView.js b/ui/src/album/AlbumListView.js
index 4dd5462bb..7680111bc 100644
--- a/ui/src/album/AlbumListView.js
+++ b/ui/src/album/AlbumListView.js
@@ -7,7 +7,7 @@ import {
   FunctionField,
   Show,
   SimpleShowLayout,
-  TextField
+  TextField,
 } from 'react-admin'
 import { DurationField, RangeField } from '../common'
 import { useMediaQuery } from '@material-ui/core'
diff --git a/ui/src/album/AlbumSongs.js b/ui/src/album/AlbumSongs.js
index 014f85cf4..7e8563f25 100644
--- a/ui/src/album/AlbumSongs.js
+++ b/ui/src/album/AlbumSongs.js
@@ -6,7 +6,7 @@ import {
   ListToolbar,
   TextField,
   useListController,
-  DatagridLoading
+  DatagridLoading,
 } from 'react-admin'
 import classnames from 'classnames'
 import { useDispatch } from 'react-redux'
@@ -20,7 +20,7 @@ const useStyles = makeStyles(
   (theme) => ({
     root: {},
     main: {
-      display: 'flex'
+      display: 'flex',
     },
     content: {
       marginTop: 0,
@@ -28,29 +28,29 @@ const useStyles = makeStyles(
       position: 'relative',
       flex: '1 1 auto',
       [theme.breakpoints.down('xs')]: {
-        boxShadow: 'none'
+        boxShadow: 'none',
       },
-      overflow: 'inherit'
+      overflow: 'inherit',
     },
     bulkActionsDisplayed: {
       marginTop: -theme.spacing(8),
-      transition: theme.transitions.create('margin-top')
+      transition: theme.transitions.create('margin-top'),
     },
     actions: {
       zIndex: 2,
       display: 'flex',
       justifyContent: 'flex-end',
-      flexWrap: 'wrap'
+      flexWrap: 'wrap',
     },
-    noResults: { padding: 20 }
+    noResults: { padding: 20 },
   }),
   { name: 'RaList' }
 )
 
 const useStylesListToolbar = makeStyles({
   toolbar: {
-    justifyContent: 'flex-start'
-  }
+    justifyContent: 'flex-start',
+  },
 })
 
 const trackName = (r) => {
@@ -88,7 +88,7 @@ const AlbumSongs = (props) => {
         <Card
           className={classnames(classes.content, {
             [classes.bulkActionsDisplayed]:
-              controllerProps.selectedIds.length > 0
+              controllerProps.selectedIds.length > 0,
           })}
           key={version}
         >
diff --git a/ui/src/album/ArtistLinkField.js b/ui/src/album/ArtistLinkField.js
index 257b98876..712dfb204 100644
--- a/ui/src/album/ArtistLinkField.js
+++ b/ui/src/album/ArtistLinkField.js
@@ -15,5 +15,5 @@ export const ArtistLinkField = (props) => {
 
 ArtistLinkField.defaultProps = {
   source: 'artistId',
-  addLabel: true
+  addLabel: true,
 }
diff --git a/ui/src/album/albumState.js b/ui/src/album/albumState.js
index 4a0def4e6..c1792754b 100644
--- a/ui/src/album/albumState.js
+++ b/ui/src/album/albumState.js
@@ -14,8 +14,8 @@ const albumListParams = {
   ALBUM_LIST_NEWEST: { sort: { field: 'created_at', order: 'DESC' } },
   ALBUM_LIST_RECENT: {
     sort: { field: 'play_date', order: 'DESC' },
-    filter: { starred: true }
-  }
+    filter: { starred: true },
+  },
 }
 
 const selectAlbumList = (mode) => ({ type: mode })
@@ -24,7 +24,7 @@ const albumViewReducer = (
   previousState = {
     mode: ALBUM_MODE_LIST,
     list: ALBUM_LIST_ALL,
-    params: { sort: {}, filter: {} }
+    params: { sort: {}, filter: {} },
   },
   payload
 ) => {
@@ -54,5 +54,5 @@ export {
   ALBUM_LIST_STARRED,
   albumViewReducer,
   selectViewMode,
-  selectAlbumList
+  selectAlbumList,
 }
diff --git a/ui/src/album/index.js b/ui/src/album/index.js
index 3a51b26c0..dc1a684a4 100644
--- a/ui/src/album/index.js
+++ b/ui/src/album/index.js
@@ -5,5 +5,5 @@ import AlbumShow from './AlbumShow'
 export default {
   list: AlbumList,
   show: AlbumShow,
-  icon: AlbumIcon
+  icon: AlbumIcon,
 }
diff --git a/ui/src/album/styles.js b/ui/src/album/styles.js
index 3046968a4..0881fdabe 100644
--- a/ui/src/album/styles.js
+++ b/ui/src/album/styles.js
@@ -4,44 +4,44 @@ export const useStyles = makeStyles((theme) => ({
   container: {
     [theme.breakpoints.down('xs')]: {
       padding: '0.7em',
-      minWidth: '24em'
+      minWidth: '24em',
     },
     [theme.breakpoints.up('sm')]: {
       padding: '1em',
-      minWidth: '32em'
-    }
+      minWidth: '32em',
+    },
   },
   albumCover: {
     display: 'inline-block',
     [theme.breakpoints.down('xs')]: {
       height: '8em',
-      width: '8em'
+      width: '8em',
     },
     [theme.breakpoints.up('sm')]: {
       height: '10em',
-      width: '10em'
+      width: '10em',
     },
     [theme.breakpoints.up('lg')]: {
       height: '15em',
-      width: '15em'
-    }
+      width: '15em',
+    },
   },
   albumDetails: {
     display: 'inline-block',
     verticalAlign: 'top',
     [theme.breakpoints.down('xs')]: {
-      width: '14em'
+      width: '14em',
     },
     [theme.breakpoints.up('sm')]: {
-      width: '26em'
+      width: '26em',
     },
     [theme.breakpoints.up('lg')]: {
-      width: '38em'
-    }
+      width: '38em',
+    },
   },
   albumTitle: {
     whiteSpace: 'nowrap',
     overflow: 'hidden',
-    textOverflow: 'ellipsis'
-  }
+    textOverflow: 'ellipsis',
+  },
 }))
diff --git a/ui/src/artist/ArtistList.js b/ui/src/artist/ArtistList.js
index 3236eef8f..ae95d33f2 100644
--- a/ui/src/artist/ArtistList.js
+++ b/ui/src/artist/ArtistList.js
@@ -5,7 +5,7 @@ import {
   List,
   NumberField,
   SearchInput,
-  TextField
+  TextField,
 } from 'react-admin'
 import { Pagination, Title } from '../common'
 
@@ -15,7 +15,7 @@ const ArtistFilter = (props) => (
   </Filter>
 )
 
-const artistRowClick = (id, basePath, record) => {
+const artistRowClick = (id) => {
   const filter = { artist_id: id }
   return `/album?filter=${JSON.stringify(
     filter
diff --git a/ui/src/artist/index.js b/ui/src/artist/index.js
index cce746461..1cd69b12c 100644
--- a/ui/src/artist/index.js
+++ b/ui/src/artist/index.js
@@ -3,5 +3,5 @@ import ArtistList from './ArtistList'
 
 export default {
   list: ArtistList,
-  icon: MicIcon
+  icon: MicIcon,
 }
diff --git a/ui/src/audioplayer/Player.js b/ui/src/audioplayer/Player.js
index a41e939a3..4e7071db6 100644
--- a/ui/src/audioplayer/Player.js
+++ b/ui/src/audioplayer/Player.js
@@ -29,7 +29,7 @@ const Player = () => {
     showMediaSession: true,
     defaultPosition: {
       top: 300,
-      left: 120
+      left: 120,
     },
     locale: {
       playListsText: translate('player.playListsText'),
@@ -55,9 +55,9 @@ const Player = () => {
         order: translate('player.playModeText.order'),
         orderLoop: translate('player.playModeText.orderLoop'),
         singleLoop: translate('player.playModeText.singleLoop'),
-        shufflePlay: translate('player.playModeText.shufflePlay')
-      }
-    }
+        shufflePlay: translate('player.playModeText.shufflePlay'),
+      },
+    },
   }
 
   const addQueueToOptions = (queue) => {
@@ -65,7 +65,7 @@ const Player = () => {
       ...defaultOptions,
       autoPlay: true,
       clearPriorAudioLists: queue.clear,
-      audioLists: queue.queue.map((item) => item)
+      audioLists: queue.queue.map((item) => item),
     }
   }
 
diff --git a/ui/src/audioplayer/queue.js b/ui/src/audioplayer/queue.js
index d7129ae93..1843a60e1 100644
--- a/ui/src/audioplayer/queue.js
+++ b/ui/src/audioplayer/queue.js
@@ -13,33 +13,33 @@ const mapToAudioLists = (item) => ({
   name: item.title,
   singer: item.artist,
   cover: subsonic.url('getCoverArt', item.id, { size: 300 }),
-  musicSrc: subsonic.url('stream', item.id, { ts: true })
+  musicSrc: subsonic.url('stream', item.id, { ts: true }),
 })
 
 const addTrack = (data) => ({
   type: PLAYER_ADD_TRACK,
-  data
+  data,
 })
 
 const setTrack = (data) => ({
   type: PLAYER_SET_TRACK,
-  data
+  data,
 })
 
 const playAlbum = (id, data) => ({
   type: PLAYER_PLAY_ALBUM,
   data,
-  id
+  id,
 })
 
 const syncQueue = (data) => ({
   type: PLAYER_SYNC_QUEUE,
-  data
+  data,
 })
 
 const scrobbled = (id) => ({
   type: PLAYER_SCROBBLE,
-  data: id
+  data: id,
 })
 
 const playQueueReducer = (
@@ -61,7 +61,7 @@ const playQueueReducer = (
       const newQueue = previousState.queue.map((item) => {
         return {
           ...item,
-          scrobbled: item.scrobbled || item.trackId === data
+          scrobbled: item.scrobbled || item.trackId === data,
         }
       })
       return { queue: newQueue, clear: false }
diff --git a/ui/src/common/BitrateField.js b/ui/src/common/BitrateField.js
index 7042484e6..01cffd9f9 100644
--- a/ui/src/common/BitrateField.js
+++ b/ui/src/common/BitrateField.js
@@ -8,11 +8,11 @@ const BitrateField = ({ record = {}, source }) => {
 BitrateField.propTypes = {
   label: PropTypes.string,
   record: PropTypes.object,
-  source: PropTypes.string.isRequired
+  source: PropTypes.string.isRequired,
 }
 
 BitrateField.defaultProps = {
-  addLabel: true
+  addLabel: true,
 }
 
 export default BitrateField
diff --git a/ui/src/common/DurationField.js b/ui/src/common/DurationField.js
index 1e4811303..0ed92358d 100644
--- a/ui/src/common/DurationField.js
+++ b/ui/src/common/DurationField.js
@@ -15,11 +15,11 @@ const format = (d) => {
 DurationField.propTypes = {
   label: PropTypes.string,
   record: PropTypes.object,
-  source: PropTypes.string.isRequired
+  source: PropTypes.string.isRequired,
 }
 
 DurationField.defaultProps = {
-  addLabel: true
+  addLabel: true,
 }
 
 export default DurationField
diff --git a/ui/src/common/PlayButton.js b/ui/src/common/PlayButton.js
index 3549a852e..433c6a01a 100644
--- a/ui/src/common/PlayButton.js
+++ b/ui/src/common/PlayButton.js
@@ -25,6 +25,6 @@ const PlayButton = ({ icon = defaultIcon, action, ...rest }) => {
 
 PlayButton.propTypes = {
   icon: PropTypes.element,
-  action: PropTypes.object
+  action: PropTypes.object,
 }
 export default PlayButton
diff --git a/ui/src/common/RangeField.js b/ui/src/common/RangeField.js
index c57e5432f..f02132083 100644
--- a/ui/src/common/RangeField.js
+++ b/ui/src/common/RangeField.js
@@ -22,11 +22,11 @@ const RangeField = ({ record = {}, source }) => {
 RangeField.propTypes = {
   label: PropTypes.string,
   record: PropTypes.object,
-  source: PropTypes.string.isRequired
+  source: PropTypes.string.isRequired,
 }
 
 RangeField.defaultProps = {
-  addLabel: true
+  addLabel: true,
 }
 
 export { formatRange }
diff --git a/ui/src/common/SimpleList.js b/ui/src/common/SimpleList.js
index 6b3771281..d57c7f347 100644
--- a/ui/src/common/SimpleList.js
+++ b/ui/src/common/SimpleList.js
@@ -15,9 +15,9 @@ const useStyles = makeStyles(
   {
     link: {
       textDecoration: 'none',
-      color: 'inherit'
+      color: 'inherit',
     },
-    tertiary: { float: 'right', opacity: 0.541176 }
+    tertiary: { float: 'right', opacity: 0.541176 },
   },
   { name: 'RaSimpleList' }
 )
@@ -28,7 +28,7 @@ const LinkOrNot = ({
   basePath,
   id,
   record,
-  children
+  children,
 }) => {
   const classes = useStyles({ classes: classesOverride })
   return linkType === 'edit' || linkType === true ? (
@@ -129,7 +129,7 @@ SimpleList.propTypes = {
   linkType: PropTypes.oneOfType([
     PropTypes.string,
     PropTypes.bool,
-    PropTypes.func
+    PropTypes.func,
   ]).isRequired,
   onToggleItem: PropTypes.func,
   primaryText: PropTypes.func,
@@ -137,13 +137,13 @@ SimpleList.propTypes = {
   rightIcon: PropTypes.func,
   secondaryText: PropTypes.func,
   selectedIds: PropTypes.arrayOf(PropTypes.any).isRequired,
-  tertiaryText: PropTypes.func
+  tertiaryText: PropTypes.func,
 }
 
 SimpleList.defaultProps = {
   linkType: 'edit',
   hasBulkActions: false,
-  selectedIds: []
+  selectedIds: [],
 }
 
 export default SimpleList
diff --git a/ui/src/common/SizeField.js b/ui/src/common/SizeField.js
index be895ec99..c288a5ff3 100644
--- a/ui/src/common/SizeField.js
+++ b/ui/src/common/SizeField.js
@@ -20,11 +20,11 @@ function formatBytes(bytes, decimals = 2) {
 SizeField.propTypes = {
   label: PropTypes.string,
   record: PropTypes.object,
-  source: PropTypes.string.isRequired
+  source: PropTypes.string.isRequired,
 }
 
 SizeField.defaultProps = {
-  addLabel: true
+  addLabel: true,
 }
 
 export default SizeField
diff --git a/ui/src/common/SongDetails.js b/ui/src/common/SongDetails.js
index 9b61aa7f3..e0ea2bc10 100644
--- a/ui/src/common/SongDetails.js
+++ b/ui/src/common/SongDetails.js
@@ -20,7 +20,7 @@ const SongDetails = (props) => {
     bitRate: <BitrateField record={record} source="bitRate" />,
     size: <SizeField record={record} source="size" />,
     updatedAt: <DateField record={record} source="updatedAt" showTime />,
-    playCount: <TextField record={record} source="playCount" />
+    playCount: <TextField record={record} source="playCount" />,
   }
   if (record.playCount > 0) {
     data.playDate = <DateField record={record} source="playDate" showTime />
@@ -34,7 +34,7 @@ const SongDetails = (props) => {
               <TableRow key={record.id}>
                 <TableCell component="th" scope="row">
                   {translate(`resources.song.fields.${key}`, {
-                    _: inflection.humanize(inflection.underscore(key))
+                    _: inflection.humanize(inflection.underscore(key)),
                   })}
                   :
                 </TableCell>
diff --git a/ui/src/common/index.js b/ui/src/common/index.js
index 6d3b14078..a725a99c4 100644
--- a/ui/src/common/index.js
+++ b/ui/src/common/index.js
@@ -18,5 +18,5 @@ export {
   SimpleList,
   RangeField,
   SongDetails,
-  formatRange
+  formatRange,
 }
diff --git a/ui/src/i18n/cn.js b/ui/src/i18n/cn.js
index ab8fd3e73..4ad586d0d 100644
--- a/ui/src/i18n/cn.js
+++ b/ui/src/i18n/cn.js
@@ -19,11 +19,11 @@ export default deepmerge(chineseMessages, {
         playCount: '播放次数',
         trackNumber: '音轨 #',
         size: '大小',
-        updatedAt: '上次更新'
+        updatedAt: '上次更新',
       },
       bulk: {
-        addToQueue: '稍后播放'
-      }
+        addToQueue: '稍后播放',
+      },
     },
     album: {
       name: '专辑 |||| 专辑',
@@ -35,21 +35,21 @@ export default deepmerge(chineseMessages, {
         songCount: '曲目数',
         playCount: '播放次数',
         compilation: '合辑',
-        year: '年份'
+        year: '年份',
       },
       actions: {
         playAll: '播放',
         playNext: '播放下一首',
         addToQueue: '稍后播放',
-        shuffle: '刷新'
-      }
+        shuffle: '刷新',
+      },
     },
     artist: {
       name: '歌手 |||| 歌手',
       fields: {
         name: '名称',
-        albumCount: '歌手数'
-      }
+        albumCount: '歌手数',
+      },
     },
     user: {
       name: '用户 |||| 用户',
@@ -58,8 +58,8 @@ export default deepmerge(chineseMessages, {
         isAdmin: '管理员',
         lastLoginAt: '最后一次访问',
         updatedAt: '上次修改',
-        name: '名称'
-      }
+        name: '名称',
+      },
     },
     player: {
       name: '用户 |||| 用户',
@@ -69,8 +69,8 @@ export default deepmerge(chineseMessages, {
         maxBitRate: '最大比特率',
         client: '应用程序',
         userName: '用户',
-        lastSeen: '最后一次访问'
-      }
+        lastSeen: '最后一次访问',
+      },
     },
     transcoding: {
       name: '转码 |||| 转码',
@@ -78,21 +78,21 @@ export default deepmerge(chineseMessages, {
         name: '名称',
         targetFormat: '格式',
         defaultBitRate: '默认比特率',
-        command: '命令'
-      }
-    }
+        command: '命令',
+      },
+    },
   },
   ra: {
     auth: {
       welcome1: '感谢您安装Navidrome!',
       welcome2: '为了开始使用,请创建一个管理员账户',
       confirmPassword: '确认密码',
-      buttonCreateAdmin: '创建管理员'
+      buttonCreateAdmin: '创建管理员',
     },
     validation: {
       invalidChars: '请只使用字母和数字',
-      passwordDoesNotMatch: '密码不匹配'
-    }
+      passwordDoesNotMatch: '密码不匹配',
+    },
   },
   menu: {
     library: '曲库',
@@ -103,9 +103,9 @@ export default deepmerge(chineseMessages, {
       name: '个性化',
       options: {
         theme: '主题',
-        language: '语言'
-      }
-    }
+        language: '语言',
+      },
+    },
   },
   player: {
     playListsText: '播放队列',
@@ -130,7 +130,7 @@ export default deepmerge(chineseMessages, {
       order: '顺序播放',
       orderLoop: '列表循环',
       singleLoop: '单曲循环',
-      shufflePlay: '随机播放'
-    }
-  }
+      shufflePlay: '随机播放',
+    },
+  },
 })
diff --git a/ui/src/i18n/en.js b/ui/src/i18n/en.js
index 194aed804..99d4c4b4c 100644
--- a/ui/src/i18n/en.js
+++ b/ui/src/i18n/en.js
@@ -10,11 +10,11 @@ export default deepmerge(englishMessages, {
         albumArtist: 'Album Artist',
         duration: 'Time',
         trackNumber: 'Track #',
-        playCount: 'Plays'
+        playCount: 'Plays',
       },
       bulk: {
-        addToQueue: 'Play Later'
-      }
+        addToQueue: 'Play Later',
+      },
     },
     album: {
       fields: {
@@ -22,27 +22,27 @@ export default deepmerge(englishMessages, {
         artist: 'Artist',
         duration: 'Time',
         songCount: 'Songs',
-        playCount: 'Plays'
+        playCount: 'Plays',
       },
       actions: {
         playAll: 'Play',
         playNext: 'Play Next',
         addToQueue: 'Play Later',
-        shuffle: 'Shuffle'
-      }
-    }
+        shuffle: 'Shuffle',
+      },
+    },
   },
   ra: {
     auth: {
       welcome1: 'Thanks for installing Navidrome!',
       welcome2: 'To start, create an admin user',
       confirmPassword: 'Confirm Password',
-      buttonCreateAdmin: 'Create Admin'
+      buttonCreateAdmin: 'Create Admin',
     },
     validation: {
       invalidChars: 'Please only use letter and numbers',
-      passwordDoesNotMatch: 'Password does not match'
-    }
+      passwordDoesNotMatch: 'Password does not match',
+    },
   },
   menu: {
     library: 'Library',
@@ -53,9 +53,9 @@ export default deepmerge(englishMessages, {
       name: 'Personal',
       options: {
         theme: 'Theme',
-        language: 'Language'
-      }
-    }
+        language: 'Language',
+      },
+    },
   },
   player: {
     playListsText: 'Play Queue',
@@ -80,7 +80,7 @@ export default deepmerge(englishMessages, {
       order: 'In order',
       orderLoop: 'Repeat',
       singleLoop: 'Repeat One',
-      shufflePlay: 'Shuffle'
-    }
-  }
+      shufflePlay: 'Shuffle',
+    },
+  },
 })
diff --git a/ui/src/i18n/fr.js b/ui/src/i18n/fr.js
index c7c5e1187..bb4ea59f6 100644
--- a/ui/src/i18n/fr.js
+++ b/ui/src/i18n/fr.js
@@ -15,14 +15,14 @@ export default deepmerge(frenchMessages, {
         compilation: 'Compilation',
         duration: 'Durée',
         year: 'Année',
-        playCount: 'Nombre d\'écoutes',
+        playCount: "Nombre d'écoutes",
         trackNumber: '#',
         size: 'Taille',
-        updatedAt: 'Mise à jour'
+        updatedAt: 'Mise à jour',
       },
       bulk: {
-        addToQueue: 'Ajouter à la file'
-      }
+        addToQueue: 'Ajouter à la file',
+      },
     },
     album: {
       name: 'Album |||| Albums',
@@ -31,55 +31,55 @@ export default deepmerge(frenchMessages, {
         artist: 'Artiste',
         songCount: 'Numéro de piste',
         genre: 'Genre',
-        playCount: 'Numbre d\'écoutes',
+        playCount: "Numbre d'écoutes",
         compilation: 'Compilation',
         duration: 'Durée',
-        year: 'Année'
+        year: 'Année',
       },
       actions: {
         playAll: 'Lire',
         playNext: 'Lire ensuite',
         addToQueue: 'Ajouter à la file',
-        shuffle: 'Mélanger'
-      }
+        shuffle: 'Mélanger',
+      },
     },
     artist: {
       name: 'Artiste |||| Artistes',
       fields: {
         name: 'Nom',
-        albumCount: 'Nombre d\'albums'
-      }
+        albumCount: "Nombre d'albums",
+      },
     },
     user: {
       name: 'Utilisateur |||| Utilisateurs',
       fields: {
-        name: 'Nom'
-      }
+        name: 'Nom',
+      },
     },
     transcoding: {
       name: 'Conversion |||| Conversions',
       fields: {
-        name: 'Nom'
-      }
+        name: 'Nom',
+      },
     },
     player: {
       name: 'Lecteur |||| Lecteurs',
       fields: {
-        name: 'Nom'
-      }
-    }
+        name: 'Nom',
+      },
+    },
   },
   ra: {
     auth: {
-      welcome1: 'Merci d\'avoir installé Navidrome !',
+      welcome1: "Merci d'avoir installé Navidrome !",
       welcome2: 'Pour commencer, créez un compte administrateur',
       confirmPassword: 'Confirmer votre mot de passe',
-      buttonCreateAdmin: 'Créer un compte administrateur'
+      buttonCreateAdmin: 'Créer un compte administrateur',
     },
     validation: {
-      invalidChars: 'Merci d\'utiliser uniquement des chiffres et des lettres',
-      passwordDoesNotMatch: 'Les mots de passes ne correspondent pas'
-    }
+      invalidChars: "Merci d'utiliser uniquement des chiffres et des lettres",
+      passwordDoesNotMatch: 'Les mots de passes ne correspondent pas',
+    },
   },
   menu: {
     library: 'Bibliothèque',
@@ -89,9 +89,9 @@ export default deepmerge(frenchMessages, {
       name: 'Paramètres personel',
       options: {
         theme: 'Thème',
-        language: 'Langue'
-      }
-    }
+        language: 'Langue',
+      },
+    },
   },
   player: {
     playListsText: 'File de lecture',
@@ -106,7 +106,7 @@ export default deepmerge(frenchMessages, {
       order: 'Ordonner',
       orderLoop: 'Tout répéter',
       singleLoop: 'Repéter',
-      shufflePlay: 'Aleatoire'
-    }
-  }
+      shufflePlay: 'Aleatoire',
+    },
+  },
 })
diff --git a/ui/src/i18n/it.js b/ui/src/i18n/it.js
index ba14259d9..ae34bcd68 100644
--- a/ui/src/i18n/it.js
+++ b/ui/src/i18n/it.js
@@ -18,11 +18,11 @@ export default deepmerge(italianMessages, {
         playCount: 'Riproduzioni',
         trackNumber: '#',
         size: 'Dimensioni',
-        updatedAt: 'Ultimo aggiornamento'
+        updatedAt: 'Ultimo aggiornamento',
       },
       bulk: {
-        addToQueue: 'Aggiungi alla coda'
-      }
+        addToQueue: 'Aggiungi alla coda',
+      },
     },
     album: {
       name: 'Album |||| Album',
@@ -34,21 +34,21 @@ export default deepmerge(italianMessages, {
         playCount: 'Riproduzioni',
         compilation: 'Compilation',
         duration: 'Durata',
-        year: 'Anno'
+        year: 'Anno',
       },
       actions: {
         playAll: 'Riproduci',
         playNext: 'Riproduci come successivo',
         addToQueue: 'Aggiungi alla coda',
-        shuffle: 'Riprodici casualmente'
-      }
+        shuffle: 'Riprodici casualmente',
+      },
     },
     artist: {
       name: 'Artista |||| Artisti',
       fields: {
         name: 'Nome',
-        albumCount: 'Album'
-      }
+        albumCount: 'Album',
+      },
     },
     user: {
       name: 'Utente |||| Utenti',
@@ -57,8 +57,8 @@ export default deepmerge(italianMessages, {
         isAdmin: 'Amministratore',
         lastLoginAt: 'Ultimo accesso',
         updatedAt: 'Ultima modifica',
-        name: 'Nome'
-      }
+        name: 'Nome',
+      },
     },
     player: {
       name: 'Client |||| Client',
@@ -68,8 +68,8 @@ export default deepmerge(italianMessages, {
         maxBitRate: 'Bitrate massimo',
         client: 'Applicazione',
         userName: 'Utente',
-        lastSeen: 'Ultimo acesso'
-      }
+        lastSeen: 'Ultimo acesso',
+      },
     },
     transcoding: {
       name: 'Transcodifica |||| Transcodifiche',
@@ -77,21 +77,21 @@ export default deepmerge(italianMessages, {
         name: 'Nome',
         targetFormat: 'Formato',
         defaultBitRate: 'Bitrate predefinito',
-        command: 'Comando'
-      }
-    }
+        command: 'Comando',
+      },
+    },
   },
   ra: {
     auth: {
       welcome1: 'Grazie per aver installato Navidrome!',
       welcome2: 'Per iniziare, crea un amministratore',
       confirmPassword: 'Conferma la password',
-      buttonCreateAdmin: 'Crea amministratore'
+      buttonCreateAdmin: 'Crea amministratore',
     },
     validation: {
       invalidChars: 'Per favore usa solo lettere e numeri',
-      passwordDoesNotMatch: 'Le password non coincidono'
-    }
+      passwordDoesNotMatch: 'Le password non coincidono',
+    },
   },
   menu: {
     library: 'Libreria',
@@ -101,9 +101,9 @@ export default deepmerge(italianMessages, {
       name: 'Personale',
       options: {
         theme: 'Tema',
-        language: 'Lingua'
-      }
-    }
+        language: 'Lingua',
+      },
+    },
   },
   player: {
     playListsText: 'Coda',
@@ -121,7 +121,7 @@ export default deepmerge(italianMessages, {
       order: 'In ordine',
       orderLoop: 'Ripeti',
       singleLoop: 'Ripeti una volta',
-      shufflePlay: 'Casuale'
-    }
-  }
+      shufflePlay: 'Casuale',
+    },
+  },
 })
diff --git a/ui/src/i18n/pt.js b/ui/src/i18n/pt.js
index 9e726825b..c023b2bcc 100644
--- a/ui/src/i18n/pt.js
+++ b/ui/src/i18n/pt.js
@@ -18,11 +18,11 @@ export default deepmerge(portugueseMessages, {
         playCount: 'Execuções',
         trackNumber: '#',
         size: 'Tamanho',
-        updatedAt: 'Últ. Atualização'
+        updatedAt: 'Últ. Atualização',
       },
       bulk: {
-        addToQueue: 'Play Later'
-      }
+        addToQueue: 'Play Later',
+      },
     },
     album: {
       name: 'Álbum |||| Álbuns',
@@ -34,21 +34,21 @@ export default deepmerge(portugueseMessages, {
         playCount: 'Execuções',
         compilation: 'Coletânea',
         duration: 'Duração',
-        year: 'Ano'
+        year: 'Ano',
       },
       actions: {
         playAll: 'Play',
         playNext: 'Play Next',
         addToQueue: 'Play Later',
-        shuffle: 'Shuffle'
-      }
+        shuffle: 'Shuffle',
+      },
     },
     artist: {
       name: 'Artista |||| Artistas',
       fields: {
         name: 'Nome',
-        albumCount: 'Total de Álbuns'
-      }
+        albumCount: 'Total de Álbuns',
+      },
     },
     user: {
       name: 'Usuário |||| Usuários',
@@ -57,8 +57,8 @@ export default deepmerge(portugueseMessages, {
         isAdmin: 'Admin?',
         lastLoginAt: 'Últ. Login',
         updatedAt: 'Últ. Atualização',
-        name: 'Nome'
-      }
+        name: 'Nome',
+      },
     },
     player: {
       name: 'Tocador |||| Tocadores',
@@ -68,8 +68,8 @@ export default deepmerge(portugueseMessages, {
         maxBitRate: 'Bitrate máx',
         client: 'Cliente',
         userName: 'Usuário',
-        lastSeen: 'Últ. acesso'
-      }
+        lastSeen: 'Últ. acesso',
+      },
     },
     transcoding: {
       name: 'Conversão |||| Conversões',
@@ -77,21 +77,21 @@ export default deepmerge(portugueseMessages, {
         name: 'Nome',
         targetFormat: 'Formato',
         defaultBitRate: 'Bitrate padrão',
-        command: 'Comando'
-      }
-    }
+        command: 'Comando',
+      },
+    },
   },
   ra: {
     auth: {
       welcome1: 'Obrigado por instalar Navidrome!',
       welcome2: 'Para iniciar, crie um usuário admin',
       confirmPassword: 'Confirme a senha',
-      buttonCreateAdmin: 'Criar Admin'
+      buttonCreateAdmin: 'Criar Admin',
     },
     validation: {
       invalidChars: 'Somente use letras e numeros',
-      passwordDoesNotMatch: 'Senha não confere'
-    }
+      passwordDoesNotMatch: 'Senha não confere',
+    },
   },
   menu: {
     library: 'Biblioteca',
@@ -101,9 +101,9 @@ export default deepmerge(portugueseMessages, {
       name: 'Pessoal',
       options: {
         theme: 'Tema',
-        language: 'Língua'
-      }
-    }
+        language: 'Língua',
+      },
+    },
   },
   player: {
     playListsText: 'Fila de Execução',
@@ -121,7 +121,7 @@ export default deepmerge(portugueseMessages, {
       order: 'Em ordem',
       orderLoop: 'Repetir tudo',
       singleLoop: 'Repetir',
-      shufflePlay: 'Aleatório'
-    }
-  }
+      shufflePlay: 'Aleatório',
+    },
+  },
 })
diff --git a/ui/src/layout/AppBar.js b/ui/src/layout/AppBar.js
index 92ffb117c..583f08caa 100644
--- a/ui/src/layout/AppBar.js
+++ b/ui/src/layout/AppBar.js
@@ -3,7 +3,7 @@ import {
   AppBar as RAAppBar,
   MenuItemLink,
   UserMenu,
-  useTranslate
+  useTranslate,
 } from 'react-admin'
 import { makeStyles } from '@material-ui/core'
 import InfoIcon from '@material-ui/icons/Info'
@@ -11,8 +11,8 @@ import config from '../config'
 
 const useStyles = makeStyles((theme) => ({
   menuItem: {
-    color: theme.palette.text.secondary
-  }
+    color: theme.palette.text.secondary,
+  },
 }))
 
 const VersionMenu = forwardRef((props, ref) => {
@@ -23,7 +23,7 @@ const VersionMenu = forwardRef((props, ref) => {
       ref={ref}
       to="#"
       primaryText={translate('menu.version', {
-        version: config.version
+        version: config.version,
       })}
       leftIcon={<InfoIcon />}
       className={classes.menuItem}
diff --git a/ui/src/layout/Layout.js b/ui/src/layout/Layout.js
index ee0ce105c..1df7c1648 100644
--- a/ui/src/layout/Layout.js
+++ b/ui/src/layout/Layout.js
@@ -7,7 +7,7 @@ import AppBar from './AppBar'
 import themes from '../themes'
 
 const useStyles = makeStyles({
-  root: { paddingBottom: (props) => (props.addPadding ? '80px' : 0) }
+  root: { paddingBottom: (props) => (props.addPadding ? '80px' : 0) },
 })
 
 export default (props) => {
diff --git a/ui/src/layout/Login.js b/ui/src/layout/Login.js
index 1825a4cb5..f448d2962 100644
--- a/ui/src/layout/Login.js
+++ b/ui/src/layout/Login.js
@@ -27,35 +27,35 @@ const useStyles = makeStyles((theme) => ({
     background: `url(${config.loginBackgroundURL})`,
     backgroundRepeat: 'no-repeat',
     backgroundSize: 'cover',
-    backgroundPosition: 'center'
+    backgroundPosition: 'center',
   },
   card: {
     minWidth: 300,
-    marginTop: '6em'
+    marginTop: '6em',
   },
   avatar: {
     margin: '1em',
     display: 'flex',
-    justifyContent: 'center'
+    justifyContent: 'center',
   },
   icon: {
-    backgroundColor: theme.palette.secondary.main
+    backgroundColor: theme.palette.secondary.main,
   },
   systemName: {
     marginTop: '1em',
     display: 'flex',
     justifyContent: 'center',
-    color: 'blue' //theme.palette.grey[500]
+    color: 'blue', //theme.palette.grey[500]
   },
   form: {
-    padding: '0 1em 1em 1em'
+    padding: '0 1em 1em 1em',
   },
   input: {
-    marginTop: '1em'
+    marginTop: '1em',
   },
   actions: {
-    padding: '0 1em 1em 1em'
-  }
+    padding: '0 1em 1em 1em',
+  },
 }))
 
 const renderInput = ({
@@ -274,7 +274,7 @@ const Login = ({ location }) => {
 
 Login.propTypes = {
   authProvider: PropTypes.func,
-  previousRoute: PropTypes.string
+  previousRoute: PropTypes.string,
 }
 
 // We need to put the ThemeProvider decoration in another component
diff --git a/ui/src/layout/Menu.js b/ui/src/layout/Menu.js
index 572ad332e..ac66d2221 100644
--- a/ui/src/layout/Menu.js
+++ b/ui/src/layout/Menu.js
@@ -17,9 +17,9 @@ const translatedResourceName = (resource, translate) =>
       resource.options && resource.options.label
         ? translate(resource.options.label, {
             smart_count: 2,
-            _: resource.options.label
+            _: resource.options.label,
           })
-        : inflection.humanize(inflection.pluralize(resource.name))
+        : inflection.humanize(inflection.pluralize(resource.name)),
   })
 
 const Menu = ({ onMenuClick, dense, logout }) => {
@@ -31,7 +31,7 @@ const Menu = ({ onMenuClick, dense, logout }) => {
   // TODO State is not persisted in mobile when you close the sidebar menu. Move to redux?
   const [state, setState] = useState({
     menuLibrary: true,
-    menuSettings: false
+    menuSettings: false,
   })
 
   const handleToggle = (menu) => {
diff --git a/ui/src/layout/PersonalMenu.js b/ui/src/layout/PersonalMenu.js
index 8f0e46d7d..2c098d3f0 100644
--- a/ui/src/layout/PersonalMenu.js
+++ b/ui/src/layout/PersonalMenu.js
@@ -5,8 +5,8 @@ import TuneIcon from '@material-ui/icons/Tune'
 
 const useStyles = makeStyles((theme) => ({
   menuItem: {
-    color: theme.palette.text.secondary
-  }
+    color: theme.palette.text.secondary,
+  },
 }))
 
 const PersonalMenu = forwardRef(({ onClick, sidebarIsOpen, dense }, ref) => {
diff --git a/ui/src/layout/SubMenu.js b/ui/src/layout/SubMenu.js
index 1bd5a4afb..f2893d182 100644
--- a/ui/src/layout/SubMenu.js
+++ b/ui/src/layout/SubMenu.js
@@ -14,12 +14,12 @@ const useStyles = makeStyles((theme) => ({
   icon: { minWidth: theme.spacing(5) },
   sidebarIsOpen: {
     paddingLeft: 25,
-    transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms'
+    transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',
   },
   sidebarIsClosed: {
     paddingLeft: 0,
-    transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms'
-  }
+    transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',
+  },
 }))
 
 const SubMenu = ({
@@ -29,7 +29,7 @@ const SubMenu = ({
   name,
   icon,
   children,
-  dense
+  dense,
 }) => {
   const translate = useTranslate()
   const classes = useStyles()
diff --git a/ui/src/personal/Personal.js b/ui/src/personal/Personal.js
index 53bfa6777..2db40445f 100644
--- a/ui/src/personal/Personal.js
+++ b/ui/src/personal/Personal.js
@@ -7,7 +7,7 @@ import {
   SelectInput,
   useTranslate,
   useSetLocale,
-  useLocale
+  useLocale,
 } from 'react-admin'
 import { makeStyles } from '@material-ui/core/styles'
 import { changeTheme } from './actions'
@@ -15,7 +15,7 @@ import themes from '../themes'
 import i18n from '../i18n'
 
 const useStyles = makeStyles({
-  root: { marginTop: '1em' }
+  root: { marginTop: '1em' },
 })
 
 const SelectLanguage = (props) => {
diff --git a/ui/src/personal/actions.js b/ui/src/personal/actions.js
index bbfbbf995..f41bc2fc5 100644
--- a/ui/src/personal/actions.js
+++ b/ui/src/personal/actions.js
@@ -2,5 +2,5 @@ export const CHANGE_THEME = 'CHANGE_THEME'
 
 export const changeTheme = (theme) => ({
   type: CHANGE_THEME,
-  payload: theme
+  payload: theme,
 })
diff --git a/ui/src/player/PlayerEdit.js b/ui/src/player/PlayerEdit.js
index a2707f9c7..fbb98bf85 100644
--- a/ui/src/player/PlayerEdit.js
+++ b/ui/src/player/PlayerEdit.js
@@ -6,7 +6,7 @@ import {
   required,
   SimpleForm,
   SelectInput,
-  ReferenceInput
+  ReferenceInput,
 } from 'react-admin'
 import { Title } from '../common'
 
@@ -39,7 +39,7 @@ const PlayerEdit = (props) => (
           { id: 192, name: '192' },
           { id: 256, name: '256' },
           { id: 320, name: '320' },
-          { id: 0, name: 'Unlimited' }
+          { id: 0, name: 'Unlimited' },
         ]}
       />
       <TextField source="client" />
diff --git a/ui/src/player/PlayerList.js b/ui/src/player/PlayerList.js
index 5cab3bb44..10c72a4a5 100644
--- a/ui/src/player/PlayerList.js
+++ b/ui/src/player/PlayerList.js
@@ -5,7 +5,7 @@ import {
   TextField,
   DateField,
   FunctionField,
-  ReferenceField
+  ReferenceField,
 } from 'react-admin'
 import { useMediaQuery } from '@material-ui/core'
 import { SimpleList, Title } from '../common'
@@ -21,18 +21,18 @@ const PlayerList = (props) => {
           tertiaryText={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')}
         />
       ) : (
-      <Datagrid rowClick="edit">
-        <TextField source="name" />
-        <ReferenceField source="transcodingId" reference="transcoding">
+        <Datagrid rowClick="edit">
           <TextField source="name" />
-        </ReferenceField>
-        <FunctionField
-          source="maxBitRate"
-          render={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')}
-        />
-        <DateField source="lastSeen" showTime />
-      </Datagrid>
-        )}
+          <ReferenceField source="transcodingId" reference="transcoding">
+            <TextField source="name" />
+          </ReferenceField>
+          <FunctionField
+            source="maxBitRate"
+            render={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')}
+          />
+          <DateField source="lastSeen" showTime />
+        </Datagrid>
+      )}
     </List>
   )
 }
diff --git a/ui/src/player/index.js b/ui/src/player/index.js
index 8bd817a0b..823df0103 100644
--- a/ui/src/player/index.js
+++ b/ui/src/player/index.js
@@ -5,5 +5,5 @@ import PlayerEdit from './PlayerEdit'
 export default {
   list: PlayerList,
   edit: PlayerEdit,
-  icon: RadioIcon
+  icon: RadioIcon,
 }
diff --git a/ui/src/song/AddToQueueButton.js b/ui/src/song/AddToQueueButton.js
index 702753fe5..638e00caa 100644
--- a/ui/src/song/AddToQueueButton.js
+++ b/ui/src/song/AddToQueueButton.js
@@ -3,7 +3,7 @@ import {
   Button,
   useDataProvider,
   useTranslate,
-  useUnselectAll
+  useUnselectAll,
 } from 'react-admin'
 import { useDispatch } from 'react-redux'
 import { addTrack } from '../audioplayer'
diff --git a/ui/src/song/AlbumLinkField.js b/ui/src/song/AlbumLinkField.js
index 493e5f633..17fceca75 100644
--- a/ui/src/song/AlbumLinkField.js
+++ b/ui/src/song/AlbumLinkField.js
@@ -11,5 +11,5 @@ export const AlbumLinkField = (props) => (
 )
 
 AlbumLinkField.defaultProps = {
-  addLabel: true
+  addLabel: true,
 }
diff --git a/ui/src/song/SongList.js b/ui/src/song/SongList.js
index 2924224d6..f81d768f4 100644
--- a/ui/src/song/SongList.js
+++ b/ui/src/song/SongList.js
@@ -6,7 +6,7 @@ import {
   List,
   NumberField,
   SearchInput,
-  TextField
+  TextField,
 } from 'react-admin'
 import { useMediaQuery } from '@material-ui/core'
 import {
@@ -14,7 +14,7 @@ import {
   Pagination,
   PlayButton,
   SimpleList,
-  Title
+  Title,
 } from '../common'
 import { useDispatch } from 'react-redux'
 import { addTrack, setTrack } from '../audioplayer'
diff --git a/ui/src/song/index.js b/ui/src/song/index.js
index 3cd49a66b..949bd6184 100644
--- a/ui/src/song/index.js
+++ b/ui/src/song/index.js
@@ -3,5 +3,5 @@ import SongList from './SongList'
 
 export default {
   list: SongList,
-  icon: MusicNoteIcon
+  icon: MusicNoteIcon,
 }
diff --git a/ui/src/store/createAdminStore.js b/ui/src/store/createAdminStore.js
index c9289b8fd..e07cf8e7f 100644
--- a/ui/src/store/createAdminStore.js
+++ b/ui/src/store/createAdminStore.js
@@ -10,12 +10,12 @@ export default ({
   authProvider,
   dataProvider,
   history,
-  customReducers = {}
+  customReducers = {},
 }) => {
   const reducer = combineReducers({
     admin: adminReducer,
     router: connectRouter(history),
-    ...customReducers
+    ...customReducers,
   })
   const resettableAppReducer = (state, action) =>
     reducer(action.type !== USER_LOGOUT ? state : undefined, action)
@@ -31,7 +31,7 @@ export default ({
       window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&
       window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
         trace: true,
-        traceLimit: 25
+        traceLimit: 25,
       })) ||
     compose
 
@@ -48,7 +48,7 @@ export default ({
       saveState({
         theme: state.theme,
         queue: state.queue,
-        albumView: state.albumView
+        albumView: state.albumView,
       })
     }),
     1000
diff --git a/ui/src/themes/dark.js b/ui/src/themes/dark.js
index 34edbd9cd..73e80eb5c 100644
--- a/ui/src/themes/dark.js
+++ b/ui/src/themes/dark.js
@@ -4,19 +4,19 @@ export default {
   themeName: 'Dark (default)',
   palette: {
     primary: {
-      main: '#90caf9'
+      main: '#90caf9',
     },
     secondary: blue,
-    type: 'dark'
+    type: 'dark',
   },
   overrides: {
     MuiFormGroup: {
       root: {
-        color: 'white'
-      }
-    }
+        color: 'white',
+      },
+    },
   },
   player: {
-    theme: 'dark'
-  }
+    theme: 'dark',
+  },
 }
diff --git a/ui/src/themes/light.js b/ui/src/themes/light.js
index d176a320c..843b1f7cd 100644
--- a/ui/src/themes/light.js
+++ b/ui/src/themes/light.js
@@ -5,20 +5,20 @@ export default {
       light: '#5f5fc4',
       dark: '#001064',
       main: '#283593',
-      contrastText: '#fff'
-    }
+      contrastText: '#fff',
+    },
   },
   overrides: {
     MuiFilledInput: {
       root: {
         backgroundColor: 'rgba(0, 0, 0, 0.04)',
         '&$disabled': {
-          backgroundColor: 'rgba(0, 0, 0, 0.04)'
-        }
-      }
-    }
+          backgroundColor: 'rgba(0, 0, 0, 0.04)',
+        },
+      },
+    },
   },
   player: {
-    theme: 'light'
-  }
+    theme: 'light',
+  },
 }
diff --git a/ui/src/transcoding/TranscodingCreate.js b/ui/src/transcoding/TranscodingCreate.js
index 393a224cf..64684428b 100644
--- a/ui/src/transcoding/TranscodingCreate.js
+++ b/ui/src/transcoding/TranscodingCreate.js
@@ -4,7 +4,7 @@ import {
   SelectInput,
   Create,
   required,
-  SimpleForm
+  SimpleForm,
 } from 'react-admin'
 import { Title } from '../common'
 
@@ -30,7 +30,7 @@ const TranscodingCreate = (props) => (
           { id: 160, name: '160' },
           { id: 192, name: '192' },
           { id: 256, name: '256' },
-          { id: 320, name: '320' }
+          { id: 320, name: '320' },
         ]}
         defaultValue={192}
       />
diff --git a/ui/src/transcoding/TranscodingEdit.js b/ui/src/transcoding/TranscodingEdit.js
index 923f3d1a4..406fecfe4 100644
--- a/ui/src/transcoding/TranscodingEdit.js
+++ b/ui/src/transcoding/TranscodingEdit.js
@@ -24,7 +24,7 @@ const TranscodingEdit = (props) => (
           { id: 160, name: '160' },
           { id: 192, name: '192' },
           { id: 256, name: '256' },
-          { id: 320, name: '320' }
+          { id: 320, name: '320' },
         ]}
       />
       <TextInput source="command" fullWidth validate={[required()]} />
diff --git a/ui/src/transcoding/TranscodingList.js b/ui/src/transcoding/TranscodingList.js
index 765ed3d82..3cfa754fc 100644
--- a/ui/src/transcoding/TranscodingList.js
+++ b/ui/src/transcoding/TranscodingList.js
@@ -6,7 +6,11 @@ import { SimpleList, Title } from '../common'
 const TranscodingList = (props) => {
   const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs'))
   return (
-    <List title={<Title subTitle={'Transcodings'} />} exporter={false} {...props}>
+    <List
+      title={<Title subTitle={'Transcodings'} />}
+      exporter={false}
+      {...props}
+    >
       {isXsmall ? (
         <SimpleList
           primaryText={(r) => r.name}
@@ -14,13 +18,13 @@ const TranscodingList = (props) => {
           tertiaryText={(r) => r.defaultBitRate}
         />
       ) : (
-      <Datagrid rowClick="edit">
-        <TextField source="name" />
-        <TextField source="targetFormat" />
-        <TextField source="defaultBitRate" />
-        <TextField source="command" />
-      </Datagrid>
-        )}
+        <Datagrid rowClick="edit">
+          <TextField source="name" />
+          <TextField source="targetFormat" />
+          <TextField source="defaultBitRate" />
+          <TextField source="command" />
+        </Datagrid>
+      )}
     </List>
   )
 }
diff --git a/ui/src/transcoding/index.js b/ui/src/transcoding/index.js
index 72a413950..25cd643f8 100644
--- a/ui/src/transcoding/index.js
+++ b/ui/src/transcoding/index.js
@@ -7,5 +7,5 @@ export default {
   list: TranscodingList,
   edit: TranscodingEdit,
   create: TranscodingCreate,
-  icon: TransformIcon
+  icon: TransformIcon,
 }
diff --git a/ui/src/user/UserCreate.js b/ui/src/user/UserCreate.js
index 1110dbfa5..df7cca604 100644
--- a/ui/src/user/UserCreate.js
+++ b/ui/src/user/UserCreate.js
@@ -6,7 +6,7 @@ import {
   PasswordInput,
   required,
   email,
-  SimpleForm
+  SimpleForm,
 } from 'react-admin'
 import { Title } from '../common'
 
diff --git a/ui/src/user/UserEdit.js b/ui/src/user/UserEdit.js
index a84b22aa0..68d7bb2c1 100644
--- a/ui/src/user/UserEdit.js
+++ b/ui/src/user/UserEdit.js
@@ -7,7 +7,7 @@ import {
   Edit,
   required,
   email,
-  SimpleForm
+  SimpleForm,
 } from 'react-admin'
 import { Title } from '../common'
 
diff --git a/ui/src/user/UserList.js b/ui/src/user/UserList.js
index 5a900ba50..e30f074e7 100644
--- a/ui/src/user/UserList.js
+++ b/ui/src/user/UserList.js
@@ -7,7 +7,7 @@ import {
   List,
   SearchInput,
   SimpleList,
-  TextField
+  TextField,
 } from 'react-admin'
 import { useMediaQuery } from '@material-ui/core'
 import { Title } from '../common'
diff --git a/ui/src/user/index.js b/ui/src/user/index.js
index 34c9f8c14..c0bef4304 100644
--- a/ui/src/user/index.js
+++ b/ui/src/user/index.js
@@ -7,5 +7,5 @@ export default {
   list: UserList,
   edit: UserEdit,
   create: UserCreate,
-  icon: Group
+  icon: Group,
 }