60 lines
1.8 KiB
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)
|
||
|
}
|
||
|
}
|