Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

프로필 해시태그 편집 시 기존 해시태그 표시 #372

Merged
merged 2 commits into from
Dec 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -8,7 +8,7 @@

import UIKit

enum Languages: String, CaseIterable, Hashtag {
enum Language: String, CaseIterable, Hashtag {
case cLang = "c"
case cShop
case cpp
Expand All @@ -29,30 +29,30 @@ enum Languages: String, CaseIterable, Hashtag {
case visualBasic

static func randomImageID() -> String {
guard let id = Languages.allCases.randomElement()?.id else { return "swift" }
guard let id = Language.allCases.randomElement()?.id else { return "swift" }
return id
}

static func idToHashtag(id: String) -> Hashtag? {
switch id {
case "c": return Languages.cLang
case "cShop": return Languages.cShop
case "cpp": return Languages.cpp
case "dart": return Languages.dart
case "go": return Languages.goLang
case "haskell": return Languages.haskell
case "javaScript": return Languages.javaScript
case "kotlin": return Languages.kotlin
case "matlab": return Languages.matlab
case "objectC": return Languages.objectC
case "php": return Languages.php
case "python": return Languages.python
case "r": return Languages.rLang
case "ruby": return Languages.ruby
case "rust": return Languages.rust
case "scratch": return Languages.scratch
case "swift": return Languages.swift
case "visualBasic": return Languages.visualBasic
case "c": return Language.cLang
case "cShop": return Language.cShop
case "cpp": return Language.cpp
case "dart": return Language.dart
case "go": return Language.goLang
case "haskell": return Language.haskell
case "javaScript": return Language.javaScript
case "kotlin": return Language.kotlin
case "matlab": return Language.matlab
case "objectC": return Language.objectC
case "php": return Language.php
case "python": return Language.python
case "r": return Language.rLang
case "ruby": return Language.ruby
case "rust": return Language.rust
case "scratch": return Language.scratch
case "swift": return Language.swift
case "visualBasic": return Language.visualBasic
default: return nil
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ struct HashtagDataSource: HashtagDataSourceProtocol {
}

private func loadLanguage() -> [Hashtag] {
return Languages.allCases
return Language.allCases
}

private func loadCareer() -> [Hashtag] {
Expand Down
1 change: 0 additions & 1 deletion Mogakco/Sources/Presentation/Chat/View/ChatCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ final class ChatCell: UICollectionViewCell, Identifiable {
$0.isScrollEnabled = false
$0.isEditable = false
}

let bubbleContainer = UIView().then {
$0.backgroundColor = .mogakcoColor.primarySecondary
$0.layer.cornerRadius = 8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ final class HashtagCoordinator: BaseCoordinator<HashtagCoordinatorResult> {

func showHashtag() {
guard let viewModel = DIContainer.shared.container.resolve(HashtagFilterViewModel.self) else { return }
viewModel.selectedHashtag = selectedHashtag
viewModel.selectedHashtags = selectedHashtag

viewModel.finish
.map { HashtagCoordinatorResult.finish($0) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ final class ProfileCoordinator: BaseCoordinator<ProfileCoordinatorResult> {
switch $0 {
case .editProfile:
self?.showEditProfile()
case .editHashtag(let kind):
self?.showHashtag(kind: kind, selectedHashtag: [])
case .chatRoom(let id):
case let .editHashtag(kind: kind, selectedHashtags: selectedHashtags):
self?.showHashtag(kind: kind, selectedHashtags: selectedHashtags)
case let .chatRoom(id):
self?.showChatRoom(id: id)
case .setting(let email):
case let .setting(email):
self?.setting(email: email)
case .back:
self?.finish.onNext(.back)
Expand Down Expand Up @@ -154,9 +154,9 @@ final class ProfileCoordinator: BaseCoordinator<ProfileCoordinatorResult> {

// MARK: - 프로필 해시태그 수정

func showHashtag(kind: KindHashtag, selectedHashtag: [Hashtag]) {
func showHashtag(kind: KindHashtag, selectedHashtags: [Hashtag]) {
guard let viewModel = DIContainer.shared.container.resolve(HashtagEditViewModel.self) else { return }
viewModel.selectedHashtag = selectedHashtag
viewModel.selectedHashtags = selectedHashtags

viewModel.finish
.subscribe(onNext: { [weak self] in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ final class AnimationImageView: UIView {
}

private func configRandomImage() {
imageView.image = UIImage(named: Languages.randomImageID() )
imageView.image = UIImage(named: Language.randomImageID() )
addSubview(imageView)
imageView.snp.makeConstraints {
$0.edges.equalToSuperview()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class HashtagEditViewModel: HashtagViewModel {
}

private func tapButton() {
let hashtagTitles = selectedHashtag.map { $0.id }
let hashtagTitles = selectedHashtags.map { $0.id }
let changeProfile: Observable<Void>

switch kind {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class HashtagFilterViewModel: HashtagViewModel {

input.nextButtonTapped
.subscribe(onNext: { [weak self] in
let selectedHashtag = self?.selectedHashtag ?? []
let selectedHashtag = self?.selectedHashtags ?? []
self?.finish.onNext(selectedHashtag)
})
.disposed(by: disposeBag)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class HashtagSelectedViewModel: HashtagViewModel {
input.nextButtonTapped
.withUnretained(self)
.filter { $0.0.kind == .language }
.map { HashtagSelectedeNavigation.next($0.0.selectedHashtag) }
.map { HashtagSelectedeNavigation.next($0.0.selectedHashtags) }
.bind(to: navigation)
.disposed(by: disposeBag)

Expand All @@ -48,7 +48,7 @@ class HashtagSelectedViewModel: HashtagViewModel {

private func signup() {
guard let languageProps = languageProps else { return }
let careers = selectedHashtag.map { $0.id }
let careers = selectedHashtags.map { $0.id }
let signupProps = languageProps.toSignupProps(careers: careers)
signUseCase?.signup(signupProps: signupProps)
.subscribe { [weak self] _ in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class HashtagViewModel: ViewModel {

var hashTagUsecase: HashtagUseCaseProtocol?
var disposeBag = DisposeBag()
var selectedHashtag: [Hashtag] = []
var selectedHashtags: [Hashtag] = []
let badgeList = BehaviorSubject<[Hashtag]>(value: [])
var kind: KindHashtag = .language

Expand Down Expand Up @@ -70,7 +70,7 @@ class HashtagViewModel: ViewModel {

func isSelected(index: Int) -> Bool {
guard let hashtag = cellInfo(index: index) else { return false }
if selectedHashtag.contains(where: { $0.id == hashtag.id }) { return true }
if selectedHashtags.contains(where: { $0.id == hashtag.id }) { return true }
return false
}

Expand All @@ -85,10 +85,10 @@ class HashtagViewModel: ViewModel {
private func selectHashtag(index: Int) {
guard let hashTag = cellInfo(index: index) else { return }

if let removeIndex = selectedHashtag.firstIndex(where: { $0.id == hashTag.id }) {
selectedHashtag.remove(at: removeIndex)
if let removeIndex = selectedHashtags.firstIndex(where: { $0.id == hashTag.id }) {
selectedHashtags.remove(at: removeIndex)
} else {
selectedHashtag.append(hashTag)
selectedHashtags.append(hashTag)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import RxSwift

enum ProfileNavigation {
case editProfile
case editHashtag(kind: KindHashtag)
case editHashtag(kind: KindHashtag, selectedHashtags: [Hashtag])
case chatRoom(id: String)
case setting(email: String)
case back
Expand Down Expand Up @@ -83,7 +83,7 @@ final class ProfileViewModel: ViewModel {
introduce: user.compactMap { $0?.introduce }.asDriver(onErrorJustReturn: ""),
languages: user
.compactMap { $0?.languages }
.map { $0.compactMap { Languages.idToHashtag(id: $0) } }
.map { $0.compactMap { Language.idToHashtag(id: $0) } }
.asDriver(onErrorJustReturn: []),
careers: user
.compactMap { $0?.careers }
Expand Down Expand Up @@ -155,7 +155,18 @@ final class ProfileViewModel: ViewModel {
.disposed(by: disposeBag)

input.hashtagEditButtonTapped
.map { .editHashtag(kind: $0) }
.withLatestFrom(user.compactMap { $0 }) { ($0, $1) }
.map { type, user -> (KindHashtag, [Hashtag]) in
switch type {
case .language:
return (type, user.languages.compactMap { Language(rawValue: $0) })
case .career:
return (type, user.careers.compactMap { Career(rawValue: $0) })
case .category:
return (type, user.categorys.compactMap { Category(rawValue: $0) })
}
}
.map { .editHashtag(kind: $0.0, selectedHashtags: $0.1) }
.bind(to: navigation)
.disposed(by: disposeBag)

Expand Down
2 changes: 1 addition & 1 deletion Mogakco/Sources/Presentation/Study/View/StudyCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ final class StudyCell: UICollectionViewCell, Identifiable {
tags.forEach {
let label = UILabel()
label.font = UIFont(name: SFPro.regular.rawValue, size: 12)
label.text = Languages(rawValue: $0)?.title
label.text = Language(rawValue: $0)?.title
hashtagStackView.addArrangedSubview(label)
}
}
Expand Down