summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/Views
diff options
context:
space:
mode:
authorAndrew Bulhak <andrew.bulhak@mullvad.net>2025-08-18 16:12:41 +0200
committerBug Magnet <marco.nikic@mullvad.net>2025-09-09 11:55:51 +0200
commitf605b90956897c87f6a18c1e90d8db2894de6ff8 (patch)
tree575b032c60246cddeba751ae0d4853ad0f9dc961 /ios/MullvadVPN/Views
parent1b702ff2c9f409cdfe455bbf41a81bca25b1f384 (diff)
downloadmullvadvpn-f605b90956897c87f6a18c1e90d8db2894de6ff8.tar.xz
mullvadvpn-f605b90956897c87f6a18c1e90d8db2894de6ff8.zip
Implement SwiftUI-based AccountDeletionView and ActivityIndicator
Diffstat (limited to 'ios/MullvadVPN/Views')
-rw-r--r--ios/MullvadVPN/Views/MullvadPrimaryTextField.swift33
-rw-r--r--ios/MullvadVPN/Views/MullvadProgressViewStyle.swift8
2 files changed, 29 insertions, 12 deletions
diff --git a/ios/MullvadVPN/Views/MullvadPrimaryTextField.swift b/ios/MullvadVPN/Views/MullvadPrimaryTextField.swift
index 0ee481afab..a170e17392 100644
--- a/ios/MullvadVPN/Views/MullvadPrimaryTextField.swift
+++ b/ios/MullvadVPN/Views/MullvadPrimaryTextField.swift
@@ -6,19 +6,22 @@ struct MullvadPrimaryTextField: View {
@Binding private var text: String
@Binding private var suggestion: String?
private let validate: ((String) -> Bool)?
+ private let keyboardType: UIKeyboardType?
init(
label: String,
placeholder: String,
text: Binding<String>,
suggestion: Binding<String?>? = nil,
- validate: ((String) -> Bool)? = nil
+ validate: ((String) -> Bool)? = nil,
+ keyboardType: UIKeyboardType? = nil
) {
self.label = label
self.placeholder = placeholder
self._text = text
self._suggestion = suggestion ?? .constant(nil)
self.validate = validate
+ self.keyboardType = keyboardType
}
var isValid: Bool {
@@ -38,22 +41,30 @@ struct MullvadPrimaryTextField: View {
return false
}
+ private var textFieldComponent: some View {
+ TextField(
+ placeholder,
+ text: $text,
+ prompt: Text(placeholder)
+ .foregroundColor(
+ isEnabled ? .MullvadTextField.inputPlaceholder : .MullvadTextField.textDisabled
+ )
+ )
+ .focused($isFocused)
+ .padding(.vertical, 12)
+ }
+
var body: some View {
VStack(alignment: .leading) {
Text(label)
.foregroundColor(.MullvadTextField.label)
VStack(spacing: 0) {
HStack(spacing: 4) {
- TextField(
- placeholder,
- text: $text,
- prompt: Text(placeholder)
- .foregroundColor(
- isEnabled ? .MullvadTextField.inputPlaceholder : .MullvadTextField.textDisabled
- )
- )
- .focused($isFocused)
- .padding(.vertical, 12)
+ if let keyboardType {
+ textFieldComponent.keyboardType(keyboardType)
+ } else {
+ textFieldComponent
+ }
if !text.isEmpty && isEnabled {
Button {
withAnimation {
diff --git a/ios/MullvadVPN/Views/MullvadProgressViewStyle.swift b/ios/MullvadVPN/Views/MullvadProgressViewStyle.swift
index 80a3b4bbef..e12a791bb9 100644
--- a/ios/MullvadVPN/Views/MullvadProgressViewStyle.swift
+++ b/ios/MullvadVPN/Views/MullvadProgressViewStyle.swift
@@ -1,11 +1,17 @@
import SwiftUI
struct MullvadProgressViewStyle: ProgressViewStyle {
+ let size: CGFloat
+
+ init(size: CGFloat = 48) {
+ self.size = size
+ }
+
@State var isAnimating = false
func makeBody(configuration: Configuration) -> some View {
Image.mullvadIconSpinner
.resizable()
- .frame(maxWidth: 48, maxHeight: 48)
+ .frame(maxWidth: size, maxHeight: size)
.rotationEffect(.degrees(isAnimating ? 360 : 0))
.onAppear {
withAnimation(