mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-24 09:48:28 +02:00
Fix dropdown refresh after Git init
This commit is contained in:
@@ -52,7 +52,7 @@ export function useGit(dir: string) {
|
|||||||
onSuccess,
|
onSuccess,
|
||||||
}),
|
}),
|
||||||
commitAndPush: useMutation<PushResult, string, { message: string }>({
|
commitAndPush: useMutation<PushResult, string, { message: string }>({
|
||||||
mutationKey: ['git', 'commitpush', dir],
|
mutationKey: ['git', 'commit_push', dir],
|
||||||
mutationFn: async (args) => {
|
mutationFn: async (args) => {
|
||||||
await invoke('plugin:yaak-git|commit', { dir, ...args });
|
await invoke('plugin:yaak-git|commit', { dir, ...args });
|
||||||
return invoke('plugin:yaak-git|push', { dir });
|
return invoke('plugin:yaak-git|push', { dir });
|
||||||
@@ -79,10 +79,18 @@ export function useGit(dir: string) {
|
|||||||
mutationFn: (args) => invoke('plugin:yaak-git|unstage', { dir, ...args }),
|
mutationFn: (args) => invoke('plugin:yaak-git|unstage', { dir, ...args }),
|
||||||
onSuccess,
|
onSuccess,
|
||||||
}),
|
}),
|
||||||
|
init: useGitInit(),
|
||||||
},
|
},
|
||||||
] as const;
|
] as const;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function gitInit(dir: string) {
|
export function useGitInit() {
|
||||||
await invoke('plugin:yaak-git|initialize', { dir });
|
const queryClient = useQueryClient();
|
||||||
|
const onSuccess = () => queryClient.invalidateQueries({ queryKey: ['git'] });
|
||||||
|
|
||||||
|
return useMutation<void, string, { dir: string }>({
|
||||||
|
mutationKey: ['git', 'init'],
|
||||||
|
mutationFn: (args) => invoke('plugin:yaak-git|initialize', { ...args }),
|
||||||
|
onSuccess,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { gitInit } from '@yaakapp-internal/git';
|
import { useGitInit } from '@yaakapp-internal/git';
|
||||||
import type { WorkspaceMeta } from '@yaakapp-internal/models';
|
import type { WorkspaceMeta } from '@yaakapp-internal/models';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { upsertWorkspace } from '../commands/upsertWorkspace';
|
import { upsertWorkspace } from '../commands/upsertWorkspace';
|
||||||
@@ -17,6 +17,7 @@ interface Props {
|
|||||||
|
|
||||||
export function CreateWorkspaceDialog({ hide }: Props) {
|
export function CreateWorkspaceDialog({ hide }: Props) {
|
||||||
const [name, setName] = useState<string>('');
|
const [name, setName] = useState<string>('');
|
||||||
|
const gitInit = useGitInit();
|
||||||
const [syncConfig, setSyncConfig] = useState<{
|
const [syncConfig, setSyncConfig] = useState<{
|
||||||
filePath: string | null;
|
filePath: string | null;
|
||||||
initGit?: boolean;
|
initGit?: boolean;
|
||||||
@@ -44,7 +45,7 @@ export function CreateWorkspaceDialog({ hide }: Props) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (syncConfig.initGit && syncConfig.filePath) {
|
if (syncConfig.initGit && syncConfig.filePath) {
|
||||||
gitInit(syncConfig.filePath).catch((err) => {
|
gitInit.mutateAsync({ dir: syncConfig.filePath }).catch((err) => {
|
||||||
showErrorToast('git-init-error', String(err));
|
showErrorToast('git-init-error', String(err));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { gitInit, useGit } from '@yaakapp-internal/git';
|
import { useGit } from '@yaakapp-internal/git';
|
||||||
import type { WorkspaceMeta } from '@yaakapp-internal/models';
|
import type { WorkspaceMeta } from '@yaakapp-internal/models';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import type { HTMLAttributes } from 'react';
|
import type { HTMLAttributes } from 'react';
|
||||||
@@ -34,8 +34,10 @@ export function GitDropdown() {
|
|||||||
|
|
||||||
function SyncDropdownWithSyncDir({ syncDir }: { syncDir: string }) {
|
function SyncDropdownWithSyncDir({ syncDir }: { syncDir: string }) {
|
||||||
const workspace = useActiveWorkspace();
|
const workspace = useActiveWorkspace();
|
||||||
const [{ status, log }, { branch, deleteBranch, fetchAll, mergeBranch, push, pull, checkout }] =
|
const [
|
||||||
useGit(syncDir);
|
{ status, log },
|
||||||
|
{ branch, deleteBranch, fetchAll, mergeBranch, push, pull, checkout, init },
|
||||||
|
] = useGit(syncDir);
|
||||||
|
|
||||||
const localBranches = status.data?.localBranches ?? [];
|
const localBranches = status.data?.localBranches ?? [];
|
||||||
const remoteBranches = status.data?.remoteBranches ?? [];
|
const remoteBranches = status.data?.remoteBranches ?? [];
|
||||||
@@ -50,7 +52,9 @@ function SyncDropdownWithSyncDir({ syncDir }: { syncDir: string }) {
|
|||||||
|
|
||||||
const noRepo = status.error?.includes('not found');
|
const noRepo = status.error?.includes('not found');
|
||||||
if (noRepo) {
|
if (noRepo) {
|
||||||
return <SetupGitDropdown workspaceId={workspace.id} initRepo={() => gitInit(syncDir)} />;
|
return (
|
||||||
|
<SetupGitDropdown workspaceId={workspace.id} initRepo={() => init.mutate({ dir: syncDir })} />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const tryCheckout = (branch: string, force: boolean) => {
|
const tryCheckout = (branch: string, force: boolean) => {
|
||||||
|
|||||||
18
src-web/lib/queryClient.ts
Normal file
18
src-web/lib/queryClient.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import {QueryCache, QueryClient} from "@tanstack/react-query";
|
||||||
|
|
||||||
|
export const queryClient = new QueryClient({
|
||||||
|
queryCache: new QueryCache({
|
||||||
|
onError: (err, query) => {
|
||||||
|
console.log('Query client error', { err, query });
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
defaultOptions: {
|
||||||
|
queries: {
|
||||||
|
retry: false,
|
||||||
|
networkMode: 'always',
|
||||||
|
refetchOnWindowFocus: true,
|
||||||
|
refetchOnReconnect: false,
|
||||||
|
refetchOnMount: false, // Don't refetch when a hook mounts
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
import { QueryClientProvider } from '@tanstack/react-query';
|
||||||
import { createRootRoute, Outlet } from '@tanstack/react-router';
|
import { createRootRoute, Outlet } from '@tanstack/react-router';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { domAnimation, LazyMotion, MotionConfig } from 'motion/react';
|
|
||||||
import { Provider as JotaiProvider } from 'jotai';
|
import { Provider as JotaiProvider } from 'jotai';
|
||||||
|
import { domAnimation, LazyMotion, MotionConfig } from 'motion/react';
|
||||||
import React, { Suspense } from 'react';
|
import React, { Suspense } from 'react';
|
||||||
import { DndProvider } from 'react-dnd';
|
import { DndProvider } from 'react-dnd';
|
||||||
import { HTML5Backend } from 'react-dnd-html5-backend';
|
import { HTML5Backend } from 'react-dnd-html5-backend';
|
||||||
@@ -13,23 +13,7 @@ import RouteError from '../components/RouteError';
|
|||||||
import { Toasts } from '../components/Toasts';
|
import { Toasts } from '../components/Toasts';
|
||||||
import { useOsInfo } from '../hooks/useOsInfo';
|
import { useOsInfo } from '../hooks/useOsInfo';
|
||||||
import { jotaiStore } from '../lib/jotai';
|
import { jotaiStore } from '../lib/jotai';
|
||||||
|
import { queryClient } from '../lib/queryClient';
|
||||||
const queryClient = new QueryClient({
|
|
||||||
queryCache: new QueryCache({
|
|
||||||
onError: (err, query) => {
|
|
||||||
console.log('Query client error', { err, query });
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
defaultOptions: {
|
|
||||||
queries: {
|
|
||||||
retry: false,
|
|
||||||
networkMode: 'always',
|
|
||||||
refetchOnWindowFocus: true,
|
|
||||||
refetchOnReconnect: false,
|
|
||||||
refetchOnMount: false, // Don't refetch when a hook mounts
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const TanStackRouterDevtools =
|
const TanStackRouterDevtools =
|
||||||
|
|||||||
Reference in New Issue
Block a user