mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
UI fixes
This commit is contained in:
@@ -18,13 +18,15 @@ private final class ChannelBannedMemberControllerArguments {
|
||||
let context: AccountContext
|
||||
let toggleRight: (TelegramChatBannedRightsFlags, Bool) -> Void
|
||||
let toggleRightWhileDisabled: (TelegramChatBannedRightsFlags) -> Void
|
||||
let toggleIsOptionExpanded: (TelegramChatBannedRightsFlags) -> Void
|
||||
let openTimeout: () -> Void
|
||||
let delete: () -> Void
|
||||
|
||||
init(context: AccountContext, toggleRight: @escaping (TelegramChatBannedRightsFlags, Bool) -> Void, toggleRightWhileDisabled: @escaping (TelegramChatBannedRightsFlags) -> Void, openTimeout: @escaping () -> Void, delete: @escaping () -> Void) {
|
||||
init(context: AccountContext, toggleRight: @escaping (TelegramChatBannedRightsFlags, Bool) -> Void, toggleRightWhileDisabled: @escaping (TelegramChatBannedRightsFlags) -> Void, toggleIsOptionExpanded: @escaping (TelegramChatBannedRightsFlags) -> Void, openTimeout: @escaping () -> Void, delete: @escaping () -> Void) {
|
||||
self.context = context
|
||||
self.toggleRight = toggleRight
|
||||
self.toggleRightWhileDisabled = toggleRightWhileDisabled
|
||||
self.toggleIsOptionExpanded = toggleIsOptionExpanded
|
||||
self.openTimeout = openTimeout
|
||||
self.delete = delete
|
||||
}
|
||||
@@ -49,7 +51,7 @@ private enum ChannelBannedMemberEntryStableId: Hashable {
|
||||
private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
case info(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, EnginePeer, EnginePeer.Presence?)
|
||||
case rightsHeader(PresentationTheme, String)
|
||||
case rightItem(PresentationTheme, Int, String, TelegramChatBannedRightsFlags, Bool, Bool)
|
||||
case rightItem(PresentationTheme, Int, String, TelegramChatBannedRightsFlags, Bool, Bool, [SubPermission], Bool)
|
||||
case timeout(PresentationTheme, String, String)
|
||||
case exceptionInfo(PresentationTheme, String)
|
||||
case delete(PresentationTheme, String)
|
||||
@@ -73,7 +75,7 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
return .info
|
||||
case .rightsHeader:
|
||||
return .rightsHeader
|
||||
case let .rightItem(_, _, _, right, _, _):
|
||||
case let .rightItem(_, _, _, right, _, _, _, _):
|
||||
return .right(right)
|
||||
case .timeout:
|
||||
return .timeout
|
||||
@@ -114,8 +116,8 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
case let .rightItem(lhsTheme, lhsIndex, lhsText, lhsRight, lhsValue, lhsEnabled):
|
||||
if case let .rightItem(rhsTheme, rhsIndex, rhsText, rhsRight, rhsValue, rhsEnabled) = rhs {
|
||||
case let .rightItem(lhsTheme, lhsIndex, lhsText, lhsRight, lhsValue, lhsEnabled, lhsSubItems, lhsIsExpanded):
|
||||
if case let .rightItem(rhsTheme, rhsIndex, rhsText, rhsRight, rhsValue, rhsEnabled, rhsSubItems, rhsIsExpanded) = rhs {
|
||||
if lhsTheme !== rhsTheme {
|
||||
return false
|
||||
}
|
||||
@@ -134,6 +136,12 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
if lhsEnabled != rhsEnabled {
|
||||
return false
|
||||
}
|
||||
if lhsSubItems != rhsSubItems {
|
||||
return false
|
||||
}
|
||||
if lhsIsExpanded != rhsIsExpanded {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
@@ -175,11 +183,11 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
default:
|
||||
return true
|
||||
}
|
||||
case let .rightItem(_, lhsIndex, _, _, _, _):
|
||||
case let .rightItem(_, lhsIndex, _, _, _, _, _, _):
|
||||
switch rhs {
|
||||
case .info, .rightsHeader:
|
||||
return false
|
||||
case let .rightItem(_, rhsIndex, _, _, _, _):
|
||||
case let .rightItem(_, rhsIndex, _, _, _, _, _, _):
|
||||
return lhsIndex < rhsIndex
|
||||
default:
|
||||
return true
|
||||
@@ -212,12 +220,40 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
})
|
||||
case let .rightsHeader(_, text):
|
||||
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section)
|
||||
case let .rightItem(_, _, text, right, value, enabled):
|
||||
return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, type: .icon, enableInteractiveChanges: enabled, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in
|
||||
arguments.toggleRight(right, value)
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.toggleRightWhileDisabled(right)
|
||||
})
|
||||
case let .rightItem(_, _, text, right, value, enabled, subPermissions, isExpanded):
|
||||
if !subPermissions.isEmpty {
|
||||
return ItemListExpandableSwitchItem(presentationData: presentationData, title: text, value: value, isExpanded: isExpanded, subItems: subPermissions.map { item in
|
||||
return ItemListExpandableSwitchItem.SubItem(
|
||||
id: AnyHashable(item.flags.rawValue),
|
||||
title: item.title,
|
||||
isSelected: item.isSelected,
|
||||
isEnabled: item.isEnabled
|
||||
)
|
||||
}, type: .icon, enableInteractiveChanges: enabled, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in
|
||||
arguments.toggleRight(right, value)
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.toggleRightWhileDisabled(right)
|
||||
}, selectAction: {
|
||||
arguments.toggleIsOptionExpanded(right)
|
||||
}, subAction: { item in
|
||||
guard let value = item.id.base as? Int32 else {
|
||||
return
|
||||
}
|
||||
let subRights = TelegramChatBannedRightsFlags(rawValue: value)
|
||||
|
||||
if item.isEnabled {
|
||||
arguments.toggleRight(subRights, !item.isSelected)
|
||||
} else {
|
||||
arguments.toggleIsOptionExpanded(subRights)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, type: .icon, enableInteractiveChanges: enabled, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in
|
||||
arguments.toggleRight(right, value)
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.toggleRightWhileDisabled(right)
|
||||
})
|
||||
}
|
||||
case let .timeout(_, text, value):
|
||||
return ItemListDisclosureItem(presentationData: presentationData, title: text, label: value, sectionId: self.section, style: .blocks, action: {
|
||||
arguments.openTimeout()
|
||||
@@ -237,6 +273,7 @@ private struct ChannelBannedMemberControllerState: Equatable {
|
||||
var updatedFlags: TelegramChatBannedRightsFlags?
|
||||
var updatedTimeout: Int32?
|
||||
var updating: Bool = false
|
||||
var expandedPermissions = Set<TelegramChatBannedRightsFlags>()
|
||||
}
|
||||
|
||||
func completeRights(_ flags: TelegramChatBannedRightsFlags) -> TelegramChatBannedRightsFlags {
|
||||
@@ -293,7 +330,21 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
|
||||
var index = 0
|
||||
for (right, _) in allGroupPermissionList(peer: .channel(channel)) {
|
||||
let defaultEnabled = !defaultBannedRights.flags.contains(right) && channel.hasPermission(.banMembers)
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right, isForum: channel.flags.contains(.isForum)), right, defaultEnabled && !currentRightsFlags.contains(right), defaultEnabled && !state.updating))
|
||||
|
||||
var isSelected = defaultEnabled && !currentRightsFlags.contains(right)
|
||||
|
||||
var subItems: [SubPermission] = []
|
||||
if right == .banSendMedia {
|
||||
isSelected = banSendMediaSubList().allSatisfy({ defaultEnabled && !currentRightsFlags.contains($0.0) })
|
||||
|
||||
for (subRight, _) in banSendMediaSubList() {
|
||||
let subItemEnabled = defaultEnabled && !state.updating && !defaultBannedRights.flags.contains(subRight) && channel.hasPermission(.banMembers)
|
||||
|
||||
subItems.append(SubPermission(title: stringForGroupPermission(strings: presentationData.strings, right: subRight, isForum: channel.isForum), flags: subRight, isSelected: defaultEnabled && !currentRightsFlags.contains(subRight), isEnabled: subItemEnabled))
|
||||
}
|
||||
}
|
||||
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right, isForum: channel.flags.contains(.isForum)), right, isSelected, defaultEnabled && !state.updating, subItems, state.expandedPermissions.contains(right)))
|
||||
index += 1
|
||||
}
|
||||
|
||||
@@ -339,7 +390,21 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
|
||||
var index = 0
|
||||
for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) {
|
||||
let defaultEnabled = !defaultBannedRightsFlags.contains(right)
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right, isForum: false), right, defaultEnabled && !currentRightsFlags.contains(right), defaultEnabled && !state.updating))
|
||||
|
||||
var isSelected = defaultEnabled && !currentRightsFlags.contains(right)
|
||||
|
||||
var subItems: [SubPermission] = []
|
||||
if right == .banSendMedia {
|
||||
isSelected = banSendMediaSubList().allSatisfy({ defaultEnabled && !currentRightsFlags.contains($0.0) })
|
||||
|
||||
for (subRight, _) in banSendMediaSubList() {
|
||||
let subItemEnabled = defaultEnabled && !state.updating && !defaultBannedRightsFlags.contains(subRight)
|
||||
|
||||
subItems.append(SubPermission(title: stringForGroupPermission(strings: presentationData.strings, right: subRight, isForum: false), flags: subRight, isSelected: defaultEnabled && !currentRightsFlags.contains(subRight), isEnabled: subItemEnabled))
|
||||
}
|
||||
}
|
||||
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right, isForum: false), right, isSelected, defaultEnabled && !state.updating, subItems, state.expandedPermissions.contains(right)))
|
||||
index += 1
|
||||
}
|
||||
|
||||
@@ -439,6 +504,16 @@ public func channelBannedMemberController(context: AccountContext, updatedPresen
|
||||
}
|
||||
presentControllerImpl?(textAlertController(context: context, updatedPresentationData: updatedPresentationData, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
})
|
||||
}, toggleIsOptionExpanded: { flags in
|
||||
updateState { state in
|
||||
var state = state
|
||||
if state.expandedPermissions.contains(flags) {
|
||||
state.expandedPermissions.remove(flags)
|
||||
} else {
|
||||
state.expandedPermissions.insert(flags)
|
||||
}
|
||||
return state
|
||||
}
|
||||
}, openTimeout: {
|
||||
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||
let actionSheet = ActionSheetController(presentationData: presentationData)
|
||||
|
||||
Reference in New Issue
Block a user