HomeHeader.jsx 2.9 KB

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