From 41d974154222b9937f412e3d40d0cd2d79b4763c Mon Sep 17 00:00:00 2001 From: Vencislav Atanasov Date: Fri, 20 Sep 2024 22:27:34 +0300 Subject: [PATCH] Completely remote Redux toolkit --- package.json | 2 -- src/app/store.js | 15 ------------ src/features/apiSlice.js | 51 ---------------------------------------- src/main.jsx | 14 ++++------- yarn.lock | 45 +---------------------------------- 5 files changed, 6 insertions(+), 121 deletions(-) delete mode 100644 src/app/store.js delete mode 100644 src/features/apiSlice.js diff --git a/package.json b/package.json index 5481d98..b65a053 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "dependencies": { "@fortawesome/fontawesome-free": "^6.6.0", "@popperjs/core": "^2.11.8", - "@reduxjs/toolkit": "^2.2.5", "@uidotdev/usehooks": "^2.4.1", "bootstrap": "^5.3.3", "bootswatch": "^5.3.3", @@ -28,7 +27,6 @@ "react-dom": "^18.3.1", "react-i18next": "^15.0.2", "react-oidc-context": "^3.1.1", - "react-redux": "^9.1.2", "react-router-dom": "^6.26.2", "sass": "^1.79.1", "swr": "^2.2.5", diff --git a/src/app/store.js b/src/app/store.js deleted file mode 100644 index 5f904d2..0000000 --- a/src/app/store.js +++ /dev/null @@ -1,15 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit'; -import { setupListeners } from '@reduxjs/toolkit/query'; -import { - authenticatedDeviceApiSlice -} from '../features/apiSlice'; - -export const store = configureStore({ - reducer: { - [authenticatedDeviceApiSlice.reducerPath]: authenticatedDeviceApiSlice.reducer, - }, - middleware: getDefaultMiddleware => - getDefaultMiddleware().concat(authenticatedDeviceApiSlice.middleware), -}); - -setupListeners(store.dispatch); diff --git a/src/features/apiSlice.js b/src/features/apiSlice.js deleted file mode 100644 index 5245e08..0000000 --- a/src/features/apiSlice.js +++ /dev/null @@ -1,51 +0,0 @@ -import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; -import { getAccessToken, isAccessTokenExpired } from '../hooks/useAuthStorage.js'; -import { refreshTokenIfNeeded } from '../oauth.js'; - -const deviceApiBaseUrl = import.meta.env.PORTIER_URL + 'api/'; - -const authenticatedDeviceBaseQuery = fetchBaseQuery({ - baseUrl: deviceApiBaseUrl, - prepareHeaders: headers => { - headers.set('accept', 'application/json'); - - const token = getAccessToken(); - - if (token) { - headers.set('authorization', 'Bearer ' + token); - } - - return headers; - }, -}); - -const authenticatedDeviceBaseQueryWithReauth = async (args, api, extraOptions) => { - if (isAccessTokenExpired()) { - await refreshTokenIfNeeded(); - } - - let result = await authenticatedDeviceBaseQuery(args, api, extraOptions); - - if (result?.error?.status === 401 && await refreshTokenIfNeeded()) { - return authenticatedDeviceBaseQuery(args, api, extraOptions); - } - - return result; -}; - -export const authenticatedDeviceApiSlice = createApi({ - reducerPath: 'authenticatedDeviceApi', - baseQuery: authenticatedDeviceBaseQueryWithReauth, - endpoints: builder => ({ - deviceAction: builder.mutation({ - query: params => ({ - url: 'device/' + params.deviceId + '/' + params.action, - method: 'POST', - }), - }), - }), -}); - -export const { - useDeviceActionMutation, -} = authenticatedDeviceApiSlice; diff --git a/src/main.jsx b/src/main.jsx index 7768e5b..564194b 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,10 +1,8 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; -import { Provider } from 'react-redux'; import { BrowserRouter } from 'react-router-dom'; import { AuthProvider } from 'react-oidc-context'; -import { store } from './app/store'; import { oidc as oidcConfig } from './config.js'; import './i18n.js'; @@ -15,12 +13,10 @@ import 'bootswatch/dist/materia/bootstrap.css'; createRoot(document.getElementById('root')).render( - - - - - - - + + + + + , ); diff --git a/yarn.lock b/yarn.lock index 0cd426c..ad0449d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -436,16 +436,6 @@ dependencies: "@swc/helpers" "^0.5.0" -"@reduxjs/toolkit@^2.2.5": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.7.tgz#199e3d10ccb39267cb5aee92c0262fd9da7fdfb2" - integrity sha512-faI3cZbSdFb8yv9dhDTmGwclW0vk0z5o1cia+kf7gCbaCwHI5e+7tP57mJUv22pNcNbeA62GSrPpfrUfdXcQ6g== - dependencies: - immer "^10.0.3" - redux "^5.0.1" - redux-thunk "^3.1.0" - reselect "^5.1.0" - "@remix-run/router@1.19.2": version "1.19.2" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273" @@ -625,11 +615,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/use-sync-external-store@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== - "@types/warning@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" @@ -1529,11 +1514,6 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immer@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" - integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== - immutable@^4.0.0: version "4.3.7" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" @@ -2105,14 +2085,6 @@ react-oidc-context@^3.1.1: resolved "https://registry.yarnpkg.com/react-oidc-context/-/react-oidc-context-3.1.1.tgz#5e711f92ca071186fa04d12d6ff2e3f1d474d7d8" integrity sha512-pXZYVUVOU+wnLFZVh5HFGiAyAHpy0mm7mZBVp5oNuCln/7yd+Uhb7KfYI2QN+LLQI0kIv6FHIcqeUFjMIsM5gA== -react-redux@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b" - integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w== - dependencies: - "@types/use-sync-external-store" "^0.0.3" - use-sync-external-store "^1.0.0" - react-refresh@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" @@ -2155,16 +2127,6 @@ readdirp@^4.0.1: resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.1.tgz#b2fe35f8dca63183cd3b86883ecc8f720ea96ae6" integrity sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw== -redux-thunk@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" - integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== - -redux@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" - integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== - reflect.getprototypeof@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" @@ -2193,11 +2155,6 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -reselect@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" - integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2547,7 +2504,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==