update README

This commit is contained in:
Kelvas
2023-01-11 17:22:01 +01:00
parent 447bb0960f
commit 123c6c8d2a
16 changed files with 151 additions and 96 deletions

View File

@@ -0,0 +1,20 @@
//
// Emoji.swift
//
//
// Created by Kévin Sibué on 11/01/2023.
//
import Foundation
public struct Emoji: Hashable {
public let value: String
public let name: String
public init(value: String, name: String) {
self.value = value
self.name = name
}
}

View File

@@ -0,0 +1,74 @@
//
// EmojiPickerView.swift
//
//
// Created by Kévin Sibué on 11/01/2023.
//
import SwiftUI
public struct EmojiPickerView: View {
@Environment(\.dismiss)
var dismiss
@Binding
public var selectedEmoji: Emoji?
@State
private var search: String = ""
private var selectedColor: Color
private var searchEnabled: Bool
public init(selectedEmoji: Binding<Emoji?>, searchEnabled: Bool = false, selectedColor: Color = .blue) {
self._selectedEmoji = selectedEmoji
self.selectedColor = selectedColor
self.searchEnabled = searchEnabled
}
let columns = [
GridItem(.adaptive(minimum: 80))
]
let emojis = EmojiProvider().getAll()
private var searchResults: [Emoji] {
if search.isEmpty {
return emojis
} else {
return emojis
.filter { $0.name.lowercased().contains(search.lowercased()) }
}
}
public var body: some View {
ScrollView {
LazyVGrid(columns: columns, spacing: 20) {
ForEach(searchResults, id: \.self) { emoji in
RoundedRectangle(cornerRadius: 16)
.fill((selectedEmoji == emoji ? selectedColor : Color.gray).opacity(0.4))
.frame(width: 64, height: 64)
.overlay {
Text(emoji.value)
.font(.largeTitle)
}
.onTapGesture {
selectedEmoji = emoji
dismiss()
}
}
}
.padding(.horizontal)
}
.frame(maxHeight: .infinity)
.searchable(text: $search)
}
}
struct EmojiPickerView_Previews: PreviewProvider {
static var previews: some View {
EmojiPickerView(selectedEmoji: .constant(Emoji(value: "", name: "")))
}
}

View File

@@ -0,0 +1,17 @@
//
// EmojiProvider.swift
//
//
// Created by Kévin Sibué on 11/01/2023.
//
import Foundation
import Smile
public final class EmojiProvider {
func getAll() -> [Emoji] {
return Smile.list().map({ Emoji(value: $0, name: name(emoji: $0).first ?? "") })
}
}