Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New profile architecture #299

Merged
merged 24 commits into from
May 30, 2018
Merged

New profile architecture #299

merged 24 commits into from
May 30, 2018

Conversation

kvld
Copy link
Contributor

@kvld kvld commented May 28, 2018

Задача: #APPS-1883

Коротко для Release Notes, в формате «Сделали/Добавили/Исправили N»:
Добавили возможность открывать профили пользователей

Описание:
Весь код профиля переписан для более гибкого использования отдельных блоков (теперь каждый блок – модуль MVP).

TODO

  • баг с default expanded блоком
  • баг с плейсхолдером при загрузке после авторизации
  • переход в профиль из комментариев

@kvld kvld added the main label May 28, 2018
@kvld kvld self-assigned this May 28, 2018
@kvld kvld requested a review from Ostrenkiy May 28, 2018 16:49
Copy link
Contributor

@Ostrenkiy Ostrenkiy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У меня еще куча варнингов в икскоде, попробуй зайти через него и пофиксить, там довольно годные большинство.
Ты научился кстати наш линтер запускать с AppCode?

super.awakeFromNib()
placeholderView.isSkeletonable = true

let margin = Double(arc4random()) / 0xFFFFFFFF * 20.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот сейчас что-то странное с рандомом произошло, пояснишь?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arc4random возвращает случайное число из [0; UInt32.max], делением просто получаем Double из [0; 1]
Лучше заменить 0xFFFFFFFF на UInt32.max, думаю.

// Copyright © 2018 Alex Karpov. All rights reserved.
//

enum ProfileMenuBlock: RawRepresentable, Equatable {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А почему не сделать просто :String вместо RawRepresentable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Потому что enum со значением.

}

class ProfilePresenter {
enum UserSeed {
case other(id: Int)
case `self`(id: Int)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ну слишком сильно ты любишь эту тему с ключевыми словами в кавычках)
может во избежание путаницы лучше сделать как-нибудь без этого?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не знаю, мне кажется здесь кавычки не особо мешают :)

}

class ProfilePresenter {
enum UserSeed {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А какое предназначение у UserSeed? Почему мы не можем использовать просто User-а ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обсудили это уже, чтобы удобнее поддерживать 3 случая.

}

func showStreakTimeSelection(startHour: Int) {
// FIXME: strange picker injection. this vc logic should be in the presenter, i think
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пока нет роутинг слоя, мы не узнаем, как правильно))

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если проще так - пусть будет так

customPresentViewController(streakTimePickerPresentr, viewController: vc, animated: true, completion: nil)
}

func requestNotificationsPermissions() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Проверь лишний раз плиз что с нотификациями ничего не сломалось. Понимаю, что это копипаст, но все равно страшновато

var pinsMapContentView: PinsMapBlockContentView?

// Implementation of StreakNotificationsControlView in extension
var presenterNotifications: StreakNotificationsControlPresenter?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

зачем тогда attach метод в экстеншне, если можно просто сетить это?
есть сомнения, нужен ли экстеншн, если у нас поле тут торчит (но это совсем мелочи и неважно, можешь как есть оставить)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Метод как альтернатива полю в протоколе.
Экстеншен здесь для того, чтобы вынести в него логику StreakNotificationsControlView. В данной реализации у нас сам ProfileViewController является StreakNotificationsControlView (из-за меню с блоками) и хотелось всю реализацию спрятать отдельно.

}

var streaksTooltip: Tooltip?
@objc func settingsButtonPressed() {
// Bad route injection :(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ииии так сойдет

func navigateToSettings() {
self.performSegue(withIdentifier: "showSettings", sender: nil)
}
private func buildInfoExpandableBlock() -> ContentExpandableMenuBlock? {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А почему ты решил для профиля все это перенести из презентера во view?
В любом случае, с Settings должно быть консистентно - там сейчас до сих пор в SettingsPresenter инициализируются блоки

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, Settings и CodeSettings тоже нужно так сделать.

self.view = view
}

private var notificationTimeString: String? {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Надо разобраться будет со всеми подсчетами и форматированиями времени, мб в отдельный сервис их перенести. Сейчас это все хаотично раскидано по проекту.

@Ostrenkiy
Copy link
Contributor

Это вмердживаем для беты, остальные фиксы в отдельном PR-е

@Ostrenkiy Ostrenkiy merged commit 50f41d8 into dev May 30, 2018
@Ostrenkiy Ostrenkiy added this to the 1.60 milestone May 31, 2018
@Ostrenkiy Ostrenkiy mentioned this pull request Jun 4, 2018
@kvld kvld deleted the feature/profiles branch January 29, 2019 11:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants