Skip to content

Commit c6eab7a

Browse files
authored
Merge pull request #28 from RonasIT/prd-1563-resolve-deps-errors
PRD-1563: Resolve dependency issues
2 parents b2fd553 + 81e59d4 commit c6eab7a

File tree

5 files changed

+28
-76
lines changed

5 files changed

+28
-76
lines changed

README.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@ Wrapper utilities for CRUD operations in REST APIs entities using [RTK Query](ht
1010
npm i @ronas-it/rtkq-entity-api
1111
```
1212

13-
If your app uses `axios-observable`, install it along with `rxjs`:
14-
15-
```sh
16-
npm i axios-observable rxjs
17-
```
18-
19-
Note that support of `axios-observable` will be removed in upcoming major release.
20-
2113
2. Create base query with your API configuration, for example [using Axios](https://redux-toolkit.js.org/rtk-query/usage/customizing-queries#axios-basequery):
2214

2315
```ts
@@ -298,14 +290,21 @@ npm i @react-native-community/netinfo
298290
Example
299291

300292
```tsx
293+
import { addEventListener, fetch } from '@react-native-community/netinfo';
301294
import { setupRefetchListeners } from '@ronas-it/rtkq-entity-api';
295+
import ReactNative from 'react-native';
302296
import { useDispatch } from 'react-redux';
303297

304298
function App(): ReactElement {
305299
const dispatch = useDispatch();
306300

307301
useEffect(() => {
308-
const unsubscribeRefetchListeners = setupRefetchListeners(dispatch);
302+
const unsubscribeRefetchListeners = setupRefetchListeners(
303+
dispatch,
304+
{ refetchOnFocus: true, refetchOnReconnect: true },
305+
{ addEventListener, fetch },
306+
ReactNative,
307+
);
309308

310309
return unsubscribeRefetchListeners;
311310
}, []);

package-lock.json

Lines changed: 1 addition & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@
4747
"type-fest": "^3.13.1"
4848
},
4949
"peerDependencies": {
50-
"@react-native-community/netinfo": "^11.4.0",
51-
"axios-observable": "^2.1.0",
52-
"rxjs": "^7.8.1"
50+
"@react-native-community/netinfo": "^11.4.0"
51+
},
52+
"peerDependenciesMeta": {
53+
"@react-native-community/netinfo": {
54+
"optional": true
55+
}
5356
},
5457
"devDependencies": {
5558
"@eslint/compat": "^1.2.4",

src/utils/create-axios-base-query.ts

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ import { BaseQueryApi, BaseQueryFn } from '@reduxjs/toolkit/dist/query/index.d';
33
import { MaybePromise } from '@reduxjs/toolkit/src/query/tsHelpers';
44
import { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from 'axios';
55
import { merge } from 'lodash';
6-
// TODO: Drop support for axios-observable in next major version
7-
import type { Axios as AxiosObservableInstance } from 'axios-observable';
8-
import type { lastValueFrom as lastValueFromType } from 'rxjs';
96

107
export type BaseQueryFunction = BaseQueryFn<
118
AxiosRequestConfig,
@@ -16,14 +13,11 @@ export type BaseQueryFunction = BaseQueryFn<
1613
>;
1714

1815
export type AxiosBaseQueryArgs = {
19-
getHttpClient: (api: BaseQueryApi & { extra?: any }) => AxiosObservableInstance | AxiosInstance;
16+
getHttpClient: (api: BaseQueryApi & { extra?: any }) => AxiosInstance;
2017
prepareHeaders?: (api: BaseQueryApi & { extra?: any }) => MaybePromise<RawAxiosRequestHeaders>;
2118
};
2219

2320
export const createAxiosBaseQuery = ({ getHttpClient, prepareHeaders }: AxiosBaseQueryArgs): BaseQueryFunction => {
24-
const isDevEnvironment = (typeof __DEV__ !== 'undefined' && __DEV__) || process?.env?.NODE_ENV === 'development';
25-
let isDeprecationWarningShown = false;
26-
2721
return async (requestConfig, api: BaseQueryApi) => {
2822
const extraHeaders: RawAxiosRequestHeaders = prepareHeaders
2923
? await prepareHeaders(api as BaseQueryApi & { extra?: any })
@@ -33,20 +27,7 @@ export const createAxiosBaseQuery = ({ getHttpClient, prepareHeaders }: AxiosBas
3327
const httpClient = getHttpClient(api as BaseQueryApi & { extra?: any });
3428

3529
try {
36-
const AxiosObservable = require('axios-observable').Axios as typeof AxiosObservableInstance;
37-
const usesAxiosObservable = httpClient instanceof AxiosObservable;
38-
const lastValueFrom = require('rxjs').lastValueFrom as typeof lastValueFromType;
39-
40-
if (!isDeprecationWarningShown && usesAxiosObservable && isDevEnvironment) {
41-
isDeprecationWarningShown = true;
42-
console.warn(
43-
'Support of Axios Observable is deprecated and will be removed in the next major version. Please use Axios instead.',
44-
);
45-
}
46-
47-
const response = usesAxiosObservable
48-
? await lastValueFrom(httpClient.request(requestConfig))
49-
: await httpClient.request(requestConfig);
30+
const response = await httpClient.request(requestConfig);
5031

5132
return {
5233
data: response.data,

src/utils/setup-refetch-listeners.ts

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,17 @@ export function setupRefetchListeners(
99
refetchOnReconnect: true,
1010
refetchOnFocus: true,
1111
},
12+
netInfoRef: {
13+
fetch: typeof fetch;
14+
addEventListener: typeof addEventListener;
15+
},
16+
reactNativeRef: {
17+
AppState: RNAppState;
18+
Platform: RNPlatform;
19+
},
1220
): () => void {
1321
return setupListeners(storeDispatch, (dispatch, actions) => {
14-
let ReactNative: { AppState: RNAppState; Platform: RNPlatform };
15-
16-
let NetInfo: {
17-
addEventListener: typeof addEventListener;
18-
fetch: typeof fetch;
19-
};
20-
21-
try {
22-
NetInfo = require('@react-native-community/netinfo');
23-
ReactNative = require('react-native');
24-
} catch (error) {
25-
throw new Error(
26-
'To use \'refetchOnReconnect\' and \'refetchOnFocus\' you must setup @react-native-community/netinfo and react-native package.',
27-
);
28-
}
29-
30-
const { AppState, Platform } = ReactNative;
22+
const { AppState, Platform } = reactNativeRef;
3123

3224
if (!Platform?.OS || Platform.OS === 'web') {
3325
throw new Error(
@@ -39,7 +31,7 @@ export function setupRefetchListeners(
3931

4032
if (options.refetchOnFocus) {
4133
const { remove: appStateUnsubscribe } = AppState.addEventListener('change', async (state) => {
42-
const { isConnected, isInternetReachable } = await NetInfo.fetch();
34+
const { isConnected, isInternetReachable } = await netInfoRef.fetch();
4335
const hasConnection = isConnected && isInternetReachable;
4436

4537
if (hasConnection) {
@@ -51,7 +43,7 @@ export function setupRefetchListeners(
5143
}
5244

5345
if (options.refetchOnReconnect) {
54-
const netInfoUnsubscribe = NetInfo.addEventListener(({ isConnected, isInternetReachable }: NetInfoState) => {
46+
const netInfoUnsubscribe = netInfoRef.addEventListener(({ isConnected, isInternetReachable }: NetInfoState) => {
5547
const hasConnection = !!(isConnected && isInternetReachable);
5648

5749
dispatch(hasConnection ? actions.onOnline() : actions.onOffline());

0 commit comments

Comments
 (0)