Files
School/Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/middleware/rootSaga.ts
T
2025-02-06 20:33:26 +02:00

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);
}