add global search

main
Razmig Sarkissian 3 weeks ago
parent 4842ad4572
commit d64ee6a7e0
  1. 7
      PadelClubData/Data/PlayerRegistration.swift
  2. 10
      PadelClubData/Data/TeamRegistration.swift
  3. 18
      PadelClubData/Extensions/String+Extensions.swift

@ -81,6 +81,13 @@ final public class PlayerRegistration: BasePlayerRegistration, SideStorable {
}
public func contains(_ searchField: String) -> Bool {
if let paymentId, paymentId.localizedCaseInsensitiveContains(searchField) { return true }
if let email, email.lowercased().localizedCaseInsensitiveContains(searchField) { return true }
if let contactEmail, contactEmail.localizedCaseInsensitiveContains(searchField) { return true }
if let licenceId, licenceId.localizedCaseInsensitiveContains(searchField) { return true }
if searchField.isPhoneNumber(), let phoneNumber, phoneNumber.isSamePhoneNumber(as: searchField) { return true }
if searchField.isPhoneNumber(), let contactPhoneNumber, contactPhoneNumber.isSamePhoneNumber(as: searchField) { return true }
let nameComponents = searchField.canonicalVersion.split(separator: " ")
if nameComponents.count > 1 {

@ -687,6 +687,16 @@ final public class TeamRegistration: BaseTeamRegistration, SideStorable {
return nil
}
public func followingMatches() -> [Match] {
guard let tournamentStore else { return [] }
let allTeamScores = tournamentStore.teamScores.filter({ $0.teamRegistration == self.id })
let ids = allTeamScores.compactMap({ $0.match })
let matches = tournamentStore.matches.filter({ match in
ids.contains(match.id)
})
return matches.sorted(by: \.computedStartDateForSorting)
}
func insertOnServer() {
self.tournamentStore?.teamRegistrations.writeChangeAndInsertOnServer(instance: self)

@ -225,6 +225,23 @@ public extension String {
firstMatch(of: RegexStatic.phoneNumber) != nil
}
func normalize(_ phone: String) -> String {
var normalized = phone.trimmingCharacters(in: .whitespacesAndNewlines)
// Remove all non-digit characters
normalized = normalized.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
// Remove leading country code for France (33) if present
if normalized.hasPrefix("33") {
normalized = "0" + normalized.dropFirst(2)
} else if normalized.hasPrefix("0033") {
normalized = "0" + normalized.dropFirst(4)
}
return normalized
}
func isSamePhoneNumber(as other: String) -> Bool {
return normalize(self) == normalize(other)
}
func cleanSearchText() -> String {
// Create a character set of all punctuation except slashes and hyphens
var punctuationToRemove = CharacterSet.punctuationCharacters
@ -312,3 +329,4 @@ public extension String {
return self // Return the original string if parsing fails
}
}

Loading…
Cancel
Save