UX Improvement

This commit is contained in:
PangMo5 2021-07-16 01:26:19 +09:00
parent 97e9016d6a
commit 8f0af64846
3 changed files with 65 additions and 8 deletions

View File

@ -134,6 +134,7 @@
625CB5752678C33500530A6E /* LibraryListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625CB5742678C33500530A6E /* LibraryListViewModel.swift */; };
625CB5772678C34300530A6E /* ConnectToServerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625CB5762678C34300530A6E /* ConnectToServerViewModel.swift */; };
625CB57A2678C4A400530A6E /* ActivityIndicator in Frameworks */ = {isa = PBXBuildFile; productRef = 625CB5792678C4A400530A6E /* ActivityIndicator */; };
6260FFF926A09754003FA968 /* CombineExt in Frameworks */ = {isa = PBXBuildFile; productRef = 6260FFF826A09754003FA968 /* CombineExt */; };
6267B3D42671024A00A7371D /* APIExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5364F454266CA0DC0026ECBA /* APIExtensions.swift */; };
6267B3D626710B8900A7371D /* CollectionExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6267B3D526710B8900A7371D /* CollectionExtensions.swift */; };
6267B3D726710B9700A7371D /* CollectionExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6267B3D526710B8900A7371D /* CollectionExtensions.swift */; };
@ -389,6 +390,7 @@
53352571265EA0A0006CCA86 /* Introspect in Frameworks */,
621C638026672A30004216EA /* NukeUI in Frameworks */,
625CB57A2678C4A400530A6E /* ActivityIndicator in Frameworks */,
6260FFF926A09754003FA968 /* CombineExt in Frameworks */,
53A431BD266B0FF20016769F /* JellyfinAPI in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -760,6 +762,7 @@
53EC6E24267EB10F006DD26A /* SwiftyJSON */,
62CB3F452685BAF7003D0A6F /* Defaults */,
53649AAC269CFAEA00A2D8B7 /* Puppy */,
6260FFF826A09754003FA968 /* CombineExt */,
);
productName = JellyfinPlayer;
productReference = 5377CBF1263B596A003A4E83 /* JellyfinPlayer iOS.app */;
@ -832,6 +835,7 @@
62CB3F442685BAF7003D0A6F /* XCRemoteSwiftPackageReference "Defaults" */,
53272533268BF9710035FBF1 /* XCRemoteSwiftPackageReference "SwiftUIFocusGuide" */,
53649AAB269CFAEA00A2D8B7 /* XCRemoteSwiftPackageReference "Puppy" */,
6260FFF726A09754003FA968 /* XCRemoteSwiftPackageReference "CombineExt" */,
);
productRefGroup = 5377CBF2263B596A003A4E83 /* Products */;
projectDirPath = "";
@ -1558,6 +1562,14 @@
minimumVersion = 1.1.0;
};
};
6260FFF726A09754003FA968 /* XCRemoteSwiftPackageReference "CombineExt" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/CombineCommunity/CombineExt";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.3.0;
};
};
62CB3F442685BAF7003D0A6F /* XCRemoteSwiftPackageReference "Defaults" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/sindresorhus/Defaults";
@ -1654,6 +1666,11 @@
package = 625CB5782678C4A400530A6E /* XCRemoteSwiftPackageReference "ActivityIndicator" */;
productName = ActivityIndicator;
};
6260FFF826A09754003FA968 /* CombineExt */ = {
isa = XCSwiftPackageProductDependency;
package = 6260FFF726A09754003FA968 /* XCRemoteSwiftPackageReference "CombineExt" */;
productName = CombineExt;
};
628B95322670CAEA0091AF3B /* NukeUI */ = {
isa = XCSwiftPackageProductDependency;
package = 621C637E26672A30004216EA /* XCRemoteSwiftPackageReference "NukeUI" */;

View File

@ -19,6 +19,24 @@
"version": "0.6.0"
}
},
{
"package": "combine-schedulers",
"repositoryURL": "https://github.com/pointfreeco/combine-schedulers",
"state": {
"branch": null,
"revision": "c37e5ae8012fb654af776cc556ff8ae64398c841",
"version": "0.5.0"
}
},
{
"package": "CombineExt",
"repositoryURL": "https://github.com/CombineCommunity/CombineExt",
"state": {
"branch": null,
"revision": "5b8a0c0f178527f9204200505c5fefa6847e528f",
"version": "1.3.0"
}
},
{
"package": "Defaults",
"repositoryURL": "https://github.com/sindresorhus/Defaults",
@ -38,7 +56,7 @@
}
},
{
"package": "jellyfin-sdk-swift",
"package": "JellyfinAPI",
"repositoryURL": "https://github.com/jellyfin/jellyfin-sdk-swift",
"state": {
"branch": "main",
@ -47,7 +65,7 @@
}
},
{
"package": "keychain-swift",
"package": "KeychainSwift",
"repositoryURL": "https://github.com/evgenyneu/keychain-swift",
"state": {
"branch": null,
@ -101,7 +119,7 @@
}
},
{
"package": "SwiftUI-Introspect",
"package": "Introspect",
"repositoryURL": "https://github.com/siteline/SwiftUI-Introspect",
"state": {
"branch": null,
@ -126,6 +144,15 @@
"revision": "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
"version": null
}
},
{
"package": "xctest-dynamic-overlay",
"repositoryURL": "https://github.com/pointfreeco/xctest-dynamic-overlay",
"state": {
"branch": null,
"revision": "603974e3909ad4b48ba04aad7e0ceee4f077a518",
"version": "0.1.0"
}
}
]
},

View File

@ -8,6 +8,7 @@
*/
import Combine
import CombineExt
import Foundation
import JellyfinAPI
@ -15,7 +16,7 @@ final class LibrarySearchViewModel: ViewModel {
@Published var supportedItemTypeList = [ItemType]()
@Published var selectedItemType = ItemType.movie
@Published var selectedItemType: ItemType = .movie
@Published var movieItems = [BaseItemDto]()
@Published var showItems = [BaseItemDto]()
@ -35,8 +36,15 @@ final class LibrarySearchViewModel: ViewModel {
.debounce(for: 0.25, scheduler: DispatchQueue.main)
.sink(receiveValue: search)
.store(in: &cancellables)
setupPublishersForSupportedItemType()
requestSuggestions()
}
func setupPublishersForSupportedItemType() {
let supportedItemTypeListPublishers = Publishers.CombineLatest3($movieItems, $showItems, $episodeItems)
.debounce(for: 0.25, scheduler: DispatchQueue.main)
.map { arg -> [ItemType] in
var typeList = [ItemType]()
if !arg.0.isEmpty {
@ -54,13 +62,18 @@ final class LibrarySearchViewModel: ViewModel {
supportedItemTypeListPublishers
.assign(to: \.supportedItemTypeList, on: self)
.store(in: &cancellables)
supportedItemTypeListPublishers
.compactMap(\.first)
.withLatestFrom(supportedItemTypeListPublishers, $selectedItemType)
.compactMap { typeList, selectedItemType in
if typeList.contains(selectedItemType) {
return selectedItemType
} else {
return typeList.first
}
}
.assign(to: \.selectedItemType, on: self)
.store(in: &cancellables)
requestSuggestions()
}
func requestSuggestions() {