feat(workspaces): change sorting order of the workspace list (#7594)

* feat(workspaces): implement sorting order on workspace list

* split slice into its own function and test it

* use require instead of assert

* Update coderd/workspaces_internal_test.go

Co-authored-by: Cian Johnston <cian@coder.com>

* refactor tests into table tests

* fix test

---------

Co-authored-by: Cian Johnston <cian@coder.com>
This commit is contained in:
Rodrigo Maia
2023-05-22 20:51:29 +00:00
committed by GitHub
co-authored by Cian Johnston
parent 5d711fc95a
commit 4a320617b4
2 changed files with 117 additions and 5 deletions
+23 -5
View File
@@ -1147,16 +1147,34 @@ func convertWorkspaces(workspaces []database.Workspace, data workspaceData) ([]c
&owner,
))
}
sort.Slice(apiWorkspaces, func(i, j int) bool {
iw := apiWorkspaces[i]
jw := apiWorkspaces[j]
sortWorkspaces(apiWorkspaces)
return apiWorkspaces, nil
}
func sortWorkspaces(workspaces []codersdk.Workspace) {
sort.Slice(workspaces, func(i, j int) bool {
iw := workspaces[i]
jw := workspaces[j]
if iw.LatestBuild.Status == codersdk.WorkspaceStatusRunning && jw.LatestBuild.Status != codersdk.WorkspaceStatusRunning {
return true
}
if jw.LatestBuild.Status == codersdk.WorkspaceStatusRunning && iw.LatestBuild.Status != codersdk.WorkspaceStatusRunning {
return false
}
if iw.OwnerID != jw.OwnerID {
return iw.OwnerName < jw.OwnerName
}
if jw.LastUsedAt.IsZero() && iw.LastUsedAt.IsZero() {
return iw.Name < jw.Name
}
return iw.LastUsedAt.After(jw.LastUsedAt)
})
return apiWorkspaces, nil
}
func convertWorkspace(