Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit d66b0b9

Browse files
viktoraslBasThomas
authored andcommitted
Support rocket & eyes emojis (#2616)
* Support rocket & eyes emojis * Fix PR comments * set default emoji if not recognized * correct emojis grid (from Web UI) * Assert that reactions in row >0
1 parent 2e1b55e commit d66b0b9

7 files changed

+106
-16
lines changed

Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ extension ReactionContent {
1515
case .heart: return "❤️"
1616
case .hooray: return "🎉"
1717
case .laugh: return "😄"
18-
case .thumbsUp, .__unknown: return "👍"
18+
case .thumbsUp: return "👍"
1919
case .thumbsDown: return "👎"
20+
case .rocket: return "🚀"
21+
case .eyes: return "👀"
22+
case .__unknown: return ""
2023
}
2124
}
2225

@@ -37,6 +40,8 @@ extension String {
3740
case "😄": return .laugh
3841
case "👍": return .thumbsUp
3942
case "👎": return .thumbsDown
43+
case "🚀": return .rocket
44+
case "👀": return .eyes
4045
default: return nil
4146
}
4247
}

Classes/Issues/Comments/Reactions/ReactionsMenuViewController.swift

+28-13
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,25 @@ final class ReactionsMenuViewController: UICollectionViewController,
3838

3939
private let reuseIdentifier = "cell"
4040
private let size: CGFloat = 50
41-
private let reactions: [ReactionContent] = [
42-
.thumbsUp,
43-
.hooray,
44-
.thumbsDown,
45-
.heart,
46-
.laugh,
47-
.confused
41+
42+
private let sectionedReactions: [[ReactionContent]] = [
43+
[
44+
.thumbsUp,
45+
.thumbsDown,
46+
.laugh,
47+
.hooray
48+
],
49+
[
50+
.confused,
51+
.heart,
52+
.rocket,
53+
.eyes
54+
]
4855
]
4956

5057
var selectedReaction: ReactionContent? {
51-
guard let item = collectionView?.indexPathsForSelectedItems?.first?.item else { return nil }
52-
return reactions[item]
58+
guard let item = collectionView?.indexPathsForSelectedItems?.first else { return nil }
59+
return sectionedReactions[item.section][item.item]
5360
}
5461

5562
init() {
@@ -69,22 +76,30 @@ final class ReactionsMenuViewController: UICollectionViewController,
6976
collectionView?.register(EmojiCell.self, forCellWithReuseIdentifier: reuseIdentifier)
7077
collectionView?.reloadData()
7178
collectionView?.layoutIfNeeded()
79+
guard let reactionsInRow = sectionedReactions.first?.count else {
80+
assertionFailure("Reactions in grid row must be >0")
81+
return
82+
}
7283
preferredContentSize = CGSize(
73-
width: size * CGFloat(reactions.count),
74-
height: size
84+
width: size * CGFloat(reactionsInRow),
85+
height: size * CGFloat(sectionedReactions.count)
7586
)
7687
}
7788

7889
// MARK: UICollectionViewDataSource
7990

91+
override func numberOfSections(in collectionView: UICollectionView) -> Int {
92+
return sectionedReactions.count
93+
}
94+
8095
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
81-
return reactions.count
96+
return sectionedReactions[section].count
8297
}
8398

8499
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
85100
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
86101
if let cell = cell as? EmojiCell {
87-
cell.label.text = reactions[indexPath.item].emoji
102+
cell.label.text = sectionedReactions[indexPath.section][indexPath.item].emoji
88103
}
89104
return cell
90105
}

Classes/Issues/Comments/Reactions/UIMenuController+Reactions.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ extension UIMenuController {
1818
.thumbsDown,
1919
.heart,
2020
.laugh,
21-
.confused
21+
.confused,
22+
.rocket,
23+
.eyes
2224
]
2325

2426
menuItems = reactions.map {

Classes/Settings/DefaultReactionDetailController.swift

+11-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ class DefaultReactionDetailController: UITableViewController {
2020
@IBOutlet var hoorayCell: UITableViewCell!
2121
@IBOutlet var confusedCell: UITableViewCell!
2222
@IBOutlet var heartCell: UITableViewCell!
23+
@IBOutlet var rocketCell: UITableViewCell!
24+
@IBOutlet var eyesCell: UITableViewCell!
2325
@IBOutlet var enabledSwitch: UISwitch!
2426

27+
private var allEmojiCells: [UITableViewCell] {
28+
return [thumbsUpCell, thumbsDownCell, laughCell, hoorayCell, confusedCell, heartCell, rocketCell, eyesCell]
29+
}
30+
2531
weak var delegate: DefaultReactionDelegate?
2632

2733
override func viewDidLoad() {
@@ -45,6 +51,8 @@ class DefaultReactionDetailController: UITableViewController {
4551
case hoorayCell: updateDefault(reaction: .hooray)
4652
case confusedCell: updateDefault(reaction: .confused)
4753
case heartCell: updateDefault(reaction: .heart)
54+
case rocketCell: updateDefault(reaction: .rocket)
55+
case eyesCell: updateDefault(reaction: .eyes)
4856
default: break
4957
}
5058
}
@@ -69,6 +77,8 @@ class DefaultReactionDetailController: UITableViewController {
6977
case .hooray: cell = hoorayCell
7078
case .confused: cell = confusedCell
7179
case .heart: cell = heartCell
80+
case .rocket: cell = rocketCell
81+
case .eyes: cell = eyesCell
7282
}
7383
updateCells(cell: cell)
7484
}
@@ -77,7 +87,7 @@ class DefaultReactionDetailController: UITableViewController {
7787
rz_smoothlyDeselectRows(tableView: self.tableView)
7888

7989
// Reset all to none
80-
[thumbsUpCell, thumbsDownCell, laughCell, hoorayCell, confusedCell, heartCell].forEach { $0.accessoryType = .none }
90+
allEmojiCells.forEach { $0.accessoryType = .none }
8191

8292
// Set proper cell to check
8393
cell.accessoryType = .checkmark

Classes/Settings/Settings.storyboard

+36
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,40 @@
638638
</subviews>
639639
</tableViewCellContentView>
640640
</tableViewCell>
641+
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="9Ah-c8-z8e" style="IBUITableViewCellStyleDefault" id="tzi-sg-G24" customClass="StyledTableCell" customModule="Freetime" customModuleProvider="target">
642+
<rect key="frame" x="0.0" y="406.5" width="375" height="44"/>
643+
<autoresizingMask key="autoresizingMask"/>
644+
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="tzi-sg-G24" id="QXI-y4-j4s">
645+
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
646+
<autoresizingMask key="autoresizingMask"/>
647+
<subviews>
648+
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="🚀 Rocket" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9Ah-c8-z8e" customClass="SettingsLabel" customModule="Freetime" customModuleProvider="target">
649+
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
650+
<autoresizingMask key="autoresizingMask"/>
651+
<fontDescription key="fontDescription" type="system" pointSize="16"/>
652+
<color key="textColor" red="0.14117647059999999" green="0.16078431369999999" blue="0.18039215689999999" alpha="1" colorSpace="calibratedRGB"/>
653+
<nil key="highlightedColor"/>
654+
</label>
655+
</subviews>
656+
</tableViewCellContentView>
657+
</tableViewCell>
658+
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="bDW-Nk-KQZ" style="IBUITableViewCellStyleDefault" id="Ew9-wr-LdI" customClass="StyledTableCell" customModule="Freetime" customModuleProvider="target">
659+
<rect key="frame" x="0.0" y="450.5" width="375" height="44"/>
660+
<autoresizingMask key="autoresizingMask"/>
661+
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Ew9-wr-LdI" id="fWy-M3-O88">
662+
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
663+
<autoresizingMask key="autoresizingMask"/>
664+
<subviews>
665+
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="👀 Eyes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="bDW-Nk-KQZ" customClass="SettingsLabel" customModule="Freetime" customModuleProvider="target">
666+
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
667+
<autoresizingMask key="autoresizingMask"/>
668+
<fontDescription key="fontDescription" type="system" pointSize="16"/>
669+
<color key="textColor" red="0.14117647059999999" green="0.16078431369999999" blue="0.18039215689999999" alpha="1" colorSpace="calibratedRGB"/>
670+
<nil key="highlightedColor"/>
671+
</label>
672+
</subviews>
673+
</tableViewCellContentView>
674+
</tableViewCell>
641675
</cells>
642676
</tableViewSection>
643677
</sections>
@@ -650,9 +684,11 @@
650684
<connections>
651685
<outlet property="confusedCell" destination="X0F-M1-kZ7" id="bvF-iv-PVz"/>
652686
<outlet property="enabledSwitch" destination="Dj7-Q0-qBc" id="UlX-Jw-KJM"/>
687+
<outlet property="eyesCell" destination="Ew9-wr-LdI" id="gS1-el-uUr"/>
653688
<outlet property="heartCell" destination="lKi-qn-1Lw" id="c6c-gg-fqo"/>
654689
<outlet property="hoorayCell" destination="NBn-uY-24s" id="90x-RY-v8E"/>
655690
<outlet property="laughCell" destination="jkZ-Ag-Uss" id="ooc-D4-RUk"/>
691+
<outlet property="rocketCell" destination="tzi-sg-G24" id="jwi-cf-UW2"/>
656692
<outlet property="thumbsDownCell" destination="ISD-qw-50W" id="dcM-3X-5h9"/>
657693
<outlet property="thumbsUpCell" destination="qc4-aU-1zn" id="yoU-W7-RdX"/>
658694
</connections>

gql/API.swift

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public enum ReactionContent: RawRepresentable, Equatable, Apollo.JSONDecodable,
1717
case confused
1818
/// Represents the ❤️ emoji.
1919
case heart
20+
/// Represents the 🚀 emoji.
21+
case rocket
22+
/// Represents the 👀 emoji.
23+
case eyes
2024
/// Auto generated constant for unknown enum values
2125
case __unknown(RawValue)
2226

@@ -28,6 +32,8 @@ public enum ReactionContent: RawRepresentable, Equatable, Apollo.JSONDecodable,
2832
case "HOORAY": self = .hooray
2933
case "CONFUSED": self = .confused
3034
case "HEART": self = .heart
35+
case "ROCKET": self = .rocket
36+
case "EYES": self = .eyes
3137
default: self = .__unknown(rawValue)
3238
}
3339
}
@@ -40,6 +46,8 @@ public enum ReactionContent: RawRepresentable, Equatable, Apollo.JSONDecodable,
4046
case .hooray: return "HOORAY"
4147
case .confused: return "CONFUSED"
4248
case .heart: return "HEART"
49+
case .rocket: return "ROCKET"
50+
case .eyes: return "EYES"
4351
case .__unknown(let value): return value
4452
}
4553
}
@@ -52,6 +60,8 @@ public enum ReactionContent: RawRepresentable, Equatable, Apollo.JSONDecodable,
5260
case (.hooray, .hooray): return true
5361
case (.confused, .confused): return true
5462
case (.heart, .heart): return true
63+
case (.rocket, .rocket): return true
64+
case (.eyes, .eyes): return true
5565
case (.__unknown(let lhsValue), .__unknown(let rhsValue)): return lhsValue == rhsValue
5666
default: return false
5767
}

gql/schema.json

+12
Original file line numberDiff line numberDiff line change
@@ -17652,6 +17652,18 @@
1765217652
"description": "Represents the ❤️ emoji.",
1765317653
"isDeprecated": false,
1765417654
"deprecationReason": null
17655+
},
17656+
{
17657+
"name": "ROCKET",
17658+
"description": "Represents the 🚀 emoji.",
17659+
"isDeprecated": false,
17660+
"deprecationReason": null
17661+
},
17662+
{
17663+
"name": "EYES",
17664+
"description": "Represents the 👀 emoji.",
17665+
"isDeprecated": false,
17666+
"deprecationReason": null
1765517667
}
1765617668
],
1765717669
"possibleTypes": null

0 commit comments

Comments
 (0)