Improve add account screen
This commit is contained in:
parent
691b3f2667
commit
b577e41eae
|
@ -44,8 +44,10 @@ struct AddAccountView: View {
|
|||
if let instanceFetchError {
|
||||
Text(instanceFetchError)
|
||||
}
|
||||
if let instance {
|
||||
if instance != nil || !instanceName.isEmpty {
|
||||
signInSection
|
||||
}
|
||||
if let instance {
|
||||
InstanceInfoSection(instance: instance)
|
||||
} else {
|
||||
instancesListView
|
||||
|
@ -68,7 +70,10 @@ struct AddAccountView: View {
|
|||
isInstanceURLFieldFocused = true
|
||||
let client = InstanceSocialClient()
|
||||
Task {
|
||||
self.instances = await client.fetchInstances()
|
||||
let instances = await client.fetchInstances()
|
||||
withAnimation {
|
||||
self.instances = instances
|
||||
}
|
||||
}
|
||||
isSigninIn = false
|
||||
}
|
||||
|
@ -76,16 +81,22 @@ struct AddAccountView: View {
|
|||
instanceNamePublisher.send(newValue)
|
||||
}
|
||||
.onReceive(instanceNamePublisher.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)) { newValue in
|
||||
let newValue = newValue
|
||||
.replacingOccurrences(of: "http://", with: "")
|
||||
.replacingOccurrences(of: "https://", with: "")
|
||||
let client = Client(server: newValue)
|
||||
Task {
|
||||
do {
|
||||
self.instance = try await client.get(endpoint: Instances.instance)
|
||||
self.instanceFetchError = nil
|
||||
let instance: Instance = try await client.get(endpoint: Instances.instance)
|
||||
withAnimation {
|
||||
self.instance = instance
|
||||
}
|
||||
instanceFetchError = nil
|
||||
} catch _ as DecodingError {
|
||||
self.instance = nil
|
||||
self.instanceFetchError = "account.add.error.instance-not-supported"
|
||||
instance = nil
|
||||
instanceFetchError = "account.add.error.instance-not-supported"
|
||||
} catch {
|
||||
self.instance = nil
|
||||
instance = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,6 +113,11 @@ struct AddAccountView: View {
|
|||
await continueSignIn(url: url)
|
||||
}
|
||||
})
|
||||
.onChange(of: oauthURL, perform: { newValue in
|
||||
if newValue == nil {
|
||||
isSigninIn = false
|
||||
}
|
||||
})
|
||||
.sheet(item: $oauthURL, content: { url in
|
||||
SafariView(url: url)
|
||||
})
|
||||
|
@ -111,15 +127,18 @@ struct AddAccountView: View {
|
|||
private var signInSection: some View {
|
||||
Section {
|
||||
Button {
|
||||
isSigninIn = true
|
||||
withAnimation {
|
||||
isSigninIn = true
|
||||
}
|
||||
Task {
|
||||
await signIn()
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Spacer()
|
||||
if isSigninIn {
|
||||
if isSigninIn || !instanceName.isEmpty && instance == nil {
|
||||
ProgressView()
|
||||
.id(instanceName)
|
||||
.tint(theme.labelColor)
|
||||
} else {
|
||||
Text("account.add.sign-in")
|
||||
|
|
Loading…
Reference in New Issue