mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-23 06:33:42 +00:00
[ios] Implement New Edit view on the PlacePage screen
To allow change the color and group from directly from the then PP Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
This commit is contained in:
committed by
Yannik Bloscheck
parent
ec6a98a6fd
commit
49d5335e7e
@@ -1,4 +1,5 @@
|
||||
protocol PlacePageEditBookmarkOrTrackViewControllerDelegate: AnyObject {
|
||||
func didUpdate(color: UIColor, category: MWMMarkGroupID, for data: PlacePageEditData)
|
||||
func didPressEdit(_ data: PlacePageEditData)
|
||||
}
|
||||
|
||||
@@ -11,14 +12,10 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
|
||||
|
||||
@IBOutlet var stackView: UIStackView!
|
||||
@IBOutlet var editView: InfoItemView!
|
||||
@IBOutlet var topConstraint: NSLayoutConstraint!
|
||||
@IBOutlet var expandableLabelContainer: UIView!
|
||||
@IBOutlet var expandableLabel: ExpandableLabel! {
|
||||
didSet {
|
||||
expandableLabel.font = UIFont.regular14()
|
||||
expandableLabel.textColor = UIColor.blackPrimaryText()
|
||||
expandableLabel.numberOfLines = 5
|
||||
expandableLabel.expandColor = UIColor.linkBlue()
|
||||
expandableLabel.expandText = L("placepage_more_button")
|
||||
updateExpandableLabelStyle()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +24,7 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
|
||||
updateViews()
|
||||
}
|
||||
}
|
||||
|
||||
weak var delegate: PlacePageEditBookmarkOrTrackViewControllerDelegate?
|
||||
|
||||
override func viewDidLoad() {
|
||||
@@ -39,42 +37,114 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
|
||||
updateViews()
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
if #available(iOS 13.0, *), traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
|
||||
applyTheme()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private methods
|
||||
|
||||
private func updateViews() {
|
||||
guard let data else { return }
|
||||
|
||||
let iconColor: UIColor
|
||||
let category: String?
|
||||
let description: String?
|
||||
let isHtmlDescription: Bool
|
||||
|
||||
switch data {
|
||||
case .bookmark(let bookmark):
|
||||
case .bookmark(let bookmarkData):
|
||||
iconColor = bookmarkData.color.color
|
||||
category = bookmarkData.bookmarkCategory
|
||||
description = bookmarkData.bookmarkDescription
|
||||
isHtmlDescription = bookmarkData.isHtmlDescription
|
||||
case .track(let trackData):
|
||||
iconColor = trackData.color ?? UIColor.buttonRed()
|
||||
category = trackData.trackCategory
|
||||
description = trackData.trackDescription
|
||||
isHtmlDescription = false
|
||||
}
|
||||
|
||||
editView.isHidden = false
|
||||
editView.imageView.image = UIImage(resource: .icFolder)
|
||||
editView.infoLabel.text = bookmark.bookmarkCategory
|
||||
editView.setStyle(.link)
|
||||
editView.tapHandler = {
|
||||
print("Edit bookmark tapped")
|
||||
}
|
||||
let accessoryImage = circleImageForColor(bookmark.color.color, frameSize: 28, diameter: 22, iconName: "ic_bm_none")
|
||||
editView.setAccessory(image: accessoryImage, tapHandler: {
|
||||
print("Accessory tapped")
|
||||
})
|
||||
let editColorImage = circleImageForColor(iconColor, frameSize: 28, diameter: 22, iconName: "ic_bm_none")
|
||||
editView.iconButton.setImage(editColorImage, for: .normal)
|
||||
editView.infoLabel.text = category
|
||||
editView.setStyle(.link)
|
||||
|
||||
if let description = bookmark.bookmarkDescription {
|
||||
if bookmark.isHtmlDescription {
|
||||
setHtmlDescription(description)
|
||||
topConstraint.constant = 16
|
||||
} else {
|
||||
expandableLabel.text = description
|
||||
topConstraint.constant = description.count > 0 ? 16 : 0
|
||||
}
|
||||
editView.iconButtonTapHandler = { [weak self] in
|
||||
guard let self else { return }
|
||||
self.showColorPicker()
|
||||
}
|
||||
editView.infoLabelTapHandler = { [weak self] in
|
||||
guard let self else { return }
|
||||
self.showGroupPicker()
|
||||
}
|
||||
editView.setAccessory(image: UIImage(resource: .ic24PxEdit), tapHandler: { [weak self] in
|
||||
guard let self, let data = self.data else { return }
|
||||
self.delegate?.didPressEdit(data)
|
||||
})
|
||||
|
||||
if let description, !description.isEmpty {
|
||||
expandableLabelContainer.isHidden = false
|
||||
if isHtmlDescription {
|
||||
setHtmlDescription(description)
|
||||
} else {
|
||||
topConstraint.constant = 0
|
||||
expandableLabel.text = description
|
||||
}
|
||||
case .track:
|
||||
updateExpandableLabelStyle()
|
||||
} else {
|
||||
expandableLabelContainer.isHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: implement track editing
|
||||
private func updateExpandableLabelStyle() {
|
||||
expandableLabel.font = UIFont.regular14()
|
||||
expandableLabel.textColor = UIColor.blackPrimaryText()
|
||||
expandableLabel.numberOfLines = 5
|
||||
expandableLabel.expandColor = UIColor.linkBlue()
|
||||
expandableLabel.expandText = L("placepage_more_button")
|
||||
}
|
||||
|
||||
expandableLabel.isHidden = true
|
||||
topConstraint.constant = 0
|
||||
private func showColorPicker() {
|
||||
guard let data else { return }
|
||||
switch data {
|
||||
case .bookmark(let bookmarkData):
|
||||
ColorPicker.shared.present(from: self, pickerType: .bookmarkColorPicker(bookmarkData.color)) { [weak self] color in
|
||||
self?.update(color: color)
|
||||
}
|
||||
case .track(let trackData):
|
||||
ColorPicker.shared.present(from: self, pickerType: .defaultColorPicker(trackData.color ?? .buttonRed())) { [weak self] color in
|
||||
self?.update(color: color)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func showGroupPicker() {
|
||||
guard let data else { return }
|
||||
let groupId: MWMMarkGroupID
|
||||
let groupName: String?
|
||||
switch data {
|
||||
case .bookmark(let bookmarkData):
|
||||
groupId = bookmarkData.bookmarkGroupId
|
||||
groupName = bookmarkData.bookmarkCategory
|
||||
case .track(let trackData):
|
||||
groupId = trackData.groupId
|
||||
groupName = trackData.trackCategory
|
||||
}
|
||||
let groupViewController = SelectBookmarkGroupViewController(groupName: groupName ?? "", groupId: groupId)
|
||||
let navigationController = UINavigationController(rootViewController: groupViewController)
|
||||
groupViewController.delegate = self
|
||||
present(navigationController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
private func update(color: UIColor? = nil, category: MWMMarkGroupID? = nil) {
|
||||
guard let data else { return }
|
||||
switch data {
|
||||
case .bookmark(let bookmarkData):
|
||||
delegate?.didUpdate(color: color ?? bookmarkData.color.color, category: category ?? bookmarkData.bookmarkGroupId, for: data)
|
||||
case .track(let trackData):
|
||||
delegate?.didUpdate(color: color ?? trackData.color!, category: category ?? trackData.groupId, for: data)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,11 +173,14 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@IBAction func onEdit(_ sender: UIButton) {
|
||||
guard let data else { return }
|
||||
delegate?.didPressEdit(data)
|
||||
// MARK: - SelectBookmarkGroupViewControllerDelegate
|
||||
extension PlacePageEditBookmarkOrTrackViewController: SelectBookmarkGroupViewControllerDelegate {
|
||||
func bookmarkGroupViewController(_ viewController: SelectBookmarkGroupViewController,
|
||||
didSelect groupTitle: String,
|
||||
groupId: MWMMarkGroupID) {
|
||||
viewController.dismiss(animated: true)
|
||||
update(category: groupId)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user