// // SwiftUIView.swift // SideStore // // Created by Fabian Thies on 18.11.22. // Copyright © 2022 Fabian Thies. All rights reserved. // import SwiftUI import AsyncImage struct AppIconView: View { @ObservedObject private var iO = Inject.observer @ObservedObject private var sideStoreIconData = AppIconsData.shared let iconUrl: URL? var isSideStore: Bool var size: CGFloat = 64 var cornerRadius: CGFloat { size * 0.234 } var image: some View { if isSideStore { return AnyView( Image(uiImage: UIImage(named: sideStoreIconData.selectedIconName! + "-image") ?? UIImage()) .resizable() .renderingMode(.original) ) } if let iconUrl { return AnyView( AsyncImage(url: iconUrl) { image in image .resizable() } placeholder: { Color(UIColor.secondarySystemBackground) } ) } return AnyView(Color(UIColor.secondarySystemBackground)) } var body: some View { image .frame(width: size, height: size) .clipShape(RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)) .enableInjection() } } extension AppIconView: Equatable { /// Prevent re-rendering of the view if the parameters didn't change static func == (lhs: AppIconView, rhs: AppIconView) -> Bool { lhs.iconUrl == rhs.iconUrl && lhs.cornerRadius == rhs.cornerRadius } }