Add a way for frontend to know what URL to use when switching organizations
Update
Closed in favor of #437541 (closed) and #437095
Background
In Allow switching of organizations (#423116 - closed) we are adding an organization switcher to the sidebar navigation. This switcher will list the available organizations by using the GraphQL query that was added in !136024 (merged). We need a way to know what URL to go to when switching organizations. For example if you are in the default organization on the main dashboard the URL would be https://gitlab.com
. If you were to switch to the foo-bar
organization the URL would be https://gitlab.com/-/organizations/foo-bar/dashboard/projects
, but the frontend doesn't currently have a way to calculate this URL.
Proposal
Current organization
- Backend will calculate the current organization and expose it via the
current_organization
method in lib/organization/current_organization.rb#L11 - We will expose the current organization to the frontend in lib/gitlab/gon_helper.rb similar to how we expose
current_user
- The frontend will use
gon.current_organization
to display the current organization in the organization selector.
Switching organizations
- Create a Rails helper (let's call it
current_route_scoped_to_organization
for now) that calculates the current route in the context of an organization.- If it is a route that can be scoped to organizations such as your work or your profile it returns a route with a placeholder for the organization path. e.g.
https://gitlab.com/-/organizations/:organization_path/dashboard/projects
- If it is a route that cannot be scoped to an organization (such as
https://gitlab.com/gitlab-org/gitlab
orhttps://gitlab.com/gitlab-org/
returnnil
- If it is a route that can be scoped to organizations such as your work or your profile it returns a route with a placeholder for the organization path. e.g.
- Pass the return value of
current_route_scoped_to_organization
to the frontend via a data attribute. - In the frontend, if
current_route_scoped_to_organization
isnull
link to the organization front page. Ifcurrent_route_scoped_to_organization
is a string replace:organization_path
with the organization path and link to that URL.
Implementation guide
Need to confirm proposal makes sense then refine.
Edited by Peter Hegman