-
Notifications
You must be signed in to change notification settings - Fork 0
Preparing project #44
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| Анисимов Максим Сергеевич | ||
| Когорта: 22 | ||
| Группа: 2 | ||
| Эпик: Корзина | ||
|
|
||
| Ссылка на доску: [ссылка](https://github.com/users/Maxoscaro/projects/1/views/4) | ||
|
|
||
|
|
||
| # Декомпозиция эпика Корзина | ||
|
|
||
| ## Модуль 1: | ||
|
|
||
| #### Верстка | ||
| - Основной экран корзины и состояние пустой корзины (est: 1 час; fact: x часов). | ||
| - Ячейка с картинкой и ценой (est: 1 час; fact: x часов). | ||
| - Верстка кнопки покупки с ценой - (est: 1 час; fact: х часов) | ||
|
|
||
| #### Логика | ||
| - Сортировка NFT (по названию, рейтингу, цене) (est: 1 час; fact: x часов). | ||
| - Сохранение выбранного способа сортировки (est: 1 час; fact: x часов). | ||
| - Заполнение ячеек данными из сервиса NFTService - (est: 2 часа; fact: х часов) | ||
| - Навигация на экран выбора способа оплаты (est: 40 минут; fact: x часов). | ||
|
|
||
| ## Модуль 2: | ||
|
|
||
| #### Верстка | ||
| - Экран выбора способа оплаты (est: 1 час; fact: x часов). | ||
| - Ячейка с картинкой и криптовалютами (est: 50 минут; fact: x часов). | ||
| - Кнопка оплатить (est: 30 минут; fact: x часов). | ||
| - Ссылка на пользовательское соглашение (est: 30 минут; fact: x часов). | ||
|
|
||
| #### Логика | ||
| - Открытие сайта пользователя в WebView (est: 30 минут; fact: x часов). | ||
| - Навигация на экран успешной покупки (est: 20 минут; fact: x часов). | ||
|
|
||
| ## Module 3: | ||
|
|
||
| #### Верстка | ||
| - Экран удаления товара из корзины (est: 50 минут; fact: x часов). | ||
| - Экран успешной покупки (est: 1 час; fact: x часов). | ||
|
|
||
| #### Логика | ||
| - Логика покупки: удаление из корзины и добавление в аккаунт пользователя (est: 2 часа; fact: x часов). | ||
| - Обработка возврата в каталог (est: 1 час; fact: x часов). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| Кирпинева Анастасия Валерьевна | ||
|
|
||
| Когорта: 22 | ||
|
|
||
| Группа: 2 | ||
|
|
||
| Эпик: Статистика | ||
|
|
||
| Ссылка на доску: [ссылка](https://github.com/users/Maxoscaro/projects/1/views/3) | ||
|
|
||
|
|
||
| # Декомпозиция эпика Статистика | ||
|
|
||
| ## Модуль 1: | ||
|
|
||
| #### Верстка | ||
| - Экран рейтинга (кнопка сортировки, список пользователей) (est: 30 минут; fact: x часов). | ||
| - Ячейка для списка пользователей на экране рейтинга (est: 1 час; fact: x часов). | ||
|
|
||
| #### Логика | ||
| - Сортировка списка пользователей (по имени, рейтингу) (est: 1 час; fact: x часов). | ||
| - Сохранение выбранного способа сортировки (est: 1 час; fact: x часов). | ||
| - Навигация на экран информации о пользователе (est: 20 минут; fact: x часов). | ||
|
|
||
| #### Работа с сетью | ||
| - Создать запрос на получение списка пользователей (est: 2 часа; fact: x часов). | ||
| - Подключить запрос (est: 1 час; fact: x часов). | ||
|
|
||
| ## Модуль 2: | ||
|
|
||
| #### Верстка | ||
| - Экран информации о пользователе (аватар, имя, описание) (est: 30 минут; fact: x часов). | ||
| - Кнопка перехода на сайт пользователя (est: 30 минут; fact: x часов). | ||
| - Кнопка перехода на экран коллекции пользователя (est: 30 минут; fact: x часов). | ||
| - Создать WebView (est: 1 час; fact: x часов). | ||
|
|
||
| #### Логика | ||
| - Открытие сайта пользователя в WebView (est: 30 минут; fact: x часов). | ||
| - Навигация на экран коллекции пользователя (est: 20 минут; fact: x часов). | ||
|
|
||
| ## Module 3: | ||
|
|
||
| #### Верстка | ||
| - Экран коллекции пользователя (est: 20 минут; fact: x часов). | ||
| - Ячейка с информацией об NFT (est: 1 час; fact: x часов). | ||
|
|
||
| #### Логика | ||
| - Обработка нажатия на сердечко (est: 1 час; fact: x часов). | ||
| - Обработка нажатия на кнопку корзины (добавить/удалить NFT) (est: 1 час; fact: x часов). | ||
|
|
||
| #### Работа с сетью | ||
| - Загрузка и отображение изображений NFT (est: 1 час; fact: x часов). | ||
| - Запрос на добавление/удаление лайка (est: 1 час; fact: x часов). | ||
| - Запрос на добавление NFT в корзину (est: 1 час; fact: x часов). | ||
| - Запрос на удаление NFT из корзины (est: 1 час; fact: x часов). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| // | ||
| // WebView.swift | ||
| // FakeNFT | ||
| // | ||
| // Created by Anastasia on 03.06.2025. | ||
| // | ||
|
|
||
| import SwiftUI | ||
|
|
||
| struct WebView: View { | ||
| @State private var isLoading = true | ||
| let url: URL? | ||
|
|
||
| var body: some View { | ||
| ZStack { | ||
| WebViewRepresentable(isLoading: $isLoading, url: url) | ||
| LoadingView() | ||
| .opacity(isLoading ? 1 : 0) | ||
| } | ||
| .edgesIgnoringSafeArea(.all) | ||
| .modifier(NavigationBarStyle( | ||
| title: nil, | ||
| backButtonHidden: false, | ||
| filterButtonHidden: true, | ||
| filterButtonTapHandler: { } | ||
| )) | ||
| } | ||
| } | ||
|
|
||
| #Preview { | ||
| NavigationView { | ||
| WebView(url: URL(string: "https://practicum.yandex.ru")) | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| // | ||
| // WebViewRepresentable.swift | ||
| // FakeNFT | ||
| // | ||
| // Created by Anastasia on 03.06.2025. | ||
| // | ||
|
|
||
| import SwiftUI | ||
| import WebKit | ||
|
|
||
| struct WebViewRepresentable: UIViewRepresentable { | ||
| @Binding var isLoading: Bool | ||
| let url: URL? | ||
|
|
||
| func makeUIView(context: Context) -> WKWebView { | ||
| WKWebView() | ||
| } | ||
|
|
||
| func updateUIView(_ webView: WKWebView, context: Context) { | ||
| webView.navigationDelegate = context.coordinator | ||
| webView.isOpaque = false | ||
| webView.backgroundColor = .white | ||
|
|
||
| if let url = url { | ||
| webView.load(URLRequest(url: url)) | ||
| } | ||
| } | ||
|
|
||
| func makeCoordinator() -> Coordinator { | ||
| Coordinator(parent: self) | ||
| } | ||
|
|
||
| final class Coordinator: NSObject, WKNavigationDelegate { | ||
| var parent: WebViewRepresentable | ||
|
|
||
| init(parent: WebViewRepresentable) { | ||
| self.parent = parent | ||
| } | ||
|
|
||
| func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { | ||
| parent.isLoading = false | ||
| } | ||
| } | ||
| } | ||
|
Comment on lines
+33
to
+44
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. не думаю, что это критично, но я бы вынес класс в отдельный файл, просто для чистоты
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Coordinator, это вспомогательный объект, который связан только с WebViewRepresentable, и он больше нигде не используется. |
||
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.
Спасибо, что мой тоже закинула)