Changeset View
Changeset View
Standalone View
Standalone View
web/push-notif/push-notifs-handler.js
Show All 13 Lines | import { | ||||
useServerCall, | useServerCall, | ||||
} from 'lib/utils/action-utils.js'; | } from 'lib/utils/action-utils.js'; | ||||
import electron from '../electron.js'; | import electron from '../electron.js'; | ||||
import { PushNotifModal } from '../modals/push-notif-modal.react.js'; | import { PushNotifModal } from '../modals/push-notif-modal.react.js'; | ||||
import { updateNavInfoActionType } from '../redux/action-types.js'; | import { updateNavInfoActionType } from '../redux/action-types.js'; | ||||
import { useSelector } from '../redux/redux-utils.js'; | import { useSelector } from '../redux/redux-utils.js'; | ||||
function useCreateDesktopPushSubscription() { | |||||
const dispatchActionPromise = useDispatchActionPromise(); | |||||
const callSetDeviceToken = useServerCall(setDeviceToken); | |||||
React.useEffect( | |||||
() => | |||||
electron?.onDeviceTokenRegistered?.(token => { | |||||
dispatchActionPromise( | |||||
setDeviceTokenActionTypes, | |||||
callSetDeviceToken(token), | |||||
); | |||||
}), | |||||
[callSetDeviceToken, dispatchActionPromise], | |||||
); | |||||
const dispatch = useDispatch(); | |||||
React.useEffect( | |||||
() => | |||||
electron?.onNotificationClicked?.(({ threadID }) => { | |||||
const payload = { | |||||
chatMode: 'view', | |||||
activeChatThreadID: threadID, | |||||
tab: 'chat', | |||||
}; | |||||
dispatch({ type: updateNavInfoActionType, payload }); | |||||
}), | |||||
[dispatch], | |||||
); | |||||
} | |||||
function useCreatePushSubscription(): () => Promise<void> { | function useCreatePushSubscription(): () => Promise<void> { | ||||
const publicKey = useSelector(state => state.pushApiPublicKey); | const publicKey = useSelector(state => state.pushApiPublicKey); | ||||
const dispatchActionPromise = useDispatchActionPromise(); | const dispatchActionPromise = useDispatchActionPromise(); | ||||
const callSetDeviceToken = useServerCall(setDeviceToken); | const callSetDeviceToken = useServerCall(setDeviceToken); | ||||
return React.useCallback(async () => { | return React.useCallback(async () => { | ||||
if (!publicKey) { | if (!publicKey) { | ||||
Show All 13 Lines | return React.useCallback(async () => { | ||||
dispatchActionPromise( | dispatchActionPromise( | ||||
setDeviceTokenActionTypes, | setDeviceTokenActionTypes, | ||||
callSetDeviceToken(JSON.stringify(subscription)), | callSetDeviceToken(JSON.stringify(subscription)), | ||||
); | ); | ||||
}, [callSetDeviceToken, dispatchActionPromise, publicKey]); | }, [callSetDeviceToken, dispatchActionPromise, publicKey]); | ||||
} | } | ||||
function PushNotificationsHandler(): React.Node { | function PushNotificationsHandler(): React.Node { | ||||
useCreateDesktopPushSubscription(); | |||||
const createPushSubscription = useCreatePushSubscription(); | const createPushSubscription = useCreatePushSubscription(); | ||||
const modalContext = useModalContext(); | const modalContext = useModalContext(); | ||||
const loggedIn = useSelector(isLoggedIn); | const loggedIn = useSelector(isLoggedIn); | ||||
const dispatch = useDispatch(); | const dispatch = useDispatch(); | ||||
React.useEffect(() => { | React.useEffect(() => { | ||||
▲ Show 20 Lines • Show All 66 Lines • Show Last 20 Lines |