TimScreen.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { StackScreenProps } from '@react-navigation/stack';
  2. import * as React from 'react';
  3. import { useNavigation } from '@react-navigation/native';
  4. import { WebView } from 'react-native-webview';
  5. import { useTranslation } from 'react-i18next';
  6. import useModel from 'flooks';
  7. import { useMount } from '@umijs/hooks';
  8. import IM from './model.ts';
  9. export default function TimScreen({ navigation }: StackScreenProps) {
  10. const { t } = useTranslation();
  11. const webRef = React.useRef();
  12. const {
  13. getChat,
  14. userID,
  15. userSig,
  16. tim,
  17. setTim,
  18. initChat,
  19. updateChatInfo,
  20. } = useModel(IM, ['userID', 'userSig', 'tim']);
  21. useMount(() => {
  22. initChat();
  23. });
  24. React.useEffect(() => {
  25. if (userSig && tim)
  26. tim.injectJavaScript(
  27. `window.chatLogin(${JSON.stringify(userID)},${JSON.stringify(userSig)})`
  28. );
  29. }, [userSig, tim]);
  30. return (
  31. <WebView
  32. ref={webRef}
  33. source={{
  34. uri: `http://dingdong.izouma.com/map/tim`,
  35. }}
  36. onMessage={({ nativeEvent }) => {
  37. console.log(nativeEvent);
  38. const info =
  39. nativeEvent.data.indexOf('{') !== -1
  40. ? JSON.parse(nativeEvent.data)
  41. : {};
  42. console.log(info);
  43. console.log(info.name);
  44. console.log(info.conversationType);
  45. switch (info.name) {
  46. case 'onConversationListUpdated':
  47. getChat();
  48. break;
  49. default:
  50. break;
  51. }
  52. if (Array.isArray(info)) {
  53. updateChatInfo(info[0]);
  54. }
  55. }}
  56. onLoadEnd={() => {
  57. setTim(webRef.current);
  58. }}
  59. />
  60. );
  61. }