Skip to content

Commit

Permalink
Feature/sorting (#30)
Browse files Browse the repository at this point in the history
* 🍱 sort 이미지 추가, 기존이미지 스케일 수정

* 🔨 Like Model 제거, 메세지로 대체

* 🔨 버튼, 스크롤 이벤트에 쓰로틀 추가, unlike 기능 추가

* 💄 sortView UI 추가

* 🔨 메세지 목록에 SortType 결정 기능 추가
  • Loading branch information
wan088 authored Jan 6, 2021
1 parent b62354a commit e6337f1
Show file tree
Hide file tree
Showing 15 changed files with 290 additions and 132 deletions.
8 changes: 4 additions & 4 deletions Dear-World/Dear-World.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
121BDB6C2597A49B0062B15A /* MessageMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121BDB6B2597A49B0062B15A /* MessageMock.swift */; };
121BDB712597A5D60062B15A /* APIMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121BDB702597A5D60062B15A /* APIMock.swift */; };
121BDB8E259829840062B15A /* CountrySelectController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121BDB8D259829840062B15A /* CountrySelectController.swift */; };
12257E1825A622750007E65E /* SortTypeSelectController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12257E1725A622750007E65E /* SortTypeSelectController.swift */; };
1263E09725A1C87400E3F121 /* Message.API.Countries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1263E09625A1C87400E3F121 /* Message.API.Countries.swift */; };
1263E09C25A1C8DD00E3F121 /* Message.Model.Countries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1263E09B25A1C8DD00E3F121 /* Message.Model.Countries.swift */; };
1263E0CF25A1F5ED00E3F121 /* Message.Model.MessageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1263E0CE25A1F5ED00E3F121 /* Message.Model.MessageCount.swift */; };
1263E0D425A1F5F800E3F121 /* Message.API.MessageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1263E0D325A1F5F800E3F121 /* Message.API.MessageCount.swift */; };
128313E32598A08700BDF8A3 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128313E22598A08700BDF8A3 /* Message.swift */; };
128313EE2598A14E00BDF8A3 /* Message.API.Messages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128313ED2598A14E00BDF8A3 /* Message.API.Messages.swift */; };
12A05EFF25A353700089EF1C /* Message.API.Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A05EFE25A353700089EF1C /* Message.API.Like.swift */; };
12A05F0425A3542F0089EF1C /* Message.Model.Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */; };
3902F1052596F26D00A3DF8C /* CheeringMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F1042596F26D00A3DF8C /* CheeringMapViewController.swift */; };
3902F1132597049D00A3DF8C /* SendMessageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F1122597049D00A3DF8C /* SendMessageViewController.swift */; };
3902F118259704AF00A3DF8C /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F117259704AF00A3DF8C /* AboutViewController.swift */; };
Expand Down Expand Up @@ -109,14 +109,14 @@
121BDB6B2597A49B0062B15A /* MessageMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageMock.swift; sourceTree = "<group>"; };
121BDB702597A5D60062B15A /* APIMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIMock.swift; sourceTree = "<group>"; };
121BDB8D259829840062B15A /* CountrySelectController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountrySelectController.swift; sourceTree = "<group>"; };
12257E1725A622750007E65E /* SortTypeSelectController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortTypeSelectController.swift; sourceTree = "<group>"; };
1263E09625A1C87400E3F121 /* Message.API.Countries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.Countries.swift; sourceTree = "<group>"; };
1263E09B25A1C8DD00E3F121 /* Message.Model.Countries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.Model.Countries.swift; sourceTree = "<group>"; };
1263E0CE25A1F5ED00E3F121 /* Message.Model.MessageCount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.Model.MessageCount.swift; sourceTree = "<group>"; };
1263E0D325A1F5F800E3F121 /* Message.API.MessageCount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.MessageCount.swift; sourceTree = "<group>"; };
128313E22598A08700BDF8A3 /* Message.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; name = Message.swift; path = "Dear-World/Source/Domain/Message/Message.swift"; sourceTree = SOURCE_ROOT; tabWidth = 2; };
128313ED2598A14E00BDF8A3 /* Message.API.Messages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.Messages.swift; sourceTree = "<group>"; };
12A05EFE25A353700089EF1C /* Message.API.Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.Like.swift; sourceTree = "<group>"; };
12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.Model.Like.swift; sourceTree = "<group>"; };
3902F1042596F26D00A3DF8C /* CheeringMapViewController.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; path = CheeringMapViewController.swift; sourceTree = "<group>"; tabWidth = 2; };
3902F1122597049D00A3DF8C /* SendMessageViewController.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; path = SendMessageViewController.swift; sourceTree = "<group>"; tabWidth = 2; };
3902F117259704AF00A3DF8C /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -256,7 +256,6 @@
3914D9E5259F3FA1009765B0 /* Message.Model.Messages.swift */,
1263E09B25A1C8DD00E3F121 /* Message.Model.Countries.swift */,
1263E0CE25A1F5ED00E3F121 /* Message.Model.MessageCount.swift */,
12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */,
);
path = Model;
sourceTree = "<group>";
Expand Down Expand Up @@ -402,6 +401,7 @@
39F0C1B62598927C00A7001F /* ErrorView.swift */,
39E9F7DA25A1BBED00BC2CC2 /* PixelWorldMapView.swift */,
39E9F7DF25A1BC3C00BC2CC2 /* NoticeBadge.swift */,
12257E1725A622750007E65E /* SortTypeSelectController.swift */,
);
path = View;
sourceTree = "<group>";
Expand Down Expand Up @@ -781,7 +781,6 @@
39658F8D259AD9900050D180 /* SplashViewController.swift in Sources */,
3971EB29259A7D720084E6DC /* SendMessageReactor.swift in Sources */,
1263E0D425A1F5F800E3F121 /* Message.API.MessageCount.swift in Sources */,
12A05F0425A3542F0089EF1C /* Message.Model.Like.swift in Sources */,
39F0C19B2598860100A7001F /* ResponseWrapper.swift in Sources */,
39E9F7E625A1C80300BC2CC2 /* WorldMap.swift in Sources */,
3971EB3C259A9C860084E6DC /* Message.Model.SendMessage.swift in Sources */,
Expand All @@ -798,6 +797,7 @@
121BDB2A2597259E0062B15A /* MessageCountBadgeView.swift in Sources */,
39F0C16B2597C7DF00A7001F /* UIImage+.swift in Sources */,
39E9F7E025A1BC3C00BC2CC2 /* NoticeBadge.swift in Sources */,
12257E1825A622750007E65E /* SortTypeSelectController.swift in Sources */,
39E9F7ED25A1C84900BC2CC2 /* WorldMap.Model.Country.swift in Sources */,
121BDB6C2597A49B0062B15A /* MessageMock.swift in Sources */,
39658FC0259AE58C0050D180 /* World.Model.Country.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@
"images" : [
{
"filename" : "Vector(1).pdf",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
"idiom" : "universal"
}
],
"info" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@
"images" : [
{
"filename" : "message_default.pdf",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
"idiom" : "universal"
}
],
"info" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@
"images" : [
{
"filename" : "message_default.pdf",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
"idiom" : "universal"
}
],
"info" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@
"images" : [
{
"filename" : "Group 22.pdf",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
"idiom" : "universal"
}
],
"info" : {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "sort.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

extension Message.API {
struct Like: ServiceAPI {
typealias Response = Message.Model.Like
typealias Response = Message.Model.Message

// MARK: Parameters
private let messageId: Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,12 @@ import Foundation

extension Message.API {
struct Messages: ServiceAPI {
enum ListType: String {
case recent = "recent"
case weeklyHot = "weekly_hot"
}
typealias Response = Message.Model.Messages

// MARK: Parameters
private let countryCode: String?
private let lastMsgId: Int?
private let type: ListType
private let type: Message.Model.ListType

var method: HTTPMethod { .get }
var path: String { "/api/v1/messages" }
Expand All @@ -31,7 +27,7 @@ extension Message.API {
]
}

init(countryCode: String?, lastMsgId: Int?, type: ListType) {
init(countryCode: String?, lastMsgId: Int?, type: Message.Model.ListType) {
self.countryCode = countryCode
self.lastMsgId = lastMsgId
self.type = type
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -168,28 +168,26 @@ final class MessageTableViewCell: UITableViewCell {
}

// MARK: 🔗 Bind
func bind() {
self.shareButton
.rx.tap
.bind{ _ in print("!") }

private func bind() {
self.likeView
.rx.tapGesture()
.filter{[weak self] _ in self?.isLike == false }
.flatMap {[weak self] _ -> Observable<Bool?> in
.debug()
.throttle(.milliseconds(300), scheduler: MainScheduler.instance)
.filter { [weak self] _ in
self?.isLike == false
}
.flatMap { [weak self] _ -> Observable<Bool?> in
guard let id = self?.messageId else {
return Observable.just(false)
}
return Network.request(Message.API.Like(messageId: id))
.map {$0?.like}
}
.filter {$0 == true}
.bind {[weak self] _ in
self?.isLike = true
self?.likeCount += 1
.map { $0?.isLiked }
}
.filterNil()
.subscribe (onNext: {[weak self] isLike in
self?.isLike = isLike
self?.likeCount += (isLike ? 1 : -1)
})
.disposed(by: self.disposeBag)
// .bind(to: self.likeCountLabel.rx.text)
// .disposed(by: self.disposeBag)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import ReactorKit
final class DiscoverReactor: Reactor {
enum Action {
case tapAbout
case countryDidChanged(country: Message.Model.Country?)
case countryDidChanged(country: Message.Model.Country?, sortType: Message.Model.ListType? = nil)
case refresh
case loadMore
}
Expand All @@ -24,11 +24,13 @@ final class DiscoverReactor: Reactor {
case setLoading(Bool)
case setPresentAboutPage(Bool)
case setMessageCount(Int)
case setCurrentSortType(Message.Model.ListType?)
}

struct State {
var messageCount: Int = 0
@Revision var selectedCountry: Message.Model.Country?
@Revision var selectedSortType: Message.Model.ListType = .recent
@Revision var messages: Message.Model.Messages = .init(firstMsgId: nil, lastMsgId: nil, messageCount: 0, messages: [])
var isRefreshing: Bool = false
var isLoading: Bool = false
Expand All @@ -46,19 +48,20 @@ final class DiscoverReactor: Reactor {
// MARK: 🔫 Mutate
func mutate(action: Action) -> Observable<Mutation> {
switch action {
case let .countryDidChanged(country):
case let .countryDidChanged(country, sortType):
return .merge(
Network.request(Message.API.MessageCount(countryCode: country?.code))
.filterNil()
.map { Mutation.setMessageCount($0.messageCount) },
.concat(
.just(Mutation.setCountry(country: country)),
.just(.setCountry(country: country)),
.just(.setCurrentSortType(sortType)),
.just(.setLoading(true)),
Network.request(
Message.API.Messages(
countryCode: country?.code,
lastMsgId: nil,
type: .recent)
type: sortType ?? currentState.selectedSortType)
)
.filterNil()
.map{ Mutation.setMessages(result: $0) },
Expand All @@ -76,7 +79,7 @@ final class DiscoverReactor: Reactor {
guard !currentState.isLoading else { return .empty() }
return Observable<Mutation>.concat([
.just(.setLoading(true)),
Network.request(Message.API.Messages(countryCode: currentState.selectedCountry?.code, lastMsgId: currentState.messages.lastMsgId, type: .recent))
Network.request(Message.API.Messages(countryCode: currentState.selectedCountry?.code, lastMsgId: currentState.messages.lastMsgId, type: currentState.selectedSortType))
.filterNil()
.map{ .addMessages(result: $0) },
.just(.setLoading(false))
Expand Down Expand Up @@ -111,6 +114,10 @@ final class DiscoverReactor: Reactor {

case let .setMessageCount(count):
newState.messageCount = count
case let .setCurrentSortType(type):
if type != nil {
newState.selectedSortType = type!
}
}
return newState
}
Expand Down
Loading

0 comments on commit e6337f1

Please sign in to comment.