diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/fantalk/detail/CreatorChannelFanTalkDetailUiModels.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/fantalk/detail/CreatorChannelFanTalkDetailUiModels.kt
new file mode 100644
index 00000000..52395b08
--- /dev/null
+++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/fantalk/detail/CreatorChannelFanTalkDetailUiModels.kt
@@ -0,0 +1,101 @@
+package kr.co.vividnext.sodalive.v2.creator.channel.fantalk.detail
+
+import android.os.Parcelable
+import androidx.annotation.StringRes
+import kotlinx.parcelize.Parcelize
+import kr.co.vividnext.sodalive.R
+import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.model.CreatorChannelFanTalkReplyUiModel
+import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.model.CreatorChannelFanTalkRightAction
+import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.model.CreatorChannelFanTalkUiModel
+
+@Parcelize
+data class CreatorChannelFanTalkDetailPayload(
+ val fanTalkId: Long,
+ val writerId: Long,
+ val writerNickname: String,
+ val writerProfileImageUrl: String,
+ val content: String,
+ val createdAtText: String,
+ val reply: CreatorChannelFanTalkDetailReplyPayload?,
+ val showEdit: Boolean,
+ val showDelete: Boolean
+) : Parcelable {
+ fun toUiModel(): CreatorChannelFanTalkUiModel = CreatorChannelFanTalkUiModel(
+ fanTalkId = fanTalkId,
+ writerId = writerId,
+ writerNickname = writerNickname,
+ writerProfileImageUrl = writerProfileImageUrl,
+ content = content,
+ createdAtText = createdAtText,
+ reply = reply?.toUiModel(),
+ rightAction = CreatorChannelFanTalkRightAction.OwnerMore(showEdit = showEdit, showDelete = showDelete)
+ )
+}
+
+@Parcelize
+data class CreatorChannelFanTalkDetailReplyPayload(
+ val fanTalkId: Long,
+ val writerId: Long,
+ val writerNickname: String,
+ val writerProfileImageUrl: String,
+ val content: String,
+ val createdAtText: String
+) : Parcelable {
+ fun toUiModel(): CreatorChannelFanTalkReplyUiModel = CreatorChannelFanTalkReplyUiModel(
+ fanTalkId = fanTalkId,
+ writerId = writerId,
+ writerNickname = writerNickname,
+ writerProfileImageUrl = writerProfileImageUrl,
+ content = content,
+ createdAtText = createdAtText
+ )
+}
+
+fun CreatorChannelFanTalkUiModel.toFanTalkDetailPayload(): CreatorChannelFanTalkDetailPayload {
+ val ownerMore = rightAction as? CreatorChannelFanTalkRightAction.OwnerMore
+ return CreatorChannelFanTalkDetailPayload(
+ fanTalkId = fanTalkId,
+ writerId = writerId,
+ writerNickname = writerNickname,
+ writerProfileImageUrl = writerProfileImageUrl,
+ content = content,
+ createdAtText = createdAtText,
+ reply = reply?.toFanTalkDetailReplyPayload(),
+ showEdit = ownerMore?.showEdit == true,
+ showDelete = ownerMore?.showDelete == true
+ )
+}
+
+fun CreatorChannelFanTalkReplyUiModel.toFanTalkDetailReplyPayload(): CreatorChannelFanTalkDetailReplyPayload {
+ return CreatorChannelFanTalkDetailReplyPayload(
+ fanTalkId = fanTalkId,
+ writerId = writerId,
+ writerNickname = writerNickname,
+ writerProfileImageUrl = writerProfileImageUrl,
+ content = content,
+ createdAtText = createdAtText
+ )
+}
+
+data class CreatorChannelFanTalkReplacementModalUiModel(
+ @StringRes val titleResId: Int = R.string.screen_user_profile_reply_edit,
+ @StringRes val descriptionResId: Int = R.string.creator_channel_fantalk_reply_replace_description,
+ @StringRes val cancelResId: Int = R.string.cancel,
+ @StringRes val confirmResId: Int = R.string.confirm
+)
+
+sealed interface CreatorChannelFanTalkDetailEditTarget {
+ data class Reply(val replyFanTalkId: Long) : CreatorChannelFanTalkDetailEditTarget
+}
+
+sealed interface CreatorChannelFanTalkDetailUiState {
+ data class Content(
+ val parentFanTalk: CreatorChannelFanTalkUiModel,
+ val reply: CreatorChannelFanTalkReplyUiModel?,
+ val replyInput: String = "",
+ val isSubmitting: Boolean = false,
+ val editingTarget: CreatorChannelFanTalkDetailEditTarget? = null
+ ) : CreatorChannelFanTalkDetailUiState {
+ val isSendEnabled: Boolean = replyInput.trim().isNotEmpty() && !isSubmitting
+ }
+}
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 7b71a160..1761cc7a 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -1018,6 +1018,7 @@
Edit reply
Submit
Write a reply
+ The existing reply will be replaced with the new reply.\nDo you want to edit it?
Follower list
All
Invalid request.\ntry again.
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 7b3bcbbf..ba2bbf52 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1018,6 +1018,7 @@
返信修正
投稿
返信を書く
+ 既存の返信が新しい返信に置き換えられます。\n修正しますか?
フォロワーリスト
全
無効なリクエストです。\n恐れ入りますが、もう一度お試しください。
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5e73da2e..7e5a9950 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1017,6 +1017,7 @@
답글 수정
등록
답글 쓰기
+ 기존 답글이 신규 답글로 대체됩니다.\n수정하시겠어요?
팔로워 리스트
전체
잘못된 요청입니다.\n다시 시도해 주세요.