From 79658a8da36704b675b44a17410c6f785c416b96 Mon Sep 17 00:00:00 2001 From: Xiaoyu Liu Date: Sat, 13 May 2023 04:04:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20step=20progress=20indicat?= =?UTF-8?q?or=20alignment=20(#564)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Models/ModelDefinitions.swift | 2 +- .../StepProgressIndicator/SingleStep.swift | 1 + .../StepProgressIndicator/StepItem.swift | 30 +++++++++++ .../StepProgressIndicator+View.swift | 5 +- .../StepProgressIndicatorContainer.swift | 2 +- .../StepProgressIndicator/StepsStyles.swift | 53 ++++++++----------- .../API/SingleStep+API.generated.swift | 2 +- 7 files changed, 56 insertions(+), 39 deletions(-) create mode 100644 Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepItem.swift diff --git a/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift b/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift index 301bbddbd..83c990305 100644 --- a/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift +++ b/Sources/FioriSwiftUICore/Models/ModelDefinitions.swift @@ -383,7 +383,7 @@ public protocol KPIHeaderItemModel {} // sourcery: virtualPropBottom = "var bottom: CGFloat = 8" // sourcery: virtualPropLeading = "var leading: CGFloat = 8" // sourcery: virtualPropTrailing = "var trailing: CGFloat = 8" -// sourcery: virtualPropHorizontalSpacing = "var horizontalSpacing: CGFloat = 14" +// sourcery: virtualPropHorizontalSpacing = "var horizontalSpacing: CGFloat = 8" // sourcery: virtualPropStepState = "var state: StepIndicatorState?" // sourcery: virtualPropIsLastStep = "var isLastStep: Bool = false" // sourcery: generated_component_composite diff --git a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/SingleStep.swift b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/SingleStep.swift index 93b4d7b68..d5b4206ee 100644 --- a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/SingleStep.swift +++ b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/SingleStep.swift @@ -266,6 +266,7 @@ struct InnerSingleStep: View { .alignmentGuide(.stepsTopAlignment) { ($0.height - ($0[.lastTextBaseline] - $0[.firstTextBaseline])) / 2 } + .alignmentGuide(.stepsLeadingAlignment) { $0[.leading] } Spacer().frame(width: trailing) Spacer() } diff --git a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepItem.swift b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepItem.swift new file mode 100644 index 000000000..ca60c02e0 --- /dev/null +++ b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepItem.swift @@ -0,0 +1,30 @@ +import Foundation + +/// Step items data model for `StepProgressIndicator` with a default style. +public struct StepItem: Identifiable { + /// Step id. + public var id = UUID().uuidString + /// Step title. + public var title: String? + /// Step state. + public var state: StepIndicatorState + /// Sub-steps for this one. + public var substeps: [StepItem] + + /// Convenience initialization for step tiem. + /// - Parameters: + /// - id: Step id. + /// - title: Step title. + /// - state: Step state. + /// - children: Sub-steps for this one. + public init(id: String = UUID().uuidString, + title: String? = nil, + state: StepIndicatorState = [], + substeps: [StepItem] = []) + { + self.id = id + self.title = title + self.state = state + self.substeps = substeps + } +} diff --git a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicator+View.swift b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicator+View.swift index f4c21e2e1..b53e1ec26 100644 --- a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicator+View.swift +++ b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicator+View.swift @@ -63,10 +63,7 @@ extension StepProgressIndicator: View { title Spacer() action - .simultaneousGesture(TapGesture().onEnded { _ in - self.isPresented.toggle() - }) - .simultaneousGesture(LongPressGesture().onEnded { _ in + .simultaneousGesture(LongPressGesture(minimumDuration: 0).onEnded { _ in self.isPresented.toggle() }) } diff --git a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicatorContainer.swift b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicatorContainer.swift index 4173c71e2..2cff4b367 100644 --- a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicatorContainer.swift +++ b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepProgressIndicatorContainer.swift @@ -19,7 +19,7 @@ struct StepProgressIndicatorContainer: View { } } case .vertical: - VStack(alignment: .leading, spacing: stepsSpacing) { + VStack(alignment: .stepsLeadingAlignment, spacing: stepsSpacing) { ForEach(0 ..< steps.count, id: \.self) { index in steps.view(at: index) .environment(\.stepAxis, stepAxis) diff --git a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepsStyles.swift b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepsStyles.swift index 3860e1365..41331e9a1 100644 --- a/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepsStyles.swift +++ b/Sources/FioriSwiftUICore/Views/StepProgressIndicator/StepsStyles.swift @@ -1,35 +1,6 @@ import FioriThemeManager import SwiftUI -/// Step items data model for `StepProgressIndicator` with a default style. -public struct StepItem: Identifiable { - /// Step id. - public var id = UUID().uuidString - /// Step title. - public var title: String? - /// Step state. - public var state: StepIndicatorState - /// Sub-steps for this one. - public var substeps: [StepItem] - - /// Convenience initialization for step tiem. - /// - Parameters: - /// - id: Step id. - /// - title: Step title. - /// - state: Step state. - /// - children: Sub-steps for this one. - public init(id: String = UUID().uuidString, - title: String? = nil, - state: StepIndicatorState = [], - substeps: [StepItem] = []) - { - self.id = id - self.title = title - self.state = state - self.substeps = substeps - } -} - extension VerticalAlignment { private enum StepsTopAlignment: AlignmentID { static func defaultValue(in dimensions: ViewDimensions) -> CGFloat { @@ -38,6 +9,24 @@ extension VerticalAlignment { } static let stepsTopAlignment = VerticalAlignment(StepsTopAlignment.self) + + private enum StepsNodeCenterAlignment: AlignmentID { + static func defaultValue(in dimensions: ViewDimensions) -> CGFloat { + dimensions[VerticalAlignment.center] + } + } + + static let stepsNodeCenterAlignment = VerticalAlignment(StepsNodeCenterAlignment.self) +} + +extension HorizontalAlignment { + private enum StepsLeadingAlignment: AlignmentID { + static func defaultValue(in dimensions: ViewDimensions) -> CGFloat { + dimensions[HorizontalAlignment.leading] + } + } + + static let stepsLeadingAlignment = HorizontalAlignment(StepsLeadingAlignment.self) } struct StepButtonStyle: ButtonStyle { @@ -85,7 +74,7 @@ struct StepButtonStyle: ButtonStyle { if let s = stepStyle(id) { s.makeNode(configuration: stepConfig).typeErased } else { - stepConfig.node + DefaultStepStyle().makeNode(configuration: stepConfig).typeErased } } @@ -93,7 +82,7 @@ struct StepButtonStyle: ButtonStyle { if let s = stepStyle(id) { s.makeTitle(configuration: stepConfig).typeErased } else { - stepConfig.title + DefaultStepStyle().makeTitle(configuration: stepConfig).typeErased } } @@ -101,7 +90,7 @@ struct StepButtonStyle: ButtonStyle { if let s = stepStyle(id) { s.makeLine(configuration: stepConfig).typeErased } else { - stepConfig.line + DefaultStepStyle().makeLine(configuration: stepConfig).typeErased } } } diff --git a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SingleStep+API.generated.swift b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SingleStep+API.generated.swift index 863de9ab4..0871d7eed 100644 --- a/Sources/FioriSwiftUICore/_generated/ViewModels/API/SingleStep+API.generated.swift +++ b/Sources/FioriSwiftUICore/_generated/ViewModels/API/SingleStep+API.generated.swift @@ -14,7 +14,7 @@ public struct SingleStep