@mpxjs/core 2.10.6-beta.5 → 2.10.6-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpxjs/core",
3
- "version": "2.10.6-beta.5",
3
+ "version": "2.10.6-beta.8",
4
4
  "description": "mpx runtime core",
5
5
  "keywords": [
6
6
  "miniprogram",
@@ -10,7 +10,7 @@ import { createElement, memo, useRef, useEffect } from 'react'
10
10
  import * as ReactNative from 'react-native'
11
11
  import { initAppProvides } from './export/inject'
12
12
  import { NavigationContainer, createNativeStackNavigator, SafeAreaProvider, GestureHandlerRootView } from './env/navigationHelper'
13
- import { innerNav } from './env/nav'
13
+ import createMpxNav from '@mpxjs/webpack-plugin/lib/runtime/components/react/dist/nav'
14
14
 
15
15
  const appHooksMap = makeMap(mergeLifecycle(LIFECYCLE).app)
16
16
 
@@ -33,6 +33,15 @@ function filterOptions (options, appData) {
33
33
  return newOptions
34
34
  }
35
35
 
36
+ let CachedMpxNav = null
37
+
38
+ function getMpxNav() {
39
+ // Mpx toplevel 执行时获取不到
40
+ return (CachedMpxNav ??= createMpxNav({
41
+ Mpx
42
+ }))
43
+ }
44
+
36
45
  export default function createApp (options) {
37
46
  const appData = {}
38
47
  // app选项目前不需要进行转换
@@ -64,7 +73,7 @@ export default function createApp (options) {
64
73
  flex: 1
65
74
  }
66
75
  },
67
- createElement(innerNav, {
76
+ createElement(getMpxNav(), {
68
77
  pageConfig: pageConfig,
69
78
  navigation
70
79
  }),
@@ -16,7 +16,7 @@ import {
16
16
  RouteContext
17
17
  } from '@mpxjs/webpack-plugin/lib/runtime/components/react/dist/context'
18
18
  import { PortalHost, useSafeAreaInsets } from '../env/navigationHelper'
19
- import { useInnerHeaderHeight } from '../env/nav'
19
+ import { useInnerHeaderHeight } from '@mpxjs/webpack-plugin/lib/runtime/components/react/dist/nav'
20
20
 
21
21
  const ProviderContext = createContext(null)
22
22
  function getSystemInfo () {
@@ -520,7 +520,8 @@ export function PageWrapperHOC (WrappedComponent, pageConfig = {}) {
520
520
  },
521
521
  contentContainerStyle: {
522
522
  flex: 1
523
- }
523
+ },
524
+ navigation
524
525
  },
525
526
  element
526
527
  )
@@ -1,129 +0,0 @@
1
- import { createElement, useState, useMemo } from 'react'
2
- import { useSafeAreaInsets } from 'react-native-safe-area-context'
3
- import { StatusBar, processColor, TouchableOpacity, Image, View, StyleSheet, Text } from 'react-native'
4
- import Mpx from '../../index'
5
-
6
- function convertToHex (color) {
7
- try {
8
- const intColor = processColor(color)
9
- if (intColor === null || intColor === undefined) {
10
- return null
11
- }
12
- // 将32位整数颜色值转换为RGBA
13
- const r = (intColor >> 16) & 255
14
- const g = (intColor >> 8) & 255
15
- const b = intColor & 255
16
- // 转换为十六进制
17
- const hexR = r.toString(16).padStart(2, '0')
18
- const hexG = g.toString(16).padStart(2, '0')
19
- const hexB = b.toString(16).padStart(2, '0')
20
- return `#${hexR}${hexG}${hexB}`
21
- } catch (error) {
22
- return null
23
- }
24
- }
25
-
26
- const titleHeight = 44
27
- export function useInnerHeaderHeight (pageconfig) {
28
- if (pageconfig.navigationStyle === 'custom') {
29
- return 0
30
- } else {
31
- const safeAreaTop = useSafeAreaInsets()?.top || 0
32
- const headerHeight = safeAreaTop + titleHeight
33
- return headerHeight
34
- }
35
- }
36
-
37
- const styles = StyleSheet.create({
38
- header: {
39
- elevation: 3
40
- },
41
- headerContent: {
42
- flexDirection: 'row',
43
- alignItems: 'center',
44
- justifyContent: 'center'
45
- },
46
- backButton: {
47
- position: 'absolute',
48
- height: '100%',
49
- width: 40,
50
- left: 0,
51
- top: 0,
52
- alignItems: 'center',
53
- justifyContent: 'center'
54
- },
55
- backButtonImage: {
56
- width: 22,
57
- height: 22
58
- },
59
- title: {
60
- fontSize: 17,
61
- fontWeight: 600,
62
- width: '60%',
63
- textAlign: 'center'
64
- }
65
- })
66
- const NavColor = {
67
- White: '#ffffff',
68
- Black: '#000000'
69
- }
70
- // navigationBarTextStyle只支持黑白'white'/'black
71
- const validBarTextStyle = (textStyle) => {
72
- const textStyleColor = convertToHex(textStyle)
73
- if (textStyle && [NavColor.White, NavColor.Black].includes(textStyleColor)) {
74
- return textStyleColor
75
- } else {
76
- return NavColor.White
77
- }
78
- }
79
- export function innerNav ({ pageConfig, navigation }) {
80
- const [innerPageConfig, setPageConfig] = useState(pageConfig || {})
81
- navigation.setPageConfig = (config) => {
82
- const newConfig = Object.assign({}, innerPageConfig, config)
83
- setPageConfig(newConfig)
84
- }
85
- const isCustom = innerPageConfig.navigationStyle === 'custom'
86
- const navigationBarTextStyle = useMemo(() => validBarTextStyle(innerPageConfig.navigationBarTextStyle), [innerPageConfig.navigationBarTextStyle])
87
- // 状态栏的颜色
88
- const statusBarElement = createElement(StatusBar, {
89
- translucent: true,
90
- backgroundColor: 'transparent',
91
- barStyle: (navigationBarTextStyle === NavColor.White) ? 'light-content' : 'dark-content' // 'default'/'light-content'/'dark-content'
92
- })
93
-
94
- if (isCustom) return statusBarElement
95
- const safeAreaTop = useSafeAreaInsets()?.top || 0
96
- // 假设是栈导航,获取栈的长度
97
- const stackLength = navigation.getState()?.routes?.length
98
- // 用于外部注册打开RN容器之前的栈长度
99
- const beforeStackLength = Mpx.config?.rnConfig?.beforeStackLength || 0
100
-
101
- // 回退按钮与图标
102
- const backElement = stackLength + beforeStackLength > 1
103
- ? createElement(TouchableOpacity, {
104
- style: [styles.backButton],
105
- onPress: () => { navigation.goBack() }
106
- }, createElement(Image, {
107
- source: { uri: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAABICAYAAACqT5alAAAA2UlEQVR4nO3bMQrCUBRE0Yla6AYEN2nnBrTL+izcitW3MRDkEUWSvPzJvfCqgMwhZbAppWhNbbIHzB1g9wATERFRVyvpkj1irlpJ5X326D7WHh1hbdFD2CLpLmmftm7kfsEe09aNHFiBrT+wAlt/YAW2/sAKbP2BFdj6Ayuwy+ufz6XPL893krZ//O6iu2n4LT8kndLWTRTo4EC7BDo40C6BDg60S6CDA+0S6OBAuwQ6uNWiD2nrJmoIfU7cNWkR2hbb1UfbY7uuWhGWiIg+a/iHuHmA3QPs3gu4JW9Gan+OJAAAAABJRU5ErkJggg==' },
108
- // 回退按钮的颜色与设置的title文案颜色一致
109
- style: [styles.backButtonImage, { tintColor: navigationBarTextStyle }]
110
- }))
111
- : null
112
-
113
- return createElement(View, {
114
- style: [styles.header, {
115
- paddingTop: safeAreaTop,
116
- backgroundColor: innerPageConfig.navigationBarBackgroundColor || '#000000'
117
- }]
118
- },
119
- statusBarElement,
120
- createElement(View, {
121
- style: styles.headerContent,
122
- height: titleHeight
123
- }, backElement,
124
- createElement(Text, {
125
- style: [styles.title, { color: navigationBarTextStyle }],
126
- numberOfLines: 1
127
- }, innerPageConfig.navigationBarTitleText?.trim() || ''))
128
- )
129
- }