@momo-kits/native-kits 0.114.2-beta.1 → 0.114.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.
@@ -6,7 +6,7 @@ public struct HeaderRightData {
6
6
  var useMore: Bool
7
7
  var tools: [ToolGroup]
8
8
  var toolCallback: ((String) -> Void)?
9
-
9
+
10
10
  public init(
11
11
  useShortcut: Bool = false,
12
12
  useMore: Bool = false,
@@ -25,7 +25,7 @@ public struct Tool {
25
25
  var icon: String
26
26
  var showBadge: Bool
27
27
  var name: [String: String]
28
-
28
+
29
29
  public init(
30
30
  key: String,
31
31
  icon: String,
@@ -37,7 +37,7 @@ public struct Tool {
37
37
  self.showBadge = showBadge
38
38
  self.name = name
39
39
  }
40
-
40
+
41
41
  func toMap() -> [String: Any] {
42
42
  return [
43
43
  "key": key,
@@ -51,7 +51,7 @@ public struct Tool {
51
51
  public struct ToolGroup {
52
52
  var title: [String: String]
53
53
  var items: [Tool]
54
-
54
+
55
55
  public init(
56
56
  title: [String: String] = [:],
57
57
  items: [Tool]
@@ -59,7 +59,7 @@ public struct ToolGroup {
59
59
  self.title = title
60
60
  self.items = items
61
61
  }
62
-
62
+
63
63
  func toMap() -> [String: Any] {
64
64
  return [
65
65
  "title": title,
@@ -79,7 +79,7 @@ public struct HeaderRight: View {
79
79
  self.headerRight = headerRight
80
80
  }
81
81
  var headerRight: HeaderRightData?
82
-
82
+
83
83
  public var body: some View {
84
84
  HStack(alignment: .center) {
85
85
  ToolkitHeaderRight(headerRight: headerRight)
@@ -92,17 +92,17 @@ struct ToolkitHeaderRight: View {
92
92
  @State private var isFavorite: Bool = false
93
93
  @State private var isLoading: Bool = false
94
94
  @EnvironmentObject private var environment: ApplicationEnvironment
95
-
95
+
96
96
  // MARK: - Actions
97
97
  private func onPressShortcut() {
98
- environment.composeApi.request(
98
+ environment.composeApi?.request(
99
99
  funcName: "onToolAction",
100
100
  params: ["item": ["key": "onFavorite"]]
101
101
  ) { _ in
102
102
  isFavorite.toggle()
103
103
  }
104
104
  }
105
-
105
+
106
106
  private func onPressHelpCenter() {
107
107
  let context = environment.applicationContext
108
108
  let paramMap: [String: Any] = [
@@ -112,20 +112,19 @@ struct ToolkitHeaderRight: View {
112
112
  "icon": context?.appIcon,
113
113
  "description": context?.description
114
114
  ]
115
- environment.composeApi.request(
115
+ environment.composeApi?.request(
116
116
  funcName: "showHelpCenter",
117
117
  params: paramMap
118
118
  ) { _ in }
119
119
  }
120
-
120
+
121
121
  private func onPressClose() {
122
- environment.composeApi.request(
122
+ environment.composeApi?.request(
123
123
  funcName: "dismiss",
124
124
  params: ""
125
125
  ) { _ in }
126
126
  }
127
-
128
-
127
+
129
128
  private func onPressMore() {
130
129
  let context = environment.applicationContext
131
130
  let params: [String: Any] = [
@@ -136,13 +135,13 @@ struct ToolkitHeaderRight: View {
136
135
  "name": context?.appName,
137
136
  "icon": context?.appIcon,
138
137
  "description": context?.description,
139
- "support": context?.support,
140
- "toolkitConfig": context?.toolkitConfig,
141
- "providerId": context?.providerId,
142
- "permissions": context?.permissions
138
+ "support": context?.support,
139
+ "toolkitConfig": context?.toolkitConfig,
140
+ "providerId": context?.providerId,
141
+ "permissions": context?.permissions
143
142
  ]
144
143
  ]
145
- environment.composeApi.request(
144
+ environment.composeApi?.request(
146
145
  funcName: "showTools",
147
146
  params: params
148
147
  ) { response in
@@ -157,12 +156,12 @@ struct ToolkitHeaderRight: View {
157
156
  }
158
157
  }
159
158
  }
160
-
159
+
161
160
  private func getNavigationButtonConfig() -> NavigationButtonConfig {
162
161
  let totalTools = headerRight?.tools.reduce(0) { $0 + $1.items.count } ?? 0
163
162
  var icon = isFavorite ? "pin_star_checked" : "pin_star"
164
163
  var onClickHandler: () -> Void = onPressShortcut
165
-
164
+
166
165
  if totalTools > 1 || headerRight?.useMore == true {
167
166
  icon = "navigation_more_icon"
168
167
  onClickHandler = onPressMore
@@ -172,16 +171,16 @@ struct ToolkitHeaderRight: View {
172
171
  headerRight?.toolCallback?(singleTool.key)
173
172
  }
174
173
  }
175
-
174
+
176
175
  return NavigationButtonConfig(icon: icon, onPress: onClickHandler)
177
176
  }
178
-
177
+
179
178
  var body: some View {
180
179
  let navButtonConfig = getNavigationButtonConfig()
181
180
  let showBadge = headerRight?.tools.contains { group in
182
181
  group.items.contains { $0.showBadge }
183
182
  } ?? false
184
-
183
+
185
184
  HStack(alignment: .center) {
186
185
  if headerRight?.useShortcut == true {
187
186
  NavigationButton(
@@ -191,18 +190,18 @@ struct ToolkitHeaderRight: View {
191
190
  onClick: navButtonConfig.onPress
192
191
  )
193
192
  }
194
-
193
+
195
194
  HStack(alignment: .center, spacing: 0) {
196
195
  Icon(source: "help_center", size: 20)
197
196
  .padding(4)
198
197
  .onTapGesture {
199
198
  onPressHelpCenter()
200
199
  }
201
-
200
+
202
201
  Rectangle()
203
202
  .fill(Colors.black20)
204
203
  .frame(width: 0.5, height: 12)
205
-
204
+
206
205
  Icon(source: "16_navigation_close_circle", size: 20, color: Colors.black17)
207
206
  .padding(4)
208
207
  .onTapGesture {
@@ -226,7 +225,7 @@ struct NavigationButton: View {
226
225
  var icon: String
227
226
  var showBadge: Bool
228
227
  var onClick: () -> Void
229
-
228
+
230
229
  var body: some View {
231
230
  ZStack {
232
231
  Circle()
@@ -235,9 +234,9 @@ struct NavigationButton: View {
235
234
  Circle()
236
235
  .stroke(Color.black.opacity(0.2), lineWidth: 0.2)
237
236
  )
238
-
237
+
239
238
  Icon(source: icon, size: 16)
240
-
239
+
241
240
  if showBadge {
242
241
  BadgeDot(size: .small)
243
242
  .offset(x: -2, y: -2)
@@ -11,179 +11,110 @@ import SDWebImageSwiftUI
11
11
 
12
12
  let jsonUrl = "https://static.momocdn.net/app/json/component-kits/design_system.json"
13
13
 
14
- struct TrustBannerData: Decodable {
15
- let trustBanner: TrustBanner
16
- }
17
-
18
- struct TrustBanner: Decodable {
19
- let content: Dictionary<String, String>
14
+ public struct TrustBannerData: Decodable {
15
+ let content: [String: String]
16
+ let subContent: [String: String]
20
17
  let pciImage: String
21
18
  let sslImage: String
22
19
  let urlConfig: String
23
- let featureCode: String
24
20
  let icons: [String]
25
21
  let momoImage: String
26
-
22
+
27
23
  enum CodingKeys: String, CodingKey {
28
- case content, pciImage, sslImage, icons, momoImage
24
+ case content
25
+ case subContent
26
+ case pciImage
27
+ case sslImage
28
+ case icons
29
+ case momoImage
29
30
  case urlConfig = "url_config"
30
- case featureCode = "feature_code"
31
31
  }
32
32
  }
33
33
 
34
- let defaultBanner = TrustBanner(
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."],
34
+ let defaultBanner = TrustBannerData(
35
+ content: ["vi": "An toàn tài sản & Bảo mật thông tin của bạn là ưu tiên hàng đầu của MoMo.",
36
+ "en": "Ensuring financial security and data privacy is MoMo's highest priority."],
37
+ subContent: [
38
+ "vi": "Tìm hiểu thêm",
39
+ "en": "Learn more"
40
+ ],
37
41
  pciImage: "https://static.momocdn.net/app/img/kits/trustBanner/pci.png",
38
42
  sslImage: "https://static.momocdn.net/app/img/kits/trustBanner/ssl.png",
39
- urlConfig: "https://momo.vn/an-toan-bao-mat",
40
- featureCode: "login_and_security",
43
+ urlConfig: "login_and_security",
41
44
  icons: [
42
45
  "https://static.momocdn.net/app/img/kits/trustBanner/ic_viettinbank.png",
43
46
  "https://static.momocdn.net/app/img/kits/trustBanner/ic_agribank.png",
44
47
  "https://static.momocdn.net/app/img/kits/trustBanner/ic_vietcombank.png",
45
48
  "https://static.momocdn.net/app/img/kits/trustBanner/ic_bidv.png"
46
49
  ],
47
- momoImage: "https://static.momocdn.net/app/img/kits/trustBanner/ic_momo_secu.png"
50
+ momoImage: "https://static.momocdn.net/app/img/kits/trustBanner/ic_secu.png"
48
51
  )
49
52
 
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
-
86
- public struct TrustBannerView: View {
87
- var serviceName: String? = ""
88
- var screenName: String? = ""
89
- var onPress: ((_ params: NSDictionary) -> Void)?
90
- var trackEvent: ((_ eventName: String, _ params: NSDictionary) -> Void)?
91
- var language: String?
92
-
93
- @ObservedObject private var viewModel = TrustBannerViewModel()
94
-
95
- public init(serviceName: String?,
96
- screenName: String?,
97
- onPress: ((_ params: NSDictionary) -> Void)?,
98
- trackEvent: ((_ eventName: String,_ params: NSDictionary) -> Void)?, language: String? = "vi") {
99
- if let trackEvent = trackEvent {
100
- trackEvent("service_component_displayed", ["service_name": serviceName ?? "", "screen_name": screenName ?? "", "component_name": "logo_trust"])
101
- }
53
+ public struct TrustBanner: View {
54
+ @EnvironmentObject var applicationEnvironment: ApplicationEnvironment
55
+
56
+ var onPress: ((String)->Void)?
57
+
58
+ public init(onPress: ((String)->Void)?) {
102
59
  self.onPress = onPress
103
- self.trackEvent = trackEvent
104
- self.screenName = screenName
105
- self.serviceName = serviceName
106
- self.language = language
107
60
  }
108
-
109
- public var body: some View {
110
- if let trustBanner = viewModel.trustBanner {
111
- TrustBannerContentView(trustBanner: trustBanner.trustBanner, onPress: onPress, trackEvent: trackEvent, serviceName: serviceName, screenName: screenName, language: language)
61
+
62
+ var language: String? = "vi"
63
+
64
+ func onPressSecurity() {
65
+ if (onPress != nil) {
66
+ onPress!(applicationEnvironment.config?.trustBanner?.urlConfig ?? defaultBanner.urlConfig)
112
67
  }
113
68
  }
114
- }
115
-
116
- struct TrustBannerContentView: View {
117
- var trustBanner: TrustBanner
118
- var onPress: ((_ params: NSDictionary) -> Void)?
119
- var trackEvent: ((_ eventName: String, _ params: NSDictionary) -> Void)?
120
- var serviceName: String?
121
- var screenName: String?
122
- var language: String?
123
69
 
124
- var body: some View {
125
- GeometryReader { geo in
126
- HStack(alignment: .center, spacing: 8) {
127
- WebImage(url: URL(string: trustBanner.momoImage))
128
- .resizable()
129
- .scaledToFit()
130
- .frame(width: 64, height: 64)
131
- VStack(alignment: .leading, spacing: 8){
132
- Text(trustBanner.content[language ?? "vi"] ?? "")
133
- .foregroundColor(Color(hex: 0xFF484848))
134
- .lineLimit(2)
135
- .font(.system(size: 12, weight: Font.Weight.regular))
136
- .frame(width: geo.size.width - 24 - 64 - 8, height: 40,alignment: .leading)
70
+
71
+ public var body: some View {
72
+ HStack(alignment: .center, spacing: 8) {
73
+ WebImage(url: URL(string: applicationEnvironment.config?.trustBanner?.momoImage ?? defaultBanner.momoImage))
74
+ .resizable()
75
+ .scaledToFit()
76
+ .frame(width: 64, height: 64)
77
+ VStack(alignment: .leading){
78
+ Text(applicationEnvironment.config?.trustBanner?.content[language ?? "vi"] as? String ?? defaultBanner.content[language ?? "vi"])
79
+ .foregroundColor(Color(hex: "484848"))
80
+ .lineLimit(2)
81
+ .font(.system(size: 13, weight: Font.Weight.regular))
82
+ .lineSpacing(3)
83
+ .padding(.bottom, 8)
84
+ HStack {
85
+ HStack(spacing: 0) {
86
+ Text(applicationEnvironment.config?.trustBanner?.subContent[language ?? "vi"] as? String ?? defaultBanner.subContent[language ?? "vi"])
87
+ .foregroundColor(Colors.pink03)
88
+ .font(.system(size: 13, weight: .bold))
89
+ .padding(.trailing, 4)
90
+
91
+ Icon(source: "arrow_chevron_right_small", color: Colors.pink03)
92
+ }.onTapGesture {
93
+ onPressSecurity()
94
+ }
95
+
96
+ Spacer()
137
97
  HStack{
138
- HStack{
139
- WebImage(url: URL(string: trustBanner.pciImage))
140
- .resizable()
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)
147
- }
148
- Spacer()
149
- HStack(spacing: -6){
150
- ForEach(trustBanner.icons, id: \.self) { iconURL in
151
- WebImage(url: URL(string: iconURL))
152
- .resizable()
153
- .scaledToFit()
154
- .frame(width:24, height: 24)
155
- .background(Color.white)
156
- .cornerRadius(12)
157
- .overlay(
158
- Circle().stroke(Color(hex: 0xFFE8E8E8), lineWidth: 1)
159
- )
160
- }
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)
98
+ WebImage(url: URL(string: applicationEnvironment.config?.trustBanner?.pciImage ?? defaultBanner.pciImage))
99
+ .resizable()
100
+ .scaledToFit()
101
+ .frame(width: 24, height: 20)
102
+ WebImage(url: URL(string: applicationEnvironment.config?.trustBanner?.sslImage ?? defaultBanner.sslImage))
103
+ .resizable()
104
+ .scaledToFit()
105
+ .frame(width: 52, height: 20)
172
106
  }
173
107
  }
108
+
174
109
  }
175
- .frame(width: geo.size.width - 24)
176
- .padding(EdgeInsets(top: 12, leading: 12, bottom: 12, trailing: 12))
177
- .background(Color(hex: 0xFFF2F8FF))
178
- .cornerRadius(12)
179
- .onTapGesture {
180
- if let trackEvent = trackEvent {
181
- trackEvent("service_component_clicked", ["service_name": self.serviceName ?? "", "screen_name": self.screenName ?? "", "component_name": "logo_trust", "url_config": trustBanner.urlConfig])
182
- }
183
- if let onPress = onPress {
184
- onPress(["service_name": self.serviceName ?? "", "screen_name": self.screenName ?? "", "component_name": "logo_trust", "url_config": trustBanner.urlConfig, "feature_code": trustBanner.featureCode])
185
- }
186
- }
110
+
111
+ }
112
+ .padding(.all, 12)
113
+ .background(Color(hex: "F2F8FF"))
114
+ .cornerRadius(12)
115
+ .onTapGesture {
116
+ onPressSecurity()
187
117
  }
118
+ .frame(maxWidth: UIScreen.main.bounds.size.width)
188
119
  }
189
120
  }
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
- #Wed Aug 21 14:20:12 ICT 2024
8
- sdk.dir=/Users/huynhdung/Library/Android/sdk
7
+ #Tue Apr 23 16:40:15 ICT 2024
8
+ sdk.dir=/Users/hung.dao1/Library/Android/sdk
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/native-kits",
3
- "version": "0.114.2-beta.1",
3
+ "version": "0.114.2-beta.2",
4
4
  "private": false,
5
5
  "dependencies": {},
6
6
  "devDependencies": {},