mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 04:31:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Defaults
 | |
| import Foundation
 | |
| import SwiftUI
 | |
| 
 | |
| struct AccountSelectionView: View {
 | |
|     var showHeader = true
 | |
| 
 | |
|     @EnvironmentObject<AccountsModel> private var accountsModel
 | |
| 
 | |
|     @Default(.accounts) private var accounts
 | |
|     @Default(.instances) private var instances
 | |
| 
 | |
|     var body: some View {
 | |
|         Section(header: Text(showHeader ? "Current Account" : "")) {
 | |
|             Button(accountButtonTitle(account: accountsModel.current, long: true)) {
 | |
|                 if let account = nextAccount {
 | |
|                     accountsModel.setCurrent(account)
 | |
|                 }
 | |
|             }
 | |
|             .disabled(instances.isEmpty)
 | |
|             .contextMenu {
 | |
|                 ForEach(allAccounts) { account in
 | |
|                     Button(accountButtonTitle(account: account)) {
 | |
|                         accountsModel.setCurrent(account)
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 Button("Cancel", role: .cancel) {}
 | |
|             }
 | |
|         }
 | |
|         .id(UUID())
 | |
|     }
 | |
| 
 | |
|     var allAccounts: [Account] {
 | |
|         accounts + instances.map(\.anonymousAccount)
 | |
|     }
 | |
| 
 | |
|     private var nextAccount: Account? {
 | |
|         allAccounts.next(after: accountsModel.current)
 | |
|     }
 | |
| 
 | |
|     func accountButtonTitle(account: Account! = nil, long: Bool = false) -> String {
 | |
|         guard account != nil else {
 | |
|             return "Not selected"
 | |
|         }
 | |
| 
 | |
|         let instanceDescription = long ? account.instance.longDescription : account.instance.description
 | |
| 
 | |
|         return instances.count > 1 ? "\(account.description) — \(instanceDescription)" : account.description
 | |
|     }
 | |
| }
 | 
