Reactions: Add more button (#1314)

* Add expand/collapse UI for reactions

- Adds a CollapsibleFlowLayout for controlling the layout
- Adds tests for  this layout and some mocks for testing layouts generally
- Improves the rendering of the reaction buttons which were not pixel perfect
- Adds the UI for the expand collapse buttons including the count of hidden items in the collapsed state.

* Add comment for reactionsCollapsed binding.

* Add the add more button and change the layout to be reactions specific and account for the add more button specifics.

* Update CollapsibleReactionLayout.swift

* Rename lines to rows, to hopefully ease the incoming merge.

* Add LayoutValueKey to organise subviews by item type.

- create ReactionLayoutItemType to tag subviews with ReactionLayoutItem
- Add LayoutValueKey support to the layout mocks
- Fix some mistakes in the merge
- Make the test code a bit more DRY
- Make the animation of the addMore and collapse buttons consistent

* Fix naming of the add more button label

* Address comments and fix padding

- Fix typos
- Use pdf/svg for icon
- Fix incorrect padding from a bad merge

* Fix "Add more" button padding to match designs

* Update snapshot test reference images.

* Fix naming, add Preserves Vector Data
This commit is contained in:
David Langley
2023-07-14 17:32:32 +01:00
committed by GitHub
parent a44a60cb0a
commit b31af77686
20 changed files with 415 additions and 141 deletions
@@ -60,9 +60,16 @@ struct LayoutSubviewsMock: Equatable, RandomAccessCollection {
/// A mock of the SwiftUI `LayoutSubview` struct
struct LayoutSubviewMock: FlowLayoutSubview, Equatable {
var size: CGSize
var layoutValues = [String: Any]()
var placedPositionCallback: (CGRect) -> Void
subscript<K>(key: K.Type) -> K.Value where K: LayoutValueKey {
guard let value = layoutValues[String(describing: key.self)] as? K.Value else {
fatalError("There is no value for the provided layout key.")
}
return value
}
func sizeThatFits(_ proposal: ProposedViewSize) -> CGSize {
size
}