iOS/Sources/Thread/CredentialsManagement/ThreadCredentialsManagementView.swift
Bruno Pantaleão Gonçalves 16f5a1bc75
Simplify and migrate onboarding screens to SwiftUI (#3527)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->



https://github.com/user-attachments/assets/e79c6e4d-13ff-405a-9463-02e597ce4996
2025-04-08 23:54:34 +02:00

65 lines
2.1 KiB
Swift

import Shared
import SwiftUI
struct ThreadCredentialsManagementView: View {
@StateObject private var viewModel = ThreadCredentialsManagementViewModel()
@State private var showDeleteConfirmation = false
@State private var credentialPendingDelete: ThreadCredential?
var body: some View {
VStack {
if viewModel.isLoading {
ProgressView()
.progressViewStyle(.circular)
} else {
listView
}
}
.navigationTitle(L10n.Thread.Management.title)
.onAppear {
Task.detached {
await viewModel.loadCredentials()
}
}
}
private var listView: some View {
List(viewModel.configs, id: \.id) { config in
Section(config.name) {
ForEach(config.credentials, id: \.autogeneratedId) { credential in
CollapsibleView(collapsedContent: {
Text(credential.networkName)
.padding(.vertical, 8)
}, expandedContent: {
ThreadCredentialDetailsView(source: config.source, credential: credential)
.padding(.top)
})
}
.onDelete { indexSet in
credentialPendingDelete = indexSet.map({ config.credentials[$0] }).first
showDeleteConfirmation = true
}
}
}
.environmentObject(viewModel)
.confirmationDialog(
L10n.SettingsDetails.Thread.DeleteCredential.Confirmation.title,
isPresented: $showDeleteConfirmation,
titleVisibility: .visible
) {
Button(L10n.yesLabel, role: .destructive) {
viewModel.deleteCredential(credentialPendingDelete)
credentialPendingDelete = nil
}
Button(L10n.noLabel, role: .cancel) {
credentialPendingDelete = nil
}
}
}
}
#Preview {
ThreadCredentialsManagementView()
}