HomeHeader.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import * as React from 'react';
  2. import { StatusBar } from 'expo-status-bar';
  3. import { Appbar, Menu } from 'react-native-paper';
  4. import { useBoolean, useCreation } from '@umijs/hooks';
  5. import { Icon, Text, Button, Div } from 'react-native-magnus';
  6. import useModel from 'flooks';
  7. import { useNavigation } from '@react-navigation/native';
  8. import { useTranslation } from 'react-i18next';
  9. import user from '../../../flooks/User';
  10. import MapModel from '../../Map/model';
  11. export default function Header() {
  12. const { t, i18n } = useTranslation();
  13. const { chooseInfo, getChooseInfo } = useModel(MapModel, [
  14. 'chooseInfo',
  15. 'getChooseInfo',
  16. ]);
  17. const { state, setTrue, setFalse } = useBoolean(false);
  18. const { logout } = useModel(user, []);
  19. const navigation = useNavigation();
  20. const addressName = useCreation(() => {
  21. if (chooseInfo) {
  22. return chooseInfo.addressName;
  23. } else {
  24. return '';
  25. }
  26. }, [chooseInfo]);
  27. return (
  28. <>
  29. <StatusBar backgroundColor="transparent" style="dark" translucent />
  30. <Appbar.Header
  31. statusBarHeight={0}
  32. theme={{ colors: { primary: '#fff' } }}
  33. style={{
  34. elevation: 0,
  35. shadowOffset: {
  36. width: 0,
  37. height: 0,
  38. },
  39. shadowOpacity: 0,
  40. zIndex: 2,
  41. }}
  42. >
  43. <Button
  44. onPress={() => navigation.navigate('HomeAddress')}
  45. block
  46. bg="hiden"
  47. p={0}
  48. flex={1}
  49. >
  50. <Div flex={1} row>
  51. <Icon
  52. name="navigation"
  53. color="brand500"
  54. fontFamily="Feather"
  55. ml={15}
  56. />
  57. <Text
  58. numberOfLines={2}
  59. ellipsizeMode="tail"
  60. fontSize="xl"
  61. ml={5}
  62. fontWeight="bold"
  63. flex={1}
  64. >
  65. {getChooseInfo.loading ? t('jia-zai-zhong') : addressName}
  66. </Text>
  67. </Div>
  68. </Button>
  69. <Menu
  70. visible={state}
  71. onDismiss={setFalse}
  72. anchor={<Appbar.Action icon="dots-vertical" onPress={setTrue} />}
  73. >
  74. <Menu.Item
  75. onPress={() => {
  76. setFalse();
  77. navigation.navigate('MapScreen');
  78. }}
  79. title={t('di-tu-xuan-dian-ce-shi')}
  80. />
  81. <Menu.Item onPress={logout} title={t('tui-chu-deng-lu')} />
  82. <Menu.Item
  83. onPress={() => {
  84. const list = ['zh', 'th', 'en'];
  85. i18n.changeLanguage(
  86. list[(list.indexOf(i18n.language) + 1) % list.length]
  87. );
  88. }}
  89. title={t('qie-huan-yu-yan')}
  90. />
  91. <Menu.Item onPress={() => {}} title="版本07.17.1(国际化文件导入)" />
  92. </Menu>
  93. </Appbar.Header>
  94. </>
  95. );
  96. }