1.0.2
This commit is contained in:
@ -18,6 +18,11 @@ struct PDSCredentials: Sendable {
|
||||
}
|
||||
}
|
||||
|
||||
// Shared date formatters to improve performance
|
||||
extension ISO8601DateFormatter {
|
||||
static let shared = ISO8601DateFormatter()
|
||||
}
|
||||
|
||||
// Invite code model
|
||||
struct InviteCode: Identifiable, Sendable {
|
||||
var id: String
|
||||
@ -26,6 +31,20 @@ struct InviteCode: Identifiable, Sendable {
|
||||
var createdAt: Date
|
||||
var disabled: Bool
|
||||
var isDisabled: Bool { disabled } // For backwards compatibility
|
||||
|
||||
// Returns a formatted date string for display
|
||||
var formattedDate: String {
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .short
|
||||
return formatter.string(from: createdAt)
|
||||
}
|
||||
|
||||
// Returns the number of available uses
|
||||
var availableUses: Int {
|
||||
let usedCount = uses?.count ?? 0
|
||||
return max(0, 1 - usedCount) // Assuming default of 1 use per code
|
||||
}
|
||||
}
|
||||
|
||||
// Invite use model
|
||||
@ -33,6 +52,20 @@ struct CodeUse: Codable, Identifiable, Sendable {
|
||||
var id: String { usedBy }
|
||||
var usedBy: String
|
||||
var usedAt: String
|
||||
|
||||
// Parsed date for the usedAt string
|
||||
var date: Date? {
|
||||
ISO8601DateFormatter.shared.date(from: usedAt)
|
||||
}
|
||||
|
||||
// Formatted date for display
|
||||
var formattedDate: String {
|
||||
guard let date = date else { return "Unknown date" }
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .short
|
||||
return formatter.string(from: date)
|
||||
}
|
||||
}
|
||||
|
||||
// User model
|
||||
@ -46,6 +79,14 @@ class PDSUser: Identifiable, Hashable, Sendable, ObservableObject {
|
||||
@Published var description: String
|
||||
@Published var isActive: Bool = true
|
||||
|
||||
// Formatted date for display
|
||||
var formattedJoinDate: String {
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .none
|
||||
return formatter.string(from: joinedAt)
|
||||
}
|
||||
|
||||
init(id: String, handle: String, displayName: String, description: String, joinedAt: Date, avatar: URL?, isActive: Bool = true) {
|
||||
self.id = id
|
||||
self.handle = handle
|
||||
@ -66,6 +107,23 @@ class PDSUser: Identifiable, Hashable, Sendable, ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// Shared DateFormatter for consistent date formatting across the app
|
||||
extension DateFormatter {
|
||||
static let shared: DateFormatter = {
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .short
|
||||
return formatter
|
||||
}()
|
||||
|
||||
static let dateOnly: DateFormatter = {
|
||||
let formatter = DateFormatter()
|
||||
formatter.dateStyle = .medium
|
||||
formatter.timeStyle = .none
|
||||
return formatter
|
||||
}()
|
||||
}
|
||||
|
||||
// Auth state
|
||||
enum AuthState: Sendable {
|
||||
case loggedOut
|
||||
|
Reference in New Issue
Block a user