From 7079e062d271c664efc1e346cba45d312896d8dc Mon Sep 17 00:00:00 2001 From: Duong Thai Date: Thu, 12 Oct 2023 08:49:11 +0700 Subject: [PATCH] move release date view to `ReleaseDateView.swift` - I moved outside 2 lines of `.frame(maxWidth: .infinity, alignment: .leading)` because this layout job should belong to `InfoPane` - I added preview blocks for testing --- Xcodes.xcodeproj/project.pbxproj | 4 ++ Xcodes/Frontend/InfoPane/InfoPane.swift | 19 +------ .../Frontend/InfoPane/ReleaseDateView.swift | 57 +++++++++++++++++++ 3 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 Xcodes/Frontend/InfoPane/ReleaseDateView.swift diff --git a/Xcodes.xcodeproj/project.pbxproj b/Xcodes.xcodeproj/project.pbxproj index 0ea5669..d4b06bd 100644 --- a/Xcodes.xcodeproj/project.pbxproj +++ b/Xcodes.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 536CFDD4263C9A8000026CE0 /* XcodesSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536CFDD3263C9A8000026CE0 /* XcodesSheet.swift */; }; 53CBAB2C263DCC9100410495 /* XcodesAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CBAB2B263DCC9100410495 /* XcodesAlert.swift */; }; 63EAA4EB259944450046AB8F /* ProgressButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EAA4EA259944450046AB8F /* ProgressButton.swift */; }; + B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */; }; CA11E7BA2598476C00D2EE1C /* XcodeCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */; }; CA2518EC25A7FF2B00F08414 /* AppStateUpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2518EB25A7FF2B00F08414 /* AppStateUpdateTests.swift */; }; CA25192A25A9644800F08414 /* XcodeInstallState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA25192925A9644800F08414 /* XcodeInstallState.swift */; }; @@ -192,6 +193,7 @@ A0187D39285792D1002F46F9 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; AAB037D32839BD4700017680 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; AB4EB0DE28541FA000FF3B1D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseDateView.swift; sourceTree = ""; }; B648F22B2810C1130096781B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; C0AE7FA4283002DC00DA63D2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CA11E7B92598476C00D2EE1C /* XcodeCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeCommands.swift; sourceTree = ""; }; @@ -617,6 +619,7 @@ children = ( CAFBDC67259A308B003DCC5A /* InfoPane.swift */, E8E98A9525D863D700EC89A0 /* InstallationStepDetailView.swift */, + B0C6AD032AD6E65700E64698 /* ReleaseDateView.swift */, ); path = InfoPane; sourceTree = ""; @@ -842,6 +845,7 @@ CA9FF8662595130600E47BAF /* View+IsHidden.swift in Sources */, CAE4248C259A68B800B8B246 /* Optional+IsNotNil.swift in Sources */, CA9FF9362595B44700E47BAF /* HelperClient.swift in Sources */, + B0C6AD042AD6E65700E64698 /* ReleaseDateView.swift in Sources */, CAA8587C25A2B37900ACF8C0 /* IsTesting.swift in Sources */, CABFA9CA2592EEEA00380FEE /* AppState+Update.swift in Sources */, CA44901F2463AD34003D8213 /* Tag.swift in Sources */, diff --git a/Xcodes/Frontend/InfoPane/InfoPane.swift b/Xcodes/Frontend/InfoPane/InfoPane.swift index 3842a55..2a71240 100644 --- a/Xcodes/Frontend/InfoPane/InfoPane.swift +++ b/Xcodes/Frontend/InfoPane/InfoPane.swift @@ -55,7 +55,8 @@ struct InfoPane: View { Group{ releaseNotes(for: xcode) - releaseDate(for: xcode) + ReleaseDateView(date: xcode.releaseDate) + .frame(maxWidth: .infinity, alignment: .leading) identicalBuilds(for: xcode) compatibility(for: xcode) sdks(for: xcode) @@ -113,22 +114,6 @@ struct InfoPane: View { } } - @ViewBuilder - private func releaseDate(for xcode: Xcode) -> some View { - if let releaseDate = xcode.releaseDate { - VStack(alignment: .leading) { - Text("ReleaseDate") - .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - Text("\(releaseDate, style: .date)") - .font(.subheadline) - .frame(maxWidth: .infinity, alignment: .leading) - } - } else { - EmptyView() - } - } - @ViewBuilder private func releaseNotes(for xcode: Xcode) -> some View { if let releaseNotesURL = xcode.releaseNotesURL { diff --git a/Xcodes/Frontend/InfoPane/ReleaseDateView.swift b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift new file mode 100644 index 0000000..0695f4d --- /dev/null +++ b/Xcodes/Frontend/InfoPane/ReleaseDateView.swift @@ -0,0 +1,57 @@ +// +// ReleaseDateView.swift +// Xcodes +// +// Created by Duong Thai on 11/10/2023. +// Copyright © 2023 Robots and Pencils. All rights reserved. +// + +import SwiftUI + +struct ReleaseDateView: View { + let date: Date? + + var body: some View { + if let date = date { + VStack(alignment: .leading) { + Text("ReleaseDate (old version)") + .font(.headline) + Text("\(date, style: .date)") + .font(.subheadline) + } + } else { + EmptyView() + } + } + + init(date: Date? = nil) { + self.date = date + } +} + +struct ReleaseDateView_Preview: PreviewProvider { + static var previews: some View { + WrapperView() + } +} + +private struct WrapperView: View { + @State var isNil = false + var date: Date? { isNil ? nil : Date() } + + var body: some View { + VStack { + HStack { + ReleaseDateView(date: date) + .border(.red) + } + Spacer() + Toggle(isOn: $isNil) { + Text("Is Nil?") + } + } + .animation(.default) + .frame(width: 300, height: 100) + .padding() + } +}