23 Commits

Author SHA1 Message Date
2dc81fcc59 Registered the LocationViewCell with the "table" outlet in the LocationsListViewController view controller and updated its "tableView(_: cellForRowAt: )" function to use and update the mentioned cell. 2023-04-12 18:42:07 +02:00
63f476157f Implemented the LocationViewCell cell. 2023-04-12 18:35:20 +02:00
51e4c64a11 Conformed the LocationsListViewController view controller to the UITableViewDataSource and the UITableViewDelegate protocols. 2023-04-12 16:38:11 +02:00
ea9fea98b3 Implemented the "numberOfSectionsInData" property and the "numberOfDataItems(in: )" and "dataItem(at: )" functions in the LocationsListViewModel view model. 2023-04-12 16:35:57 +02:00
985e8ffe8e Implemented the "loadLocations()" function in the LocationsListViewModel view model. 2023-04-12 16:34:49 +02:00
94d905ffc3 Defined the properties and functions to load and to retrieve data from the Persistence stack. 2023-04-12 16:32:34 +02:00
8c50ce3653 Implemented the LoadRemoteLocationsUseCase use case. 2023-04-12 15:22:30 +02:00
4f315d7bfb Implemented the "allLocations()" static function in the NSFetchRequest+Location extension. 2023-04-12 15:14:02 +02:00
543417744b Turned off the Location entity automatic code generation from the Model core data model in the Persistence library. 2023-04-12 14:57:40 +02:00
f718210180 Added the "viewStatusPublisher" property to the LocationsListViewModeling protocol and binded this property to the LocationsListViewController view controller. 2023-04-12 13:50:48 +02:00
39ec206454 Implemented the outlets of the LocationsListViewController view controller. 2023-04-12 12:50:26 +02:00
c91cbbe7dc Implemented the ErrorMessageView custom view. 2023-04-12 12:31:10 +02:00
3dba1de84e Implemented the LoadingSpinnerView custom view. 2023-04-12 09:49:31 +02:00
43c156a2c3 [Setup] App architecture (#9)
This PR contains the work done to put in the app an MVVM-C architecture plus other small fixes in the `Library` libraries.

To give further details about the work done:
- [x] remove the `SceneDelegate` delegate;
- [x] implemented the `WindowRouter`, `PushNavigationRouter`, and `ModalNavigationRouter` routers in the `Core` library;
- [x] defined the `LocationsAddCoordination` and `LocationsListCoordination` protocols;
- [x] defined the `LocationsAddViewModeling` and `LocationsListViewModeling` protocols;
- [x] implemented the `LocationsListCoordinator` and `LocationsAddCoordinator` coordinators;
- [x] implemented the `LocationsAddViewController` view controller and `LocationsAddViewModel` view model;
- [x] implemented the `LocationsListViewController` view controller and `LocationsListViewModel` view model;
- [x] implemented the `BaseViewController` base view controller;
- [x] implemented the `persistence` and `remote` properties in the `DependencyService+Keys` extension.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#9
2023-04-11 22:14:40 +00:00
d51cc97aa4 [Bugfix] Location library naming (#8)
This PR contains a bugfix that appeared while I started working on the app itself. Basically, the app was not building as the compiler was complaining about duplicated files in the project, but given that I couldn't find any, then I found out that the compiler doesn't like that a library name and an app target share the same name.

So I renamed the `Locations` library in the **Libraries** package as `Remote` (for the lack of a better word...) to fix this issue that was stopping me from continue working on implementing the app.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#8
2023-04-11 15:57:38 +00:00
9172827b8b [Libraries] Core (#7)
This PR contains the work that implements the Core library, which is used to define the architecture of the app.

To give further details on what was done:
- [x] created the `Core` library into the **Libraries** package;
- [x] defined the `Router` protocol;
- [x] defined the `Coordinator` protocol;
- [x] defined the `View` protocol;
- [x] defined the `ViewModel` protocol;
- [x] implemented the `NavigationRouter` router.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#7
2023-04-11 13:59:08 +00:00
cb90b3730d [Libraries] Dependency (#6)
This PR contains the work that implements the Dependency service, which is used as a dependency injection mechanism in the application.

To give further details on what was done:
- [x] created the `Dependency` library into the **Libraries** package;
- [x] defined the `DependencyKey` protocol;
- [x] implemented the `DependencyService` service;
- [x] implemented the `Dependency` property wrapper.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#6
2023-04-11 00:41:07 +00:00
4210df9eb6 [Libraries] Persistence (#5)
This PR contains the work that implements the Persistence service, which is used to store and serve the data of the application.

To give further details on what was done:
- [x] created the `Persistence`library into the **Libraries** package;
- [x] defined the `Location` model into the **Model** core data model;
- [x] implemented the `PersistenceService` service;
- [x] removed the core data stack boilerplate code from the `AppDelegate` and `SceneDelegate` delegates in the *Locations* target.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#5
2023-04-10 22:59:58 +00:00
6da2e946ce [Libraries] Locations (#4)
This PR contains the work that implements the Locations service, which is used to retrieve location data from a remote server.

To give further details on what was done:
- [x] created the `APICore` and `Locations` libraries into the **Libraries** package;
- [x] defined the `Endpoint` and `Client` protocols;
- [x] implemented the `MakeURLRequestUseCase` use case;
- [x] implemented the `MockURLProtocol` protocol and the `MockURLResponse` models;
- [x] implemented the `Location` model;
- [x] implemented the `GetLocationsEndpoint` endpoint;
- [x] implemented the `LocationsClient` client;
- [x] implemented the `LocationsService` service.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#4
2023-04-10 15:31:22 +00:00
14e39a40ae [Setup] Locations app (#3)
This PR contains the work done to setup the Locations app and lay the basis to start working on it.

To give further details on what was done:
- [x] defined the app icon asset;
- [x] defined the color and image assets to use on the **Launch** screen;
- [x] implemented the **Launch** screen on storyboard due to the issues encountered while trying to define the launch screen directly from the `Info.plist`;
- [x] removed the **Main** storyboard from the `Locations` target;
- [x] implemented the manual loading of the `ViewController` view controller from the `SceneDelegate` delegate;
- [x] fixed the product bundle identifier of the `Locations` target.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#3
2023-04-09 18:47:10 +00:00
6d76ba467c [Feature] Enhance the places deep linking support in the Wikipedia app to support coordinates (#2)
This PR contains the work done to add support to the **Wikipedia** app to show a custom location in the map of the *Places* view coming from a places deep link.

To provide further details about the work:
- [x] implemented the handling of location coordinates coming from a URL inside the function that generates a `NSUSerActivity` instance out of *places* deep links;
- [x] added the `wmf_locationFromURL` property to the `NSUSerActivity` via an extension that returns a `CLLocation` instance with latitude and longitude coordinates if provided;
- [x] implemented the "centerMap(onLocation:)" function in the `PlacesViewController` view controller that, essentially, center the map of this view controller to a given location;
- [x] improved the handling of a *places* user activity in the `WMFAppViewController` view controller to center the map in case a location has been provided via a deep link;
- [x] fixed some duplicated code that was blocking the test from compiling.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#2
2023-04-09 16:27:53 +00:00
9bcdaa697b [Setup] Basic project structure (#1)
This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended.

To summarise this work:
- [x] created a new **Xcode** project;
- [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project;
- [x] created the `Locations` app and also, its `Libraries` package;
- [x] created the `Shared` package to share dependencies between the apps;
- [x] added a `Makefile` file and implemented some **environment** and **help** commands.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#1
2023-04-08 18:37:13 +00:00
365387ae0c Initial commit 2023-04-07 09:16:48 +00:00