Geo Replicables - Revisiting the existing UI functionality
## Prelude Related to the following Issues: Unboxing the Geo Replication UI: https://gitlab.com/gitlab-org/gitlab/-/issues/361612 <br /> Supporting Resync/Reverify in SFF: https://gitlab.com/gitlab-org/gitlab/-/issues/216100 It has been quite a long time since we implemented the generic frontend for SSF into the Geo UI! [Just shy of two years to be exact](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35443)! At the time SSF was not very mature and lots and lots of unknowns existed that resulted in us creating a MVC to get the ball rolling. As SSF has matured we haven't looked back into the UI and checked in on what the SSF UI offered in comparison to the legacy views like Projects. ## How the Geo Replication UI displays Replicables 1. **Not supported (???)** - No Geo Replication view exists. 1. **Type A (< 12.6)** - View is built specifically in HAML and served via Rails Controller. 1. **Type B (12.6 - 13.0)** - View is built specifically in Vue and served via RESTful API. 1. **Type C (> 13.0)** - View is built generically in Vue and served via GraphQL API. **As of 2022-06-01** | DataType | Type | | ------ | ------ | | Wikis | Not supported | | Container Repositories | Not supported | | Projects | Type A | | Designs | Type B| | All SSF Replicables (everything else) | Type C | ## UI Functionality Support per Type _Not supported data types omitted from these tables as none of the following functionality exists._ - :white_check_mark: - Full Support - :x: - No Support **Table view with pagination** | Type | Support| | ------ | ------ | | Type A | :white_check_mark: | | Type B | :white_check_mark: | | Type C | :white_check_mark: | **Last Verified/Checked Information** | Type | Support| | ------ | ------ | | Type A | :white_check_mark: | | Type B | :x: | | Type C | :x: | **Filtering table by Status/Keyword** | Type | Support| | ------ | ------ | | Type A | :white_check_mark: | | Type B | :white_check_mark: | | Type C | :x: | **Resync Replicables** | Type | Support| | ------ | ------ | | Type A | :white_check_mark: | | Type B | :white_check_mark: | | Type C | :x: | **Reverify Replicables** | Type | Support| | ------ | ------ | | Type A | :white_check_mark: | | Type B | :x: | | Type C | :x: | ## UI Screenshots side-by-side | Type A | Type B | Type C | | ------ | ------ | ------ | | ![A](/uploads/f6d28aacbded0e48f2cc76ad8997fa19/A.png) | ![Screen_Shot_2022-06-01_at_3.07.32_PM](/uploads/acb72ed6c8f0f62e9463ad60ebf87521/Screen_Shot_2022-06-01_at_3.07.32_PM.png) | ![Screen_Shot_2022-06-01_at_3.07.49_PM](/uploads/67494130fc35752e3ddd4b4cc6ca6154/Screen_Shot_2022-06-01_at_3.07.49_PM.png) | ## Thoughts/Discoveries The last time we worked heavily in this UI we had only 1 or 2 SSF replicables and it wasn't a very heavy part of the Geo experience. After reviewing things after all this time it is clear that SSF replicables (Type C) is the **vast majority of data** in this UI. Yet almost off the existing functionality users have in the legacy Geo replicables (Type A) is non-existent for this replicables. Now that SSF is getting close to consuming all replicables it is becoming very important that we start bringing this functionality to the UI before we convert Projects (this last Type A). If we don't have this functionality the "upgrade" to SSF will actually be a large degradation if functionality for the user. ## Potential issues going forward We have been caught in a bit of a trap of waiting for the conversion of all replicables to SSF before we start trying to add functionality to the UI. As noted in the thoughts section above this is sort of a bind because we also need the functionality to do the conversion properly. From this point forward I think it is in our best interest to focus on SSF Replicables (Type C) when considering Geo functionality enhancements. The code is currently organized in a fashion to allow "conditional logic" for legacy replicables and is already doing so throughout the frontend. This means we can add code that only effects SSF replicables while leaving the legacy views alone without any serious fear of regressions. ## Questions for Backend Geo Team members 1. Do we have the ability in SSF to support any/all of the missing functionality broken down above? - What is the LOE to add support to SSF for any of the functionality we currently **do not** support. 2. Do we see any concerns of exposing this functionality to the Geo Replicables GraphQL endpoint? 3. Did I miss any edge case scenarios for these views? 4. Are we okay with the idea to focus on Type C replicables with the assumption Type A and Type B will eventually move over to SSF? ## Proposal 1. Expose/Add all missing functionality currently available on Type A Replicables to SSF Replicables (Type C). 2. Enhance the Geo Replicables GraphQL endpoint to expose and support all functionality. 3. Hook everything up in the Vue frontend. cc/ @geo-team Special thanks to @mkozono and @sunjungp for exploring these gaps in functionality today in our 1/1s :tada:
epic