We have implemented subgroups and now want to improve on the design to show the correct groups nested under their parent groups within the group dashboard.
Original issue
Group Dashboard
If you only have access to a subgroup and not to the corresponding parent group, list it as: Group name / Subgroup name as Role name
If you have access to a group and not to any of its subgroups, list it as: Group name as Role name [as it is today]
If you have access to a group and some of its subgroups, list it as: Group name as Role name
In this case, the subgroups would appear under the parent group and be collapsable
Individual group page
Groups have a new tab next to Projects called Subgroups
Listed shared projects should be titled: Group name / Subgroup name (if applicable) / Project name
Listed shared projects should be tagged Shared
Listed subgroups should not have the parent group in their title (e.g. Group name / Subgroup name) in the same way that projects of a group don't have the group in their title. They should be simply titled: Subgroup name
Group pages and sub group pages will have the same design because they share the same functionality.
Original Description
We need a way to display nested groups in GItLab UI.
Now when I visit group page I see only list of projects:
However if group has not only projects but few groups inside - we should list them too.
Some ideas to solve it:
Add groups tab
Render groups with projects in same list
@awhildy I need design for this problem. Nested groups feature is scheduled for 9.0 so its better to have it ready for 8.16. Can we do it?
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related or that one is blocking others.
Learn more.
Thanks @dzaporozhets. I personally find combining the subgroups in the same list as the projects confusing. The two items look similar, but not quite the same, thus it is odd to have them in the same list. The groups tab option makes a lot more sense to me. The downside is that you have to click to switch tabs to see the subgroups. I'm not too concerned about that -- but let me know if you have concerns about it. Thoughts @pedroms@tauriedavis?
@tauriedavis do you think it makes sense to show subgroups on dashboard/groups page? When I open File manager - it does not show me all nested directories inside directories right from start.
@dzaporozhets I do think it makes sense to show the nested groups on the dashboard page.
With the file view you can drill down to the information within a directory while still being on the same page. To drill down on a group in this view in the same way that the file manager works would not allow you to navigate to the primary group. This is because a directory with nested directories contains more information. But a group is not a directory that contains other groups, it is its own entity. Having both groups and nested groups on the groups dashboard allows you to navigate to both primary and nested groups from this view.
@tauriedavis I disagree with you. Lets say you are member of gitlab group (top-level) that has a lot of subgroups you are not interested in like marketing, sales, infrastructure etc. I don't see point of showing it unless you were added to subgroup explicitly as member.
Another example is Explore groups. It would be really annoying to explore company groups if you have all subgroups listed at same page. You would need to paginate a lot
I agree with you, @dzaporozhets. My thoughts were that the subgroups would only show up if you were a member of them. If there are other subgroups in a top-level group that you are not a part of, they should not appear on the your group dashboard page.
In this example, maybe Gitlab.org has five subgroups. I am only a member of two of them, so those two show up on my dashboard. We can also make them collapsable by default - this would help with the explore page as well which could have lots of subgroups since it is not tied to what you are a member of.
In this example, maybe Gitlab.org has five subgroups. I am only a member of two of them, so those two show up on my dashboard.
We can also make them collapsable by default - this would help with the explore page as well which could have lots of subgroups since it is not tied to what you are a member of.
@tauriedavis I am still wondering how Group page (show) will look like with subgroups. We have tabs All projects, Shared projects. Adding tab Subgroup logically does not fit there.
@tauriedavis for example we can have 2 tabs: Projects and Subgroups. And Projects tab will contain filter All / Shared and search bar and new project button.
It seems like subgroups should come before projects because they are at a higher level
@tauriedavis when visit group page you expect to see projects by default. It would be weird when visiting group page /:group you have second tab (Project) highlighted.
Is there any reason to remove sort options on the subgroups tab?
Because its not implemented yet. We don't have sort option at dashboard/groups too.
I think it makes sense to show the full path for shared projects Group / Project. This is how it is on the shared projects tab currently.
I believe you either show full path for all projects or for none in one list. Otherwise you might confuse shared project with nested one.
Maybe we can add a tag to shared projects so it is even more obvious that these are shared. We already add a tag for archived projects.
Just to add some quick thoughts on the discussion above:
I think we should show the full path for shared projects on the 'All projects' tab.
It helps in the case when projects may have the same name. How else will you know which project to click on?
The path helps differentiate between 'Shared' projects and the regular group projects.
Having the subgroups tab after the projects tab actually feels fine to me. I think it all depends on the focus of the page. For the group page, it is still primarily about the projects, so showing the most important element for the group first makes sense to me
@tauriedavis I believe thats how shared projects are rendered in the list now
I think we should show the full path for shared projects on the 'All projects' tab.
@awhildy seems like its already the case. My concern is that now with subgroups you might confuse shared project with nested one. So shared label would be good to have.
After reading through your discussion, here are some notes (please apologize if it sounds too direct):
Individual group page
Tab order: Subgroups, Projects
Listed subgroup projects should be titled: Subgroup name / Project name
Listed shared projects should be titled: Group name / Subgroup name (if applicable) / Project name
Listed shared projects should have a label (in the same way as @tauriedavis hinted that we already do that for archived projects)
Listed subgroups should not have the parent group in their title (e.g. Group name /Subgroup name) in the same way that projects of a group don't have the group in their title. They should be simply titled: Subgroup name
Explore Groups (dashboard)
Listed groups should be titled as: Group name (X subgroups) [see example]
Your Groups (dashboard)
If you only have access to a subgroup and not to the corresponding parent group, list it as: Group name / Subgroup name as Role name
If you have access to a group and not to any of its subgroups, list it as: Group name as Role name [as it is today]
If you have access to a group and some of its subgroups, list it as: Group name as Role name (+X subgroups) [see example]
In this case, the subgroups would appear under the parent group, without any collapsible control, as suggested by @tauriedavis
Thanks @pedroms, I've updated the description to be a SSOT.
A couple points I have regarding your notes:
Individual group page
Tab order: Subgroups, Projects
I dont disagree here, but I think we've decided on ordering them as Projects, Subgroups
Listed subgroup projects should be titled: Subgroup name / Project name
seems in conflict with
Listed subgroups should not have the parent group in their title (e.g. Group name / Subgroup name) in the same way that projects of a group don't have the group in their title. They should be simply titled: Subgroup name
The project will only display the project name, and not the subgroup associated with it. Right? The group page only shows projects created under that group, so the Group name is not necessary (I think).
Explore Groups/Your Groups
In slack we decided not to include the (+X groups) because it seemed confusing to potentially have a different number on Your Groups vs. the number you were a member off. We've also kept the collapsable component for both tabs so you can view all groups and subgroups.
Your Groups
In this case, the subgroups would appear under the parent group, without any collapsible control
I dont disagree here, but I think we've decided on ordering them as Projects, Subgroups
@tauriedavis Yes, sorry! I meant the other way around
The group page only shows projects created under that group, so the Group name is not necessary (I think).
@tauriedavis Oh, I thought it would also show projects under its subgroups. Can you please confirm that?
Why would it not be collapsable?
If you are a member of a Group, are you also automatically a member of all of its Subgroups? If so, I agree that it should be collapsible. If not, I think we should treat Subgroups memberships in the same way as Groups memberships, so they have the same visibility and importance.
Oh, I thought it would also show projects under its subgroups.
Each group page will show the projects that are created under that group and the subgroups created under that group. To see the projects created under a subgroup, you would navigate to the subgroup page.
If you are a member of a Group, are you also automatically a member of all of its Subgroups? If so, I agree that it should be collapsible. If not, I think we should treat Subgroups memberships in the same way as Groups memberships, so they have the same visibility and importance.
I don't believe you are automatically added to all subgroups. I am double checking this. I think making this an option (add to all subgroups or not) for when you add a new member to a group could be a feature improvement in the future. I think adding the ability to be collapsable just allows for easier navigation and mimics how the explore groups tab will function.
@victorwu sorry I should have change the title. We do ship nested groups in 9.0 (btw checkout dev.gitlab.org to test the feature) but UI improvements discussed here are likely to go in 9.1
@annabeldunstone sorry to keep coming back on this, but do you mean that within every subgroup (or the top level group), parents should be directly above their children? Or all parents should be at the top? Say I have this group structure:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
What order should they be in? The order I've just given, but flattened? A, K, L first, then B, G, etc.? Something else?
@annabeldunstone right, but that only accounts for one level of nesting. Do we need the ordering the same otherwise? I think this might be hard, but it's Friday, so I could be wrong!
@smcgivern I'm not sure... is there any end to the subgroups you can create? I assume if you add a subgroup under Subgroup 01 from the screenshot, then that new group gets nested underneath Subgroup 01. And it just keeps going like that
This might be a lot bigger than a simple UI update.
cc @dzaporozhets
@smcgivern I spoke to @tauriedavis about that. The design won't scale too well at first; this is more just a first iteration. Is there a significant amount of backend development to be done before this nesting is possible?
Working on some improvements so this scales better, I think we can utilize a similar UX as repo. Clicking on the row would navigate to the contents inside of the group. Clicking on the group name would navigate to the group. If there are no subgroups within a group, clicking the row would navigate to the group, just as clicking a file navigates to the file. When inside of a group, the first row allows the user to navigate back.
@tauriedavis I think it'd be good if we could emulate the way native file browsers work, where you can choose to expand the tree in place or replace the view with a subfolder.
@cperessini : Really like that idea. There's plenty of places where that native-style navigation would be applicable. If the design team thinks that's a good direction to head in, this issue can be a great starter to implement that design before bringing it to other places.
Nice, I forgot about that mockup @cperessini. Do you think it would work with the group avatar images? In the description you can see how much space they take up currently, so the indent is pretty large.
@tauriedavis I don't think the pictures are a problem for indentation because they can overlap a little.
I created some mockups to test it out. I think it could be due to the repeating images and text, but it gets a little heavy and hard to parse. What do you think?
@tauriedavis you're right, I think I didn't grab the latest Sketch file from that other issue. We had also landed on a different structure for the lines
I used a darker color for the icons to match the ones on the right side of the page. It looks strange to have the lighter icons on the left, even if they work better for the tree
Yeah, I agree. The concept of this design is the same as shown in the description currently so I think we can just replace it with your new mockup Thanks @cperessini !
@tauriedavis@cperessini : Can we limit this to only the group dashboard page. Let's do one thing at a time. Let's work on the individual group page in a different issue. I suppose we can design/implement the group dashboard page first since that's more generic, and the design will carry over?
A few questions:
Everything should be collapsed to the highest parent group per the comments above right?
Per the description, why is the UI different depending whether you have permissions or not to access certain groups? That seems unnecessarily confusing to me. If we are using this native file browsing design as an analogy, a standard design is:
If you have permissions to view a file / folder name, you can see it.
If you don't have permissions to even know a file / folder exists, you cannot even see it, it's invisible to you.
If you have permissions to view a file / folder name, but you don't have access to see it's contents, the file / folder name is greyed out, and clicking on it does nothing.
Can't we just have a similar design instead of what's described in the description. Yes, it's more clicking, but I would say more usable. Thoughts?
The subgroups to subdirectories analogy is clear. But in the icons above, we have fa-users and fa-folder and fa-folder-open. Is that weird that we have people and manilla folders as icons? Sorry not being helpful here with providing a good solution. But just pointing out the perceived weirdness. Not sure if we want to create our icons. Thoughts?
Victor Wuchanged title from Subgroups UI improvements to Group dashboard UI
changed title from Subgroups UI improvements to Group dashboard UI
Can we limit this to only the group dashboard page.
Sure
Everything should be collapsed to the highest parent group per the comments above right?
Yep
why is the UI different depending whether you have permissions or not to access certain groups?
I'm confused. I don't think groups display if you dont have access to them. I don't believe the functionality of what displays on the group dashboard is changing from what it is today. Only the design of it being nested. Does that make sense @victorwu? I think those bullet points in the description are actually for what is currently in place, and this issue was reused for the ui updates. I've updated the description to separate the original points from the current task. Sorry this was confusing
Is that weird that we have people and manilla folders as icons?
I struggled with this as well. @hazelyang is great at coming up with icons, perhaps she has a suggestion on an improvement.
Thanks @tauriedavis for the clarification. Makes a lot more sense now. Let's implement exactly what you have in the mockup if we can't come up with better icons. It's a already a huge improvement.
@tauriedavis what happens for groups that have no subgroups in the visual design treatment? Is there a big gap to the left where you currently have the folder and expand chevron?
@mydigitalself The icon would still be there so there wouldn't be a large gap. It would be the group icon, rather than the folder icon - like how you see the last children groups in the mockup above.
@dzaporozhets Here's the data I need, basically a nested array of group objects. sub_groups property is optional depending if the group has submodules or not. I'm just not considering pagination yet.
The endpoint path and the data it needs is up to you but probably I'll have to provide Parent Group Id when viewing subgroups tab in the groups page.
Group Dashboard
[{group:{name,url,avatar,description,edit_url,leave_url,visibility_level,// [private|internal|public]},stats:{number_of_projects,number_of_members,}user:{role,// Role in current groupcan_edit,// would be nice to have it as boolean so I can show the edit button}sub_groups:[{group:{// ...},stats:{// ...},user:{// ...},sub_groups:[// ... if it has sub modules]}]}]
@alfredo1 are subgroups/project are expanded by default? I would expect only sending data for what user sees. So when I click expand button we make a new request to load subgroups/projects. Otherwise it might be a performance problem by loading all data as stated at https://gitlab.com/gitlab-org/gitlab-ce/issues/25426#note_28782014
@tauriedavis Thanks! So we will paginate groups since that's what we are doing right now.
@dzaporozhets I'm going to need pagination data. I think we already do AJAX pagination on the Pipelines feature. So I'm going to take a look how it works there and will comment with the data I need.
I'm going to need pagination data. I think we already do AJAX pagination on the Pipelines feature. So I'm going to take a look how it works there and will comment with the data I need.
@alfredo1 whats special about Pipelines pagination compared to existing projects/groups pagination?
We can change this json endpoint to return actual json array of groups data. But then we need to update AJAX search/filter accordingly
I will add extra parameter like parent_id so you can request subgroups on user click via request like https://gitlab.com/dashboard/groups.json?parent_id=12