64 lines
2.1 KiB
Swift
64 lines
2.1 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
|
|
@EnvironmentObject var mastodonController: MastodonController
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading) {
|
|
HStack(alignment: .top) {
|
|
Text(mastodonController.instanceFeatures.filtersV2 ? filter.title ?? "" : filter.keywordMOs.first?.keyword ?? "")
|
|
.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())
|
|
}
|
|
}
|
|
}
|
|
|
|
if mastodonController.instanceFeatures.filtersV2 {
|
|
Text("^[\(filter.keywords.count) keywords](inflect: true)")
|
|
}
|
|
|
|
// rather than mapping over filter.contexts, because we want a consistent order
|
|
Text(FilterV1.Context.allCases.filter { filter.contexts.contains($0) }.map(\.displayName).formatted())
|
|
.font(.subheadline)
|
|
|
|
if !mastodonController.instanceFeatures.filtersV2 && filter.keywordMOs.first?.wholeWord == true {
|
|
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.contexts = [.home]
|
|
return FilterRow(filter: filter)
|
|
}
|
|
}
|