-
Notifications
You must be signed in to change notification settings - Fork 35
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 home #152
New home #152
Conversation
…ingWhileRefreshing state
* AuthManager joinCourse improvement * Now loading progress when subscribing to course * Proper displaying of course without progress on continue widget * Update lastStepDataSource on enrollment (maybe should sort it by activity) * hide/appear continue learning widget when it is needed
.swiftlint.yml
Outdated
- colon | ||
- unneeded_break_in_switch | ||
- unneeded_parentheses_in_closure_argument | ||
- switch_case_alignment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отключили какие-то правила? оО
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да. Там вышло обновление swiftlint-а и все сломалось. Отдельным PR-ом будем разбираться с новыми правилами.
|
||
enum RetrieveError: Error { | ||
case connectionError, badStatus, cancelled | ||
|
||
init(error: Error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот это хорошо. Правда дальше снова есть код в духе if e.code == -999 { ... }
.
Ну, и как ты уже упоминал, неплохо минимизировать кол-во enum'ов с ошибками.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А как без разбора кодов в свитче делать?
Я интеллектуальнее способа не придумал :)
|
||
static let sharedManager = CourseSubscriptionManager() | ||
|
||
let courseSubscribedNotificationName = NSNotification.Name(rawValue: "CourseSubscribedNotification") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У нас вроде бы скопилось достаточно таких мест в коде. Может сделаем extension для NSNotification.Name и всё туда перенесём?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отдельным PR-ом тогда
return (deletedCourses.count + addedCourses.count) > 0 | ||
} | ||
|
||
func filterRepetitions(arr: [Course]) -> [Course] { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Возможно, это тоже нужно вынести в extension к Array (если фильтрация дубликатов ещё где-то используется).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Там идет сравнение курсов по id.
Лучше сделать это отдельно, только для JSONInitializable объектов видимо (или сделать что-нибудь с Equatable для JSONInitializable чтобы все было хорошо)
Сейчас что-то не хочется заморачиваться. Хочется бету выпустить.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK
} | ||
|
||
func initBlocks() { | ||
let showController: (UIViewController) -> Void = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это никак нельзя делать на уровне view, а не в презентере?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обсудим введение Router слоя и отрефакторим в следующий релиз тогда
private var isContinueLearningWidgetPresented: Bool = false | ||
|
||
private func presentLastStep(for course: Course) { | ||
guard let widgetData = ContinueLearningWidgetData(course: course, navigation: view?.getNavigation()) else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
То же самое. Точно в презентере должна быть эта логика? 🤔
} | ||
|
||
private func checkIsGoodForLastStep(course: Course) -> Bool { | ||
return course.scheduleType != "ended" && course.scheduleType != "upcoming" && !course.sectionsArray.isEmpty |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Превратить scheduleType в enum?
let imageURL: String | ||
let continueLearningAction: (() -> Void)? | ||
|
||
init?(course: Course, navigation: UINavigationController?) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ссылка на контроллер в DTO?
Stepic/LabelExtension.swift
Outdated
@@ -67,6 +67,15 @@ extension UILabel { | |||
} | |||
} | |||
|
|||
extension UILabel { | |||
var numberOfVisibleLines: Int { | |||
let textSize = CGSize(width: CGFloat(self.frame.size.width), height: CGFloat(MAXFLOAT)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CGFloat(MAXFLOAT)
-> CGFloat.greatestFiniteMagnitude
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
согласен, пофикшу
Stepic/en.lproj/Localizable.strings
Outdated
@@ -331,5 +331,20 @@ NoNotifications = "No notifications"; | |||
AnonymousNotificationsTitle = "Anonymous users can't receive notifications"; | |||
SignInToHaveNotifications = "Sign in to be able to receive notifications"; | |||
|
|||
ContinueLearningWidgetButtonTitle = "Continue learning"; //+ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А что за комменты?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
забыл потереть
Merge checklist
|
Задача: #APPS-1525
Коротко для Release Notes, в формате «Сделали/Добавили/Исправили N»:
Убрали экран "My Courses". Добавили экран "Home".
Описание:
Сделаны следующие абстракции:
CourseList - основная логика в
CourseListPresenter
. Также переиспользуетсяCourseListViewController
, будучи родителемCourseListHorizontalViewController
иCourseListVerticalViewController
. ВCourseListViewController
попытался вынести все общие методы для горизонтальных и вертикальных отображений. Также поддерживаются различные цветовые режимы (подробнее в enum-еCouseListColorMode
) и слежение за подпиской на курсы черезNotificationCenter
(CourseSubscriptionManager
). Все запросы здесь делаются через PromiseKit и инкапсулированы в enum-еCourseListType
(так как по факту запросы на получения курсов различны лишь для различных типов списков курсов). Возможно, существуют способы получше сделать логику для запроса прогрессов и рейтингов.HomeScreen - немного логики в
HomeScreenPresenter
, всю нагрузку делегируем в CourseList-ы. Для отображения всех CourseList-ов вHomeScreenViewController
используем UIStackView. Для корректной работы LastStepWidget подписываем делегат в CourseList c типом.enrolled
и по окончании загрузки курсов пользователя отображаем виджет с переходом к последнему шагу.Demo
TODO