1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
- // SPDX-License-Identifier: GPL-3.0-or-later
- //
- import SwiftUI
- import NextcloudKit
- struct UserStatusOptionsSwiftUI: View {
- @Environment(\.dismiss) var dismiss
- @Binding var changed: Bool
- @Binding var userStatus: NCUserStatus
- @State private var options: [DetailedOption] = []
- @State private var isLoading: Bool = true
- var body: some View {
- VStack {
- List(options, id: \.self) { option in
- Button(action: {
- setActiveUserStatus(userStatus: option.identifier)
- }) {
- HStack(spacing: 15) {
- AnyView(NCUserStatus.getUserStatusIcon(userStatus: option.identifier))
- .frame(width: 20)
- VStack(alignment: .leading) {
- Text(option.title)
- .foregroundColor(.primary)
- if option.subtitle != nil && !option.subtitle.isEmpty {
- Text(option.subtitle)
- .foregroundColor(.secondary)
- }
- }
- Spacer()
- if userStatus.status == option.identifier {
- Image(systemName: "checkmark")
- .font(.system(size: 18, weight: .medium))
- .foregroundColor(Color(NCAppBranding.themeColor()))
- }
- }
- }
- }
- }
- .navigationBarTitle(Text(NSLocalizedString("Online status", comment: "")), displayMode: .inline)
- .navigationBarHidden(false)
- .onAppear {
- getActiveUserStatus()
- presentUserStatusOptions()
- }
- }
- func setActiveUserStatus(userStatus: String) {
- let activeAcoount: TalkAccount = NCDatabaseManager.sharedInstance().activeAccount()
- NCAPIController.sharedInstance().setUserStatus(userStatus, for: activeAcoount) { _ in
- getActiveUserStatus()
- dismiss()
- changed.toggle()
- }
- }
- func getActiveUserStatus() {
- let activeAccount: TalkAccount = NCDatabaseManager.sharedInstance().activeAccount()
- NCAPIController.sharedInstance().getUserStatus(for: activeAccount) { [self] userStatusDict, error in
- if error == nil && userStatusDict != nil {
- userStatus = NCUserStatus(dictionary: userStatusDict!)
- }
- }
- }
- func presentUserStatusOptions() {
- let onlineOption = DetailedOption()
- onlineOption.identifier = kUserStatusOnline
- onlineOption.title = NCUserStatus.readableUserStatus(fromUserStatus: kUserStatusOnline)
- let awayOption = DetailedOption()
- awayOption.identifier = kUserStatusAway
- awayOption.title = NCUserStatus.readableUserStatus(fromUserStatus: kUserStatusAway)
- let dndOption = DetailedOption()
- dndOption.identifier = kUserStatusDND
- dndOption.title = NCUserStatus.readableUserStatus(fromUserStatus: kUserStatusDND)
- dndOption.subtitle = NSLocalizedString("Mute all notifications", comment: "")
- let invisibleOption = DetailedOption()
- invisibleOption.identifier = kUserStatusInvisible
- invisibleOption.title = NCUserStatus.readableUserStatus(fromUserStatus: kUserStatusInvisible)
- invisibleOption.subtitle = NSLocalizedString("Appear offline", comment: "")
- options.append(onlineOption)
- options.append(awayOption)
- options.append(dndOption)
- options.append(invisibleOption)
- }
- }
|