Skip to content

Commit 81a9c28

Browse files
committed
Update ViewListOutputs+Extension
1 parent a57e211 commit 81a9c28

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

Sources/OpenSwiftUICore/Render/DisplayList/DisplayList_StableIdentity.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ extension _GraphInputs {
134134
pushScope(id: makeStableTypeData(type))
135135
}
136136

137-
package var stableIDScope: WeakAttribute<_DisplayList_StableIdentityScope>? {
137+
package var stableIDScope: WeakAttribute<DisplayList.StableIdentityScope>? {
138138
guard !options.contains(.needsStableDisplayListIDs) else {
139139
return nil
140140
}

Sources/OpenSwiftUICore/View/Input/ViewList.swift

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public struct _ViewListInputs {
9696
}
9797

9898
package var canTransition: Bool {
99-
options.contains(.canTransition)
99+
options.contains(.canTransition) && !options.contains(.disableTransitions)
100100
}
101101

102102
package mutating func addTraitKey<K>(_ key: K.Type) where K: _ViewTraitKey {
@@ -1132,7 +1132,7 @@ private struct UnaryElements<Generator>: ViewList.Elements where Generator: Unar
11321132
}
11331133
}
11341134

1135-
// MARK: - ViewListOutputs + Extension [TODO]
1135+
// MARK: - ViewListOutputs + Extension [WIP]
11361136

11371137
extension _ViewListOutputs {
11381138
private struct ApplyModifiers: Rule, AsyncAttribute {
@@ -1146,11 +1146,40 @@ extension _ViewListOutputs {
11461146
}
11471147
}
11481148

1149-
private static func staticList(_ elements: any ViewList.Elements, inputs: _ViewListInputs, staticCount: Int) -> _ViewListOutputs {
1150-
preconditionFailure("TODO")
1149+
private static func staticList(
1150+
_ elements: any ViewList.Elements,
1151+
inputs: _ViewListInputs,
1152+
staticCount: Int
1153+
) -> _ViewListOutputs {
1154+
let implicitID = inputs.implicitID
1155+
let scope = inputs.base.stableIDScope
1156+
let traits = inputs.traits
1157+
let canTransition = inputs.canTransition
1158+
let views: Views
1159+
if scope != nil || traits != nil || canTransition {
1160+
views = .dynamicList(
1161+
Attribute(BaseViewList.Init(
1162+
elements: elements,
1163+
implicitID: implicitID,
1164+
canTransition: canTransition,
1165+
stableIDScope: scope,
1166+
traitKeys: inputs.traitKeys,
1167+
traits: .init(traits)
1168+
)),
1169+
nil
1170+
)
1171+
} else {
1172+
views = .staticList(elements)
1173+
}
1174+
return _ViewListOutputs(
1175+
views,
1176+
nextImplicitID: implicitID &+ staticCount,
1177+
staticCount: staticCount
1178+
)
11511179
}
11521180

1153-
static func nonEmptyParentViewList(inputs: _ViewListInputs) -> _ViewListOutputs {
1181+
// FIXME: Group
1182+
package static func nonEmptyParentViewList(inputs: _ViewListInputs) -> _ViewListOutputs {
11541183
preconditionFailure("TODO")
11551184
}
11561185

@@ -1175,15 +1204,51 @@ extension _ViewListOutputs {
11751204
}
11761205

11771206
package func makeAttribute(inputs: _ViewListInputs) -> Attribute<any ViewList> {
1178-
preconditionFailure("TODO")
1207+
switch views {
1208+
case let .staticList(elements):
1209+
Attribute(value: BaseViewList(
1210+
elements: elements,
1211+
implicitID: nextImplicitID,
1212+
canTransition: inputs.canTransition,
1213+
stableIDScope: inputs.base.stableIDScope,
1214+
traitKeys: .init(),
1215+
traits: .init()
1216+
))
1217+
case let .dynamicList(attribute, modifier):
1218+
if let modifier {
1219+
Attribute(ApplyModifiers(base: attribute, modifier: modifier))
1220+
} else {
1221+
attribute
1222+
}
1223+
}
11791224
}
11801225

11811226
package func makeAttribute(viewInputs: _ViewInputs) -> Attribute<any ViewList> {
1182-
preconditionFailure("TODO")
1227+
switch views {
1228+
case let .staticList(elements):
1229+
Attribute(value: BaseViewList(
1230+
elements: elements,
1231+
implicitID: nextImplicitID,
1232+
canTransition: false,
1233+
stableIDScope: viewInputs.base.stableIDScope,
1234+
traitKeys: .init(),
1235+
traits: .init()
1236+
))
1237+
case let .dynamicList(attribute, modifier):
1238+
if let modifier {
1239+
Attribute(ApplyModifiers(base: attribute, modifier: modifier))
1240+
} else {
1241+
attribute
1242+
}
1243+
}
11831244
}
11841245

11851246
package static func makeModifiedList(list: Attribute<any ViewList>, modifier: ListModifier?) -> Attribute<any ViewList> {
1186-
preconditionFailure("TODO")
1247+
if let modifier {
1248+
Attribute(ApplyModifiers(base: list, modifier: modifier))
1249+
} else {
1250+
list
1251+
}
11871252
}
11881253

11891254
package mutating func multiModifier<T>(_ modifier: _GraphValue<T>, inputs: _ViewListInputs) where T: ViewModifier {

0 commit comments

Comments
 (0)