Skip to content

Commit

Permalink
jotai migration
Browse files Browse the repository at this point in the history
  • Loading branch information
marcopiovanello committed Nov 12, 2024
1 parent 4a87ea5 commit 315c87d
Show file tree
Hide file tree
Showing 37 changed files with 299 additions and 420 deletions.
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"react-dom": "^18.3.1",
"react-router-dom": "^6.23.1",
"react-virtuoso": "^4.7.11",
"recoil": "^0.7.7",
"jotai": "^2.10.2",
"rxjs": "^7.8.1"
},
"devDependencies": {
Expand Down
47 changes: 20 additions & 27 deletions frontend/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions frontend/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { RouterProvider } from 'react-router-dom'
import { RecoilRoot } from 'recoil'
import { Provider } from 'jotai'
import { router } from './router'

export function App() {
return (
<RecoilRoot>
<Provider>
<RouterProvider router={router} />
</RecoilRoot>
</Provider>
)
}
4 changes: 2 additions & 2 deletions frontend/src/Layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import Typography from '@mui/material/Typography'
import { grey } from '@mui/material/colors'
import { useMemo, useState } from 'react'
import { Link, Outlet } from 'react-router-dom'
import { useRecoilValue } from 'recoil'
import { settingsState } from './atoms/settings'
import AppBar from './components/AppBar'
import Drawer from './components/Drawer'
Expand All @@ -29,11 +28,12 @@ import SocketSubscriber from './components/SocketSubscriber'
import ThemeToggler from './components/ThemeToggler'
import { useI18n } from './hooks/useI18n'
import Toaster from './providers/ToasterProvider'
import { useAtomValue } from 'jotai'

export default function Layout() {
const [open, setOpen] = useState(false)

const settings = useRecoilValue(settingsState)
const settings = useAtomValue(settingsState)

const mode = settings.theme
const theme = useMemo(() =>
Expand Down
64 changes: 27 additions & 37 deletions frontend/src/atoms/downloadTemplate.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,40 @@
import { getOrElse } from 'fp-ts/lib/Either'
import { pipe } from 'fp-ts/lib/function'
import { atom, selector } from 'recoil'
import { ffetch } from '../lib/httpClient'
import { CustomTemplate } from '../types'
import { serverSideCookiesState, serverURL } from './settings'
import { atom } from 'jotai'
import { atomWithStorage } from 'jotai/utils'

export const cookiesTemplateState = selector({
key: 'cookiesTemplateState',
get: ({ get }) => get(serverSideCookiesState)
export const cookiesTemplateState = atom<Promise<string>>(async (get) =>
await get(serverSideCookiesState)
? '--cookies=cookies.txt'
: ''
})
)

export const customArgsState = atom({
key: 'customArgsState',
default: localStorage.getItem('customArgs') ?? '',
effects: [
({ onSet }) => onSet(e => localStorage.setItem('customArgs', e))
]
})
export const customArgsState = atomWithStorage(
'customArgs',
localStorage.getItem('customArgs') ?? ''
)

export const filenameTemplateState = atom({
key: 'filenameTemplateState',
default: localStorage.getItem('lastFilenameTemplate') ?? '',
effects: [
({ onSet }) => onSet(e => localStorage.setItem('lastFilenameTemplate', e))
]
})
export const filenameTemplateState = atomWithStorage(
'lastFilenameTemplate',
localStorage.getItem('lastFilenameTemplate') ?? ''
)

export const downloadTemplateState = selector({
key: 'downloadTemplateState',
get: ({ get }) =>
`${get(customArgsState)} ${get(cookiesTemplateState)}`
.replace(/ +/g, ' ')
.trim()
})
export const downloadTemplateState = atom<string>((get) =>
`${get(customArgsState)} ${get(cookiesTemplateState)}`
.replace(/ +/g, ' ')
.trim()
)

export const savedTemplatesState = selector<CustomTemplate[]>({
key: 'savedTemplatesState',
get: async ({ get }) => {
const task = ffetch<CustomTemplate[]>(`${get(serverURL)}/api/v1/template/all`)
const either = await task()
export const savedTemplatesState = atom<Promise<CustomTemplate[]>>(async (get) => {
const task = ffetch<CustomTemplate[]>(`${get(serverURL)}/api/v1/template/all`)
const either = await task()

return pipe(
either,
getOrElse(() => new Array<CustomTemplate>())
)
}
})
return pipe(
either,
getOrElse(() => new Array<CustomTemplate>())
)
}
)
23 changes: 7 additions & 16 deletions frontend/src/atoms/downloads.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
import * as O from 'fp-ts/Option'
import { pipe } from 'fp-ts/lib/function'
import { atom, selector } from 'recoil'
import { RPCResult } from '../types'
import { atom } from 'jotai'

export const downloadsState = atom<O.Option<RPCResult[]>>({
key: 'downloadsState',
default: O.none
})
export const downloadsState = atom<O.Option<RPCResult[]>>(O.none)

export const loadingDownloadsState = selector<boolean>({
key: 'loadingDownloadsState',
get: ({ get }) => O.isNone(get(downloadsState))
})
export const loadingDownloadsState = atom<boolean>((get) => O.isNone(get(downloadsState)))

export const activeDownloadsState = selector<RPCResult[]>({
key: 'activeDownloadsState',
get: ({ get }) => pipe(
get(downloadsState),
O.getOrElse(() => new Array<RPCResult>())
)
})
export const activeDownloadsState = atom<RPCResult[]>((get) => pipe(
get(downloadsState),
O.getOrElse(() => new Array<RPCResult>())
))
8 changes: 2 additions & 6 deletions frontend/src/atoms/i18n.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { selector } from 'recoil'
import { atom } from 'jotai'
import I18nBuilder from '../lib/intl'
import { languageState } from './settings'

export const i18nBuilderState = selector({
key: 'i18nBuilderState',
get: ({ get }) => new I18nBuilder(get(languageState)),
dangerouslyAllowMutability: true,
})
export const i18nBuilderState = atom((get) => new I18nBuilder(get(languageState)))
32 changes: 13 additions & 19 deletions frontend/src/atoms/rpc.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
import { atom, selector } from 'recoil'
import { atom } from 'jotai'
import { RPCClient } from '../lib/rpcClient'
import { rpcHTTPEndpoint, rpcWebSocketEndpoint } from './settings'
import { atomWithStorage } from 'jotai/utils'

export const rpcClientState = selector({
key: 'rpcClientState',
get: ({ get }) =>
new RPCClient(
get(rpcHTTPEndpoint),
get(rpcWebSocketEndpoint),
localStorage.getItem('token') ?? ''
),
dangerouslyAllowMutability: true,
})
export const rpcClientState = atom((get) =>
new RPCClient(
get(rpcHTTPEndpoint),
get(rpcWebSocketEndpoint),
localStorage.getItem('token') ?? ''
),
)

export const rpcPollingTimeState = atom({
key: 'rpcPollingTimeState',
default: Number(localStorage.getItem('rpc-polling-time')) || 1000,
effects: [
({ onSet }) =>
onSet(a => localStorage.setItem('rpc-polling-time', a.toString()))
]
})
export const rpcPollingTimeState = atomWithStorage(
'rpc-polling-time',
Number(localStorage.getItem('rpc-polling-time')) || 1000
)
Loading

0 comments on commit 315c87d

Please sign in to comment.