Rocket.Chat.ReactNative/app/sagas/troubleshootingNotification.ts

55 lines
1.7 KiB
TypeScript

import { Action } from 'redux';
import { call, takeLatest, put } from 'typed-redux-saga';
import notifee, { AuthorizationStatus } from '@notifee/react-native';
import { TROUBLESHOOTING_NOTIFICATION } from '../actions/actionsTypes';
import { setTroubleshootingNotification } from '../actions/troubleshootingNotification';
import { pushInfo } from '../lib/services/restApi';
import log from '../lib/methods/helpers/log';
import { appSelector } from '../lib/hooks';
import { compareServerVersion } from '../lib/methods/helpers';
interface IGenericAction extends Action {
type: string;
}
function* init() {
const serverVersion = yield* appSelector(state => state.server.version);
let deviceNotificationEnabled = false;
let defaultPushGateway = false;
let pushGatewayEnabled = false;
try {
const { authorizationStatus } = yield* call(notifee.getNotificationSettings);
deviceNotificationEnabled = authorizationStatus > AuthorizationStatus.DENIED;
} catch (e) {
log(e);
}
try {
if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '6.5.0')) {
const pushInfoResult = yield* call(pushInfo);
if (pushInfoResult.success) {
pushGatewayEnabled = pushInfoResult.pushGatewayEnabled;
defaultPushGateway = pushInfoResult.defaultPushGateway;
}
}
} catch (e) {
log(e);
}
const issuesWithNotifications =
!deviceNotificationEnabled || (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '6.6.0') && !pushGatewayEnabled);
yield put(
setTroubleshootingNotification({
deviceNotificationEnabled,
defaultPushGateway,
pushGatewayEnabled,
issuesWithNotifications
})
);
}
export default function* root(): Generator {
yield takeLatest<IGenericAction>(TROUBLESHOOTING_NOTIFICATION.INIT, init);
}