Files
2022-04-27 09:25:20 +09:00

72 lines
2.0 KiB
Swift

//
// PatterndGridLoadView.swift
// LifeGameApp
//
// Created by Yusuke Hosonuma on 2020/09/18.
//
import SwiftUI
import Core
struct PatternGridLoadView: View {
@StateObject private var loader: PatternLoader
private var isSignIn: Bool
private var didTap: (PatternItem) -> Void
private var didToggleStar: (PatternItem) -> Void
@State private var isPresentedAlertNeedLogin = false
init(url: URL,
isSignIn: Bool,
didTap: @escaping (PatternItem) -> Void,
didToggleStar: @escaping (PatternItem) -> Void
) {
_loader = StateObject(wrappedValue: PatternLoader(url: url))
self.isSignIn = isSignIn
self.didTap = didTap
self.didToggleStar = didToggleStar
}
var body: some View {
if let board = loader.board {
PatternGridView(board: board)
.onTapGesture {
didTap(board)
}
.contextMenu {
PatternSelectContextMenu(
isStared: .init(get: { board.stared },
set: { didSetStared(value: $0, board: board) })
)
}
.alert(isPresented: $isPresentedAlertNeedLogin) {
Alert(title: Text("Need login."))
}
} else {
PatternGridView.placeHolder()
}
}
// MARK: Action
private func didSetStared(value: Bool, board: PatternItem) {
if isSignIn {
withAnimation {
didToggleStar(board)
loader.refresh()
}
} else {
self.isPresentedAlertNeedLogin.toggle()
}
}
}
struct PatterndGridLoadView_Previews: PreviewProvider {
static var previews: some View {
PatternGridLoadView(url: URL(string: "https://lifegame-dev.web.app/pattern/$rats.json")!,
isSignIn: true,
didTap: { _ in },
didToggleStar: { _ in })
}
}