From 6b68b7f90aad80eed520a66675235a0ca3a74113 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Mon, 30 Sep 2024 12:59:41 +0700 Subject: [PATCH] UBERF-8313: Fix select workspace sorting (#6766) Signed-off-by: Andrey Sobolev --- plugins/login-resources/src/utils.ts | 35 +++++++++++++++---- .../src/components/SelectWorkspaceMenu.svelte | 17 +-------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/plugins/login-resources/src/utils.ts b/plugins/login-resources/src/utils.ts index 02ea0a27c0..a73eaf9006 100644 --- a/plugins/login-resources/src/utils.ts +++ b/plugins/login-resources/src/utils.ts @@ -14,18 +14,18 @@ // import { Analytics } from '@hcengineering/analytics' -import { AccountRole, type Doc, type Ref, concatLink } from '@hcengineering/core' +import { AccountRole, concatLink, type Doc, type Ref } from '@hcengineering/core' import { loginId, type LoginInfo, type OtpInfo, type Workspace, type WorkspaceLoginInfo } from '@hcengineering/login' import { OK, PlatformError, + Severity, + Status, getMetadata, setMetadata, translate, unknownError, - unknownStatus, - Status, - Severity + unknownStatus } from '@hcengineering/platform' import presentation from '@hcengineering/presentation' import { @@ -39,9 +39,9 @@ import { } from '@hcengineering/ui' import { workbenchId } from '@hcengineering/workbench' -import login from './plugin' -import { type Pages } from './index' import { LoginEvents } from './analytics' +import { type Pages } from './index' +import login from './plugin' /** * Perform a login operation to required workspace with user credentials. @@ -207,6 +207,16 @@ export async function createWorkspace ( } } +function getLastVisitDays (it: Workspace): number { + return Math.floor((Date.now() - it.lastVisit) / (1000 * 3600 * 24)) +} +function getWorkspaceSize (it: Workspace): number { + let sz = 0 + sz += it.backupInfo?.dataSize ?? 0 + sz += it.backupInfo?.blobsSize ?? 0 + return sz +} + export async function getWorkspaces (): Promise { const accountsUrl = getMetadata(login.metadata.AccountsUrl) @@ -241,7 +251,18 @@ export async function getWorkspaces (): Promise { if (result.error != null) { throw new PlatformError(result.error) } - return result.result + const workspaces: Workspace[] = result.result + + workspaces.sort((a, b) => { + const adays = getLastVisitDays(a) + const bdays = getLastVisitDays(b) + if (adays === bdays) { + return getWorkspaceSize(b) - getWorkspaceSize(a) + } + return bdays - adays + }) + + return workspaces } catch (err) { return [] } diff --git a/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte b/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte index 1c149feeff..d42ec511af 100644 --- a/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte +++ b/plugins/workbench-resources/src/components/SelectWorkspaceMenu.svelte @@ -37,24 +37,9 @@ import { workspacesStore } from '../utils' // import Drag from './icons/Drag.svelte' - function getLastVisitDays (it: Workspace): number { - return Math.floor((Date.now() - it.lastVisit) / (1000 * 3600 * 24)) - } - onMount(() => { void getResource(login.function.GetWorkspaces).then(async (f) => { - const workspaces = await f() - - workspaces.sort((a, b) => { - const adays = getLastVisitDays(a) - const bdays = getLastVisitDays(a) - if (adays === bdays) { - return (b.backupInfo?.backupSize ?? 0) - (a.backupInfo?.backupSize ?? 0) - } - return bdays - adays - }) - - $workspacesStore = workspaces + $workspacesStore = await f() }) })