diff options
Diffstat (limited to 'modern/src/common/components/NativeInterface.js')
-rw-r--r-- | modern/src/common/components/NativeInterface.js | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/modern/src/common/components/NativeInterface.js b/modern/src/common/components/NativeInterface.js deleted file mode 100644 index b088de0e..00000000 --- a/modern/src/common/components/NativeInterface.js +++ /dev/null @@ -1,72 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { useEffectAsync } from '../../reactHelper'; -import { sessionActions } from '../../store'; - -export const nativeEnvironment = window.appInterface || (window.webkit && window.webkit.messageHandlers.appInterface); - -export const nativePostMessage = (message) => { - if (window.webkit && window.webkit.messageHandlers.appInterface) { - window.webkit.messageHandlers.appInterface.postMessage(message); - } - if (window.appInterface) { - window.appInterface.postMessage(message); - } -}; - -export const handleLoginTokenListeners = new Set(); -window.handleLoginToken = (token) => { - handleLoginTokenListeners.forEach((listener) => listener(token)); -}; - -const updateNotificationTokenListeners = new Set(); -window.updateNotificationToken = (token) => { - updateNotificationTokenListeners.forEach((listener) => listener(token)); -}; - -const NativeInterface = () => { - const dispatch = useDispatch(); - - const user = useSelector((state) => state.session.user); - const [notificationToken, setNotificationToken] = useState(null); - - useEffect(() => { - const listener = (token) => setNotificationToken(token); - updateNotificationTokenListeners.add(listener); - return () => updateNotificationTokenListeners.delete(listener); - }, [setNotificationToken]); - - useEffectAsync(async () => { - if (user && !user.readonly && notificationToken) { - window.localStorage.setItem('notificationToken', notificationToken); - setNotificationToken(null); - - const tokens = user.attributes.notificationTokens?.split(',') || []; - if (!tokens.includes(notificationToken)) { - const updatedUser = { - ...user, - attributes: { - ...user.attributes, - notificationTokens: [...tokens.slice(-2), notificationToken].join(','), - }, - }; - - const response = await fetch(`/api/users/${user.id}`, { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(updatedUser), - }); - - if (response.ok) { - dispatch(sessionActions.updateUser(await response.json())); - } else { - throw Error(await response.text()); - } - } - } - }, [user, notificationToken, setNotificationToken]); - - return null; -}; - -export default NativeInterface; |