diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..4dcb439 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..3e25e38 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Jellystat + + +
+ + + diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index b93b3f7..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/icon-b-192.png b/public/icon-b-192.png deleted file mode 100644 index 6c72679..0000000 Binary files a/public/icon-b-192.png and /dev/null differ diff --git a/public/icon-b-512.png b/public/icon-b-512.png deleted file mode 100644 index d6857ed..0000000 Binary files a/public/icon-b-512.png and /dev/null differ diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 1f71f81..0000000 --- a/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - JellyStat - - - -
- - - diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index dc006c0..0000000 --- a/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "JellyStat", - "name": "Statistics for Jellyfin", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "icon-b-192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "icon-b-512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css index cbef13e..97900dc 100644 --- a/src/App.css +++ b/src/App.css @@ -1,16 +1,14 @@ @import 'pages/css/variables.module.css'; @import 'pages/css/variables.module.css'; -main{ - margin-inline: 20px; +main { + margin-inline: 20px; /* width: 100%; */ overflow: auto; - margin-inline: 20px; + margin-inline: 20px; /* width: 100%; */ overflow: auto; } - - .App-logo { height: 40vmin; pointer-events: none; @@ -22,49 +20,47 @@ main{ } } -body -{ +body { background-color: var(--background-color) !important; background-color: var(--background-color) !important; /* background-color: #17151a; */ color: white; } -h1{ +h1 { color: white; font-weight: lighter !important; margin: 0 !important; - margin-top: 0.5em; - margin-bottom: 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; } -h2{ +h2 { color: white; font-weight: lighter !important; margin: 0 !important; - margin-top: 0.5em; - margin-bottom: 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; } - - - - - - @keyframes fade-in { - from { opacity: 0; } - to { opacity: 1; } + from { + opacity: 0; + } + to { + opacity: 1; + } } @keyframes fade-out { - from { opacity: 1; } - to { opacity: 0; } + from { + opacity: 1; + } + to { + opacity: 0; + } } - - .App-header { - /* min-height: 100vh; */ padding-bottom: 10px; display: flex; @@ -79,7 +75,6 @@ h2{ color: #61dafb; } - @keyframes App-logo-spin { from { transform: rotate(0deg); @@ -89,64 +84,49 @@ h2{ } } - -.btn-outline-primary -{ - color: white!important; +.btn-outline-primary { + color: white !important; border-color: var(--primary-color) !important; background-color: var(--background-color) !important; } -.btn-outline-primary:hover -{ +.btn-outline-primary:hover { background-color: var(--primary-color) !important; } -.btn-outline-primary.active -{ +.btn-outline-primary.active { background-color: var(--primary-color) !important; - } -.btn-outline-primary:focus -{ +.btn-outline-primary:focus { background-color: var(--primary-color) !important; - } -.btn-primary -{ - color: white!important; +.btn-primary { + color: white !important; border-color: var(--primary-color) !important; background-color: var(--primary-color) !important; } -.btn-primary:hover -{ +.btn-primary:hover { background-color: var(--primary-dark-color) !important; } -.btn-primary.active -{ +.btn-primary.active { background-color: var(--primary-color) !important; - } -.btn-primary:focus -{ +.btn-primary:focus { background-color: var(--primary-color) !important; - } -.form-select -{ - background-color:var(--secondary-background-color) !important; - border-color:var(--secondary-background-color) !important ; +.form-select { + background-color: var(--secondary-background-color) !important; + border-color: var(--secondary-background-color) !important ; color: white !important; } -.form-select:focus -{ +.form-select:focus { box-shadow: none !important; border-color: var(--primary-color) !important; color: white !important; @@ -159,12 +139,7 @@ h2{ border-color: var(--primary-color) !important; } - .form-select option:hover { background-color: var(--primary-color) !important; color: white !important; } - - - - diff --git a/src/App.js b/src/App.js deleted file mode 100644 index 8df3f72..0000000 --- a/src/App.js +++ /dev/null @@ -1,202 +0,0 @@ -// import logo from './logo.svg'; -import './App.css'; -import React, { useState, useEffect } from 'react'; -import { Routes, Route } from "react-router-dom"; -import axios from 'axios'; - - -import socket from './socket'; -import { ToastContainer, toast } from 'react-toastify'; -import 'react-toastify/dist/ReactToastify.css'; - - -import Config from './lib/config'; - -import Loading from './pages/components/general/loading'; - -import Signup from './pages/signup'; -import Setup from './pages/setup'; -import Login from './pages/login'; - - -import Navbar from './pages/components/general/navbar'; -import Home from './pages/home'; -import Settings from './pages/settings'; -import Users from './pages/users'; -import UserInfo from './pages/components/user-info'; -import Libraries from './pages/libraries'; -import LibraryInfo from './pages/components/library-info'; -import ItemInfo from './pages/components/item-info'; -import ErrorPage from './pages/components/general/error'; -import About from './pages/about'; - - -import Testing from './pages/testing'; -import Activity from './pages/activity'; -import Statistics from './pages/statistics'; -import Datadebugger from './pages/data-debugger'; - -function App() { - - const [setupState, setSetupState] = useState(0); - const [config, setConfig] = useState(null); - const [loading, setLoading] = useState(true); - const [errorFlag, seterrorFlag] = useState(false); - const token = localStorage.getItem('token'); - - - - const wsListeners=[ - {task:'PlaybackSyncTask',ref:React.useRef(null)}, - {task:'SyncTask',ref:React.useRef(null)}, - {task:'BackupTask',ref:React.useRef(null)}, - {task:'TaskError',ref:React.useRef(null)}, - ]; - - useEffect(() => { - - wsListeners.forEach((listener) => { - - socket.on(listener.task, (message) => { - - - if(message && (message.type==="Start" || !listener.ref.current)) - { - listener.ref.current = toast.info(message?.message||message, { autoClose: 15000 }); - }else if(message && message.type==="Update") - { - toast.update( listener.ref.current, {render: (message?.message||message) , type: toast.TYPE.INFO, autoClose: 15000 }); - }else if(message && message.type==="Error") - { - toast.update( listener.ref.current, {render: (message?.message||message) , type: toast.TYPE.ERROR, autoClose: 5000 }); - }else if(message && message.type==="Success") - { - toast.update( listener.ref.current, {render: (message?.message||message) , type: toast.TYPE.SUCCESS, autoClose: 5000 }); - } - - - - }); - }); - - return () => { - wsListeners.forEach((listener) => { - socket.off(listener.task); - }); - - }; - }); - - useEffect(() => { - - - const fetchConfig = async () => { - try { - const newConfig = await Config(); - if(!newConfig.response){ - setConfig(newConfig); - }else{ - if(newConfig.response.status!==403) - { - seterrorFlag(true); - } - - } - setLoading(false); - - } catch (error) { - console.log(error); - } - }; - - if(setupState===0) - { - setLoading(false); - axios - .get("/auth/isConfigured") - .then(async (response) => { - if(response.status===200) - { - setSetupState(response.data.state); - } - - - }) - .catch((error) => { - console.log(error); - seterrorFlag(true); - - }); - - } - - if (!config && setupState>=1) { - fetchConfig(); - } - -}, [config,setupState]); - -if (loading) { - return ; -} - -if (errorFlag) { - return ; -} - -if(!config && setupState===2) - { - if ((token===undefined || token===null) || !config) { - return ; - } - } - - if (setupState===0) { - return ; - } - if(setupState===1) - { - return ; - - } - - - - - - -if (config && setupState===2 && token!==null){ - return ( -
- -
- -
- - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - -
-
- -
- - ); -} - - - - -} - -export default App; diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..46d2f99 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,179 @@ +// import logo from './logo.svg'; +import './App.css'; +import React, { useState, useEffect } from 'react'; +import { Routes, Route } from 'react-router-dom'; +import axios from 'axios'; + +import socket from './socket'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +import Config from './lib/config'; + +import Loading from './pages/components/general/loading'; + +import Signup from './pages/signup'; +import Setup from './pages/setup'; +import Login from './pages/login'; + +import Navbar from './pages/components/general/navbar'; +import Home from './pages/home'; +import Settings from './pages/settings'; +import Users from './pages/users'; +import UserInfo from './pages/components/user-info'; +import Libraries from './pages/libraries'; +import LibraryInfo from './pages/components/library-info'; +import ItemInfo from './pages/components/item-info'; +import ErrorPage from './pages/components/general/error'; +import About from './pages/about'; + +import Testing from './pages/testing'; +import Activity from './pages/activity'; +import Statistics from './pages/statistics'; +import Datadebugger from './pages/data-debugger'; + +function App() { + const [setupState, setSetupState] = useState(0); + const [config, setConfig] = useState(null); + const [loading, setLoading] = useState(true); + const [errorFlag, seterrorFlag] = useState(false); + const token = localStorage.getItem('token'); + + const wsListeners = [ + { task: 'PlaybackSyncTask', ref: React.useRef(null) }, + { task: 'SyncTask', ref: React.useRef(null) }, + { task: 'BackupTask', ref: React.useRef(null) }, + { task: 'TaskError', ref: React.useRef(null) }, + ]; + + useEffect(() => { + wsListeners.forEach((listener) => { + socket.on(listener.task, (message) => { + if (message && (message.type === 'Start' || !listener.ref.current)) { + listener.ref.current = toast.info(message?.message || message, { + autoClose: 15000, + }); + } else if (message && message.type === 'Update') { + toast.update(listener.ref.current, { + render: message?.message || message, + type: toast.TYPE.INFO, + autoClose: 15000, + }); + } else if (message && message.type === 'Error') { + toast.update(listener.ref.current, { + render: message?.message || message, + type: toast.TYPE.ERROR, + autoClose: 5000, + }); + } else if (message && message.type === 'Success') { + toast.update(listener.ref.current, { + render: message?.message || message, + type: toast.TYPE.SUCCESS, + autoClose: 5000, + }); + } + }); + }); + + return () => { + wsListeners.forEach((listener) => { + socket.off(listener.task); + }); + }; + }); + + useEffect(() => { + const fetchConfig = async () => { + try { + const newConfig = await Config(); + if (!newConfig.response) { + setConfig(newConfig); + } else { + if (newConfig.response.status !== 403) { + seterrorFlag(true); + } + } + setLoading(false); + } catch (error) { + console.log(error); + } + }; + + if (setupState === 0) { + setLoading(false); + axios + .get('/auth/isConfigured') + .then(async (response) => { + if (response.status === 200) { + setSetupState(response.data.state); + } + }) + .catch((error) => { + console.log(error); + seterrorFlag(true); + }); + } + + if (!config && setupState >= 1) { + fetchConfig(); + } + }, [config, setupState]); + + if (loading) { + return ; + } + + if (errorFlag) { + return ( + + ); + } + + if (!config && setupState === 2) { + if (token === undefined || token === null || !config) { + return ; + } + } + + if (setupState === 0) { + return ; + } + if (setupState === 1) { + return ; + } + + if (config && setupState === 2 && token !== null) { + return ( +
+
+ +
+ + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + +
+
+ +
+ ); + } +} + +export default App; diff --git a/src/App.test.js b/src/App.test.jsx similarity index 100% rename from src/App.test.js rename to src/App.test.jsx diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/index.css b/src/index.css index f823fdb..f311e88 100644 --- a/src/index.css +++ b/src/index.css @@ -11,15 +11,13 @@ body { sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - color: white ; + color: white; } -* -{ +* { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',sans-serif !important; - - + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif !important; } code { @@ -27,7 +25,6 @@ code { monospace; } - body { overflow: auto; /* show scrollbar when needed */ } @@ -48,4 +45,3 @@ body::-webkit-scrollbar-thumb { body::-webkit-scrollbar-thumb:hover { background-color: #88888883; /* set thumb color */ } - diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 5177946..0000000 --- a/src/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; -import { BrowserRouter } from 'react-router-dom'; -import 'bootstrap/dist/css/bootstrap.min.css'; - -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - - - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/index.jsx b/src/index.jsx new file mode 100644 index 0000000..3566462 --- /dev/null +++ b/src/index.jsx @@ -0,0 +1,16 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; + +import App from './App.jsx'; + +import './index.css'; +import 'bootstrap/dist/css/bootstrap.min.css'; + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + + +); diff --git a/src/lib/axios_instance.js b/src/lib/axios_instance.jsx similarity index 100% rename from src/lib/axios_instance.js rename to src/lib/axios_instance.jsx diff --git a/src/lib/config.js b/src/lib/config.jsx similarity index 100% rename from src/lib/config.js rename to src/lib/config.jsx diff --git a/src/lib/devices.js b/src/lib/devices.jsx similarity index 100% rename from src/lib/devices.js rename to src/lib/devices.jsx diff --git a/src/lib/navdata.js b/src/lib/navdata.jsx similarity index 100% rename from src/lib/navdata.js rename to src/lib/navdata.jsx diff --git a/src/lib/tasklist.js b/src/lib/tasklist.jsx similarity index 100% rename from src/lib/tasklist.js rename to src/lib/tasklist.jsx diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/pages/about.js b/src/pages/about.jsx similarity index 100% rename from src/pages/about.js rename to src/pages/about.jsx diff --git a/src/pages/activity.js b/src/pages/activity.jsx similarity index 100% rename from src/pages/activity.js rename to src/pages/activity.jsx diff --git a/src/pages/components/HomeStatisticCards.js b/src/pages/components/HomeStatisticCards.jsx similarity index 100% rename from src/pages/components/HomeStatisticCards.js rename to src/pages/components/HomeStatisticCards.jsx diff --git a/src/pages/components/LibrarySelector/SelectionCard.js b/src/pages/components/LibrarySelector/SelectionCard.jsx similarity index 100% rename from src/pages/components/LibrarySelector/SelectionCard.js rename to src/pages/components/LibrarySelector/SelectionCard.jsx diff --git a/src/pages/components/activity/activity-table.js b/src/pages/components/activity/activity-table.jsx similarity index 100% rename from src/pages/components/activity/activity-table.js rename to src/pages/components/activity/activity-table.jsx diff --git a/src/pages/components/activity/stream_info.js b/src/pages/components/activity/stream_info.jsx similarity index 100% rename from src/pages/components/activity/stream_info.js rename to src/pages/components/activity/stream_info.jsx diff --git a/src/pages/components/general/ComponentLoading.js b/src/pages/components/general/ComponentLoading.jsx similarity index 100% rename from src/pages/components/general/ComponentLoading.js rename to src/pages/components/general/ComponentLoading.jsx diff --git a/src/pages/components/general/ErrorBoundary.js b/src/pages/components/general/ErrorBoundary.jsx similarity index 100% rename from src/pages/components/general/ErrorBoundary.js rename to src/pages/components/general/ErrorBoundary.jsx diff --git a/src/pages/components/general/error.js b/src/pages/components/general/error.jsx similarity index 100% rename from src/pages/components/general/error.js rename to src/pages/components/general/error.jsx diff --git a/src/pages/components/general/last-watched-card.js b/src/pages/components/general/last-watched-card.jsx similarity index 100% rename from src/pages/components/general/last-watched-card.js rename to src/pages/components/general/last-watched-card.jsx diff --git a/src/pages/components/general/loading.js b/src/pages/components/general/loading.jsx similarity index 100% rename from src/pages/components/general/loading.js rename to src/pages/components/general/loading.jsx diff --git a/src/pages/components/general/navbar.js b/src/pages/components/general/navbar.jsx similarity index 100% rename from src/pages/components/general/navbar.js rename to src/pages/components/general/navbar.jsx diff --git a/src/pages/components/general/version-card.js b/src/pages/components/general/version-card.jsx similarity index 100% rename from src/pages/components/general/version-card.js rename to src/pages/components/general/version-card.jsx diff --git a/src/pages/components/ip-info.js b/src/pages/components/ip-info.jsx similarity index 100% rename from src/pages/components/ip-info.js rename to src/pages/components/ip-info.jsx diff --git a/src/pages/components/item-info.js b/src/pages/components/item-info.jsx similarity index 100% rename from src/pages/components/item-info.js rename to src/pages/components/item-info.jsx diff --git a/src/pages/components/item-info/globalStats.js b/src/pages/components/item-info/globalStats.jsx similarity index 100% rename from src/pages/components/item-info/globalStats.js rename to src/pages/components/item-info/globalStats.jsx diff --git a/src/pages/components/item-info/globalstats/watchtimestats.js b/src/pages/components/item-info/globalstats/watchtimestats.jsx similarity index 100% rename from src/pages/components/item-info/globalstats/watchtimestats.js rename to src/pages/components/item-info/globalstats/watchtimestats.jsx diff --git a/src/pages/components/item-info/item-activity.js b/src/pages/components/item-info/item-activity.jsx similarity index 100% rename from src/pages/components/item-info/item-activity.js rename to src/pages/components/item-info/item-activity.jsx diff --git a/src/pages/components/item-info/item-not-found.js b/src/pages/components/item-info/item-not-found.jsx similarity index 100% rename from src/pages/components/item-info/item-not-found.js rename to src/pages/components/item-info/item-not-found.jsx diff --git a/src/pages/components/item-info/more-items.js b/src/pages/components/item-info/more-items.jsx similarity index 100% rename from src/pages/components/item-info/more-items.js rename to src/pages/components/item-info/more-items.jsx diff --git a/src/pages/components/item-info/more-items/more-items-card.js b/src/pages/components/item-info/more-items/more-items-card.jsx similarity index 100% rename from src/pages/components/item-info/more-items/more-items-card.js rename to src/pages/components/item-info/more-items/more-items-card.jsx diff --git a/src/pages/components/library-info.js b/src/pages/components/library-info.jsx similarity index 100% rename from src/pages/components/library-info.js rename to src/pages/components/library-info.jsx diff --git a/src/pages/components/library/RecentlyAdded/recently-added-card.js b/src/pages/components/library/RecentlyAdded/recently-added-card.jsx similarity index 100% rename from src/pages/components/library/RecentlyAdded/recently-added-card.js rename to src/pages/components/library/RecentlyAdded/recently-added-card.jsx diff --git a/src/pages/components/library/globalstats/watchtimestats.js b/src/pages/components/library/globalstats/watchtimestats.jsx similarity index 100% rename from src/pages/components/library/globalstats/watchtimestats.js rename to src/pages/components/library/globalstats/watchtimestats.jsx diff --git a/src/pages/components/library/last-watched.js b/src/pages/components/library/last-watched.jsx similarity index 100% rename from src/pages/components/library/last-watched.js rename to src/pages/components/library/last-watched.jsx diff --git a/src/pages/components/library/library-activity.js b/src/pages/components/library/library-activity.jsx similarity index 100% rename from src/pages/components/library/library-activity.js rename to src/pages/components/library/library-activity.jsx diff --git a/src/pages/components/library/library-card.js b/src/pages/components/library/library-card.jsx similarity index 100% rename from src/pages/components/library/library-card.js rename to src/pages/components/library/library-card.jsx diff --git a/src/pages/components/library/library-items.js b/src/pages/components/library/library-items.jsx similarity index 100% rename from src/pages/components/library/library-items.js rename to src/pages/components/library/library-items.jsx diff --git a/src/pages/components/library/library-stats.js b/src/pages/components/library/library-stats.jsx similarity index 100% rename from src/pages/components/library/library-stats.js rename to src/pages/components/library/library-stats.jsx diff --git a/src/pages/components/library/recently-added.js b/src/pages/components/library/recently-added.jsx similarity index 100% rename from src/pages/components/library/recently-added.js rename to src/pages/components/library/recently-added.jsx diff --git a/src/pages/components/libraryOverview.js b/src/pages/components/libraryOverview.jsx similarity index 100% rename from src/pages/components/libraryOverview.js rename to src/pages/components/libraryOverview.jsx diff --git a/src/pages/components/libraryStatCard/library-stat-component.js b/src/pages/components/libraryStatCard/library-stat-component.jsx similarity index 100% rename from src/pages/components/libraryStatCard/library-stat-component.js rename to src/pages/components/libraryStatCard/library-stat-component.jsx diff --git a/src/pages/components/playbackactivity.js b/src/pages/components/playbackactivity.jsx similarity index 100% rename from src/pages/components/playbackactivity.js rename to src/pages/components/playbackactivity.jsx diff --git a/src/pages/components/sessions/session-card.js b/src/pages/components/sessions/session-card.jsx similarity index 100% rename from src/pages/components/sessions/session-card.js rename to src/pages/components/sessions/session-card.jsx diff --git a/src/pages/components/sessions/sessions.js b/src/pages/components/sessions/sessions.jsx similarity index 100% rename from src/pages/components/sessions/sessions.js rename to src/pages/components/sessions/sessions.jsx diff --git a/src/pages/components/settings/Tasks.js b/src/pages/components/settings/Tasks.jsx similarity index 100% rename from src/pages/components/settings/Tasks.js rename to src/pages/components/settings/Tasks.jsx diff --git a/src/pages/components/settings/TerminalComponent.js b/src/pages/components/settings/TerminalComponent.jsx similarity index 100% rename from src/pages/components/settings/TerminalComponent.js rename to src/pages/components/settings/TerminalComponent.jsx diff --git a/src/pages/components/settings/apiKeys.js b/src/pages/components/settings/apiKeys.jsx similarity index 100% rename from src/pages/components/settings/apiKeys.js rename to src/pages/components/settings/apiKeys.jsx diff --git a/src/pages/components/settings/backupfiles.js b/src/pages/components/settings/backupfiles.jsx similarity index 100% rename from src/pages/components/settings/backupfiles.js rename to src/pages/components/settings/backupfiles.jsx diff --git a/src/pages/components/settings/logs.js b/src/pages/components/settings/logs.jsx similarity index 100% rename from src/pages/components/settings/logs.js rename to src/pages/components/settings/logs.jsx diff --git a/src/pages/components/settings/security.js b/src/pages/components/settings/security.jsx similarity index 100% rename from src/pages/components/settings/security.js rename to src/pages/components/settings/security.jsx diff --git a/src/pages/components/settings/settingsConfig.js b/src/pages/components/settings/settingsConfig.jsx similarity index 100% rename from src/pages/components/settings/settingsConfig.js rename to src/pages/components/settings/settingsConfig.jsx diff --git a/src/pages/components/statCards/ItemStatComponent.js b/src/pages/components/statCards/ItemStatComponent.jsx similarity index 100% rename from src/pages/components/statCards/ItemStatComponent.js rename to src/pages/components/statCards/ItemStatComponent.jsx diff --git a/src/pages/components/statCards/most_active_users.js b/src/pages/components/statCards/most_active_users.jsx similarity index 100% rename from src/pages/components/statCards/most_active_users.js rename to src/pages/components/statCards/most_active_users.jsx diff --git a/src/pages/components/statCards/most_used_client.js b/src/pages/components/statCards/most_used_client.jsx similarity index 100% rename from src/pages/components/statCards/most_used_client.js rename to src/pages/components/statCards/most_used_client.jsx diff --git a/src/pages/components/statCards/mp_movies.js b/src/pages/components/statCards/mp_movies.jsx similarity index 100% rename from src/pages/components/statCards/mp_movies.js rename to src/pages/components/statCards/mp_movies.jsx diff --git a/src/pages/components/statCards/mp_music.js b/src/pages/components/statCards/mp_music.jsx similarity index 100% rename from src/pages/components/statCards/mp_music.js rename to src/pages/components/statCards/mp_music.jsx diff --git a/src/pages/components/statCards/mp_series.js b/src/pages/components/statCards/mp_series.jsx similarity index 100% rename from src/pages/components/statCards/mp_series.js rename to src/pages/components/statCards/mp_series.jsx diff --git a/src/pages/components/statCards/mv_libraries.js b/src/pages/components/statCards/mv_libraries.jsx similarity index 100% rename from src/pages/components/statCards/mv_libraries.js rename to src/pages/components/statCards/mv_libraries.jsx diff --git a/src/pages/components/statCards/mv_movies.js b/src/pages/components/statCards/mv_movies.jsx similarity index 100% rename from src/pages/components/statCards/mv_movies.js rename to src/pages/components/statCards/mv_movies.jsx diff --git a/src/pages/components/statCards/mv_music.js b/src/pages/components/statCards/mv_music.jsx similarity index 100% rename from src/pages/components/statCards/mv_music.js rename to src/pages/components/statCards/mv_music.jsx diff --git a/src/pages/components/statCards/mv_series.js b/src/pages/components/statCards/mv_series.jsx similarity index 100% rename from src/pages/components/statCards/mv_series.js rename to src/pages/components/statCards/mv_series.jsx diff --git a/src/pages/components/statistics/chart.js b/src/pages/components/statistics/chart.jsx similarity index 100% rename from src/pages/components/statistics/chart.js rename to src/pages/components/statistics/chart.jsx diff --git a/src/pages/components/statistics/daily-play-count.js b/src/pages/components/statistics/daily-play-count.jsx similarity index 100% rename from src/pages/components/statistics/daily-play-count.js rename to src/pages/components/statistics/daily-play-count.jsx diff --git a/src/pages/components/statistics/play-stats-by-day.js b/src/pages/components/statistics/play-stats-by-day.jsx similarity index 100% rename from src/pages/components/statistics/play-stats-by-day.js rename to src/pages/components/statistics/play-stats-by-day.jsx diff --git a/src/pages/components/statistics/play-stats-by-hour.js b/src/pages/components/statistics/play-stats-by-hour.jsx similarity index 100% rename from src/pages/components/statistics/play-stats-by-hour.js rename to src/pages/components/statistics/play-stats-by-hour.jsx diff --git a/src/pages/components/user-info.js b/src/pages/components/user-info.jsx similarity index 100% rename from src/pages/components/user-info.js rename to src/pages/components/user-info.jsx diff --git a/src/pages/components/user-info/globalStats.js b/src/pages/components/user-info/globalStats.jsx similarity index 100% rename from src/pages/components/user-info/globalStats.js rename to src/pages/components/user-info/globalStats.jsx diff --git a/src/pages/components/user-info/globalstats/watchtimestats.js b/src/pages/components/user-info/globalstats/watchtimestats.jsx similarity index 100% rename from src/pages/components/user-info/globalstats/watchtimestats.js rename to src/pages/components/user-info/globalstats/watchtimestats.jsx diff --git a/src/pages/components/user-info/lastplayed.js b/src/pages/components/user-info/lastplayed.jsx similarity index 100% rename from src/pages/components/user-info/lastplayed.js rename to src/pages/components/user-info/lastplayed.jsx diff --git a/src/pages/components/user-info/user-activity.js b/src/pages/components/user-info/user-activity.jsx similarity index 100% rename from src/pages/components/user-info/user-activity.js rename to src/pages/components/user-info/user-activity.jsx diff --git a/src/pages/data-debugger.js b/src/pages/data-debugger.jsx similarity index 100% rename from src/pages/data-debugger.js rename to src/pages/data-debugger.jsx diff --git a/src/pages/home.js b/src/pages/home.jsx similarity index 100% rename from src/pages/home.js rename to src/pages/home.jsx diff --git a/src/pages/libraries.js b/src/pages/libraries.jsx similarity index 100% rename from src/pages/libraries.js rename to src/pages/libraries.jsx diff --git a/src/pages/library_selector.js b/src/pages/library_selector.jsx similarity index 100% rename from src/pages/library_selector.js rename to src/pages/library_selector.jsx diff --git a/src/pages/login.js b/src/pages/login.jsx similarity index 100% rename from src/pages/login.js rename to src/pages/login.jsx diff --git a/src/pages/settings.js b/src/pages/settings.jsx similarity index 100% rename from src/pages/settings.js rename to src/pages/settings.jsx diff --git a/src/pages/setup.js b/src/pages/setup.jsx similarity index 100% rename from src/pages/setup.js rename to src/pages/setup.jsx diff --git a/src/pages/signup.js b/src/pages/signup.jsx similarity index 100% rename from src/pages/signup.js rename to src/pages/signup.jsx diff --git a/src/pages/statistics.js b/src/pages/statistics.jsx similarity index 100% rename from src/pages/statistics.js rename to src/pages/statistics.jsx diff --git a/src/pages/testing.js b/src/pages/testing.jsx similarity index 100% rename from src/pages/testing.js rename to src/pages/testing.jsx diff --git a/src/pages/users.js b/src/pages/users.jsx similarity index 100% rename from src/pages/users.js rename to src/pages/users.jsx diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/setupProxy.js b/src/setupProxy.js deleted file mode 100644 index 2467e96..0000000 --- a/src/setupProxy.js +++ /dev/null @@ -1,77 +0,0 @@ -const { createProxyMiddleware } = require('http-proxy-middleware'); - -module.exports = function(app) { - app.use( - `/api`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/proxy`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/stats`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/sync`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/auth`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/backup`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - `/logs`, - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - '/socket.io', - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - '/swagger', - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true, - }) - ); - app.use( - '/utils', - createProxyMiddleware({ - target: `http://127.0.0.1:${process.env.PORT || 3003}`, - changeOrigin: true - }) - ); - - - console.log(`Proxy middleware applied`); -}; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f6648e2 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,33 @@ +import { defineConfig, splitVendorChunkPlugin } from 'vite'; +import react from '@vitejs/plugin-react-swc'; + +// https://vitejs.dev/config/ +export default defineConfig({ + server: { + port: 3000, + proxy: { + '/api': 'http://localhost:3003', + '/proxy': 'http://localhost:3003', + '/stats': 'http://localhost:3003', + '/sync': 'http://localhost:3003', + '/auth': 'http://localhost:3003', + '/backup': 'http://localhost:3003', + '/logs': 'http://localhost:3003', + '/socket.io': 'http://localhost:3003', + '/swagger': 'http://localhost:3003', + '/utils': 'http://localhost:3003', + }, + }, + target: ['es2015'], + rollupOptions: { + output: { + manualChunks: { + react: ['react'], + axios: ['axios'], + 'react-router-dom': ['react-router-dom'], + 'react-toastify': ['react-toastify'], + }, + }, + }, + plugins: [react(), splitVendorChunkPlugin()], +});