Compare commits
No commits in common. "594bcc27ca242f542836104358b825a1a2364209" and "728510a72d35a3eb1483462d201cfde2654c47ca" have entirely different histories.
594bcc27ca
...
728510a72d
Before Width: | Height: | Size: 781 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_alarm_selected.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 804 B |
Before Width: | Height: | Size: 1.1 KiB |
|
@ -9,7 +9,7 @@
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "ic_blog_purple.png",
|
"filename" : "ic_headphones_purple.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/ic_headphones_purple 1.imageset/ic_headphones_purple.png
vendored
Normal file
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 830 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_instagram_purple.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.5 KiB |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_message_send.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 787 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_message_square_777.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 471 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_mic_paint.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 7.6 KiB |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_place_holder.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 70 KiB |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_website_purple.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 926 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "ic_youtube_play_purple.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 858 B |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "img_compleate_book.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 21 KiB |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "img_noti_mute.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 23 KiB |
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename" : "img_thumb_default.png",
|
|
||||||
"idiom" : "universal",
|
|
||||||
"scale" : "3x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,11 +5,11 @@
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "loading_1.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "ic_alarm.png",
|
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/loading/loading_1.imageset/loading_1.png
vendored
Normal file
After Width: | Height: | Size: 6.3 KiB |
|
@ -5,11 +5,11 @@
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "loading_2.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "ic_mute.png",
|
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/loading/loading_2.imageset/loading_2.png
vendored
Normal file
After Width: | Height: | Size: 3.7 KiB |
|
@ -5,11 +5,11 @@
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "loading_3.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "ic_kick_out.png",
|
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/loading/loading_3.imageset/loading_3.png
vendored
Normal file
After Width: | Height: | Size: 3.2 KiB |
|
@ -5,11 +5,11 @@
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "loading_4.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "ic_heart_777.png",
|
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/loading/loading_4.imageset/loading_4.png
vendored
Normal file
After Width: | Height: | Size: 5.1 KiB |
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "loading_5.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
SodaLive/Resources/Assets.xcassets/loading/loading_5.imageset/loading_5.png
vendored
Normal file
After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
@ -105,6 +105,4 @@ enum AppStep {
|
||||||
case profileUpdate(refresh: () -> Void)
|
case profileUpdate(refresh: () -> Void)
|
||||||
|
|
||||||
case followingList
|
case followingList
|
||||||
|
|
||||||
case orderListAll
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct ContentListItemView: View {
|
||||||
|
|
||||||
HStack(spacing: 13.3) {
|
HStack(spacing: 13.3) {
|
||||||
HStack(spacing: 6) {
|
HStack(spacing: 6) {
|
||||||
Image("ic_heart_777")
|
Image("ic_heart")
|
||||||
.resizable()
|
.resizable()
|
||||||
.frame(width: 13.3, height: 13.3)
|
.frame(width: 13.3, height: 13.3)
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,6 @@ final class ContentRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
func donation(contentId: Int, can: Int, comment: String) -> AnyPublisher<Response, MoyaError> {
|
func donation(contentId: Int, can: Int, comment: String) -> AnyPublisher<Response, MoyaError> {
|
||||||
return api.requestPublisher(.donation(request: AudioContentDonationRequest(contentId: contentId, donationCan: can, comment: comment)))
|
return api.requestPublisher(.donation(request: AudioContentDonationRequest(audioContentId: contentId, donationCan: can, comment: comment)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct AudioContentDonationRequest: Encodable {
|
struct AudioContentDonationRequest: Encodable {
|
||||||
let contentId: Int
|
let audioContentId: Int
|
||||||
let donationCan: Int
|
let donationCan: Int
|
||||||
let comment: String
|
let comment: String
|
||||||
let container: String = "ios"
|
let container: String = "ios"
|
||||||
|
|
|
@ -82,7 +82,7 @@ final class ContentModifyViewModel: ObservableObject {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
|
|
||||||
let request = ModifyContentRequest(
|
let request = ModifyContentRequest(
|
||||||
contentId: contentId,
|
audioContentId: contentId,
|
||||||
title: title != audioContent!.title ? title : nil,
|
title: title != audioContent!.title ? title : nil,
|
||||||
detail: detail != audioContent!.detail ? detail : nil,
|
detail: detail != audioContent!.detail ? detail : nil,
|
||||||
isAdult: isAdult,
|
isAdult: isAdult,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct ModifyContentRequest: Encodable {
|
struct ModifyContentRequest: Encodable {
|
||||||
let contentId: Int
|
let audioContentId: Int
|
||||||
let title: String?
|
let title: String?
|
||||||
let detail: String?
|
let detail: String?
|
||||||
let isAdult: Bool
|
let isAdult: Bool
|
||||||
|
|
|
@ -148,9 +148,6 @@ struct ContentView: View {
|
||||||
case .followingList:
|
case .followingList:
|
||||||
FollowCreatorView()
|
FollowCreatorView()
|
||||||
|
|
||||||
case .orderListAll:
|
|
||||||
OrderListAllView()
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
EmptyView()
|
EmptyView()
|
||||||
.frame(width: 0, height: 0, alignment: .topLeading)
|
.frame(width: 0, height: 0, alignment: .topLeading)
|
||||||
|
|
|
@ -88,7 +88,7 @@ struct LiveRoomInfoEditDialog: View {
|
||||||
.clipped()
|
.clipped()
|
||||||
.cornerRadius(10)
|
.cornerRadius(10)
|
||||||
} else {
|
} else {
|
||||||
Image("ic_logo")
|
Image("ic_logo_220")
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFit()
|
.scaledToFit()
|
||||||
.frame(width: 80, height: 116.8)
|
.frame(width: 80, height: 116.8)
|
||||||
|
|
|
@ -71,11 +71,7 @@ struct CanCardView_Previews: PreviewProvider {
|
||||||
websiteUrl: "",
|
websiteUrl: "",
|
||||||
blogUrl: "",
|
blogUrl: "",
|
||||||
liveReservationCount: 0,
|
liveReservationCount: 0,
|
||||||
isAuth: false,
|
isAuth: false
|
||||||
orderList: GetAudioContentOrderListResponse(
|
|
||||||
totalCount: 0,
|
|
||||||
items: []
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
refresh: {}
|
refresh: {}
|
||||||
)
|
)
|
||||||
|
|
|
@ -88,11 +88,7 @@ struct MyInfoCardView_Previews: PreviewProvider {
|
||||||
websiteUrl: "",
|
websiteUrl: "",
|
||||||
blogUrl: "",
|
blogUrl: "",
|
||||||
liveReservationCount: 0,
|
liveReservationCount: 0,
|
||||||
isAuth: false,
|
isAuth: false
|
||||||
orderList: GetAudioContentOrderListResponse(
|
|
||||||
totalCount: 0,
|
|
||||||
items: []
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
refresh: {}
|
refresh: {}
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,6 +18,5 @@ struct MyPageResponse: Decodable {
|
||||||
let blogUrl: String?
|
let blogUrl: String?
|
||||||
let liveReservationCount: Int
|
let liveReservationCount: Int
|
||||||
let isAuth: Bool
|
let isAuth: Bool
|
||||||
let orderList: GetAudioContentOrderListResponse
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,11 +94,6 @@ struct MyPageView: View {
|
||||||
ReservationStatusView(data: data)
|
ReservationStatusView(data: data)
|
||||||
.padding(.top, 33.3)
|
.padding(.top, 33.3)
|
||||||
|
|
||||||
if data.orderList.totalCount > 0 {
|
|
||||||
OrderListView(items: data.orderList.items)
|
|
||||||
.padding(.top, 40)
|
|
||||||
}
|
|
||||||
|
|
||||||
ServiceCenterButtonView()
|
ServiceCenterButtonView()
|
||||||
.padding(.top, 40)
|
.padding(.top, 40)
|
||||||
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
//
|
|
||||||
// GetAudioContentOrderListResponse.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 2023/08/24.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
struct GetAudioContentOrderListResponse: Decodable {
|
|
||||||
let totalCount: Int
|
|
||||||
let items: [GetAudioContentOrderListItem]
|
|
||||||
}
|
|
||||||
|
|
||||||
struct GetAudioContentOrderListItem: Decodable {
|
|
||||||
let contentId: Int
|
|
||||||
let coverImageUrl: String
|
|
||||||
let title: String
|
|
||||||
let themeStr: String
|
|
||||||
let duration: String?
|
|
||||||
let isAdult: Bool
|
|
||||||
let orderType: OrderType
|
|
||||||
let likeCount: Int
|
|
||||||
let commentCount: Int
|
|
||||||
}
|
|
|
@ -1,82 +0,0 @@
|
||||||
//
|
|
||||||
// OrderListAllView.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 2023/08/24.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct OrderListAllView: View {
|
|
||||||
|
|
||||||
@StateObject var viewModel = OrderListAllViewModel()
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
BaseView(isLoading: $viewModel.isLoading) {
|
|
||||||
VStack(spacing: 0) {
|
|
||||||
HStack(spacing: 0) {
|
|
||||||
Button {
|
|
||||||
AppState.shared.back()
|
|
||||||
} label: {
|
|
||||||
Image("ic_back")
|
|
||||||
.resizable()
|
|
||||||
.frame(width: 20, height: 20)
|
|
||||||
|
|
||||||
Text("구매목록")
|
|
||||||
.font(.custom(Font.bold.rawValue, size: 18.3))
|
|
||||||
.foregroundColor(Color(hex: "eeeeee"))
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer()
|
|
||||||
}
|
|
||||||
.padding(.horizontal, 13.3)
|
|
||||||
.frame(height: 50)
|
|
||||||
.background(Color.black)
|
|
||||||
|
|
||||||
ScrollViewReader { reader in
|
|
||||||
ScrollView(.vertical, showsIndicators: false) {
|
|
||||||
LazyVStack(spacing: 10.7) {
|
|
||||||
ScrollerToTop(reader: reader, scrollOnChange: $viewModel.scrollToTop)
|
|
||||||
|
|
||||||
ForEach(0..<viewModel.orderList.count, id: \.self) { index in
|
|
||||||
let item = viewModel.orderList[index]
|
|
||||||
OrderListItemView(item: item)
|
|
||||||
.contentShape(Rectangle())
|
|
||||||
.onTapGesture {
|
|
||||||
AppState
|
|
||||||
.shared
|
|
||||||
.setAppStep(step: .contentDetail(contentId: item.contentId))
|
|
||||||
}
|
|
||||||
.padding(.horizontal, 13.3)
|
|
||||||
.onAppear {
|
|
||||||
if index == viewModel.orderList.count - 1 {
|
|
||||||
viewModel.getOrderList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.padding(.top, 13.3)
|
|
||||||
}
|
|
||||||
.onAppear {
|
|
||||||
viewModel.getOrderList()
|
|
||||||
}
|
|
||||||
.popup(isPresented: $viewModel.isShowPopup, type: .toast, position: .bottom, autohideIn: 2) {
|
|
||||||
HStack {
|
|
||||||
Spacer()
|
|
||||||
Text(viewModel.errorMessage)
|
|
||||||
.padding(.vertical, 13.3)
|
|
||||||
.frame(width: screenSize().width - 66.7, alignment: .center)
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 12))
|
|
||||||
.background(Color(hex: "9970ff"))
|
|
||||||
.foregroundColor(Color.white)
|
|
||||||
.multilineTextAlignment(.leading)
|
|
||||||
.cornerRadius(20)
|
|
||||||
.padding(.bottom, 66.7)
|
|
||||||
Spacer()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
//
|
|
||||||
// OrderListAllViewModel.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 2023/08/24.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import Combine
|
|
||||||
|
|
||||||
final class OrderListAllViewModel: ObservableObject {
|
|
||||||
|
|
||||||
private let repository = ContentRepository()
|
|
||||||
private var subscription = Set<AnyCancellable>()
|
|
||||||
|
|
||||||
@Published var errorMessage = ""
|
|
||||||
@Published var isShowPopup = false
|
|
||||||
@Published var isLoading = false
|
|
||||||
|
|
||||||
@Published var orderList = [GetAudioContentOrderListItem]()
|
|
||||||
@Published var scrollToTop = false
|
|
||||||
|
|
||||||
var page = 1
|
|
||||||
var isLast = false
|
|
||||||
private let pageSize = 10
|
|
||||||
|
|
||||||
func getOrderList() {
|
|
||||||
if (!isLast && !isLoading) {
|
|
||||||
isLoading = true
|
|
||||||
|
|
||||||
repository.getOrderList(page: page, size: pageSize)
|
|
||||||
.sink { result in
|
|
||||||
switch result {
|
|
||||||
case .finished:
|
|
||||||
DEBUG_LOG("finish")
|
|
||||||
case .failure(let error):
|
|
||||||
ERROR_LOG(error.localizedDescription)
|
|
||||||
}
|
|
||||||
} receiveValue: { [unowned self] response in
|
|
||||||
let responseData = response.data
|
|
||||||
|
|
||||||
do {
|
|
||||||
let jsonDecoder = JSONDecoder()
|
|
||||||
let decoded = try jsonDecoder.decode(ApiResponse<GetAudioContentOrderListResponse>.self, from: responseData)
|
|
||||||
|
|
||||||
if let data = decoded.data, decoded.success {
|
|
||||||
if page == 1 {
|
|
||||||
self.orderList.removeAll()
|
|
||||||
self.scrollToTop.toggle()
|
|
||||||
}
|
|
||||||
|
|
||||||
if !data.items.isEmpty {
|
|
||||||
page += 1
|
|
||||||
self.orderList.append(contentsOf: data.items)
|
|
||||||
} else {
|
|
||||||
isLast = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if let message = decoded.message {
|
|
||||||
self.errorMessage = message
|
|
||||||
} else {
|
|
||||||
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
|
||||||
}
|
|
||||||
|
|
||||||
self.isShowPopup = true
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
|
||||||
self.isShowPopup = true
|
|
||||||
}
|
|
||||||
|
|
||||||
self.isLoading = false
|
|
||||||
}
|
|
||||||
.store(in: &subscription)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
//
|
|
||||||
// OrderListItemView.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 2023/08/24.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
import Kingfisher
|
|
||||||
|
|
||||||
struct OrderListItemView: View {
|
|
||||||
|
|
||||||
let item: GetAudioContentOrderListItem
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
VStack(spacing: 12) {
|
|
||||||
HStack(spacing: 10) {
|
|
||||||
KFImage(URL(string: item.coverImageUrl))
|
|
||||||
.resizable()
|
|
||||||
.frame(width: 66.7, height: 66.7, alignment: .center)
|
|
||||||
.clipped()
|
|
||||||
.cornerRadius(5.3)
|
|
||||||
|
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
|
||||||
HStack(spacing: 8) {
|
|
||||||
Text(item.themeStr)
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 8))
|
|
||||||
.foregroundColor(Color(hex: "3bac6a"))
|
|
||||||
.padding(2.6)
|
|
||||||
.background(Color(hex: "28312b"))
|
|
||||||
.cornerRadius(2.6)
|
|
||||||
|
|
||||||
Text(item.duration!)
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 8))
|
|
||||||
.foregroundColor(Color(hex: "777777"))
|
|
||||||
.padding(2.6)
|
|
||||||
.background(Color(hex: "222222"))
|
|
||||||
.cornerRadius(2.6)
|
|
||||||
}
|
|
||||||
|
|
||||||
Text(item.title)
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 12))
|
|
||||||
.foregroundColor(Color(hex: "d2d2d2"))
|
|
||||||
.fixedSize(horizontal: false, vertical: true)
|
|
||||||
.padding(.top, 2.6)
|
|
||||||
.padding(.bottom, 6.7)
|
|
||||||
|
|
||||||
HStack(spacing: 13.3) {
|
|
||||||
HStack(spacing: 6) {
|
|
||||||
Image("ic_heart_777")
|
|
||||||
.resizable()
|
|
||||||
.frame(width: 13.3, height: 13.3)
|
|
||||||
|
|
||||||
Text("\(item.likeCount)")
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 10))
|
|
||||||
.foregroundColor(Color(hex: "777777"))
|
|
||||||
}
|
|
||||||
|
|
||||||
HStack(spacing: 6) {
|
|
||||||
Image("ic_message_square_777")
|
|
||||||
.resizable()
|
|
||||||
.frame(width: 13.3, height: 13.3)
|
|
||||||
|
|
||||||
Text("\(item.commentCount)")
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 10))
|
|
||||||
.foregroundColor(Color(hex: "777777"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer()
|
|
||||||
|
|
||||||
Text(item.orderType == .RENTAL ? "대여중" : "소장중")
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 10.3))
|
|
||||||
.foregroundColor(item.orderType == .RENTAL ? .white : .black)
|
|
||||||
.padding(.horizontal, 5.3)
|
|
||||||
.padding(.vertical, 2.7)
|
|
||||||
.background(Color(hex: item.orderType == .RENTAL ? "660fd4" : "b1ef2c"))
|
|
||||||
.cornerRadius(2.6)
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle()
|
|
||||||
.foregroundColor(Color(hex: "595959"))
|
|
||||||
.frame(maxWidth: .infinity)
|
|
||||||
.frame(height: 0.5)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
//
|
|
||||||
// OrderListView.swift
|
|
||||||
// SodaLive
|
|
||||||
//
|
|
||||||
// Created by klaus on 2023/08/24.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct OrderListView: View {
|
|
||||||
let items: [GetAudioContentOrderListItem]
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
VStack(spacing: 0) {
|
|
||||||
HStack(spacing: 0) {
|
|
||||||
Text("구매목록")
|
|
||||||
.font(.custom(Font.bold.rawValue, size: 18))
|
|
||||||
.foregroundColor(Color(hex: "eeeeee"))
|
|
||||||
|
|
||||||
Spacer()
|
|
||||||
|
|
||||||
Text("전체보기")
|
|
||||||
.font(.custom(Font.medium.rawValue, size: 11))
|
|
||||||
.foregroundColor(Color(hex: "bbbbbb"))
|
|
||||||
.onTapGesture {
|
|
||||||
AppState.shared.setAppStep(step: .orderListAll)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VStack(spacing: 13.3) {
|
|
||||||
ForEach(0..<items.count, id: \.self) { index in
|
|
||||||
let item = items[index]
|
|
||||||
OrderListItemView(item: item)
|
|
||||||
.contentShape(Rectangle())
|
|
||||||
.onTapGesture {
|
|
||||||
AppState
|
|
||||||
.shared
|
|
||||||
.setAppStep(step: .contentDetail(contentId: item.contentId))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.padding(.top, 26.7)
|
|
||||||
}
|
|
||||||
.padding(.horizontal, 13.3)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -61,11 +61,7 @@ struct ReservationStatusView_Previews: PreviewProvider {
|
||||||
websiteUrl: "",
|
websiteUrl: "",
|
||||||
blogUrl: "",
|
blogUrl: "",
|
||||||
liveReservationCount: 0,
|
liveReservationCount: 0,
|
||||||
isAuth: false,
|
isAuth: false
|
||||||
orderList: GetAudioContentOrderListResponse(
|
|
||||||
totalCount: 0,
|
|
||||||
items: []
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,15 +49,16 @@ struct SignUpView: View {
|
||||||
Image(uiImage: selectedImage)
|
Image(uiImage: selectedImage)
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFill()
|
.scaledToFill()
|
||||||
.frame(width: 80, height: 80, alignment: .top)
|
.frame(width: 80, height: 116.8, alignment: .top)
|
||||||
.clipShape(Circle())
|
.background(Color(hex: "3e3358"))
|
||||||
|
.cornerRadius(10)
|
||||||
} else {
|
} else {
|
||||||
Image("ic_logo")
|
Image("ic_logo")
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFill()
|
.scaledToFill()
|
||||||
.frame(width: 80, height: 80, alignment: .top)
|
.frame(width: 80, height: 116.8, alignment: .top)
|
||||||
.background(Color(hex: "3e3358"))
|
.background(Color(hex: "3e3358"))
|
||||||
.clipShape(Circle())
|
.cornerRadius(10)
|
||||||
}
|
}
|
||||||
|
|
||||||
Image("ic_camera")
|
Image("ic_camera")
|
||||||
|
|