Skip to content

Commit

Permalink
Support for ordering bricks within a section
Browse files Browse the repository at this point in the history
Added support to specify which brick is repeated at what index for a section.

Say a section has 2 bricks, that are each repeated 5 times. If the `orderDataSource` is set, the implementor needs to specify based on the actual index (IndexPath’s item), which brick and index needs to be returned. This gives full control to the implementor to define the order of the bricks

Fixes #139
  • Loading branch information
rubencagnie committed Jul 7, 2017
1 parent 87c2208 commit 9924c6f
Show file tree
Hide file tree
Showing 12 changed files with 664 additions and 127 deletions.
24 changes: 18 additions & 6 deletions BrickKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
4E9A25331DABEB8800D7EA99 /* BrickLayoutSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBD81DA4057000D8C87A /* BrickLayoutSection.swift */; };
4E9A25351DABEB8D00D7EA99 /* BrickCollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDB1DA4057000D8C87A /* BrickCollectionViewDataSource.swift */; };
4E9A25361DABEB8D00D7EA99 /* BrickDimension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDC1DA4057000D8C87A /* BrickDimension.swift */; };
4E9A25371DABEB8D00D7EA99 /* BrickModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDD1DA4057000D8C87A /* BrickModels.swift */; };
4E9A25371DABEB8D00D7EA99 /* Brick.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDD1DA4057000D8C87A /* Brick.swift */; };
4E9A25381DABEB8D00D7EA99 /* BrickProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDE1DA4057000D8C87A /* BrickProtocols.swift */; };
4E9A25391DABEB8D00D7EA99 /* BrickSectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDF1DA4057000D8C87A /* BrickSectionDataSource.swift */; };
4E9A253A1DABEB8D00D7EA99 /* CollectionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9350F0D51DA82A430051235F /* CollectionInfo.swift */; };
Expand Down Expand Up @@ -120,6 +120,10 @@
930054031DA724AD00239A13 /* SetZIndexBehaviorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930054011DA7242800239A13 /* SetZIndexBehaviorTests.swift */; };
930054051DA7D8A000239A13 /* BaseBrickCellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930054041DA7D8A000239A13 /* BaseBrickCellTests.swift */; };
9303A6D51DA6E00100502803 /* ButtonBrickTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9303A6D41DA6E00100502803 /* ButtonBrickTests.swift */; };
9317A9E11F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9317A9E01F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift */; };
9317A9E21F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9317A9E01F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift */; };
931A52F01F0D578C00AB0BDF /* BrickSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931A52EF1F0D578C00AB0BDF /* BrickSection.swift */; };
931A52F11F0D579000AB0BDF /* BrickSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931A52EF1F0D578C00AB0BDF /* BrickSection.swift */; };
9323656F1DF4FD4900BE5183 /* BrickAlignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9323656E1DF4FD4900BE5183 /* BrickAlignment.swift */; };
932365701DF4FD4900BE5183 /* BrickAlignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9323656E1DF4FD4900BE5183 /* BrickAlignment.swift */; };
932365721DF4FE1F00BE5183 /* BrickAlignmentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932365711DF4FE1F00BE5183 /* BrickAlignmentTests.swift */; };
Expand Down Expand Up @@ -176,7 +180,7 @@
93D9EC0B1DA4057000D8C87A /* BrickLayoutSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBD81DA4057000D8C87A /* BrickLayoutSection.swift */; };
93D9EC0D1DA4057000D8C87A /* BrickCollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDB1DA4057000D8C87A /* BrickCollectionViewDataSource.swift */; };
93D9EC0E1DA4057000D8C87A /* BrickDimension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDC1DA4057000D8C87A /* BrickDimension.swift */; };
93D9EC0F1DA4057000D8C87A /* BrickModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDD1DA4057000D8C87A /* BrickModels.swift */; };
93D9EC0F1DA4057000D8C87A /* Brick.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDD1DA4057000D8C87A /* Brick.swift */; };
93D9EC101DA4057000D8C87A /* BrickProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDE1DA4057000D8C87A /* BrickProtocols.swift */; };
93D9EC111DA4057000D8C87A /* BrickSectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBDF1DA4057000D8C87A /* BrickSectionDataSource.swift */; };
93D9EC121DA4057000D8C87A /* BrickExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9EBE11DA4057000D8C87A /* BrickExtensions.swift */; };
Expand Down Expand Up @@ -283,6 +287,8 @@
930054011DA7242800239A13 /* SetZIndexBehaviorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetZIndexBehaviorTests.swift; sourceTree = "<group>"; };
930054041DA7D8A000239A13 /* BaseBrickCellTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseBrickCellTests.swift; sourceTree = "<group>"; };
9303A6D41DA6E00100502803 /* ButtonBrickTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonBrickTests.swift; sourceTree = "<group>"; };
9317A9E01F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickSectionOrderDataSourceTests.swift; sourceTree = "<group>"; };
931A52EF1F0D578C00AB0BDF /* BrickSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickSection.swift; sourceTree = "<group>"; };
9323656E1DF4FD4900BE5183 /* BrickAlignment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickAlignment.swift; sourceTree = "<group>"; };
932365711DF4FE1F00BE5183 /* BrickAlignmentTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickAlignmentTests.swift; sourceTree = "<group>"; };
9328EEA51DC19ACE007F2562 /* LazyLoadingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LazyLoadingTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -334,7 +340,7 @@
93D9EBD81DA4057000D8C87A /* BrickLayoutSection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickLayoutSection.swift; sourceTree = "<group>"; };
93D9EBDB1DA4057000D8C87A /* BrickCollectionViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickCollectionViewDataSource.swift; sourceTree = "<group>"; };
93D9EBDC1DA4057000D8C87A /* BrickDimension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickDimension.swift; sourceTree = "<group>"; };
93D9EBDD1DA4057000D8C87A /* BrickModels.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickModels.swift; sourceTree = "<group>"; };
93D9EBDD1DA4057000D8C87A /* Brick.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Brick.swift; sourceTree = "<group>"; };
93D9EBDE1DA4057000D8C87A /* BrickProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickProtocols.swift; sourceTree = "<group>"; };
93D9EBDF1DA4057000D8C87A /* BrickSectionDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickSectionDataSource.swift; sourceTree = "<group>"; };
93D9EBE11DA4057000D8C87A /* BrickExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrickExtensions.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -722,7 +728,8 @@
children = (
93D9EBDB1DA4057000D8C87A /* BrickCollectionViewDataSource.swift */,
93D9EBDC1DA4057000D8C87A /* BrickDimension.swift */,
93D9EBDD1DA4057000D8C87A /* BrickModels.swift */,
93D9EBDD1DA4057000D8C87A /* Brick.swift */,
931A52EF1F0D578C00AB0BDF /* BrickSection.swift */,
93D9EBDE1DA4057000D8C87A /* BrickProtocols.swift */,
93D9EBDF1DA4057000D8C87A /* BrickSectionDataSource.swift */,
9350F0D51DA82A430051235F /* CollectionInfo.swift */,
Expand Down Expand Up @@ -850,6 +857,7 @@
93D9EC461DA4057900D8C87A /* BrickModelsTests.swift */,
93D9EC471DA4057900D8C87A /* BrickSectionDataSourceTests.swift */,
932365711DF4FE1F00BE5183 /* BrickAlignmentTests.swift */,
9317A9E01F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift */,
);
path = Models;
sourceTree = "<group>";
Expand Down Expand Up @@ -1121,7 +1129,7 @@
4E9A25211DABEB6000D7EA99 /* MinimumStickyLayoutBehavior.swift in Sources */,
4E9A25301DABEB8800D7EA99 /* BrickFlowLayout.swift in Sources */,
4E9A25291DABEB6500D7EA99 /* ButtonBrick.swift in Sources */,
4E9A25371DABEB8D00D7EA99 /* BrickModels.swift in Sources */,
4E9A25371DABEB8D00D7EA99 /* Brick.swift in Sources */,
4E9A25321DABEB8800D7EA99 /* BrickLayoutInvalidationContext.swift in Sources */,
4E9A251E1DABEB6000D7EA99 /* CoverFlowLayoutBehavior.swift in Sources */,
9333538B1E368903003CEC85 /* GenericBrick.swift in Sources */,
Expand All @@ -1137,6 +1145,7 @@
4E9A25261DABEB6000D7EA99 /* SpotlightLayoutBehavior.swift in Sources */,
4E9A253D1DABEB9300D7EA99 /* FatalError.swift in Sources */,
4E9A25271DABEB6000D7EA99 /* StickyFooterLayoutBehavior.swift in Sources */,
931A52F11F0D579000AB0BDF /* BrickSection.swift in Sources */,
4E9A253F1DABEB9800D7EA99 /* BrickCollectionView.swift in Sources */,
4E9A25221DABEB6000D7EA99 /* OffsetLayoutBehavior.swift in Sources */,
);
Expand All @@ -1161,6 +1170,7 @@
4E9A25661DABECFF00D7EA99 /* FatalErrorTests.swift in Sources */,
4E9A25471DABECDF00D7EA99 /* MinimumStickyLayoutBehaviorTests.swift in Sources */,
4E9A25E01DAC2AF400D7EA99 /* AsynchronousResizableBrick.swift in Sources */,
9317A9E21F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift in Sources */,
4E9A25561DABECF500D7EA99 /* BrickFlowLayoutEdgeInsetsTests.swift in Sources */,
93E435EE1DB6CB51007C159B /* CoverFlowLayoutBehaviorTests.swift in Sources */,
4E9A25E41DAC2AF400D7EA99 /* ImageDownloaderBrick.swift in Sources */,
Expand Down Expand Up @@ -1210,7 +1220,7 @@
buildActionMask = 2147483647;
files = (
93D9EBF31DA4057000D8C87A /* SpotlightLayoutBehavior.swift in Sources */,
93D9EC0F1DA4057000D8C87A /* BrickModels.swift in Sources */,
93D9EC0F1DA4057000D8C87A /* Brick.swift in Sources */,
93D9EC111DA4057000D8C87A /* BrickSectionDataSource.swift in Sources */,
93739BB51DA454AB00DD4B81 /* CollectionBrick.swift in Sources */,
9350F0D61DA82A430051235F /* CollectionInfo.swift in Sources */,
Expand Down Expand Up @@ -1246,6 +1256,7 @@
93D9EBED1DA4057000D8C87A /* MaxZIndexLayoutBehavior.swift in Sources */,
93D9EC141DA4057000D8C87A /* FatalError.swift in Sources */,
93D9EBEE1DA4057000D8C87A /* MinimumStickyLayoutBehavior.swift in Sources */,
931A52F01F0D578C00AB0BDF /* BrickSection.swift in Sources */,
93D9EC161DA4057000D8C87A /* BrickCollectionView.swift in Sources */,
93739BB81DA454AB00DD4B81 /* ButtonBrick.swift in Sources */,
);
Expand All @@ -1266,6 +1277,7 @@
93D9EC5A1DA4057900D8C87A /* OffsetLayoutBehaviorTests.swift in Sources */,
93D9EC7C1DA4057900D8C87A /* BrickModelsTests.swift in Sources */,
93D9EC551DA4057900D8C87A /* CardLayoutBehaviorTests.swift in Sources */,
9317A9E11F0EE02E00AF2007 /* BrickSectionOrderDataSourceTests.swift in Sources */,
9303A6D51DA6E00100502803 /* ButtonBrickTests.swift in Sources */,
93D9EC821DA4057900D8C87A /* DataSources.swift in Sources */,
93D9EC7D1DA4057900D8C87A /* BrickSectionDataSourceTests.swift in Sources */,
Expand Down
6 changes: 6 additions & 0 deletions Example/BrickKit-Example.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@
93186B041DDE89610095C849 /* HugeRepeatBrickViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93186B021DDE89610095C849 /* HugeRepeatBrickViewController.swift */; };
93186B081DDE8A580095C849 /* HugeRepeatCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93186B071DDE8A580095C849 /* HugeRepeatCollectionViewController.swift */; };
93186B091DDE8A580095C849 /* HugeRepeatCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93186B071DDE8A580095C849 /* HugeRepeatCollectionViewController.swift */; };
931A52F31F0D5B9300AB0BDF /* ReorderableBrickViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931A52F21F0D5B9300AB0BDF /* ReorderableBrickViewController.swift */; };
931A52F41F0D5B9300AB0BDF /* ReorderableBrickViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931A52F21F0D5B9300AB0BDF /* ReorderableBrickViewController.swift */; };
932365671DF449A500BE5183 /* FillBrickViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932365661DF449A500BE5183 /* FillBrickViewController.swift */; };
9327D03E1DB94A9500D65BCB /* NibLessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9327D03D1DB94A9500D65BCB /* NibLessViewController.swift */; };
9327D03F1DB94A9500D65BCB /* NibLessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9327D03D1DB94A9500D65BCB /* NibLessViewController.swift */; };
Expand Down Expand Up @@ -349,6 +351,7 @@
4E8E10F31DB569E100B5BD90 /* EmbeddedSpotlightSnapScrollingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmbeddedSpotlightSnapScrollingViewController.swift; sourceTree = "<group>"; };
93186B021DDE89610095C849 /* HugeRepeatBrickViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HugeRepeatBrickViewController.swift; sourceTree = "<group>"; };
93186B071DDE8A580095C849 /* HugeRepeatCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HugeRepeatCollectionViewController.swift; sourceTree = "<group>"; };
931A52F21F0D5B9300AB0BDF /* ReorderableBrickViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReorderableBrickViewController.swift; sourceTree = "<group>"; };
932365661DF449A500BE5183 /* FillBrickViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FillBrickViewController.swift; sourceTree = "<group>"; };
9327D03D1DB94A9500D65BCB /* NibLessViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NibLessViewController.swift; sourceTree = "<group>"; };
9327D0421DB94AB300D65BCB /* NiblessBrick.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NiblessBrick.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -616,6 +619,7 @@
93186B021DDE89610095C849 /* HugeRepeatBrickViewController.swift */,
93186B071DDE8A580095C849 /* HugeRepeatCollectionViewController.swift */,
938996A41DF77A3200E0F4F1 /* AlignmentBrickViewController.swift */,
931A52F21F0D5B9300AB0BDF /* ReorderableBrickViewController.swift */,
);
path = Simple;
sourceTree = "<group>";
Expand Down Expand Up @@ -997,6 +1001,7 @@
4E3BD8241DB1316400541900 /* HideBrickViewController.swift in Sources */,
93EAFE2F1DB57D680036331C /* NavigationTransition.swift in Sources */,
4E3BD7D81DB1316400541900 /* PostBrick.swift in Sources */,
931A52F31F0D5B9300AB0BDF /* ReorderableBrickViewController.swift in Sources */,
4E3BD8281DB1316400541900 /* InsertBrickViewController.swift in Sources */,
4E3BD8361DB1316400541900 /* SizeClassesBrickViewController.swift in Sources */,
4E3BD8321DB1316400541900 /* PopoverBrickViewController.swift in Sources */,
Expand Down Expand Up @@ -1025,6 +1030,7 @@
4E3BD8011DB1316400541900 /* BaseRepeatBrickViewController.swift in Sources */,
4E3BD85D1DB1316400541900 /* StickingFooterBaseViewController.swift in Sources */,
4E3BD84F1DB1316400541900 /* SimpleRepeatFixedWidthViewController.swift in Sources */,
931A52F41F0D5B9300AB0BDF /* ReorderableBrickViewController.swift in Sources */,
938996A61DF77A3200E0F4F1 /* AlignmentBrickViewController.swift in Sources */,
4E3BD7EF1DB1316400541900 /* WhoToFollowBrick.swift in Sources */,
4E3BD7C71DB1316400541900 /* DailySalesBrick.swift in Sources */,
Expand Down
13 changes: 11 additions & 2 deletions Example/Source/Examples/BaseBrickController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,24 @@ class BaseBrickController: BrickViewController {
}
}

extension UILabel {

func configure(textColor: UIColor?) {
self.textAlignment = .center
self.textColor = textColor
self.numberOfLines = 0
}

}

extension LabelBrickCell {

static func configure(cell: LabelBrickCell) {
cell.configure()
}

func configure() {
label.textAlignment = .center
label.textColor = brick.backgroundColor.complemetaryColor
label.configure(textColor: brick.backgroundColor.complemetaryColor)
}
}

Expand Down
Loading

0 comments on commit 9924c6f

Please sign in to comment.