From b4baab1b372c303b071b48aa3a125075cd0efb44 Mon Sep 17 00:00:00 2001 From: jinoo Date: Sun, 2 Feb 2025 15:21:09 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20Review=20=EC=A1=B0=ED=9A=8C/=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20View=20Coordinator=20=EC=97=B0=EA=B2=B0=20-=20#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Whidy-iOS.xcodeproj/project.pbxproj | 54 +++++++++++++++- .../Coordinator/StudyMapCoordinator.swift | 6 ++ .../StudyMapScreen+Identifiable.swift | 10 +++ .../StudyMap/Coordinator/StudyMapScreen.swift | 3 + .../Feature/Info/InfoDetailFeature.swift | 62 +++++++++++++++++++ .../Feature/Review/ReviewFeature.swift | 61 ++++++++++++++++++ .../Review/ReviewWriteFilterFeature.swift | 61 ++++++++++++++++++ .../Review/ReviewWriteTextFeature.swift | 62 +++++++++++++++++++ .../StudyMap/View/Info/InfoDetailView.swift | 56 +---------------- .../View/Review/ReviewExpandedView.swift | 22 +++++++ .../View/Review/ReviewWriteFilterView.swift | 21 +++++++ .../View/Review/ReviewWriteTextView.swift | 21 +++++++ 12 files changed, 384 insertions(+), 55 deletions(-) create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/Feature/Info/InfoDetailFeature.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewFeature.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteFilterFeature.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteTextFeature.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewExpandedView.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteFilterView.swift create mode 100644 Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteTextView.swift diff --git a/Whidy-iOS.xcodeproj/project.pbxproj b/Whidy-iOS.xcodeproj/project.pbxproj index 4cae9f2..5b30ca6 100644 --- a/Whidy-iOS.xcodeproj/project.pbxproj +++ b/Whidy-iOS.xcodeproj/project.pbxproj @@ -127,6 +127,13 @@ 6BF2D8822D4C51E600252A43 /* SearchView+ChildView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D8812D4C51E600252A43 /* SearchView+ChildView.swift */; }; 6BF2D9302D4DD51D00252A43 /* InfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D92F2D4DD51D00252A43 /* InfoView.swift */; }; 6BF2D94B2D4E696900252A43 /* InfoDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D94A2D4E696900252A43 /* InfoDetailView.swift */; }; + 6BF2D95A2D4F433900252A43 /* InfoDetailFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D9592D4F433900252A43 /* InfoDetailFeature.swift */; }; + 6BF2D95C2D4F435200252A43 /* ReviewExpandedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D95B2D4F435200252A43 /* ReviewExpandedView.swift */; }; + 6BF2D95E2D4F442900252A43 /* ReviewFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D95D2D4F442900252A43 /* ReviewFeature.swift */; }; + 6BF2D9602D4F44D200252A43 /* ReviewWriteFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D95F2D4F44D200252A43 /* ReviewWriteFilterView.swift */; }; + 6BF2D9622D4F44D600252A43 /* ReviewWriteTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D9612D4F44D600252A43 /* ReviewWriteTextView.swift */; }; + 6BF2D9642D4F454100252A43 /* ReviewWriteFilterFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D9632D4F454100252A43 /* ReviewWriteFilterFeature.swift */; }; + 6BF2D9662D4F458300252A43 /* ReviewWriteTextFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF2D9652D4F458300252A43 /* ReviewWriteTextFeature.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -253,6 +260,13 @@ 6BF2D8812D4C51E600252A43 /* SearchView+ChildView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SearchView+ChildView.swift"; sourceTree = ""; }; 6BF2D92F2D4DD51D00252A43 /* InfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoView.swift; sourceTree = ""; }; 6BF2D94A2D4E696900252A43 /* InfoDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoDetailView.swift; sourceTree = ""; }; + 6BF2D9592D4F433900252A43 /* InfoDetailFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoDetailFeature.swift; sourceTree = ""; }; + 6BF2D95B2D4F435200252A43 /* ReviewExpandedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewExpandedView.swift; sourceTree = ""; }; + 6BF2D95D2D4F442900252A43 /* ReviewFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewFeature.swift; sourceTree = ""; }; + 6BF2D95F2D4F44D200252A43 /* ReviewWriteFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewWriteFilterView.swift; sourceTree = ""; }; + 6BF2D9612D4F44D600252A43 /* ReviewWriteTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewWriteTextView.swift; sourceTree = ""; }; + 6BF2D9632D4F454100252A43 /* ReviewWriteFilterFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewWriteFilterFeature.swift; sourceTree = ""; }; + 6BF2D9652D4F458300252A43 /* ReviewWriteTextFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewWriteTextFeature.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -302,9 +316,10 @@ 6B6220732D37AA6C00C5F2C8 /* View */ = { isa = PBXGroup; children = ( - 6BF2D92E2D4DD50600252A43 /* Info */, 6BF2D85D2D49ECFC00252A43 /* StudyMap */, 6BF2D85E2D49ED0400252A43 /* Search */, + 6BF2D92E2D4DD50600252A43 /* Info */, + 6BF2D9562D4F430000252A43 /* Review */, ); path = View; sourceTree = ""; @@ -314,6 +329,8 @@ children = ( 6BF2D85F2D49ED1000252A43 /* StudyMap */, 6BF2D8602D49ED1E00252A43 /* Search */, + 6BF2D9572D4F430C00252A43 /* Info */, + 6BF2D9582D4F431100252A43 /* Review */, ); path = Feature; sourceTree = ""; @@ -794,6 +811,34 @@ path = Info; sourceTree = ""; }; + 6BF2D9562D4F430000252A43 /* Review */ = { + isa = PBXGroup; + children = ( + 6BF2D95B2D4F435200252A43 /* ReviewExpandedView.swift */, + 6BF2D95F2D4F44D200252A43 /* ReviewWriteFilterView.swift */, + 6BF2D9612D4F44D600252A43 /* ReviewWriteTextView.swift */, + ); + path = Review; + sourceTree = ""; + }; + 6BF2D9572D4F430C00252A43 /* Info */ = { + isa = PBXGroup; + children = ( + 6BF2D9592D4F433900252A43 /* InfoDetailFeature.swift */, + ); + path = Info; + sourceTree = ""; + }; + 6BF2D9582D4F431100252A43 /* Review */ = { + isa = PBXGroup; + children = ( + 6BF2D95D2D4F442900252A43 /* ReviewFeature.swift */, + 6BF2D9632D4F454100252A43 /* ReviewWriteFilterFeature.swift */, + 6BF2D9652D4F458300252A43 /* ReviewWriteTextFeature.swift */, + ); + path = Review; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -908,6 +953,7 @@ 6B6276502D35F01A00843C9E /* HTTPHeader.swift in Sources */, 6BF2D85C2D49ECED00252A43 /* StudyMapView+ChildView.swift in Sources */, 6BF2D8802D4A6FD700252A43 /* OnboardingCoordinatorView.swift in Sources */, + 6BF2D9602D4F44D200252A43 /* ReviewWriteFilterView.swift in Sources */, 6B6220BE2D39E92900C5F2C8 /* MemberEmailView.swift in Sources */, 6B6276512D35F01A00843C9E /* TargetType.swift in Sources */, 6B6220C02D39E92B00C5F2C8 /* MemberEmailFeature.swift in Sources */, @@ -922,6 +968,7 @@ 6BF2D8662D49EEA800252A43 /* StudyMapFeature+Enum.swift in Sources */, 6B6275EF2D35EFE200843C9E /* Enviroment.swift in Sources */, 6B6275F02D35EFE200843C9E /* Int+Extension.swift in Sources */, + 6BF2D9622D4F44D600252A43 /* ReviewWriteTextView.swift in Sources */, 6B6275F12D35EFE200843C9E /* Publisher+Extension.swift in Sources */, 6B6220932D3882C500C5F2C8 /* ScrapFeature.swift in Sources */, 6BF2D8642D49ED3D00252A43 /* SearchFeature.swift in Sources */, @@ -933,6 +980,7 @@ 6B6220A42D388D8500C5F2C8 /* MyPageScreen+Identifiable.swift in Sources */, 6B6220A52D388D8500C5F2C8 /* MyPageFeature.swift in Sources */, 6B6220A62D388D8500C5F2C8 /* MyPageCoordinator.swift in Sources */, + 6BF2D95E2D4F442900252A43 /* ReviewFeature.swift in Sources */, 6B6220C52D39EDD700C5F2C8 /* LoadingView.swift in Sources */, 6B6220C62D39EDD700C5F2C8 /* BackButton.swift in Sources */, 6B6221852D3B720E00C5F2C8 /* MemberSession.swift in Sources */, @@ -949,6 +997,7 @@ 6B62763C2D35EFFB00843C9E /* NormalTextFieldModifier.swift in Sources */, 6BF2D94B2D4E696900252A43 /* InfoDetailView.swift in Sources */, 6B6220CA2D39F56A00C5F2C8 /* SignUpRequest.swift in Sources */, + 6BF2D9662D4F458300252A43 /* ReviewWriteTextFeature.swift in Sources */, 6B6276892D35FDD000843C9E /* Color.swift in Sources */, 6B62763D2D35EFFB00843C9E /* DateFormatUtil.swift in Sources */, 6B6220842D37AC5900C5F2C8 /* StudyMapFeature.swift in Sources */, @@ -958,6 +1007,7 @@ 6B6276402D35EFFB00843C9E /* DynamicFontSizeModifier.swift in Sources */, 6B6276A72D361F1100843C9E /* AuthView.swift in Sources */, 6B6276422D35EFFB00843C9E /* TextBackgroundModifier.swift in Sources */, + 6BF2D95C2D4F435200252A43 /* ReviewExpandedView.swift in Sources */, 6B62218A2D3B989600C5F2C8 /* MapView.swift in Sources */, 6B6276442D35EFFB00843C9E /* NormalTextLabelModifier2.swift in Sources */, 6B6276732D35F02B00843C9E /* NetworkManager+Auth.swift in Sources */, @@ -973,6 +1023,7 @@ 6B6276A12D361CE300843C9E /* OnboardingScreen.swift in Sources */, 6B6276472D35EFFB00843C9E /* RedactedModifier.swift in Sources */, 6B6276482D35EFFB00843C9E /* ButtonWrapper.swift in Sources */, + 6BF2D9642D4F454100252A43 /* ReviewWriteFilterFeature.swift in Sources */, 6B6276492D35EFFB00843C9E /* FontModifier.swift in Sources */, 6B62764A2D35EFFB00843C9E /* NetworkMonitor.swift in Sources */, 6B6275F22D35EFE200843C9E /* Notification.name+Extension.swift in Sources */, @@ -985,6 +1036,7 @@ 6B6276A92D361F4100843C9E /* AuthFeature.swift in Sources */, 6B6220B62D38DFB900C5F2C8 /* MemberNicknameFeature.swift in Sources */, 6B6220CF2D39F73E00C5F2C8 /* SignIn.swift in Sources */, + 6BF2D95A2D4F433900252A43 /* InfoDetailFeature.swift in Sources */, 6B6275F52D35EFE200843C9E /* UIDevice+Extension.swift in Sources */, 6B6275F62D35EFE200843C9E /* UserDefaults+Extension.swift in Sources */, 6B62208D2D3882C000C5F2C8 /* ScrapScreen+Identifiable.swift in Sources */, diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapCoordinator.swift b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapCoordinator.swift index cdb3b6f..e99e7f4 100644 --- a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapCoordinator.swift +++ b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapCoordinator.swift @@ -21,6 +21,12 @@ struct StudyMapCoordinatorView : View { SearchView(store: store) case let .infoDetail(store): InfoDetailView(store: store) + case let .reviewExpanded(store): + ReviewExpandedView(store: store) + case let .reviewWriteFilter(store): + ReviewWriteFilterView(store: store) + case let .reviewWriteText(store): + ReviewWriteTextView(store: store) } } } diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen+Identifiable.swift b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen+Identifiable.swift index 319bc5a..a8b3fc4 100644 --- a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen+Identifiable.swift +++ b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen+Identifiable.swift @@ -14,6 +14,13 @@ extension StudyMapScreen.State : Identifiable { .search case .infoDetail: .infoDetail + case .reviewExpanded: + .reviewExpanded + case .reviewWriteFilter: + .reviewWriteFilter + case .reviewWriteText: + .reviewWriteText + } } @@ -21,6 +28,9 @@ extension StudyMapScreen.State : Identifiable { case studyMap case search case infoDetail + case reviewExpanded + case reviewWriteFilter + case reviewWriteText var id: ID { self } } } diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen.swift b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen.swift index a973ff7..7614b6d 100644 --- a/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen.swift +++ b/Whidy-iOS/Presentation/Main/StudyMap/Coordinator/StudyMapScreen.swift @@ -13,4 +13,7 @@ enum StudyMapScreen { case studyMap(StudyMapFeature) case search(SearchFeature) case infoDetail(InfoDetailFeature) + case reviewExpanded(ReviewExpandedFeature) + case reviewWriteFilter(ReviewWriteFilterFeature) + case reviewWriteText(ReviewWriteTextFeature) } diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Feature/Info/InfoDetailFeature.swift b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Info/InfoDetailFeature.swift new file mode 100644 index 0000000..aec8e42 --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Info/InfoDetailFeature.swift @@ -0,0 +1,62 @@ +// +// InfoDetailFeature.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import Foundation +import ComposableArchitecture + +@Reducer +struct InfoDetailFeature { + @ObservableState + struct State : Equatable { + let id = UUID() + + } + + enum Action : BindableAction { + case binding(BindingAction) + case networkResponse(NetworkReponse) + case buttonTapped(ButtonTapped) + case viewTransition(ViewTransition) + case anyAction(AnyAction) + } + + enum ViewTransition { + case onAppear + case dismiss + } + + enum NetworkReponse { + + } + + enum ButtonTapped { + + } + + + enum AnyAction { + + } + + @Dependency(\.networkManager) var networkManager + + var body : some ReducerOf { + + BindingReducer() + + Reduce { state, action in + switch action { + + + default : + break + } + return .none + } + } +} + diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewFeature.swift b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewFeature.swift new file mode 100644 index 0000000..7852d38 --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewFeature.swift @@ -0,0 +1,61 @@ +// +// ReviewFeature.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import Foundation +import ComposableArchitecture + +@Reducer +struct ReviewExpandedFeature { + @ObservableState + struct State : Equatable { + let id = UUID() + + } + + enum Action : BindableAction { + case binding(BindingAction) + case networkResponse(NetworkReponse) + case buttonTapped(ButtonTapped) + case viewTransition(ViewTransition) + case anyAction(AnyAction) + } + + enum ViewTransition { + case onAppear + } + + enum NetworkReponse { + + } + + enum ButtonTapped { + + } + + + enum AnyAction { + + } + + @Dependency(\.networkManager) var networkManager + + var body : some ReducerOf { + + BindingReducer() + + Reduce { state, action in + switch action { + + + default : + break + } + return .none + } + } +} + diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteFilterFeature.swift b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteFilterFeature.swift new file mode 100644 index 0000000..b028382 --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteFilterFeature.swift @@ -0,0 +1,61 @@ +// +// ReviewWriteFilterFeature.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import Foundation +import ComposableArchitecture + +@Reducer +struct ReviewWriteFilterFeature { + @ObservableState + struct State : Equatable { + let id = UUID() + + } + + enum Action : BindableAction { + case binding(BindingAction) + case networkResponse(NetworkReponse) + case buttonTapped(ButtonTapped) + case viewTransition(ViewTransition) + case anyAction(AnyAction) + } + + enum ViewTransition { + case onAppear + } + + enum NetworkReponse { + + } + + enum ButtonTapped { + + } + + + enum AnyAction { + + } + + @Dependency(\.networkManager) var networkManager + + var body : some ReducerOf { + + BindingReducer() + + Reduce { state, action in + switch action { + + + default : + break + } + return .none + } + } +} + diff --git a/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteTextFeature.swift b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteTextFeature.swift new file mode 100644 index 0000000..dac847e --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/Feature/Review/ReviewWriteTextFeature.swift @@ -0,0 +1,62 @@ +// +// ReviewWriteTextFeature.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import Foundation +import ComposableArchitecture + +@Reducer +struct ReviewWriteTextFeature { + @ObservableState + struct State : Equatable { + let id = UUID() + + } + + enum Action : BindableAction { + case binding(BindingAction) + case networkResponse(NetworkReponse) + case buttonTapped(ButtonTapped) + case viewTransition(ViewTransition) + case anyAction(AnyAction) + } + + enum ViewTransition { + case onAppear + } + + enum NetworkReponse { + + } + + enum ButtonTapped { + + } + + + enum AnyAction { + + } + + @Dependency(\.networkManager) var networkManager + + var body : some ReducerOf { + + BindingReducer() + + Reduce { state, action in + switch action { + + + default : + break + } + return .none + } + } +} + + diff --git a/Whidy-iOS/Presentation/Main/StudyMap/View/Info/InfoDetailView.swift b/Whidy-iOS/Presentation/Main/StudyMap/View/Info/InfoDetailView.swift index c1d3587..f1631a5 100644 --- a/Whidy-iOS/Presentation/Main/StudyMap/View/Info/InfoDetailView.swift +++ b/Whidy-iOS/Presentation/Main/StudyMap/View/Info/InfoDetailView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import ComposableArchitecture struct InfoDetailView: View { @Perception.Bindable var store: StoreOf @@ -45,6 +46,7 @@ struct InfoDetailView: View { } .background(Color.white) .edgesIgnoringSafeArea(.all) + .padding(.top, getSafeAreaTop()) } } } @@ -57,57 +59,3 @@ struct ScrollOffsetKey: PreferenceKey { value += nextValue() } } - -import ComposableArchitecture - -@Reducer -struct InfoDetailFeature { - @ObservableState - struct State : Equatable { - let id = UUID() - - } - - enum Action : BindableAction { - case binding(BindingAction) - case networkResponse(NetworkReponse) - case buttonTapped(ButtonTapped) - case viewTransition(ViewTransition) - case anyAction(AnyAction) - } - - enum ViewTransition { - case onAppear - case dismiss - } - - enum NetworkReponse { - - } - - enum ButtonTapped { - - } - - - enum AnyAction { - - } - - @Dependency(\.networkManager) var networkManager - - var body : some ReducerOf { - - BindingReducer() - - Reduce { state, action in - switch action { - - - default : - break - } - return .none - } - } -} diff --git a/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewExpandedView.swift b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewExpandedView.swift new file mode 100644 index 0000000..51bdaf2 --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewExpandedView.swift @@ -0,0 +1,22 @@ +// +// ReviewExpandedView.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import SwiftUI +import ComposableArchitecture + +struct ReviewExpandedView: View { + @Perception.Bindable var store: StoreOf + + var body: some View { + WithPerceptionTracking { + VStack { + Text("ReviewView") + } + } + } +} + diff --git a/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteFilterView.swift b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteFilterView.swift new file mode 100644 index 0000000..7b7081e --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteFilterView.swift @@ -0,0 +1,21 @@ +// +// ReviewWriteFilterView.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import SwiftUI +import ComposableArchitecture + +struct ReviewWriteFilterView: View { + @Perception.Bindable var store: StoreOf + + var body: some View { + WithPerceptionTracking { + VStack { + Text("ReviewWriteFilterView") + } + } + } +} diff --git a/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteTextView.swift b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteTextView.swift new file mode 100644 index 0000000..898ce05 --- /dev/null +++ b/Whidy-iOS/Presentation/Main/StudyMap/View/Review/ReviewWriteTextView.swift @@ -0,0 +1,21 @@ +// +// ReviewWriteTextView.swift +// Whidy-iOS +// +// Created by JinwooLee on 2/2/25. +// + +import SwiftUI +import ComposableArchitecture + +struct ReviewWriteTextView: View { + @Perception.Bindable var store: StoreOf + + var body: some View { + WithPerceptionTracking { + VStack { + Text("ReviewWriteTextView") + } + } + } +}