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()],
+});