# Golf Galaxy Home Page Planning Doc
[TOC]
# Overview
This is to ouline the Golf Galaxy white label app Home page implemantation planning.
## Open Questions
1. Do we need to create Home as package manager for Home Tab?
## Shop Tab
## Hero Carousel
:::info
Hero Carousel going to contain View's, models, network request. This is going to be in SwiftUI component.
Data Comes from Homr
:::
**Assumptions:**
- Hero Carousel going to be part of Home package with its own folder structure.
## Taxo
::: info
Taxo with shop by Category header going to part of Home package.
It contains view, viewModels, network request.
Data Comes from Homr
:::
* Notes:
- Shop by Category header is not clickable until future story
## Account Snapshot
::: info
This has two states
- Signed In
- It contains collapsible/expandable part of scorecard progress.
- Guest
- It contains Imageview and SignIn or Create account and My Favorites. It's not expandable/collapsible
:::
**Questions:**
- Is Signed in state part of this iteration?
## My Lists
Question:
- Is this part of MVP?
## Recently Viewed and Recommended Just for You
:::info
This going to contain viewModels, network request.
Data Comes from Certona
:::
Notes:
- View should be reusable component.
- Need to check implementation of SAYT Top product View component.
### Questions
- Do we need to have Reusable component package?
**Notes:**
- Firebase remote configurations for configuring order of cards.
- Firebase Feature flag for showing/hiding cards.
- On Error state, Hide the card (Ghosting state)
---------------------
## Discover Tab
::: info
It going to have 3 types of UI cards differentiated by value coming from HomR.
:::
**Notes:**
- Create Reusable components in package.
- Dead links until future iterations.
------------------
## My Store Tab
:::info
This will be a store locator implementation utilizing the Brandify API.
:::
- If location services have been enabled, we will show the closest stores within 100 miles.
- Will be using MapKit
**Notes:**
- We will require a location manager
- Data will come from Brandify API. This should be abstracted for when we decide to move away from brandify and start using our internal EAT services.
- UI building blocks for store list and store details.
- Store Details will have dead links until future iteration.
**Design Questions:**
- 100 mile radius for stores; is this too big?
- There's a chevron on the "call" cell instead of of just a button
- We will need to know more information regarding the "enabled location" map: How will users/stores be represented?
- Store cells returned from search all have "Store info" instead of chevron
- In the figma, the Select Store button is missing for permission enabled store list.
Example cURL for brandify API:
```cURL=
curl --location --request POST 'https://hosted.where2getit.com/dickssportinggoods/rest/locatorsearch' \
--header 'User-Agent: DSG.ScoreCardConsumerApp/4.8.7 (com.dsg.qa.mobile.consumer; build:850; iOS 13.3.0) Alamofire/4.8.1' \
--header 'Accept-Encoding: gzip;q=1.0, compress;q=0.5' \
--header 'Content-Type: application/json' \
--header 'X-acf-sensor-data: 1,i,scUXdLRr9eSsVj5ObvBduziyAMEIZJTcHIdgxy6rg5kplhSOjhlnng8bcHuJlD+wywve+F6dJnB2slqeSs/85cTDFf1897aJa6dsOKuP9b61Yvzn9sy2mp4kbTPZnHhzQCrrJIKdWjRSFVc4Vk+Y7oDFjlDcGqjR9k2YLHTKWqw=,rhnb2AnJw4GRNoU7mytODc14imLxWYUvDyu+a750AWwl3hZyHykYbgkWEMnjiU8o0GUK7w0PHcKrYf4tmPs4jy//oB/SsNHGaI51tCGt4U3zxbwZwzOsCKkNUWVbSg+y1XB+mZEtZ9Ae1MMNSGf3CsudWKcc5q1IHo690IxytSw=$5OJ+772SAF5zUJIf5KuqTRUxUCLCDCiwj+7h/Ws+nU1x0uTYjBjLO3AVTJsUKOyIvQnyzfGK9sfzmnM9GeA8HD9lwLNNrRaFPUdUZW9Svh2puU0hfVn/lSnby9sB4hnXBMGtvej5GthTPAhY0l5qud+imS8CCyXEiN2PbeHah7jM3mBTi7Fde37C4hEIxjoypUkYlWU9a1CRFEWsM5vxfc/uqqdS/RzINaooGTxYK09MX8ZlbUR8szQ2mNKu6cTKscrE7eDpRyMU9uM899UvDc+QNic1lMh7NpuGgkPXsK5T6g68F5H0wXfaYNBu0DQlGpO0/y7/WjvkEwzKYVL30AP2EtLTi91O5f1+aqxi9WOqqIlBL7zNTTA7U54kBco1RksYRMLs01dsFq1uZdo1I8vz8uYzaqqjtiHyEhWz1B4CDYvXYzsWGtHFv0LaJnFuOCMbUU8xgMe6td0LsyCmVMXVHrHAFcKZRCeq/Qh6WhEgUkb6Zhl1Q/86vfK+qKtfvqm562t0b6fYI/ewaJW5Yts4t+38gUGHFXyi2SEYLVrL340N0fnIonJP0LbGQNfmfWZloRzoVOcrWCifP/SrUZHYxrGqwB20NuLNHW4YoYBSLsIu/SPpTDwJE/paYk9JGGyjjE+7Lvm0SApPn86IqHcaca4qia1Ykq57wcheiMFjW7xqy6OUvNr+tJ+kohhl3PCjKTv3gRtZL3O0ky4WD+ltKY80jxXRfWsUGL+MrPznVZI021mFmjoJBeiPpY+nv1rLII6hPUXbKLrE7BFmAzdn6MpRtJlIUkvdrQeoJEwCy0b35dqnFaOV9xjhWElq$8,7,6' \
--header 'Accept-Language: en;q=1.0' \
--data-raw '{"request":{"geoip":0,"appkey":"17E8F19C-098E-11E7-AC2C-11ACF3F4F7A7","formdata":{"where":{"brandname":{"eq":"Dicks Sporting Goods"}},"limit":15,"searchradius":"100","atleast":1,"geolocs":{"geoloc":[{"country":"US","addressline":"15106","latitude":"","longitude":""}]},"dataview":"store_default"}}}'
```
--------------
### Open Questions
- What is the data refresh rule for firebase and all other API's?
- What is the API's to get shop categories?
- Why does Shop Landing View contain tabs? (Shop discover and mystore) How will our framework communicated with the other framework? Delegate?
------------
Proposed Architecture:
```graphviz
digraph hierarchy {
nodesep=.5 // increases the separation between nodes
node [color=Red,fontname=Courier,shape=box] //All nodes will this shape and colour
edge [color=Blue, style=dashed] //All the lines look like this
HomeView->{Shop Discover MyStore}
Shop->{HeroCarousel Taxo Snapshot MyList RecentlyViewed RecommendedForYou}
Discover->{HeroList}
MyStore->{StoreList StoreDetails}
}
```
- Shell app contains setTapped method
- HomeView would be main view that contains the Shop, discover, and my store views. It would also contain conditional logic based on selected tab.
- We could add binding for the selectedTab from the shell app.
- This could define the view that is shown
---
__Setup of binding for selected tab__
```mermaid
classDiagram
class ShellApp {
- SelectedTab (State)
}
class HomeView {
- SelectedTab (Binding)
}
ShellApp --> HomeView
HomeView --> SelectedTab
SelectedTab --> Shop
SelectedTab --> Discover
SelectedTab --> MyStore
Shop --> ShopView
Discover --> DiscoverView
MyStore --> MystoreView
```
### Hackmd Meeting Notes:
- Cautious of shop framework usage
- WORK TO DO: New repo, branch off of that repo, merge work into repo (Keep folder structure completely separate)
- Create folder for tests
- Theme project only