Skip to content

Commit 1cc9cc6

Browse files
authored
Merge pull request #64 from yml-org/refactor/CM-1322/new-design-system
refactor: incorporate the Y-Chat new Design System into the iOS sample
2 parents 0252796 + 5265cdf commit 1cc9cc6

File tree

107 files changed

+2535
-786
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2535
-786
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
//
2+
// HomeMenu.swift
3+
// ychat-ios
4+
//
5+
// Created by Koji Osugi on 06/04/23.
6+
// Copyright © 2023 orgName. All rights reserved.
7+
//
8+
9+
import SwiftUI
10+
11+
internal struct HomeMenu: View {
12+
@Binding
13+
private var showSidebar: Bool
14+
15+
@Binding
16+
private var selectedMenuItem: Item
17+
18+
init(
19+
showSidebar: Binding<Bool>,
20+
selectedMenuItem: Binding<Item>
21+
) {
22+
self._showSidebar = showSidebar
23+
self._selectedMenuItem = selectedMenuItem
24+
}
25+
26+
var body: some View {
27+
SideMenu(isVisible: $showSidebar) {
28+
VStack(alignment: .leading, spacing: 0) {
29+
LogoLabel()
30+
.padding(.vertical, 20)
31+
.padding(.horizontal, 16)
32+
Divider().background(Color.divider)
33+
.padding(.bottom, 12)
34+
ForEach(Item.allCases, id: \.self) {
35+
if $0.hasTopDivider {
36+
Divider().background(Color.divider)
37+
.padding(.vertical, 8)
38+
.padding(.leading, 48)
39+
}
40+
sideMenuItemView(item: $0)
41+
.padding(.top, 4)
42+
}
43+
}
44+
}
45+
}
46+
47+
@ViewBuilder
48+
private func sideMenuItemView(
49+
item: Item
50+
) -> some View {
51+
let isSelected: Bool = selectedMenuItem == item
52+
let bgColor = isSelected ? Color.accentLight : .background
53+
let textStyle = isSelected ? Typography.mediumTitle : .mediumBody
54+
Button {
55+
showSidebar.toggle()
56+
self.selectedMenuItem = item
57+
} label: {
58+
HStack(spacing: 8) {
59+
item.icon.image()
60+
Text(item.title)
61+
.foregroundColor(Color.text1)
62+
.style(textStyle)
63+
Spacer()
64+
}
65+
.padding(.vertical, 14)
66+
.padding(.horizontal, 16)
67+
.frame(maxWidth: .infinity)
68+
.background(bgColor)
69+
.cornerRadius(20, corners: [.topRight, .bottomRight])
70+
.padding(.trailing, 16)
71+
}
72+
}
73+
}
74+
75+
extension HomeMenu {
76+
enum Item: CaseIterable {
77+
case models
78+
case completions
79+
case chatCompletions
80+
case edits
81+
case images
82+
case audio
83+
case settings
84+
85+
var icon: Icon {
86+
switch self {
87+
case .models: return .bot
88+
case .completions: return .text
89+
case .settings: return .settings
90+
case .chatCompletions: return .chatBubbleOutline
91+
case .edits: return .edit
92+
case .images: return .image
93+
case .audio: return .audio
94+
}
95+
}
96+
97+
var title: String {
98+
switch self {
99+
case .models: return "Models"
100+
case .completions: return "Completions"
101+
case .settings: return "Settings"
102+
case .chatCompletions: return "ChatCompletions"
103+
case .edits: return "Edits"
104+
case .images: return "Images"
105+
case .audio: return "Audio"
106+
}
107+
}
108+
109+
var hasTopDivider: Bool {
110+
switch self {
111+
case .settings: return true
112+
default: return false
113+
}
114+
}
115+
}
116+
}
117+
118+
internal struct HomeMenu_Previews: PreviewProvider {
119+
static var previews: some View {
120+
HomeMenu(
121+
showSidebar: .constant(true),
122+
selectedMenuItem: .constant(.models)
123+
)
124+
}
125+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//
2+
// MainView.swift
3+
// ios-sample
4+
//
5+
// Created by Koji Osugi on 22/01/23.
6+
// Copyright © 2023 orgName. All rights reserved.
7+
//
8+
9+
import SwiftUI
10+
11+
internal struct HomeView: View {
12+
@State
13+
private var showSidebar: Bool = false
14+
15+
@State
16+
private var selectedMenu: HomeMenu.Item = .models
17+
18+
var body: some View {
19+
ZStack {
20+
NavigationStack {
21+
Group {
22+
switch selectedMenu {
23+
case .models: ModelsView()
24+
case .completions: CompletionsView()
25+
case .chatCompletions: ChatCompletionsView()
26+
default: Feedback(state: .construction)
27+
}
28+
}
29+
.applyToolbar(
30+
selectedMenu.title,
31+
startIcon: .menu,
32+
onButtonAction: { showSidebar.toggle() }
33+
)
34+
}
35+
HomeMenu(showSidebar: $showSidebar, selectedMenuItem: $selectedMenu)
36+
}
37+
}
38+
}
39+
40+
internal struct MainView_Previews: PreviewProvider {
41+
static var previews: some View {
42+
HomeView()
43+
}
44+
}

sample/ios/YChatApp/App/Presenter/Main/MainView.swift

Lines changed: 0 additions & 123 deletions
This file was deleted.

sample/ios/YChatApp/App/Presenter/Splash/SplashView.swift

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,7 @@ internal struct SplashView: View {
1616
}
1717

1818
var body: some View {
19-
VStack {
20-
HStack(spacing: 8) {
21-
Image(uiImage: Icon.logoBig.uiImage)
22-
Text("YChat GPT")
23-
.font(.system(size: 24))
24-
.foregroundColor(.grayDark)
25-
.bold()
26-
}
27-
}
28-
.fullScreen(alignment: .center)
19+
LogoSplash().fullScreen(alignment: .center)
2920
.onAppear {
3021
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
3122
appRouter.push(.main)
@@ -34,8 +25,15 @@ internal struct SplashView: View {
3425
}
3526
}
3627

37-
internal struct SplashView_Previews: PreviewProvider {
28+
internal struct SplashViewLight_Previews: PreviewProvider {
29+
static var previews: some View {
30+
SplashView()
31+
}
32+
}
33+
34+
internal struct SplashViewDark_Previews: PreviewProvider {
3835
static var previews: some View {
3936
SplashView()
37+
.preferredColorScheme(.dark)
4038
}
4139
}

sample/ios/YChatApp/App/SampleApp.swift renamed to sample/ios/YChatApp/App/YChatApp.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import SwiftUI
22

33
@main
4-
struct SampleApp: App {
4+
struct YChatApp: App {
55
@ObservedObject
66
private var appRouter: AppRouter = AppRouter.shared
77

@@ -10,7 +10,7 @@ struct SampleApp: App {
1010
Group {
1111
switch appRouter.navGraph.destination {
1212
case .splash: SplashView()
13-
case .main: MainView()
13+
case .main: HomeView()
1414
}
1515
}
1616
.transition(appRouter.navGraph.animation)

0 commit comments

Comments
 (0)