Replace hacky refetchTrigger with useAsyncFn

Signed-off-by: Erik Engervall <erik.engervall@gmail.com>
This commit is contained in:
Erik Engervall
2021-05-06 14:16:59 +02:00
parent d02e5ee761
commit 73a2c649cb
4 changed files with 15 additions and 17 deletions
@@ -40,7 +40,7 @@ export const ResponseStepDialog = ({
responseSteps,
title,
}: DialogProps) => {
const { setRefetchTrigger } = useRefetchContext();
const { fetchGitBatchInfo } = useRefetchContext();
return (
<MaterialDialog
@@ -60,7 +60,7 @@ export const ResponseStepDialog = ({
<DialogActions style={{ padding: 20 }}>
<Button
onClick={() => setRefetchTrigger(Date.now())}
onClick={() => fetchGitBatchInfo()}
disabled={progress < 100}
variant="contained"
size="large"
@@ -19,11 +19,7 @@ import { createContext, useContext } from 'react';
import { GitReleaseManagerError } from '../errors/GitReleaseManagerError';
export const RefetchContext = createContext<
| {
refetchTrigger: number;
setRefetchTrigger: React.Dispatch<React.SetStateAction<number>>;
}
| undefined
{ fetchGitBatchInfo: () => any } | undefined
>(undefined);
export const useRefetchContext = () => {
@@ -34,6 +30,6 @@ export const useRefetchContext = () => {
}
return {
setRefetchTrigger: refetch.setRefetchTrigger,
fetchGitBatchInfo: refetch.fetchGitBatchInfo,
};
};
@@ -37,11 +37,9 @@ export function Features({
}) {
const pluginApiClient = useApi(gitReleaseManagerApiRef);
const { project } = useProjectContext();
const [refetchTrigger, setRefetchTrigger] = useState(0);
const { gitBatchInfo } = useGetGitBatchInfo({
const { gitBatchInfo, fetchGitBatchInfo } = useGetGitBatchInfo({
pluginApiClient,
project,
refetchTrigger,
});
const { versioningStrategyMatches } = useVersioningStrategyMatchesRepoTags({
@@ -90,7 +88,7 @@ export function Features({
}
return (
<RefetchContext.Provider value={{ refetchTrigger, setRefetchTrigger }}>
<RefetchContext.Provider value={{ fetchGitBatchInfo }}>
<ErrorBoundary>
{gitBatchInfo.value.latestRelease && !versioningStrategyMatches && (
<Alert severity="warning" style={{ marginBottom: 20 }}>
@@ -14,7 +14,8 @@
* limitations under the License.
*/
import { useAsync } from 'react-use';
import { useEffect } from 'react';
import { useAsyncFn } from 'react-use';
import { GitReleaseApi } from '../api/GitReleaseClient';
import { Project } from '../contexts/ProjectContext';
@@ -22,15 +23,13 @@ import { Project } from '../contexts/ProjectContext';
interface GetGitBatchInfo {
project: Project;
pluginApiClient: GitReleaseApi;
refetchTrigger: number;
}
export const useGetGitBatchInfo = ({
project,
pluginApiClient,
refetchTrigger,
}: GetGitBatchInfo) => {
const gitBatchInfo = useAsync(async () => {
const [gitBatchInfo, fetchGitBatchInfo] = useAsyncFn(async () => {
const [{ repository }, { latestRelease }] = await Promise.all([
pluginApiClient.getRepository({
owner: project.owner,
@@ -61,9 +60,14 @@ export const useGetGitBatchInfo = ({
releaseBranch,
repository,
};
}, [project, refetchTrigger]);
});
useEffect(() => {
fetchGitBatchInfo();
}, [fetchGitBatchInfo, project]);
return {
gitBatchInfo,
fetchGitBatchInfo,
};
};