-
-
Notifications
You must be signed in to change notification settings - Fork 640
Expand file tree
/
Copy pathScreenStackHeaderSubviewManager.kt
More file actions
81 lines (69 loc) · 2.99 KB
/
ScreenStackHeaderSubviewManager.kt
File metadata and controls
81 lines (69 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.swmansion.rnscreens
import android.util.Log
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
import com.facebook.react.module.annotations.ReactModule
import com.facebook.react.uimanager.ReactStylesDiffMap
import com.facebook.react.uimanager.StateWrapper
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.ViewGroupManager
import com.facebook.react.uimanager.ViewManagerDelegate
import com.facebook.react.uimanager.annotations.ReactProp
import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerDelegate
import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerInterface
@ReactModule(name = ScreenStackHeaderSubviewManager.REACT_CLASS)
class ScreenStackHeaderSubviewManager :
ViewGroupManager<ScreenStackHeaderSubview>(),
RNSScreenStackHeaderSubviewManagerInterface<ScreenStackHeaderSubview> {
private val delegate: ViewManagerDelegate<ScreenStackHeaderSubview>
init {
delegate = RNSScreenStackHeaderSubviewManagerDelegate<ScreenStackHeaderSubview, ScreenStackHeaderSubviewManager>(this)
}
override fun getName() = REACT_CLASS
override fun createViewInstance(context: ThemedReactContext) = ScreenStackHeaderSubview(context)
@ReactProp(name = "type")
override fun setType(
view: ScreenStackHeaderSubview,
type: String?,
) {
view.type =
when (type) {
"left" -> ScreenStackHeaderSubview.Type.LEFT
"center" -> ScreenStackHeaderSubview.Type.CENTER
"right" -> ScreenStackHeaderSubview.Type.RIGHT
"back" -> ScreenStackHeaderSubview.Type.BACK
"searchBar" -> ScreenStackHeaderSubview.Type.SEARCH_BAR
else -> throw JSApplicationIllegalArgumentException("Unknown type $type")
}
}
@ReactProp(name = "hidesSharedBackground")
override fun setHidesSharedBackground(
view: ScreenStackHeaderSubview,
hidesSharedBackground: Boolean,
) {
Log.w("[RNScreens]", "hidesSharedBackground prop is not available on Android")
}
// synchronousShadowStateUpdatesEnabled is not available on Android atm,
// however we must override their setters
override fun setSynchronousShadowStateUpdatesEnabled(
view: ScreenStackHeaderSubview?,
value: Boolean,
) = Unit
override fun setPreventScrollToTopEnabled(
view: ScreenStackHeaderSubview?,
value: Boolean,
) = Unit
override fun updateState(
view: ScreenStackHeaderSubview,
props: ReactStylesDiffMap?,
stateWrapper: StateWrapper?,
): Any? {
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
view.setStateWrapper(stateWrapper)
}
return super.updateState(view, props, stateWrapper)
}
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = delegate
companion object {
const val REACT_CLASS = "RNSScreenStackHeaderSubview"
}
}