Compare commits

...

2 Commits

Author SHA1 Message Date
ca88c446fb delete todo 2025-12-12 04:30:14 +03:00
bc73eb37be fix in add contact and update contact inforamation 2025-12-12 04:02:18 +03:00
2 changed files with 36 additions and 25 deletions

View File

@ -6,6 +6,7 @@ struct ContactAddView: View {
@Environment(\.dismiss) private var dismiss @Environment(\.dismiss) private var dismiss
private let contactsService = ContactsService() private let contactsService = ContactsService()
private let initialName: String
@State private var displayName: String @State private var displayName: String
@State private var activeAlert: ContactAddAlert? @State private var activeAlert: ContactAddAlert?
@ -14,8 +15,9 @@ struct ContactAddView: View {
init(contact: ContactEditInfo, onContactAdded: ((ContactPayload) -> Void)? = nil) { init(contact: ContactEditInfo, onContactAdded: ((ContactPayload) -> Void)? = nil) {
self.contact = contact self.contact = contact
self.onContactAdded = onContactAdded self.onContactAdded = onContactAdded
let initialName = contact.preferredName // let initialName = contact.preferredName
_displayName = State(initialValue: initialName) self.initialName = contact.preferredName
_displayName = State(initialValue: "")
} }
var body: some View { var body: some View {
@ -23,7 +25,8 @@ struct ContactAddView: View {
avatarSection avatarSection
Section(header: Text(NSLocalizedString("Публичная информация", comment: "Contact add public info section title"))) { Section(header: Text(NSLocalizedString("Публичная информация", comment: "Contact add public info section title"))) {
TextField(NSLocalizedString("Отображаемое имя", comment: "Display name field placeholder"), text: $displayName) // TextField(NSLocalizedString("Отображаемое имя", comment: "Display name field placeholder"), text: $displayName)
TextField(NSLocalizedString("\(initialName)", comment: "Display name field placeholder"), text: $displayName)
.disabled(isSaving) .disabled(isSaving)
} }
} }
@ -110,7 +113,7 @@ struct ContactAddView: View {
private var hasChanges: Bool { private var hasChanges: Bool {
let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines) let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else { return false } // guard !trimmed.isEmpty else { return false }
if let existing = contact.customName?.trimmedNonEmpty { if let existing = contact.customName?.trimmedNonEmpty {
return trimmed != existing return trimmed != existing
@ -138,13 +141,13 @@ struct ContactAddView: View {
} }
let trimmedName = displayName.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) let trimmedName = displayName.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
guard !trimmedName.isEmpty else { // guard !trimmedName.isEmpty else {
activeAlert = ContactAddAlert( // activeAlert = ContactAddAlert(
title: NSLocalizedString("Ошибка", comment: "Common error title"), // title: NSLocalizedString("Ошибка", comment: "Common error title"),
message: NSLocalizedString("Имя не может быть пустым.", comment: "Contact add empty name error") // message: NSLocalizedString("Имя не может быть пустым.", comment: "Contact add empty name error")
) // )
return // return
} // }
isSaving = true isSaving = true
let customName = trimmedName let customName = trimmedName

View File

@ -40,9 +40,6 @@ struct ContactEditInfo {
} }
var preferredName: String { var preferredName: String {
if let custom = customName?.trimmedNonEmpty {
return custom
}
if let full = fullName?.trimmedNonEmpty { if let full = fullName?.trimmedNonEmpty {
return full return full
} }
@ -51,6 +48,14 @@ struct ContactEditInfo {
} }
return NSLocalizedString("Неизвестный пользователь", comment: "Message profile fallback title") return NSLocalizedString("Неизвестный пользователь", comment: "Message profile fallback title")
} }
var loadCustomName: String {
if let custom = customName?.trimmedNonEmpty {
return custom
} else {
return ""
}
}
} }
struct ContactEditView: View { struct ContactEditView: View {
@ -60,6 +65,7 @@ struct ContactEditView: View {
@Environment(\.dismiss) private var dismiss @Environment(\.dismiss) private var dismiss
private let contactsService = ContactsService() private let contactsService = ContactsService()
private let initialName: String
@State private var displayName: String @State private var displayName: String
@State private var activeAlert: ContactEditAlert? @State private var activeAlert: ContactEditAlert?
@ -75,8 +81,9 @@ struct ContactEditView: View {
self.contact = contact self.contact = contact
self.onContactDeleted = onContactDeleted self.onContactDeleted = onContactDeleted
self.onContactUpdated = onContactUpdated self.onContactUpdated = onContactUpdated
let initialName = contact.preferredName self.initialName = contact.preferredName
_displayName = State(initialValue: initialName) let initialCustomName = contact.loadCustomName
_displayName = State(initialValue: initialCustomName)
} }
var body: some View { var body: some View {
@ -84,7 +91,8 @@ struct ContactEditView: View {
avatarSection avatarSection
Section(header: Text(NSLocalizedString("Публичная информация", comment: "Profile info section title"))) { Section(header: Text(NSLocalizedString("Публичная информация", comment: "Profile info section title"))) {
TextField(NSLocalizedString("Отображаемое имя", comment: "Display name field placeholder"), text: $displayName) // TextField(NSLocalizedString("Отображаемое имя", comment: "Display name field placeholder"), text: $displayName)
TextField(NSLocalizedString("\(self.initialName)", comment: "Display name field placeholder"), text: $displayName)
.disabled(isSaving || isDeleting) .disabled(isSaving || isDeleting)
} }
@ -211,7 +219,7 @@ struct ContactEditView: View {
private var hasChanges: Bool { private var hasChanges: Bool {
let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines) let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else { return false } // guard !trimmed.isEmpty else { return false }
if let existing = contact.customName?.trimmedNonEmpty { if let existing = contact.customName?.trimmedNonEmpty {
return trimmed != existing return trimmed != existing
@ -239,13 +247,13 @@ struct ContactEditView: View {
} }
let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines) let trimmed = displayName.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else { // guard !trimmed.isEmpty else {
activeAlert = ContactEditAlert( // activeAlert = ContactEditAlert(
title: NSLocalizedString("Ошибка", comment: "Common error title"), // title: NSLocalizedString("Ошибка", comment: "Common error title"),
message: NSLocalizedString("Имя не может быть пустым.", comment: "Contact edit empty name error") // message: NSLocalizedString("Имя не может быть пустым.", comment: "Contact edit empty name error")
) // )
return // return
} // }
if trimmed.count > 32 { if trimmed.count > 32 {
activeAlert = ContactEditAlert( activeAlert = ContactEditAlert(