mirror of
https://github.com/NinjaCheetah/RIT-Dining.git
synced 2026-03-05 05:25:29 -05:00
Fixed multi opening period locations in widgets
Widgets for locations with multiple opening periods will still only display the first time span, but the bar will now show multiple filled in sections and the opening status label will correctly represent both periods.
This commit is contained in:
69
Shared/Components/SharedUtils.swift
Normal file
69
Shared/Components/SharedUtils.swift
Normal file
@@ -0,0 +1,69 @@
|
||||
//
|
||||
// SharedUtils.swift
|
||||
// TigerDine
|
||||
//
|
||||
// Created by Campbell on 9/8/25.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SafariServices
|
||||
import SwiftUI
|
||||
|
||||
// Gross disgusting UIKit code :(
|
||||
// There isn't a direct way to use integrated Safari from SwiftUI, except maybe in iOS 26? I'm not targeting that though so I must fall
|
||||
// back on UIKit stuff.
|
||||
struct SafariView: UIViewControllerRepresentable {
|
||||
let url: URL
|
||||
|
||||
func makeUIViewController(context: Context) -> SFSafariViewController {
|
||||
SFSafariViewController(url: url)
|
||||
}
|
||||
|
||||
func updateUIViewController(_ uiViewController: SFSafariViewController, context: Context) {}
|
||||
}
|
||||
|
||||
func getTCAPIFriendlyDateString(date: Date) -> String {
|
||||
let formatter = DateFormatter()
|
||||
formatter.calendar = Calendar(identifier: .iso8601)
|
||||
formatter.locale = Locale(identifier: "en_US_POSIX")
|
||||
formatter.timeZone = TimeZone.current
|
||||
formatter.dateFormat = "yyyy-MM-dd"
|
||||
return formatter.string(from: date)
|
||||
}
|
||||
|
||||
func getFDMPAPIFriendlyDateString(date: Date) -> String {
|
||||
let formatter = DateFormatter()
|
||||
formatter.calendar = Calendar(identifier: .iso8601)
|
||||
formatter.locale = Locale(identifier: "en_US_POSIX")
|
||||
formatter.timeZone = TimeZone.current
|
||||
formatter.dateFormat = "yyyy/MM/dd"
|
||||
return formatter.string(from: date)
|
||||
}
|
||||
|
||||
// The common date formatter that I'm using everywhere that open periods are shown within the app.
|
||||
let dateDisplay: DateFormatter = {
|
||||
let display = DateFormatter()
|
||||
display.timeZone = TimeZone(identifier: "America/New_York")
|
||||
display.dateStyle = .none
|
||||
display.timeStyle = .short
|
||||
return display
|
||||
}()
|
||||
|
||||
let visitingChefDateDisplay: DateFormatter = {
|
||||
let display = DateFormatter()
|
||||
display.dateFormat = "EEEE, MMM d"
|
||||
display.locale = Locale(identifier: "en_US_POSIX")
|
||||
return display
|
||||
}()
|
||||
|
||||
let weekdayFromDate: DateFormatter = {
|
||||
let weekdayFormatter = DateFormatter()
|
||||
weekdayFormatter.dateFormat = "EEEE"
|
||||
return weekdayFormatter
|
||||
}()
|
||||
|
||||
// Custom view extension that just applies modifiers in a block to the object it's applied to. Mostly useful for splitting up conditional
|
||||
// modifiers that should only be applied for certain OS versions. (A returning feature from RNGTool!)
|
||||
extension View {
|
||||
func apply<V: View>(@ViewBuilder _ block: (Self) -> V) -> V { block(self) }
|
||||
}
|
||||
Reference in New Issue
Block a user