Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
390724e
Added 'highlights' icon to TabViewIcon
zainbilalh Oct 1, 2025
896f784
merge main into implement-highlight-ui(#38)
zainbilalh Oct 2, 2025
90042fa
Fixed alignment issue with navbar
zainbilalh Oct 3, 2025
c70fcd5
added util to add corner radius on specified corners
zainbilalh Oct 3, 2025
160aebc
Made video highlight tile
zainbilalh Oct 3, 2025
64b3a73
Made tile more representative of Figma design
zainbilalh Oct 3, 2025
ea377f8
Added highlight view
zainbilalh Oct 4, 2025
32267c0
Added search bar (non-functional)
zainbilalh Oct 8, 2025
b55f2ae
separated videos and articles into separate views
zainbilalh Oct 8, 2025
f5ea686
Added number of results
zainbilalh Oct 8, 2025
6501581
Made tiles link to articles\videos
zainbilalh Oct 8, 2025
c10ddba
fixed bug with project file
zainbilalh Oct 9, 2025
5bb526c
keep branch's xcodeproj after merge
zainbilalh Oct 9, 2025
2244938
Merge main into branch, resolve Xcode conflicts
zainbilalh Oct 9, 2025
e70e754
merge updates from main
zainbilalh Oct 9, 2025
5b05640
added detailed highligh views
zainbilalh Oct 9, 2025
0892aa8
added Dates utils for filtering based on date
zainbilalh Oct 10, 2025
c513f8e
added filtering to highlights and refactored code
zainbilalh Oct 10, 2025
a59d712
refactored filtering logic
zainbilalh Oct 10, 2025
dd45b76
added dummy data for testing
zainbilalh Oct 11, 2025
db11e67
refactored models into their respective files
zainbilalh Oct 14, 2025
afe7a8d
added search functionality
zainbilalh Oct 15, 2025
2ee1257
capitalize T in YouTube
zainbilalh Oct 17, 2025
c008a0a
style changes (newlines)
zainbilalh Oct 17, 2025
4fe2b34
Refactor tab system to use MainTab enum instead of arrays
zainbilalh Oct 19, 2025
dbb0a5c
Added comment to clarify different paddings
zainbilalh Oct 19, 2025
07348ed
style changes
zainbilalh Oct 19, 2025
4bed8ad
added 2x and 3x versions of icons
zainbilalh Oct 22, 2025
ec32e14
style changes
zainbilalh Oct 22, 2025
20732c4
Changed fonts and paddings to be consistent with other pages in the app
zainbilalh Oct 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 51 additions & 3 deletions score-ios.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,25 @@
/* Begin PBXBuildFile section */
1C87865D2D8CD76900EBDF74 /* TrailingFadeGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C87865C2D8CD76900EBDF74 /* TrailingFadeGradient.swift */; };
1C87865F2D8CDADC00EBDF74 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C87865E2D8CDADC00EBDF74 /* String+Extension.swift */; };
2384C7B81B22428D94240957 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840304A20FA141C291346BA8 /* Highlight.swift */; };
2C1375BD2E722CB70089EBC7 /* GameAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375BC2E722CB70089EBC7 /* GameAPI */; };
2C1375BF2E7230250089EBC7 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375BE2E7230250089EBC7 /* FirebaseAnalytics */; };
2C1375C12E7230250089EBC7 /* FirebaseCore in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375C02E7230250089EBC7 /* FirebaseCore */; };
2C1375C32E7230250089EBC7 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375C22E7230250089EBC7 /* FirebaseCrashlytics */; };
2C1375C52E7230630089EBC7 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375C42E7230630089EBC7 /* FirebaseAnalytics */; };
2C1375C72E7230630089EBC7 /* FirebaseCore in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1375C62E7230630089EBC7 /* FirebaseCore */; };
2C1375CB2E7233390089EBC7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C1375CA2E7233390089EBC7 /* GoogleService-Info.plist */; };
64005CCECEAC4FD4BA8F51D2 /* YouTubeVideo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F3E7BD70D304BE7A01DB499 /* YouTubeVideo.swift */; };
76101F6A2E981E3E006D6EDD /* DetailedHighlightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76101F692E981E37006D6EDD /* DetailedHighlightView.swift */; };
7626AD682E973D9B002149CD /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD672E973D9B002149CD /* SearchView.swift */; };
7626AD692E973D9B002149CD /* HighlightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD642E973D9B002149CD /* HighlightView.swift */; };
7626AD6A2E973D9B002149CD /* HighlightTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD632E973D9B002149CD /* HighlightTile.swift */; };
7626AD6B2E973D9B002149CD /* HighlightTileArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD652E973D9B002149CD /* HighlightTileArticle.swift */; };
7626AD6C2E973D9B002149CD /* HighlightTileVideo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD662E973D9B002149CD /* HighlightTileVideo.swift */; };
7626AD6F2E973E08002149CD /* View+CornerRadius.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7626AD6E2E973E08002149CD /* View+CornerRadius.swift */; };
76D998E92E9F1AF900713EE5 /* SearchViewFullScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D998E82E9F1AF300713EE5 /* SearchViewFullScreen.swift */; };
76E679212E9FF6A100C39132 /* NoHighlightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76E679202E9FF69C00C39132 /* NoHighlightView.swift */; };
B136701ECD164EE9AC64667F /* Article.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB4DBAE237D47AB882D4EBC /* Article.swift */; };
CE335CD32C922E8D0037F572 /* PrimaryColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE335CD22C922E8D0037F572 /* PrimaryColors.swift */; };
CE335CD52C922ECB0037F572 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE335CD42C922ECB0037F572 /* Constants.swift */; };
CE335CD72C922F390037F572 /* Dates.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE335CD62C922F390037F572 /* Dates.swift */; };
Expand Down Expand Up @@ -116,6 +128,18 @@
1C87865C2D8CD76900EBDF74 /* TrailingFadeGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrailingFadeGradient.swift; sourceTree = "<group>"; };
1C87865E2D8CDADC00EBDF74 /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
2C1375CA2E7233390089EBC7 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
6CB4DBAE237D47AB882D4EBC /* Article.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Article.swift; sourceTree = "<group>"; };
6F3E7BD70D304BE7A01DB499 /* YouTubeVideo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YouTubeVideo.swift; sourceTree = "<group>"; };
76101F692E981E37006D6EDD /* DetailedHighlightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailedHighlightView.swift; sourceTree = "<group>"; };
7626AD632E973D9B002149CD /* HighlightTile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightTile.swift; sourceTree = "<group>"; };
7626AD642E973D9B002149CD /* HighlightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightView.swift; sourceTree = "<group>"; };
7626AD652E973D9B002149CD /* HighlightTileArticle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightTileArticle.swift; sourceTree = "<group>"; };
7626AD662E973D9B002149CD /* HighlightTileVideo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightTileVideo.swift; sourceTree = "<group>"; };
7626AD672E973D9B002149CD /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
7626AD6E2E973E08002149CD /* View+CornerRadius.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+CornerRadius.swift"; sourceTree = "<group>"; };
76D998E82E9F1AF300713EE5 /* SearchViewFullScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchViewFullScreen.swift; sourceTree = "<group>"; };
76E679202E9FF69C00C39132 /* NoHighlightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoHighlightView.swift; sourceTree = "<group>"; };
840304A20FA141C291346BA8 /* Highlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Highlight.swift; sourceTree = "<group>"; };
CE335CD22C922E8D0037F572 /* PrimaryColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimaryColors.swift; sourceTree = "<group>"; };
CE335CD42C922ECB0037F572 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
CE335CD62C922F390037F572 /* Dates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dates.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -252,6 +276,9 @@
CE8ED4FD2D6BF49E00A274DE /* GameUpdate.swift */,
CE8ED4FF2D6BF4BE00A274DE /* BoxScoreUpdate.swift */,
CE8ED5012D6BF4E800A274DE /* TimeUpdate.swift */,
6CB4DBAE237D47AB882D4EBC /* Article.swift */,
6F3E7BD70D304BE7A01DB499 /* YouTubeVideo.swift */,
840304A20FA141C291346BA8 /* Highlight.swift */,
);
path = Models;
sourceTree = "<group>";
Expand All @@ -271,6 +298,7 @@
1C87865B2D8CD73C00EBDF74 /* ViewModifiers */,
CE335CD22C922E8D0037F572 /* PrimaryColors.swift */,
CE335CD42C922ECB0037F572 /* Constants.swift */,
7626AD6E2E973E08002149CD /* View+CornerRadius.swift */,
CE335CD62C922F390037F572 /* Dates.swift */,
CE528FA32C9653C200C238B5 /* Error.swift */,
CE3C9C422D011A23008BFB4C /* OrdinalSuffix.swift */,
Expand Down Expand Up @@ -402,6 +430,7 @@
CE725D3D2C89120200386943 /* ScoreApp.swift */,
D86347DE2CE98B3C003DD8F6 /* MainTabView.swift */,
D86347E02CE98D37003DD8F6 /* TabViewIcon.swift */,
76D998E82E9F1AF300713EE5 /* SearchViewFullScreen.swift */,
CE725D3B2C89120200386943 /* Home.swift */,
);
path = MainViews;
Expand All @@ -412,11 +441,13 @@
children = (
D858020F2D6C38670075B036 /* DynamicScoreBox.swift */,
D83EE8852CC9917C008B693C /* ScoreSummaryTile.swift */,
76101F692E981E37006D6EDD /* DetailedHighlightView.swift */,
D89461182CBF393B0010C532 /* UpcomingCard.swift */,
CE7666862D5D108E00659A3B /* ScoringUpdateCell.swift */,
D86347AE2CDBD2F3003DD8F6 /* PastGameCard.swift */,
CE528FF62C979DA000C238B5 /* GameView.swift */,
D836AD912CB62C8800BD1545 /* NoGameView.swift */,
76E679202E9FF69C00C39132 /* NoHighlightView.swift */,
D87882272CC060FC00421F67 /* GameDetailedScoreView.swift */,
CE3C9C402D010177008BFB4C /* ScoringSummary.swift */,
);
Expand All @@ -428,6 +459,11 @@
children = (
CE528FA12C9651C800C238B5 /* UpcomingGameTile.swift */,
D86347B02CDBFF7C003DD8F6 /* UpcomingGamesView.swift */,
7626AD632E973D9B002149CD /* HighlightTile.swift */,
7626AD642E973D9B002149CD /* HighlightView.swift */,
7626AD652E973D9B002149CD /* HighlightTileArticle.swift */,
7626AD662E973D9B002149CD /* HighlightTileVideo.swift */,
7626AD672E973D9B002149CD /* SearchView.swift */,
D8B1C9D22CD2D20A0095E563 /* PastGameTile.swift */,
D8B1C9D02CD2CE3C0095E563 /* PastGamesView.swift */,
CE528F9F2C96420700C238B5 /* PickerView.swift */,
Expand Down Expand Up @@ -594,8 +630,8 @@
mainGroup = CE725D2F2C89120100386943;
packageReferences = (
D89102012CED68D9004CE226 /* XCRemoteSwiftPackageReference "apollo-ios" */,
FD602E2D2DC11D4A002711BE /* XCLocalSwiftPackageReference "GameAPI" */,
D0A904F32E8DDD990008194B /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
76101F682E9743EC006D6EDD /* XCLocalSwiftPackageReference "gameAPI" */,
);
productRefGroup = CE725D392C89120200386943 /* Products */;
projectDirPath = "";
Expand Down Expand Up @@ -688,14 +724,25 @@
D89102132CF10CA9004CE226 /* NetworkManager.swift in Sources */,
CE725D3E2C89120200386943 /* ScoreApp.swift in Sources */,
D836AD922CB62C8800BD1545 /* NoGameView.swift in Sources */,
7626AD682E973D9B002149CD /* SearchView.swift in Sources */,
7626AD692E973D9B002149CD /* HighlightView.swift in Sources */,
76101F6A2E981E3E006D6EDD /* DetailedHighlightView.swift in Sources */,
7626AD6A2E973D9B002149CD /* HighlightTile.swift in Sources */,
7626AD6B2E973D9B002149CD /* HighlightTileArticle.swift in Sources */,
7626AD6C2E973D9B002149CD /* HighlightTileVideo.swift in Sources */,
CE528FF52C9798AC00C238B5 /* FilterTile.swift in Sources */,
CE7666872D5D108E00659A3B /* ScoringUpdateCell.swift in Sources */,
76D998E92E9F1AF900713EE5 /* SearchViewFullScreen.swift in Sources */,
D85802102D6C38700075B036 /* DynamicScoreBox.swift in Sources */,
D8B1C9D32CD2D20A0095E563 /* PastGameTile.swift in Sources */,
7626AD6F2E973E08002149CD /* View+CornerRadius.swift in Sources */,
CE528FA22C9651C800C238B5 /* UpcomingGameTile.swift in Sources */,
FD5A38DD2D8F30CC00CF5E30 /* GameErrorView.swift in Sources */,
CEA25A932D75279A00B9837A /* ScoreEnvironment.swift in Sources */,
FD5A38DB2D8F2BDD00CF5E30 /* GameLoadingView.swift in Sources */,
B136701ECD164EE9AC64667F /* Article.swift in Sources */,
64005CCECEAC4FD4BA8F51D2 /* YouTubeVideo.swift in Sources */,
2384C7B81B22428D94240957 /* Highlight.swift in Sources */,
CE8ED4FC2D6BF47C00A274DE /* DummyData.swift in Sources */,
CE335CD92C9244230037F572 /* Game.swift in Sources */,
D89102102CF0EBA4004CE226 /* DataCoordinator.swift in Sources */,
Expand All @@ -718,6 +765,7 @@
FD27F4232DC0A68900CC172E /* GamesCacheManager.swift in Sources */,
CE725D3C2C89120200386943 /* Home.swift in Sources */,
FD5A38DF2D8F3E1400CF5E30 /* ShimmerModifier.swift in Sources */,
76E679212E9FF6A100C39132 /* NoHighlightView.swift in Sources */,
CE528FA02C96420700C238B5 /* PickerView.swift in Sources */,
CE528FA42C9653C200C238B5 /* Error.swift in Sources */,
CE335CD52C922ECB0037F572 /* Constants.swift in Sources */,
Expand Down Expand Up @@ -1067,9 +1115,9 @@
/* End XCConfigurationList section */

/* Begin XCLocalSwiftPackageReference section */
FD602E2D2DC11D4A002711BE /* XCLocalSwiftPackageReference "GameAPI" */ = {
76101F682E9743EC006D6EDD /* XCLocalSwiftPackageReference "gameAPI" */ = {
isa = XCLocalSwiftPackageReference;
relativePath = GameAPI;
relativePath = gameAPI;
};
/* End XCLocalSwiftPackageReference section */

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 69 additions & 0 deletions score-ios/Models/Article.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//
// Article.swift
// score-ios
//
// Created by Zain Bilal on 10/8/25.
//

import Foundation

struct Article: Identifiable {
var id: String
var title: String
var summary: String
var image: String
var url: String
var source: String
var publishedAt: String

var formattedDate: String {
if let date = ISO8601DateFormatter().date(from: publishedAt) {
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd"
return formatter.string(from: date)
}
return publishedAt
}
}

// MARK: - Dummy Data
extension Article {
static let dummyData: [Article] = [
Article(
id: "1",
title: "Cornell Upsets Rival in Thrilling Overtime Victory",
summary: "Cornell's offense exploded late in the fourth quarter to secure a dramatic win.",
image: "https://snworksceo.imgix.net/cds/2f1df221-010c-4a5b-94cc-ec7a100b7aa1.sized-1000x1000.jpg?w=1000&dpr=2",
url: "https://cornellbigred.com/news/2025/10/08/article",
source: "Cornell Daily Sun",
publishedAt: "2025-10-08T00:00:00Z"
),
Article(
id: "2",
title: "Cornell Daily Sun Reports Historic Win",
summary: "Cornell's offense shines in a big win.",
image: "https://snworksceo.imgix.net/cds/2f1df221-010c-4a5b-94cc-ec7a100b7aa1.sized-1000x1000.jpg?w=1000&dpr=2",
url: "https://cornellsun.com/article",
source: "Cornell Daily Sun",
publishedAt: "2025-10-09T00:00:00Z"
),
Article(
id: "3",
title: "Big Red Basketball Team Advances to Championship",
summary: "Cornell basketball team secures spot in the championship game with dominant performance.",
image: "https://snworksceo.imgix.net/cds/2f1df221-010c-4a5b-94cc-ec7a100b7aa1.sized-1000x1000.jpg?w=1000&dpr=2",
url: "https://cornellsun.com/basketball-championship",
source: "Cornell Daily Sun",
publishedAt: "2025-10-10T00:00:00Z"
),
Article(
id: "4",
title: "Hockey Team Prepares for Rivalry Game",
summary: "Cornell hockey team gears up for the highly anticipated rivalry matchup.",
image: "https://snworksceo.imgix.net/cds/2f1df221-010c-4a5b-94cc-ec7a100b7aa1.sized-1000x1000.jpg?w=1000&dpr=2",
url: "https://cornellsun.com/hockey-rivalry",
source: "Cornell Daily Sun",
publishedAt: "2025-10-11T00:00:00Z"
)
]
}
Loading