Skip to content

Commit 0a49191

Browse files
committed
Split out DateTimeZonePicker, put List in ScrollView
1 parent 2b9c4f0 commit 0a49191

6 files changed

Lines changed: 100 additions & 49 deletions

File tree

Elsewhen.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
5EE70E2226EC9AA600F3F164 /* TimeZoneFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE70E2126EC9AA500F3F164 /* TimeZoneFlags.swift */; };
1717
5EE70E2426ECBEED00F3F164 /* MykeMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE70E2326ECBEED00F3F164 /* MykeMode.swift */; };
1818
5EE70E2726ECCC0700F3F164 /* TimeCodeGeneratorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE70E2626ECCC0700F3F164 /* TimeCodeGeneratorView.swift */; };
19+
5EE70E2A26ED21AA00F3F164 /* DateTimeZonePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE70E2926ED21AA00F3F164 /* DateTimeZonePicker.swift */; };
1920
635C8FA726E66E8300361B08 /* DiscordFormattedDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 635C8FA626E66E8300361B08 /* DiscordFormattedDate.swift */; };
2021
6378397E26EA5FD60055A10D /* UIApplication+clearLaunchScreenCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6378397D26EA5FD60055A10D /* UIApplication+clearLaunchScreenCache.swift */; };
2122
6378398026EA61AB0055A10D /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6378397F26EA61AB0055A10D /* Launch Screen.storyboard */; };
@@ -79,6 +80,7 @@
7980
5EE70E2126EC9AA500F3F164 /* TimeZoneFlags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeZoneFlags.swift; sourceTree = "<group>"; };
8081
5EE70E2326ECBEED00F3F164 /* MykeMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MykeMode.swift; sourceTree = "<group>"; };
8182
5EE70E2626ECCC0700F3F164 /* TimeCodeGeneratorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeCodeGeneratorView.swift; sourceTree = "<group>"; };
83+
5EE70E2926ED21AA00F3F164 /* DateTimeZonePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTimeZonePicker.swift; sourceTree = "<group>"; };
8284
635C8FA626E66E8300361B08 /* DiscordFormattedDate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscordFormattedDate.swift; sourceTree = "<group>"; };
8385
6378397D26EA5FD60055A10D /* UIApplication+clearLaunchScreenCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+clearLaunchScreenCache.swift"; sourceTree = "<group>"; };
8486
6378397F26EA61AB0055A10D /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
@@ -207,6 +209,7 @@
207209
5EAB48DC26E624CD00B04A60 /* TimezoneChoiceView.swift */,
208210
6378398226EB80C30055A10D /* ResultSheet.swift */,
209211
6378398626EBA7C60055A10D /* DateTimeSelection.swift */,
212+
5EE70E2926ED21AA00F3F164 /* DateTimeZonePicker.swift */,
210213
);
211214
path = Elements;
212215
sourceTree = "<group>";
@@ -381,6 +384,7 @@
381384
isa = PBXSourcesBuildPhase;
382385
buildActionMask = 2147483647;
383386
files = (
387+
5EE70E2A26ED21AA00F3F164 /* DateTimeZonePicker.swift in Sources */,
384388
5EE70E2226EC9AA600F3F164 /* TimeZoneFlags.swift in Sources */,
385389
5EB23B9F26E406B600203153 /* ContentView.swift in Sources */,
386390
5EE70E2426ECBEED00F3F164 /* MykeMode.swift in Sources */,

Elsewhen/ContentView.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ struct ContentView: View {
1616

1717
@State private var selectedTab: Int = 1
1818

19+
@State private var selectedDate = Date()
20+
@State private var selectedTimeZone: String = TimeZone.current.identifier
21+
1922
var body: some View {
2023
TabView(selection: $selectedTab) {
21-
TimeCodeGeneratorView()
24+
TimeCodeGeneratorView(selectedDate: $selectedDate, selectedTimeZone: $selectedTimeZone)
2225
.tabItem { Label("Time Codes", systemImage: "clock") }
2326
.tag(0)
24-
MykeMode()
27+
MykeMode(selectedDate: $selectedDate, selectedTimeZone: $selectedTimeZone)
2528
.tabItem { Label("Myke Mode", systemImage: "keyboard") }
2629
.tag(1)
2730
}

Elsewhen/Elements/DateTimeSelection.swift

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,7 @@ struct DateTimeSelection: View {
1515
var body: some View {
1616
Group {
1717

18-
DatePicker("Date", selection: $selectedDate)
19-
.datePickerStyle(.graphical)
20-
.padding(.top)
21-
22-
HStack {
23-
Text("Time zone")
24-
.fontWeight(.semibold)
25-
Spacer()
26-
NavigationLink(destination: TimezoneChoiceView(selectedTimeZone: $selectedTimeZone)) {
27-
Text(selectedTimeZone.replacingOccurrences(of: "_", with: " "))
28-
.foregroundColor(.primary)
29-
.padding(.vertical, 8)
30-
.padding(.horizontal, 10)
31-
.background(
32-
RoundedRectangle(cornerRadius: 10, style: .continuous)
33-
.fill(Color(UIColor.secondarySystemBackground))
34-
)
35-
}
36-
}
37-
.padding(.horizontal, 8)
38-
.padding(.bottom, 10)
39-
.frame(minWidth: 0, maxWidth: 390)
18+
DateTimeZonePicker(selectedDate: $selectedDate, selectedTimeZone: $selectedTimeZone)
4019

4120
HStack(spacing: 5) {
4221
ForEach(dateFormats, id: \.self) { formatStyle in
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//
2+
// DateTimeZonePicker.swift
3+
// DateTimeZonePicker
4+
//
5+
// Created by Ben Cardy on 11/09/2021.
6+
//
7+
8+
import SwiftUI
9+
10+
struct DateTimeZonePicker: View {
11+
12+
@Binding var selectedDate: Date
13+
@Binding var selectedTimeZone: String
14+
15+
var body: some View {
16+
Group {
17+
DatePicker("Date", selection: $selectedDate)
18+
.datePickerStyle(.graphical)
19+
.padding(.top)
20+
21+
HStack {
22+
Text("Time zone")
23+
.fontWeight(.semibold)
24+
Spacer()
25+
NavigationLink(destination: TimezoneChoiceView(selectedTimeZone: $selectedTimeZone)) {
26+
Text(selectedTimeZone.replacingOccurrences(of: "_", with: " "))
27+
.foregroundColor(.primary)
28+
.padding(.vertical, 8)
29+
.padding(.horizontal, 10)
30+
.background(
31+
RoundedRectangle(cornerRadius: 10, style: .continuous)
32+
.fill(Color(UIColor.secondarySystemBackground))
33+
)
34+
}
35+
}
36+
.padding(.horizontal, 8)
37+
.padding(.bottom, 10)
38+
.frame(minWidth: 0, maxWidth: 390)
39+
}
40+
}
41+
}
42+
43+
struct DateTimeZonePicker_Previews: PreviewProvider {
44+
static var previews: some View {
45+
DateTimeZonePicker(selectedDate: .constant(Date()), selectedTimeZone: .constant("Europe/London"))
46+
}
47+
}

Elsewhen/Views/MykeMode.swift

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ import SwiftUI
99

1010
struct MykeMode: View {
1111

12-
@State private var selectedDate: Date = Date(timeIntervalSince1970: TimeInterval(1639239835))
12+
// @State private var selectedDate: Date = Date(timeIntervalSince1970: TimeInterval(1639239835))
1313
// @State private var selectedDate: Date = Date(timeIntervalSince1970: TimeInterval(1631892600))
14+
15+
@Binding var selectedDate: Date
16+
@Binding var selectedTimeZone: String
17+
18+
@State private var selectedFormatStyle: DateFormat = dateFormats[0]
19+
1420
@State private var selectedTimeZones: [TimeZone] = [
1521
TimeZone(identifier: "America/Los_Angeles")!,
1622
TimeZone(identifier: "America/New_York")!,
@@ -24,36 +30,48 @@ struct MykeMode: View {
2430
df.timeStyle = .short
2531
df.timeZone = zone
2632
df.locale = Locale(identifier: "en/us")
27-
return df.string(from: selectedDate)
33+
return df.string(from: convert(date: selectedDate, from: TimeZone(identifier: selectedTimeZone)!, to: TimeZone.current))
2834
}
2935

3036
var body: some View {
3137

32-
VStack(alignment: .leading, spacing: 20) {
33-
34-
Text("\(selectedDate)")
38+
NavigationView {
3539

36-
List {
37-
ForEach(selectedTimeZones, id: \.self) { tz in
38-
HStack {
39-
Text("\(flagForTimeZone(tz)) \(selectedTimeInZone(tz))")
40-
Spacer()
41-
if let abbreviation = fudgedAbbreviation(for: tz) {
42-
Text(abbreviation)
43-
.foregroundColor(.secondary)
40+
ScrollView(showsIndicators: true) {
41+
DateTimeZonePicker(selectedDate: $selectedDate, selectedTimeZone: $selectedTimeZone)
42+
43+
Text("Time Zones:")
44+
.font(.headline)
45+
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
46+
47+
List {
48+
ForEach(selectedTimeZones, id: \.self) { tz in
49+
HStack {
50+
Text("\(flagForTimeZone(tz)) \(selectedTimeInZone(tz))")
51+
Spacer()
52+
if let abbreviation = fudgedAbbreviation(for: tz) {
53+
Text(abbreviation)
54+
.foregroundColor(.secondary)
55+
}
56+
}
57+
.onDrag {
58+
let tzItemProvider = tz.itemProvider
59+
let itemProvider = NSItemProvider(object: tzItemProvider)
60+
itemProvider.suggestedName = tzItemProvider.resolvedName
61+
return itemProvider
4462
}
4563
}
46-
.onDrag {
47-
let tzItemProvider = tz.itemProvider
48-
let itemProvider = NSItemProvider(object: tzItemProvider)
49-
itemProvider.suggestedName = tzItemProvider.resolvedName
50-
return itemProvider
51-
}
64+
.onMove(perform: move)
5265
}
53-
.onMove(perform: move)
66+
.listStyle(PlainListStyle())
67+
.scaledToFill()
68+
5469
}
55-
70+
.padding(.horizontal)
71+
.navigationTitle("Myke Mode")
72+
.navigationBarTitleDisplayMode(.inline)
5673
}
74+
.navigationViewStyle(StackNavigationViewStyle())
5775

5876
}
5977

@@ -79,6 +97,6 @@ struct MykeMode: View {
7997

8098
struct MykeMode_Previews: PreviewProvider {
8199
static var previews: some View {
82-
MykeMode()
100+
MykeMode(selectedDate: .constant(Date()), selectedTimeZone: .constant("America/Los_Angeles"))
83101
}
84102
}

Elsewhen/Views/TimeCodeGeneratorView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import UniformTypeIdentifiers
1111

1212
struct TimeCodeGeneratorView: View {
1313

14-
@State private var selectedDate = Date()
14+
@Binding var selectedDate: Date
15+
@Binding var selectedTimeZone: String
1516
@State private var selectedFormatStyle: DateFormat = dateFormats[0]
16-
@State private var selectedTimeZone: String = TimeZone.current.identifier
1717
@State private var showLocalTimeInstead: Bool = false
1818

1919
private var discordFormat: String {
@@ -56,6 +56,6 @@ struct TimeCodeGeneratorView: View {
5656

5757
struct TimeCodeGeneratorView_Previews: PreviewProvider {
5858
static var previews: some View {
59-
TimeCodeGeneratorView()
59+
TimeCodeGeneratorView(selectedDate: .constant(Date()), selectedTimeZone: .constant("Europe/London"))
6060
}
6161
}

0 commit comments

Comments
 (0)