From f914d940384c1087a0f39540bf7a11ad2cbab5eb Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Fri, 2 Aug 2024 13:28:20 -0300 Subject: [PATCH] Reduce requests when switching between History and Source view Adds the same `previousLoadedRoute` strategy used in source views to the commit listing view. Since we where re-fetching the project endpoint, node, policies and other things in between tabs, also adds takes the tree type from one tab to the other since it's immutable --- src/views/projects/router.ts | 61 ++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/src/views/projects/router.ts b/src/views/projects/router.ts index f3de93655..d4e7316d6 100644 --- a/src/views/projects/router.ts +++ b/src/views/projects/router.ts @@ -269,7 +269,7 @@ export async function loadProjectRoute( if (route.resource === "project.source") { return await loadTreeView(route, previousLoaded); } else if (route.resource === "project.history") { - return await loadHistoryView(route); + return await loadHistoryView(route, previousLoaded); } else if (route.resource === "project.commit") { const [project, commit, seedingPolicy, node] = await Promise.all([ api.project.getById(route.project), @@ -386,25 +386,31 @@ async function loadTreeView( let projectPromise: Promise; let seedingPolicyPromise: Promise; let peersPromise: Promise; + let nodePromise: Promise>; if ( - previousLoaded.resource === "project.source" && + (previousLoaded.resource === "project.source" || + previousLoaded.resource === "project.history") && previousLoaded.params.project.id === route.project && previousLoaded.params.peer === route.peer ) { projectPromise = Promise.resolve(previousLoaded.params.project); peersPromise = Promise.resolve(previousLoaded.params.peers); seedingPolicyPromise = Promise.resolve(previousLoaded.params.seedingPolicy); + nodePromise = Promise.resolve({ + avatarUrl: previousLoaded.params.nodeAvatarUrl, + }); } else { projectPromise = api.project.getById(route.project); peersPromise = api.project.getAllRemotes(route.project); seedingPolicyPromise = api.getPolicyById(route.project); + nodePromise = api.getNode(); } const [project, peers, seedingPolicy, node] = await Promise.all([ projectPromise, peersPromise, seedingPolicyPromise, - api.getNode(), + nodePromise, ]); let branchMap: Record = { @@ -508,15 +514,39 @@ async function loadBlob( } async function loadHistoryView( route: ProjectHistoryRoute, + previousLoaded: LoadedRoute, ): Promise { const api = new HttpdClient(route.node); + let projectPromise: Promise; + let seedingPolicyPromise: Promise; + let peersPromise: Promise; + let nodePromise: Promise>; + if ( + (previousLoaded.resource === "project.source" || + previousLoaded.resource === "project.history") && + previousLoaded.params.project.id === route.project && + previousLoaded.params.peer === route.peer + ) { + projectPromise = Promise.resolve(previousLoaded.params.project); + peersPromise = Promise.resolve(previousLoaded.params.peers); + seedingPolicyPromise = Promise.resolve(previousLoaded.params.seedingPolicy); + nodePromise = Promise.resolve({ + avatarUrl: previousLoaded.params.nodeAvatarUrl, + }); + } else { + projectPromise = api.project.getById(route.project); + peersPromise = api.project.getAllRemotes(route.project); + seedingPolicyPromise = api.getPolicyById(route.project); + nodePromise = api.getNode(); + } + const [project, peers, seedingPolicy, branchMap, node] = await Promise.all([ - api.project.getById(route.project), - api.project.getAllRemotes(route.project), - api.getPolicyById(route.project), + projectPromise, + peersPromise, + seedingPolicyPromise, getPeerBranches(api, route.project, route.peer), - api.getNode(), + nodePromise, ]); let commitId; @@ -534,9 +564,22 @@ async function loadHistoryView( ); } + let treePromise: Promise; + + if ( + (previousLoaded.resource === "project.source" || + previousLoaded.resource === "project.history") && + previousLoaded.params.project.id === route.project && + previousLoaded.params.commit === commitId + ) { + treePromise = Promise.resolve(previousLoaded.params.tree); + } else { + treePromise = api.project.getTree(route.project, commitId); + } + const [tree, commitHeaders] = await Promise.all([ - api.project.getTree(route.project, commitId), - await api.project.getAllCommits(project.id, { + treePromise, + api.project.getAllCommits(project.id, { parent: commitId, page: 0, perPage: config.source.commitsPerPage,