feat(chat-room): 상단 notice 숨기기 기능 구현
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
//
|
|
||||||
// ChatRoomHeaderView.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 9/3/25.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct ChatRoomHeaderView: View {
|
|
||||||
var body: some View {
|
|
||||||
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#Preview {
|
|
||||||
ChatRoomHeaderView()
|
|
||||||
}
|
|
||||||
@@ -91,28 +91,31 @@ struct ChatRoomView: View {
|
|||||||
.padding(.vertical, 8)
|
.padding(.vertical, 8)
|
||||||
.frame(width: screenSize().width, height: 60)
|
.frame(width: screenSize().width, height: 60)
|
||||||
|
|
||||||
HStack(spacing: 8) {
|
if !viewModel.isHideNotice {
|
||||||
Image(systemName: "info.circle.fill")
|
HStack(spacing: 8) {
|
||||||
.resizable()
|
Image(systemName: "info.circle.fill")
|
||||||
.frame(width: 20, height: 20)
|
.resizable()
|
||||||
|
.frame(width: 20, height: 20)
|
||||||
Text(
|
|
||||||
viewModel.characterType == .Character
|
Text(
|
||||||
? "보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다."
|
viewModel.characterType == .Character
|
||||||
: "AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다."
|
? "보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다."
|
||||||
)
|
: "AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다."
|
||||||
.font(.custom(Font.preRegular.rawValue, size: 12))
|
)
|
||||||
.foregroundColor(.white)
|
.font(.custom(Font.preRegular.rawValue, size: 12))
|
||||||
|
.foregroundColor(.white)
|
||||||
Image(systemName: "chevron.up")
|
|
||||||
.resizable()
|
Image(systemName: "chevron.up")
|
||||||
.scaledToFit()
|
.resizable()
|
||||||
.frame(width: 20)
|
.scaledToFit()
|
||||||
|
.frame(width: 20)
|
||||||
|
.onTapGesture { viewModel.isHideNotice = true }
|
||||||
|
}
|
||||||
|
.padding(12)
|
||||||
|
.background(Color(hex: "13181B").opacity(0.7))
|
||||||
|
.cornerRadius(16)
|
||||||
|
.frame(width: screenSize().width - 48)
|
||||||
}
|
}
|
||||||
.padding(12)
|
|
||||||
.background(Color(hex: "13181B").opacity(0.7))
|
|
||||||
.cornerRadius(16)
|
|
||||||
.frame(width: screenSize().width - 48)
|
|
||||||
|
|
||||||
GeometryReader { geometry in
|
GeometryReader { geometry in
|
||||||
ScrollViewReader { proxy in
|
ScrollViewReader { proxy in
|
||||||
|
|||||||
@@ -22,7 +22,11 @@ final class ChatRoomViewModel: ObservableObject {
|
|||||||
@Published private(set) var characterName: String = "Character Name"
|
@Published private(set) var characterName: String = "Character Name"
|
||||||
@Published private(set) var characterType: CharacterType = .Character
|
@Published private(set) var characterType: CharacterType = .Character
|
||||||
@Published private(set) var chatRoomBgImageUrl: String? = nil
|
@Published private(set) var chatRoomBgImageUrl: String? = nil
|
||||||
@Published private(set) var roomId: Int = 0
|
@Published private(set) var roomId: Int = 0 {
|
||||||
|
didSet {
|
||||||
|
isHideNotice = UserDefaults.standard.bool(forKey: noticeUserDefaultsKey())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Published private(set) var countdownText: String = "00:00:00"
|
@Published private(set) var countdownText: String = "00:00:00"
|
||||||
@Published private(set) var showQuotaNoticeView: Bool = false
|
@Published private(set) var showQuotaNoticeView: Bool = false
|
||||||
@@ -47,6 +51,11 @@ final class ChatRoomViewModel: ObservableObject {
|
|||||||
@Published var isShowingChatSettingsView = false
|
@Published var isShowingChatSettingsView = false
|
||||||
@Published var isShowingChangeBgView = false
|
@Published var isShowingChangeBgView = false
|
||||||
@Published var isShowingChatResetConfirmDialog = false
|
@Published var isShowingChatResetConfirmDialog = false
|
||||||
|
@Published var isHideNotice = false {
|
||||||
|
didSet {
|
||||||
|
UserDefaults.standard.set(isHideNotice, forKey: noticeUserDefaultsKey())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var ownedImageUrls: [String] {
|
var ownedImageUrls: [String] {
|
||||||
return messages
|
return messages
|
||||||
@@ -362,6 +371,10 @@ final class ChatRoomViewModel: ObservableObject {
|
|||||||
chatRoomBgImageId = imageItem.id
|
chatRoomBgImageId = imageItem.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func noticeUserDefaultsKey() -> String {
|
||||||
|
return "chat_notice_hidden_room_\(roomId)"
|
||||||
|
}
|
||||||
|
|
||||||
private func resetData() {
|
private func resetData() {
|
||||||
characterProfileUrl = ""
|
characterProfileUrl = ""
|
||||||
characterName = "Character Name"
|
characterName = "Character Name"
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
//
|
|
||||||
// DisclaimerView.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 9/3/25.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct DisclaimerView: View {
|
|
||||||
var body: some View {
|
|
||||||
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#Preview {
|
|
||||||
DisclaimerView()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user