65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
import { initDB } from "@/database/localdb";
|
|
import { call, put, select, takeEvery } from "redux-saga/effects";
|
|
import { SERVER_IP, SERVER_PORT } from "@/constants/Constants";
|
|
import axios, { AxiosResponse } from "axios"
|
|
import { addDrug, fetchDrugs, removeDrug, updateDrug } from "./localdbSaga";
|
|
import { fetch, NetInfoState } from "@react-native-community/netinfo";
|
|
import { setConnected, setOnline } from "@/redux/features/status/statusSlice";
|
|
import { Status } from "@/redux/features/status/status";
|
|
import { addDrugServer, checkConnection, fetchDrugsServer, removeDrugServer, updateDrugServer, webSocketSaga } from "./serverSaga";
|
|
|
|
|
|
function* initialize() {
|
|
yield call(initDB);
|
|
yield call(checkConnection);
|
|
console.log("Initialized");
|
|
yield put({ type: 'drug/fetch' });
|
|
yield webSocketSaga();
|
|
}
|
|
|
|
|
|
function* fetchOfflineOrOnline() {
|
|
const status: Status = yield select(state => state.status);
|
|
if (status.isConnected && status.isOnline) {
|
|
yield call(fetchDrugsServer);
|
|
} else {
|
|
yield call(fetchDrugs);
|
|
}
|
|
}
|
|
|
|
function* addDrugOfflineOrOnline(action: { type: string, payload: any }) {
|
|
const status: Status = yield select(state => state.status);
|
|
if (status.isConnected && status.isOnline) {
|
|
yield call(addDrugServer, action);
|
|
} else {
|
|
yield call(addDrug, action);
|
|
}
|
|
}
|
|
|
|
function* removeDrugOfflineOrOnline(action: { type: string, payload: number }) {
|
|
const status: Status = yield select(state => state.status);
|
|
if (status.isConnected && status.isOnline) {
|
|
yield call(removeDrugServer, action);
|
|
} else {
|
|
yield call(removeDrug, action);
|
|
}
|
|
}
|
|
|
|
function* updateDrugOfflineOrOnline(action: { type: string, payload: any }) {
|
|
const status: Status = yield select(state => state.status);
|
|
if (status.isConnected && status.isOnline) {
|
|
yield call(updateDrugServer, action);
|
|
} else {
|
|
yield call(updateDrug, action);
|
|
}
|
|
}
|
|
|
|
export function* rootSaga() {
|
|
yield takeEvery('drug/initialize', initialize);
|
|
yield takeEvery('drug/fetch', fetchOfflineOrOnline);
|
|
yield takeEvery('drug/add', addDrugOfflineOrOnline);
|
|
yield takeEvery('drug/remove', removeDrugOfflineOrOnline);
|
|
yield takeEvery('drug/update', updateDrugOfflineOrOnline);
|
|
yield takeEvery('status/checkConnection', checkConnection);
|
|
}
|