From 6049eb4675151c9eda0408677936f1d65a7d805e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 17:17:48 +0200 Subject: [PATCH] commits paging --- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 10 +-------- .../buttons/sourcecontrolbuttons.tsx | 4 ++-- libs/remix-ui/git/src/components/gitui.tsx | 10 +++++++-- .../git/src/components/panels/commits.tsx | 11 +++++----- libs/remix-ui/git/src/lib/gitactions.ts | 22 ++++++++++++------- libs/remix-ui/git/src/lib/listeners.ts | 14 ++++++------ libs/remix-ui/git/src/state/actions.ts | 2 ++ libs/remix-ui/git/src/state/context.tsx | 3 ++- libs/remix-ui/git/src/state/gitpayload.ts | 14 ++++++++++++ libs/remix-ui/git/src/state/gitreducer.tsx | 13 ++++++++++- libs/remix-ui/git/src/types/index.ts | 13 +++++++++-- 11 files changed, 78 insertions(+), 38 deletions(-) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 05e9f0efdd..886eeb531e 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -95,18 +95,10 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return [] } - const logCount = await git.log({ - ...await this.getGitConfig(), - ...cmd, - depth: 100 - }) - - console.log('LOG-COUNT', logCount.length) - const log = await git.log({ ...await this.getGitConfig(), ...cmd, - depth: 10 + depth: cmd.depth || 10 }) console.log('LOG') return log diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index c8273914bc..0f0300ae49 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -5,7 +5,7 @@ import React, { useEffect, useState } from "react" import { FormattedMessage } from "react-intl" import { gitActionsContext } from "../../state/context" import { branch, remote } from "@remix-api" -import { gitMatomoEventTypes } from "../../types" +import { defaultGitState, gitMatomoEventTypes } from "../../types" import { gitPluginContext } from "../gitui" import GitUIButton from "./gituibutton" import { syncStateContext } from "./sourceControlBase" @@ -55,7 +55,7 @@ export const SourceControlButtons = () => { const refresh = async() => { await sendToMatomo(gitMatomoEventTypes.REFRESH) await actions.getFileStatusMatrix(null) - await actions.gitlog() + actions.setStateGitLogCount(defaultGitState.gitLogCount) } const buttonsDisabled = () => { diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index dafe1c4c3f..21fce4a1bd 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useReducer, useState, useContext } from 'react' -import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' +import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog, setStateGitLogCount } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' import { openDiff, openFile, openFolderInSameWindow, sendToMatomo, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' @@ -74,6 +74,11 @@ export const GitUI = (props: IGitUi) => { }, [appLoaded]) + useEffect(() => { + if (!appLoaded) return + gitlog(gitState.gitLogCount) + }, [gitState.timestamp, gitState.gitLogCount]) + useEffect(() => { if (!appLoaded) return async function checkconfig() { @@ -159,7 +164,8 @@ export const GitUI = (props: IGitUi) => { clearGitLog, getFileStatusMatrix, gitlog, - init + init, + setStateGitLogCount } const pluginActionsProviderValue = { diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index 7df8b8a96b..a7ed6d42e8 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -1,12 +1,10 @@ -import { checkout, ReadCommitResult } from "isomorphic-git"; +import { ReadCommitResult } from "isomorphic-git"; import React from "react"; import { gitActionsContext } from "../../state/context"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; -import LoaderIndicator from "../navigation/loaderindicator"; import { BranchDifferences } from "./branches/branchdifferences"; import { CommitDetails } from "./commits/commitdetails"; -import { CommitSummary } from "./commits/commitsummary"; export const Commits = () => { const [hasNextPage, setHasNextPage] = React.useState(true) @@ -22,14 +20,15 @@ export const Commits = () => { }; const loadNextPage = () => { + actions.setStateGitLogCount(context.gitLogCount + 5) actions.fetch({ remote: null, ref: context.currentBranch, relative: true, depth: 5, - singleBranch: true + singleBranch: true, + quiet: true }) - } const getRemote = () => { @@ -49,7 +48,7 @@ export const Commits = () => { {context.commits && context.commits.length ? <>
- {context.commits && context.commits.slice(0,5).map((commit, index) => { + {context.commits && context.commits.map((commit, index) => { return ( ); diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 9962d72754..d932933056 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -1,6 +1,6 @@ import { ReadBlobResult, ReadCommitResult } from "isomorphic-git"; import React from "react"; -import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences } from "../state/gitpayload"; +import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences, setTimestamp, setGitLogCount } from "../state/gitpayload"; import { gitActionDispatch, statusMatrixType, gitState, gitLog, fileStatusResult, storage, gitMatomoEventTypes } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; @@ -41,7 +41,7 @@ export const setPlugin = (p: Plugin, dispatcher: React.Dispatch { await sendToMatomo(gitMatomoEventTypes.INIT) await plugin.call('dgitApi', "init"); - await gitlog(); + dispatch(setTimestamp(Date.now())) await getBranches(); } @@ -83,13 +83,13 @@ export const getFileStatusMatrix = async (filepaths: string[]) => { dispatch(setLoading(false)) } -export const getCommits = async () => { +export const getCommits = async (depth: number) => { try { const commits: ReadCommitResult[] = await plugin.call( 'dgitApi', "log", - { ref: "HEAD" } + { ref: "HEAD", depth: depth } ); console.log('commits', commits) return commits; @@ -98,12 +98,12 @@ export const getCommits = async () => { } } -export const gitlog = async () => { +export const gitlog = async (depth: number) => { console.log('gitlog start') dispatch(setLoading(true)) let commits = [] try { - commits = await getCommits() + commits = await getCommits(depth) } catch (e) { } dispatch(setCommits(commits)) @@ -112,6 +112,10 @@ export const gitlog = async () => { console.log('gitlog end') } +export const setStateGitLogCount = async (count: number) => { + dispatch(setGitLogCount(count)) +} + export const showCurrentBranch = async () => { try { const branch = await currentBranch(); @@ -346,7 +350,7 @@ export const fetch = async (input: fetchInputType) => { try { await plugin.call('dgitApi', 'fetch', input); if (!input.quiet) { - await gitlog() + dispatch(setTimestamp(Date.now())) await getBranches() } } catch (e: any) { @@ -363,7 +367,7 @@ export const pull = async (input: pullInputType) => { await disableCallBacks() try { await plugin.call('dgitApi', 'pull', input) - await gitlog() + dispatch(setTimestamp(Date.now())) } catch (e: any) { console.log(e) await parseError(e) @@ -397,6 +401,8 @@ const tokenWarning = async () => { const parseError = async (e: any) => { console.trace(e) + if(!e.message) return + // if message conttains 401 Unauthorized, show token warning if (e.message.includes('401')) { await sendToMatomo(gitMatomoEventTypes.ERROR, ['401']) diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index b4a93a6cc8..4b11b0adae 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -1,6 +1,6 @@ import React from "react"; -import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir, setVersion } from "../state/gitpayload"; +import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir, setVersion, setTimestamp } from "../state/gitpayload"; import { gitActionDispatch, gitUIPanels, storage } from "../types"; import { Plugin } from "@remixproject/engine"; import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, gitlog, setPlugin, setStorage } from "./gitactions"; @@ -78,7 +78,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -105,7 +105,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -117,7 +117,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -148,7 +148,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }, 10) loadFileQueue.enqueue(async () => { getBranches() @@ -160,7 +160,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -182,7 +182,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) }) plugin.on('manager', 'pluginActivated', async (p: Profile) => { diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index c596727901..4cd9de59e0 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -48,6 +48,8 @@ export interface ActionPayloadTypes { DESKTOP_SET_WORKING_DIR: string SET_VERSION: string SET_STORAGE: storage + SET_TIMESTAMP: number + SET_GIT_LOG_COUNT: number } export interface Action { diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index f46ae5b7d7..ff59a40d91 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -32,8 +32,9 @@ export interface gitActions { sendToGitLog: (message: gitLog) => Promise clearGitLog: () => Promise getFileStatusMatrix(filespaths:[]): Promise - gitlog(): Promise + gitlog(depth: number): Promise init(): Promise + setStateGitLogCount(count: number): Promise } export const gitActionsContext = React.createContext(null) diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index 9b6a0b19f8..36fc1f837d 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -246,3 +246,17 @@ export const setStoragePayload = (storage: storage) => { payload: storage } } + +export const setTimestamp = (timestamp: number) => { + return { + type: 'SET_TIMESTAMP', + payload: timestamp + } +} + +export const setGitLogCount = (count: number) => { + return { + type: 'SET_GIT_LOG_COUNT', + payload: count + } +} diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 088ea9db9f..d9db9437d5 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -226,6 +226,17 @@ export const gitReducer = (state: gitState = defaultGitState, action: Actions): ...state, storage: action.payload } - + case 'SET_TIMESTAMP': + return { + ...state, + timestamp: action.payload + } + + case 'SET_GIT_LOG_COUNT': + return { + ...state, + gitLogCount: action.payload + } } + } diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 6c3d35c32e..1f46be0f12 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -38,6 +38,8 @@ export type gitState = { log: gitLog[] desktopWorkingDir?: string version: string + timestamp: number + gitLogCount: number } export type gitLog = { type: 'error' | 'warning' | 'info' | 'success', @@ -95,7 +97,9 @@ export const defaultGitState: gitState = { gitHubAccessToken: "", log: [], desktopWorkingDir: null, - version: "" + version: "", + timestamp: 0, + gitLogCount: 22 } export const defaultLoaderState: loaderState = { @@ -290,4 +294,9 @@ export interface setDesktopWorkingDirAction { payload: string } -export type gitActionDispatch = setDesktopWorkingDirAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file +export interface setTimeStampAction { + type: string, + payload: number +} + +export type gitActionDispatch = setTimeStampAction |setDesktopWorkingDirAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file