mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-06 16:03:52 +00:00
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useQuery } from '@tanstack/react-query';
|
|
import { ProjectFileListResponse } from 'ontime-types';
|
|
|
|
import { queryRefetchIntervalSlow } from '../../ontimeConfig';
|
|
import { PROJECT_LIST } from '../api/constants';
|
|
import { getProjects } from '../api/db';
|
|
|
|
const placeholderProjectList: ProjectFileListResponse = {
|
|
files: [],
|
|
lastLoadedProject: '',
|
|
};
|
|
|
|
export function useProjectList() {
|
|
const { data, status, refetch } = useQuery({
|
|
queryKey: PROJECT_LIST,
|
|
queryFn: getProjects,
|
|
placeholderData: (previousData, _previousQuery) => previousData,
|
|
retry: 5,
|
|
retryDelay: (attempt: number) => attempt * 2500,
|
|
refetchInterval: queryRefetchIntervalSlow,
|
|
networkMode: 'always',
|
|
});
|
|
return { data: data ?? placeholderProjectList, status, refetch };
|
|
}
|
|
|
|
export function useOrderedProjectList() {
|
|
const response = useProjectList();
|
|
const { files, lastLoadedProject } = response.data;
|
|
|
|
const reorderedProjectFiles = useMemo(() => {
|
|
if (!files.length) return [];
|
|
|
|
const currentlyLoadedIndex = files.findIndex((project) => project.filename === lastLoadedProject);
|
|
|
|
if (currentlyLoadedIndex === -1) return files;
|
|
|
|
const projectFiles = [...files];
|
|
const current = projectFiles.splice(currentlyLoadedIndex, 1)[0];
|
|
|
|
return [current, ...projectFiles];
|
|
}, [files, lastLoadedProject]);
|
|
|
|
return { ...response, data: { reorderedProjectFiles, lastLoadedProject: response.data.lastLoadedProject } };
|
|
}
|