Skip to content

Commit d9ce444

Browse files
committed
chore(ios): minor fixes
1 parent 4f1b313 commit d9ce444

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

ios/SwiftUINode.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import SwiftUI
33

44
// Protocol for all SwiftUI nodes
5-
protocol SwiftUINode: Identifiable {
5+
public protocol SwiftUINode: Identifiable {
66
var id: String { get }
77
var children: [any SwiftUINode]? { get }
88
}
@@ -62,6 +62,8 @@ private struct NodeWrapper: Decodable {
6262
node = try GenericNode<SliderProps>(from: decoder)
6363
case "TextField":
6464
node = try GenericNode<TextFieldProps>(from: decoder)
65+
case "NumberField":
66+
node = try GenericNode<NumberFieldProps>(from: decoder)
6567
case "Picker":
6668
node = try GenericNode<PickerProps>(from: decoder)
6769
case "Stepper":

ios/SwiftUIRootProps.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ final class SwiftUIRootProps: ObservableObject {
4444
textField.props.onBlur = { [weak self] in
4545
self?.onEvent?("blur", "TextField", textField.id, nil)
4646
}
47+
} else if let numberField = node as? GenericNode<NumberFieldProps> {
48+
numberField.props.onChange = { [weak self] rawValue in
49+
let value = rawValue != nil ? String(rawValue!) : ""
50+
self?.onEvent?("change", "NumberField", numberField.id, value)
51+
}
52+
numberField.props.onFocus = { [weak self] in
53+
self?.onEvent?("focus", "NumberField", numberField.id, nil)
54+
}
55+
numberField.props.onBlur = { [weak self] in
56+
self?.onEvent?("blur", "NumberField", numberField.id, nil)
57+
}
4758
} else if let button = node as? GenericNode<ButtonProps> {
4859
button.props.onPress = { [weak self] in
4960
self?.onEvent?("press", "Button", button.id, nil)

ios/SwiftUIRootView.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public class SwiftUIRootView: SwiftUIContainerView {
2929

3030
private func updateSwiftUIView(with node: (any SwiftUINode)?) {
3131
hostingController.rootView = AnyView(
32-
node.map { AnyView(buildSwiftUIView(from: $0)) } ?? AnyView(Text("Invalid view tree"))
32+
// NavigationView {
33+
node.map { AnyView(buildSwiftUIView(from: $0)) } ?? AnyView(Text("Invalid view tree"))
34+
// }
3335
)
3436
}
3537

@@ -127,6 +129,8 @@ public class SwiftUIRootView: SwiftUIContainerView {
127129
AnyView(TextView(props: text.props))
128130
case let textField as GenericNode<TextFieldProps>:
129131
AnyView(TextFieldView(props: textField.props))
132+
case let numberField as GenericNode<NumberFieldProps>:
133+
AnyView(NumberFieldView(props: numberField.props))
130134
case let picker as GenericNode<PickerProps>:
131135
AnyView(PickerView(props: picker.props))
132136
case let datePicker as GenericNode<DatePickerProps>:
@@ -174,6 +178,10 @@ public class SwiftUIRootView: SwiftUIContainerView {
174178
let updatedProps = try decoder.decode(TextFieldProps.self, from: updatedPropsData)
175179
textField.props.merge(from: updatedProps)
176180

181+
case let numberField as GenericNode<NumberFieldProps>:
182+
let updatedProps = try decoder.decode(NumberFieldProps.self, from: updatedPropsData)
183+
numberField.props.merge(from: updatedProps)
184+
177185
case let toggle as GenericNode<ToggleProps>:
178186
let updatedProps = try decoder.decode(ToggleProps.self, from: updatedPropsData)
179187
toggle.props.merge(from: updatedProps)
@@ -187,8 +195,8 @@ public class SwiftUIRootView: SwiftUIContainerView {
187195
picker.props.merge(from: updatedProps)
188196

189197
case let form as GenericNode<FormProps>:
190-
// FormNode has no props to merge
191-
print("FormNode has no props to update for id \(identifier)")
198+
let updatedProps = try decoder.decode(FormProps.self, from: updatedPropsData)
199+
form.props.merge(from: updatedProps)
192200

193201
case let section as GenericNode<SectionProps>:
194202
let updatedProps = try decoder.decode(SectionProps.self, from: updatedPropsData)

ios/extensions/View+Styling.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ extension View {
6262
func applyBoxStyles(_ style: StyleProps?) -> some View {
6363
guard let style = style else { return AnyView(self) }
6464

65-
return AnyView(applyFrameStyles(style)
65+
return AnyView(AnyView(applyFrameStyles(style)
6666
.modifier(AbsolutePositionModifier(style: style))
6767
.applyIf(style.padding != nil) { $0.padding(style.padding!) }
6868
.applyIf(style.paddingHorizontal != nil) { $0.padding(.horizontal, style.paddingHorizontal!) }
6969
.applyIf(style.paddingVertical != nil) { $0.padding(.vertical, style.paddingVertical!) })
7070
.applyIf(style.paddingLeft != nil) { $0.padding(.leading, style.paddingLeft!) }
7171
.applyIf(style.paddingRight != nil) { $0.padding(.trailing, style.paddingRight!) }
7272
.applyIf(style.paddingTop != nil) { $0.padding(.top, style.paddingTop!) }
73-
.applyIf(style.paddingBottom != nil) { $0.padding(.bottom, style.paddingBottom!) }
73+
.applyIf(style.paddingBottom != nil) { $0.padding(.bottom, style.paddingBottom!) })
7474
}
7575

7676
func applyViewStyles(_ style: StyleProps?) -> some View {
@@ -106,6 +106,9 @@ extension View {
106106
return AnyView(view)
107107
}
108108
}
109+
.applyIf(style.textAlign != nil) {
110+
return $0.multilineTextAlignment(style.textAlign!)
111+
}
109112
}
110113

111114
@ViewBuilder

0 commit comments

Comments
 (0)