IceCubesApp/Packages/StatusKit/Sources/StatusKit/Editor/Components/AutoComplete/ExpandedView.swift
Thomas Ricouard 1f858414d8 format .
2024-02-14 12:48:14 +01:00

100 lines
3 KiB
Swift

import DesignSystem
import EmojiText
import Env
import Foundation
import Models
import SwiftData
import SwiftUI
extension StatusEditor.AutoCompleteView {
@MainActor
struct ExpandedView: View {
@Environment(\.modelContext) private var context
@Environment(Theme.self) private var theme
@Environment(CurrentAccount.self) private var currentAccount
var viewModel: StatusEditor.ViewModel
@Binding var isTagSuggestionExpanded: Bool
@Query(sort: \RecentTag.lastUse, order: .reverse) var recentTags: [RecentTag]
var body: some View {
TabView {
recentTagsPage
followedTagsPage
}
.tabViewStyle(.page(indexDisplayMode: .always))
.frame(height: 200)
}
private var recentTagsPage: some View {
ScrollView(.vertical) {
LazyVStack(alignment: .leading, spacing: 12) {
Text("status.editor.language-select.recently-used")
.font(.scaledSubheadline)
.foregroundStyle(theme.labelColor)
.fontWeight(.bold)
ForEach(recentTags) { tag in
HStack {
Button {
tag.lastUse = Date()
withAnimation {
isTagSuggestionExpanded = false
viewModel.selectHashtagSuggestion(tag: tag.title)
}
} label: {
VStack(alignment: .leading) {
Text("#\(tag.title)")
.font(.scaledFootnote)
.fontWeight(.bold)
.foregroundColor(theme.labelColor)
Text(tag.formattedDate)
.font(.scaledFootnote)
.foregroundStyle(theme.tintColor)
}
}
Spacer()
}
}
}
.padding(.horizontal, .layoutPadding)
}
}
private var followedTagsPage: some View {
ScrollView(.vertical) {
LazyVStack(alignment: .leading, spacing: 12) {
Text("timeline.filter.tags")
.font(.scaledSubheadline)
.foregroundStyle(theme.labelColor)
.fontWeight(.bold)
ForEach(currentAccount.tags) { tag in
HStack {
Button {
if let index = recentTags.firstIndex(where: { $0.title.lowercased() == tag.name.lowercased() }) {
recentTags[index].lastUse = Date()
} else {
context.insert(RecentTag(title: tag.name))
}
withAnimation {
isTagSuggestionExpanded = false
viewModel.selectHashtagSuggestion(tag: tag.name)
}
} label: {
VStack(alignment: .leading) {
Text("#\(tag.name)")
.font(.scaledFootnote)
.fontWeight(.bold)
.foregroundColor(theme.labelColor)
}
}
Spacer()
}
}
}
.padding(.horizontal, .layoutPadding)
}
}
}
}