From 833fad0353c261964cd5f8616e0c0d4038bd4a8d Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Thu, 28 Jan 2021 15:32:08 -0800 Subject: [PATCH] Add state to visibility menu --- Views/CompositionInputAccessoryView.swift | 28 +++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Views/CompositionInputAccessoryView.swift b/Views/CompositionInputAccessoryView.swift index 9642e5e..8e176db 100644 --- a/Views/CompositionInputAccessoryView.swift +++ b/Views/CompositionInputAccessoryView.swift @@ -74,14 +74,7 @@ private extension CompositionInputAccessoryView { primaryAction: UIAction { [weak self] _ in self?.viewModel.displayPoll.toggle() }) let visibilityButton = UIBarButtonItem( image: UIImage(systemName: parentViewModel.visibility.systemImageName), - menu: UIMenu(children: Status.Visibility.allCasesExceptUnknown.reversed().map { visibility in - UIAction( - title: visibility.title ?? "", - image: UIImage(systemName: visibility.systemImageName), - discoverabilityTitle: visibility.description) { [weak self] _ in - self?.parentViewModel.visibility = visibility - } - })) + menu: visibilityMenu(selectedVisibility: parentViewModel.visibility)) let contentWarningButton = UIBarButtonItem( title: NSLocalizedString("status.content-warning-abbreviation", comment: ""), primaryAction: UIAction { [weak self] _ in self?.viewModel.displayContentWarning.toggle() }) @@ -143,7 +136,24 @@ private extension CompositionInputAccessoryView { .store(in: &cancellables) parentViewModel.$visibility - .sink { visibilityButton.image = UIImage(systemName: $0.systemImageName) } + .sink { [weak self] in + visibilityButton.image = UIImage(systemName: $0.systemImageName) + visibilityButton.menu = self?.visibilityMenu(selectedVisibility: $0) + } .store(in: &cancellables) } } + +private extension CompositionInputAccessoryView { + func visibilityMenu(selectedVisibility: Status.Visibility) -> UIMenu { + UIMenu(children: Status.Visibility.allCasesExceptUnknown.reversed().map { visibility in + UIAction( + title: visibility.title ?? "", + image: UIImage(systemName: visibility.systemImageName), + discoverabilityTitle: visibility.description, + state: visibility == selectedVisibility ? .on : .off) { [weak self] _ in + self?.parentViewModel.visibility = visibility + } + }) + } +}