IceCubesApp/Packages/StatusKit/Sources/StatusKit/Editor/Components/CustomEmojisView.swift

67 lines
2.2 KiB
Swift
Raw Normal View History

2024-01-21 09:49:40 +00:00
import DesignSystem
import Env
import Models
import NukeUI
2024-02-14 11:48:14 +00:00
import SwiftUI
2024-01-21 09:49:40 +00:00
extension StatusEditor {
@MainActor
struct CustomEmojisView: View {
@Environment(\.dismiss) private var dismiss
2024-01-21 09:49:40 +00:00
@Environment(Theme.self) private var theme
2024-01-21 09:49:40 +00:00
var viewModel: ViewModel
2024-01-21 09:49:40 +00:00
var body: some View {
NavigationStack {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 40, maximum: 40))], spacing: 9) {
ForEach(viewModel.customEmojiContainer) { container in
2024-01-21 09:49:40 +00:00
Section {
ForEach(container.emojis) { emoji in
LazyImage(url: emoji.url) { state in
if let image = state.image {
image
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 40, height: 40)
.accessibilityLabel(emoji.shortcode.replacingOccurrences(of: "_", with: " "))
.accessibilityAddTraits(.isButton)
} else if state.isLoading {
Rectangle()
.fill(Color.gray)
.frame(width: 40, height: 40)
.accessibility(hidden: true)
}
}
.onTapGesture {
viewModel.insertStatusText(text: " :\(emoji.shortcode): ")
}
}
.padding(.horizontal, 16)
2024-01-21 09:49:40 +00:00
} header: {
Text(container.categoryName)
.font(.scaledHeadline)
.bold()
.foregroundStyle(Color.secondary)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.horizontal, 16)
2024-01-21 09:49:40 +00:00
}
}
}
}
.toolbar {
2024-01-23 07:13:45 +00:00
CancelToolbarItem()
2024-01-21 09:49:40 +00:00
}
.scrollContentBackground(.hidden)
.navigationTitle("status.editor.emojis.navigation-title")
.navigationBarTitleDisplayMode(.inline)
}
2024-01-21 10:13:38 +00:00
.presentationBackground(.thinMaterial)
.presentationCornerRadius(16)
2024-01-24 08:25:34 +00:00
.presentationDetents([.medium])
2024-01-21 09:49:40 +00:00
}
}
}