Tusker/Tusker/Screens/Filters/FilterRow.swift

60 lines
1.8 KiB
Swift

//
// FilterRow.swift
// Tusker
//
// Created by Shadowfacts on 11/30/22.
// Copyright © 2022 Shadowfacts. All rights reserved.
//
import SwiftUI
import Pachyderm
struct FilterRow: View {
@ObservedObject var filter: FilterMO
var body: some View {
VStack(alignment: .leading) {
HStack(alignment: .top) {
Text(filter.phrase)
.font(.headline)
Spacer()
if let expiresAt = filter.expiresAt {
if expiresAt <= Date() {
Text("Expired")
.font(.body.lowercaseSmallCaps())
.foregroundColor(.red)
} else {
Text(expiresAt.formatted(.relative(presentation: .numeric, unitsStyle: .narrow)))
.font(.body.lowercaseSmallCaps())
}
}
}
// rather than mapping over filter.contexts, because we want a consistent order
Text(Filter.Context.allCases.filter { filter.contexts.contains($0) }.map(\.displayName).formatted())
.font(.subheadline)
if filter.wholeWord {
Text("Whole word")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
}
}
struct FilterRow_Previews: PreviewProvider {
static var previews: some View {
let filter = FilterMO()
filter.id = "1"
filter.phrase = "test"
filter.expiresAt = Date().addingTimeInterval(60 * 60)
filter.wholeWord = true
filter.irreversible = false
filter.contexts = [.home]
return FilterRow(filter: filter)
}
}