From 8d3d7f6ba13539f0115646df2d56efeae416c21d Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Thu, 8 Oct 2026 12:33:14 +0900 Subject: [PATCH] =?UTF-8?q?feat(gift):=20=EC=84=A0=EB=AC=BC=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SodaLive.xcodeproj/project.pbxproj | 318 ++++++++++++++++++++++++++++ SodaLive/Sources/App/AppState.swift | 12 +- SodaLive/Sources/App/AppStep.swift | 8 + SodaLive/Sources/ContentView.swift | 12 ++ 4 files changed, 349 insertions(+), 1 deletion(-) diff --git a/SodaLive.xcodeproj/project.pbxproj b/SodaLive.xcodeproj/project.pbxproj index 0dc1b3ed..277d7ae9 100644 --- a/SodaLive.xcodeproj/project.pbxproj +++ b/SodaLive.xcodeproj/project.pbxproj @@ -7,6 +7,36 @@ objects = { /* Begin PBXBuildFile section */ + C78011010000000000000001 /* GiftContactInputRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78010010000000000000001 /* GiftContactInputRule.swift */; }; + C78013010000000000000001 /* GiftContactInputRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78010010000000000000001 /* GiftContactInputRule.swift */; }; + C78011010000000000000002 /* GiftContactTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78010010000000000000002 /* GiftContactTextField.swift */; }; + C78013010000000000000002 /* GiftContactTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78010010000000000000002 /* GiftContactTextField.swift */; }; + C77911010000000000000001 /* KakaoPostcodeSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77910010000000000000001 /* KakaoPostcodeSearchView.swift */; }; + C77913010000000000000001 /* KakaoPostcodeSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77910010000000000000001 /* KakaoPostcodeSearchView.swift */; }; + C77911010000000000000002 /* SodaAddressInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77910010000000000000002 /* SodaAddressInputView.swift */; }; + C77913010000000000000002 /* SodaAddressInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77910010000000000000002 /* SodaAddressInputView.swift */; }; + C77211010000000000000001 /* GiftRecipientAddressFormView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77210010000000000000001 /* GiftRecipientAddressFormView.swift */; }; + C77213010000000000000001 /* GiftRecipientAddressFormView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77210010000000000000001 /* GiftRecipientAddressFormView.swift */; }; + C77211010000000000000002 /* GiftRecipientAddressViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77210010000000000000002 /* GiftRecipientAddressViewModel.swift */; }; + C77213010000000000000002 /* GiftRecipientAddressViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77210010000000000000002 /* GiftRecipientAddressViewModel.swift */; }; + C75211010000000000000001 /* GiftProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75210010000000000000001 /* GiftProgressView.swift */; }; + C75213010000000000000001 /* GiftProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75210010000000000000001 /* GiftProgressView.swift */; }; + C75211010000000000000002 /* GiftInfoSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75210010000000000000002 /* GiftInfoSectionView.swift */; }; + C75213010000000000000002 /* GiftInfoSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75210010000000000000002 /* GiftInfoSectionView.swift */; }; + C75311010000000000000001 /* SentGiftDetailContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75310010000000000000001 /* SentGiftDetailContentView.swift */; }; + C77111010000000000000001 /* ReceivedGiftDetailContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77110010000000000000001 /* ReceivedGiftDetailContentView.swift */; }; + C75411010000000000000001 /* GiftDetailActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75410010000000000000001 /* GiftDetailActionBar.swift */; }; + C75413010000000000000001 /* GiftDetailActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75410010000000000000001 /* GiftDetailActionBar.swift */; }; + C75511010000000000000001 /* GiftCancelCompleteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75510010000000000000001 /* GiftCancelCompleteView.swift */; }; + C75513010000000000000001 /* GiftCancelCompleteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75510010000000000000001 /* GiftCancelCompleteView.swift */; }; + C75313010000000000000001 /* SentGiftDetailContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75310010000000000000001 /* SentGiftDetailContentView.swift */; }; + C77113010000000000000001 /* ReceivedGiftDetailContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77110010000000000000001 /* ReceivedGiftDetailContentView.swift */; }; + 6F711001000000000000000D /* GiftSendBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000D /* GiftSendBannerView.swift */; }; + 6F711001000000000000000E /* GiftSenderFormView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000E /* GiftSenderFormView.swift */; }; + 6F711001000000000000000F /* GiftAgreementRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000F /* GiftAgreementRow.swift */; }; + 6F713001000000000000000D /* GiftSendBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000D /* GiftSendBannerView.swift */; }; + 6F713001000000000000000E /* GiftSenderFormView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000E /* GiftSenderFormView.swift */; }; + 6F713001000000000000000F /* GiftAgreementRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000F /* GiftAgreementRow.swift */; }; 00C796627A6758D271215EC5 /* CreatorProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26881ED30292E28D2E5F84CD /* CreatorProfileItem.swift */; }; 042BEE0C973700FB5F4540CD /* I18n.swift in Sources */ = {isa = PBXBuildFile; fileRef = 826D626B7714E5C28ED31074 /* I18n.swift */; }; 0470E68C6F302A131264E3AF /* ChannelDonationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF2BFD2E09F509C44C92214 /* ChannelDonationViewModel.swift */; }; @@ -1755,6 +1785,42 @@ C0A713000000000000000001 /* MainContentAllTabResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000001 /* MainContentAllTabResponse.swift */; }; C0A713000000000000000002 /* MainContentAllApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000002 /* MainContentAllApi.swift */; }; C0A713000000000000000003 /* MainContentAllRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000003 /* MainContentAllRepository.swift */; }; + 6F7110010000000000000001 /* GiftModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000001 /* GiftModels.swift */; }; + 6F7110010000000000000002 /* GiftApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000002 /* GiftApi.swift */; }; + 6F7110010000000000000003 /* GiftRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000003 /* GiftRepository.swift */; }; + 6F7110010000000000000004 /* GiftDisplayModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000004 /* GiftDisplayModels.swift */; }; + 6F7110010000000000000005 /* GiftDisplayPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000005 /* GiftDisplayPolicy.swift */; }; + 6F7110010000000000000006 /* GiftConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000006 /* GiftConstants.swift */; }; + 6F7110010000000000000007 /* GiftSendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000007 /* GiftSendView.swift */; }; + 6F711001000000000000000C /* GiftSendViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000C /* GiftSendViewModel.swift */; }; + 6F7110010000000000000008 /* GiftBoxListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000008 /* GiftBoxListView.swift */; }; + C74811010000000000000001 /* GiftBoxListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000001 /* GiftBoxListViewModel.swift */; }; + C74811010000000000000002 /* GiftBoxCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000002 /* GiftBoxCardView.swift */; }; + C74811010000000000000003 /* GiftBoxInfoBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000005 /* GiftBoxInfoBannerView.swift */; }; + C74811010000000000000004 /* GiftBoxEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000004 /* GiftBoxEmptyView.swift */; }; + 6F7110010000000000000009 /* GiftDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000009 /* GiftDetailView.swift */; }; + C75111010000000000000001 /* GiftDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75110010000000000000001 /* GiftDetailViewModel.swift */; }; + C75113010000000000000001 /* GiftDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75110010000000000000001 /* GiftDetailViewModel.swift */; }; + 6F711001000000000000000A /* GiftTrackingRegistrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000A /* GiftTrackingRegistrationView.swift */; }; + C76111010000000000000001 /* GiftTrackingRegistrationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76110010000000000000001 /* GiftTrackingRegistrationViewModel.swift */; }; + C76113010000000000000001 /* GiftTrackingRegistrationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76110010000000000000001 /* GiftTrackingRegistrationViewModel.swift */; }; + C76211010000000000000001 /* GiftCourierPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76210010000000000000001 /* GiftCourierPickerView.swift */; }; + C76213010000000000000001 /* GiftCourierPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76210010000000000000001 /* GiftCourierPickerView.swift */; }; + 6F7130010000000000000001 /* GiftModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000001 /* GiftModels.swift */; }; + 6F7130010000000000000002 /* GiftApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000002 /* GiftApi.swift */; }; + 6F7130010000000000000003 /* GiftRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000003 /* GiftRepository.swift */; }; + 6F7130010000000000000004 /* GiftDisplayModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000004 /* GiftDisplayModels.swift */; }; + 6F7130010000000000000005 /* GiftDisplayPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000005 /* GiftDisplayPolicy.swift */; }; + 6F7130010000000000000006 /* GiftConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000006 /* GiftConstants.swift */; }; + 6F7130010000000000000007 /* GiftSendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000007 /* GiftSendView.swift */; }; + 6F713001000000000000000C /* GiftSendViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000C /* GiftSendViewModel.swift */; }; + 6F7130010000000000000008 /* GiftBoxListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000008 /* GiftBoxListView.swift */; }; + C74813010000000000000001 /* GiftBoxListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000001 /* GiftBoxListViewModel.swift */; }; + C74813010000000000000002 /* GiftBoxCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000002 /* GiftBoxCardView.swift */; }; + C74813010000000000000003 /* GiftBoxInfoBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000005 /* GiftBoxInfoBannerView.swift */; }; + C74813010000000000000004 /* GiftBoxEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000004 /* GiftBoxEmptyView.swift */; }; + 6F7130010000000000000009 /* GiftDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7100010000000000000009 /* GiftDetailView.swift */; }; + 6F713001000000000000000A /* GiftTrackingRegistrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F710001000000000000000A /* GiftTrackingRegistrationView.swift */; }; C0A713000000000000000004 /* MainContentAllViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000004 /* MainContentAllViewModel.swift */; }; C0A713000000000000000005 /* MainContentAllView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000005 /* MainContentAllView.swift */; }; C0A713000000000000000006 /* MainContentSeriesThumbnailCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A710000000000000000006 /* MainContentSeriesThumbnailCard.swift */; }; @@ -2136,6 +2202,21 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + C78010010000000000000001 /* GiftContactInputRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftContactInputRule.swift; sourceTree = ""; }; + C78010010000000000000002 /* GiftContactTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftContactTextField.swift; sourceTree = ""; }; + C77910010000000000000001 /* KakaoPostcodeSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoPostcodeSearchView.swift; sourceTree = ""; }; + C77910010000000000000002 /* SodaAddressInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SodaAddressInputView.swift; sourceTree = ""; }; + C77210010000000000000001 /* GiftRecipientAddressFormView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftRecipientAddressFormView.swift; sourceTree = ""; }; + C77210010000000000000002 /* GiftRecipientAddressViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftRecipientAddressViewModel.swift; sourceTree = ""; }; + C75210010000000000000001 /* GiftProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftProgressView.swift; sourceTree = ""; }; + C75210010000000000000002 /* GiftInfoSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftInfoSectionView.swift; sourceTree = ""; }; + C75310010000000000000001 /* SentGiftDetailContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentGiftDetailContentView.swift; sourceTree = ""; }; + C77110010000000000000001 /* ReceivedGiftDetailContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceivedGiftDetailContentView.swift; sourceTree = ""; }; + C75410010000000000000001 /* GiftDetailActionBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftDetailActionBar.swift; sourceTree = ""; }; + C75510010000000000000001 /* GiftCancelCompleteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCancelCompleteView.swift; sourceTree = ""; }; + 6F710001000000000000000D /* GiftSendBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftSendBannerView.swift; sourceTree = ""; }; + 6F710001000000000000000E /* GiftSenderFormView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftSenderFormView.swift; sourceTree = ""; }; + 6F710001000000000000000F /* GiftAgreementRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftAgreementRow.swift; sourceTree = ""; }; 002435A7145D59CCCA8F76D1 /* CreatorChannelFanTalkApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkApi.swift; sourceTree = ""; }; 0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PostChannelDonationRequest.swift; sourceTree = ""; }; 0EC05859619BDC03056911E7 /* MainTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = ""; }; @@ -2975,6 +3056,24 @@ C0A710000000000000000001 /* MainContentAllTabResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAllTabResponse.swift; sourceTree = ""; }; C0A710000000000000000002 /* MainContentAllApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAllApi.swift; sourceTree = ""; }; C0A710000000000000000003 /* MainContentAllRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAllRepository.swift; sourceTree = ""; }; + 6F7100010000000000000001 /* GiftModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftModels.swift; sourceTree = ""; }; + 6F7100010000000000000002 /* GiftApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftApi.swift; sourceTree = ""; }; + 6F7100010000000000000003 /* GiftRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftRepository.swift; sourceTree = ""; }; + 6F7100010000000000000004 /* GiftDisplayModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftDisplayModels.swift; sourceTree = ""; }; + 6F7100010000000000000005 /* GiftDisplayPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftDisplayPolicy.swift; sourceTree = ""; }; + 6F7100010000000000000006 /* GiftConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftConstants.swift; sourceTree = ""; }; + 6F7100010000000000000007 /* GiftSendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftSendView.swift; sourceTree = ""; }; + 6F710001000000000000000C /* GiftSendViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftSendViewModel.swift; sourceTree = ""; }; + 6F7100010000000000000008 /* GiftBoxListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftBoxListView.swift; sourceTree = ""; }; + C74810010000000000000001 /* GiftBoxListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftBoxListViewModel.swift; sourceTree = ""; }; + C74810010000000000000002 /* GiftBoxCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftBoxCardView.swift; sourceTree = ""; }; + C74810010000000000000005 /* GiftBoxInfoBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftBoxInfoBannerView.swift; sourceTree = ""; }; + C74810010000000000000004 /* GiftBoxEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftBoxEmptyView.swift; sourceTree = ""; }; + 6F7100010000000000000009 /* GiftDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftDetailView.swift; sourceTree = ""; }; + C75110010000000000000001 /* GiftDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftDetailViewModel.swift; sourceTree = ""; }; + 6F710001000000000000000A /* GiftTrackingRegistrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftTrackingRegistrationView.swift; sourceTree = ""; }; + C76110010000000000000001 /* GiftTrackingRegistrationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftTrackingRegistrationViewModel.swift; sourceTree = ""; }; + C76210010000000000000001 /* GiftCourierPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCourierPickerView.swift; sourceTree = ""; }; C0A710000000000000000004 /* MainContentAllViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAllViewModel.swift; sourceTree = ""; }; C0A710000000000000000005 /* MainContentAllView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAllView.swift; sourceTree = ""; }; C0A710000000000000000006 /* MainContentSeriesThumbnailCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentSeriesThumbnailCard.swift; sourceTree = ""; }; @@ -3190,6 +3289,34 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + C77210010000000000000003 /* RecipientAddress */ = { + isa = PBXGroup; + children = ( + C77210010000000000000001 /* GiftRecipientAddressFormView.swift */, + C77210010000000000000002 /* GiftRecipientAddressViewModel.swift */, + ); + path = RecipientAddress; + sourceTree = ""; + }; + 6F7100010000000000000019 /* Components */ = { + isa = PBXGroup; + children = ( + 6F710001000000000000000D /* GiftSendBannerView.swift */, + 6F710001000000000000000E /* GiftSenderFormView.swift */, + ); + path = Components; + sourceTree = ""; + }; + 6F710001000000000000001A /* Components */ = { + isa = PBXGroup; + children = ( + 6F710001000000000000000F /* GiftAgreementRow.swift */, + C78010010000000000000001 /* GiftContactInputRule.swift */, + C78010010000000000000002 /* GiftContactTextField.swift */, + ); + path = Components; + sourceTree = ""; + }; 038B15E425DE0639156ADBA9 /* Repository */ = { isa = PBXGroup; children = ( @@ -5646,6 +5773,7 @@ 976A594BED288A98C0EEA03C /* Component */ = { isa = PBXGroup; children = ( + C77910010000000000000000 /* Address */, C0A702100000000000000000 /* AudioContent */, E92246F5C1254CBED72AD9AD /* AudioContentCard.swift */, 2D9C7222B946512FD4C4B499 /* Banner */, @@ -5665,6 +5793,15 @@ path = Component; sourceTree = ""; }; + C77910010000000000000000 /* Address */ = { + isa = PBXGroup; + children = ( + C77910010000000000000001 /* KakaoPostcodeSearchView.swift */, + C77910010000000000000002 /* SodaAddressInputView.swift */, + ); + path = Address; + sourceTree = ""; + }; A4F100000000000000000007 /* Refresh */ = { isa = PBXGroup; children = ( @@ -6383,10 +6520,125 @@ 976A594BED288A98C0EEA03C /* Component */, D979B1B9166521052893A897 /* Main */, CC0100242FF0100000A5BBA3 /* CreatorChannel */, + 6F7100010000000000000013 /* Gift */, ); path = V2; sourceTree = ""; }; + 6F7100010000000000000011 /* Models */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000001 /* GiftModels.swift */, + 6F7100010000000000000004 /* GiftDisplayModels.swift */, + 6F7100010000000000000005 /* GiftDisplayPolicy.swift */, + ); + path = Models; + sourceTree = ""; + }; + 6F7100010000000000000012 /* Repository */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000002 /* GiftApi.swift */, + 6F7100010000000000000003 /* GiftRepository.swift */, + ); + path = Repository; + sourceTree = ""; + }; + 6F7100010000000000000014 /* Constants */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000006 /* GiftConstants.swift */, + ); + path = Constants; + sourceTree = ""; + }; + 6F7100010000000000000013 /* Gift */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000011 /* Models */, + 6F7100010000000000000012 /* Repository */, + 6F7100010000000000000014 /* Constants */, + 6F710001000000000000001A /* Components */, + 6F7100010000000000000015 /* Send */, + 6F7100010000000000000016 /* List */, + 6F7100010000000000000017 /* Detail */, + 6F7100010000000000000018 /* Tracking */, + C77210010000000000000003 /* RecipientAddress */, + ); + path = Gift; + sourceTree = ""; + }; + 6F7100010000000000000015 /* Send */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000007 /* GiftSendView.swift */, + 6F710001000000000000000C /* GiftSendViewModel.swift */, + 6F7100010000000000000019 /* Components */, + ); + path = Send; + sourceTree = ""; + }; + 6F7100010000000000000016 /* List */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000008 /* GiftBoxListView.swift */, + C74810010000000000000001 /* GiftBoxListViewModel.swift */, + C74810010000000000000003 /* Components */, + ); + path = List; + sourceTree = ""; + }; + C74810010000000000000003 /* Components */ = { + isa = PBXGroup; + children = ( + C74810010000000000000002 /* GiftBoxCardView.swift */, + C74810010000000000000005 /* GiftBoxInfoBannerView.swift */, + C74810010000000000000004 /* GiftBoxEmptyView.swift */, + ); + path = Components; + sourceTree = ""; + }; + 6F7100010000000000000017 /* Detail */ = { + isa = PBXGroup; + children = ( + 6F7100010000000000000009 /* GiftDetailView.swift */, + C75110010000000000000001 /* GiftDetailViewModel.swift */, + C75210010000000000000003 /* Components */, + ); + path = Detail; + sourceTree = ""; + }; + C76210010000000000000002 /* Components */ = { + isa = PBXGroup; + children = ( + C76210010000000000000001 /* GiftCourierPickerView.swift */, + ); + path = Components; + sourceTree = ""; + }; + 6F7100010000000000000018 /* Tracking */ = { + isa = PBXGroup; + children = ( + 6F710001000000000000000A /* GiftTrackingRegistrationView.swift */, + C76110010000000000000001 /* GiftTrackingRegistrationViewModel.swift */, + C76210010000000000000002 /* Components */, + ); + path = Tracking; + sourceTree = ""; + }; + C75210010000000000000003 /* Components */ = { + isa = PBXGroup; + children = ( + C75210010000000000000001 /* GiftProgressView.swift */, + C75210010000000000000002 /* GiftInfoSectionView.swift */, + C75310010000000000000001 /* SentGiftDetailContentView.swift */, + C77110010000000000000001 /* ReceivedGiftDetailContentView.swift */, + C75410010000000000000001 /* GiftDetailActionBar.swift */, + C75510010000000000000001 /* GiftCancelCompleteView.swift */, + ); + path = Components; + sourceTree = ""; + }; F4F9FC33C494BBFD8CE96749 /* Models */ = { isa = PBXGroup; children = ( @@ -6871,6 +7123,39 @@ C0A711000000000000000001 /* MainContentAllTabResponse.swift in Sources */, C0A711000000000000000002 /* MainContentAllApi.swift in Sources */, C0A711000000000000000003 /* MainContentAllRepository.swift in Sources */, + 6F7110010000000000000001 /* GiftModels.swift in Sources */, + 6F7110010000000000000002 /* GiftApi.swift in Sources */, + 6F7110010000000000000003 /* GiftRepository.swift in Sources */, + 6F7110010000000000000004 /* GiftDisplayModels.swift in Sources */, + 6F7110010000000000000005 /* GiftDisplayPolicy.swift in Sources */, + 6F7110010000000000000006 /* GiftConstants.swift in Sources */, + 6F7110010000000000000007 /* GiftSendView.swift in Sources */, + 6F711001000000000000000C /* GiftSendViewModel.swift in Sources */, + 6F711001000000000000000D /* GiftSendBannerView.swift in Sources */, + 6F711001000000000000000E /* GiftSenderFormView.swift in Sources */, + C77911010000000000000001 /* KakaoPostcodeSearchView.swift in Sources */, + C77911010000000000000002 /* SodaAddressInputView.swift in Sources */, + 6F711001000000000000000F /* GiftAgreementRow.swift in Sources */, + C78011010000000000000001 /* GiftContactInputRule.swift in Sources */, + C78011010000000000000002 /* GiftContactTextField.swift in Sources */, + 6F7110010000000000000008 /* GiftBoxListView.swift in Sources */, + C74811010000000000000001 /* GiftBoxListViewModel.swift in Sources */, + C74811010000000000000002 /* GiftBoxCardView.swift in Sources */, + C74811010000000000000003 /* GiftBoxInfoBannerView.swift in Sources */, + C74811010000000000000004 /* GiftBoxEmptyView.swift in Sources */, + 6F7110010000000000000009 /* GiftDetailView.swift in Sources */, + C75111010000000000000001 /* GiftDetailViewModel.swift in Sources */, + C75211010000000000000001 /* GiftProgressView.swift in Sources */, + C75211010000000000000002 /* GiftInfoSectionView.swift in Sources */, + C75311010000000000000001 /* SentGiftDetailContentView.swift in Sources */, + C77111010000000000000001 /* ReceivedGiftDetailContentView.swift in Sources */, + C77211010000000000000001 /* GiftRecipientAddressFormView.swift in Sources */, + C77211010000000000000002 /* GiftRecipientAddressViewModel.swift in Sources */, + C75411010000000000000001 /* GiftDetailActionBar.swift in Sources */, + C75511010000000000000001 /* GiftCancelCompleteView.swift in Sources */, + 6F711001000000000000000A /* GiftTrackingRegistrationView.swift in Sources */, + C76111010000000000000001 /* GiftTrackingRegistrationViewModel.swift in Sources */, + C76211010000000000000001 /* GiftCourierPickerView.swift in Sources */, C0A711000000000000000004 /* MainContentAllViewModel.swift in Sources */, C0A711000000000000000005 /* MainContentAllView.swift in Sources */, C0A711000000000000000006 /* MainContentSeriesThumbnailCard.swift in Sources */, @@ -8721,6 +9006,39 @@ C0A713000000000000000001 /* MainContentAllTabResponse.swift in Sources */, C0A713000000000000000002 /* MainContentAllApi.swift in Sources */, C0A713000000000000000003 /* MainContentAllRepository.swift in Sources */, + 6F7130010000000000000001 /* GiftModels.swift in Sources */, + 6F7130010000000000000002 /* GiftApi.swift in Sources */, + 6F7130010000000000000003 /* GiftRepository.swift in Sources */, + 6F7130010000000000000004 /* GiftDisplayModels.swift in Sources */, + 6F7130010000000000000005 /* GiftDisplayPolicy.swift in Sources */, + 6F7130010000000000000006 /* GiftConstants.swift in Sources */, + 6F7130010000000000000007 /* GiftSendView.swift in Sources */, + 6F713001000000000000000C /* GiftSendViewModel.swift in Sources */, + 6F713001000000000000000D /* GiftSendBannerView.swift in Sources */, + 6F713001000000000000000E /* GiftSenderFormView.swift in Sources */, + C77913010000000000000001 /* KakaoPostcodeSearchView.swift in Sources */, + C77913010000000000000002 /* SodaAddressInputView.swift in Sources */, + 6F713001000000000000000F /* GiftAgreementRow.swift in Sources */, + C78013010000000000000002 /* GiftContactTextField.swift in Sources */, + C78013010000000000000001 /* GiftContactInputRule.swift in Sources */, + 6F7130010000000000000008 /* GiftBoxListView.swift in Sources */, + C74813010000000000000001 /* GiftBoxListViewModel.swift in Sources */, + C74813010000000000000002 /* GiftBoxCardView.swift in Sources */, + C74813010000000000000003 /* GiftBoxInfoBannerView.swift in Sources */, + C74813010000000000000004 /* GiftBoxEmptyView.swift in Sources */, + 6F7130010000000000000009 /* GiftDetailView.swift in Sources */, + C75113010000000000000001 /* GiftDetailViewModel.swift in Sources */, + C75213010000000000000001 /* GiftProgressView.swift in Sources */, + C75213010000000000000002 /* GiftInfoSectionView.swift in Sources */, + C75313010000000000000001 /* SentGiftDetailContentView.swift in Sources */, + C77113010000000000000001 /* ReceivedGiftDetailContentView.swift in Sources */, + C77213010000000000000001 /* GiftRecipientAddressFormView.swift in Sources */, + C77213010000000000000002 /* GiftRecipientAddressViewModel.swift in Sources */, + C75413010000000000000001 /* GiftDetailActionBar.swift in Sources */, + C75513010000000000000001 /* GiftCancelCompleteView.swift in Sources */, + 6F713001000000000000000A /* GiftTrackingRegistrationView.swift in Sources */, + C76113010000000000000001 /* GiftTrackingRegistrationViewModel.swift in Sources */, + C76213010000000000000001 /* GiftCourierPickerView.swift in Sources */, C0A713000000000000000004 /* MainContentAllViewModel.swift in Sources */, C0A713000000000000000005 /* MainContentAllView.swift in Sources */, C0A713000000000000000006 /* MainContentSeriesThumbnailCard.swift in Sources */, diff --git a/SodaLive/Sources/App/AppState.swift b/SodaLive/Sources/App/AppState.swift index 84d8d6a8..7a39eba0 100644 --- a/SodaLive/Sources/App/AppState.swift +++ b/SodaLive/Sources/App/AppState.swift @@ -139,8 +139,17 @@ class AppState: ObservableObject { } } - func replaceCurrentAppStep(step: AppStep) { + func replaceCurrentAppStep( + step: AppStep, + ifCurrentStep matches: ((AppStep) -> Bool)? = nil, + completion: @escaping (Bool) -> Void = { _ in } + ) { DispatchQueue.main.async { + guard matches?(self.appStep) ?? true else { + completion(false) + return + } + if let route = self.navigationPath.popLast() { self.routeStepMap.removeValue(forKey: route) } @@ -149,6 +158,7 @@ class AppState: ObservableObject { self.routeStepMap[route] = step self.navigationPath.append(route) self.appStep = step + completion(true) } } diff --git a/SodaLive/Sources/App/AppStep.swift b/SodaLive/Sources/App/AppStep.swift index b1afa2df..26dfac63 100644 --- a/SodaLive/Sources/App/AppStep.swift +++ b/SodaLive/Sources/App/AppStep.swift @@ -196,4 +196,12 @@ enum AppStep { case contentOverview(type: ContentOverviewType = .newAndHotAudio) case seriesMain + + case giftSend(recipientMemberId: Int, recipientCreatorNickname: String) + + case giftBoxList + + case giftDetail(applicationNo: String) + + case giftTrackingRegistration(applicationNo: String) } diff --git a/SodaLive/Sources/ContentView.swift b/SodaLive/Sources/ContentView.swift index 6134ade6..60fc5cc3 100644 --- a/SodaLive/Sources/ContentView.swift +++ b/SodaLive/Sources/ContentView.swift @@ -374,6 +374,18 @@ struct AppStepLayerView: View { case .seriesMain: SeriesMainView() + case .giftSend(let recipientMemberId, let recipientCreatorNickname): + GiftSendView(recipientMemberId: recipientMemberId, recipientCreatorNickname: recipientCreatorNickname) + + case .giftBoxList: + GiftBoxListView() + + case .giftDetail(let applicationNo): + GiftDetailView(applicationNo: applicationNo) + + case .giftTrackingRegistration(let applicationNo): + GiftTrackingRegistrationView(applicationNo: applicationNo) + case .main: EmptyView() .frame(width: 0, height: 0, alignment: .topLeading)