navidrome/ui/src/App.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

156 lines
4.1 KiB
JavaScript
Raw Normal View History

import React, { useEffect } from 'react'
import ReactGA from 'react-ga'
import { Provider } from 'react-redux'
2020-03-31 20:04:10 +02:00
import { createHashHistory } from 'history'
import { Admin as RAAdmin, Resource } from 'react-admin'
import { HotKeys } from 'react-hotkeys'
2020-01-20 15:54:29 +01:00
import dataProvider from './dataProvider'
import authProvider from './authProvider'
2020-06-19 16:51:39 +02:00
import { Layout, Login, Logout } from './layout'
import transcoding from './transcoding'
2020-03-12 14:38:07 +01:00
import player from './player'
2020-01-20 02:40:18 +01:00
import user from './user'
import song from './song'
import album from './album'
import artist from './artist'
2020-05-06 00:28:55 +02:00
import playlist from './playlist'
import radio from './radio'
2023-01-20 04:52:55 +01:00
import share from './share'
import { Player } from './audioplayer'
import customRoutes from './routes'
import {
themeReducer,
addToPlaylistDialogReducer,
expandInfoDialogReducer,
listenBrainzTokenDialogReducer,
playerReducer,
albumViewReducer,
activityReducer,
2020-11-20 05:06:09 +01:00
settingsReducer,
replayGainReducer,
downloadMenuDialogReducer,
2023-01-24 19:04:00 +01:00
shareDialogReducer,
} from './reducers'
2020-03-31 20:04:10 +02:00
import createAdminStore from './store/createAdminStore'
2020-05-02 23:44:24 +02:00
import { i18nProvider } from './i18n'
2023-01-20 04:52:55 +01:00
import config, { shareInfo } from './config'
import { setDispatch, startEventStream, stopEventStream } from './eventStream'
2021-02-04 00:29:33 +01:00
import { keyMap } from './hotkeys'
import useChangeThemeColor from './useChangeThemeColor'
2023-03-11 05:14:51 +01:00
import SharePlayer from './share/SharePlayer'
2020-11-14 00:40:33 +01:00
2020-03-31 20:04:10 +02:00
const history = createHashHistory()
if (config.gaTrackingId) {
ReactGA.initialize(config.gaTrackingId)
history.listen((location) => {
ReactGA.pageview(location.pathname)
})
ReactGA.pageview(window.location.pathname)
}
const adminStore = createAdminStore({
authProvider,
dataProvider,
history,
customReducers: {
player: playerReducer,
albumView: albumViewReducer,
theme: themeReducer,
addToPlaylistDialog: addToPlaylistDialogReducer,
downloadMenuDialog: downloadMenuDialogReducer,
expandInfoDialog: expandInfoDialogReducer,
listenBrainzTokenDialog: listenBrainzTokenDialogReducer,
2023-01-24 19:04:00 +01:00
shareDialog: shareDialogReducer,
activity: activityReducer,
settings: settingsReducer,
replayGain: replayGainReducer,
},
})
2020-04-08 19:20:02 +02:00
const App = () => (
<Provider store={adminStore}>
<Admin />
</Provider>
)
const Admin = (props) => {
useChangeThemeColor()
useEffect(() => {
if (config.devActivityPanel) {
2021-11-30 00:49:29 +01:00
setDispatch(adminStore.dispatch)
authProvider
.checkAuth()
.then(() => startEventStream(adminStore.dispatch))
.catch(() => {})
}
return () => {
stopEventStream()
}
}, [])
return (
<RAAdmin
2021-02-01 00:50:27 +01:00
disableTelemetry
2020-04-08 19:20:02 +02:00
dataProvider={dataProvider}
authProvider={authProvider}
i18nProvider={i18nProvider}
customRoutes={customRoutes}
history={history}
layout={Layout}
loginPage={Login}
2020-06-19 16:51:39 +02:00
logoutButton={Logout}
{...props}
>
2020-04-08 19:20:02 +02:00
{(permissions) => [
2020-07-28 14:49:28 +02:00
<Resource name="album" {...album} options={{ subMenu: 'albumList' }} />,
<Resource name="artist" {...artist} />,
<Resource name="song" {...song} />,
<Resource
name="radio"
{...(permissions === 'admin' ? radio.admin : radio.all)}
/>,
config.enableSharing && <Resource name="share" {...share} />,
<Resource
name="playlist"
{...playlist}
options={{ subMenu: 'playlist' }}
/>,
<Resource name="user" {...user} options={{ subMenu: 'settings' }} />,
2020-04-08 19:20:02 +02:00
<Resource
name="player"
{...player}
options={{ subMenu: 'settings' }}
/>,
permissions === 'admin' ? (
2020-03-31 20:04:10 +02:00
<Resource
2020-04-08 19:20:02 +02:00
name="transcoding"
{...transcoding}
options={{ subMenu: 'settings' }}
2020-04-08 19:20:02 +02:00
/>
) : (
<Resource name="transcoding" />
),
2020-05-02 00:29:50 +02:00
<Resource name="translation" />,
2021-07-17 01:41:49 +02:00
<Resource name="genre" />,
2020-05-12 03:27:00 +02:00
<Resource name="playlistTrack" />,
<Resource name="keepalive" />,
2020-04-26 20:50:44 +02:00
<Player />,
2020-04-08 19:20:02 +02:00
]}
</RAAdmin>
)
}
2023-01-20 04:52:55 +01:00
const AppWithHotkeys = () => {
if (config.enableSharing && shareInfo) {
2023-01-21 01:53:53 +01:00
return <SharePlayer />
2023-01-20 04:52:55 +01:00
}
return (
<HotKeys keyMap={keyMap}>
<App />
</HotKeys>
)
}
2021-02-04 00:29:33 +01:00
export default AppWithHotkeys