Rename ComponentWrapper to MountedComponent

This commit is contained in:
Max Desiatov 2018-12-31 12:11:27 +00:00
parent 62dde168b6
commit 74746771a0
No known key found for this signature in database
GPG Key ID: FE08EBF9CF58CBA2
6 changed files with 45 additions and 46 deletions

View File

@ -44,9 +44,9 @@
OBJ_145 /* UIKitRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* UIKitRenderer.swift */; };
OBJ_147 /* Gluon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "Gluon::Gluon::Product" /* Gluon.framework */; };
OBJ_69 /* AnyEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_27 /* AnyEquatable.swift */; };
OBJ_70 /* ComponentWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_29 /* ComponentWrapper.swift */; };
OBJ_71 /* CompositeComponentWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_30 /* CompositeComponentWrapper.swift */; };
OBJ_72 /* HostComponentWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* HostComponentWrapper.swift */; };
OBJ_70 /* MountedComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_29 /* MountedComponent.swift */; };
OBJ_71 /* MountedCompositeComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_30 /* MountedCompositeComponent.swift */; };
OBJ_72 /* MountedHostComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* MountedHostComponent.swift */; };
OBJ_73 /* Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_32 /* Default.swift */; };
OBJ_74 /* Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_33 /* Diffable.swift */; };
OBJ_75 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_34 /* Event.swift */; };
@ -128,9 +128,9 @@
OBJ_24 /* ControlWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlWrapper.swift; sourceTree = "<group>"; };
OBJ_25 /* UIKitRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIKitRenderer.swift; sourceTree = "<group>"; };
OBJ_27 /* AnyEquatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyEquatable.swift; sourceTree = "<group>"; };
OBJ_29 /* ComponentWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentWrapper.swift; sourceTree = "<group>"; };
OBJ_30 /* CompositeComponentWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompositeComponentWrapper.swift; sourceTree = "<group>"; };
OBJ_31 /* HostComponentWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostComponentWrapper.swift; sourceTree = "<group>"; };
OBJ_29 /* MountedComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MountedComponent.swift; sourceTree = "<group>"; };
OBJ_30 /* MountedCompositeComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MountedCompositeComponent.swift; sourceTree = "<group>"; };
OBJ_31 /* MountedHostComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MountedHostComponent.swift; sourceTree = "<group>"; };
OBJ_32 /* Default.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Default.swift; sourceTree = "<group>"; };
OBJ_33 /* Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Diffable.swift; sourceTree = "<group>"; };
OBJ_34 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = "<group>"; };
@ -276,9 +276,9 @@
OBJ_28 /* ComponentWrapper */ = {
isa = PBXGroup;
children = (
OBJ_29 /* ComponentWrapper.swift */,
OBJ_30 /* CompositeComponentWrapper.swift */,
OBJ_31 /* HostComponentWrapper.swift */,
OBJ_29 /* MountedComponent.swift */,
OBJ_30 /* MountedCompositeComponent.swift */,
OBJ_31 /* MountedHostComponent.swift */,
);
path = ComponentWrapper;
sourceTree = "<group>";
@ -297,7 +297,7 @@
path = HostComponents;
sourceTree = "<group>";
};
OBJ_5 /* */ = {
OBJ_5 = {
isa = PBXGroup;
children = (
OBJ_6 /* Package.swift */,
@ -306,7 +306,6 @@
OBJ_58 /* Example */,
OBJ_59 /* Products */,
);
name = "";
sourceTree = "<group>";
};
OBJ_54 /* Tests */ = {
@ -458,7 +457,7 @@
knownRegions = (
en,
);
mainGroup = OBJ_5 /* */;
mainGroup = OBJ_5;
productRefGroup = OBJ_59 /* Products */;
projectDirPath = "";
projectRoot = "";
@ -517,9 +516,9 @@
buildActionMask = 0;
files = (
OBJ_69 /* AnyEquatable.swift in Sources */,
OBJ_70 /* ComponentWrapper.swift in Sources */,
OBJ_71 /* CompositeComponentWrapper.swift in Sources */,
OBJ_72 /* HostComponentWrapper.swift in Sources */,
OBJ_70 /* MountedComponent.swift in Sources */,
OBJ_71 /* MountedCompositeComponent.swift in Sources */,
OBJ_72 /* MountedHostComponent.swift in Sources */,
OBJ_73 /* Default.swift in Sources */,
OBJ_74 /* Diffable.swift in Sources */,
OBJ_75 /* Event.swift in Sources */,

View File

@ -1,5 +1,5 @@
//
// ValueTypes.swift
// Component.swift
// Gluon
//
// Created by Max Desiatov on 07/10/2018.

View File

@ -5,7 +5,7 @@
// Created by Max Desiatov on 28/11/2018.
//
class ComponentWrapper<R: Renderer> {
class MountedComponent<R: Renderer> {
var node: Node
init(_ node: Node) {
@ -26,13 +26,13 @@ class ComponentWrapper<R: Renderer> {
}
extension Node {
func makeComponentWrapper<R: Renderer>(_ parentTarget: R.Target)
-> ComponentWrapper<R> {
func makeMountedComponent<R: Renderer>(_ parentTarget: R.Target)
-> MountedComponent<R> {
switch type {
case let .base(type):
return HostComponentWrapper(self, type, parentTarget)
return MountedHostComponent(self, type, parentTarget)
case let .composite(type):
return CompositeComponentWrapper(self, type, parentTarget)
return MountedCompositeComponent(self, type, parentTarget)
}
}
}

View File

@ -1,5 +1,5 @@
//
// CompositeComponentWrapper.swift
// MountedCompositeComponent.swift
// Gluon
//
// Created by Max Desiatov on 03/12/2018.
@ -14,10 +14,10 @@ extension CompositeComponent {
}
}
final class CompositeComponentWrapper<R: Renderer>: ComponentWrapper<R>,
final class MountedCompositeComponent<R: Renderer>: MountedComponent<R>,
Hashable {
static func ==(lhs: CompositeComponentWrapper<R>,
rhs: CompositeComponentWrapper<R>) -> Bool {
static func ==(lhs: MountedCompositeComponent<R>,
rhs: MountedCompositeComponent<R>) -> Bool {
return lhs === rhs
}
@ -25,7 +25,7 @@ final class CompositeComponentWrapper<R: Renderer>: ComponentWrapper<R>,
hasher.combine(ObjectIdentifier(self))
}
private var mountedChildren = [ComponentWrapper<R>]()
private var mountedChildren = [MountedComponent<R>]()
private let type: AnyCompositeComponent.Type
private let parentTarget: R.Target
var state = [String: Any]()
@ -42,8 +42,8 @@ final class CompositeComponentWrapper<R: Renderer>: ComponentWrapper<R>,
override func mount(with reconciler: StackReconciler<R>) {
let renderedNode = render(with: reconciler)
let child: ComponentWrapper<R> =
renderedNode.makeComponentWrapper(parentTarget)
let child: MountedComponent<R> =
renderedNode.makeMountedComponent(parentTarget)
mountedChildren = [child]
child.mount(with: reconciler)
}
@ -58,8 +58,8 @@ final class CompositeComponentWrapper<R: Renderer>: ComponentWrapper<R>,
switch (mountedChildren.last, render(with: reconciler)) {
// no mounted children, but children available now
case let (nil, renderedNode):
let child: ComponentWrapper<R> =
renderedNode.makeComponentWrapper(parentTarget)
let child: MountedComponent<R> =
renderedNode.makeMountedComponent(parentTarget)
mountedChildren = [child]
child.mount(with: reconciler)
@ -77,8 +77,8 @@ final class CompositeComponentWrapper<R: Renderer>: ComponentWrapper<R>,
if wrapper.node.type != renderedNode.type {
wrapper.unmount(with: reconciler)
let child: ComponentWrapper<R> =
renderedNode.makeComponentWrapper(parentTarget)
let child: MountedComponent<R> =
renderedNode.makeMountedComponent(parentTarget)
mountedChildren = [child]
child.mount(with: reconciler)
}

View File

@ -1,12 +1,12 @@
//
// HostComponentWrapper.swift
// MountedHostComponent.swift
// Gluon
//
// Created by Max Desiatov on 03/12/2018.
//
final class HostComponentWrapper<R: Renderer>: ComponentWrapper<R> {
private var mountedChildren = [ComponentWrapper<R>]()
final class MountedHostComponent<R: Renderer>: MountedComponent<R> {
private var mountedChildren = [MountedComponent<R>]()
private let type: AnyHostComponent.Type
private let parentTarget: R.Target
private var target: R.Target?
@ -29,11 +29,11 @@ final class HostComponentWrapper<R: Renderer>: ComponentWrapper<R> {
switch node.children.value {
case let nodes as [Node]:
mountedChildren = nodes.map { $0.makeComponentWrapper(target) }
mountedChildren = nodes.map { $0.makeMountedComponent(target) }
mountedChildren.forEach { $0.mount(with: reconciler) }
case let node as Node:
let child: ComponentWrapper<R> = node.makeComponentWrapper(target)
let child: MountedComponent<R> = node.makeMountedComponent(target)
mountedChildren = [child]
child.mount(with: reconciler)
@ -68,22 +68,22 @@ final class HostComponentWrapper<R: Renderer>: ComponentWrapper<R> {
// no existing children, mount all new
case (true, false):
mountedChildren = nodes.map { $0.makeComponentWrapper(target) }
mountedChildren = nodes.map { $0.makeMountedComponent(target) }
mountedChildren.forEach { $0.mount(with: reconciler) }
// both arrays have items, reconcile by types and keys
case (false, false):
var newChildren = [ComponentWrapper<R>]()
var newChildren = [MountedComponent<R>]()
while let child = mountedChildren.first, let node = nodes.first {
let newChild: ComponentWrapper<R>
let newChild: MountedComponent<R>
if node.type == mountedChildren[0].node.type {
child.node = node
child.update(with: reconciler)
newChild = child
} else {
child.unmount(with: reconciler)
newChild = node.makeComponentWrapper(target)
newChild = node.makeMountedComponent(target)
newChild.mount(with: reconciler)
}
newChildren.append(newChild)
@ -103,7 +103,7 @@ final class HostComponentWrapper<R: Renderer>: ComponentWrapper<R> {
child.node = node
child.update(with: reconciler)
} else {
let child: ComponentWrapper<R> = node.makeComponentWrapper(target)
let child: MountedComponent<R> = node.makeMountedComponent(target)
child.mount(with: reconciler)
}

View File

@ -8,23 +8,23 @@
import Dispatch
public final class StackReconciler<R: Renderer> {
private var queuedRerenders = Set<CompositeComponentWrapper<R>>()
private var queuedRerenders = Set<MountedCompositeComponent<R>>()
public let rootTarget: R.Target
private let rootComponent: ComponentWrapper<R>
private let rootComponent: MountedComponent<R>
private(set) weak var renderer: R?
public init(node: Node, target: R.Target, renderer: R) {
self.renderer = renderer
rootTarget = target
rootComponent = node.makeComponentWrapper(target)
rootComponent = node.makeMountedComponent(target)
rootComponent.mount(with: self)
}
func queue(state: Any,
for component: CompositeComponentWrapper<R>,
for component: MountedCompositeComponent<R>,
id: String) {
let scheduleReconcile = queuedRerenders.isEmpty