cs193p-emojiart/EmojiArt/PaletteEditor.swift
Ching 566f3539d1 feat(view, viewmodels): 增加调色板按钮,增加报错提示
1. 增加从调色板中增加、删除、跳转和编辑 emoji 的功能
2. 增加通过 url 获取背景图时失败带报错

Signed-off-by: Ching <loooching@gmail.com>
2023-02-26 19:34:35 +08:00

70 lines
2.0 KiB
Swift

//
// PaletteEditor.swift
// EmojiArt
//
// Created by ching on 2023/2/25.
//
import SwiftUI
struct PaletteEditor: View {
@Binding var palette: Palette
var body: some View {
Form {
nameSection
addEmojiSection
removeEmojiSection
}
.frame(minWidth: const.paletteEditorMinWidth, minHeight: const.paletteEditorMinHeight)
.navigationTitle("Edit \(palette.name)")
}
var nameSection: some View {
Section(header: Text("Name")) {
TextField("Name", text: $palette.name)
}
}
@State private var emojiToAdd = ""
var addEmojiSection: some View {
Section(header: Text("Add Emoji")) {
TextField("", text: $emojiToAdd)
.onChange(of: emojiToAdd) { emojis in
addEmojis(emojis)
}
}
}
func addEmojis(_ emojis: String) {
palette.emojis = (emojis + palette.emojis)
.filter { $0.isEmoji }
}
var removeEmojiSection: some View {
Section(header: Text("Remove Emoji")) {
let emojis = palette.emojis.map { String($0) }
LazyVGrid(columns: [GridItem(.adaptive(minimum: const.defaultEmojiFontSize))]) {
ForEach(emojis, id: \.self) { emoji in
Text(emoji)
.onTapGesture {
withAnimation {
palette.emojis.removeAll(where: { String($0) == emoji })
}
}
}
}
}
}
}
struct PaletteEditor_Previews: PreviewProvider {
static var previews: some View {
PaletteEditor(palette: .constant(PaletteStore(named: "Priview").palette(at: 1)))
.previewLayout(.fixed(width: 350, height: 350))
PaletteEditor(palette: .constant(PaletteStore(named: "Priview").palette(at: 1)))
.previewLayout(.fixed(width: 350, height: 650))
}
}