Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a38d808
feat/#72 :: Sticker collection cell 생성
0Hooni Nov 24, 2024
41e10f9
feat/#72 :: 스티커를 위한 BottomSheetCollectionView 생성
0Hooni Nov 24, 2024
065ce49
feat/#72 :: BottomSheet present 스타일 지정
0Hooni Nov 24, 2024
2f081ef
feat/#72 :: CollectionView present 구현
0Hooni Nov 24, 2024
8590672
chore/#72 :: 불필요한 주석 제거
0Hooni Nov 24, 2024
13ea04b
feat/#72 :: StickerBottomSheet present 완료
0Hooni Nov 24, 2024
ad1a823
feat/#72 :: sticker bottom sheet 의존성 주입 추가
0Hooni Nov 24, 2024
d086e67
feat/#72 :: cell image 다운로드 코드 추가
0Hooni Nov 24, 2024
cb180a4
feat/#72 :: bottomSheet ViewModel 구현
0Hooni Nov 24, 2024
9153d11
chore/#72 :: 불필요한 코드 제거 및 FIXME 태그 추가
0Hooni Nov 24, 2024
d36c614
feat/#72 :: 스티커 탭 바인딩
0Hooni Nov 25, 2024
c05dcbe
feat/#72 :: delegate 메서드 스타일 변경 및 적용
0Hooni Nov 25, 2024
ffb6375
fix/#72 :: 불필요한 의존성 및 코드 제거
0Hooni Nov 25, 2024
c268f9c
feat/#72 :: Host코드와 동일 변경사항 반영을 위한 수정
0Hooni Nov 25, 2024
03cad54
chore/#72 :: 불필요한 코드 제거
0Hooni Nov 25, 2024
c428259
style/#72 :: @Published에서 Subject로 변경
0Hooni Nov 25, 2024
fc359f3
refactor/#72 :: CollectionView delegate 메서드 로직 수정
0Hooni Nov 25, 2024
b315533
Merge branch 'develop' into feat/#72-present-sticker-sheet
0Hooni Nov 25, 2024
6cce77e
fix/#72 :: PR 리뷰 반영
0Hooni Nov 26, 2024
47e5553
fix/#72 :: PR 리뷰 반영
0Hooni Nov 26, 2024
5ed57df
fix/#72 :: PR 리뷰 반영
0Hooni Nov 26, 2024
9d0f7db
fix/#72 :: PR 리뷰 반영
0Hooni Nov 26, 2024
d5d4d38
fix/#72 :: PR 리뷰 반영
0Hooni Nov 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,24 +1,31 @@
import UIKit
import PhotoGetherDomainInterface
import Combine
import UIKit

import BaseFeature
import DesignSystem
import PhotoGetherData
import PhotoGetherDomain
import PhotoGetherDomainInterface

public class EditPhotoRoomGuestViewController: BaseViewController, ViewControllerConfigure {
private let navigationView = UIView()
private let canvasScrollView = CanvasScrollView()
private let bottomView = EditPhotoGuestBottomView()
private let bottomSheetViewController: StickerBottomSheetViewController

private let input = PassthroughSubject<EditPhotoRoomGuestViewModel.Input, Never>()

private let viewModel: EditPhotoRoomGuestViewModel
private var stickerIdDictionary: [UUID: Int] = [:]

public init(
viewModel: EditPhotoRoomGuestViewModel
viewModel: EditPhotoRoomGuestViewModel,
bottomSheetViewController: StickerBottomSheetViewController
) {
self.viewModel = viewModel
self.bottomSheetViewController = bottomSheetViewController
super.init(nibName: nil, bundle: nil)
self.bottomSheetViewController.delegate = self
}

@available(*, unavailable)
Expand Down Expand Up @@ -100,12 +107,12 @@ public class EditPhotoRoomGuestViewController: BaseViewController, ViewControlle
.receive(on: RunLoop.main)
.sink { [weak self] event in
switch event {
case .emojiEntity(let emojiEntity):
self?.createStickerObject(by: emojiEntity)
case .stickerObjectList(let stickerList):
self?.updateCanvas(with: stickerList)
case .frameImage(let image):
self?.updateFrameImage(to: image)
case .stickerBottomSheetPresent:
self?.presentStickerBottomSheet()
}
}
.store(in: &cancellables)
Expand Down Expand Up @@ -186,6 +193,19 @@ public class EditPhotoRoomGuestViewController: BaseViewController, ViewControlle
let newIndex = canvasScrollView.imageView.subviews.count
stickerIdDictionary[sticker.id] = newIndex
}

private func presentStickerBottomSheet() {
self.present(bottomSheetViewController, animated: true)
}
}

extension EditPhotoRoomGuestViewController: StickerBottomSheetViewControllerDelegate {
func stickerBottomSheetViewController(
_ viewController: StickerBottomSheetViewController,
didTap emoji: EmojiEntity
) {
self.createStickerObject(by: emoji)
}
}

extension EditPhotoRoomGuestViewController: StickerViewActionDelegate {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,16 @@ public final class EditPhotoRoomGuestViewModel {
}

enum Output {
case emojiEntity(entity: EmojiEntity)
case stickerObjectList([StickerEntity])
case frameImage(image: UIImage)
case stickerBottomSheetPresent
}

private let frameImageGenerator: FrameImageGenerator
private let fetchEmojiListUseCase: FetchEmojiListUseCase
private let receiveStickerListUseCase: ReceiveStickerListUseCase
private let sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase

private var emojiList: [EmojiEntity] = [] // MARK: 추후 삭제 예정

private let owner = "GUEST" + UUID().uuidString.prefix(4) // MARK: 임시 값(추후 ConnectionClient에서 받아옴)

private let stickerObjectListSubject = CurrentValueSubject<[StickerEntity], Never>([])
Expand All @@ -32,20 +31,17 @@ public final class EditPhotoRoomGuestViewModel {

public init(
frameImageGenerator: FrameImageGenerator,
fetchEmojiListUseCase: FetchEmojiListUseCase,
receiveStickerListUseCase: ReceiveStickerListUseCase,
sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase
) {
self.frameImageGenerator = frameImageGenerator
self.fetchEmojiListUseCase = fetchEmojiListUseCase
self.receiveStickerListUseCase = receiveStickerListUseCase
self.sendStickerToRepositoryUseCase = sendStickerToRepositoryUseCase

bind()
}

private func bind() {
fetchEmojiList()

stickerObjectListSubject
.sink { [weak self] list in
self?.output.send(.stickerObjectList(list))
Expand All @@ -63,7 +59,7 @@ public final class EditPhotoRoomGuestViewModel {
input.sink { [weak self] event in
switch event {
case .stickerButtonDidTap:
self?.sendEmoji()
self?.presentStickerBottomSheet()
case .createSticker(let sticker):
self?.appendSticker(with: sticker)
self?.sendToRepository(type: .create, with: sticker)
Expand Down Expand Up @@ -134,18 +130,6 @@ public final class EditPhotoRoomGuestViewModel {
stickerObjectListSubject.send(currentStickerObjectList)
}

private func fetchEmojiList() {
fetchEmojiListUseCase.execute()
.sink { [weak self] emojiEntities in
self?.emojiList = emojiEntities
}
.store(in: &cancellables)
}

private func sendEmoji() {
output.send(.emojiEntity(entity: emojiList.randomElement()!))
}

private func sendToRepository(type: EventType, with sticker: StickerEntity) {
sendStickerToRepositoryUseCase.execute(type: type, sticker: sticker)
}
Expand All @@ -154,4 +138,8 @@ public final class EditPhotoRoomGuestViewModel {
let frameImage = frameImageGenerator.generate()
output.send(.frameImage(image: frameImage))
}

private func presentStickerBottomSheet() {
output.send(.stickerBottomSheetPresent)
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
import UIKit
import Combine
import UIKit

import BaseFeature
import DesignSystem
import PhotoGetherData
import PhotoGetherDomain
import PhotoGetherDomainInterface
import SharePhotoFeature

public class EditPhotoRoomHostViewController: BaseViewController, ViewControllerConfigure {
private let navigationView = UIView()
private let canvasScrollView = CanvasScrollView()
private let bottomView = EditPhotoHostBottomView()
private let bottomSheetViewController: StickerBottomSheetViewController

private let input = PassthroughSubject<EditPhotoRoomHostViewModel.Input, Never>()

private let viewModel: EditPhotoRoomHostViewModel
private var stickerIdDictionary: [UUID: Int] = [:]

public init(
viewModel: EditPhotoRoomHostViewModel
viewModel: EditPhotoRoomHostViewModel,
bottomSheetViewController: StickerBottomSheetViewController
) {
self.viewModel = viewModel
self.bottomSheetViewController = bottomSheetViewController
super.init(nibName: nil, bundle: nil)
self.bottomSheetViewController.delegate = self
}

required init?(coder: NSCoder) {
Expand Down Expand Up @@ -127,12 +135,12 @@ public class EditPhotoRoomHostViewController: BaseViewController, ViewController
.receive(on: RunLoop.main)
.sink { [weak self] event in
switch event {
case .emojiEntity(let emojiEntity):
self?.createStickerObject(by: emojiEntity)
case .stickerObjectList(let stickerList):
self?.updateCanvas(with: stickerList)
case .frameImage(let image):
self?.updateFrameImage(to: image)
case .presentStickerBottomSheet:
self?.presentStickerBottomSheet()
}
}
.store(in: &cancellables)
Expand Down Expand Up @@ -213,6 +221,19 @@ public class EditPhotoRoomHostViewController: BaseViewController, ViewController
let newIndex = canvasScrollView.imageView.subviews.count
stickerIdDictionary[sticker.id] = newIndex
}

private func presentStickerBottomSheet() {
self.present(bottomSheetViewController, animated: true)
}
}

extension EditPhotoRoomHostViewController: StickerBottomSheetViewControllerDelegate {
func stickerBottomSheetViewController(
_ viewController: StickerBottomSheetViewController,
didTap emoji: EmojiEntity
) {
self.createStickerObject(by: emoji)
}
}

extension EditPhotoRoomHostViewController: StickerViewActionDelegate {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@ public final class EditPhotoRoomHostViewModel {
}

enum Output {
case emojiEntity(entity: EmojiEntity)
case stickerObjectList([StickerEntity])
case frameImage(image: UIImage)
case presentStickerBottomSheet
}

private let frameImageGenerator: FrameImageGenerator
private let fetchEmojiListUseCase: FetchEmojiListUseCase
private let receiveStickerListUseCase: ReceiveStickerListUseCase
private let sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase

private var emojiList: [EmojiEntity] = [] // MARK: 추후 삭제 예정
private let owner = "Host" + UUID().uuidString.prefix(4) // MARK: 임시 값(추후 ConnectionClient에서 받아옴)

private let stickerObjectListSubject = CurrentValueSubject<[StickerEntity], Never>([])
Expand All @@ -32,20 +30,17 @@ public final class EditPhotoRoomHostViewModel {

public init(
frameImageGenerator: FrameImageGenerator,
fetchEmojiListUseCase: FetchEmojiListUseCase,
receiveStickerListUseCase: ReceiveStickerListUseCase,
sendStickerToRepositoryUseCase: SendStickerToRepositoryUseCase
) {
self.frameImageGenerator = frameImageGenerator
self.fetchEmojiListUseCase = fetchEmojiListUseCase
self.receiveStickerListUseCase = receiveStickerListUseCase
self.sendStickerToRepositoryUseCase = sendStickerToRepositoryUseCase

bind()
}

private func bind() {
fetchEmojiList()

stickerObjectListSubject
.sink { [weak self] list in
self?.output.send(.stickerObjectList(list))
Expand All @@ -63,7 +58,7 @@ public final class EditPhotoRoomHostViewModel {
input.sink { [weak self] event in
switch event {
case .stickerButtonDidTap:
self?.sendEmoji()
self?.presentStickerBottomSheet()
case .createSticker(let sticker):
self?.appendSticker(with: sticker)
self?.sendToRepository(type: .create, with: sticker)
Expand Down Expand Up @@ -133,19 +128,7 @@ public final class EditPhotoRoomHostViewModel {
currentStickerObjectList.append(sticker)
stickerObjectListSubject.send(currentStickerObjectList)
}

private func fetchEmojiList() {
fetchEmojiListUseCase.execute()
.sink { [weak self] emojiEntities in
self?.emojiList = emojiEntities
}
.store(in: &cancellables)
}

private func sendEmoji() {
output.send(.emojiEntity(entity: emojiList.randomElement()!))
}


private func sendToRepository(type: EventType, with sticker: StickerEntity) {
sendStickerToRepositoryUseCase.execute(type: type, sticker: sticker)
}
Expand All @@ -154,4 +137,8 @@ public final class EditPhotoRoomHostViewModel {
let frameImage = frameImageGenerator.generate()
output.send(.frameImage(image: frameImage))
}

private func presentStickerBottomSheet() {
output.send(.presentStickerBottomSheet)
}
}
Loading
Loading