mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-04-15 01:41:56 +00:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { useStorage } from '@vueuse/core';
|
|
import { ref } from 'vue';
|
|
|
|
import type { Repo } from '~/lib/api/types';
|
|
import { usePipelineStore } from '~/store/pipelines';
|
|
|
|
export default function useRepos() {
|
|
const pipelineStore = usePipelineStore();
|
|
const lastAccess = useStorage('woodpecker:repo-last-access', new Map<number, number>());
|
|
|
|
function repoWithLastPipeline(repo: Repo): Repo {
|
|
if (repo.last_pipeline_number === undefined) {
|
|
return repo;
|
|
}
|
|
|
|
if (repo.last_pipeline?.number === repo.last_pipeline_number) {
|
|
return repo;
|
|
}
|
|
|
|
const lastPipeline = pipelineStore.getPipeline(ref(repo.id), ref(repo.last_pipeline_number)).value;
|
|
|
|
return {
|
|
...repo,
|
|
last_pipeline: lastPipeline,
|
|
};
|
|
}
|
|
|
|
function sortReposByLastAccess(repos: Repo[]): Repo[] {
|
|
return repos
|
|
.filter((r) => lastAccess.value.get(r.id) !== undefined)
|
|
.sort((a, b) => {
|
|
const aLastAccess = lastAccess.value.get(a.id)!;
|
|
const bLastAccess = lastAccess.value.get(b.id)!;
|
|
|
|
return bLastAccess - aLastAccess;
|
|
});
|
|
}
|
|
|
|
function sortReposByLastActivity(repos: Repo[]): Repo[] {
|
|
return repos.sort((a, b) => {
|
|
const aLastActivity = a.last_pipeline?.created ?? 0;
|
|
const bLastActivity = b.last_pipeline?.created ?? 0;
|
|
return bLastActivity - aLastActivity;
|
|
});
|
|
}
|
|
|
|
function updateLastAccess(repoId: number) {
|
|
lastAccess.value.set(repoId, Date.now());
|
|
}
|
|
|
|
return {
|
|
sortReposByLastAccess,
|
|
sortReposByLastActivity,
|
|
repoWithLastPipeline,
|
|
updateLastAccess,
|
|
};
|
|
}
|