Upgrade Prettier to 2.0.4. Reformatted all JS files

This commit is contained in:
Deluan 2020-04-20 09:09:29 -04:00
parent de115ff466
commit b3f70538a9
55 changed files with 318 additions and 286 deletions

52
ui/package-lock.json generated
View File

@ -1643,6 +1643,7 @@
"version": "25.4.0", "version": "25.4.0",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz", "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.4.0.tgz",
"integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==", "integrity": "sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw==",
"dev": true,
"requires": { "requires": {
"@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1", "@types/istanbul-reports": "^1.1.1",
@ -1936,6 +1937,7 @@
"version": "7.2.1", "version": "7.2.1",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.2.1.tgz", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.2.1.tgz",
"integrity": "sha512-xIGoHlQ2ZiEL1dJIFKNmLDypzYF+4OJTTASRctl/aoIDaS5y/pRVHRigoqvPUV11mdJoR71IIgi/6UviMgyz4g==", "integrity": "sha512-xIGoHlQ2ZiEL1dJIFKNmLDypzYF+4OJTTASRctl/aoIDaS5y/pRVHRigoqvPUV11mdJoR71IIgi/6UviMgyz4g==",
"dev": true,
"requires": { "requires": {
"@babel/runtime": "^7.9.2", "@babel/runtime": "^7.9.2",
"@types/testing-library__dom": "^7.0.0", "@types/testing-library__dom": "^7.0.0",
@ -1948,6 +1950,7 @@
"version": "7.9.2", "version": "7.9.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
"integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
"dev": true,
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
@ -1956,6 +1959,7 @@
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.0.2.tgz", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.0.2.tgz",
"integrity": "sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w==", "integrity": "sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w==",
"dev": true,
"requires": { "requires": {
"@babel/runtime": "^7.7.4", "@babel/runtime": "^7.7.4",
"@babel/runtime-corejs3": "^7.7.4" "@babel/runtime-corejs3": "^7.7.4"
@ -1964,7 +1968,8 @@
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.13.5", "version": "0.13.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", "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", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.5.0.tgz", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.5.0.tgz",
"integrity": "sha512-7sWHrpxG4Yd8TmryI7Rtbx8Ff4mbs3ASye3oshQIuHvsCR+QHgr7rTR/PfeXvOmwUwR36wSTTAvrLKsPmr6VEQ==", "integrity": "sha512-7sWHrpxG4Yd8TmryI7Rtbx8Ff4mbs3ASye3oshQIuHvsCR+QHgr7rTR/PfeXvOmwUwR36wSTTAvrLKsPmr6VEQ==",
"dev": true,
"requires": { "requires": {
"@babel/runtime": "^7.9.2", "@babel/runtime": "^7.9.2",
"@types/testing-library__jest-dom": "^5.0.2", "@types/testing-library__jest-dom": "^5.0.2",
@ -1988,6 +1994,7 @@
"version": "7.9.2", "version": "7.9.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
"integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
"dev": true,
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
@ -1995,7 +2002,8 @@
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.13.5", "version": "0.13.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", "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", "version": "10.0.2",
"resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.0.2.tgz", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.0.2.tgz",
"integrity": "sha512-YT6Mw0oJz7R6vlEkmo1FlUD+K15FeXApOB5Ffm9zooFVnrwkt00w18dUJFMOh1yRp9wTdVRonbor7o4PIpFCmA==", "integrity": "sha512-YT6Mw0oJz7R6vlEkmo1FlUD+K15FeXApOB5Ffm9zooFVnrwkt00w18dUJFMOh1yRp9wTdVRonbor7o4PIpFCmA==",
"dev": true,
"requires": { "requires": {
"@babel/runtime": "^7.9.2", "@babel/runtime": "^7.9.2",
"@testing-library/dom": "^7.1.0", "@testing-library/dom": "^7.1.0",
@ -2013,6 +2022,7 @@
"version": "7.9.2", "version": "7.9.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
"integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
"dev": true,
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
@ -2020,14 +2030,16 @@
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.13.5", "version": "0.13.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", "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": { "@testing-library/user-event": {
"version": "10.0.2", "version": "10.0.2",
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-10.0.2.tgz", "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": { "@types/babel__core": {
"version": "7.1.6", "version": "7.1.6",
@ -2117,6 +2129,7 @@
"version": "25.2.1", "version": "25.2.1",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz",
"integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==",
"dev": true,
"requires": { "requires": {
"jest-diff": "^25.2.1", "jest-diff": "^25.2.1",
"pretty-format": "^25.2.1" "pretty-format": "^25.2.1"
@ -2165,6 +2178,7 @@
"version": "16.9.6", "version": "16.9.6",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.6.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.6.tgz",
"integrity": "sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==", "integrity": "sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==",
"dev": true,
"requires": { "requires": {
"@types/react": "*" "@types/react": "*"
} }
@ -2186,6 +2200,7 @@
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.0.1.tgz",
"integrity": "sha512-WokGRksRJb3Dla6h02/0/NNHTkjsj4S8aJZiwMj/5/UL8VZ1iCe3H8SHzfpmBeH8Vp4SPRT8iC2o9kYULFhDIw==", "integrity": "sha512-WokGRksRJb3Dla6h02/0/NNHTkjsj4S8aJZiwMj/5/UL8VZ1iCe3H8SHzfpmBeH8Vp4SPRT8iC2o9kYULFhDIw==",
"dev": true,
"requires": { "requires": {
"pretty-format": "^25.1.0" "pretty-format": "^25.1.0"
} }
@ -2194,6 +2209,7 @@
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.0.3.tgz",
"integrity": "sha512-NdbKc6yseg6uq4UJFwimPws0iwsGugVbPoOTP2EH+PJMJKiZsoSg5F2H3XYweOyytftCOuIMuXifBUrF9CSvaQ==", "integrity": "sha512-NdbKc6yseg6uq4UJFwimPws0iwsGugVbPoOTP2EH+PJMJKiZsoSg5F2H3XYweOyytftCOuIMuXifBUrF9CSvaQ==",
"dev": true,
"requires": { "requires": {
"@types/jest": "*" "@types/jest": "*"
} }
@ -2202,6 +2218,7 @@
"version": "10.0.1", "version": "10.0.1",
"resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-10.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-10.0.1.tgz",
"integrity": "sha512-RbDwmActAckbujLZeVO/daSfdL1pnjVqas25UueOkAY5r7vriavWf0Zqg7ghXMHa8ycD/kLkv8QOj31LmSYwww==", "integrity": "sha512-RbDwmActAckbujLZeVO/daSfdL1pnjVqas25UueOkAY5r7vriavWf0Zqg7ghXMHa8ycD/kLkv8QOj31LmSYwww==",
"dev": true,
"requires": { "requires": {
"@types/react-dom": "*", "@types/react-dom": "*",
"@types/testing-library__dom": "*", "@types/testing-library__dom": "*",
@ -2212,6 +2229,7 @@
"version": "15.0.4", "version": "15.0.4",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz",
"integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==",
"dev": true,
"requires": { "requires": {
"@types/yargs-parser": "*" "@types/yargs-parser": "*"
} }
@ -4519,7 +4537,8 @@
"css.escape": { "css.escape": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
"integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=",
"dev": true
}, },
"cssdb": { "cssdb": {
"version": "4.4.0", "version": "4.4.0",
@ -4893,7 +4912,8 @@
"diff-sequences": { "diff-sequences": {
"version": "25.2.6", "version": "25.2.6",
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", "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": { "diffie-hellman": {
"version": "5.0.3", "version": "5.0.3",
@ -4947,7 +4967,8 @@
"dom-accessibility-api": { "dom-accessibility-api": {
"version": "0.4.3", "version": "0.4.3",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.4.3.tgz", "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": { "dom-align": {
"version": "1.11.1", "version": "1.11.1",
@ -8060,6 +8081,7 @@
"version": "25.4.0", "version": "25.4.0",
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.4.0.tgz", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.4.0.tgz",
"integrity": "sha512-kklLbJVXW0y8UKOWOdYhI6TH5MG6QAxrWiBMgQaPIuhj3dNFGirKCd+/xfplBXICQ7fI+3QcqHm9p9lWu1N6ug==", "integrity": "sha512-kklLbJVXW0y8UKOWOdYhI6TH5MG6QAxrWiBMgQaPIuhj3dNFGirKCd+/xfplBXICQ7fI+3QcqHm9p9lWu1N6ug==",
"dev": true,
"requires": { "requires": {
"chalk": "^3.0.0", "chalk": "^3.0.0",
"diff-sequences": "^25.2.6", "diff-sequences": "^25.2.6",
@ -8334,7 +8356,8 @@
"jest-get-type": { "jest-get-type": {
"version": "25.2.6", "version": "25.2.6",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "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": { "jest-haste-map": {
"version": "24.9.0", "version": "24.9.0",
@ -9069,6 +9092,7 @@
"version": "25.4.0", "version": "25.4.0",
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.4.0.tgz", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.4.0.tgz",
"integrity": "sha512-yPMdtj7YDgXhnGbc66bowk8AkQ0YwClbbwk3Kzhn5GVDrciiCr27U4NJRbrqXbTdtxjImONITg2LiRIw650k5A==", "integrity": "sha512-yPMdtj7YDgXhnGbc66bowk8AkQ0YwClbbwk3Kzhn5GVDrciiCr27U4NJRbrqXbTdtxjImONITg2LiRIw650k5A==",
"dev": true,
"requires": { "requires": {
"chalk": "^3.0.0", "chalk": "^3.0.0",
"jest-diff": "^25.4.0", "jest-diff": "^25.4.0",
@ -10691,7 +10715,8 @@
"min-indent": { "min-indent": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", "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": { "mini-create-react-context": {
"version": "0.3.2", "version": "0.3.2",
@ -12716,9 +12741,9 @@
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
}, },
"prettier": { "prettier": {
"version": "1.19.1", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz",
"integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==",
"dev": true "dev": true
}, },
"pretty-bytes": { "pretty-bytes": {
@ -12739,6 +12764,7 @@
"version": "25.4.0", "version": "25.4.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.4.0.tgz",
"integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==", "integrity": "sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==",
"dev": true,
"requires": { "requires": {
"@jest/types": "^25.4.0", "@jest/types": "^25.4.0",
"ansi-regex": "^5.0.0", "ansi-regex": "^5.0.0",
@ -13931,6 +13957,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
"integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
"requires": { "requires": {
"indent-string": "^4.0.0", "indent-string": "^4.0.0",
"strip-indent": "^3.0.0" "strip-indent": "^3.0.0"
@ -15407,6 +15434,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
"integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
"requires": { "requires": {
"min-indent": "^1.0.0" "min-indent": "^1.0.0"
} }

View File

@ -21,10 +21,10 @@
"react-scripts": "^3.4.1" "react-scripts": "^3.4.1"
}, },
"devDependencies": { "devDependencies": {
"prettier": "^1.19.1",
"@testing-library/jest-dom": "^5.5.0", "@testing-library/jest-dom": "^5.5.0",
"@testing-library/react": "^10.0.2", "@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": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",

View File

@ -2,7 +2,7 @@ import {
Button, Button,
sanitizeListRestProps, sanitizeListRestProps,
TopToolbar, TopToolbar,
useTranslate useTranslate,
} from 'react-admin' } from 'react-admin'
import PlayArrowIcon from '@material-ui/icons/PlayArrow' import PlayArrowIcon from '@material-ui/icons/PlayArrow'
import ShuffleIcon from '@material-ui/icons/Shuffle' import ShuffleIcon from '@material-ui/icons/Shuffle'
@ -65,5 +65,5 @@ export const AlbumActions = ({
AlbumActions.defaultProps = { AlbumActions.defaultProps = {
selectedIds: [], selectedIds: [],
onUnselectItems: () => null onUnselectItems: () => null,
} }

View File

@ -9,29 +9,29 @@ import subsonic from '../subsonic'
const useStyles = makeStyles((theme) => ({ const useStyles = makeStyles((theme) => ({
root: { root: {
margin: '20px' margin: '20px',
}, },
gridListTile: { gridListTile: {
minHeight: '180px', minHeight: '180px',
minWidth: '180px' minWidth: '180px',
}, },
cover: { cover: {
display: 'inline-block', display: 'inline-block',
width: '100%', width: '100%',
height: '100%' height: '100%',
}, },
tileBar: { tileBar: {
textAlign: 'center', textAlign: 'center',
background: 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: { albumArtistName: {
whiteSpace: 'nowrap', whiteSpace: 'nowrap',
overflow: 'hidden', overflow: 'hidden',
textOverflow: 'ellipsis', textOverflow: 'ellipsis',
textAlign: 'center', textAlign: 'center',
fontSize: '1em' fontSize: '1em',
} },
})) }))
const getColsForWidth = (width) => { const getColsForWidth = (width) => {

View File

@ -9,7 +9,7 @@ import {
ReferenceInput, ReferenceInput,
SearchInput, SearchInput,
Pagination, Pagination,
useTranslate useTranslate,
} from 'react-admin' } from 'react-admin'
import { Title } from '../common' import { Title } from '../common'
import { withWidth } from '@material-ui/core' import { withWidth } from '@material-ui/core'

View File

@ -35,7 +35,7 @@ const AlbumListActions = ({
showFilter, showFilter,
displayedFilters, displayedFilters,
filterValues, filterValues,
context: 'button' context: 'button',
})} })}
<ButtonGroup <ButtonGroup
variant="text" variant="text"
@ -63,7 +63,7 @@ const AlbumListActions = ({
AlbumListActions.defaultProps = { AlbumListActions.defaultProps = {
selectedIds: [], selectedIds: [],
onUnselectItems: () => null onUnselectItems: () => null,
} }
export default AlbumListActions export default AlbumListActions

View File

@ -7,7 +7,7 @@ import {
FunctionField, FunctionField,
Show, Show,
SimpleShowLayout, SimpleShowLayout,
TextField TextField,
} from 'react-admin' } from 'react-admin'
import { DurationField, RangeField } from '../common' import { DurationField, RangeField } from '../common'
import { useMediaQuery } from '@material-ui/core' import { useMediaQuery } from '@material-ui/core'

View File

@ -6,7 +6,7 @@ import {
ListToolbar, ListToolbar,
TextField, TextField,
useListController, useListController,
DatagridLoading DatagridLoading,
} from 'react-admin' } from 'react-admin'
import classnames from 'classnames' import classnames from 'classnames'
import { useDispatch } from 'react-redux' import { useDispatch } from 'react-redux'
@ -20,7 +20,7 @@ const useStyles = makeStyles(
(theme) => ({ (theme) => ({
root: {}, root: {},
main: { main: {
display: 'flex' display: 'flex',
}, },
content: { content: {
marginTop: 0, marginTop: 0,
@ -28,29 +28,29 @@ const useStyles = makeStyles(
position: 'relative', position: 'relative',
flex: '1 1 auto', flex: '1 1 auto',
[theme.breakpoints.down('xs')]: { [theme.breakpoints.down('xs')]: {
boxShadow: 'none' boxShadow: 'none',
}, },
overflow: 'inherit' overflow: 'inherit',
}, },
bulkActionsDisplayed: { bulkActionsDisplayed: {
marginTop: -theme.spacing(8), marginTop: -theme.spacing(8),
transition: theme.transitions.create('margin-top') transition: theme.transitions.create('margin-top'),
}, },
actions: { actions: {
zIndex: 2, zIndex: 2,
display: 'flex', display: 'flex',
justifyContent: 'flex-end', justifyContent: 'flex-end',
flexWrap: 'wrap' flexWrap: 'wrap',
}, },
noResults: { padding: 20 } noResults: { padding: 20 },
}), }),
{ name: 'RaList' } { name: 'RaList' }
) )
const useStylesListToolbar = makeStyles({ const useStylesListToolbar = makeStyles({
toolbar: { toolbar: {
justifyContent: 'flex-start' justifyContent: 'flex-start',
} },
}) })
const trackName = (r) => { const trackName = (r) => {
@ -88,7 +88,7 @@ const AlbumSongs = (props) => {
<Card <Card
className={classnames(classes.content, { className={classnames(classes.content, {
[classes.bulkActionsDisplayed]: [classes.bulkActionsDisplayed]:
controllerProps.selectedIds.length > 0 controllerProps.selectedIds.length > 0,
})} })}
key={version} key={version}
> >

View File

@ -15,5 +15,5 @@ export const ArtistLinkField = (props) => {
ArtistLinkField.defaultProps = { ArtistLinkField.defaultProps = {
source: 'artistId', source: 'artistId',
addLabel: true addLabel: true,
} }

View File

@ -14,8 +14,8 @@ const albumListParams = {
ALBUM_LIST_NEWEST: { sort: { field: 'created_at', order: 'DESC' } }, ALBUM_LIST_NEWEST: { sort: { field: 'created_at', order: 'DESC' } },
ALBUM_LIST_RECENT: { ALBUM_LIST_RECENT: {
sort: { field: 'play_date', order: 'DESC' }, sort: { field: 'play_date', order: 'DESC' },
filter: { starred: true } filter: { starred: true },
} },
} }
const selectAlbumList = (mode) => ({ type: mode }) const selectAlbumList = (mode) => ({ type: mode })
@ -24,7 +24,7 @@ const albumViewReducer = (
previousState = { previousState = {
mode: ALBUM_MODE_LIST, mode: ALBUM_MODE_LIST,
list: ALBUM_LIST_ALL, list: ALBUM_LIST_ALL,
params: { sort: {}, filter: {} } params: { sort: {}, filter: {} },
}, },
payload payload
) => { ) => {
@ -54,5 +54,5 @@ export {
ALBUM_LIST_STARRED, ALBUM_LIST_STARRED,
albumViewReducer, albumViewReducer,
selectViewMode, selectViewMode,
selectAlbumList selectAlbumList,
} }

View File

@ -5,5 +5,5 @@ import AlbumShow from './AlbumShow'
export default { export default {
list: AlbumList, list: AlbumList,
show: AlbumShow, show: AlbumShow,
icon: AlbumIcon icon: AlbumIcon,
} }

View File

@ -4,44 +4,44 @@ export const useStyles = makeStyles((theme) => ({
container: { container: {
[theme.breakpoints.down('xs')]: { [theme.breakpoints.down('xs')]: {
padding: '0.7em', padding: '0.7em',
minWidth: '24em' minWidth: '24em',
}, },
[theme.breakpoints.up('sm')]: { [theme.breakpoints.up('sm')]: {
padding: '1em', padding: '1em',
minWidth: '32em' minWidth: '32em',
} },
}, },
albumCover: { albumCover: {
display: 'inline-block', display: 'inline-block',
[theme.breakpoints.down('xs')]: { [theme.breakpoints.down('xs')]: {
height: '8em', height: '8em',
width: '8em' width: '8em',
}, },
[theme.breakpoints.up('sm')]: { [theme.breakpoints.up('sm')]: {
height: '10em', height: '10em',
width: '10em' width: '10em',
}, },
[theme.breakpoints.up('lg')]: { [theme.breakpoints.up('lg')]: {
height: '15em', height: '15em',
width: '15em' width: '15em',
} },
}, },
albumDetails: { albumDetails: {
display: 'inline-block', display: 'inline-block',
verticalAlign: 'top', verticalAlign: 'top',
[theme.breakpoints.down('xs')]: { [theme.breakpoints.down('xs')]: {
width: '14em' width: '14em',
}, },
[theme.breakpoints.up('sm')]: { [theme.breakpoints.up('sm')]: {
width: '26em' width: '26em',
}, },
[theme.breakpoints.up('lg')]: { [theme.breakpoints.up('lg')]: {
width: '38em' width: '38em',
} },
}, },
albumTitle: { albumTitle: {
whiteSpace: 'nowrap', whiteSpace: 'nowrap',
overflow: 'hidden', overflow: 'hidden',
textOverflow: 'ellipsis' textOverflow: 'ellipsis',
} },
})) }))

View File

@ -5,7 +5,7 @@ import {
List, List,
NumberField, NumberField,
SearchInput, SearchInput,
TextField TextField,
} from 'react-admin' } from 'react-admin'
import { Pagination, Title } from '../common' import { Pagination, Title } from '../common'
@ -15,7 +15,7 @@ const ArtistFilter = (props) => (
</Filter> </Filter>
) )
const artistRowClick = (id, basePath, record) => { const artistRowClick = (id) => {
const filter = { artist_id: id } const filter = { artist_id: id }
return `/album?filter=${JSON.stringify( return `/album?filter=${JSON.stringify(
filter filter

View File

@ -3,5 +3,5 @@ import ArtistList from './ArtistList'
export default { export default {
list: ArtistList, list: ArtistList,
icon: MicIcon icon: MicIcon,
} }

View File

@ -29,7 +29,7 @@ const Player = () => {
showMediaSession: true, showMediaSession: true,
defaultPosition: { defaultPosition: {
top: 300, top: 300,
left: 120 left: 120,
}, },
locale: { locale: {
playListsText: translate('player.playListsText'), playListsText: translate('player.playListsText'),
@ -55,9 +55,9 @@ const Player = () => {
order: translate('player.playModeText.order'), order: translate('player.playModeText.order'),
orderLoop: translate('player.playModeText.orderLoop'), orderLoop: translate('player.playModeText.orderLoop'),
singleLoop: translate('player.playModeText.singleLoop'), singleLoop: translate('player.playModeText.singleLoop'),
shufflePlay: translate('player.playModeText.shufflePlay') shufflePlay: translate('player.playModeText.shufflePlay'),
} },
} },
} }
const addQueueToOptions = (queue) => { const addQueueToOptions = (queue) => {
@ -65,7 +65,7 @@ const Player = () => {
...defaultOptions, ...defaultOptions,
autoPlay: true, autoPlay: true,
clearPriorAudioLists: queue.clear, clearPriorAudioLists: queue.clear,
audioLists: queue.queue.map((item) => item) audioLists: queue.queue.map((item) => item),
} }
} }

View File

@ -13,33 +13,33 @@ const mapToAudioLists = (item) => ({
name: item.title, name: item.title,
singer: item.artist, singer: item.artist,
cover: subsonic.url('getCoverArt', item.id, { size: 300 }), 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) => ({ const addTrack = (data) => ({
type: PLAYER_ADD_TRACK, type: PLAYER_ADD_TRACK,
data data,
}) })
const setTrack = (data) => ({ const setTrack = (data) => ({
type: PLAYER_SET_TRACK, type: PLAYER_SET_TRACK,
data data,
}) })
const playAlbum = (id, data) => ({ const playAlbum = (id, data) => ({
type: PLAYER_PLAY_ALBUM, type: PLAYER_PLAY_ALBUM,
data, data,
id id,
}) })
const syncQueue = (data) => ({ const syncQueue = (data) => ({
type: PLAYER_SYNC_QUEUE, type: PLAYER_SYNC_QUEUE,
data data,
}) })
const scrobbled = (id) => ({ const scrobbled = (id) => ({
type: PLAYER_SCROBBLE, type: PLAYER_SCROBBLE,
data: id data: id,
}) })
const playQueueReducer = ( const playQueueReducer = (
@ -61,7 +61,7 @@ const playQueueReducer = (
const newQueue = previousState.queue.map((item) => { const newQueue = previousState.queue.map((item) => {
return { return {
...item, ...item,
scrobbled: item.scrobbled || item.trackId === data scrobbled: item.scrobbled || item.trackId === data,
} }
}) })
return { queue: newQueue, clear: false } return { queue: newQueue, clear: false }

View File

@ -8,11 +8,11 @@ const BitrateField = ({ record = {}, source }) => {
BitrateField.propTypes = { BitrateField.propTypes = {
label: PropTypes.string, label: PropTypes.string,
record: PropTypes.object, record: PropTypes.object,
source: PropTypes.string.isRequired source: PropTypes.string.isRequired,
} }
BitrateField.defaultProps = { BitrateField.defaultProps = {
addLabel: true addLabel: true,
} }
export default BitrateField export default BitrateField

View File

@ -15,11 +15,11 @@ const format = (d) => {
DurationField.propTypes = { DurationField.propTypes = {
label: PropTypes.string, label: PropTypes.string,
record: PropTypes.object, record: PropTypes.object,
source: PropTypes.string.isRequired source: PropTypes.string.isRequired,
} }
DurationField.defaultProps = { DurationField.defaultProps = {
addLabel: true addLabel: true,
} }
export default DurationField export default DurationField

View File

@ -25,6 +25,6 @@ const PlayButton = ({ icon = defaultIcon, action, ...rest }) => {
PlayButton.propTypes = { PlayButton.propTypes = {
icon: PropTypes.element, icon: PropTypes.element,
action: PropTypes.object action: PropTypes.object,
} }
export default PlayButton export default PlayButton

View File

@ -22,11 +22,11 @@ const RangeField = ({ record = {}, source }) => {
RangeField.propTypes = { RangeField.propTypes = {
label: PropTypes.string, label: PropTypes.string,
record: PropTypes.object, record: PropTypes.object,
source: PropTypes.string.isRequired source: PropTypes.string.isRequired,
} }
RangeField.defaultProps = { RangeField.defaultProps = {
addLabel: true addLabel: true,
} }
export { formatRange } export { formatRange }

View File

@ -15,9 +15,9 @@ const useStyles = makeStyles(
{ {
link: { link: {
textDecoration: 'none', textDecoration: 'none',
color: 'inherit' color: 'inherit',
}, },
tertiary: { float: 'right', opacity: 0.541176 } tertiary: { float: 'right', opacity: 0.541176 },
}, },
{ name: 'RaSimpleList' } { name: 'RaSimpleList' }
) )
@ -28,7 +28,7 @@ const LinkOrNot = ({
basePath, basePath,
id, id,
record, record,
children children,
}) => { }) => {
const classes = useStyles({ classes: classesOverride }) const classes = useStyles({ classes: classesOverride })
return linkType === 'edit' || linkType === true ? ( return linkType === 'edit' || linkType === true ? (
@ -129,7 +129,7 @@ SimpleList.propTypes = {
linkType: PropTypes.oneOfType([ linkType: PropTypes.oneOfType([
PropTypes.string, PropTypes.string,
PropTypes.bool, PropTypes.bool,
PropTypes.func PropTypes.func,
]).isRequired, ]).isRequired,
onToggleItem: PropTypes.func, onToggleItem: PropTypes.func,
primaryText: PropTypes.func, primaryText: PropTypes.func,
@ -137,13 +137,13 @@ SimpleList.propTypes = {
rightIcon: PropTypes.func, rightIcon: PropTypes.func,
secondaryText: PropTypes.func, secondaryText: PropTypes.func,
selectedIds: PropTypes.arrayOf(PropTypes.any).isRequired, selectedIds: PropTypes.arrayOf(PropTypes.any).isRequired,
tertiaryText: PropTypes.func tertiaryText: PropTypes.func,
} }
SimpleList.defaultProps = { SimpleList.defaultProps = {
linkType: 'edit', linkType: 'edit',
hasBulkActions: false, hasBulkActions: false,
selectedIds: [] selectedIds: [],
} }
export default SimpleList export default SimpleList

View File

@ -20,11 +20,11 @@ function formatBytes(bytes, decimals = 2) {
SizeField.propTypes = { SizeField.propTypes = {
label: PropTypes.string, label: PropTypes.string,
record: PropTypes.object, record: PropTypes.object,
source: PropTypes.string.isRequired source: PropTypes.string.isRequired,
} }
SizeField.defaultProps = { SizeField.defaultProps = {
addLabel: true addLabel: true,
} }
export default SizeField export default SizeField

View File

@ -20,7 +20,7 @@ const SongDetails = (props) => {
bitRate: <BitrateField record={record} source="bitRate" />, bitRate: <BitrateField record={record} source="bitRate" />,
size: <SizeField record={record} source="size" />, size: <SizeField record={record} source="size" />,
updatedAt: <DateField record={record} source="updatedAt" showTime />, updatedAt: <DateField record={record} source="updatedAt" showTime />,
playCount: <TextField record={record} source="playCount" /> playCount: <TextField record={record} source="playCount" />,
} }
if (record.playCount > 0) { if (record.playCount > 0) {
data.playDate = <DateField record={record} source="playDate" showTime /> data.playDate = <DateField record={record} source="playDate" showTime />
@ -34,7 +34,7 @@ const SongDetails = (props) => {
<TableRow key={record.id}> <TableRow key={record.id}>
<TableCell component="th" scope="row"> <TableCell component="th" scope="row">
{translate(`resources.song.fields.${key}`, { {translate(`resources.song.fields.${key}`, {
_: inflection.humanize(inflection.underscore(key)) _: inflection.humanize(inflection.underscore(key)),
})} })}
: :
</TableCell> </TableCell>

View File

@ -18,5 +18,5 @@ export {
SimpleList, SimpleList,
RangeField, RangeField,
SongDetails, SongDetails,
formatRange formatRange,
} }

View File

@ -19,11 +19,11 @@ export default deepmerge(chineseMessages, {
playCount: '播放次数', playCount: '播放次数',
trackNumber: '音轨 #', trackNumber: '音轨 #',
size: '大小', size: '大小',
updatedAt: '上次更新' updatedAt: '上次更新',
}, },
bulk: { bulk: {
addToQueue: '稍后播放' addToQueue: '稍后播放',
} },
}, },
album: { album: {
name: '专辑 |||| 专辑', name: '专辑 |||| 专辑',
@ -35,21 +35,21 @@ export default deepmerge(chineseMessages, {
songCount: '曲目数', songCount: '曲目数',
playCount: '播放次数', playCount: '播放次数',
compilation: '合辑', compilation: '合辑',
year: '年份' year: '年份',
}, },
actions: { actions: {
playAll: '播放', playAll: '播放',
playNext: '播放下一首', playNext: '播放下一首',
addToQueue: '稍后播放', addToQueue: '稍后播放',
shuffle: '刷新' shuffle: '刷新',
} },
}, },
artist: { artist: {
name: '歌手 |||| 歌手', name: '歌手 |||| 歌手',
fields: { fields: {
name: '名称', name: '名称',
albumCount: '歌手数' albumCount: '歌手数',
} },
}, },
user: { user: {
name: '用户 |||| 用户', name: '用户 |||| 用户',
@ -58,8 +58,8 @@ export default deepmerge(chineseMessages, {
isAdmin: '管理员', isAdmin: '管理员',
lastLoginAt: '最后一次访问', lastLoginAt: '最后一次访问',
updatedAt: '上次修改', updatedAt: '上次修改',
name: '名称' name: '名称',
} },
}, },
player: { player: {
name: '用户 |||| 用户', name: '用户 |||| 用户',
@ -69,8 +69,8 @@ export default deepmerge(chineseMessages, {
maxBitRate: '最大比特率', maxBitRate: '最大比特率',
client: '应用程序', client: '应用程序',
userName: '用户', userName: '用户',
lastSeen: '最后一次访问' lastSeen: '最后一次访问',
} },
}, },
transcoding: { transcoding: {
name: '转码 |||| 转码', name: '转码 |||| 转码',
@ -78,21 +78,21 @@ export default deepmerge(chineseMessages, {
name: '名称', name: '名称',
targetFormat: '格式', targetFormat: '格式',
defaultBitRate: '默认比特率', defaultBitRate: '默认比特率',
command: '命令' command: '命令',
} },
} },
}, },
ra: { ra: {
auth: { auth: {
welcome1: '感谢您安装Navidrome!', welcome1: '感谢您安装Navidrome!',
welcome2: '为了开始使用,请创建一个管理员账户', welcome2: '为了开始使用,请创建一个管理员账户',
confirmPassword: '确认密码', confirmPassword: '确认密码',
buttonCreateAdmin: '创建管理员' buttonCreateAdmin: '创建管理员',
}, },
validation: { validation: {
invalidChars: '请只使用字母和数字', invalidChars: '请只使用字母和数字',
passwordDoesNotMatch: '密码不匹配' passwordDoesNotMatch: '密码不匹配',
} },
}, },
menu: { menu: {
library: '曲库', library: '曲库',
@ -103,9 +103,9 @@ export default deepmerge(chineseMessages, {
name: '个性化', name: '个性化',
options: { options: {
theme: '主题', theme: '主题',
language: '语言' language: '语言',
} },
} },
}, },
player: { player: {
playListsText: '播放队列', playListsText: '播放队列',
@ -130,7 +130,7 @@ export default deepmerge(chineseMessages, {
order: '顺序播放', order: '顺序播放',
orderLoop: '列表循环', orderLoop: '列表循环',
singleLoop: '单曲循环', singleLoop: '单曲循环',
shufflePlay: '随机播放' shufflePlay: '随机播放',
} },
} },
}) })

View File

@ -10,11 +10,11 @@ export default deepmerge(englishMessages, {
albumArtist: 'Album Artist', albumArtist: 'Album Artist',
duration: 'Time', duration: 'Time',
trackNumber: 'Track #', trackNumber: 'Track #',
playCount: 'Plays' playCount: 'Plays',
}, },
bulk: { bulk: {
addToQueue: 'Play Later' addToQueue: 'Play Later',
} },
}, },
album: { album: {
fields: { fields: {
@ -22,27 +22,27 @@ export default deepmerge(englishMessages, {
artist: 'Artist', artist: 'Artist',
duration: 'Time', duration: 'Time',
songCount: 'Songs', songCount: 'Songs',
playCount: 'Plays' playCount: 'Plays',
}, },
actions: { actions: {
playAll: 'Play', playAll: 'Play',
playNext: 'Play Next', playNext: 'Play Next',
addToQueue: 'Play Later', addToQueue: 'Play Later',
shuffle: 'Shuffle' shuffle: 'Shuffle',
} },
} },
}, },
ra: { ra: {
auth: { auth: {
welcome1: 'Thanks for installing Navidrome!', welcome1: 'Thanks for installing Navidrome!',
welcome2: 'To start, create an admin user', welcome2: 'To start, create an admin user',
confirmPassword: 'Confirm Password', confirmPassword: 'Confirm Password',
buttonCreateAdmin: 'Create Admin' buttonCreateAdmin: 'Create Admin',
}, },
validation: { validation: {
invalidChars: 'Please only use letter and numbers', invalidChars: 'Please only use letter and numbers',
passwordDoesNotMatch: 'Password does not match' passwordDoesNotMatch: 'Password does not match',
} },
}, },
menu: { menu: {
library: 'Library', library: 'Library',
@ -53,9 +53,9 @@ export default deepmerge(englishMessages, {
name: 'Personal', name: 'Personal',
options: { options: {
theme: 'Theme', theme: 'Theme',
language: 'Language' language: 'Language',
} },
} },
}, },
player: { player: {
playListsText: 'Play Queue', playListsText: 'Play Queue',
@ -80,7 +80,7 @@ export default deepmerge(englishMessages, {
order: 'In order', order: 'In order',
orderLoop: 'Repeat', orderLoop: 'Repeat',
singleLoop: 'Repeat One', singleLoop: 'Repeat One',
shufflePlay: 'Shuffle' shufflePlay: 'Shuffle',
} },
} },
}) })

View File

@ -15,14 +15,14 @@ export default deepmerge(frenchMessages, {
compilation: 'Compilation', compilation: 'Compilation',
duration: 'Durée', duration: 'Durée',
year: 'Année', year: 'Année',
playCount: 'Nombre d\'écoutes', playCount: "Nombre d'écoutes",
trackNumber: '#', trackNumber: '#',
size: 'Taille', size: 'Taille',
updatedAt: 'Mise à jour' updatedAt: 'Mise à jour',
}, },
bulk: { bulk: {
addToQueue: 'Ajouter à la file' addToQueue: 'Ajouter à la file',
} },
}, },
album: { album: {
name: 'Album |||| Albums', name: 'Album |||| Albums',
@ -31,55 +31,55 @@ export default deepmerge(frenchMessages, {
artist: 'Artiste', artist: 'Artiste',
songCount: 'Numéro de piste', songCount: 'Numéro de piste',
genre: 'Genre', genre: 'Genre',
playCount: 'Numbre d\'écoutes', playCount: "Numbre d'écoutes",
compilation: 'Compilation', compilation: 'Compilation',
duration: 'Durée', duration: 'Durée',
year: 'Année' year: 'Année',
}, },
actions: { actions: {
playAll: 'Lire', playAll: 'Lire',
playNext: 'Lire ensuite', playNext: 'Lire ensuite',
addToQueue: 'Ajouter à la file', addToQueue: 'Ajouter à la file',
shuffle: 'Mélanger' shuffle: 'Mélanger',
} },
}, },
artist: { artist: {
name: 'Artiste |||| Artistes', name: 'Artiste |||| Artistes',
fields: { fields: {
name: 'Nom', name: 'Nom',
albumCount: 'Nombre d\'albums' albumCount: "Nombre d'albums",
} },
}, },
user: { user: {
name: 'Utilisateur |||| Utilisateurs', name: 'Utilisateur |||| Utilisateurs',
fields: { fields: {
name: 'Nom' name: 'Nom',
} },
}, },
transcoding: { transcoding: {
name: 'Conversion |||| Conversions', name: 'Conversion |||| Conversions',
fields: { fields: {
name: 'Nom' name: 'Nom',
} },
}, },
player: { player: {
name: 'Lecteur |||| Lecteurs', name: 'Lecteur |||| Lecteurs',
fields: { fields: {
name: 'Nom' name: 'Nom',
} },
} },
}, },
ra: { ra: {
auth: { auth: {
welcome1: 'Merci d\'avoir installé Navidrome !', welcome1: "Merci d'avoir installé Navidrome !",
welcome2: 'Pour commencer, créez un compte administrateur', welcome2: 'Pour commencer, créez un compte administrateur',
confirmPassword: 'Confirmer votre mot de passe', confirmPassword: 'Confirmer votre mot de passe',
buttonCreateAdmin: 'Créer un compte administrateur' buttonCreateAdmin: 'Créer un compte administrateur',
}, },
validation: { validation: {
invalidChars: 'Merci d\'utiliser uniquement des chiffres et des lettres', invalidChars: "Merci d'utiliser uniquement des chiffres et des lettres",
passwordDoesNotMatch: 'Les mots de passes ne correspondent pas' passwordDoesNotMatch: 'Les mots de passes ne correspondent pas',
} },
}, },
menu: { menu: {
library: 'Bibliothèque', library: 'Bibliothèque',
@ -89,9 +89,9 @@ export default deepmerge(frenchMessages, {
name: 'Paramètres personel', name: 'Paramètres personel',
options: { options: {
theme: 'Thème', theme: 'Thème',
language: 'Langue' language: 'Langue',
} },
} },
}, },
player: { player: {
playListsText: 'File de lecture', playListsText: 'File de lecture',
@ -106,7 +106,7 @@ export default deepmerge(frenchMessages, {
order: 'Ordonner', order: 'Ordonner',
orderLoop: 'Tout répéter', orderLoop: 'Tout répéter',
singleLoop: 'Repéter', singleLoop: 'Repéter',
shufflePlay: 'Aleatoire' shufflePlay: 'Aleatoire',
} },
} },
}) })

View File

@ -18,11 +18,11 @@ export default deepmerge(italianMessages, {
playCount: 'Riproduzioni', playCount: 'Riproduzioni',
trackNumber: '#', trackNumber: '#',
size: 'Dimensioni', size: 'Dimensioni',
updatedAt: 'Ultimo aggiornamento' updatedAt: 'Ultimo aggiornamento',
}, },
bulk: { bulk: {
addToQueue: 'Aggiungi alla coda' addToQueue: 'Aggiungi alla coda',
} },
}, },
album: { album: {
name: 'Album |||| Album', name: 'Album |||| Album',
@ -34,21 +34,21 @@ export default deepmerge(italianMessages, {
playCount: 'Riproduzioni', playCount: 'Riproduzioni',
compilation: 'Compilation', compilation: 'Compilation',
duration: 'Durata', duration: 'Durata',
year: 'Anno' year: 'Anno',
}, },
actions: { actions: {
playAll: 'Riproduci', playAll: 'Riproduci',
playNext: 'Riproduci come successivo', playNext: 'Riproduci come successivo',
addToQueue: 'Aggiungi alla coda', addToQueue: 'Aggiungi alla coda',
shuffle: 'Riprodici casualmente' shuffle: 'Riprodici casualmente',
} },
}, },
artist: { artist: {
name: 'Artista |||| Artisti', name: 'Artista |||| Artisti',
fields: { fields: {
name: 'Nome', name: 'Nome',
albumCount: 'Album' albumCount: 'Album',
} },
}, },
user: { user: {
name: 'Utente |||| Utenti', name: 'Utente |||| Utenti',
@ -57,8 +57,8 @@ export default deepmerge(italianMessages, {
isAdmin: 'Amministratore', isAdmin: 'Amministratore',
lastLoginAt: 'Ultimo accesso', lastLoginAt: 'Ultimo accesso',
updatedAt: 'Ultima modifica', updatedAt: 'Ultima modifica',
name: 'Nome' name: 'Nome',
} },
}, },
player: { player: {
name: 'Client |||| Client', name: 'Client |||| Client',
@ -68,8 +68,8 @@ export default deepmerge(italianMessages, {
maxBitRate: 'Bitrate massimo', maxBitRate: 'Bitrate massimo',
client: 'Applicazione', client: 'Applicazione',
userName: 'Utente', userName: 'Utente',
lastSeen: 'Ultimo acesso' lastSeen: 'Ultimo acesso',
} },
}, },
transcoding: { transcoding: {
name: 'Transcodifica |||| Transcodifiche', name: 'Transcodifica |||| Transcodifiche',
@ -77,21 +77,21 @@ export default deepmerge(italianMessages, {
name: 'Nome', name: 'Nome',
targetFormat: 'Formato', targetFormat: 'Formato',
defaultBitRate: 'Bitrate predefinito', defaultBitRate: 'Bitrate predefinito',
command: 'Comando' command: 'Comando',
} },
} },
}, },
ra: { ra: {
auth: { auth: {
welcome1: 'Grazie per aver installato Navidrome!', welcome1: 'Grazie per aver installato Navidrome!',
welcome2: 'Per iniziare, crea un amministratore', welcome2: 'Per iniziare, crea un amministratore',
confirmPassword: 'Conferma la password', confirmPassword: 'Conferma la password',
buttonCreateAdmin: 'Crea amministratore' buttonCreateAdmin: 'Crea amministratore',
}, },
validation: { validation: {
invalidChars: 'Per favore usa solo lettere e numeri', invalidChars: 'Per favore usa solo lettere e numeri',
passwordDoesNotMatch: 'Le password non coincidono' passwordDoesNotMatch: 'Le password non coincidono',
} },
}, },
menu: { menu: {
library: 'Libreria', library: 'Libreria',
@ -101,9 +101,9 @@ export default deepmerge(italianMessages, {
name: 'Personale', name: 'Personale',
options: { options: {
theme: 'Tema', theme: 'Tema',
language: 'Lingua' language: 'Lingua',
} },
} },
}, },
player: { player: {
playListsText: 'Coda', playListsText: 'Coda',
@ -121,7 +121,7 @@ export default deepmerge(italianMessages, {
order: 'In ordine', order: 'In ordine',
orderLoop: 'Ripeti', orderLoop: 'Ripeti',
singleLoop: 'Ripeti una volta', singleLoop: 'Ripeti una volta',
shufflePlay: 'Casuale' shufflePlay: 'Casuale',
} },
} },
}) })

View File

@ -18,11 +18,11 @@ export default deepmerge(portugueseMessages, {
playCount: 'Execuções', playCount: 'Execuções',
trackNumber: '#', trackNumber: '#',
size: 'Tamanho', size: 'Tamanho',
updatedAt: 'Últ. Atualização' updatedAt: 'Últ. Atualização',
}, },
bulk: { bulk: {
addToQueue: 'Play Later' addToQueue: 'Play Later',
} },
}, },
album: { album: {
name: 'Álbum |||| Álbuns', name: 'Álbum |||| Álbuns',
@ -34,21 +34,21 @@ export default deepmerge(portugueseMessages, {
playCount: 'Execuções', playCount: 'Execuções',
compilation: 'Coletânea', compilation: 'Coletânea',
duration: 'Duração', duration: 'Duração',
year: 'Ano' year: 'Ano',
}, },
actions: { actions: {
playAll: 'Play', playAll: 'Play',
playNext: 'Play Next', playNext: 'Play Next',
addToQueue: 'Play Later', addToQueue: 'Play Later',
shuffle: 'Shuffle' shuffle: 'Shuffle',
} },
}, },
artist: { artist: {
name: 'Artista |||| Artistas', name: 'Artista |||| Artistas',
fields: { fields: {
name: 'Nome', name: 'Nome',
albumCount: 'Total de Álbuns' albumCount: 'Total de Álbuns',
} },
}, },
user: { user: {
name: 'Usuário |||| Usuários', name: 'Usuário |||| Usuários',
@ -57,8 +57,8 @@ export default deepmerge(portugueseMessages, {
isAdmin: 'Admin?', isAdmin: 'Admin?',
lastLoginAt: 'Últ. Login', lastLoginAt: 'Últ. Login',
updatedAt: 'Últ. Atualização', updatedAt: 'Últ. Atualização',
name: 'Nome' name: 'Nome',
} },
}, },
player: { player: {
name: 'Tocador |||| Tocadores', name: 'Tocador |||| Tocadores',
@ -68,8 +68,8 @@ export default deepmerge(portugueseMessages, {
maxBitRate: 'Bitrate máx', maxBitRate: 'Bitrate máx',
client: 'Cliente', client: 'Cliente',
userName: 'Usuário', userName: 'Usuário',
lastSeen: 'Últ. acesso' lastSeen: 'Últ. acesso',
} },
}, },
transcoding: { transcoding: {
name: 'Conversão |||| Conversões', name: 'Conversão |||| Conversões',
@ -77,21 +77,21 @@ export default deepmerge(portugueseMessages, {
name: 'Nome', name: 'Nome',
targetFormat: 'Formato', targetFormat: 'Formato',
defaultBitRate: 'Bitrate padrão', defaultBitRate: 'Bitrate padrão',
command: 'Comando' command: 'Comando',
} },
} },
}, },
ra: { ra: {
auth: { auth: {
welcome1: 'Obrigado por instalar Navidrome!', welcome1: 'Obrigado por instalar Navidrome!',
welcome2: 'Para iniciar, crie um usuário admin', welcome2: 'Para iniciar, crie um usuário admin',
confirmPassword: 'Confirme a senha', confirmPassword: 'Confirme a senha',
buttonCreateAdmin: 'Criar Admin' buttonCreateAdmin: 'Criar Admin',
}, },
validation: { validation: {
invalidChars: 'Somente use letras e numeros', invalidChars: 'Somente use letras e numeros',
passwordDoesNotMatch: 'Senha não confere' passwordDoesNotMatch: 'Senha não confere',
} },
}, },
menu: { menu: {
library: 'Biblioteca', library: 'Biblioteca',
@ -101,9 +101,9 @@ export default deepmerge(portugueseMessages, {
name: 'Pessoal', name: 'Pessoal',
options: { options: {
theme: 'Tema', theme: 'Tema',
language: 'Língua' language: 'Língua',
} },
} },
}, },
player: { player: {
playListsText: 'Fila de Execução', playListsText: 'Fila de Execução',
@ -121,7 +121,7 @@ export default deepmerge(portugueseMessages, {
order: 'Em ordem', order: 'Em ordem',
orderLoop: 'Repetir tudo', orderLoop: 'Repetir tudo',
singleLoop: 'Repetir', singleLoop: 'Repetir',
shufflePlay: 'Aleatório' shufflePlay: 'Aleatório',
} },
} },
}) })

View File

@ -3,7 +3,7 @@ import {
AppBar as RAAppBar, AppBar as RAAppBar,
MenuItemLink, MenuItemLink,
UserMenu, UserMenu,
useTranslate useTranslate,
} from 'react-admin' } from 'react-admin'
import { makeStyles } from '@material-ui/core' import { makeStyles } from '@material-ui/core'
import InfoIcon from '@material-ui/icons/Info' import InfoIcon from '@material-ui/icons/Info'
@ -11,8 +11,8 @@ import config from '../config'
const useStyles = makeStyles((theme) => ({ const useStyles = makeStyles((theme) => ({
menuItem: { menuItem: {
color: theme.palette.text.secondary color: theme.palette.text.secondary,
} },
})) }))
const VersionMenu = forwardRef((props, ref) => { const VersionMenu = forwardRef((props, ref) => {
@ -23,7 +23,7 @@ const VersionMenu = forwardRef((props, ref) => {
ref={ref} ref={ref}
to="#" to="#"
primaryText={translate('menu.version', { primaryText={translate('menu.version', {
version: config.version version: config.version,
})} })}
leftIcon={<InfoIcon />} leftIcon={<InfoIcon />}
className={classes.menuItem} className={classes.menuItem}

View File

@ -7,7 +7,7 @@ import AppBar from './AppBar'
import themes from '../themes' import themes from '../themes'
const useStyles = makeStyles({ const useStyles = makeStyles({
root: { paddingBottom: (props) => (props.addPadding ? '80px' : 0) } root: { paddingBottom: (props) => (props.addPadding ? '80px' : 0) },
}) })
export default (props) => { export default (props) => {

View File

@ -27,35 +27,35 @@ const useStyles = makeStyles((theme) => ({
background: `url(${config.loginBackgroundURL})`, background: `url(${config.loginBackgroundURL})`,
backgroundRepeat: 'no-repeat', backgroundRepeat: 'no-repeat',
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center' backgroundPosition: 'center',
}, },
card: { card: {
minWidth: 300, minWidth: 300,
marginTop: '6em' marginTop: '6em',
}, },
avatar: { avatar: {
margin: '1em', margin: '1em',
display: 'flex', display: 'flex',
justifyContent: 'center' justifyContent: 'center',
}, },
icon: { icon: {
backgroundColor: theme.palette.secondary.main backgroundColor: theme.palette.secondary.main,
}, },
systemName: { systemName: {
marginTop: '1em', marginTop: '1em',
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'center',
color: 'blue' //theme.palette.grey[500] color: 'blue', //theme.palette.grey[500]
}, },
form: { form: {
padding: '0 1em 1em 1em' padding: '0 1em 1em 1em',
}, },
input: { input: {
marginTop: '1em' marginTop: '1em',
}, },
actions: { actions: {
padding: '0 1em 1em 1em' padding: '0 1em 1em 1em',
} },
})) }))
const renderInput = ({ const renderInput = ({
@ -274,7 +274,7 @@ const Login = ({ location }) => {
Login.propTypes = { Login.propTypes = {
authProvider: PropTypes.func, authProvider: PropTypes.func,
previousRoute: PropTypes.string previousRoute: PropTypes.string,
} }
// We need to put the ThemeProvider decoration in another component // We need to put the ThemeProvider decoration in another component

View File

@ -17,9 +17,9 @@ const translatedResourceName = (resource, translate) =>
resource.options && resource.options.label resource.options && resource.options.label
? translate(resource.options.label, { ? translate(resource.options.label, {
smart_count: 2, 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 }) => { 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? // TODO State is not persisted in mobile when you close the sidebar menu. Move to redux?
const [state, setState] = useState({ const [state, setState] = useState({
menuLibrary: true, menuLibrary: true,
menuSettings: false menuSettings: false,
}) })
const handleToggle = (menu) => { const handleToggle = (menu) => {

View File

@ -5,8 +5,8 @@ import TuneIcon from '@material-ui/icons/Tune'
const useStyles = makeStyles((theme) => ({ const useStyles = makeStyles((theme) => ({
menuItem: { menuItem: {
color: theme.palette.text.secondary color: theme.palette.text.secondary,
} },
})) }))
const PersonalMenu = forwardRef(({ onClick, sidebarIsOpen, dense }, ref) => { const PersonalMenu = forwardRef(({ onClick, sidebarIsOpen, dense }, ref) => {

View File

@ -14,12 +14,12 @@ const useStyles = makeStyles((theme) => ({
icon: { minWidth: theme.spacing(5) }, icon: { minWidth: theme.spacing(5) },
sidebarIsOpen: { sidebarIsOpen: {
paddingLeft: 25, 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: { sidebarIsClosed: {
paddingLeft: 0, 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 = ({ const SubMenu = ({
@ -29,7 +29,7 @@ const SubMenu = ({
name, name,
icon, icon,
children, children,
dense dense,
}) => { }) => {
const translate = useTranslate() const translate = useTranslate()
const classes = useStyles() const classes = useStyles()

View File

@ -7,7 +7,7 @@ import {
SelectInput, SelectInput,
useTranslate, useTranslate,
useSetLocale, useSetLocale,
useLocale useLocale,
} from 'react-admin' } from 'react-admin'
import { makeStyles } from '@material-ui/core/styles' import { makeStyles } from '@material-ui/core/styles'
import { changeTheme } from './actions' import { changeTheme } from './actions'
@ -15,7 +15,7 @@ import themes from '../themes'
import i18n from '../i18n' import i18n from '../i18n'
const useStyles = makeStyles({ const useStyles = makeStyles({
root: { marginTop: '1em' } root: { marginTop: '1em' },
}) })
const SelectLanguage = (props) => { const SelectLanguage = (props) => {

View File

@ -2,5 +2,5 @@ export const CHANGE_THEME = 'CHANGE_THEME'
export const changeTheme = (theme) => ({ export const changeTheme = (theme) => ({
type: CHANGE_THEME, type: CHANGE_THEME,
payload: theme payload: theme,
}) })

View File

@ -6,7 +6,7 @@ import {
required, required,
SimpleForm, SimpleForm,
SelectInput, SelectInput,
ReferenceInput ReferenceInput,
} from 'react-admin' } from 'react-admin'
import { Title } from '../common' import { Title } from '../common'
@ -39,7 +39,7 @@ const PlayerEdit = (props) => (
{ id: 192, name: '192' }, { id: 192, name: '192' },
{ id: 256, name: '256' }, { id: 256, name: '256' },
{ id: 320, name: '320' }, { id: 320, name: '320' },
{ id: 0, name: 'Unlimited' } { id: 0, name: 'Unlimited' },
]} ]}
/> />
<TextField source="client" /> <TextField source="client" />

View File

@ -5,7 +5,7 @@ import {
TextField, TextField,
DateField, DateField,
FunctionField, FunctionField,
ReferenceField ReferenceField,
} from 'react-admin' } from 'react-admin'
import { useMediaQuery } from '@material-ui/core' import { useMediaQuery } from '@material-ui/core'
import { SimpleList, Title } from '../common' import { SimpleList, Title } from '../common'
@ -21,18 +21,18 @@ const PlayerList = (props) => {
tertiaryText={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')} tertiaryText={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')}
/> />
) : ( ) : (
<Datagrid rowClick="edit"> <Datagrid rowClick="edit">
<TextField source="name" />
<ReferenceField source="transcodingId" reference="transcoding">
<TextField source="name" /> <TextField source="name" />
</ReferenceField> <ReferenceField source="transcodingId" reference="transcoding">
<FunctionField <TextField source="name" />
source="maxBitRate" </ReferenceField>
render={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')} <FunctionField
/> source="maxBitRate"
<DateField source="lastSeen" showTime /> render={(r) => (r.maxBitRate ? r.maxBitRate : 'Unlimited')}
</Datagrid> />
)} <DateField source="lastSeen" showTime />
</Datagrid>
)}
</List> </List>
) )
} }

View File

@ -5,5 +5,5 @@ import PlayerEdit from './PlayerEdit'
export default { export default {
list: PlayerList, list: PlayerList,
edit: PlayerEdit, edit: PlayerEdit,
icon: RadioIcon icon: RadioIcon,
} }

View File

@ -3,7 +3,7 @@ import {
Button, Button,
useDataProvider, useDataProvider,
useTranslate, useTranslate,
useUnselectAll useUnselectAll,
} from 'react-admin' } from 'react-admin'
import { useDispatch } from 'react-redux' import { useDispatch } from 'react-redux'
import { addTrack } from '../audioplayer' import { addTrack } from '../audioplayer'

View File

@ -11,5 +11,5 @@ export const AlbumLinkField = (props) => (
) )
AlbumLinkField.defaultProps = { AlbumLinkField.defaultProps = {
addLabel: true addLabel: true,
} }

View File

@ -6,7 +6,7 @@ import {
List, List,
NumberField, NumberField,
SearchInput, SearchInput,
TextField TextField,
} from 'react-admin' } from 'react-admin'
import { useMediaQuery } from '@material-ui/core' import { useMediaQuery } from '@material-ui/core'
import { import {
@ -14,7 +14,7 @@ import {
Pagination, Pagination,
PlayButton, PlayButton,
SimpleList, SimpleList,
Title Title,
} from '../common' } from '../common'
import { useDispatch } from 'react-redux' import { useDispatch } from 'react-redux'
import { addTrack, setTrack } from '../audioplayer' import { addTrack, setTrack } from '../audioplayer'

View File

@ -3,5 +3,5 @@ import SongList from './SongList'
export default { export default {
list: SongList, list: SongList,
icon: MusicNoteIcon icon: MusicNoteIcon,
} }

View File

@ -10,12 +10,12 @@ export default ({
authProvider, authProvider,
dataProvider, dataProvider,
history, history,
customReducers = {} customReducers = {},
}) => { }) => {
const reducer = combineReducers({ const reducer = combineReducers({
admin: adminReducer, admin: adminReducer,
router: connectRouter(history), router: connectRouter(history),
...customReducers ...customReducers,
}) })
const resettableAppReducer = (state, action) => const resettableAppReducer = (state, action) =>
reducer(action.type !== USER_LOGOUT ? state : undefined, 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__ &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
trace: true, trace: true,
traceLimit: 25 traceLimit: 25,
})) || })) ||
compose compose
@ -48,7 +48,7 @@ export default ({
saveState({ saveState({
theme: state.theme, theme: state.theme,
queue: state.queue, queue: state.queue,
albumView: state.albumView albumView: state.albumView,
}) })
}), }),
1000 1000

View File

@ -4,19 +4,19 @@ export default {
themeName: 'Dark (default)', themeName: 'Dark (default)',
palette: { palette: {
primary: { primary: {
main: '#90caf9' main: '#90caf9',
}, },
secondary: blue, secondary: blue,
type: 'dark' type: 'dark',
}, },
overrides: { overrides: {
MuiFormGroup: { MuiFormGroup: {
root: { root: {
color: 'white' color: 'white',
} },
} },
}, },
player: { player: {
theme: 'dark' theme: 'dark',
} },
} }

View File

@ -5,20 +5,20 @@ export default {
light: '#5f5fc4', light: '#5f5fc4',
dark: '#001064', dark: '#001064',
main: '#283593', main: '#283593',
contrastText: '#fff' contrastText: '#fff',
} },
}, },
overrides: { overrides: {
MuiFilledInput: { MuiFilledInput: {
root: { root: {
backgroundColor: 'rgba(0, 0, 0, 0.04)', backgroundColor: 'rgba(0, 0, 0, 0.04)',
'&$disabled': { '&$disabled': {
backgroundColor: 'rgba(0, 0, 0, 0.04)' backgroundColor: 'rgba(0, 0, 0, 0.04)',
} },
} },
} },
}, },
player: { player: {
theme: 'light' theme: 'light',
} },
} }

View File

@ -4,7 +4,7 @@ import {
SelectInput, SelectInput,
Create, Create,
required, required,
SimpleForm SimpleForm,
} from 'react-admin' } from 'react-admin'
import { Title } from '../common' import { Title } from '../common'
@ -30,7 +30,7 @@ const TranscodingCreate = (props) => (
{ id: 160, name: '160' }, { id: 160, name: '160' },
{ id: 192, name: '192' }, { id: 192, name: '192' },
{ id: 256, name: '256' }, { id: 256, name: '256' },
{ id: 320, name: '320' } { id: 320, name: '320' },
]} ]}
defaultValue={192} defaultValue={192}
/> />

View File

@ -24,7 +24,7 @@ const TranscodingEdit = (props) => (
{ id: 160, name: '160' }, { id: 160, name: '160' },
{ id: 192, name: '192' }, { id: 192, name: '192' },
{ id: 256, name: '256' }, { id: 256, name: '256' },
{ id: 320, name: '320' } { id: 320, name: '320' },
]} ]}
/> />
<TextInput source="command" fullWidth validate={[required()]} /> <TextInput source="command" fullWidth validate={[required()]} />

View File

@ -6,7 +6,11 @@ import { SimpleList, Title } from '../common'
const TranscodingList = (props) => { const TranscodingList = (props) => {
const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs')) const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs'))
return ( return (
<List title={<Title subTitle={'Transcodings'} />} exporter={false} {...props}> <List
title={<Title subTitle={'Transcodings'} />}
exporter={false}
{...props}
>
{isXsmall ? ( {isXsmall ? (
<SimpleList <SimpleList
primaryText={(r) => r.name} primaryText={(r) => r.name}
@ -14,13 +18,13 @@ const TranscodingList = (props) => {
tertiaryText={(r) => r.defaultBitRate} tertiaryText={(r) => r.defaultBitRate}
/> />
) : ( ) : (
<Datagrid rowClick="edit"> <Datagrid rowClick="edit">
<TextField source="name" /> <TextField source="name" />
<TextField source="targetFormat" /> <TextField source="targetFormat" />
<TextField source="defaultBitRate" /> <TextField source="defaultBitRate" />
<TextField source="command" /> <TextField source="command" />
</Datagrid> </Datagrid>
)} )}
</List> </List>
) )
} }

View File

@ -7,5 +7,5 @@ export default {
list: TranscodingList, list: TranscodingList,
edit: TranscodingEdit, edit: TranscodingEdit,
create: TranscodingCreate, create: TranscodingCreate,
icon: TransformIcon icon: TransformIcon,
} }

View File

@ -6,7 +6,7 @@ import {
PasswordInput, PasswordInput,
required, required,
email, email,
SimpleForm SimpleForm,
} from 'react-admin' } from 'react-admin'
import { Title } from '../common' import { Title } from '../common'

View File

@ -7,7 +7,7 @@ import {
Edit, Edit,
required, required,
email, email,
SimpleForm SimpleForm,
} from 'react-admin' } from 'react-admin'
import { Title } from '../common' import { Title } from '../common'

View File

@ -7,7 +7,7 @@ import {
List, List,
SearchInput, SearchInput,
SimpleList, SimpleList,
TextField TextField,
} from 'react-admin' } from 'react-admin'
import { useMediaQuery } from '@material-ui/core' import { useMediaQuery } from '@material-ui/core'
import { Title } from '../common' import { Title } from '../common'

View File

@ -7,5 +7,5 @@ export default {
list: UserList, list: UserList,
edit: UserEdit, edit: UserEdit,
create: UserCreate, create: UserCreate,
icon: Group icon: Group,
} }