Initial avatar editor implementation

This commit is contained in:
Ilya Laktyushin
2023-01-11 01:05:10 +04:00
parent 1bc6d85f0f
commit 89481bdef2
19 changed files with 3242 additions and 64 deletions

View File

@@ -186,6 +186,7 @@ public final class PagerComponent<ChildEnvironmentType: Equatable, TopPanelEnvir
public let panelStateUpdated: ((PagerComponentPanelState, Transition) -> Void)?
public let isTopPanelExpandedUpdated: (Bool, Transition) -> Void
public let isTopPanelHiddenUpdated: (Bool, Transition) -> Void
public let contentIdUpdated: (AnyHashable) -> Void
public let panelHideBehavior: PagerComponentPanelHideBehavior
public let clipContentToTopPanel: Bool
@@ -205,6 +206,7 @@ public final class PagerComponent<ChildEnvironmentType: Equatable, TopPanelEnvir
panelStateUpdated: ((PagerComponentPanelState, Transition) -> Void)?,
isTopPanelExpandedUpdated: @escaping (Bool, Transition) -> Void,
isTopPanelHiddenUpdated: @escaping (Bool, Transition) -> Void,
contentIdUpdated: @escaping (AnyHashable) -> Void,
panelHideBehavior: PagerComponentPanelHideBehavior,
clipContentToTopPanel: Bool
) {
@@ -223,6 +225,7 @@ public final class PagerComponent<ChildEnvironmentType: Equatable, TopPanelEnvir
self.panelStateUpdated = panelStateUpdated
self.isTopPanelExpandedUpdated = isTopPanelExpandedUpdated
self.isTopPanelHiddenUpdated = isTopPanelHiddenUpdated
self.contentIdUpdated = contentIdUpdated
self.panelHideBehavior = panelHideBehavior
self.clipContentToTopPanel = clipContentToTopPanel
}
@@ -397,12 +400,33 @@ public final class PagerComponent<ChildEnvironmentType: Equatable, TopPanelEnvir
} else {
self.state?.updated(transition: Transition(animation: .curve(duration: 0.4, curve: .spring)))
}
if let centralId = self.centralId {
self.component?.contentIdUpdated(centralId)
}
}
default:
break
}
}
public func navigateToContentId(_ id: AnyHashable) {
var updateTopPanelExpanded = false
if self.centralId != id {
self.centralId = id
if self.isTopPanelExpanded {
updateTopPanelExpanded = true
}
}
if updateTopPanelExpanded {
self.isTopPanelExpandedUpdated(isExpanded: false, transition: Transition(animation: .curve(duration: 0.4, curve: .spring)))
} else {
self.state?.updated(transition: Transition(animation: .curve(duration: 0.4, curve: .spring)))
}
self.component?.contentIdUpdated(id)
}
func update(component: PagerComponent<ChildEnvironmentType, TopPanelEnvironment>, availableSize: CGSize, state: EmptyComponentState, environment: Environment<EnvironmentType>, transition: Transition) -> CGSize {
let previousPanelHideBehavior = self.component?.panelHideBehavior
@@ -418,21 +442,7 @@ public final class PagerComponent<ChildEnvironmentType: Equatable, TopPanelEnvir
guard let strongSelf = self else {
return
}
var updateTopPanelExpanded = false
if strongSelf.centralId != id {
strongSelf.centralId = id
if strongSelf.isTopPanelExpanded {
updateTopPanelExpanded = true
}
}
if updateTopPanelExpanded {
strongSelf.isTopPanelExpandedUpdated(isExpanded: false, transition: Transition(animation: .curve(duration: 0.4, curve: .spring)))
} else {
strongSelf.state?.updated(transition: Transition(animation: .curve(duration: 0.4, curve: .spring)))
}
strongSelf.navigateToContentId(id)
}
var centralId: AnyHashable?