From 9276d17c2605ce7985d7d46cf98ad0abcc6c16ed Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Tue, 7 Jul 2026 15:04:15 +0900 Subject: [PATCH] =?UTF-8?q?feat(creator):=20=EB=8B=B5=EA=B8=80=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=ED=99=94=EB=A9=B4=EC=9D=84=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 | 184 +++++++++++++----- .../CreatorChannelReplyDetailView.swift | 68 +++++++ 2 files changed, 204 insertions(+), 48 deletions(-) create mode 100644 SodaLive/Sources/V2/CreatorChannel/ReplyDetail/CreatorChannelReplyDetailView.swift diff --git a/SodaLive.xcodeproj/project.pbxproj b/SodaLive.xcodeproj/project.pbxproj index 55f8f432..c2516e76 100644 --- a/SodaLive.xcodeproj/project.pbxproj +++ b/SodaLive.xcodeproj/project.pbxproj @@ -7,6 +7,30 @@ objects = { /* Begin PBXBuildFile section */ + CC0710012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift */; }; + CC0710022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift */; }; + CC0710032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift */; }; + CC0710042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift */; }; + CC0710052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift */; }; + CC0710062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift */; }; + CC0710072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift */; }; + CC0710082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift */; }; + CC0720012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift */; }; + CC0720022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift */; }; + CC0720032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift */; }; + CC0720042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift */; }; + CC0720052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift */; }; + CC0720062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift */; }; + CC0720072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift */; }; + CC0720082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift */; }; + CC0730012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift */; }; + CC0730022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift */; }; + CC0730032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift */; }; + CC0730042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift */; }; + CC0730052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift */; }; + CC0730062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift */; }; + CC0730072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift */; }; + CC0730082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0700082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.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 */; }; @@ -1759,21 +1783,6 @@ 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 */; }; - C0A731000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; - C0A731000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; - C0A731000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; - C0A731000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; - C0A731000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; - C0A732000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; - C0A732000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; - C0A732000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; - C0A732000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; - C0A732000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; - C0A733000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; - C0A733000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; - C0A733000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; - C0A733000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; - C0A733000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; C0A721000000000000000001 /* AudioRankingResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A720000000000000000001 /* AudioRankingResponse.swift */; }; C0A721000000000000000002 /* MainContentRankingApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A720000000000000000002 /* MainContentRankingApi.swift */; }; C0A721000000000000000003 /* MainContentRankingRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A720000000000000000003 /* MainContentRankingRepository.swift */; }; @@ -1804,6 +1813,21 @@ C0A723000000000000000008 /* MainContentAudioRankingRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A720000000000000000008 /* MainContentAudioRankingRow.swift */; }; C0A723000000000000000009 /* MainContentAudioRankingEmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A720000000000000000009 /* MainContentAudioRankingEmptyStateView.swift */; }; C0A72300000000000000000A /* MainContentAudioRankingThumbnailCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A72000000000000000000A /* MainContentAudioRankingThumbnailCard.swift */; }; + C0A731000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; + C0A731000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; + C0A731000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; + C0A731000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; + C0A731000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; + C0A732000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; + C0A732000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; + C0A732000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; + C0A732000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; + C0A732000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; + C0A733000000000000000001 /* ContentOverviewPageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000001 /* ContentOverviewPageResponse.swift */; }; + C0A733000000000000000002 /* ContentOverviewApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000002 /* ContentOverviewApi.swift */; }; + C0A733000000000000000003 /* ContentOverviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000003 /* ContentOverviewRepository.swift */; }; + C0A733000000000000000004 /* ContentOverviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000004 /* ContentOverviewViewModel.swift */; }; + C0A733000000000000000005 /* ContentOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A730000000000000000005 /* ContentOverviewView.swift */; }; C0D6E325AEFEEF476E7044AB /* CommunityPostCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE82912F2F111593BE42E33C /* CommunityPostCard.swift */; }; C3CFF5936F1BAC5BC12E9DDB /* UpdateContentPreferenceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDFAA64C2CA4FCBBF00A024 /* UpdateContentPreferenceRequest.swift */; }; C45F071870A4DB48ABAE8BC5 /* YandexAdSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */; }; @@ -2049,6 +2073,14 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + CC0700012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailView.swift; sourceTree = ""; }; + CC0700022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailViewModel.swift; sourceTree = ""; }; + CC0700032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailContext.swift; sourceTree = ""; }; + CC0700042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailDisplayItem.swift; sourceTree = ""; }; + CC0700052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailTitleBar.swift; sourceTree = ""; }; + CC0700062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailFeedView.swift; sourceTree = ""; }; + CC0700072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailInputBar.swift; sourceTree = ""; }; + CC0700082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatorChannelReplyDetailActionPopup.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 = ""; }; @@ -2887,11 +2919,6 @@ 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 = ""; }; - C0A730000000000000000001 /* ContentOverviewPageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewPageResponse.swift; sourceTree = ""; }; - C0A730000000000000000002 /* ContentOverviewApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewApi.swift; sourceTree = ""; }; - C0A730000000000000000003 /* ContentOverviewRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewRepository.swift; sourceTree = ""; }; - C0A730000000000000000004 /* ContentOverviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewViewModel.swift; sourceTree = ""; }; - C0A730000000000000000005 /* ContentOverviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewView.swift; sourceTree = ""; }; C0A720000000000000000001 /* AudioRankingResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRankingResponse.swift; sourceTree = ""; }; C0A720000000000000000002 /* MainContentRankingApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentRankingApi.swift; sourceTree = ""; }; C0A720000000000000000003 /* MainContentRankingRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentRankingRepository.swift; sourceTree = ""; }; @@ -2902,6 +2929,11 @@ C0A720000000000000000008 /* MainContentAudioRankingRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAudioRankingRow.swift; sourceTree = ""; }; C0A720000000000000000009 /* MainContentAudioRankingEmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAudioRankingEmptyStateView.swift; sourceTree = ""; }; C0A72000000000000000000A /* MainContentAudioRankingThumbnailCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContentAudioRankingThumbnailCard.swift; sourceTree = ""; }; + C0A730000000000000000001 /* ContentOverviewPageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewPageResponse.swift; sourceTree = ""; }; + C0A730000000000000000002 /* ContentOverviewApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewApi.swift; sourceTree = ""; }; + C0A730000000000000000003 /* ContentOverviewRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewRepository.swift; sourceTree = ""; }; + C0A730000000000000000004 /* ContentOverviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewViewModel.swift; sourceTree = ""; }; + C0A730000000000000000005 /* ContentOverviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOverviewView.swift; sourceTree = ""; }; C1165E3F4CA1AB019FC85067 /* LanguageRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageRepository.swift; sourceTree = ""; }; C40163E3E9DB325EA984D3C4 /* CreatorChannelFloatingIconButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFloatingIconButton.swift; sourceTree = ""; }; C6B18C00DE256DCC53030630 /* Spacing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Spacing.swift; sourceTree = ""; }; @@ -3065,6 +3097,37 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + CC0700092FF0700000A5BBA3 /* Models */ = { + isa = PBXGroup; + children = ( + CC0700032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift */, + CC0700042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift */, + ); + path = Models; + sourceTree = ""; + }; + CC07000A2FF0700000A5BBA3 /* Components */ = { + isa = PBXGroup; + children = ( + CC0700052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift */, + CC0700062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift */, + CC0700072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift */, + CC0700082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift */, + ); + path = Components; + sourceTree = ""; + }; + CC07000B2FF0700000A5BBA3 /* ReplyDetail */ = { + isa = PBXGroup; + children = ( + CC0700092FF0700000A5BBA3 /* Models */, + CC07000A2FF0700000A5BBA3 /* Components */, + CC0700012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift */, + CC0700022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift */, + ); + path = ReplyDetail; + sourceTree = ""; + }; 038B15E425DE0639156ADBA9 /* Repository */ = { isa = PBXGroup; children = ( @@ -5642,34 +5705,6 @@ path = AudioContent; sourceTree = ""; }; - C0A730000000000000000100 /* Overview */ = { - isa = PBXGroup; - children = ( - C0A730000000000000000101 /* Models */, - C0A730000000000000000102 /* Repository */, - C0A730000000000000000004 /* ContentOverviewViewModel.swift */, - C0A730000000000000000005 /* ContentOverviewView.swift */, - ); - path = Overview; - sourceTree = ""; - }; - C0A730000000000000000101 /* Models */ = { - isa = PBXGroup; - children = ( - C0A730000000000000000001 /* ContentOverviewPageResponse.swift */, - ); - path = Models; - sourceTree = ""; - }; - C0A730000000000000000102 /* Repository */ = { - isa = PBXGroup; - children = ( - C0A730000000000000000002 /* ContentOverviewApi.swift */, - C0A730000000000000000003 /* ContentOverviewRepository.swift */, - ); - path = Repository; - sourceTree = ""; - }; C0A710000000000000000100 /* All */ = { isa = PBXGroup; children = ( @@ -5748,6 +5783,34 @@ path = Components; sourceTree = ""; }; + C0A730000000000000000100 /* Overview */ = { + isa = PBXGroup; + children = ( + C0A730000000000000000101 /* Models */, + C0A730000000000000000102 /* Repository */, + C0A730000000000000000004 /* ContentOverviewViewModel.swift */, + C0A730000000000000000005 /* ContentOverviewView.swift */, + ); + path = Overview; + sourceTree = ""; + }; + C0A730000000000000000101 /* Models */ = { + isa = PBXGroup; + children = ( + C0A730000000000000000001 /* ContentOverviewPageResponse.swift */, + ); + path = Models; + sourceTree = ""; + }; + C0A730000000000000000102 /* Repository */ = { + isa = PBXGroup; + children = ( + C0A730000000000000000002 /* ContentOverviewApi.swift */, + C0A730000000000000000003 /* ContentOverviewRepository.swift */, + ); + path = Repository; + sourceTree = ""; + }; C46DB3E329B349CBB3F472DF /* Views */ = { isa = PBXGroup; children = ( @@ -5816,6 +5879,7 @@ CC0400112FF0400000A5BBA3 /* Series */, CC05001B2FF0500000A5BBA3 /* Donation */, CC06000E2FF0600000A5BBA3 /* Community */, + CC07000B2FF0700000A5BBA3 /* ReplyDetail */, CC0100082FF0100000A5BBA3 /* CreatorChannelView.swift */, CC0100092FF0100000A5BBA3 /* CreatorChannelViewModel.swift */, AA4588B91C0F73344C3DC4A4 /* FanTalk */, @@ -6484,6 +6548,14 @@ CC01011F2FF0100000A5BBA3 /* CreatorChannelActivitySection.swift in Sources */, CC0101272FF0100000A5BBA3 /* CreatorChannelSnsSection.swift in Sources */, CC0101282FF0100000A5BBA3 /* CreatorChannelTalkActionSection.swift in Sources */, + CC0710012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */, + CC0710022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */, + CC0710032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */, + CC0710042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */, + CC0710052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */, + CC0710062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */, + CC0710072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */, + CC0710082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */, CC0101082FF0100000A5BBA3 /* CreatorChannelView.swift in Sources */, CC0101112FF0100000A5BBA3 /* CreatorChannelTitleBar.swift in Sources */, CC0101122FF0100000A5BBA3 /* CreatorChannelHeaderSection.swift in Sources */, @@ -7379,6 +7451,14 @@ CC01021F2FF0100000A5BBA3 /* CreatorChannelActivitySection.swift in Sources */, CC0102272FF0100000A5BBA3 /* CreatorChannelSnsSection.swift in Sources */, CC0102282FF0100000A5BBA3 /* CreatorChannelTalkActionSection.swift in Sources */, + CC0720012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */, + CC0720022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */, + CC0720032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */, + CC0720042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */, + CC0720052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */, + CC0720062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */, + CC0720072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */, + CC0720082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */, CC0102082FF0100000A5BBA3 /* CreatorChannelView.swift in Sources */, CC0102112FF0100000A5BBA3 /* CreatorChannelTitleBar.swift in Sources */, CC0102122FF0100000A5BBA3 /* CreatorChannelHeaderSection.swift in Sources */, @@ -8302,6 +8382,14 @@ CC01031F2FF0100000A5BBA3 /* CreatorChannelActivitySection.swift in Sources */, CC0103272FF0100000A5BBA3 /* CreatorChannelSnsSection.swift in Sources */, CC0103282FF0100000A5BBA3 /* CreatorChannelTalkActionSection.swift in Sources */, + CC0730012FF0700000A5BBA3 /* CreatorChannelReplyDetailView.swift in Sources */, + CC0730022FF0700000A5BBA3 /* CreatorChannelReplyDetailViewModel.swift in Sources */, + CC0730032FF0700000A5BBA3 /* CreatorChannelReplyDetailContext.swift in Sources */, + CC0730042FF0700000A5BBA3 /* CreatorChannelReplyDetailDisplayItem.swift in Sources */, + CC0730052FF0700000A5BBA3 /* CreatorChannelReplyDetailTitleBar.swift in Sources */, + CC0730062FF0700000A5BBA3 /* CreatorChannelReplyDetailFeedView.swift in Sources */, + CC0730072FF0700000A5BBA3 /* CreatorChannelReplyDetailInputBar.swift in Sources */, + CC0730082FF0700000A5BBA3 /* CreatorChannelReplyDetailActionPopup.swift in Sources */, CC0103082FF0100000A5BBA3 /* CreatorChannelView.swift in Sources */, CC0103112FF0100000A5BBA3 /* CreatorChannelTitleBar.swift in Sources */, CC0103122FF0100000A5BBA3 /* CreatorChannelHeaderSection.swift in Sources */, diff --git a/SodaLive/Sources/V2/CreatorChannel/ReplyDetail/CreatorChannelReplyDetailView.swift b/SodaLive/Sources/V2/CreatorChannel/ReplyDetail/CreatorChannelReplyDetailView.swift new file mode 100644 index 00000000..f2bb4263 --- /dev/null +++ b/SodaLive/Sources/V2/CreatorChannel/ReplyDetail/CreatorChannelReplyDetailView.swift @@ -0,0 +1,68 @@ +import SwiftUI + +struct CreatorChannelReplyDetailView: View { + let context: CreatorChannelReplyDetailContext + let onFanTalkRefresh: (() -> Void)? + + @StateObject private var viewModel = CreatorChannelReplyDetailViewModel() + + var body: some View { + ZStack { + VStack(spacing: 0) { + CreatorChannelReplyDetailTitleBar { + AppState.shared.back() + } + + if let parentItem = viewModel.parentItem { + CreatorChannelReplyDetailFeedView( + parentItem: parentItem, + replies: viewModel.replies, + selectedActionItem: viewModel.selectedActionItem, + canEdit: viewModel.canEdit, + canDelete: viewModel.canDelete, + onTapAction: viewModel.selectActionItem, + onTapEdit: viewModel.beginEditing, + onTapDelete: viewModel.presentDeleteDialog, + onReplyAppear: viewModel.fetchNextCommunityRepliesIfNeeded + ) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else { + Spacer() + } + + CreatorChannelReplyDetailInputBar( + text: $viewModel.replyText, + isSendEnabled: viewModel.isSendEnabled && viewModel.isLoading == false, + isEditing: viewModel.isEditing, + onTapSend: viewModel.send, + onTapCancelEditing: viewModel.cancelEditing + ) + } + .background(Color.black.ignoresSafeArea()) + + if viewModel.isLoading { + LoadingView() + } + + if viewModel.isShowDeleteDialog { + SodaDialog( + title: I18n.Common.commentDeleteTitle, + desc: I18n.Common.confirmDeleteQuestion, + confirmButtonTitle: I18n.Common.delete, + confirmButtonAction: viewModel.confirmDelete, + cancelButtonTitle: I18n.Common.cancel, + cancelButtonAction: { + viewModel.isShowDeleteDialog = false + viewModel.deletingItem = nil + }, + textAlignment: .center + ) + } + } + .navigationBarBackButtonHidden(true) + .onAppear { + viewModel.configure(context: context, onFanTalkRefresh: onFanTalkRefresh) + } + .sodaToast(isPresented: $viewModel.isShowPopup, message: viewModel.errorMessage, autohideIn: 1) + } +}