Swiftgram/TelegramUI/WebSearchInterfaceState.swift
2018-12-07 23:01:02 +04:00

66 lines
2.4 KiB
Swift

import Foundation
struct WebSearchSelectionState: Equatable {
let selectedIds: Set<String>
static func ==(lhs: WebSearchSelectionState, rhs: WebSearchSelectionState) -> Bool {
return lhs.selectedIds == rhs.selectedIds
}
init(selectedIds: Set<String>) {
self.selectedIds = selectedIds
}
}
enum WebSearchMode: Int32 {
case images
case gifs
}
struct WebSearchInterfaceInnerState: Equatable {
let mode: WebSearchMode
let selectionState: WebSearchSelectionState
}
struct WebSearchInterfaceState: Equatable {
let state: WebSearchInterfaceInnerState?
let presentationData: PresentationData
init (presentationData: PresentationData) {
self.state = nil
self.presentationData = presentationData
}
init(state: WebSearchInterfaceInnerState?, presentationData: PresentationData) {
self.state = state
self.presentationData = presentationData
}
func withUpdatedMode(_ mode: WebSearchMode) -> WebSearchInterfaceState {
return WebSearchInterfaceState(state: WebSearchInterfaceInnerState(mode: mode, selectionState: self.state?.selectionState ?? WebSearchSelectionState(selectedIds: [])), presentationData: self.presentationData)
}
func withUpdatedSelectionState(_ selectionState: WebSearchSelectionState) -> WebSearchInterfaceState {
return WebSearchInterfaceState(state: WebSearchInterfaceInnerState(mode: self.state?.mode ?? .images, selectionState: selectionState), presentationData: self.presentationData)
}
func withToggledSelectedMessages(_ ids: [String], value: Bool) -> WebSearchInterfaceState {
var selectedIds = Set<String>()
if let selectionState = self.state?.selectionState {
selectedIds.formUnion(selectionState.selectedIds)
}
for id in ids {
if value {
selectedIds.insert(id)
} else {
selectedIds.remove(id)
}
}
return WebSearchInterfaceState(state: WebSearchInterfaceInnerState(mode: self.state?.mode ?? .images, selectionState: WebSearchSelectionState(selectedIds: selectedIds)), presentationData: self.presentationData)
}
func withUpdatedPresentationData(_ presentationData: PresentationData) -> WebSearchInterfaceState {
return WebSearchInterfaceState(state: self.state, presentationData: presentationData)
}
}