@momo-kits/native-kits 0.113.1-beta.8 → 0.113.2-beta.2
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/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +1 -8
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +2 -2
- package/ios/Application/ApplicationEnvironment.swift +1 -11
- package/ios/Template/TrustBanner/TrustBanner.swift +90 -53
- package/local.properties +2 -2
- package/package.json +1 -1
|
@@ -86,13 +86,6 @@ fun Header(
|
|
|
86
86
|
)
|
|
87
87
|
)
|
|
88
88
|
|
|
89
|
-
fun getHeaderRightOpacity(): Float {
|
|
90
|
-
if (useAnimationSearch) {
|
|
91
|
-
return 1f - (opacity ?: 1f)
|
|
92
|
-
}
|
|
93
|
-
return if (animatedHeader !== null) opacity ?: 1f else 1f
|
|
94
|
-
}
|
|
95
|
-
|
|
96
89
|
if (headerType != HeaderType.NONE) {
|
|
97
90
|
BoxWithConstraints(
|
|
98
91
|
Modifier.height(statusBarHeight + 52.dp)
|
|
@@ -141,7 +134,7 @@ fun Header(
|
|
|
141
134
|
|
|
142
135
|
if (((useAnimationSearch && inputSearchProps != null) || inputSearchProps == null) && miniAppContext != null) {
|
|
143
136
|
Box(Modifier.graphicsLayer {
|
|
144
|
-
alpha =
|
|
137
|
+
alpha = if (useAnimationSearch) 1f - (opacity ?: 1f) else 1f
|
|
145
138
|
}) {
|
|
146
139
|
headerRight?.invoke()
|
|
147
140
|
}
|
|
@@ -25,7 +25,7 @@ import vn.momo.kits.const.Typography
|
|
|
25
25
|
fun CheckBox(
|
|
26
26
|
disabled: Boolean = false,
|
|
27
27
|
checked: Boolean = false,
|
|
28
|
-
onCheckedChange: () -> Unit,
|
|
28
|
+
onCheckedChange: (Boolean) -> Unit,
|
|
29
29
|
indeterminate: Boolean = false,
|
|
30
30
|
title: String = "",
|
|
31
31
|
) {
|
|
@@ -53,7 +53,7 @@ fun CheckBox(
|
|
|
53
53
|
.background(backgroundColor, RoundedCornerShape(Radius.XS))
|
|
54
54
|
.border(Spacing.XXS, borderColor, RoundedCornerShape(Radius.XS))
|
|
55
55
|
.clickable(
|
|
56
|
-
onClick = onCheckedChange,
|
|
56
|
+
onClick = { onCheckedChange(!checked) },
|
|
57
57
|
enabled = !disabled,
|
|
58
58
|
),
|
|
59
59
|
) {
|
|
@@ -23,22 +23,12 @@ public class MiniAppContext {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
public struct Config: Decodable {
|
|
27
|
-
public let trustBanner: TrustBanner?
|
|
28
|
-
|
|
29
|
-
enum CodingKeys: String, CodingKey {
|
|
30
|
-
case trustBanner = "trust_banner"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
26
|
public class ApplicationEnvironment: ObservableObject {
|
|
35
27
|
let applicationContext: MiniAppContext?
|
|
36
28
|
let composeApi: KitComposeApi
|
|
37
|
-
@Published public var config: Config?
|
|
38
29
|
|
|
39
|
-
public init(applicationContext: MiniAppContext?, composeApi: KitComposeApi
|
|
30
|
+
public init(applicationContext: MiniAppContext?, composeApi: KitComposeApi) {
|
|
40
31
|
self.applicationContext = applicationContext
|
|
41
32
|
self.composeApi = composeApi
|
|
42
|
-
self.config = config
|
|
43
33
|
}
|
|
44
34
|
}
|
|
@@ -9,9 +9,14 @@ import Foundation
|
|
|
9
9
|
import SwiftUI
|
|
10
10
|
import SDWebImageSwiftUI
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
let jsonUrl = "https://static.momocdn.net/app/json/component-kits/design_system.json"
|
|
13
|
+
|
|
14
|
+
struct TrustBannerData: Decodable {
|
|
15
|
+
let trustBanner: TrustBanner
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
struct TrustBanner: Decodable {
|
|
13
19
|
let content: Dictionary<String, String>
|
|
14
|
-
let subContent: Dictionary<String, String>
|
|
15
20
|
let pciImage: String
|
|
16
21
|
let sslImage: String
|
|
17
22
|
let urlConfig: String
|
|
@@ -20,20 +25,18 @@ public struct TrustBanner: Decodable {
|
|
|
20
25
|
let momoImage: String
|
|
21
26
|
|
|
22
27
|
enum CodingKeys: String, CodingKey {
|
|
23
|
-
case content,
|
|
28
|
+
case content, pciImage, sslImage, icons, momoImage
|
|
24
29
|
case urlConfig = "url_config"
|
|
25
30
|
case featureCode = "feature_code"
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
let defaultBanner = TrustBanner(
|
|
30
|
-
content: ["vi": "
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"en": "Learn more"],
|
|
34
|
-
pciImage: "https://static.momocdn.net/app/img/kits/trustBanner/pci_dss.png",
|
|
35
|
+
content: ["vi": "Bảo mật thông tin & An toàn tài sản của bạn là ưu tiên hàng đầu của MoMo.",
|
|
36
|
+
"en": "Your data security and money safety are MoMo's top priorities."],
|
|
37
|
+
pciImage: "https://static.momocdn.net/app/img/kits/trustBanner/pci.png",
|
|
35
38
|
sslImage: "https://static.momocdn.net/app/img/kits/trustBanner/ssl.png",
|
|
36
|
-
urlConfig: "
|
|
39
|
+
urlConfig: "https://momo.vn/an-toan-bao-mat",
|
|
37
40
|
featureCode: "login_and_security",
|
|
38
41
|
icons: [
|
|
39
42
|
"https://static.momocdn.net/app/img/kits/trustBanner/ic_viettinbank.png",
|
|
@@ -41,23 +44,58 @@ let defaultBanner = TrustBanner(
|
|
|
41
44
|
"https://static.momocdn.net/app/img/kits/trustBanner/ic_vietcombank.png",
|
|
42
45
|
"https://static.momocdn.net/app/img/kits/trustBanner/ic_bidv.png"
|
|
43
46
|
],
|
|
44
|
-
momoImage: "https://static.momocdn.net/app/img/kits/trustBanner/
|
|
47
|
+
momoImage: "https://static.momocdn.net/app/img/kits/trustBanner/ic_momo_secu.png"
|
|
45
48
|
)
|
|
46
49
|
|
|
50
|
+
let defaultData = TrustBannerData(trustBanner: defaultBanner)
|
|
51
|
+
|
|
52
|
+
class TrustBannerViewModel: ObservableObject {
|
|
53
|
+
@Published var trustBanner: TrustBannerData?
|
|
54
|
+
|
|
55
|
+
init() {
|
|
56
|
+
fetchData(from: jsonUrl)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
func fetchData(from urlString: String) {
|
|
60
|
+
guard let url = URL(string: urlString) else { return }
|
|
61
|
+
|
|
62
|
+
URLSession.shared.dataTask(with: url) { [weak self] data, response, error in
|
|
63
|
+
guard let self = self else { return }
|
|
64
|
+
|
|
65
|
+
if let error = error {
|
|
66
|
+
print("Data fetching error: \(error)")
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
guard let data = data else {
|
|
71
|
+
print("No data received")
|
|
72
|
+
return
|
|
73
|
+
}
|
|
74
|
+
do {
|
|
75
|
+
let decodedData = try JSONDecoder().decode(TrustBannerData.self, from: data)
|
|
76
|
+
DispatchQueue.main.async {
|
|
77
|
+
self.trustBanner = decodedData
|
|
78
|
+
}
|
|
79
|
+
} catch {
|
|
80
|
+
print("Decoding error: \(error)")
|
|
81
|
+
}
|
|
82
|
+
}.resume()
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
47
86
|
public struct TrustBannerView: View {
|
|
48
87
|
var serviceName: String? = ""
|
|
49
88
|
var screenName: String? = ""
|
|
50
89
|
var onPress: ((_ params: NSDictionary) -> Void)?
|
|
51
90
|
var trackEvent: ((_ eventName: String, _ params: NSDictionary) -> Void)?
|
|
52
91
|
var language: String?
|
|
53
|
-
|
|
54
|
-
@
|
|
92
|
+
|
|
93
|
+
@ObservedObject private var viewModel = TrustBannerViewModel()
|
|
55
94
|
|
|
56
95
|
public init(serviceName: String?,
|
|
57
96
|
screenName: String?,
|
|
58
97
|
onPress: ((_ params: NSDictionary) -> Void)?,
|
|
59
|
-
trackEvent: ((_ eventName: String,_ params: NSDictionary) -> Void)?,
|
|
60
|
-
language: String? = "vi") {
|
|
98
|
+
trackEvent: ((_ eventName: String,_ params: NSDictionary) -> Void)?, language: String? = "vi") {
|
|
61
99
|
if let trackEvent = trackEvent {
|
|
62
100
|
trackEvent("service_component_displayed", ["service_name": serviceName ?? "", "screen_name": screenName ?? "", "component_name": "logo_trust"])
|
|
63
101
|
}
|
|
@@ -69,15 +107,9 @@ public struct TrustBannerView: View {
|
|
|
69
107
|
}
|
|
70
108
|
|
|
71
109
|
public var body: some View {
|
|
72
|
-
let trustBanner =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
onPress: onPress,
|
|
76
|
-
trackEvent: trackEvent,
|
|
77
|
-
serviceName: serviceName,
|
|
78
|
-
screenName: screenName,
|
|
79
|
-
language: language
|
|
80
|
-
)
|
|
110
|
+
if let trustBanner = viewModel.trustBanner {
|
|
111
|
+
TrustBannerContentView(trustBanner: trustBanner.trustBanner, onPress: onPress, trackEvent: trackEvent, serviceName: serviceName, screenName: screenName, language: language)
|
|
112
|
+
}
|
|
81
113
|
}
|
|
82
114
|
}
|
|
83
115
|
|
|
@@ -96,47 +128,52 @@ struct TrustBannerContentView: View {
|
|
|
96
128
|
.resizable()
|
|
97
129
|
.scaledToFit()
|
|
98
130
|
.frame(width: 64, height: 64)
|
|
99
|
-
VStack(alignment: .leading, spacing: 8)
|
|
131
|
+
VStack(alignment: .leading, spacing: 8){
|
|
100
132
|
Text(trustBanner.content[language ?? "vi"] ?? "")
|
|
101
133
|
.foregroundColor(Color(hex: 0xFF484848))
|
|
102
134
|
.lineLimit(2)
|
|
103
|
-
.font(.system(size: 12))
|
|
104
|
-
.frame(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
Text(trustBanner.subContent[language ?? "vi"] ?? "")
|
|
109
|
-
.foregroundColor(Color(hex: 0xFFEB2F96))
|
|
110
|
-
.font(.system(size: 12))
|
|
111
|
-
|
|
112
|
-
WebImage(url: URL(string: "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_arrow_chevron_right_small.png"))
|
|
135
|
+
.font(.system(size: 12, weight: Font.Weight.regular))
|
|
136
|
+
.frame(width: geo.size.width - 24 - 64 - 8, height: 40,alignment: .leading)
|
|
137
|
+
HStack{
|
|
138
|
+
HStack{
|
|
139
|
+
WebImage(url: URL(string: trustBanner.pciImage))
|
|
113
140
|
.resizable()
|
|
114
|
-
.
|
|
115
|
-
.
|
|
116
|
-
|
|
141
|
+
.scaledToFit()
|
|
142
|
+
.frame(width: 52, height: 20)
|
|
143
|
+
WebImage(url: URL(string: trustBanner.sslImage))
|
|
144
|
+
.resizable()
|
|
145
|
+
.scaledToFit()
|
|
146
|
+
.frame(width: 52, height: 20)
|
|
117
147
|
}
|
|
118
|
-
|
|
119
148
|
Spacer()
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
WebImage(url: pciUrl)
|
|
149
|
+
HStack(spacing: -6){
|
|
150
|
+
ForEach(trustBanner.icons, id: \.self) { iconURL in
|
|
151
|
+
WebImage(url: URL(string: iconURL))
|
|
124
152
|
.resizable()
|
|
125
153
|
.scaledToFit()
|
|
126
|
-
.frame(width:
|
|
154
|
+
.frame(width:24, height: 24)
|
|
155
|
+
.background(Color.white)
|
|
156
|
+
.cornerRadius(12)
|
|
157
|
+
.overlay(
|
|
158
|
+
Circle().stroke(Color(hex: 0xFFE8E8E8), lineWidth: 1)
|
|
159
|
+
)
|
|
127
160
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
161
|
+
Text("36+")
|
|
162
|
+
.font(.system(size: 10, weight: Font.Weight.regular))
|
|
163
|
+
.frame(width: 24, height: 24, alignment: .center)
|
|
164
|
+
.foregroundColor(Color(hex: 0xFFEB2F96))
|
|
165
|
+
.background(Color(hex: 0xFFFDEAF4))
|
|
166
|
+
.cornerRadius(12)
|
|
167
|
+
.overlay(
|
|
168
|
+
Circle()
|
|
169
|
+
.stroke(Color(hex: 0xFFE8E8E8), lineWidth: 1)
|
|
170
|
+
)
|
|
171
|
+
}.frame(width: 96, height: 24)
|
|
136
172
|
}
|
|
137
173
|
}
|
|
138
174
|
}
|
|
139
|
-
.
|
|
175
|
+
.frame(width: geo.size.width - 24)
|
|
176
|
+
.padding(EdgeInsets(top: 12, leading: 12, bottom: 12, trailing: 12))
|
|
140
177
|
.background(Color(hex: 0xFFF2F8FF))
|
|
141
178
|
.cornerRadius(12)
|
|
142
179
|
.onTapGesture {
|
|
@@ -144,7 +181,7 @@ struct TrustBannerContentView: View {
|
|
|
144
181
|
trackEvent("service_component_clicked", ["service_name": self.serviceName ?? "", "screen_name": self.screenName ?? "", "component_name": "logo_trust", "url_config": trustBanner.urlConfig])
|
|
145
182
|
}
|
|
146
183
|
if let onPress = onPress {
|
|
147
|
-
onPress(["service_name": self.serviceName ?? "", "screen_name": self.screenName ?? "", "url_config": trustBanner.urlConfig])
|
|
184
|
+
onPress(["service_name": self.serviceName ?? "", "screen_name": self.screenName ?? "", "component_name": "logo_trust", "url_config": trustBanner.urlConfig, "feature_code": trustBanner.featureCode])
|
|
148
185
|
}
|
|
149
186
|
}
|
|
150
187
|
}
|
package/local.properties
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
# Location of the SDK. This is only used by Gradle.
|
|
5
5
|
# For customization when using a Version Control System, please read the
|
|
6
6
|
# header note.
|
|
7
|
-
#
|
|
8
|
-
sdk.dir=/Users/
|
|
7
|
+
#Wed Aug 21 14:20:12 ICT 2024
|
|
8
|
+
sdk.dir=/Users/huynhdung/Library/Android/sdk
|