diff --git a/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingStoreInterface.swift b/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingStoreInterface.swift index 793e053..f672226 100644 --- a/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingStoreInterface.swift +++ b/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingStoreInterface.swift @@ -6,6 +6,7 @@ // import ComposableArchitecture +import SharedDesignSystem public struct CrewRankingStore: ReducerProtocol { private let reducer: Reduce @@ -17,6 +18,14 @@ public struct CrewRankingStore: ReducerProtocol { } public struct State: Equatable { + public var crewRankingList: IdentifiedArrayOf = [ + .init(id: .init(), title: "상체 머신", ranking: "1", userName: "채령", data: ["상체 6시간", "상체 839kcal"]), + .init(id: .init(), title: "운동 누적 시간", ranking: "1", userName: "채령", data: ["07:43:29"]), + .init(id: .init(), title: "꼴찌의 전당", ranking: "1", userName: "채령", data: ["30분", "839kcal"]), + .init(id: .init(), title: "하체 머신", ranking: "1", userName: "채령", data: ["하체 2시간 3분", " 839kcal"]), + .init(id: .init(), title: "유산소킹", ranking: "1", userName: "채령", data: ["유산소 2시간 3분", " 839kcal"]) + ] + public init() { } @@ -24,6 +33,8 @@ public struct CrewRankingStore: ReducerProtocol { public enum Action: BindableAction, Equatable { case binding(BindingAction) + + case crewRankingCell(id: CrewRankingCellStore.State.ID, action: CrewRankingCellStore.Action) } public var body: some ReducerProtocol { diff --git a/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingView.swift b/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingView.swift index 8c1acb9..89bc441 100644 --- a/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingView.swift +++ b/Projects/Feature/Crew/Interface/Sources/Ranking/CrewRankingView.swift @@ -7,6 +7,7 @@ import SwiftUI import ComposableArchitecture +import SharedDesignSystem public struct CrewRankingView: View { public let store: StoreOf @@ -19,7 +20,92 @@ public struct CrewRankingView: View { public var body: some View { WithViewStore(self.store, observe: { $0 }) { viewStore in - Text("Rank View") + ScrollView { + VStack(spacing: 55) { + weekControlView(viewStore: viewStore) + + rankingTabView() + + VStack(alignment: .center, spacing: 10) { + Button { + + } label: { + Image(systemName: "heart.fill") + .resizable() + .frame(width: 23, height: 20) + .foregroundColor(.black) + } + .frame(width: 60, height: 60) + .background(.white) + .clipShape(Circle()) + + Text("응원보내기") + .font(.pretendard(size: 13, type: .medium)) + .foregroundColor(Color.colorGrey600) + } + Spacer() + } + } + } + .toolbar { + ToolbarItem(placement: .principal) { + HStack { + Spacer() + + Button { + + } label: { + Image(systemName: "square.and.arrow.up") + .resizable() + .foregroundColor(Color.colorGrey700) + .frame(maxWidth: 25, maxHeight: 25) + } + } + } + } + } + + private func weekControlView(viewStore: ViewStoreOf) -> some View { + HStack(spacing: 5) { + Spacer() + + Button { + + } label: { + Image(systemName: "arrowtriangle.left.fill") + .resizable() + .foregroundColor(Color.colorGrey700) + .frame(maxWidth: 10, maxHeight: 10) + + } + + Text("5월 12일 - 19일") + .font(.pretendard(size: 15, type: .medium)) + .foregroundColor(Color.colorGrey700) + + Button { + + } label: { + Image(systemName: "arrowtriangle.right.fill") + .resizable() + .foregroundColor(Color.colorGrey700) + .frame(maxWidth: 10, maxHeight: 10) + } + + Spacer() + } + } + + @ViewBuilder + private func rankingTabView() -> some View { + TabView { + ForEachStore(self.store.scope( + state: \.crewRankingList, + action: CrewRankingStore.Action.crewRankingCell(id:action:))) { + CrewRankingCellView(store: $0) + } } + .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always)) + .frame(height: 400) } } diff --git a/Projects/Feature/Crew/Interface/Sources/Root/CrewRootView.swift b/Projects/Feature/Crew/Interface/Sources/Root/CrewRootView.swift index c17970b..2f6c407 100644 --- a/Projects/Feature/Crew/Interface/Sources/Root/CrewRootView.swift +++ b/Projects/Feature/Crew/Interface/Sources/Root/CrewRootView.swift @@ -11,13 +11,13 @@ import FeatureProfileInterface public struct CrewRootView: View { public let store: StoreOf - + public init( store: StoreOf ) { self.store = store } - + public var body: some View { WithViewStore(self.store, observe: { $0 }) { viewStore in NavigationStack(path: viewStore.binding(\.$path)) { @@ -33,16 +33,19 @@ public struct CrewRootView: View { case .crewRanking: IfLetStore(self.store.scope(state: \.crewRanking, action: { .crewRanking($0) })) { CrewRankingView(store: $0) + .toolbarRole(.editor) } case .profile: IfLetStore(self.store.scope(state: \.profile, action: { .profile($0) })) { ProfileView(store: $0, profileSubject: .my) + .toolbarRole(.editor) } - + case .widthOfChange: IfLetStore(self.store.scope(state: \.widthOfChange, action: { .widthOfChange($0) })) { WidthOfChangeView(store: $0) + .toolbarRole(.editor) } } } diff --git a/Projects/Feature/Crew/Sources/Ranking/CrewRankingStore.swift b/Projects/Feature/Crew/Sources/Ranking/CrewRankingStore.swift index 07a8f9c..beadcaf 100644 --- a/Projects/Feature/Crew/Sources/Ranking/CrewRankingStore.swift +++ b/Projects/Feature/Crew/Sources/Ranking/CrewRankingStore.swift @@ -14,6 +14,12 @@ extension CrewRankingStore { switch action { case .binding: return .none + + case let .crewRankingCell(id, action): + return .none + + default: + return .none } } diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Contents.json new file mode 100644 index 0000000..88f6b10 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 48096425.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 48096425 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 48096425 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (1).png new file mode 100644 index 0000000..1c9d3b1 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (2).png new file mode 100644 index 0000000..71945cb Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425.png new file mode 100644 index 0000000..6affbb6 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardio.imageset/Frame 48096425.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Contents.json new file mode 100644 index 0000000..4014f3d --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 481673.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 481673 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 481673 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (1).png new file mode 100644 index 0000000..5e476e9 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (2).png new file mode 100644 index 0000000..fa23327 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673.png new file mode 100644 index 0000000..3519196 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingCardioAvatar.imageset/Group 481673.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Contents.json new file mode 100644 index 0000000..d5de0bc --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 48096427.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 48096427 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 48096427 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (1).png new file mode 100644 index 0000000..fa27f45 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (2).png new file mode 100644 index 0000000..784d920 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427.png new file mode 100644 index 0000000..aa59418 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlace.imageset/Frame 48096427.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Contents.json new file mode 100644 index 0000000..33bf066 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 481903.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 481903 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 481903 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (1).png new file mode 100644 index 0000000..a44baa6 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (2).png new file mode 100644 index 0000000..ca18e39 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903.png new file mode 100644 index 0000000..5c8e62d Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLastPlaceAvatar.imageset/Group 481903.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Contents.json new file mode 100644 index 0000000..dab75ff --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 48096426.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 48096426 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 48096426 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (1).png new file mode 100644 index 0000000..a8bc69e Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (2).png new file mode 100644 index 0000000..be8c019 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426.png new file mode 100644 index 0000000..e352548 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBody.imageset/Frame 48096426.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Contents.json new file mode 100644 index 0000000..c91261f --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 481732.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 481732 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 481732 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (1).png new file mode 100644 index 0000000..60f35c0 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (2).png new file mode 100644 index 0000000..7b68f0f Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732.png new file mode 100644 index 0000000..f5db775 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingLowerBodyAvatar.imageset/Group 481732.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Contents.json new file mode 100644 index 0000000..4553180 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 481902.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 481902 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 481902 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (1).png new file mode 100644 index 0000000..ef86659 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (2).png new file mode 100644 index 0000000..dfa3c43 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902.png new file mode 100644 index 0000000..6259802 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingUpperBody.imageset/Group 481902.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Contents.json new file mode 100644 index 0000000..9577fd4 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 48096428.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 48096428 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 48096428 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (1).png new file mode 100644 index 0000000..1a1d427 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (2).png new file mode 100644 index 0000000..39c4e8f Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428 (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428.png new file mode 100644 index 0000000..ad54443 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTime.imageset/Frame 48096428.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/Contents.json new file mode 100644 index 0000000..b985303 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "alarm clock.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "alarm clock (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "alarm clock (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (1).png new file mode 100644 index 0000000..ec9744d Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (2).png new file mode 100644 index 0000000..a05a4f5 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock.png new file mode 100644 index 0000000..fdef717 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/crewRankingWorkoutCumulativeTimeAvatar.imageset/alarm clock.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Contents.json new file mode 100644 index 0000000..08b1dbd --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Vector.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Vector (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Vector (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (1).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (1).png new file mode 100644 index 0000000..9fa71ea Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (1).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (2).png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (2).png new file mode 100644 index 0000000..e3e4667 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector (2).png differ diff --git a/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector.png b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector.png new file mode 100644 index 0000000..ae88941 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Images.xcassets/strongArm.imageset/Vector.png differ diff --git a/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingCellView.swift b/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingCellView.swift new file mode 100644 index 0000000..a947523 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingCellView.swift @@ -0,0 +1,120 @@ +// +// CrewRankingCellView.swift +// SharedDesignSystem +// +// Created by Derrick kim on 2023/06/22. +// + +import SwiftUI +import ComposableArchitecture + +public struct CrewRankingCellView: View { + public let store: StoreOf + + public init(store: StoreOf) { + self.store = store + } + + public var body: some View { + WithViewStore(self.store, observe: { $0 }) { viewStore in + VStack { + Spacer() + + CrewRankingType(rawValue: viewStore.title)?.backgroundImage + .resizable() + .frame(height: 180) + .offset(y: -40) + .overlay(content: { + VStack(alignment: .leading) { + rankingHeaderView(viewStore: viewStore) + .offset(y: -200) + + if CrewRankingType(rawValue: viewStore.title) == .workoutCumulativeTime { + Text("07 : 43 : 29") + .font(.tenada(size: 28)) + .baselineOffset(-5) + .foregroundColor(.colorGrey900) + .offset(x: 15, y: -65) + } else { + VStack(alignment: .leading) { + HStack { + Image.clock + .resizable() + .frame(width: 16, height: 16) + Text(viewStore.data[0]) + .font(.pretendard(size: 14, type: .medium)) + .foregroundColor(Color.colorGrey900) + } + + HStack { + Image.strongArm + .resizable() + .frame(width: 16, height: 16) + + Text(viewStore.data[1]) + .font(.pretendard(size: 14, type: .medium)) + .foregroundColor(Color.colorGrey900) + } + } + .offset(x: 15, y: -65) + } + } + + ZStack { + CrewRankingType(rawValue: viewStore.title)?.avatar + .resizable() + .frame( + width: CrewRankingType(rawValue: viewStore.title) == .workoutCumulativeTime ? 200: 230, + height: CrewRankingType(rawValue: viewStore.title) == .workoutCumulativeTime ? 250: 330 + ) + .offset(x: 80, y: -130) + } + }) + } + } + } + + private func rankingHeaderView(viewStore: ViewStoreOf) -> some View { + HStack { + VStack(alignment: .leading, spacing: 45) { + VStack(alignment: .leading, spacing: 10) { + Text(viewStore.title) + .font(.tenada(size: 36)) + .baselineOffset(-5) + .foregroundColor(.white) + + HStack { + HStack { + Text("\(viewStore.ranking)위") + .font(.pretendard(size: 16, type: .medium)) + .padding(.init(top: 2 ,leading: 10, bottom: 2, trailing: 10)) + .foregroundColor(Color.colorGrey900) + } + .background(Color.colorCyan100) + .cornerRadius(13) + + Text(viewStore.userName) + .font(.pretendard(size: 18, type: .bold)) + .foregroundColor(Color.colorGrey900) + } + } + + Button { + + } label: { + Text("다른 친구는?") + .font(.pretendard(size: 16, type: .bold)) + .padding(.init(top: 8 ,leading: 10, bottom: 8, trailing: 10)) + .foregroundColor(.white) + .overlay(content: { + RoundedRectangle(cornerRadius: 10) + .fill(Color.white.opacity(0.3)) + }) + } + } + .padding(.leading, 15) + + Spacer() + } + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingStore.swift b/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingStore.swift new file mode 100644 index 0000000..0ee7b80 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Cells/CrewRanking/CrewRankingStore.swift @@ -0,0 +1,94 @@ +// +// CrewRankingCellStore.swift +// SharedDesignSystem +// +// Created by Derrick kim on 2023/06/22. +// + +import SwiftUI +import ComposableArchitecture + +public enum CrewRankingType: String { + case upperBody = "상체 머신" + case lowerBody = "하체 머신" + case lastPlace = "꼴찌의 전당" + case workoutCumulativeTime = "운동 누적 시간" + case cardio = "유산소킹" + + var backgroundImage: Image { + switch self { + case .upperBody: + return SharedDesignSystemAsset.Images.crewRankingUpperBody.swiftUIImage + + case .lowerBody: + return SharedDesignSystemAsset.Images.crewRankingLowerBody.swiftUIImage + + case .lastPlace: + return SharedDesignSystemAsset.Images.crewRankingLastPlace.swiftUIImage + + case .workoutCumulativeTime: + return SharedDesignSystemAsset.Images.crewRankingWorkoutCumulativeTime.swiftUIImage + + case .cardio: + return SharedDesignSystemAsset.Images.crewRankingCardio.swiftUIImage + } + } + + var avatar: Image { + switch self { + case .lowerBody: + return SharedDesignSystemAsset.Images.crewRankingLowerBodyAvatar.swiftUIImage + + case .lastPlace: + return SharedDesignSystemAsset.Images.crewRankingLastPlaceAvatar.swiftUIImage + + case .workoutCumulativeTime: + return SharedDesignSystemAsset.Images.crewRankingWorkoutCumulativeTimeAvatar.swiftUIImage + + default: + return SharedDesignSystemAsset.Images.crewRankingCardioAvatar.swiftUIImage + } + } +} + +public struct CrewRankingCellStore: ReducerProtocol { + public init() { } + + public struct State: Equatable, Identifiable { + public let id: UUID + public let title: String + public let ranking: String + public let userName: String + public let data: [String] + + public var isTapped: Bool = true + + public init( + id: UUID, + title: String, + ranking: String, + userName: String, + data: [String] + ) { + self.id = id + self.title = title + self.ranking = ranking + self.userName = userName + self.data = data + } + } + + public enum Action: Equatable { + case tapped + } + + public func reduce( + into state: inout State, + action: Action + ) -> EffectTask { + switch action { + case .tapped: + return .none + } + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Images.swift b/Projects/Shared/DesignSystem/Sources/Images.swift index 1dfc395..a6dd1e7 100644 --- a/Projects/Shared/DesignSystem/Sources/Images.swift +++ b/Projects/Shared/DesignSystem/Sources/Images.swift @@ -12,12 +12,21 @@ public typealias PumpingImages = SharedDesignSystemAsset.Images import SwiftUI public extension Image { + static let avatar = SharedDesignSystemAsset.Images.avatar.swiftUIImage + static let avatarHead = SharedDesignSystemAsset.Images.avatarHead.swiftUIImage static let arrow = SharedDesignSystemAsset.Images.arrow.swiftUIImage static let arrowForPercentage = SharedDesignSystemAsset.Images.arrowForPercentage.swiftUIImage static let boy = SharedDesignSystemAsset.Images.boy.swiftUIImage + static let dropdown = SharedDesignSystemAsset.Images.dropdown.swiftUIImage static let clock = SharedDesignSystemAsset.Images.clock.swiftUIImage static let widthOfChangeCalorie = SharedDesignSystemAsset.Images.widthOfChangeCalorie.swiftUIImage static let widthOfChangeWorkoutTime = SharedDesignSystemAsset.Images.widthOfChangeWorkoutTime.swiftUIImage static let widthOfChangeHearRate = SharedDesignSystemAsset.Images.widthOfChangeHearRate.swiftUIImage static let widthOfChangeMaxWorkoutPart = SharedDesignSystemAsset.Images.widthOfChangeMaxWorkoutPart.swiftUIImage + static let crewRankingCardio = SharedDesignSystemAsset.Images.crewRankingCardio.swiftUIImage + static let crewRankingLastPlace = SharedDesignSystemAsset.Images.crewRankingLastPlace.swiftUIImage + static let crewRankingUpperBody = SharedDesignSystemAsset.Images.crewRankingUpperBody.swiftUIImage + static let crewRankingLowerBody = SharedDesignSystemAsset.Images.crewRankingLowerBody.swiftUIImage + static let crewRankingWorkoutCumulativeTime = SharedDesignSystemAsset.Images.crewRankingWorkoutCumulativeTime.swiftUIImage + static let strongArm = SharedDesignSystemAsset.Images.strongArm.swiftUIImage }