code refactoring, removed react helmet
This commit is contained in:
@@ -18,7 +18,6 @@
|
|||||||
"fp-ts": "^2.16.1",
|
"fp-ts": "^2.16.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-helmet": "^6.1.0",
|
|
||||||
"react-router-dom": "^6.17.0",
|
"react-router-dom": "^6.17.0",
|
||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"rxjs": "^7.8.1"
|
"rxjs": "^7.8.1"
|
||||||
|
|||||||
27
frontend/pnpm-lock.yaml
generated
27
frontend/pnpm-lock.yaml
generated
@@ -29,9 +29,6 @@ dependencies:
|
|||||||
react-dom:
|
react-dom:
|
||||||
specifier: ^18.2.0
|
specifier: ^18.2.0
|
||||||
version: 18.2.0(react@18.2.0)
|
version: 18.2.0(react@18.2.0)
|
||||||
react-helmet:
|
|
||||||
specifier: ^6.1.0
|
|
||||||
version: 6.1.0(react@18.2.0)
|
|
||||||
react-router-dom:
|
react-router-dom:
|
||||||
specifier: ^6.17.0
|
specifier: ^6.17.0
|
||||||
version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
|
version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
|
||||||
@@ -1138,22 +1135,6 @@ packages:
|
|||||||
scheduler: 0.23.0
|
scheduler: 0.23.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/react-fast-compare@3.2.2:
|
|
||||||
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/react-helmet@6.1.0(react@18.2.0):
|
|
||||||
resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==}
|
|
||||||
peerDependencies:
|
|
||||||
react: '>=16.3.0'
|
|
||||||
dependencies:
|
|
||||||
object-assign: 4.1.1
|
|
||||||
prop-types: 15.8.1
|
|
||||||
react: 18.2.0
|
|
||||||
react-fast-compare: 3.2.2
|
|
||||||
react-side-effect: 2.1.2(react@18.2.0)
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/react-is@16.13.1:
|
/react-is@16.13.1:
|
||||||
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -1185,14 +1166,6 @@ packages:
|
|||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/react-side-effect@2.1.2(react@18.2.0):
|
|
||||||
resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==}
|
|
||||||
peerDependencies:
|
|
||||||
react: ^16.3.0 || ^17.0.0 || ^18.0.0
|
|
||||||
dependencies:
|
|
||||||
react: 18.2.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
|
/react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
|
||||||
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
|
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import Toolbar from '@mui/material/Toolbar'
|
|||||||
import Typography from '@mui/material/Typography'
|
import Typography from '@mui/material/Typography'
|
||||||
import { grey } from '@mui/material/colors'
|
import { grey } from '@mui/material/colors'
|
||||||
import { Suspense, useMemo, useState } from 'react'
|
import { Suspense, useMemo, useState } from 'react'
|
||||||
import { Helmet } from 'react-helmet'
|
|
||||||
import { Link, Outlet } from 'react-router-dom'
|
import { Link, Outlet } from 'react-router-dom'
|
||||||
import { useRecoilValue } from 'recoil'
|
import { useRecoilValue } from 'recoil'
|
||||||
import { settingsState } from './atoms/settings'
|
import { settingsState } from './atoms/settings'
|
||||||
@@ -56,11 +55,6 @@ export default function Layout() {
|
|||||||
return (
|
return (
|
||||||
<ThemeProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
<SocketSubscriber />
|
<SocketSubscriber />
|
||||||
<Helmet>
|
|
||||||
<title>
|
|
||||||
{settings.appTitle}
|
|
||||||
</title>
|
|
||||||
</Helmet>
|
|
||||||
<Box sx={{ display: 'flex' }}>
|
<Box sx={{ display: 'flex' }}>
|
||||||
<CssBaseline />
|
<CssBaseline />
|
||||||
<AppBar position="absolute" open={open}>
|
<AppBar position="absolute" open={open}>
|
||||||
|
|||||||
@@ -6,7 +6,5 @@ export const rpcClientState = selector({
|
|||||||
key: 'rpcClientState',
|
key: 'rpcClientState',
|
||||||
get: ({ get }) =>
|
get: ({ get }) =>
|
||||||
new RPCClient(get(rpcHTTPEndpoint), get(rpcWebSocketEndpoint)),
|
new RPCClient(get(rpcHTTPEndpoint), get(rpcWebSocketEndpoint)),
|
||||||
set: ({ get }) =>
|
|
||||||
new RPCClient(get(rpcHTTPEndpoint), get(rpcWebSocketEndpoint)),
|
|
||||||
dangerouslyAllowMutability: true,
|
dangerouslyAllowMutability: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ export const availableDownloadPathsState = selector({
|
|||||||
key: 'availableDownloadPathsState',
|
key: 'availableDownloadPathsState',
|
||||||
get: async ({ get }) => {
|
get: async ({ get }) => {
|
||||||
const res = await get(rpcClientState).directoryTree()
|
const res = await get(rpcClientState).directoryTree()
|
||||||
|
.catch(() => ({ result: [] }))
|
||||||
return res.result
|
return res.result
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as O from 'fp-ts/Option'
|
import * as O from 'fp-ts/Option'
|
||||||
import { useEffect, useMemo } from 'react'
|
import { useEffect, useMemo } from 'react'
|
||||||
import { useRecoilState, useRecoilValue } from 'recoil'
|
import { useRecoilState, useRecoilValue } from 'recoil'
|
||||||
import { share, take, timer } from 'rxjs'
|
import { take, timer } from 'rxjs'
|
||||||
import { downloadsState } from '../atoms/downloads'
|
import { downloadsState } from '../atoms/downloads'
|
||||||
import { serverAddressAndPortState } from '../atoms/settings'
|
import { serverAddressAndPortState } from '../atoms/settings'
|
||||||
import { connectedState } from '../atoms/status'
|
import { connectedState } from '../atoms/status'
|
||||||
@@ -13,7 +13,7 @@ import { datetimeCompareFunc, isRPCResponse } from '../utils'
|
|||||||
|
|
||||||
interface Props extends React.HTMLAttributes<HTMLBaseElement> { }
|
interface Props extends React.HTMLAttributes<HTMLBaseElement> { }
|
||||||
|
|
||||||
const SocketSubscriber: React.FC<Props> = ({ children }) => {
|
const SocketSubscriber: React.FC<Props> = () => {
|
||||||
const [connected, setIsConnected] = useRecoilState(connectedState)
|
const [connected, setIsConnected] = useRecoilState(connectedState)
|
||||||
const [, setDownloads] = useRecoilState(downloadsState)
|
const [, setDownloads] = useRecoilState(downloadsState)
|
||||||
|
|
||||||
@@ -23,19 +23,22 @@ const SocketSubscriber: React.FC<Props> = ({ children }) => {
|
|||||||
const { client } = useRPC()
|
const { client } = useRPC()
|
||||||
const { pushMessage } = useToast()
|
const { pushMessage } = useToast()
|
||||||
|
|
||||||
const sharedSocket$ = useMemo(() => client.socket$.pipe(share()), [])
|
const socketOnce$ = useMemo(() => client.socket$.pipe(take(1)), [])
|
||||||
const socketOnce$ = useMemo(() => sharedSocket$.pipe(take(1)), [])
|
|
||||||
|
|
||||||
useSubscription(socketOnce$, () => {
|
useEffect(() => {
|
||||||
|
if (!connected) {
|
||||||
|
socketOnce$.subscribe(() => {
|
||||||
setIsConnected(true)
|
setIsConnected(true)
|
||||||
pushMessage(
|
pushMessage(
|
||||||
`${i18n.t('toastConnected')} (${serverAddressAndPort})`,
|
`${i18n.t('toastConnected')} (${serverAddressAndPort})`,
|
||||||
"success"
|
"success"
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
}, [connected])
|
||||||
|
|
||||||
useSubscription(
|
useSubscription(
|
||||||
sharedSocket$,
|
client.socket$,
|
||||||
event => {
|
event => {
|
||||||
if (!isRPCResponse(event)) { return }
|
if (!isRPCResponse(event)) { return }
|
||||||
if (!Array.isArray(event.result)) { return }
|
if (!Array.isArray(event.result)) { return }
|
||||||
@@ -50,7 +53,6 @@ const SocketSubscriber: React.FC<Props> = ({ children }) => {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
setDownloads(O.none)
|
setDownloads(O.none)
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
@@ -64,13 +66,13 @@ const SocketSubscriber: React.FC<Props> = ({ children }) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
timer(0, 1000).subscribe(() => client.running())
|
const sub = timer(0, 1000).subscribe(() => client.running())
|
||||||
}
|
|
||||||
}, [connected])
|
|
||||||
|
|
||||||
return (
|
return () => sub.unsubscribe()
|
||||||
<>{children}</>
|
}
|
||||||
)
|
}, [connected, client])
|
||||||
|
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
export default SocketSubscriber
|
export default SocketSubscriber
|
||||||
@@ -19,11 +19,13 @@ export class RPCClient {
|
|||||||
constructor(httpEndpoint: string, webSocketEndpoint: string) {
|
constructor(httpEndpoint: string, webSocketEndpoint: string) {
|
||||||
this.seq = 0
|
this.seq = 0
|
||||||
this.httpEndpoint = httpEndpoint
|
this.httpEndpoint = httpEndpoint
|
||||||
this._socket$ = webSocket<any>(webSocketEndpoint)
|
this._socket$ = webSocket<any>({
|
||||||
|
url: webSocketEndpoint
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public get socket$(): Observable<RPCResponse<RPCResult[]>> {
|
public get socket$(): Observable<RPCResponse<RPCResult[]>> {
|
||||||
return this._socket$.asObservable()
|
return this._socket$
|
||||||
}
|
}
|
||||||
|
|
||||||
private incrementSeq() {
|
private incrementSeq() {
|
||||||
|
|||||||
Reference in New Issue
Block a user